1: | <?php
|
2: | namespace Opencart\Admin\Controller\Marketing;
|
3: | |
4: | |
5: | |
6: | |
7: |
|
8: | class Affiliate extends \Opencart\System\Engine\Controller {
|
9: | |
10: | |
11: | |
12: | |
13: |
|
14: | public function index(): void {
|
15: | $this->load->language('marketing/affiliate');
|
16: |
|
17: | $this->document->setTitle($this->language->get('heading_title'));
|
18: |
|
19: | if (isset($this->request->get['filter_customer'])) {
|
20: | $filter_customer = $this->request->get['filter_customer'];
|
21: | } else {
|
22: | $filter_customer = '';
|
23: | }
|
24: |
|
25: | if (isset($this->request->get['filter_tracking'])) {
|
26: | $filter_tracking = $this->request->get['filter_tracking'];
|
27: | } else {
|
28: | $filter_tracking = '';
|
29: | }
|
30: |
|
31: | if (isset($this->request->get['filter_payment_method'])) {
|
32: | $filter_payment_method = (string)$this->request->get['filter_payment_method'];
|
33: | } else {
|
34: | $filter_payment_method = '';
|
35: | }
|
36: |
|
37: | if (isset($this->request->get['filter_commission'])) {
|
38: | $filter_commission = $this->request->get['filter_commission'];
|
39: | } else {
|
40: | $filter_commission = '';
|
41: | }
|
42: |
|
43: | if (isset($this->request->get['filter_date_from'])) {
|
44: | $filter_date_from = $this->request->get['filter_date_from'];
|
45: | } else {
|
46: | $filter_date_from = '';
|
47: | }
|
48: |
|
49: | if (isset($this->request->get['filter_date_to'])) {
|
50: | $filter_date_to = $this->request->get['filter_date_to'];
|
51: | } else {
|
52: | $filter_date_to = '';
|
53: | }
|
54: |
|
55: | if (isset($this->request->get['filter_status'])) {
|
56: | $filter_status = $this->request->get['filter_status'];
|
57: | } else {
|
58: | $filter_status = '';
|
59: | }
|
60: |
|
61: | if (isset($this->request->get['limit'])) {
|
62: | $limit = (int)$this->request->get['limit'];
|
63: | } else {
|
64: | $limit = $this->config->get('config_pagination');
|
65: | }
|
66: |
|
67: | $url = '';
|
68: |
|
69: | if (isset($this->request->get['filter_customer'])) {
|
70: | $url .= '&filter_customer=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8'));
|
71: | }
|
72: |
|
73: | if (isset($this->request->get['filter_tracking'])) {
|
74: | $url .= '&filter_tracking=' . $this->request->get['filter_tracking'];
|
75: | }
|
76: |
|
77: | if (isset($this->request->get['filter_payment_method'])) {
|
78: | $url .= '&filter_payment_method=' . $this->request->get['filter_payment_method'];
|
79: | }
|
80: |
|
81: | if (isset($this->request->get['filter_commission'])) {
|
82: | $url .= '&filter_commission=' . $this->request->get['filter_commission'];
|
83: | }
|
84: |
|
85: | if (isset($this->request->get['filter_date_from'])) {
|
86: | $url .= '&filter_date_from=' . $this->request->get['filter_date_from'];
|
87: | }
|
88: |
|
89: | if (isset($this->request->get['filter_date_to'])) {
|
90: | $url .= '&filter_date_to=' . $this->request->get['filter_date_to'];
|
91: | }
|
92: |
|
93: | if (isset($this->request->get['filter_status'])) {
|
94: | $url .= '&filter_status=' . $this->request->get['filter_status'];
|
95: | }
|
96: |
|
97: | if (isset($this->request->get['sort'])) {
|
98: | $url .= '&sort=' . $this->request->get['sort'];
|
99: | }
|
100: |
|
101: | if (isset($this->request->get['order'])) {
|
102: | $url .= '&order=' . $this->request->get['order'];
|
103: | }
|
104: |
|
105: | if (isset($this->request->get['page'])) {
|
106: | $url .= '&page=' . $this->request->get['page'];
|
107: | }
|
108: |
|
109: | if (isset($this->request->get['limit'])) {
|
110: | $url .= '&limit=' . $this->request->get['limit'];
|
111: | }
|
112: |
|
113: | $data['breadcrumbs'] = [];
|
114: |
|
115: | $data['breadcrumbs'][] = [
|
116: | 'text' => $this->language->get('text_home'),
|
117: | 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'])
|
118: | ];
|
119: |
|
120: | $data['breadcrumbs'][] = [
|
121: | 'text' => $this->language->get('heading_title'),
|
122: | 'href' => $this->url->link('marketing/affiliate', 'user_token=' . $this->session->data['user_token'] . $url)
|
123: | ];
|
124: |
|
125: | $data['csv'] = $this->url->link('marketing/affiliate.csv', 'user_token=' . $this->session->data['user_token']);
|
126: | $data['complete'] = $this->url->link('marketing/affiliate.complete', 'user_token=' . $this->session->data['user_token']);
|
127: | $data['add'] = $this->url->link('marketing/affiliate.form', 'user_token=' . $this->session->data['user_token'] . $url);
|
128: | $data['delete'] = $this->url->link('marketing/affiliate.delete', 'user_token=' . $this->session->data['user_token']);
|
129: |
|
130: | $data['list'] = $this->getList();
|
131: |
|
132: | $data['payment_methods'] = [];
|
133: |
|
134: | $data['payment_methods'][] = [
|
135: | 'text' => $this->language->get('text_cheque'),
|
136: | 'value' => 'cheque'
|
137: | ];
|
138: |
|
139: | $data['payment_methods'][] = [
|
140: | 'text' => $this->language->get('text_paypal'),
|
141: | 'value' => 'paypal'
|
142: | ];
|
143: |
|
144: | $data['payment_methods'][] = [
|
145: | 'text' => $this->language->get('text_bank'),
|
146: | 'value' => 'bank'
|
147: | ];
|
148: |
|
149: | $data['limits'] = [];
|
150: |
|
151: | $data['limits'][] = [
|
152: | 'text' => $this->config->get('config_pagination'),
|
153: | 'value' => $this->config->get('config_pagination')
|
154: | ];
|
155: |
|
156: | $data['limits'][] = [
|
157: | 'text' => 100,
|
158: | 'value' => 100
|
159: | ];
|
160: |
|
161: | $data['limits'][] = [
|
162: | 'text' => 200,
|
163: | 'value' => 200
|
164: | ];
|
165: |
|
166: | $data['limits'][] = [
|
167: | 'text' => 400,
|
168: | 'value' => 400
|
169: | ];
|
170: |
|
171: | $data['limits'][] = [
|
172: | 'text' => 800,
|
173: | 'value' => 800
|
174: | ];
|
175: |
|
176: | $data['filter_customer'] = $filter_customer;
|
177: | $data['filter_tracking'] = $filter_tracking;
|
178: | $data['filter_payment_method'] = $filter_payment_method;
|
179: | $data['filter_commission'] = $filter_commission;
|
180: | $data['filter_date_from'] = $filter_date_from;
|
181: | $data['filter_date_to'] = $filter_date_to;
|
182: | $data['filter_status'] = $filter_status;
|
183: |
|
184: | $data['limit'] = $limit;
|
185: |
|
186: | $data['user_token'] = $this->session->data['user_token'];
|
187: |
|
188: | $data['header'] = $this->load->controller('common/header');
|
189: | $data['column_left'] = $this->load->controller('common/column_left');
|
190: | $data['footer'] = $this->load->controller('common/footer');
|
191: |
|
192: | $this->response->setOutput($this->load->view('marketing/affiliate', $data));
|
193: | }
|
194: |
|
195: | |
196: | |
197: | |
198: | |
199: |
|
200: | public function list(): void {
|
201: | $this->load->language('marketing/affiliate');
|
202: |
|
203: | $this->response->setOutput($this->getList());
|
204: | }
|
205: |
|
206: | |
207: | |
208: | |
209: | |
210: |
|
211: | protected function getList(): string {
|
212: | if (isset($this->request->get['filter_customer'])) {
|
213: | $filter_customer = (string)$this->request->get['filter_customer'];
|
214: | } else {
|
215: | $filter_customer = '';
|
216: | }
|
217: |
|
218: | if (isset($this->request->get['filter_tracking'])) {
|
219: | $filter_tracking = (string)$this->request->get['filter_tracking'];
|
220: | } else {
|
221: | $filter_tracking = '';
|
222: | }
|
223: |
|
224: | if (isset($this->request->get['filter_payment_method'])) {
|
225: | $filter_payment_method = (string)$this->request->get['filter_payment_method'];
|
226: | } else {
|
227: | $filter_payment_method = '';
|
228: | }
|
229: |
|
230: | if (isset($this->request->get['filter_commission'])) {
|
231: | $filter_commission = $this->request->get['filter_commission'];
|
232: | } else {
|
233: | $filter_commission = '';
|
234: | }
|
235: |
|
236: | if (isset($this->request->get['filter_date_from'])) {
|
237: | $filter_date_from = (string)$this->request->get['filter_date_from'];
|
238: | } else {
|
239: | $filter_date_from = '';
|
240: | }
|
241: |
|
242: | if (isset($this->request->get['filter_date_to'])) {
|
243: | $filter_date_to = (string)$this->request->get['filter_date_to'];
|
244: | } else {
|
245: | $filter_date_to = '';
|
246: | }
|
247: |
|
248: | if (isset($this->request->get['filter_status'])) {
|
249: | $filter_status = $this->request->get['filter_status'];
|
250: | } else {
|
251: | $filter_status = '';
|
252: | }
|
253: |
|
254: | if (isset($this->request->get['sort'])) {
|
255: | $sort = (string)$this->request->get['sort'];
|
256: | } else {
|
257: | $sort = 'name';
|
258: | }
|
259: |
|
260: | if (isset($this->request->get['order'])) {
|
261: | $order = (string)$this->request->get['order'];
|
262: | } else {
|
263: | $order = 'ASC';
|
264: | }
|
265: |
|
266: | if (isset($this->request->get['page'])) {
|
267: | $page = (int)$this->request->get['page'];
|
268: | } else {
|
269: | $page = 1;
|
270: | }
|
271: |
|
272: | if (isset($this->request->get['limit'])) {
|
273: | $limit = (int)$this->request->get['limit'];
|
274: | } else {
|
275: | $limit = $this->config->get('config_pagination');
|
276: | }
|
277: |
|
278: | $url = '';
|
279: |
|
280: | if (isset($this->request->get['filter_customer'])) {
|
281: | $url .= '&filter_customer=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8'));
|
282: | }
|
283: |
|
284: | if (isset($this->request->get['filter_tracking'])) {
|
285: | $url .= '&filter_tracking=' . $this->request->get['filter_tracking'];
|
286: | }
|
287: |
|
288: | if (isset($this->request->get['filter_payment_method'])) {
|
289: | $url .= '&filter_payment_method=' . $this->request->get['filter_payment_method'];
|
290: | }
|
291: |
|
292: | if (isset($this->request->get['filter_commission'])) {
|
293: | $url .= '&filter_commission=' . $this->request->get['filter_commission'];
|
294: | }
|
295: |
|
296: | if (isset($this->request->get['filter_date_from'])) {
|
297: | $url .= '&filter_date_from=' . $this->request->get['filter_date_from'];
|
298: | }
|
299: |
|
300: | if (isset($this->request->get['filter_date_to'])) {
|
301: | $url .= '&filter_date_to=' . $this->request->get['filter_date_to'];
|
302: | }
|
303: |
|
304: | if (isset($this->request->get['filter_status'])) {
|
305: | $url .= '&filter_status=' . $this->request->get['filter_status'];
|
306: | }
|
307: |
|
308: | if (isset($this->request->get['sort'])) {
|
309: | $url .= '&sort=' . $this->request->get['sort'];
|
310: | }
|
311: |
|
312: | if (isset($this->request->get['order'])) {
|
313: | $url .= '&order=' . $this->request->get['order'];
|
314: | }
|
315: |
|
316: | if (isset($this->request->get['page'])) {
|
317: | $url .= '&page=' . $this->request->get['page'];
|
318: | }
|
319: |
|
320: | if (isset($this->request->get['limit'])) {
|
321: | $url .= '&limit=' . $this->request->get['limit'];
|
322: | }
|
323: |
|
324: | $data['action'] = $this->url->link('marketing/affiliate.list', 'user_token=' . $this->session->data['user_token'] . $url);
|
325: |
|
326: | $data['affiliates'] = [];
|
327: |
|
328: | $filter_data = [
|
329: | 'filter_name' => $filter_customer,
|
330: | 'filter_tracking' => $filter_tracking,
|
331: | 'filter_payment_method' => $filter_payment_method,
|
332: | 'filter_commission' => $filter_commission,
|
333: | 'filter_date_from' => $filter_date_from,
|
334: | 'filter_date_to' => $filter_date_to,
|
335: | 'filter_status' => $filter_status,
|
336: | 'sort' => $sort,
|
337: | 'order' => $order,
|
338: | 'start' => ($page - 1) * $limit,
|
339: | 'limit' => $limit
|
340: | ];
|
341: |
|
342: | $this->load->model('marketing/affiliate');
|
343: |
|
344: | $results = $this->model_marketing_affiliate->getAffiliates($filter_data);
|
345: |
|
346: | foreach ($results as $result) {
|
347: | $data['affiliates'][] = [
|
348: | 'customer_id' => $result['customer_id'],
|
349: | 'name' => $result['name'],
|
350: | 'tracking' => $result['tracking'],
|
351: | 'commission' => $result['commission'],
|
352: | 'balance' => $this->currency->format((int)$result['balance'], $this->config->get('config_currency')),
|
353: | 'status' => $result['status'],
|
354: | 'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
|
355: | 'customer' => $this->url->link('customer/customer.form', 'user_token=' . $this->session->data['user_token'] . '&customer_id=' . $result['customer_id']),
|
356: | 'edit' => $this->url->link('marketing/affiliate.form', 'user_token=' . $this->session->data['user_token'] . '&customer_id=' . $result['customer_id'] . $url)
|
357: | ];
|
358: | }
|
359: |
|
360: | $url = '';
|
361: |
|
362: | if (isset($this->request->get['filter_customer'])) {
|
363: | $url .= '&filter_customer=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8'));
|
364: | }
|
365: |
|
366: | if (isset($this->request->get['filter_tracking'])) {
|
367: | $url .= '&filter_tracking=' . $this->request->get['filter_tracking'];
|
368: | }
|
369: |
|
370: | if (isset($this->request->get['filter_payment_method'])) {
|
371: | $url .= '&filter_payment_method=' . $this->request->get['filter_payment_method'];
|
372: | }
|
373: |
|
374: | if (isset($this->request->get['filter_commission'])) {
|
375: | $url .= '&filter_commission=' . $this->request->get['filter_commission'];
|
376: | }
|
377: |
|
378: | if (isset($this->request->get['filter_date_from'])) {
|
379: | $url .= '&filter_date_from=' . $this->request->get['filter_date_from'];
|
380: | }
|
381: |
|
382: | if (isset($this->request->get['filter_date_to'])) {
|
383: | $url .= '&filter_date_to=' . $this->request->get['filter_date_to'];
|
384: | }
|
385: |
|
386: | if (isset($this->request->get['filter_status'])) {
|
387: | $url .= '&filter_status=' . $this->request->get['filter_status'];
|
388: | }
|
389: |
|
390: | if ($order == 'ASC') {
|
391: | $url .= '&order=DESC';
|
392: | } else {
|
393: | $url .= '&order=ASC';
|
394: | }
|
395: |
|
396: | if (isset($this->request->get['limit'])) {
|
397: | $url .= '&limit=' . $this->request->get['limit'];
|
398: | }
|
399: |
|
400: | $data['sort_name'] = $this->url->link('marketing/affiliate.list', 'user_token=' . $this->session->data['user_token'] . '&sort=name' . $url);
|
401: | $data['sort_tracking'] = $this->url->link('marketing/affiliate.list', 'user_token=' . $this->session->data['user_token'] . '&sort=ca.tracking' . $url);
|
402: | $data['sort_commission'] = $this->url->link('marketing/affiliate.list', 'user_token=' . $this->session->data['user_token'] . '&sort=ca.commission' . $url);
|
403: | $data['sort_balance'] = $this->url->link('marketing/affiliate.list', 'user_token=' . $this->session->data['user_token'] . '&sort=ca.balance' . $url);
|
404: | $data['sort_date_added'] = $this->url->link('marketing/affiliate.list', 'user_token=' . $this->session->data['user_token'] . '&sort=ca.date_added' . $url);
|
405: |
|
406: | $url = '';
|
407: |
|
408: | if (isset($this->request->get['filter_customer'])) {
|
409: | $url .= '&filter_customer=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8'));
|
410: | }
|
411: |
|
412: | if (isset($this->request->get['filter_tracking'])) {
|
413: | $url .= '&filter_tracking=' . $this->request->get['filter_tracking'];
|
414: | }
|
415: |
|
416: | if (isset($this->request->get['filter_payment_method'])) {
|
417: | $url .= '&filter_payment_method=' . $this->request->get['filter_payment_method'];
|
418: | }
|
419: |
|
420: | if (isset($this->request->get['filter_commission'])) {
|
421: | $url .= '&filter_commission=' . $this->request->get['filter_commission'];
|
422: | }
|
423: |
|
424: | if (isset($this->request->get['filter_date_from'])) {
|
425: | $url .= '&filter_date_from=' . $this->request->get['filter_date_from'];
|
426: | }
|
427: |
|
428: | if (isset($this->request->get['filter_date_to'])) {
|
429: | $url .= '&filter_date_to=' . $this->request->get['filter_date_to'];
|
430: | }
|
431: |
|
432: | if (isset($this->request->get['filter_status'])) {
|
433: | $url .= '&filter_status=' . $this->request->get['filter_status'];
|
434: | }
|
435: |
|
436: | if (isset($this->request->get['sort'])) {
|
437: | $url .= '&sort=' . $this->request->get['sort'];
|
438: | }
|
439: |
|
440: | if (isset($this->request->get['order'])) {
|
441: | $url .= '&order=' . $this->request->get['order'];
|
442: | }
|
443: |
|
444: | if (isset($this->request->get['limit'])) {
|
445: | $url .= '&limit=' . $this->request->get['limit'];
|
446: | }
|
447: |
|
448: | $affiliate_total = $this->model_marketing_affiliate->getTotalAffiliates($filter_data);
|
449: |
|
450: | $data['pagination'] = $this->load->controller('common/pagination', [
|
451: | 'total' => $affiliate_total,
|
452: | 'page' => $page,
|
453: | 'limit' => $this->config->get('config_pagination_admin'),
|
454: | 'url' => $this->url->link('marketing/affiliate.list', 'user_token=' . $this->session->data['user_token'] . $url . '&page={page}')
|
455: | ]);
|
456: |
|
457: | $data['results'] = sprintf($this->language->get('text_pagination'), ($affiliate_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($affiliate_total - $limit)) ? $affiliate_total : ((($page - 1) * $limit) + $limit), $affiliate_total, ceil($affiliate_total / $limit));
|
458: |
|
459: | $data['sort'] = $sort;
|
460: | $data['order'] = $order;
|
461: | $data['limit'] = $limit;
|
462: |
|
463: | return $this->load->view('marketing/affiliate_list', $data);
|
464: | }
|
465: |
|
466: | |
467: | |
468: | |
469: | |
470: |
|
471: | public function form(): void {
|
472: | $this->load->language('marketing/affiliate');
|
473: |
|
474: | $this->document->setTitle($this->language->get('heading_title'));
|
475: |
|
476: | $data['text_form'] = !isset($this->request->get['customer_id']) ? $this->language->get('text_add') : $this->language->get('text_edit');
|
477: |
|
478: | $data['error_upload_size'] = sprintf($this->language->get('error_upload_size'), $this->config->get('config_file_max_size'));
|
479: |
|
480: | $data['config_file_max_size'] = ((int)$this->config->get('config_file_max_size') * 1024 * 1024);
|
481: |
|
482: | $url = '';
|
483: |
|
484: | if (isset($this->request->get['filter_customer'])) {
|
485: | $url .= '&filter_customer=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8'));
|
486: | }
|
487: |
|
488: | if (isset($this->request->get['filter_tracking'])) {
|
489: | $url .= '&filter_tracking=' . $this->request->get['filter_tracking'];
|
490: | }
|
491: |
|
492: | if (isset($this->request->get['filter_payment_method'])) {
|
493: | $url .= '&filter_payment_method=' . $this->request->get['filter_payment_method'];
|
494: | }
|
495: |
|
496: | if (isset($this->request->get['filter_commission'])) {
|
497: | $url .= '&filter_commission=' . $this->request->get['filter_commission'];
|
498: | }
|
499: |
|
500: | if (isset($this->request->get['filter_date_from'])) {
|
501: | $url .= '&filter_date_from=' . $this->request->get['filter_date_from'];
|
502: | }
|
503: |
|
504: | if (isset($this->request->get['filter_date_to'])) {
|
505: | $url .= '&filter_date_to=' . $this->request->get['filter_date_to'];
|
506: | }
|
507: |
|
508: | if (isset($this->request->get['filter_status'])) {
|
509: | $url .= '&filter_status=' . $this->request->get['filter_status'];
|
510: | }
|
511: |
|
512: | if (isset($this->request->get['sort'])) {
|
513: | $url .= '&sort=' . $this->request->get['sort'];
|
514: | }
|
515: |
|
516: | if (isset($this->request->get['order'])) {
|
517: | $url .= '&order=' . $this->request->get['order'];
|
518: | }
|
519: |
|
520: | if (isset($this->request->get['page'])) {
|
521: | $url .= '&page=' . $this->request->get['page'];
|
522: | }
|
523: |
|
524: | if (isset($this->request->get['limit'])) {
|
525: | $url .= '&limit=' . $this->request->get['limit'];
|
526: | }
|
527: |
|
528: | $data['breadcrumbs'] = [];
|
529: |
|
530: | $data['breadcrumbs'][] = [
|
531: | 'text' => $this->language->get('text_home'),
|
532: | 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'])
|
533: | ];
|
534: |
|
535: | $data['breadcrumbs'][] = [
|
536: | 'text' => $this->language->get('heading_title'),
|
537: | 'href' => $this->url->link('marketing/affiliate', 'user_token=' . $this->session->data['user_token'] . $url)
|
538: | ];
|
539: |
|
540: | $data['save'] = $this->url->link('marketing/affiliate.save', 'user_token=' . $this->session->data['user_token']);
|
541: | $data['back'] = $this->url->link('marketing/affiliate', 'user_token=' . $this->session->data['user_token'] . $url);
|
542: | $data['upload'] = $this->url->link('tool/upload.upload', 'user_token=' . $this->session->data['user_token']);
|
543: |
|
544: |
|
545: | if (isset($this->request->get['customer_id'])) {
|
546: | $this->load->model('marketing/affiliate');
|
547: |
|
548: | $affiliate_info = $this->model_marketing_affiliate->getAffiliate($this->request->get['customer_id']);
|
549: | }
|
550: |
|
551: | if (isset($this->request->get['customer_id'])) {
|
552: | $data['customer_id'] = (int)$this->request->get['customer_id'];
|
553: | } else {
|
554: | $data['customer_id'] = 0;
|
555: | }
|
556: |
|
557: | if (!empty($affiliate_info)) {
|
558: | $data['customer'] = $affiliate_info['customer'];
|
559: | } else {
|
560: | $data['customer'] = '';
|
561: | }
|
562: |
|
563: | if (!empty($affiliate_info)) {
|
564: | $data['customer_group_id'] = $affiliate_info['customer_group_id'];
|
565: | } else {
|
566: | $data['customer_group_id'] = '';
|
567: | }
|
568: |
|
569: | if (!empty($affiliate_info)) {
|
570: | $data['company'] = $affiliate_info['company'];
|
571: | } else {
|
572: | $data['company'] = '';
|
573: | }
|
574: |
|
575: | if (!empty($affiliate_info)) {
|
576: | $data['website'] = $affiliate_info['website'];
|
577: | } else {
|
578: | $data['website'] = '';
|
579: | }
|
580: |
|
581: | if (!empty($affiliate_info)) {
|
582: | $data['tracking'] = $affiliate_info['tracking'];
|
583: | } else {
|
584: | $data['tracking'] = oc_token(10);
|
585: | }
|
586: |
|
587: | if (!empty($affiliate_info)) {
|
588: | $data['commission'] = $affiliate_info['commission'];
|
589: | } else {
|
590: | $data['commission'] = $this->config->get('config_affiliate_commission');
|
591: | }
|
592: |
|
593: | if (!empty($affiliate_info)) {
|
594: | $data['status'] = $affiliate_info['status'];
|
595: | } else {
|
596: | $data['status'] = '';
|
597: | }
|
598: |
|
599: | if (!empty($affiliate_info)) {
|
600: | $data['tax'] = $affiliate_info['tax'];
|
601: | } else {
|
602: | $data['tax'] = '';
|
603: | }
|
604: |
|
605: | if (!empty($affiliate_info)) {
|
606: | $data['payment_method'] = $affiliate_info['payment_method'];
|
607: | } else {
|
608: | $data['payment_method'] = 'cheque';
|
609: | }
|
610: |
|
611: | if (!empty($affiliate_info)) {
|
612: | $data['cheque'] = $affiliate_info['cheque'];
|
613: | } else {
|
614: | $data['cheque'] = '';
|
615: | }
|
616: |
|
617: | if (!empty($affiliate_info)) {
|
618: | $data['paypal'] = $affiliate_info['paypal'];
|
619: | } else {
|
620: | $data['paypal'] = '';
|
621: | }
|
622: |
|
623: | if (!empty($affiliate_info)) {
|
624: | $data['bank_name'] = $affiliate_info['bank_name'];
|
625: | } else {
|
626: | $data['bank_name'] = '';
|
627: | }
|
628: |
|
629: | if (!empty($affiliate_info)) {
|
630: | $data['bank_branch_number'] = $affiliate_info['bank_branch_number'];
|
631: | } else {
|
632: | $data['bank_branch_number'] = '';
|
633: | }
|
634: |
|
635: | if (!empty($affiliate_info)) {
|
636: | $data['bank_swift_code'] = $affiliate_info['bank_swift_code'];
|
637: | } else {
|
638: | $data['bank_swift_code'] = '';
|
639: | }
|
640: |
|
641: | if (!empty($affiliate_info)) {
|
642: | $data['bank_account_name'] = $affiliate_info['bank_account_name'];
|
643: | } else {
|
644: | $data['bank_account_name'] = '';
|
645: | }
|
646: |
|
647: | if (!empty($affiliate_info)) {
|
648: | $data['bank_account_number'] = $affiliate_info['bank_account_number'];
|
649: | } else {
|
650: | $data['bank_account_number'] = '';
|
651: | }
|
652: |
|
653: | $data['custom_fields'] = [];
|
654: |
|
655: | $filter_data = [
|
656: | 'filter_location' => 'affiliate',
|
657: | 'sort' => 'cf.sort_order',
|
658: | 'order' => 'ASC'
|
659: | ];
|
660: |
|
661: |
|
662: | $this->load->model('customer/custom_field');
|
663: |
|
664: | $custom_fields = $this->model_customer_custom_field->getCustomFields($filter_data);
|
665: |
|
666: | foreach ($custom_fields as $custom_field) {
|
667: | if ($custom_field['status']) {
|
668: | $data['custom_fields'][] = [
|
669: | 'custom_field_id' => $custom_field['custom_field_id'],
|
670: | 'custom_field_value' => $this->model_customer_custom_field->getValues($custom_field['custom_field_id']),
|
671: | 'name' => $custom_field['name'],
|
672: | 'value' => $custom_field['value'],
|
673: | 'type' => $custom_field['type'],
|
674: | 'location' => $custom_field['location'],
|
675: | 'sort_order' => $custom_field['sort_order']
|
676: | ];
|
677: | }
|
678: | }
|
679: |
|
680: | if (!empty($affiliate_info)) {
|
681: | $data['affiliate_custom_field'] = $affiliate_info['custom_field'];
|
682: | } else {
|
683: | $data['affiliate_custom_field'] = [];
|
684: | }
|
685: |
|
686: | $data['history'] = $this->load->controller('customer/customer.getHistory');
|
687: | $data['transaction'] = $this->load->controller('customer/customer.getTransaction');
|
688: | $data['report'] = $this->getReport();
|
689: |
|
690: | $data['user_token'] = $this->session->data['user_token'];
|
691: |
|
692: | $data['header'] = $this->load->controller('common/header');
|
693: | $data['column_left'] = $this->load->controller('common/column_left');
|
694: | $data['footer'] = $this->load->controller('common/footer');
|
695: |
|
696: | $this->response->setOutput($this->load->view('marketing/affiliate_form', $data));
|
697: | }
|
698: |
|
699: | |
700: | |
701: | |
702: | |
703: |
|
704: | public function save(): void {
|
705: | $this->load->language('marketing/affiliate');
|
706: |
|
707: | $json = [];
|
708: |
|
709: | if (!$this->user->hasPermission('modify', 'marketing/affiliate')) {
|
710: | $json['error']['warning'] = $this->language->get('error_permission');
|
711: | }
|
712: |
|
713: | $this->load->model('customer/customer');
|
714: |
|
715: | $customer_info = $this->model_customer_customer->getCustomer((int)$this->request->post['customer_id']);
|
716: |
|
717: | if (!$customer_info) {
|
718: | $json['error']['customer'] = $this->language->get('error_customer');
|
719: | }
|
720: |
|
721: |
|
722: | $this->load->model('marketing/affiliate');
|
723: |
|
724: | $affiliate_info = $this->model_marketing_affiliate->getAffiliate((int)$this->request->post['customer_id']);
|
725: |
|
726: | if ($affiliate_info && (!isset($this->request->post['customer_id']) || ($this->request->post['customer_id'] != $affiliate_info['customer_id']))) {
|
727: | $json['error']['warning'] = $this->language->get('error_already');
|
728: | }
|
729: |
|
730: | if (!$this->request->post['tracking']) {
|
731: | $json['error']['tracking'] = $this->language->get('error_tracking');
|
732: | }
|
733: |
|
734: | $affiliate_info = $this->model_marketing_affiliate->getAffiliateByTracking($this->request->post['tracking']);
|
735: |
|
736: | if ($affiliate_info && (!isset($this->request->post['customer_id']) || ($this->request->post['customer_id'] != $affiliate_info['customer_id']))) {
|
737: | $json['error']['tracking'] = $this->language->get('error_exists');
|
738: | }
|
739: |
|
740: |
|
741: | if (empty($this->request->post['payment_method'])) {
|
742: | $json['error']['payment_method'] = $this->language->get('error_payment_method');
|
743: | }
|
744: |
|
745: | if ($this->request->post['payment_method'] == 'cheque' && $this->request->post['cheque'] == '') {
|
746: | $json['error']['cheque'] = $this->language->get('error_cheque');
|
747: | } elseif ($this->request->post['payment_method'] == 'paypal' && ((oc_strlen($this->request->post['paypal']) > 96) || !filter_var($this->request->post['paypal'], FILTER_VALIDATE_EMAIL))) {
|
748: | $json['error']['paypal'] = $this->language->get('error_paypal');
|
749: | } elseif ($this->request->post['payment_method'] == 'bank') {
|
750: | if ($this->request->post['bank_account_name'] == '') {
|
751: | $json['error']['bank_account_name'] = $this->language->get('error_bank_account_name');
|
752: | }
|
753: |
|
754: | if ($this->request->post['bank_account_number'] == '') {
|
755: | $json['error']['bank_account_number'] = $this->language->get('error_bank_account_number');
|
756: | }
|
757: | }
|
758: |
|
759: |
|
760: | if ($customer_info) {
|
761: | $this->load->model('customer/custom_field');
|
762: |
|
763: | $filter_data = [
|
764: | 'filter_location' => 'account',
|
765: | 'filter_customer_group_id' => $this->request->post['customer_group_id'],
|
766: | 'filter_status' => 1
|
767: | ];
|
768: |
|
769: | $custom_fields = $this->model_customer_custom_field->getCustomFields(['filter_customer_group_id' => $customer_info['customer_group_id']]);
|
770: |
|
771: | foreach ($custom_fields as $custom_field) {
|
772: | if ($custom_field['status']) {
|
773: | if (($custom_field['location'] == 'affiliate') && $custom_field['required'] && empty($this->request->post['custom_field'][$custom_field['custom_field_id']])) {
|
774: | $json['error']['custom_field_' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_custom_field'), $custom_field['name']);
|
775: | } elseif (($custom_field['location'] == 'affiliate') && ($custom_field['type'] == 'text') && !empty($custom_field['validation']) && !preg_match(html_entity_decode($custom_field['validation'], ENT_QUOTES, 'UTF-8'), $this->request->post['custom_field'][$custom_field['custom_field_id']])) {
|
776: | $json['error']['custom_field_' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_regex'), $custom_field['name']);
|
777: | }
|
778: | }
|
779: | }
|
780: | }
|
781: |
|
782: | if (isset($json['error']) && !isset($json['error']['warning'])) {
|
783: | $json['error']['warning'] = $this->language->get('error_warning');
|
784: | }
|
785: |
|
786: | if (!$json) {
|
787: |
|
788: | if (!$affiliate_info) {
|
789: | $this->model_marketing_affiliate->addAffiliate($this->request->post);
|
790: | } else {
|
791: | $this->model_marketing_affiliate->editAffiliate($this->request->post['customer_id'], $this->request->post);
|
792: | }
|
793: |
|
794: | $json['success'] = $this->language->get('text_success');
|
795: | }
|
796: |
|
797: | $this->response->addHeader('Content-Type: application/json');
|
798: | $this->response->setOutput(json_encode($json));
|
799: | }
|
800: |
|
801: | |
802: | |
803: | |
804: | |
805: |
|
806: | public function delete(): void {
|
807: | $this->load->language('marketing/affiliate');
|
808: |
|
809: | $json = [];
|
810: |
|
811: | if (isset($this->request->post['selected'])) {
|
812: | $selected = $this->request->post['selected'];
|
813: | } else {
|
814: | $selected = [];
|
815: | }
|
816: |
|
817: | if (!$this->user->hasPermission('modify', 'marketing/affiliate')) {
|
818: | $json['error'] = $this->language->get('error_permission');
|
819: | }
|
820: |
|
821: | if (!$json) {
|
822: | $this->load->model('marketing/affiliate');
|
823: |
|
824: | foreach ($selected as $affiliate_id) {
|
825: | $this->model_marketing_affiliate->deleteAffiliate($affiliate_id);
|
826: | }
|
827: |
|
828: | $json['success'] = $this->language->get('text_success');
|
829: | }
|
830: |
|
831: | $this->response->addHeader('Content-Type: application/json');
|
832: | $this->response->setOutput(json_encode($json));
|
833: | }
|
834: |
|
835: | |
836: | |
837: | |
838: | |
839: |
|
840: | public function calculate(): void {
|
841: | $this->load->language('marketing/affiliate');
|
842: |
|
843: | $json = [];
|
844: |
|
845: | if (!$this->user->hasPermission('modify', 'marketing/affiliate')) {
|
846: | $json['error'] = $this->language->get('error_permission');
|
847: | }
|
848: |
|
849: | if (!$json) {
|
850: | $this->load->model('marketing/affiliate');
|
851: | $this->load->model('customer/customer');
|
852: |
|
853: | $results = $this->model_marketing_affiliate->getAffiliates(['filter_status' => 1]);
|
854: |
|
855: | foreach ($results as $result) {
|
856: | $this->model_marketing_affiliate->editBalance($result['customer_id'], $this->model_customer_customer->getTransactionTotal($result['customer_id']));
|
857: | }
|
858: |
|
859: | $json['success'] = $this->language->get('text_success');
|
860: | }
|
861: |
|
862: | $this->response->addHeader('Content-Type: application/json');
|
863: | $this->response->setOutput(json_encode($json));
|
864: | }
|
865: |
|
866: | |
867: | |
868: | |
869: | |
870: |
|
871: | public function csv() {
|
872: | $this->load->language('marketing/affiliate');
|
873: |
|
874: | if (isset($this->request->post['selected'])) {
|
875: | $selected = $this->request->post['selected'];
|
876: | } else {
|
877: | $selected = [];
|
878: | }
|
879: |
|
880: | if ($this->user->hasPermission('modify', 'marketing/affiliate')) {
|
881: | $this->load->model('marketing/affiliate');
|
882: |
|
883: | $csv = '';
|
884: |
|
885: | foreach ($selected as $customer_id) {
|
886: | $affiliate_info = $this->model_marketing_affiliate->getAffiliate($customer_id);
|
887: |
|
888: | if ($affiliate_info && $affiliate_info['status'] && (float)$affiliate_info['balance'] > 0) {
|
889: | $balance = $this->currency->format($affiliate_info['balance'], $this->config->get('config_currency'), 1.00000000, false);
|
890: |
|
891: | if ($affiliate_info['payment_method'] == 'cheque') {
|
892: | $csv .= $affiliate_info['cheque'] . ',' . $balance . ',' . $this->config->get('config_currency') . ',' . $affiliate_info['customer'] . "\n";
|
893: | }
|
894: |
|
895: | if ($affiliate_info['payment_method'] == 'paypal') {
|
896: | $csv .= $affiliate_info['paypal'] . ',' . $balance . ',' . $this->config->get('config_currency') . ',' . $affiliate_info['customer'] . ',Thanks for your business!' . "\n";
|
897: | }
|
898: |
|
899: | if ($affiliate_info['payment_method'] == 'bank') {
|
900: | $csv .= $affiliate_info['bank_name'] . ',' . $affiliate_info['bank_branch_number'] . ',' . $affiliate_info['bank_swift_code'] . ',' . $affiliate_info['bank_account_name'] . ',' . $affiliate_info['bank_account_number'] . ',' . $balance . ',' . $this->config->get('config_currency') . ',' . $affiliate_info['customer'] . "\n";
|
901: | }
|
902: | }
|
903: | }
|
904: |
|
905: | if (!headers_sent()) {
|
906: | header('Pragma: public');
|
907: | header('Expires: 0');
|
908: | header('Content-Description: File Transfer');
|
909: | header('Content-Type: application/octet-stream');
|
910: | header('Content-Transfer-Encoding: binary');
|
911: | header('Content-Disposition: attachment; filename=payout-' . date('d-m-Y') . '.csv"');
|
912: | header('Content-Length: ' . strlen($csv));
|
913: |
|
914: | echo $csv;
|
915: | } else {
|
916: | exit('Error: Headers already sent out!');
|
917: | }
|
918: | } else {
|
919: | return new \Opencart\System\Engine\Action('error/permission');
|
920: | }
|
921: | }
|
922: |
|
923: | |
924: | |
925: | |
926: | |
927: |
|
928: | public function complete(): void {
|
929: | $this->load->language('marketing/affiliate');
|
930: |
|
931: | $json = [];
|
932: |
|
933: | if (isset($this->request->post['selected'])) {
|
934: | $selected = $this->request->post['selected'];
|
935: | } else {
|
936: | $selected = [];
|
937: | }
|
938: |
|
939: | if (!$this->user->hasPermission('modify', 'marketing/affiliate')) {
|
940: | $json['error'] = $this->language->get('error_permission');
|
941: | }
|
942: |
|
943: | if (!$json) {
|
944: | $this->load->model('marketing/affiliate');
|
945: | $this->load->model('customer/customer');
|
946: |
|
947: | foreach ($selected as $customer_id) {
|
948: | $affiliate_info = $this->model_marketing_affiliate->getAffiliate($customer_id);
|
949: |
|
950: | if ($affiliate_info && $affiliate_info['status'] && (float)$affiliate_info['balance'] > 0) {
|
951: | $this->model_customer_customer->addTransaction($affiliate_info['customer_id'], $this->language->get('text_payment_' . $affiliate_info['payment_method']), -$affiliate_info['balance']);
|
952: |
|
953: | $this->model_marketing_affiliate->editBalance($affiliate_info['customer_id'], 0);
|
954: | }
|
955: | }
|
956: |
|
957: | $json['success'] = $this->language->get('text_success');
|
958: | }
|
959: |
|
960: | $this->response->addHeader('Content-Type: application/json');
|
961: | $this->response->setOutput(json_encode($json));
|
962: | }
|
963: |
|
964: | |
965: | |
966: | |
967: | |
968: |
|
969: | public function report(): void {
|
970: | $this->load->language('marketing/affiliate');
|
971: |
|
972: | $this->response->setOutput($this->getReport());
|
973: | }
|
974: |
|
975: | |
976: | |
977: | |
978: | |
979: |
|
980: | private function getReport(): string {
|
981: | if (isset($this->request->get['customer_id'])) {
|
982: | $customer_id = (int)$this->request->get['customer_id'];
|
983: | } else {
|
984: | $customer_id = 0;
|
985: | }
|
986: |
|
987: | if (isset($this->request->get['page']) && $this->request->get['route'] == 'marketing/affiliate.report') {
|
988: | $page = (int)$this->request->get['page'];
|
989: | } else {
|
990: | $page = 1;
|
991: | }
|
992: |
|
993: | $limit = 10;
|
994: |
|
995: | $data['reports'] = [];
|
996: |
|
997: | $this->load->model('marketing/affiliate');
|
998: | $this->load->model('customer/customer');
|
999: | $this->load->model('setting/store');
|
1000: |
|
1001: | $results = $this->model_marketing_affiliate->getReports($customer_id, ($page - 1) * $limit, $limit);
|
1002: |
|
1003: | foreach ($results as $result) {
|
1004: | $store_info = $this->model_setting_store->getStore($result['store_id']);
|
1005: |
|
1006: | if ($store_info) {
|
1007: | $store = $store_info['name'];
|
1008: | } elseif (!$result['store_id']) {
|
1009: | $store = $this->config->get('config_name');
|
1010: | } else {
|
1011: | $store = '';
|
1012: | }
|
1013: |
|
1014: | $data['reports'][] = [
|
1015: | 'ip' => $result['ip'],
|
1016: | 'account' => $this->model_customer_customer->getTotalCustomersByIp($result['ip']),
|
1017: | 'store' => $store,
|
1018: | 'country' => $result['country'],
|
1019: | 'date_added' => date($this->language->get('datetime_format'), strtotime($result['date_added'])),
|
1020: | 'filter_ip' => $this->url->link('customer/customer', 'user_token=' . $this->session->data['user_token'] . '&filter_ip=' . $result['ip'])
|
1021: | ];
|
1022: | }
|
1023: |
|
1024: | $report_total = $this->model_marketing_affiliate->getTotalReports($customer_id);
|
1025: |
|
1026: | $data['pagination'] = $this->load->controller('common/pagination', [
|
1027: | 'total' => $report_total,
|
1028: | 'page' => $page,
|
1029: | 'limit' => $limit,
|
1030: | 'url' => $this->url->link('marketing/affiliate.report', 'user_token=' . $this->session->data['user_token'] . '&customer_id=' . $customer_id . '&page={page}')
|
1031: | ]);
|
1032: |
|
1033: | $data['results'] = sprintf($this->language->get('text_pagination'), ($report_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($report_total - $limit)) ? $report_total : ((($page - 1) * $limit) + $limit), $report_total, ceil($report_total / $limit));
|
1034: |
|
1035: | return $this->load->view('marketing/affiliate_report', $data);
|
1036: | }
|
1037: |
|
1038: | |
1039: | |
1040: | |
1041: | |
1042: |
|
1043: | public function autocomplete(): void {
|
1044: | $json = [];
|
1045: |
|
1046: | if (isset($this->request->get['filter_name'])) {
|
1047: | $filter_name = $this->request->get['filter_name'];
|
1048: | } else {
|
1049: | $filter_name = '';
|
1050: | }
|
1051: |
|
1052: | if (isset($this->request->get['filter_email'])) {
|
1053: | $filter_email = $this->request->get['filter_email'];
|
1054: | } else {
|
1055: | $filter_email = '';
|
1056: | }
|
1057: |
|
1058: | $filter_data = [
|
1059: | 'filter_name' => $filter_name,
|
1060: | 'filter_email' => $filter_email,
|
1061: | 'start' => 0,
|
1062: | 'limit' => 5
|
1063: | ];
|
1064: |
|
1065: | $this->load->model('marketing/affiliate');
|
1066: |
|
1067: | $results = $this->model_marketing_affiliate->getAffiliates($filter_data);
|
1068: |
|
1069: | foreach ($results as $result) {
|
1070: | $json[] = [
|
1071: | 'customer_id' => $result['customer_id'],
|
1072: | 'name' => strip_tags(html_entity_decode($result['name'], ENT_QUOTES, 'UTF-8')),
|
1073: | 'email' => $result['email']
|
1074: | ];
|
1075: | }
|
1076: |
|
1077: | $sort_order = [];
|
1078: |
|
1079: | foreach ($json as $key => $value) {
|
1080: | $sort_order[$key] = $value['name'];
|
1081: | }
|
1082: |
|
1083: | array_multisort($sort_order, SORT_ASC, $json);
|
1084: |
|
1085: | $this->response->addHeader('Content-Type: application/json');
|
1086: | $this->response->setOutput(json_encode($json));
|
1087: | }
|
1088: | }
|
1089: | |