· 5 years ago · Jan 01, 2021, 08:06 AM
1<?php
2
3
4namespace App\Repositories;
5
6use App\Models\Balance;
7use App\Models\Campaing;
8use App\Models\Currency;
9use App\Models\Order;
10use App\Models\Package;
11use App\Models\PackageLog;
12use App\Models\ScGood;
13use App\Models\ScGoodsGroup;
14use App\Models\Tariff;
15use App\Models\Transaction;
16use App\Models\User;
17use Carbon\Carbon;
18
19
20/*
21 */
22
23class SmartCustomRepostory
24{
25
26 //test api link
27 const REQUEST_BASE_URL = 'https://ecarrier-fbusiness.customs.gov.az:7540/api/v1/';
28
29 //prod api link
30 //const REQUEST_BASE_URL = 'https://ecarrier-fbusiness.customs.gov.az:7545/api/v1/';
31
32 CONST KEY_NAME = 'apiKey';
33 const KEY = 'skmaskmdkasmkadmkasm';
34
35 const ACCEPTED = 1;
36 const INTERNAL_DELETED = 2; //biz terefden beyyanname silinerse
37 const EXTERNAL_DELETED = 3; //SmartCustoms terefde musteri beyennamni silerse
38 const CONFIRMED = 4;//musteri SmartCustomsda beyennameni tesdiq ederse
39 const DEPESH = 5;// MANIFESTO GONDEIRLIB DEMEKIR
40
41
42 public function __construct(ScGood $model = null)
43 {
44 $this->model = $model;
45 }
46
47 private function setModel(ScGood $model)
48 {
49 $this->model = $model;
50
51 return $this;
52 }
53
54 public function getModel()
55 {
56 return $this->model;
57 }
58
59 public function setUser(User $user)
60 {
61 $this->user = $user;
62
63 return $this;
64 }
65
66 public function setError($text)
67 {
68 $this->has_error = true;
69 $this->messages[] = $text;
70
71 return $this;
72 }
73
74 public function setSuccess($text)
75 {
76 $this->has_error = false;
77 $this->messages[] = $text;
78
79 return $this;
80 }
81
82 public function curl($params) {
83 //dd(self::REQUEST_BASE_URL);
84 $url = self::REQUEST_BASE_URL.$params['endpoint'];
85
86 $ch = curl_init();
87
88
89 curl_setopt($ch, CURLOPT_URL, $url);
90 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
91 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $params['curl_method']);
92
93 if(isset($params['CURLOPT_POSTFIELDS'])){
94 curl_setopt($ch, CURLOPT_POSTFIELDS, $params['CURLOPT_POSTFIELDS']);
95 }
96
97
98
99 $headers = array();
100 $headers[] = self::KEY_NAME.': '.self::KEY;
101 $headers[] = "Content-Type: application/json";
102 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
103
104 $result = curl_exec($ch);
105 if (curl_errno($ch)) {
106 echo 'Error:' . curl_error($ch);
107 }
108 curl_close($ch);
109
110 $result = json_decode($result);
111 //dd($result);
112
113 return $result;
114 //dd($result);
115 }
116 public function ping(){
117 $params['endpoint'] = 'carriers/Ping';
118 $params['curl_method'] = 'GET';
119
120
121 return $this->curl($params);
122
123 }
124
125 public function postSinglePackage($package){
126 //dd($first_order->ScGoodsGroup);
127 $params[] = $this->makeSingleArrayItemForPost($package);
128 $json = json_encode($params);
129
130 //return $json;
131
132 $params['endpoint'] = 'carriers';
133 $params['curl_method'] = 'POST';
134 $params['CURLOPT_POSTFIELDS'] = $json;
135 $params['url'] = self::REQUEST_BASE_URL.$params['endpoint'];
136
137 $result = $this->curl($params);
138
139 if ($result->code != 200){
140 dd($result);
141 }
142
143 //store returned datas or handle response
144 $this->storeResultToDb($package, $result);
145
146 return true;
147 }
148
149 public function postMultiplePackage($packages){
150 //dd($packages);
151 $params = array();
152 if($packages->count() > 0){
153 foreach ($packages as $package) {
154 $params[] = $this->makeSingleArrayItemForPost($package);
155 }
156 }
157 $json = json_encode($params);
158
159 $params['endpoint'] = 'carriers';
160 $params['curl_method'] = 'POST';
161 $params['CURLOPT_POSTFIELDS'] = $json;
162 $params['url'] = self::REQUEST_BASE_URL.$params['endpoint'];
163
164 $results = $this->curl($params);
165
166
167 switch ($results->code) {
168 case $results->code == 400:
169 //dd($results->exception->code);
170 //115 qayidirsa demeli dublicate tracking_no xetasidir
171 if ($results->exception->code == "015"){
172 return $this->handleDublicatePackagesFromResponse($results);
173 //dd($results);
174 }
175
176 break;
177
178 case $results->code == 200:
179 $this->storeAcceptedResultsToDb($results);
180 break;
181 default:
182 dd($results);
183 //rosponse code not success
184 return false;
185
186 }
187
188 //dd($results);
189
190 return true;
191
192 }
193
194 public function handleDublicatePackagesFromResponse($results){
195
196 //dd($results);
197 //dd(PackageRepository::SC_STATUS['ACCEPTED']);
198 $updatedPackages = $results->exception->errorMessage.': ';
199 foreach ($results->data as $tracking_no){
200 $order_id = substr($tracking_no,3);
201 $order = Order::where('id','=', $order_id)->first();
202
203 $order->package()->update([
204 'sc_status' => PackageRepository::SC_STATUS['ACCEPTED']
205 ]);
206
207 PackageLog::create([
208 'package_id' => $order->package->id,
209 'user_id' => '10444',
210 'action' => 'SC_tracking_no_dublicated',
211 'comment' => 'Bu bağlama artıq SmartCustoms-a göndərilib.',
212 ]);
213
214 $updatedPackages .= $tracking_no .' ';
215 }
216
217 return $updatedPackages;
218 }
219
220 public function makeSingleArrayItemForPost($package){
221 $first_order = $package->orders->first();
222 $tracking_no = config('app.smart_customs_prefix').$first_order->id;
223 $shop_name = config('app.smart_customs_prefix').$first_order->shop_name;
224
225 $currencies = Currency::all()->pluck('value', 'code');
226 $price_usd = round($package->orders_total * $currencies['TRY'] / $currencies['USD']);
227 $shipping = $package->cargo_total;
228 $total = $price_usd + $package->cargo_total;
229
230 $customer = $package->user->first_name . ' ' . $package->user->last_name;
231
232 $item = array(
233 "direction" => 1,
234 "tracking_no" => $tracking_no,
235 "transp_costs" => $shipping,
236 "weight_goods" => $package->cargo_total,
237 "invoys_price" => $total ?? '',
238 "quantity_of_goods" => $package->orders->sum('quantity'),
239 "currency_type" => "840",
240 "fin" => $package->user->passport_fin,
241 "idxal_name" => $customer ?? '',
242 "idxal_adress" => $package->user->address ?? '',
243 "phone" => $package->user->mobile,
244 "ixrac_name" => $shop_name,
245 "ixrac_adress" => config('app.tr_warehouse_address'),
246 "goods_traffic_fr" => "792",
247 "goods_traffic_to" => "031",
248 "goodslist" => array(
249 array(
250 "goods_id" => $first_order->ScGoodsGroup->groupId ?? 0,
251 "name_of_goods" => $first_order->ScGoodsGroup->goodsNameAz ?? $first_order->shop_name
252 )
253 )
254 );
255
256 return $item;
257 }
258
259 public function storeResultToDb($package,$result){
260 ScGood::create([
261 'package_id' => $package->id,
262 'direction' => $result->data[0]->direction,
263 'tracking_no' => $result->data[0]->trackinG_NO,
264 'transp_costs' => $result->data[0]->transP_COSTS,
265 'weight_goods' => $result->data[0]->weighT_GOODS,
266 'quantity_of_goods' => $result->data[0]->quantitY_OF_GOODS,
267 'invoys_price' => $result->data[0]->invoyS_PRICE,
268 'currency_type' => $result->data[0]->currencY_TYPE,
269 'document_type' => $result->data[0]->documenT_TYPE,
270 'fin' => $result->data[0]->fin,
271 'idxal_name' => $result->data[0]->idxaL_NAME,
272 'idxal_adress' => $result->data[0]->idxaL_ADRESS,
273 'phone' => $result->data[0]->phone,
274 'ixrac_name' => $result->data[0]->ixraC_NAME,
275 'ixrac_adress' => $result->data[0]->ixraC_ADRESS,
276 'goods_traffic_fr' => $result->data[0]->goodS_TRAFFIC_FR,
277 'goods_traffic_to' => $result->data[0]->goodS_TRAFFIC_TO,
278 'goods_id' => $result->data[0]->goodsList[0]->goodS_ID,
279 'name_of_goods' => $result->data[0]->goodsList[0]->namE_OF_GOODS,
280 'status' => self::ACCEPTED,
281 'response_code' => $result->code
282 ]);
283
284 $package->update([
285 'sc_status' => PackageRepository::SC_STATUS['ACCEPTED']
286 ]);
287
288 PackageLog::create([
289 'package_id' => $package->id,
290 'user_id' => '10444',
291 'action' => 'SC_ACCEPTED',
292 'comment' => 'Baölama SmartCustomsa göndərildi',
293 ]);
294
295 return true;
296 }
297
298 public function storeAcceptedResultsToDb($results){
299 dd($results);
300 foreach ($results as $item){
301 $order_id = substr($item->tracking_no,3);
302 $order = Order::where('id','=', $order_id)->first();
303 ScGood::create([
304 'package_id' => $order->package_id,
305 'direction' => $item->direction,
306 'tracking_no' => $item->trackinG_NO,
307 'transp_costs' => $item->transP_COSTS,
308 'weight_goods' => $item->weighT_GOODS,
309 'quantity_of_goods' => $item->quantitY_OF_GOODS,
310 'invoys_price' => $item->invoyS_PRICE,
311 'currency_type' => $item->currencY_TYPE,
312 'document_type' => $item->documenT_TYPE,
313 'fin' => $item->fin,
314 'idxal_name' => $item->idxaL_NAME,
315 'idxal_adress' => $item->idxaL_ADRESS,
316 'phone' => $item->phone,
317 'ixrac_name' => $item->ixraC_NAME,
318 'ixrac_adress' => $item->ixraC_ADRESS,
319 'goods_traffic_fr' => $item->goodS_TRAFFIC_FR,
320 'goods_traffic_to' => $item->goodS_TRAFFIC_TO,
321 'goods_id' => $item->goodsList[0]->goodS_ID,
322 'name_of_goods' => $item->goodsList[0]->namE_OF_GOODS,
323 'status' => self::ACCEPTED,
324 'response_code' => $item->code
325 ]);
326
327 $order->package()->update([
328 'sc_status' => PackageRepository::SC_STATUS['ACCEPTED']
329 ]);
330
331 PackageLog::create([
332 'package_id' => $order->package->id,
333 'user_id' => '10444',
334 'action' => 'SC_ACCEPTED',
335 'comment' => 'Baölama SmartCustomsa göndərildi',
336 ]);
337 }
338
339
340 return true;
341 }
342
343 public function deletePackage($trackingId){
344 $params['trackingId'] = $trackingId;
345 $json = json_encode($params);
346
347 $params['endpoint'] = 'carriers/'.$trackingId;
348 $params['curl_method'] = 'DELETE';
349 $params['CURLOPT_POSTFIELDS'] = $json;
350 $params['url'] = self::REQUEST_BASE_URL.$params['endpoint'];
351
352 $results = $this->curl($params);
353
354 if ($results->code == 200){
355 return true;
356 }
357
358 if ($results->code == 400){
359
360 if ($results->exception->code == "042") {
361 return $results->exception->errorMessage;
362 }
363 }
364
365 //dd($trackingId);
366 dd($results);
367
368 }
369
370 public function getApprovedDeclaration(){
371
372 }
373
374 public function getGoodsGroupsList(){
375 $params['endpoint'] = 'carriers/goodsgroupslist';
376
377 $result = $this->curl($params);
378 $result = json_decode($result);
379
380 //dd($result);
381
382 if (count($result->data) > 0){
383 foreach ($result->data as $item){
384 // dd($item->id);
385 $find = ScGoodsGroup::where('groupId','=',$item->id)->first();
386
387 if ($find){
388 continue;
389 }
390
391 if ($item->isDeleted){
392 continue;
393 }
394 ScGoodsGroup::create([
395 'groupId' => $item->id ?? null,
396 'parentId' => $item->parentId ?? null,
397 'goodsNameAz' => $item->goodsNameAz ?? null,
398 'goodsNameEn' =>$item->goodsNameEn ?? null,
399 'goodsNameRu' =>$item->goodsNameRu ?? null,
400 'isDeleted' =>$item->isDeleted ?? null,
401 ]);
402 }
403
404 }
405 //dd($result->data);
406 return 'success';
407 }
408
409 public function getPostsOfCarrier($params = array()){
410 $json = json_encode($params);
411
412 //return $json;
413
414 $params['endpoint'] = 'carriers';
415 $params['curl_method'] = 'POST';
416 $params['CURLOPT_POSTFIELDS'] = $json;
417 $params['url'] = self::REQUEST_BASE_URL.$params['endpoint'];
418
419 return $this->curl($params);
420 }
421
422 public function sendDepesh(){
423
424 }
425
426}