Subversion Repositories SmartDukaan

Rev

Rev 16629 | Rev 16712 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
13532 anikendra 1
<?php
2
App::uses('AppController', 'Controller');
3
/**
4
 * Orders Controller
5
 *
6
 * @property Order $Order
7
 * @property PaginatorComponent $Paginator
8
 */
9
class OrdersController extends AppController {
10
 
11
/**
12
 * Components
13
 *
14
 * @var array
15
 */
16
	public $components = array('Paginator');
17
 
13672 anikendra 18
	public function beforeFilter() {		
13591 anikendra 19
		parent::beforeFilter();
15093 anikendra 20
		$this->Auth->allow('add','mine','pendingcashbacks','all');
13672 anikendra 21
		$this->apihost = Configure::read('pythonapihost');
13591 anikendra 22
	}
23
 
13816 anikendra 24
	public function mine() {
15824 anikendra 25
		$type = $this->request->query('type');
13816 anikendra 26
		$page = $this->request->query('page');
27
		$page = isset($page)?$page:1;
13682 anikendra 28
		$userId = $this->request->query('user_id');
29
		if(isset($userId) && !empty($userId)){
30
			$this->loadModel('User');
31
			$dbuser = $this->User->findById($userId);
32
			$this->Auth->login($dbuser['User']);	
33
		}
13672 anikendra 34
		$this->layout = "innerpages";
13815 anikendra 35
		$url = $this->apihost."storeorder/user/".$this->Auth->User('id')."?page=$page&window=10";
15824 anikendra 36
		if(isset($type) && !empty($type)) {
37
			$url .= '&type='.$type;
38
		}
13672 anikendra 39
		$response = $this->make_request($url,null);
13815 anikendra 40
		$totalPages = $response['totalPages'];
13672 anikendra 41
		if(!empty($response['data'])){
42
			$this->set('orders',$response['data']);
43
		}
13752 anikendra 44
		$ignoredFields = array('imgUrl','status','productTitle','estimatedDeliveryDate','productCode','merchantSubOrderId','productUrl','closed','tracingkUrl','detailedStatus');
13944 anikendra 45
		$storemapping = Configure::read('storemapping');
46
		$activestores = Configure::read('activestores');
14224 anikendra 47
		$amazonorderurl = Configure::read('amazonorderurl');
48
		$this->set(compact('ignoredFields','page','totalPages','userId','activestores','storemapping','amazonorderurl'));
13672 anikendra 49
	}
50
 
15217 anikendra 51
	public function by($userId) {
52
		$page = $this->request->query('page');
53
		$page = isset($page)?$page:1;		
54
		$this->layout = "innerpages";
55
		$url = $this->apihost."storeorder/user/".$userId."?page=$page&window=10";
56
		$response = $this->make_request($url,null);
57
		$totalPages = $response['totalPages'];
58
		if(!empty($response['data'])){
59
			$this->set('orders',$response['data']);
60
		}
61
		$ignoredFields = array('imgUrl','status','productTitle','estimatedDeliveryDate','productCode','merchantSubOrderId','productUrl','closed','tracingkUrl','detailedStatus');
62
		$storemapping = Configure::read('storemapping');
63
		$activestores = Configure::read('activestores');
64
		$amazonorderurl = Configure::read('amazonorderurl');
65
		$this->set(compact('ignoredFields','page','totalPages','userId','activestores','storemapping','amazonorderurl'));
66
	}
67
 
13762 anikendra 68
	public function pendingcashbacks() {
69
		$userId = $this->request->query('user_id');
70
		if(isset($userId) && !empty($userId)){
71
			$this->loadModel('User');
72
			$dbuser = $this->User->findById($userId);
73
			$this->Auth->login($dbuser['User']);	
74
		}
75
		$this->layout = "innerpages";
13993 anikendra 76
		$url = $this->apihost."storeorder/user/".$this->Auth->User('id')."?page=1&window=50";
13762 anikendra 77
		$response = $this->make_request($url,null);
13993 anikendra 78
		// debug($response);
79
		$creditedOrders = $pendingOrders = $approvedOrders = array();
80
		$creditedAmount = $pendingAmount = $approvedAmount = 0;
13762 anikendra 81
		if(!empty($response['data'])){
13993 anikendra 82
			foreach ($response['data'] as $key => $order) {
14111 anikendra 83
				if(!empty($order['subOrders'])){
84
					foreach ($order['subOrders'] as $key => $suborder) {
85
						$suborder['storeId'] = $order['storeId'];
15035 amit.gupta 86
						if($order['storeId']!=4){
15036 amit.gupta 87
							$suborder['merchantOrderId'] = $order['merchantOrderId'];
88
						} else {
15035 amit.gupta 89
							$suborder['merchantOrderId'] = $suborder['merchantSubOrderId'];
90
						}
14700 anikendra 91
						if(!empty($order['orderTrackingUrl'])){
92
							$suborder['orderSuccessUrl'] = $order['orderTrackingUrl'];
93
						}
14111 anikendra 94
						switch($suborder['cashBackStatus']){
95
							// case 'Credited to wallet'://Credited
96
							// $creditedOrders[] = $suborder;
97
							// break;
98
							case 'Approved':
99
							$approvedOrders[] = $suborder;
100
							$approvedAmount += $suborder['cashBackAmount'];
101
							break;
102
							case 'Pending':
103
							$pendingOrders[] = $suborder;
14673 anikendra 104
							// $pendingAmount += $suborder['cashBackAmount'];
14111 anikendra 105
						}
13993 anikendra 106
					}
107
				}
108
			}
13762 anikendra 109
		}
14673 anikendra 110
		$url = $this->apihost.'pending-cashbacks/user/'.$userId;
111
		$result = $this->make_request($url,null);
112
		$pendingAmount = $result['amount'];
13993 anikendra 113
		//Get pending cashbacks
114
		$url = $this->apihost.'pending-refunds/user/'.$userId;
115
		$pendingCashbacks = $this->make_request($url,null);
116
		//Get credited cashbacks
117
		$url = $this->apihost.'refund/user/'.$userId;
14068 anikendra 118
		$creditedCashbacks = $this->make_request($url,null);
119
 
14026 anikendra 120
		if(!empty($creditedCashbacks)){
13993 anikendra 121
			foreach ($creditedCashbacks['data'] as $key => $value) {
14068 anikendra 122
				$creditedAmount += $value['userAmount'];				
123
				$data = array('subOrders.batchId'=>$value['batch']);
124
				$jsonVar = json_encode($data);
125
				$url = $this->apihost."storeorder/user/".$this->Auth->User('id')."?page=1&window=50&searchMap=$jsonVar";
126
				$creditedOrders[$value['batch']] = $this->make_request($url,null);
127
				// debug($creditedOrders);
13993 anikendra 128
			}
129
		}
14026 anikendra 130
		$storemapping = Configure::read('storemapping');
131
		$activestores = Configure::read('activestores');
16628 anikendra 132
		//App related cashbacks
133
		$this->loadModel('UserAppCashback');
134
		$this->loadModel('UserAppInstall');
135
		//Compute last two fortnight ids
136
		$fortnightIds = array();
137
		if(date('d',time())<=15){
16629 anikendra 138
			$fortnightIds[] = 2*(date('m',time())-1);
16628 anikendra 139
			$fortnightIds[] = 2*(date('m',time())-1)+1;
140
		}else{
141
			$fortnightIds[] = 2*(date('m',time())-1)+1;
142
			$fortnightIds[] = 2*(date('m',time())-1)+2;
143
		}
144
		$cashBacks = array();
145
		foreach ($fortnightIds AS $fortnightId){
146
			$options = array('conditions'=>array('fortnightOfYear'=>$fortnightId,'user_id'=>$this->Auth->User('id')),'fields'=>array('status','amount'));
147
			$temp = $this->UserAppCashback->find('first',$options);
16681 anikendra 148
			if(isset($temp) && !empty($temp)){
149
				$cashBacks[$temp['UserAppCashback']['status']]['amount'] = $temp['UserAppCashback']['amount'];
150
				$options = array('conditions'=>array('fortnightOfYear'=>$fortnightId,'user_id'=>$this->Auth->User('id')),'fields'=>array('sum(payoutAmount) AS amount','sum(installCount) AS installs','transaction_date'),'group'=>'transaction_date');
151
				$installs = $this->UserAppInstall->find('all',$options);			
152
				if(!empty($installs)){
153
					foreach ($installs as $key => $value) {
154
						$appInstalls[$value['UserAppInstall']['transaction_date']] = $value[0];					
155
					}
156
					$cashBacks[$temp['UserAppCashback']['status']]['installs'] = $appInstalls;
16628 anikendra 157
				}
158
			}
159
		}
13993 anikendra 160
		if(!empty($response['data'])){
16628 anikendra 161
			$this->set(compact('storemapping','activestores','pendingOrders','approvedOrders','creditedOrders','pendingCashbacks','creditedCashbacks','pendingAmount','approvedAmount','creditedAmount','cashBacks'));
13993 anikendra 162
		}
13762 anikendra 163
	}
164
 
15217 anikendra 165
	public function usercashbacks($userId) {		
166
		$this->layout = "innerpages";
167
		$url = $this->apihost."storeorder/user/".$userId."?page=1&window=50";
168
		$response = $this->make_request($url,null);
169
		// debug($response);
170
		$creditedOrders = $pendingOrders = $approvedOrders = array();
171
		$creditedAmount = $pendingAmount = $approvedAmount = 0;
172
		if(!empty($response['data'])){
173
			foreach ($response['data'] as $key => $order) {
174
				if(!empty($order['subOrders'])){
175
					foreach ($order['subOrders'] as $key => $suborder) {
176
						$suborder['storeId'] = $order['storeId'];
177
						if($order['storeId']!=4){
178
							$suborder['merchantOrderId'] = $order['merchantOrderId'];
179
						} else {
180
							$suborder['merchantOrderId'] = $suborder['merchantSubOrderId'];
181
						}
182
						if(!empty($order['orderTrackingUrl'])){
183
							$suborder['orderSuccessUrl'] = $order['orderTrackingUrl'];
184
						}
185
						switch($suborder['cashBackStatus']){
186
							// case 'Credited to wallet'://Credited
187
							// $creditedOrders[] = $suborder;
188
							// break;
189
							case 'Approved':
190
							$approvedOrders[] = $suborder;
191
							$approvedAmount += $suborder['cashBackAmount'];
192
							break;
193
							case 'Pending':
194
							$pendingOrders[] = $suborder;
195
							// $pendingAmount += $suborder['cashBackAmount'];
196
						}
197
					}
198
				}
199
			}
200
		}
201
		$url = $this->apihost.'pending-cashbacks/user/'.$userId;
202
		$result = $this->make_request($url,null);
203
		$pendingAmount = $result['amount'];
204
		//Get pending cashbacks
205
		$url = $this->apihost.'pending-refunds/user/'.$userId;
206
		$pendingCashbacks = $this->make_request($url,null);
207
		//Get credited cashbacks
208
		$url = $this->apihost.'refund/user/'.$userId;
209
		$creditedCashbacks = $this->make_request($url,null);
210
 
211
		if(!empty($creditedCashbacks)){
212
			foreach ($creditedCashbacks['data'] as $key => $value) {
213
				$creditedAmount += $value['userAmount'];				
214
				$data = array('subOrders.batchId'=>$value['batch']);
215
				$jsonVar = json_encode($data);
216
				$url = $this->apihost."storeorder/user/".$userId."?page=1&window=50&searchMap=$jsonVar";
217
				$creditedOrders[$value['batch']] = $this->make_request($url,null);
218
				// debug($creditedOrders);
219
			}
220
		}
221
		$storemapping = Configure::read('storemapping');
222
		$activestores = Configure::read('activestores');
223
		if(!empty($response['data'])){
224
			$this->set(compact('storemapping','activestores','pendingOrders','approvedOrders','creditedOrders','pendingCashbacks','creditedCashbacks','pendingAmount','approvedAmount','creditedAmount'));
225
		}
226
	}
227
 
15227 anikendra 228
/*
13532 anikendra 229
	public function index() {
13591 anikendra 230
		throw new NotFoundException(__('Access Denied'));
13532 anikendra 231
		$this->Order->recursive = 0;
232
		$this->set('orders', $this->Paginator->paginate());
233
	}
234
 
15227 anikendra 235
 
13532 anikendra 236
	public function view($id = null) {
13591 anikendra 237
		throw new NotFoundException(__('Access Denied'));
13532 anikendra 238
		if (!$this->Order->exists($id)) {
239
			throw new NotFoundException(__('Invalid order'));
240
		}
241
		$options = array('conditions' => array('Order.' . $this->Order->primaryKey => $id));
242
		$this->set('order', $this->Order->find('first', $options));
243
	}
15227 anikendra 244
*/
245
 
13532 anikendra 246
/**
247
 * add method
248
 *
249
 * @return void
250
 */
13814 anikendra 251
 
252
	public function postOrders($order=null) {
13994 anikendra 253
		// Configure::load('live');
13814 anikendra 254
		$apihost = Configure::read('pythonapihost');
255
		$url = $apihost."storeorder";
256
		if(!empty($order)) {
257
			$params = array('sourceId'=>$order['Order']['store_id'],'orderId'=>$order['Order']['id'],'subTagId'=>$order['Order']['sub_tag'],'userId'=>$order['Order']['user_id'],'rawHtml'=>$order['Order']['rawhtml'],'orderSuccessUrl'=>$order['Order']['order_url']);
258
			$jsonVar = json_encode($params);
259
			return $this->make_request($url,$jsonVar);
260
		}else{
261
			$result = array('success'=>false,'message'=>'Empty order array');
262
			return $result;
263
		}
264
	}
265
 
13532 anikendra 266
	public function add() {
14933 amit.gupta 267
		$this->log(print_r($this->request->data,1),'orders');
13532 anikendra 268
		if ($this->request->is('post')) {
14886 amit.gupta 269
			if($this->request->data['zip']){
14933 amit.gupta 270
				$this->request->data['rawhtml'] = gzuncompress(base64_decode($this->request->data['rawhtml'])); 
14886 amit.gupta 271
			}
272
			$this->log(print_r($this->request->data,1),'orders');
14315 anikendra 273
			if(empty($this->request->data['id'])) {
274
				$this->Order->create();
13633 anikendra 275
			}
15093 anikendra 276
			$this->request->data['ip'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
13532 anikendra 277
			if ($this->Order->save($this->request->data)) {
14315 anikendra 278
				//$this->loadModel('PythonApi');	
279
				if(empty($this->request->data['id'])) {
280
					$id = $this->Order->getLastInsertID();
281
				}else{
282
					$id = $this->request->data['id'];
283
				}
284
				$order = $this->Order->find('first',array('conditions'=>array('id'=>$id),'recursive'=>-1));
13814 anikendra 285
				$response = $this->postOrders($order);
286
				$this->log(print_r($response,1),'orders');
287
				if(!empty($response) && $response['result']) {
14315 anikendra 288
					//if($response['result'] == 'HTML_REQUIRED' || $response['result'] == 'requireHtml') {
289
					if($response['htmlRequired'] == 1) {
13814 anikendra 290
						$this->loadModel('Rawhtml');
291
						$data = array('order_id' => $order['Order']['id'],'url' => $response['url'], 'status' => 'new');
292
						$this->Rawhtml->create();
293
						$this->Rawhtml->save($data); 
14315 anikendra 294
						//$result =array('success'=>true,'message'=>__('requireHtml'),'url' => $response['url'],'orderId' => $response['orderId']);
295
						$result =  $response;
296
						$sql = "UPDATE orders SET status = '".$response['result']."' WHERE id = ".$order['Order']['id'];
297
					}/* elseif($response['result'] == 'IGNORED') {
13814 anikendra 298
						$result =array('success'=>true,'message'=>__('IGNORED'));
299
						$sql = "UPDATE orders SET status = 'deleted' WHERE id = ".$order['Order']['id'];
300
					} elseif($response['result'] == 'PARSE_ERROR') {
301
						$result =array('success'=>true,'message'=>__('PARSE_ERROR'));
302
						$sql = "UPDATE orders SET status = 'deleted' WHERE id = ".$order['Order']['id'];
14315 anikendra 303
					} */
304
					else {
305
						$result =array('success'=>true,'message'=> $response['result']);
306
						$sql = "UPDATE orders SET status = '".$response['result']."' WHERE id = ".$order['Order']['id'];
13814 anikendra 307
					}
308
					$this->Order->query($sql);
309
				}
310
				//$result = array('success'=>true,'message'=>__('HTML_REQUIRED'),'url'=>'https://www.amazon.in/gp/css/summary/edit.html?orderID=404-7369214-6566739');
13633 anikendra 311
/*
312
				$options = array('conditions'=>array('status'=>'mapped'),'recursive'=>-1);
313
				$order = $this->Order->find('first',$options);
314
				if(!empty($orders)) {
315
					foreach($orders AS $order) {
316
						$response = $this->PythonApi->postOrders($order);
317
						if(!empty($response) && $response['result']) {
318
							$sql = "UPDATE orders SET status = 'processed' WHERE id = ".$order['Order']['id'];
319
							$this->Order->query($sql);
320
						}
321
					}
322
				}
323
*/
13532 anikendra 324
			} else {
14315 anikendra 325
				$this->log(print_r($this->Order->validationErrors,1),'orders');
13591 anikendra 326
				$result = array('success'=>false,'message'=>__('The order could not be saved. Please, try again.'));
13532 anikendra 327
			}
13591 anikendra 328
			$this->response->type('json');
329
			$this->layout = 'ajax';
330
			$this->set(array(
14315 anikendra 331
			    'result' => $response,
13591 anikendra 332
			    // 'callback' => $callback,
333
			    '_serialize' => array('result')
334
			));
335
			$this->render('/Elements/json');		
336
		}			
13532 anikendra 337
	}
338
 
15227 anikendra 339
/*
340
 
13532 anikendra 341
	public function edit($id = null) {
13591 anikendra 342
		throw new NotFoundException(__('Access Denied'));
13532 anikendra 343
		if (!$this->Order->exists($id)) {
344
			throw new NotFoundException(__('Invalid order'));
345
		}
346
		if ($this->request->is(array('post', 'put'))) {
347
			if ($this->Order->save($this->request->data)) {
348
				$this->Session->setFlash(__('The order has been saved.'));
349
				return $this->redirect(array('action' => 'index'));
350
			} else {
351
				$this->Session->setFlash(__('The order could not be saved. Please, try again.'));
352
			}
353
		} else {
354
			$options = array('conditions' => array('Order.' . $this->Order->primaryKey => $id));
355
			$this->request->data = $this->Order->find('first', $options);
356
		}
357
		$users = $this->Order->User->find('list');
358
		$stores = $this->Order->Store->find('list');
359
		$storeOrders = $this->Order->StoreOrder->find('list');
360
		$this->set(compact('users', 'stores', 'storeOrders'));
361
	}
362
 
15227 anikendra 363
 
13532 anikendra 364
	public function delete($id = null) {
13591 anikendra 365
		throw new NotFoundException(__('Access Denied'));
13532 anikendra 366
		$this->Order->id = $id;
367
		if (!$this->Order->exists()) {
368
			throw new NotFoundException(__('Invalid order'));
369
		}
370
		$this->request->onlyAllow('post', 'delete');
371
		if ($this->Order->delete()) {
372
			$this->Session->setFlash(__('The order has been deleted.'));
373
		} else {
374
			$this->Session->setFlash(__('The order could not be deleted. Please, try again.'));
375
		}
376
		return $this->redirect(array('action' => 'index'));
377
	}
15227 anikendra 378
*/
13532 anikendra 379
 
380
/**
381
 * admin_index method
382
 *
383
 * @return void
384
 */
385
	public function admin_index() {
15227 anikendra 386
		$this->checkAcl();
13532 anikendra 387
		$this->Order->recursive = 0;
388
		$this->set('orders', $this->Paginator->paginate());
389
	}
390
 
391
/**
392
 * admin_view method
393
 *
394
 * @throws NotFoundException
395
 * @param string $id
396
 * @return void
397
 */
398
	public function admin_view($id = null) {
15227 anikendra 399
		$this->checkAcl();
13532 anikendra 400
		if (!$this->Order->exists($id)) {
401
			throw new NotFoundException(__('Invalid order'));
402
		}
403
		$options = array('conditions' => array('Order.' . $this->Order->primaryKey => $id));
404
		$this->set('order', $this->Order->find('first', $options));
405
	}
406
 
407
/**
408
 * admin_add method
409
 *
410
 * @return void
411
 */
412
	public function admin_add() {
15227 anikendra 413
		$this->checkAcl();
13532 anikendra 414
		if ($this->request->is('post')) {
415
			$this->Order->create();
416
			if ($this->Order->save($this->request->data)) {
417
				$this->Session->setFlash(__('The order has been saved.'));
418
				return $this->redirect(array('action' => 'index'));
419
			} else {
420
				$this->Session->setFlash(__('The order could not be saved. Please, try again.'));
421
			}
422
		}
423
		$users = $this->Order->User->find('list');
424
		$stores = $this->Order->Store->find('list');
425
		$storeOrders = $this->Order->StoreOrder->find('list');
426
		$this->set(compact('users', 'stores', 'storeOrders'));
427
	}
428
 
429
/**
430
 * admin_edit method
431
 *
432
 * @throws NotFoundException
433
 * @param string $id
434
 * @return void
435
 */
436
	public function admin_edit($id = null) {
15227 anikendra 437
		$this->checkAcl();
13532 anikendra 438
		if (!$this->Order->exists($id)) {
439
			throw new NotFoundException(__('Invalid order'));
440
		}
441
		if ($this->request->is(array('post', 'put'))) {
442
			if ($this->Order->save($this->request->data)) {
443
				$this->Session->setFlash(__('The order has been saved.'));
444
				return $this->redirect(array('action' => 'index'));
445
			} else {
446
				$this->Session->setFlash(__('The order could not be saved. Please, try again.'));
447
			}
448
		} else {
449
			$options = array('conditions' => array('Order.' . $this->Order->primaryKey => $id));
450
			$this->request->data = $this->Order->find('first', $options);
451
		}
452
		$users = $this->Order->User->find('list');
453
		$stores = $this->Order->Store->find('list');
454
		$storeOrders = $this->Order->StoreOrder->find('list');
455
		$this->set(compact('users', 'stores', 'storeOrders'));
456
	}
457
 
458
/**
459
 * admin_delete method
460
 *
461
 * @throws NotFoundException
462
 * @param string $id
463
 * @return void
464
 */
465
	public function admin_delete($id = null) {
15227 anikendra 466
		$this->checkAcl();
13532 anikendra 467
		$this->Order->id = $id;
468
		if (!$this->Order->exists()) {
469
			throw new NotFoundException(__('Invalid order'));
470
		}
471
		$this->request->onlyAllow('post', 'delete');
472
		if ($this->Order->delete()) {
473
			$this->Session->setFlash(__('The order has been deleted.'));
474
		} else {
475
			$this->Session->setFlash(__('The order could not be deleted. Please, try again.'));
476
		}
477
		return $this->redirect(array('action' => 'index'));
14354 anikendra 478
	}
479
 
480
	public function all() {
481
		$page = $this->request->query('page');
482
		$page = isset($page)?$page:1;
14509 anikendra 483
		// $userId = $this->request->query('user_id');
484
		// if(isset($userId) && !empty($userId)){
485
		// 	$this->loadModel('User');
486
		// 	$dbuser = $this->User->findById($userId);
487
		// 	$this->Auth->login($dbuser['User']);	
488
		// }
14354 anikendra 489
		$this->layout = "innerpages";
490
		$url = $this->apihost."orders/?page=$page&window=10";
491
		$response = $this->make_request($url,null);
14509 anikendra 492
		$totalPages = $response['totalPages'];		
14354 anikendra 493
		if(!empty($response['data'])){
494
			$this->set('orders',$response['data']);
495
		}
496
		$ignoredFields = array('imgUrl','status','productTitle','estimatedDeliveryDate','productCode','merchantSubOrderId','productUrl','closed','tracingkUrl','detailedStatus');
497
		$storemapping = Configure::read('storemapping');
498
		$activestores = Configure::read('activestores');
499
		$amazonorderurl = Configure::read('amazonorderurl');
500
		$allusers = $this->Order->User->find('all',array('fields'=>array('first_name','id'),'recursive'=>-1));
501
		foreach($allusers AS $user){
502
			$users[$user['User']['id']] = $user['User']['first_name'];
503
		}
15188 anikendra 504
		$this->layout = 'admin';
14354 anikendra 505
		$this->set(compact('ignoredFields','page','totalPages','userId','activestores','storemapping','amazonorderurl','users'));
506
	}
507
}