· 6 years ago · Nov 29, 2019, 10:18 AM
1<?php
2
3namespace Vnecoms\VendorsGoSend\Model;
4
5use Vnecoms\VendorsGoSend\Api\WaitCallbackInterface;
6use \Magento\Framework\App\Request\Http as Request;
7use \Magento\Framework\App\ResponseInterface as Response;
8use \Magento\Framework\Mail\Template\TransportBuilder;
9
10class WaitCallback extends \Magento\Framework\Model\AbstractModel implements WaitCallbackInterface
11{
12 private $_bookingStatusOrderFactory;
13 private $_bookingStatusOrderRepoFactory;
14 private $_vendorOrderFactory;
15 protected $request;
16 protected $response;
17 protected $_logger;
18
19 private $secretKey = '+{8T<[&Rln|^q3&';
20 private $_transportBuilder;
21
22
23
24 public function __construct(
25 BookingStatusOrderFactory $bookingStatusOrderFactory,
26 BookingStatusOrderRepositoryFactory $bookingStatusOrderRepoFactory,
27 \Vnecoms\VendorsSales\Model\OrderFactory $vendorOrderFactory,
28 Request $request,
29 Response $response,
30 TransportBuilder $transportBuilder,
31 \Psr\Log\LoggerInterface $logger
32 ) {
33 $this->_vendorOrderFactory = $vendorOrderFactory;
34 $this->_bookingStatusOrderFactory = $bookingStatusOrderFactory;
35 $this->_bookingStatusOrderRepoFactory = $bookingStatusOrderRepoFactory;
36 $this->request = $request;
37 $this->response = $response;
38 $this->_transportBuilder = $transportBuilder;
39 $this->_logger = $logger;
40 }
41
42 /**
43 * {@inheritdoc}
44 */
45 public function callback()
46 {
47 $httpRequestObject = $this->request;
48 $secretKeyHeader = $httpRequestObject->getHeader('secret-key');
49
50 if ($secretKeyHeader != $this->secretKey) {
51 // $this->response
52 // $this->response->setHttpResponseCode(403, null, 'not authorized');
53 // return $this->response->getHttpResponseCode();
54
55 $this->response->setHttpResponseCode(403);
56 $this->response->clearBody();
57 $this->response->sendHeaders();
58 exit();
59 } else {
60 $debugLevel = 'INFO';
61 $rawBody = json_decode(file_get_contents("php://input"), true );
62 $this->_logger->log($debugLevel,'debug response', [ 'rawBody' => $rawBody ]);
63 // print_r($rawBody['username']); exit(' bye ');
64
65 $modelRepo = $this->_bookingStatusOrderRepoFactory->create();
66 $bookingModel = $modelRepo->getByBookingId($rawBody['booking_id']);
67 // print_r($bookingModel); exit(' xye ');
68
69 if ( $bookingModel === null) {
70 $bookingModel = $this->_bookingStatusOrderFactory->create();
71 $bookingModel->setBookingId($rawBody['booking_id']);
72 $bookingModel->setType($rawBody['type']);
73 $bookingModel->setEventDate($rawBody['event_date']);
74 $bookingModel->setEventId($rawBody['event_id']);
75 $bookingModel->setPartnerId($rawBody['partner_id']);
76 $bookingModel->setStatus($rawBody['status']);
77 $bookingModel->setCancelledBy($rawBody['cancelled_by']);
78 $bookingModel->setBookingType($rawBody['booking_type']);
79 $bookingModel->setDriverName($rawBody['driver_name']);
80 $bookingModel->setDriverPhone($rawBody['driver_phone']);
81 $bookingModel->setDriverPhone2($rawBody['driver_phone2']);
82 $bookingModel->setDriverPhone3($rawBody['driver_phone3']);
83 $bookingModel->setDriverPhotoUrl($rawBody['driver_photo_url']);
84 $bookingModel->setReceiverName($rawBody['receiver_name']);
85 $bookingModel->setTotalDistanceKMS($rawBody['total_distance_in_kms']);
86 $bookingModel->setPickupETA($rawBody['pickup_eta']);
87 $bookingModel->setDeliveryETA($rawBody['delivery_eta']);
88 $bookingModel->setPrice($rawBody['price']);
89 $bookingModel->setCancellationReason($rawBody['cancellation_reason']);
90 // $bookingModel->setAttributes($rawBody['attributes']);
91 $bookingModel->setLiveTrackingURL($rawBody['liveTrackingUrl']);
92 } else {
93 // For Scenario When Other State Happened
94 $bookingModel->setStatus($rawBody['status']);
95 }
96 $modelRepo->save($bookingModel);
97
98 $vendorOrderID = $bookingModel->getVendorOrderId();
99 $vendorOrder = $this->_vendorOrderFactory->create()->load( $vendorOrderID );
100 $baseOrder = $vendorOrder->getOrder();
101 // print_r( get_class_methods($vendorOrder->getVendor() ) ); exit(0);
102
103 $sellerEmail = $vendorOrder->getVendor()->getData('email');
104 $buyerEmail = $baseOrder->getData()['customer_email'];
105
106 // print_r( $rawBody['status'] ); exit(0);
107
108 if ( strtolower($rawBody['status']) == 'cancelled' ) {
109 // Handle Cancel Status EMail
110 $transport = $this->_transportBuilder
111 ->setTemplateIdentifier('gosend_cancelled_template')
112 ->setTemplateOptions(['area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID])
113 ->setTemplateVars([
114 'order' => $baseOrder
115 ])
116 ->setFrom(['name' => 'Lakkon','email' => 'noreply@lakkon.id'])
117 ->addTo([ $sellerEmail ])
118 ->getTransport();
119 $transport->sendMessage();
120 } elseif ( $rawBody['status'] == 'Driver Allocated' ) {
121
122 // $transport = $this->_transportBuilder
123 // ->setTemplateIdentifier('gosend_cancelled_template')
124 // ->setTemplateOptions(['area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID])
125 // ->setTemplateVars([
126 // 'order' => $baseOrder,
127 // 'formattedBillingAddress' => $formattedBillingAddress,
128 // 'formattedShippingAddress' => $formattedShippingAddress,
129 // ])
130 // ->setFrom(['name' => 'Lakkon','email' => 'noreply@lakkon.id'])
131 // ->addTo([ $vendorOrder->getOrder()->getData()['customer_email']])
132 // ->getTransport();
133 // $transport->sendMessage();
134 }
135
136 // $this->response->setHttpResponseCode(200, null, "OK");
137 $this->response->setHttpResponseCode(200);
138 $this->response->clearBody();
139 $this->response->sendHeaders();
140 return 'OK';
141 }
142
143 // try {
144 // $collection = $this->_itemFactory->create()->getCollection();
145 // $collection
146 // ->addActiveFilter()
147 // ->addStoreFilter($storeId)
148 // ->setOrder('publish_time', 'DESC')
149 // ->setCurPage($page)
150 // ->setPageSize($limit);
151
152 // $type = strtolower($type);
153
154 // switch ($type) {
155 // case 'archive':
156 // $term = explode('-', $term);
157 // if (count($term) < 2) {
158 // return false;
159 // }
160 // list($year, $month) = $term;
161 // $year = (int) $year;
162 // $month = (int) $month;
163
164 // if ($year < 1970) {
165 // return false;
166 // }
167 // if ($month < 1 || $month > 12) {
168 // return false;
169 // }
170
171 // $collection->addArchiveFilter($year, $month);
172 // break;
173 // case 'author':
174 // $collection->addAuthorFilter($term);
175 // break;
176 // case 'category':
177 // $collection->addCategoryFilter($term);
178 // break;
179 // case 'search':
180 // $collection->addSearchFilter($term);
181 // break;
182 // case 'tag':
183 // $collection->addTagFilter($term);
184 // break;
185 // }
186
187 // $posts = [];
188 // foreach ($collection as $item) {
189 // $item->initDinamicData();
190 // $posts[] = $item->getData();
191 // }
192
193 // $result = [
194 // 'posts' => $posts,
195 // 'total_number' => $collection->getSize(),
196 // 'current_page' => $collection->getCurPage(),
197 // 'last_page' => $collection->getLastPageNumber(),
198 // ];
199
200 // return json_encode($result);
201 // } catch (\Exception $e) {
202 // return false;
203 // }
204 }
205}