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