5609 lines
		
	
	
		
			240 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			5609 lines
		
	
	
		
			240 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers;
 | |
| 
 | |
| use App\Http\Controllers\Controller;
 | |
| use Illuminate\Http\Request;
 | |
| use Illuminate\Http\Response;
 | |
| use Illuminate\Support\Facades\DB;
 | |
| use Illuminate\Support\Facades\Storage;
 | |
| use Illuminate\Support\Facades\Auth;
 | |
| use Illuminate\Support\Str;
 | |
| use Validator;
 | |
| use Hidehalo\Nanoid\Client as Nanoid;
 | |
| use GuzzleHttp\Client as GuzzleClient;
 | |
| use App\Responses;
 | |
| use App\Helper;
 | |
| use App\Models\Users;
 | |
| use App\Models\Drivers;
 | |
| use App\Models\Vehicles;
 | |
| use App\Models\Orders;
 | |
| use App\Models\OrdersPickups;
 | |
| use App\Models\OrdersDrops;
 | |
| use App\Models\OrdersClients;
 | |
| use App\Models\OrdersItems;
 | |
| use App\Models\OrdersAItems;
 | |
| use App\Models\OrdersRates;
 | |
| use App\Models\OrdersVendors;
 | |
| use App\Models\OrdersDrivers;
 | |
| use App\Models\OrdersVehicles;
 | |
| use App\Models\OrdersInsurances;
 | |
| use App\Models\OrdersAccidents;
 | |
| use App\Models\Zone;
 | |
| use App\Models\ConfRates;
 | |
| use App\Models\ConfTruckTypes;
 | |
| use App\Models\Clients;
 | |
| use App\Models\Tracks;
 | |
| use App\Models\Insurances;
 | |
| use App\Models\Finance;
 | |
| use App\Models\OrdersInvoices;
 | |
| use App\Models\OrdersTermins;
 | |
| use App\Models\OrdersPckDrop;
 | |
| use App\Models\OrdersPockets;
 | |
| use App\Models\OrdersCheckpoints;
 | |
| use App\Models\OrdersDriversUploads;
 | |
| use App\Models\PocketMoney;
 | |
| use App\Models\Checkpoints;
 | |
| use App\Models\UnitTypes;
 | |
| use App\Models\DrvPhoneDevices;
 | |
| use App\Models\OrdersLogsTf;
 | |
| use App\Models\Dana;
 | |
| use Barryvdh\DomPDF\Facade\Pdf;
 | |
| use Jurosh\PDFMerge\PDFMerger;
 | |
| 
 | |
| class TransactionController extends Controller
 | |
| {
 | |
|     /**
 | |
|      * VIEW
 | |
|      */
 | |
|     public function view_user_vendor_transaction_bid_order(Request $req)
 | |
|     {
 | |
|         /**
 | |
|          * Validate Token
 | |
|          * Do Login
 | |
|          * Redirect to route('view_user_vendor_transaction_new_order') . '?code=' . $order_code
 | |
|          */
 | |
|         // return Str::uuid()->toString();
 | |
|         // return (new Nanoid())->generateId(36);
 | |
| 
 | |
|         // test uniq the random code
 | |
|         // https://blog.bitsrc.io/why-is-nanoid-replacing-uuid-1b5100e62ed2
 | |
|         // $tokens = [];
 | |
|         // for ($i=0; $i<1000; $i++) {
 | |
|         // 	// $token = Str::uuid()->toString();
 | |
|         // 	$token = (new Nanoid())->generateId(36);
 | |
|         // 	foreach ($tokens as $tkn) {
 | |
|         // 		if ($tkn === $token) {
 | |
|         // 			dd('same');
 | |
|         // 		}
 | |
|         // 	}
 | |
|         // 	$tokens[] = $token;
 | |
|         // }
 | |
|         // dd('stop');
 | |
|         $now = time();
 | |
|         $input = [
 | |
|             "token" => $req->token,
 | |
|         ];
 | |
|         $rulesInput = [
 | |
|             "token" => "required|string|max:100",
 | |
|         ];
 | |
|         // validasi input
 | |
|         $isValidInput = Validator::make($input, $rulesInput);
 | |
|         if (!$isValidInput->passes()) {
 | |
|             return redirect(route("login"));
 | |
|         }
 | |
| 
 | |
|         $ord_vdr = OrdersVendors::getByBidToken($req->token);
 | |
|         if (count($ord_vdr) < 1) {
 | |
|             return redirect(route("login"));
 | |
|         }
 | |
| 
 | |
|         Auth::loginUsingId($ord_vdr[0]->vdr_id);
 | |
|         return redirect(route("view_user_vendor_transaction_new_order") . "?code=" . $ord_vdr[0]->ord_code);
 | |
|     }
 | |
| 
 | |
|     public function view_transactions_download_do(Request $req)
 | |
|     {
 | |
|         // try {
 | |
|         $now = time();
 | |
|         $input = [
 | |
|             "ord_code" => $req->ord_code,
 | |
|         ];
 | |
|         $rulesInput = [
 | |
|             "ord_code" => "required|numeric",
 | |
|         ];
 | |
|         // validasi input
 | |
|         $isValidInput = Validator::make($input, $rulesInput);
 | |
|         if (!$isValidInput->passes()) {
 | |
|             return abort(403, $isValidInput->messages()->first());
 | |
|         }
 | |
| 
 | |
|         $filter = [
 | |
|             "code" => $req->ord_code,
 | |
|             "get_pic_zone" => 1,
 | |
|             "get_client_pt" => 1,
 | |
|             "get_stts_checker" => 1,
 | |
|         ];
 | |
|         $order = Orders::showOrder($filter);
 | |
|         if (count($order) < 1) {
 | |
|             return abort(404, "order not found");
 | |
|         }
 | |
| 
 | |
|         $filter = [];
 | |
|         $filter["get_not_deleted"] = 1;
 | |
| 
 | |
|         $items = OrdersItems::getsByOrdId($order[0]->ord_id, $filter);
 | |
|         if (count($items) < 1) {
 | |
|             $apiResp = Responses::not_found("order not found");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
| 
 | |
|         $pdf = PDF::loadView("menu_v1._printDeliveryOrder", [
 | |
|             "order" => $order[0],
 | |
|             "items" => $items,
 | |
|         ]);
 | |
|         return $pdf->setPaper("a4", "potrait")->stream("delivery_order.pdf");
 | |
|         // } catch (\Exception $e) {
 | |
|         // 	$apiResp = Responses::error($e->getMessage());
 | |
|         // 	return abort(500, $apiResp['meta']['message']);
 | |
|         // }
 | |
|     }
 | |
| 
 | |
|     public function view_transactions_download_invoice(Request $req)
 | |
|     {
 | |
|         // try {
 | |
|         $now = time();
 | |
|         $input = [
 | |
|             "ord_code" => $req->ord_code,
 | |
|         ];
 | |
|         $rulesInput = [
 | |
|             "ord_code" => "required|numeric",
 | |
|         ];
 | |
|         // validasi input
 | |
|         $isValidInput = Validator::make($input, $rulesInput);
 | |
|         if (!$isValidInput->passes()) {
 | |
|             return abort(403, $isValidInput->messages()->first());
 | |
|         }
 | |
| 
 | |
|         $filter = [
 | |
|             "code" => $req->ord_code,
 | |
|             "get_pic_zone" => 1,
 | |
|             "get_client_pt" => 1,
 | |
|             "get_stts_checker" => 1,
 | |
|         ];
 | |
|         $order = Orders::showOrder($filter);
 | |
|         if (count($order) < 1) {
 | |
|             return abort(404, "order not found");
 | |
|         }
 | |
| 
 | |
|         $filter = [];
 | |
|         $filter["get_not_deleted"] = 1;
 | |
| 
 | |
|         $items = OrdersItems::getsByOrdId($order[0]->ord_id, $filter);
 | |
|         if (count($items) < 1) {
 | |
|             $apiResp = Responses::not_found("order not found");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
| 
 | |
|         $pdf = PDF::loadView("menu_v1._printInvoiceClient", [
 | |
|             "order" => $order[0],
 | |
|             "items" => $items,
 | |
|         ]);
 | |
|         return $pdf->setPaper("a4", "potrait")->stream("invoice_client.pdf");
 | |
|         // } catch (\Exception $e) {
 | |
|         // 	$apiResp = Responses::error($e->getMessage());
 | |
|         // 	return abort(500, $apiResp['meta']['message']);
 | |
|         // }
 | |
|     }
 | |
| 
 | |
|     public function view_transactions_download_payout(Request $req)
 | |
|     {
 | |
|         // try {
 | |
|         $now = time();
 | |
|         $input = [
 | |
|             "ord_code" => $req->ord_code,
 | |
|         ];
 | |
|         $rulesInput = [
 | |
|             "ord_code" => "required|numeric",
 | |
|         ];
 | |
|         // validasi input
 | |
|         $isValidInput = Validator::make($input, $rulesInput);
 | |
|         if (!$isValidInput->passes()) {
 | |
|             return abort(403, $isValidInput->messages()->first());
 | |
|         }
 | |
| 
 | |
|         $filter = [
 | |
|             "code" => $req->ord_code,
 | |
|             "get_pic_zone" => 1,
 | |
|             "get_client_pt" => 1,
 | |
|             "get_stts_checker" => 1,
 | |
|         ];
 | |
|         $order = Orders::showOrder($filter);
 | |
|         if (count($order) < 1) {
 | |
|             return abort(404, "order not found");
 | |
|         }
 | |
| 
 | |
|         $filter = [];
 | |
|         $filter["get_not_deleted"] = 1;
 | |
| 
 | |
|         $items = OrdersItems::getsByOrdId($order[0]->ord_id, $filter);
 | |
|         if (count($items) < 1) {
 | |
|             $apiResp = Responses::not_found("order not found");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
| 
 | |
|         $pdf = PDF::loadView("menu_v1._printPayoutVendor", [
 | |
|             "order" => $order[0],
 | |
|             "items" => $items,
 | |
|         ]);
 | |
|         return $pdf->setPaper("a4", "potrait")->stream("payout_vendor.pdf");
 | |
|         // } catch (\Exception $e) {
 | |
|         // 	$apiResp = Responses::error($e->getMessage());
 | |
|         // 	return abort(500, $apiResp['meta']['message']);
 | |
|         // }
 | |
|     }
 | |
| 
 | |
|     protected function one_page_one_doc(
 | |
|         $imgPathFile = "",
 | |
|         $pdfPath = "",
 | |
|         $pdfTitle = "",
 | |
|         $imgName = "",
 | |
|         $outputPdfFile = ""
 | |
|     ) {
 | |
|         if (empty($imgPathFile)) {
 | |
|             return false;
 | |
|         }
 | |
|         if (strpos($imgPathFile, ".pdf") !== false) {
 | |
|             return $imgPathFile;
 | |
|         } else {
 | |
|             $imgAry = [];
 | |
|             if (strpos($imgPathFile, "only_title") !== false) {
 | |
|                 $imgAry[] = [
 | |
|                     "name" => $imgName,
 | |
|                 ];
 | |
|             } else {
 | |
|                 $imgAry[] = [
 | |
|                     "name" => $imgName,
 | |
|                     "path" => $imgPathFile,
 | |
|                 ];
 | |
|             }
 | |
|             $pdf = PDF::loadView("menu_v1.reports._onePageOneImg", [
 | |
|                 "title" => $pdfTitle,
 | |
|                 "imgs" => $imgAry,
 | |
|             ]);
 | |
|             Storage::disk("local")->put("public/" . $pdfPath . $outputPdfFile . ".pdf", $pdf->output());
 | |
|             return $pdfPath . $outputPdfFile . ".pdf";
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // with merge pdf
 | |
|     public function view_transactions_download_report_pickup(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_code" => $req->ord_code,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_code" => "required|numeric",
 | |
|             ];
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 return abort(403, $isValidInput->messages()->first());
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "code" => $req->ord_code,
 | |
|                 "get_stts_checker" => 1,
 | |
|                 "get_checker_data" => 1,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 return abort(404, "order not found");
 | |
|             }
 | |
| 
 | |
|             $pdfPath = "";
 | |
|             foreach (array_slice(explode("/", $order[0]->ord_pck_seal_img), 0, -1) as $k => $r) {
 | |
|                 $pdfPath .= "$r/";
 | |
|             }
 | |
| 
 | |
|             $pdfMerge = new PDFMerger();
 | |
|             $availToMergers = [];
 | |
| 
 | |
|             if (strpos($order[0]->ord_pck_seal_img, ".pdf") !== false) {
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     "only_title",
 | |
|                     $pdfPath,
 | |
|                     "Data Penjemputan",
 | |
|                     "Foto Seal",
 | |
|                     "ord_pck_seal_img"
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
|             $onePagePdf = $this->one_page_one_doc(
 | |
|                 $order[0]->ord_pck_seal_img,
 | |
|                 $pdfPath,
 | |
|                 "Data Penjemputan",
 | |
|                 "Foto Seal",
 | |
|                 "ord_pck_seal_img"
 | |
|             );
 | |
|             if ($onePagePdf) {
 | |
|                 $availToMergers[] = $onePagePdf;
 | |
|             }
 | |
| 
 | |
|             if (strpos($order[0]->ord_pck_drv_armd_img, ".pdf") !== false) {
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     "only_title",
 | |
|                     $pdfPath,
 | |
|                     "Data Penjemputan",
 | |
|                     "Foto Pengemudi + Armada",
 | |
|                     "ord_pck_drv_armd_img"
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
|             $onePagePdf = $this->one_page_one_doc(
 | |
|                 $order[0]->ord_pck_drv_armd_img,
 | |
|                 $pdfPath,
 | |
|                 "Data Penjemputan",
 | |
|                 "Foto Pengemudi + Armada",
 | |
|                 "ord_pck_drv_armd_img"
 | |
|             );
 | |
|             if ($onePagePdf) {
 | |
|                 $availToMergers[] = $onePagePdf;
 | |
|             }
 | |
| 
 | |
|             if (strpos($order[0]->ord_pck_nopol_img, ".pdf") !== false) {
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     "only_title",
 | |
|                     $pdfPath,
 | |
|                     "Data Penjemputan",
 | |
|                     "Nomor Polisi Kendaraan",
 | |
|                     "ord_pck_nopol_img"
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
|             $onePagePdf = $this->one_page_one_doc(
 | |
|                 $order[0]->ord_pck_nopol_img,
 | |
|                 $pdfPath,
 | |
|                 "Data Penjemputan",
 | |
|                 "Nomor Polisi Kendaraan",
 | |
|                 "ord_pck_nopol_img"
 | |
|             );
 | |
|             if ($onePagePdf) {
 | |
|                 $availToMergers[] = $onePagePdf;
 | |
|             }
 | |
| 
 | |
|             $ord_pck_docs_client_img = json_decode($order[0]->ord_pck_docs_client_img);
 | |
|             $order[0]->ord_pck_docs_client_imgs = [];
 | |
|             foreach ($ord_pck_docs_client_img as $i => $client_img) {
 | |
|                 if (strpos($client_img, ".pdf") !== false) {
 | |
|                     $onePagePdf = $this->one_page_one_doc(
 | |
|                         "only_title",
 | |
|                         $pdfPath,
 | |
|                         "Data Penjemputan",
 | |
|                         "Dokumen Kelengkapan dari Client",
 | |
|                         "ord_pck_doc_client_img_" . $i
 | |
|                     );
 | |
|                     if ($onePagePdf) {
 | |
|                         $availToMergers[] = $onePagePdf;
 | |
|                     }
 | |
|                 }
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     $client_img,
 | |
|                     $pdfPath,
 | |
|                     "Data Penjemputan",
 | |
|                     "Dokumen Kelengkapan dari Client",
 | |
|                     "ord_pck_doc_client_img_" . $i
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (strpos($order[0]->ord_pck_seal_install_img, ".pdf") !== false) {
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     "only_title",
 | |
|                     $pdfPath,
 | |
|                     "Data Penjemputan",
 | |
|                     "Foto Pemasangan Seal",
 | |
|                     "ord_pck_seal_install_img"
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
|             $onePagePdf = $this->one_page_one_doc(
 | |
|                 $order[0]->ord_pck_seal_install_img,
 | |
|                 $pdfPath,
 | |
|                 "Data Penjemputan",
 | |
|                 "Foto Pemasangan Seal",
 | |
|                 "ord_pck_seal_install_img"
 | |
|             );
 | |
|             if ($onePagePdf) {
 | |
|                 $availToMergers[] = $onePagePdf;
 | |
|             }
 | |
| 
 | |
|             if (strpos($order[0]->ord_pck_goods_img, ".pdf") !== false) {
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     "only_title",
 | |
|                     $pdfPath,
 | |
|                     "Data Penjemputan",
 | |
|                     "Foto Barang",
 | |
|                     "ord_pck_goods_img"
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
|             $onePagePdf = $this->one_page_one_doc(
 | |
|                 $order[0]->ord_pck_goods_img,
 | |
|                 $pdfPath,
 | |
|                 "Data Penjemputan",
 | |
|                 "Foto Barang",
 | |
|                 "ord_pck_goods_img"
 | |
|             );
 | |
|             if ($onePagePdf) {
 | |
|                 $availToMergers[] = $onePagePdf;
 | |
|             }
 | |
| 
 | |
|             foreach ($availToMergers as $key => $row) {
 | |
|                 // Storage::disk('local')->get('public/'.$row);
 | |
|                 $pdfMerge->addPdf(storage_path("app/public/" . $row), "all", "vertical");
 | |
|             }
 | |
| 
 | |
|             if (count($availToMergers) > 0) {
 | |
|                 $pdfMerge->merge(
 | |
|                     "file",
 | |
|                     storage_path("app/public/" . $pdfPath . "download_report_pickup.pdf")
 | |
|                 );
 | |
|             }
 | |
| 
 | |
|             return response()->file(storage_path("app/public/" . $pdfPath . "download_report_pickup.pdf"));
 | |
|         } catch (\Exception $e) {
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return abort(500, $apiResp["meta"]["message"]);
 | |
|         }
 | |
|     }
 | |
|     // without merge pdf
 | |
|     public function view_transactions_download_report_pickup_bak1(Request $req)
 | |
|     {
 | |
|         // try {
 | |
|         $now = time();
 | |
|         $input = [
 | |
|             "ord_code" => $req->ord_code,
 | |
|         ];
 | |
|         $rulesInput = [
 | |
|             "ord_code" => "required|numeric",
 | |
|         ];
 | |
|         // validasi input
 | |
|         $isValidInput = Validator::make($input, $rulesInput);
 | |
|         if (!$isValidInput->passes()) {
 | |
|             return abort(403, $isValidInput->messages()->first());
 | |
|         }
 | |
| 
 | |
|         $filter = [
 | |
|             "code" => $req->ord_code,
 | |
|             "get_stts_checker" => 1,
 | |
|             "get_checker_data" => 1,
 | |
|         ];
 | |
|         $order = Orders::showOrder($filter);
 | |
|         if (count($order) < 1) {
 | |
|             return abort(404, "order not found");
 | |
|         }
 | |
| 
 | |
|         // $ord_pck_seal_img_size = getimagesize(__DIR__.'/../../../storage/app/public/'.$order[0]->ord_pck_seal_img);
 | |
|         // $order[0]->ord_pck_seal_img_width = $ord_pck_seal_img_size[0];
 | |
|         // $order[0]->ord_pck_seal_img_height = $ord_pck_seal_img_size[1];
 | |
| 
 | |
|         // $ord_pck_drv_armd_img_size = getimagesize(__DIR__.'/../../../storage/app/public/'.$order[0]->ord_pck_drv_armd_img);
 | |
|         // $order[0]->ord_pck_drv_armd_img_width = $ord_pck_drv_armd_img_size[0];
 | |
|         // $order[0]->ord_pck_drv_armd_img_height = $ord_pck_drv_armd_img_size[1];
 | |
| 
 | |
|         $order[0]->ord_pck_docs_client_imgs = [];
 | |
|         foreach (json_decode($order[0]->ord_pck_docs_client_img) as $i => $client_img) {
 | |
|             // $client_img_size = getimagesize(__DIR__.'/../../../storage/app/public/'.$order[0]->ord_pck_drv_armd_img);
 | |
|             $order[0]->ord_pck_docs_client_imgs[$i] = [
 | |
|                 "img" => $client_img,
 | |
|                 // 'width' => $client_img_size[0],
 | |
|                 // 'height' => $client_img_size[1],
 | |
|             ];
 | |
|         }
 | |
| 
 | |
|         // if ($order[0]->ord_pck_seal_install_img) {
 | |
|         // 	$ord_pck_seal_install_img_size = getimagesize(__DIR__.'/../../../storage/app/public/'.$order[0]->ord_pck_seal_install_img);
 | |
|         // 	$order[0]->ord_pck_seal_install_img_width = $ord_pck_seal_install_img_size[0];
 | |
|         // 	$order[0]->ord_pck_seal_install_img_height = $ord_pck_seal_install_img_size[1];
 | |
|         // }
 | |
| 
 | |
|         // if ($order[0]->ord_pck_goods_img) {
 | |
|         // 	$ord_pck_goods_img_size = getimagesize(__DIR__.'/../../../storage/app/public/'.$order[0]->ord_pck_goods_img);
 | |
|         // 	$order[0]->ord_pck_goods_img_width = $ord_pck_goods_img_size[0];
 | |
|         // 	$order[0]->ord_pck_goods_img_height = $ord_pck_goods_img_size[1];
 | |
|         // }
 | |
| 
 | |
|         $pdf = PDF::loadView("menu_v1._printReportPickup", [
 | |
|             "order" => $order[0],
 | |
|         ]);
 | |
|         return $pdf->setPaper("a4", "potrait")->stream("laporan_penjemputan.pdf");
 | |
|         // } catch (\Exception $e) {
 | |
|         // 	$apiResp = Responses::error($e->getMessage());
 | |
|         // 	return abort(500, $apiResp['meta']['message']);
 | |
|         // }
 | |
|     }
 | |
| 
 | |
|     // with merge pdf
 | |
|     public function view_transactions_download_report_drop(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_code" => $req->ord_code,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_code" => "required|numeric",
 | |
|             ];
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 return abort(403, $isValidInput->messages()->first());
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "code" => $req->ord_code,
 | |
|                 "get_stts_checker" => 1,
 | |
|                 "get_checker_data" => 1,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 return abort(404, "order not found");
 | |
|             }
 | |
| 
 | |
|             $pdfPath = "";
 | |
|             foreach (array_slice(explode("/", $order[0]->ord_drop_arrived_img), 0, -1) as $k => $r) {
 | |
|                 $pdfPath .= "$r/";
 | |
|             }
 | |
| 
 | |
|             $pdfMerge = new PDFMerger();
 | |
|             $availToMergers = [];
 | |
| 
 | |
|             if (strpos($order[0]->ord_drop_arrived_img, ".pdf") !== false) {
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     "only_title",
 | |
|                     $pdfPath,
 | |
|                     "Data Pengantaran",
 | |
|                     "Foto mobil tiba di tujuan",
 | |
|                     "ord_drop_arrived_img"
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
|             $onePagePdf = $this->one_page_one_doc(
 | |
|                 $order[0]->ord_drop_arrived_img,
 | |
|                 $pdfPath,
 | |
|                 "Data Pengantaran",
 | |
|                 "Foto mobil tiba di tujuan",
 | |
|                 "ord_drop_arrived_img"
 | |
|             );
 | |
|             if ($onePagePdf) {
 | |
|                 $availToMergers[] = $onePagePdf;
 | |
|             }
 | |
| 
 | |
|             if (strpos($order[0]->ord_drop_handover_img, ".pdf") !== false) {
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     "only_title",
 | |
|                     $pdfPath,
 | |
|                     "Data Pengantaran",
 | |
|                     "Foto serah terima",
 | |
|                     "ord_drop_handover_img"
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
|             $onePagePdf = $this->one_page_one_doc(
 | |
|                 $order[0]->ord_drop_handover_img,
 | |
|                 $pdfPath,
 | |
|                 "Data Pengantaran",
 | |
|                 "Foto serah terima",
 | |
|                 "ord_drop_handover_img"
 | |
|             );
 | |
|             if ($onePagePdf) {
 | |
|                 $availToMergers[] = $onePagePdf;
 | |
|             }
 | |
| 
 | |
|             if (strpos($order[0]->ord_drop_do_ttd_img, ".pdf") !== false) {
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     "only_title",
 | |
|                     $pdfPath,
 | |
|                     "Data Pengantaran",
 | |
|                     "Foto DO yg sudah di TTD",
 | |
|                     "ord_drop_do_ttd_img"
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
|             $onePagePdf = $this->one_page_one_doc(
 | |
|                 $order[0]->ord_drop_do_ttd_img,
 | |
|                 $pdfPath,
 | |
|                 "Data Pengantaran",
 | |
|                 "Foto DO yg sudah di TTD",
 | |
|                 "ord_drop_do_ttd_img"
 | |
|             );
 | |
|             if ($onePagePdf) {
 | |
|                 $availToMergers[] = $onePagePdf;
 | |
|             }
 | |
| 
 | |
|             if (strpos($order[0]->ord_drop_spk_img, ".pdf") !== false) {
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     "only_title",
 | |
|                     $pdfPath,
 | |
|                     "Data Pengantaran",
 | |
|                     "Foto surat jalan di TTD",
 | |
|                     "ord_drop_spk_img"
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
|             $onePagePdf = $this->one_page_one_doc(
 | |
|                 $order[0]->ord_drop_spk_img,
 | |
|                 $pdfPath,
 | |
|                 "Data Pengantaran",
 | |
|                 "Foto surat jalan di TTD",
 | |
|                 "ord_drop_spk_img"
 | |
|             );
 | |
|             if ($onePagePdf) {
 | |
|                 $availToMergers[] = $onePagePdf;
 | |
|             }
 | |
| 
 | |
|             foreach ($availToMergers as $key => $row) {
 | |
|                 // Storage::disk('local')->get('public/'.$row);
 | |
|                 $pdfMerge->addPdf(storage_path("app/public/" . $row), "all", "vertical");
 | |
|             }
 | |
| 
 | |
|             if (count($availToMergers) > 0) {
 | |
|                 $pdfMerge->merge("file", storage_path("app/public/" . $pdfPath . "download_report_drop.pdf"));
 | |
|             }
 | |
| 
 | |
|             return response()->file(storage_path("app/public/" . $pdfPath . "download_report_drop.pdf"));
 | |
|         } catch (\Exception $e) {
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return abort(500, $apiResp["meta"]["message"]);
 | |
|         }
 | |
|     }
 | |
|     // without merge pdf
 | |
|     public function view_transactions_download_report_drop_bak1(Request $req)
 | |
|     {
 | |
|         // try {
 | |
|         $now = time();
 | |
|         $input = [
 | |
|             "ord_code" => $req->ord_code,
 | |
|         ];
 | |
|         $rulesInput = [
 | |
|             "ord_code" => "required|numeric",
 | |
|         ];
 | |
|         // validasi input
 | |
|         $isValidInput = Validator::make($input, $rulesInput);
 | |
|         if (!$isValidInput->passes()) {
 | |
|             return abort(403, $isValidInput->messages()->first());
 | |
|         }
 | |
| 
 | |
|         $filter = [
 | |
|             "code" => $req->ord_code,
 | |
|             "get_stts_checker" => 1,
 | |
|             "get_checker_data" => 1,
 | |
|         ];
 | |
|         $order = Orders::showOrder($filter);
 | |
|         if (count($order) < 1) {
 | |
|             return abort(404, "order not found");
 | |
|         }
 | |
| 
 | |
|         $pdf = PDF::loadView("menu_v1._printReportDrop", [
 | |
|             "order" => $order[0],
 | |
|         ]);
 | |
|         return $pdf->setPaper("a4", "potrait")->stream("laporan_pengantaran.pdf");
 | |
|         // } catch (\Exception $e) {
 | |
|         // 	$apiResp = Responses::error($e->getMessage());
 | |
|         // 	return abort(500, $apiResp['meta']['message']);
 | |
|         // }
 | |
|     }
 | |
| 
 | |
|     // with merge pdf
 | |
|     public function view_transactions_download_report_acdnt(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_code" => $req->ord_code,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_code" => "required|numeric",
 | |
|             ];
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 return abort(403, $isValidInput->messages()->first());
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "code" => $req->ord_code,
 | |
|                 "get_stts_checker" => 1,
 | |
|                 "get_checker_data" => 1,
 | |
|                 "get_accidents" => 1,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 return abort(404, "order not found");
 | |
|             }
 | |
| 
 | |
|             $pdfPath = "";
 | |
|             foreach (array_slice(explode("/", $order[0]->ord_pck_seal_img), 0, -1) as $k => $r) {
 | |
|                 $pdfPath .= "$r/";
 | |
|             }
 | |
| 
 | |
|             $pdfMerge = new PDFMerger();
 | |
|             $availToMergers = [];
 | |
| 
 | |
|             $pdf = PDF::loadView("menu_v1.reports._printReportAcdntText", [
 | |
|                 "title" => "Data Kecelakaan",
 | |
|                 "order" => $order[0],
 | |
|             ]);
 | |
|             Storage::disk("local")->put("public/" . $pdfPath . "printReportAcdntText.pdf", $pdf->output());
 | |
|             $availToMergers[] = $pdfPath . "printReportAcdntText.pdf";
 | |
| 
 | |
|             $ord_acdnt_imgs = json_decode($order[0]->ord_acdnt_imgs);
 | |
|             foreach ($ord_acdnt_imgs as $i => $client_img) {
 | |
|                 if (strpos($client_img, ".pdf") !== false) {
 | |
|                     $onePagePdf = $this->one_page_one_doc(
 | |
|                         "only_title",
 | |
|                         $pdfPath,
 | |
|                         "Data Kecelakaan",
 | |
|                         "Foto Pendukung",
 | |
|                         "ord_acdnt_img_" . $i
 | |
|                     );
 | |
|                     if ($onePagePdf) {
 | |
|                         $availToMergers[] = $onePagePdf;
 | |
|                     }
 | |
|                 }
 | |
|                 $onePagePdf = $this->one_page_one_doc(
 | |
|                     $client_img,
 | |
|                     $pdfPath,
 | |
|                     "Data Kecelakaan",
 | |
|                     "Foto Pendukung",
 | |
|                     "ord_acdnt_img_" . $i
 | |
|                 );
 | |
|                 if ($onePagePdf) {
 | |
|                     $availToMergers[] = $onePagePdf;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             foreach ($availToMergers as $key => $row) {
 | |
|                 // Storage::disk('local')->get('public/'.$row);
 | |
|                 $pdfMerge->addPdf(storage_path("app/public/" . $row), "all", "vertical");
 | |
|             }
 | |
| 
 | |
|             if (count($availToMergers) > 0) {
 | |
|                 $pdfMerge->merge(
 | |
|                     "file",
 | |
|                     storage_path("app/public/" . $pdfPath . "download_report_acdnt.pdf")
 | |
|                 );
 | |
|             }
 | |
| 
 | |
|             return response()->file(storage_path("app/public/" . $pdfPath . "download_report_acdnt.pdf"));
 | |
|         } catch (\Exception $e) {
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return abort(500, $apiResp["meta"]["message"]);
 | |
|         }
 | |
|     }
 | |
|     // without merge pdf
 | |
|     public function view_transactions_download_report_acdnt_bak1(Request $req)
 | |
|     {
 | |
|         // try {
 | |
|         $now = time();
 | |
|         $input = [
 | |
|             "ord_code" => $req->ord_code,
 | |
|         ];
 | |
|         $rulesInput = [
 | |
|             "ord_code" => "required|numeric",
 | |
|         ];
 | |
|         // validasi input
 | |
|         $isValidInput = Validator::make($input, $rulesInput);
 | |
|         if (!$isValidInput->passes()) {
 | |
|             return abort(403, $isValidInput->messages()->first());
 | |
|         }
 | |
| 
 | |
|         $filter = [
 | |
|             "code" => $req->ord_code,
 | |
|             "get_stts_checker" => 1,
 | |
|             "get_checker_data" => 1,
 | |
|         ];
 | |
|         $order = Orders::showOrder($filter);
 | |
|         if (count($order) < 1) {
 | |
|             return abort(404, "order not found");
 | |
|         }
 | |
| 
 | |
|         $pdf = PDF::loadView("menu_v1._printReportAcdnt", [
 | |
|             "order" => $order[0],
 | |
|         ]);
 | |
|         return $pdf->setPaper("a4", "potrait")->stream("laporan_pengantaran.pdf");
 | |
|         // } catch (\Exception $e) {
 | |
|         // 	$apiResp = Responses::error($e->getMessage());
 | |
|         // 	return abort(500, $apiResp['meta']['message']);
 | |
|         // }
 | |
|     }
 | |
| 
 | |
|     public function view_transactions_download_spk(Request $req)
 | |
|     {
 | |
|         // try {
 | |
|         $now = time();
 | |
|         $input = [
 | |
|             "ord_code" => $req->ord_code,
 | |
|         ];
 | |
|         $rulesInput = [
 | |
|             // 'ord_code' => 'required|numeric', // single
 | |
|             "ord_code" => "required|string",
 | |
|         ];
 | |
|         // validasi input
 | |
|         $isValidInput = Validator::make($input, $rulesInput);
 | |
|         if (!$isValidInput->passes()) {
 | |
|             return abort(403, $isValidInput->messages()->first());
 | |
|         }
 | |
| 
 | |
|         $codes = explode(",", $req->ord_code);
 | |
|         $limit = count($codes);
 | |
|         if ($limit > 2) {
 | |
|             return redirect(route("view_transactions"));
 | |
|         }
 | |
|         $filter = [
 | |
|             "codes" => $codes,
 | |
|             "get_checker_data" => 1,
 | |
|             "get_prefer_type_truck" => 1,
 | |
|             "get_additional_vehicles_info" => 1,
 | |
|             "get_client_pt" => 1,
 | |
|             "select_region_pck_drop" => 1,
 | |
|             "get_pic_zone" => 1,
 | |
|             "group_by" => "ord.id",
 | |
|             "limit" => $limit,
 | |
|         ];
 | |
|         $orders = Orders::showOrder($filter);
 | |
|         if (count($orders) < 1) {
 | |
|             return abort(404, "order not found");
 | |
|         }
 | |
|         $bladeViewOrders = [];
 | |
|         foreach ($orders as $iOrd => $order) {
 | |
|             // get multiple point (pick,drop)
 | |
| 
 | |
|             $_filter = [
 | |
|                 "id" => $order->ord_id,
 | |
|                 "get_pic_zone" => 1,
 | |
|                 "limit" => $order->drop_total,
 | |
|             ];
 | |
| 
 | |
|             if (isset($req->point_id)) {
 | |
|                 $_filter["point_id"] = $req->point_id;
 | |
|             }
 | |
| 
 | |
|             $adtPoints = Orders::getPoints($_filter);
 | |
|             if (isset($req->point_id) == false) {
 | |
|                 // dd($adtPoints);
 | |
|                 array_splice($adtPoints, 0, 1);
 | |
|             }
 | |
| 
 | |
|             $orders[$iOrd]->adtPoints = $adtPoints;
 | |
| 
 | |
|             // formated for blade views
 | |
|             $tmpBladeView = clone $order;
 | |
|             if ($order->ord_pck_docs_client_img) {
 | |
|                 $tmpBladeView->ord_pck_docs_client_img = json_decode($order->ord_pck_docs_client_img);
 | |
|             }
 | |
|             // if ($order->ord_acdnt_imgs) $tmpBladeView->ord_acdnt_imgs = json_decode($order->ord_acdnt_imgs);
 | |
|             $bladeViewOrders[] = clone $tmpBladeView;
 | |
|         }
 | |
|         // clients/25/logo_1720525752.jpeg
 | |
| 
 | |
|         $client = DB::table("t_orders as to")
 | |
|             ->leftJoin("t_orders_clients as toc", "toc.ord_id", "to.id")
 | |
|             ->leftJoin("t_clients as tc", "tc.id", "toc.c_pt_id")
 | |
|             ->where("to.code", $codes)
 | |
|             ->select("tc.c_name", "tc.c_logo")
 | |
|             ->first();
 | |
|         $logo = base_path() . "/public/storage/" . $client->c_logo;
 | |
| 
 | |
|         $_view = isset($req->point_id) ? "menu_v1._printSPKSingle" : "menu_v1._printSPK";
 | |
| 
 | |
|         $pdf = PDF::loadView($_view, [
 | |
|             "orders" => $orders,
 | |
|             "client" => $client,
 | |
|             "logo" => $logo,
 | |
|         ]);
 | |
|         return $pdf->setPaper("a4", "potrait")->stream("surat_perintah_kerja.pdf");
 | |
|         // } catch (\Exception $e) {
 | |
|         // 	$apiResp = Responses::error($e->getMessage());
 | |
|         // 	return abort(500, $apiResp['meta']['message']);
 | |
|         // }
 | |
|     }
 | |
|     public function view_transactions_download_summary(Request $req)
 | |
|     {
 | |
|         // try {
 | |
|         $now = time();
 | |
|         $input = [
 | |
|             "ord_code" => $req->ord_code,
 | |
|         ];
 | |
|         $rulesInput = [
 | |
|             // 'ord_code' => 'required|numeric', // single
 | |
|             "ord_code" => "required|string",
 | |
|         ];
 | |
|         // validasi input
 | |
|         $isValidInput = Validator::make($input, $rulesInput);
 | |
|         if (!$isValidInput->passes()) {
 | |
|             return abort(403, $isValidInput->messages()->first());
 | |
|         }
 | |
| 
 | |
|         $codes = explode(",", $req->ord_code);
 | |
|         $limit = count($codes);
 | |
|         if ($limit > 2) {
 | |
|             return redirect(route("view_transactions"));
 | |
|         }
 | |
|         $filter = [
 | |
|             "codes" => $codes,
 | |
|             "get_checker_data" => 1,
 | |
|             "get_prefer_type_truck" => 1,
 | |
|             "get_additional_vehicles_info" => 1,
 | |
|             "get_client_pt" => 1,
 | |
|             "select_region_pck_drop" => 1,
 | |
|             "get_pic_zone" => 1,
 | |
|             "group_by" => "ord.id",
 | |
|             "limit" => $limit,
 | |
|         ];
 | |
|         $orders = Orders::showOrder($filter);
 | |
|         if (count($orders) < 1) {
 | |
|             return abort(404, "order not found");
 | |
|         }
 | |
|         // $bladeViewOrders = [];
 | |
|         // foreach ($orders as $iOrd => $order) {
 | |
|         //     // get multiple point (pick,drop)
 | |
| 
 | |
|         //     $_filter = [
 | |
|         //         "id" => $order->ord_id,
 | |
|         //         "get_pic_zone" => 1,
 | |
|         //         "limit" => $order->drop_total,
 | |
|         //     ];
 | |
| 
 | |
|         //     if (isset($req->point_id)) {
 | |
|         //         $_filter["point_id"] = $req->point_id;
 | |
|         //     }
 | |
| 
 | |
|         //     $adtPoints = Orders::getPoints($_filter);
 | |
|         //     if (isset($req->point_id) == false) {
 | |
|         //         // dd($adtPoints);
 | |
|         //         array_splice($adtPoints, 0, 1);
 | |
|         //     }
 | |
| 
 | |
|         //     $orders[$iOrd]->adtPoints = $adtPoints;
 | |
| 
 | |
|         //     $tmpBladeView = clone $order;
 | |
|         //     if ($order->ord_pck_docs_client_img) {
 | |
|         //         $tmpBladeView->ord_pck_docs_client_img = json_decode($order->ord_pck_docs_client_img);
 | |
|         //     }
 | |
|         //     $bladeViewOrders[] = clone $tmpBladeView;
 | |
|         // }
 | |
|         // dd($orders);
 | |
| 
 | |
|         $client = DB::table("t_orders as to")
 | |
|             ->leftJoin("t_orders_clients as toc", "toc.ord_id", "to.id")
 | |
|             ->leftJoin("t_clients as tc", "tc.id", "toc.c_pt_id")
 | |
|             ->where("to.code", $codes)
 | |
|             ->select("tc.c_name", "tc.c_logo")
 | |
|             ->first();
 | |
|         $logo = base_path() . "/public/storage/" . $client->c_logo;
 | |
| 
 | |
|         $rawData = DB::table("t_orders_pck_drop as topd")
 | |
|             ->leftJoin("t_orders_pickups as top", "top.id", "topd.pck_id")
 | |
|             ->leftJoin("t_orders_drops as tod", "tod.id", "topd.drop_id")
 | |
|             ->where("topd.ord_code", $codes)
 | |
|             ->selectRaw(
 | |
|                 "topd.id,
 | |
|                 FROM_UNIXTIME(top.set_pck_at, '%d %M %Y') as pck_date,
 | |
|                 FROM_UNIXTIME(top.set_pck_at, '%H:%i:%s') as pck_time,
 | |
|                 top.pck_name,
 | |
|                 top.pck_addr,
 | |
|                 top.pic_name as pck_pic_name,
 | |
|                 top.pic_phone_val as pck_pic_phone,
 | |
|                 tod.drop_name,
 | |
|                 tod.drop_addr,
 | |
|                 tod.pic_name as drp_pic_name,
 | |
|                 tod.pic_phone_val as drp_pic_phone"
 | |
|             );
 | |
|         if (isset($req->point_id)) {
 | |
|             $rawData->where("topd.id", $req->point_id);
 | |
|         }
 | |
|         $rawData = $rawData->get();
 | |
| 
 | |
|         foreach ($rawData as $_data) {
 | |
|             $ehck = DB::table("t_orders_drivers_uploads")
 | |
|                 ->select(
 | |
|                     "id", //
 | |
|                     "checklist_name",
 | |
|                     "checklist_desc",
 | |
|                     "img",
 | |
|                     "updt"
 | |
|                 )
 | |
|                 ->where("ord_pck_drop_id", $_data->id)
 | |
|                 ->get();
 | |
|             $data[] = [
 | |
|                 "id" => $_data->id,
 | |
|                 "pck_date" => $_data->pck_date,
 | |
|                 "pck_time" => $_data->pck_time,
 | |
|                 "pck_name" => $_data->pck_name,
 | |
|                 "pck_addr" => $_data->pck_addr,
 | |
|                 "pck_pic_name" => $_data->pck_pic_name,
 | |
|                 "pck_pic_phone" => $_data->pck_pic_phone,
 | |
|                 "drp_name" => $_data->drop_name,
 | |
|                 "drp_addr" => $_data->drop_addr,
 | |
|                 "drp_pic_name" => $_data->drp_pic_name,
 | |
|                 "drp_pic_phone" => $_data->drp_pic_phone,
 | |
|                 "checklist_array" => $ehck,
 | |
|             ];
 | |
|         }
 | |
|         // $summary = [
 | |
|         //     "orders" => $orders,
 | |
|         //     "client" => $client,
 | |
|         //     "logo" => $logo,
 | |
|         //     "data" => $data,
 | |
|         // ];
 | |
|         // dd($summary);
 | |
|         // dd($data);
 | |
|         $pdf = PDF::loadView("menu_v1._printSumarry", [
 | |
|             "orders" => $orders,
 | |
|             "client" => $client,
 | |
|             "logo" => $logo,
 | |
|             "data" => $data,
 | |
|         ]);
 | |
|         return $pdf->setPaper("a4", "potrait")->stream("surat_perintah_kerja.pdf");
 | |
|         // } catch (\Exception $e) {
 | |
|         // 	$apiResp = Responses::error($e->getMessage());
 | |
|         // 	return abort(500, $apiResp['meta']['message']);
 | |
|         // }
 | |
|     }
 | |
|     public function view_transactions_download_spk_single_bak(Request $req)
 | |
|     {
 | |
|         // try {
 | |
|         $now = time();
 | |
|         $input = [
 | |
|             "ord_code" => $req->ord_code,
 | |
|         ];
 | |
|         $rulesInput = [
 | |
|             // 'ord_code' => 'required|numeric', // single
 | |
|             "ord_code" => "required|string",
 | |
|         ];
 | |
|         // validasi input
 | |
|         $isValidInput = Validator::make($input, $rulesInput);
 | |
|         if (!$isValidInput->passes()) {
 | |
|             return abort(403, $isValidInput->messages()->first());
 | |
|         }
 | |
| 
 | |
|         $codes = explode(",", $req->ord_code);
 | |
|         $limit = count($codes);
 | |
|         if ($limit > 2) {
 | |
|             return redirect(route("view_transactions"));
 | |
|         }
 | |
| 
 | |
|         $filter = [
 | |
|             "codes" => $codes,
 | |
|             "get_checker_data" => 1,
 | |
|             "get_prefer_type_truck" => 1,
 | |
|             "get_additional_vehicles_info" => 1,
 | |
|             "get_client_pt" => 1,
 | |
|             "select_region_pck_drop" => 1,
 | |
|             "get_pic_zone" => 1,
 | |
|         ];
 | |
|         $orders = Orders::showOrder($filter);
 | |
|         if (count($orders) < 1) {
 | |
|             return abort(404, "order not found");
 | |
|         }
 | |
|         $adtPoints = Orders::getPoints([
 | |
|             "id" => $orders[0]->ord_id,
 | |
|             "limit" => $orders[0]->drop_total,
 | |
|             "get_pic_zone" => 1,
 | |
|         ]);
 | |
|         array_splice($adtPoints, 0, 1);
 | |
| 
 | |
|         $pdf = PDF::loadView("menu_v1._printSPK", [
 | |
|             "order" => $orders[0],
 | |
|             "adtPoints" => $adtPoints,
 | |
|         ]);
 | |
|         return $pdf->setPaper("a4", "potrait")->stream("surat_perintah_kerja.pdf");
 | |
|         // } catch (\Exception $e) {
 | |
|         // 	$apiResp = Responses::error($e->getMessage());
 | |
|         // 	return abort(500, $apiResp['meta']['message']);
 | |
|         // }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * API
 | |
|      */
 | |
| 
 | |
|     public function api_check_packing_list(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
| 
 | |
|             $input = [
 | |
|                 "packing_list" => $req->packing_list,
 | |
|                 // 'weight' => $req->weight,
 | |
|                 // 'cbm' => $req->cbm,
 | |
|                 // 'koli' => $req->koli,
 | |
|                 // 'Item Code' => $req->input('Item Code'),
 | |
|                 // 'Description' => $req->input('Description'),
 | |
|                 // 'Weight (kg)' => $req->input('Weight (kg)'),
 | |
|                 // 'Qty' => $req->input('Qty'),
 | |
|                 // 'Length (cm)' => $req->input('Length (cm)'),
 | |
|                 // 'Wide (cm)' => $req->input('Wide (cm)'),
 | |
|                 // 'Height (cm)' => $req->input('Height (cm)'),
 | |
|                 // 'Volume (m3)' => $req->input('Volume (m3)'),
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "packing_list" => "required|array",
 | |
|                 "packing_list.*.Item Code" => "required|string",
 | |
|                 "packing_list.*.Description" => "required|string",
 | |
|                 "packing_list.*.Weight (kg)" => "required|numeric|min:0",
 | |
|                 // 'packing_list.*.Qty' => 'required|numeric|min:0',
 | |
|                 "packing_list.*.Length (cm)" => "required|numeric|min:0",
 | |
|                 "packing_list.*.Wide (cm)" => "required|numeric|min:0",
 | |
|                 "packing_list.*.Height (cm)" => "required|numeric|min:0",
 | |
|                 "packing_list.*.Volume (m3)" => "required|numeric|min:0",
 | |
|                 // 'weight' => 'required',
 | |
|                 // 'cbm' => 'required',
 | |
|                 // 'koli' => 'required',
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 // $apiResp = Responses::bad_input('packing list invalid');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $calc_weight = 0;
 | |
|             // $total_qty = 0;
 | |
|             $total_koli = 0;
 | |
|             $calc_length = 0;
 | |
|             $calc_wide = 0;
 | |
|             $calc_height = 0;
 | |
|             $calc_cbm = 0;
 | |
| 
 | |
|             foreach ($req->packing_list as $k => $v) {
 | |
|                 if (count(OrdersItems::getOrderItemByCode($v["Item Code"])) > 0) {
 | |
|                     $apiResp = Responses::bad_request(
 | |
|                         "Item Code: " . $v["Item Code"] . " not uniq, please reupload your packing list"
 | |
|                     );
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|                 // if (!is_numeric($v['Qty'])) {
 | |
|                 // 	$v['Qty'] = 0;
 | |
|                 // }
 | |
|                 // $total_qty += $v['Qty'];
 | |
|                 if (!is_numeric($v["Weight (kg)"])) {
 | |
|                     $v["Weight (kg)"] = 0;
 | |
|                 }
 | |
|                 // $calc_weight += $v['Weight (kg)'] * $v['Qty'];
 | |
|                 $calc_weight += $v["Weight (kg)"];
 | |
|                 if (!is_numeric($v["Length (cm)"])) {
 | |
|                     $v["Length (cm)"] = 0;
 | |
|                 }
 | |
|                 $calc_length += $v["Length (cm)"];
 | |
|                 if (!is_numeric($v["Wide (cm)"])) {
 | |
|                     $v["Wide (cm)"] = 0;
 | |
|                 }
 | |
|                 $calc_wide += $v["Wide (cm)"];
 | |
|                 if (!is_numeric($v["Height (cm)"])) {
 | |
|                     $v["Height (cm)"] = 0;
 | |
|                 }
 | |
|                 $calc_height += $v["Height (cm)"];
 | |
|                 if (!is_numeric($v["Volume (m3)"])) {
 | |
|                     $v["Volume (m3)"] = 0;
 | |
|                 }
 | |
|                 // $calc_volume = ($v['Length (cm)'] * $v['Wide (cm)'] * $v['Height (cm)']) * $v['Qty'];
 | |
|                 $calc_volume = ($v["Length (cm)"] * $v["Wide (cm)"] * $v["Height (cm)"]) / 1000000;
 | |
|                 // $v['Volume (m3)'] = $v['Volume (m3)'] * $v['Qty'];
 | |
|                 $v["Volume (m3)"] = $v["Volume (m3)"];
 | |
|                 if ($calc_volume > $v["Volume (m3)"]) {
 | |
|                     $calc_cbm += $calc_volume;
 | |
|                 } else {
 | |
|                     $calc_cbm += $v["Volume (m3)"];
 | |
|                 }
 | |
| 
 | |
|                 $total_koli++;
 | |
|             }
 | |
| 
 | |
|             // if (is_numeric($req->weight)) {
 | |
|             // 	if ($calc_weight > $req->weight) {
 | |
|             // 		// $apiResp = Responses::bad_request('The input weight is less than then total weight of the packing list');
 | |
|             // 		$apiResp = Responses::bad_request('Total weight of the packing list is greater than the input weight, please reupload your packing list');
 | |
|             // 		return new Response($apiResp, $apiResp['meta']['code']);
 | |
|             // 	} else {
 | |
|             // 		$calc_weight = $req->weight;
 | |
|             // 	}
 | |
|             // }
 | |
|             // if (is_numeric($req->cbm)) {
 | |
|             // 	if ($calc_cbm > $req->cbm) {
 | |
|             // 		// $apiResp = Responses::bad_request('The input volume is less than then total volume of the packing list');
 | |
|             // 		$apiResp = Responses::bad_request('Total volume of the packing list is greater than the input volume, please reupload your packing list');
 | |
|             // 		return new Response($apiResp, $apiResp['meta']['code']);
 | |
|             // 	} else {
 | |
|             // 		$calc_cbm = $req->cbm;
 | |
|             // 	}
 | |
|             // }
 | |
|             // if (is_numeric($req->koli)) {
 | |
|             // 	if ($total_qty > $req->koli) {
 | |
|             // 		// $apiResp = Responses::bad_request('The input koli is less than then total koli of the packing list');
 | |
|             // 		$apiResp = Responses::bad_request('Total koli of the packing list is greater than the input koli, please reupload your packing list');
 | |
|             // 		return new Response($apiResp, $apiResp['meta']['code']);
 | |
|             // 	} else {
 | |
|             // 		$total_qty = $total_qty;
 | |
|             // 	}
 | |
|             // }
 | |
|             if ($calc_weight === 0 && $calc_cbm === 0) {
 | |
|                 $apiResp = Responses::bad_request(
 | |
|                     "You must fill in at least 1 of weight / dimension / volume on packing list."
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $apiResp = Responses::success("packing list valid");
 | |
|             $apiResp["data"] = [
 | |
|                 "calc_weight" => $calc_weight,
 | |
|                 "calc_cbm" => $calc_cbm,
 | |
|                 // 'total_qty' => $total_qty,
 | |
|                 "total_koli" => $total_koli,
 | |
|             ];
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_checkout_v1(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
| 
 | |
|             $input = [
 | |
|                 "pickup_at" => $req->pickup_at,
 | |
|                 "pickup_zone_id" => $req->pickup_zone_id,
 | |
|                 "drop_zone_id" => $req->drop_zone_id,
 | |
|                 "weight" => $req->weight,
 | |
|                 "cbm" => $req->cbm,
 | |
|                 "koli" => $req->koli,
 | |
|                 "truck_type_id" => $req->truck_type_id,
 | |
|                 "truck_type_name" => $req->truck_type_name,
 | |
|                 "truck_type_weight" => $req->truck_type_weight,
 | |
|                 "truck_type_cbm" => $req->truck_type_cbm,
 | |
|                 "truck_type_koli" => $req->truck_type_koli,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "pickup_at" => "required|integer",
 | |
|                 "pickup_zone_id" => "required|integer",
 | |
|                 "drop_zone_id" => "required|integer",
 | |
|                 "weight" => "nullable",
 | |
|                 "cbm" => "nullable",
 | |
|                 "koli" => "nullable",
 | |
|                 "truck_type_id" => "required|numeric",
 | |
|                 "truck_type_name" => "nullable|string",
 | |
|                 "truck_type_weight" => "nullable",
 | |
|                 "truck_type_cbm" => "nullable",
 | |
|                 "truck_type_koli" => "nullable",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             if (!is_numeric($req->weight) && !is_numeric($req->cbm) && !is_numeric($req->koli)) {
 | |
|                 $apiResp = Responses::bad_request("You must fill in at least 1 of the packing list.");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             if ($req->weight === 0 && $req->cbm === 0 && $req->koli === 0) {
 | |
|                 $apiResp = Responses::bad_request("You must fill in at least 1 of the packing list.");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $pck = Zone::getZoneById($req->pickup_zone_id);
 | |
|             if (count($pck) < 1) {
 | |
|                 $apiResp = Responses::bad_request("Pickup zone not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($pck[0]->prid == 0) {
 | |
|                 $apiResp = Responses::bad_request(
 | |
|                     "Pickup zone province not filled, please recheck input province zone"
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $drop = Zone::getZoneById($req->drop_zone_id);
 | |
|             if (count($drop) < 1) {
 | |
|                 $apiResp = Responses::bad_request("Drop zone not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($drop[0]->ktid == 0) {
 | |
|                 $apiResp = Responses::bad_request(
 | |
|                     "Drop zone city not filled, please recheck input city zone"
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($drop[0]->kcid == 0) {
 | |
|                 $apiResp = Responses::bad_request(
 | |
|                     "Drop zone district not filled, please recheck input district zone"
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $rates = ConfRates::getRateByDestDistrict($pck[0]->prid, $drop[0]->kcid);
 | |
|             if (count($rates) < 1) {
 | |
|                 $rates = ConfRates::getRateByDestCity($pck[0]->prid, $drop[0]->ktid);
 | |
|             }
 | |
| 
 | |
|             if (count($rates) < 1) {
 | |
|                 $apiResp = Responses::bad_request("No service available going to drop zone");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             // check maximum weight / cbm truck type yang ada sekarang
 | |
|             $use_price_cbm = 1;
 | |
|             $use_price_weight = 1;
 | |
|             if ($req->truck_type_id && $req->truck_type_id != 0) {
 | |
|                 if ($req->truck_type_cbm != 0 && $req->truck_type_cbm > $req->cbm) {
 | |
|                     $apiResp = Responses::bad_request("Cbm is over load");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 } elseif ($req->truck_type_weight != 0 && $req->truck_type_weight > $req->weight) {
 | |
|                     $apiResp = Responses::bad_request("Weight is over load");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 } else {
 | |
|                     $apiResp = Responses::bad_request("Package list is over load");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             } else {
 | |
|                 $truck_types = ConfTruckTypes::listTruckTypesRates(
 | |
|                     ConfTruckTypes::IS_ACTIVE,
 | |
|                     ConfRates::LANE_EARTH
 | |
|                 );
 | |
|                 if (count($truck_types) < 1) {
 | |
|                     $apiResp = Responses::bad_request("No vehicle available");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|                 $is_tt_overload = 1;
 | |
|                 foreach ($truck_types as $k => $v) {
 | |
|                     if ($v->max_cbm != 0 && $v->max_cbm < $req->cbm) {
 | |
|                         $is_tt_overload = 0;
 | |
|                     } elseif ($v->max_kg != 0 && $v->max_kg < $req->weight) {
 | |
|                         $is_tt_overload = 0;
 | |
|                     }
 | |
|                 }
 | |
|                 if (!$is_tt_overload) {
 | |
|                     $apiResp = Responses::bad_request("Package list is over load");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             $client = Clients::getClientById($req->auth->client_group_id);
 | |
| 
 | |
|             $opts = [];
 | |
|             foreach ($rates as $k => $v) {
 | |
|                 $opt = [
 | |
|                     "is_best" => 0,
 | |
|                 ];
 | |
|                 if ($k === 0) {
 | |
|                     $opt["is_best"] = 1;
 | |
|                 }
 | |
|                 $opt["lead_time_id"] = $v->id;
 | |
|                 // $center_time = $v->long_time - $v->fast_time;
 | |
|                 $opt["lead_time"] = $v->long_time;
 | |
|                 $price = 0;
 | |
|                 if (is_numeric($req->cbm) && $req->cbm != 0 && $v->sell_cbm != 0 && $use_price_cbm != 0) {
 | |
|                     $price = $req->cbm * $v->sell_cbm;
 | |
|                 } else {
 | |
|                     if (
 | |
|                         is_numeric($req->weight) &&
 | |
|                         $req->weight != 0 &&
 | |
|                         $v->sell_kg != 0 &&
 | |
|                         $use_price_weight != 0
 | |
|                     ) {
 | |
|                         $price = $req->weight * $v->sell_kg;
 | |
|                     } else {
 | |
|                         if (is_numeric($req->koli) && $req->koli != 0 && $v->sell_cbm != 0) {
 | |
|                             $price = $req->koli * Orders::ONE_KG_ONE_CBM * $v->sell_cbm;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 if ($price == 0) {
 | |
|                     $apiResp = Responses::bad_request("No service provided");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|                 $opt["price"] = $price;
 | |
|                 $opt["real_price"] = $price;
 | |
|                 $opt["disc_price"] = 0;
 | |
|                 $opt["disc_type"] = $client[0]->disc_type;
 | |
|                 $opt["disc_percent"] = 0;
 | |
|                 if ($client[0]->disc_type === Clients::DISC_TYPE_FIX) {
 | |
|                     $opt["disc_price"] = $client[0]->disc_amount;
 | |
|                     $opt["price"] = $opt["price"] - $opt["disc_price"];
 | |
|                 } elseif ($client[0]->disc_type === Clients::DISC_TYPE_PERCENT) {
 | |
|                     $opt["disc_percent"] = $client[0]->disc_amount;
 | |
|                     $opt["disc_price"] = ($opt["price"] * $client[0]->disc_amount) / 100;
 | |
|                     $opt["price"] = $opt["price"] - $opt["disc_price"];
 | |
|                 }
 | |
|                 // group by lead_time and sell_price
 | |
|                 $isSame = 0;
 | |
|                 foreach ($opts as $key => $val) {
 | |
|                     if ($val["price"] == $opt["price"] && $val["lead_time"] == $opt["lead_time"]) {
 | |
|                         $isSame = 1;
 | |
|                     }
 | |
|                 }
 | |
|                 if ($isSame === 1) {
 | |
|                     continue;
 | |
|                 }
 | |
|                 array_push($opts, $opt);
 | |
|             }
 | |
| 
 | |
|             $apiResp = Responses::success("checkout success");
 | |
|             $apiResp["data"] = $opts;
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_checkout_v2(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             // $apiResp = Responses::bad_request("Service on maintenance");
 | |
|             // return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
| 
 | |
|             // $now = time();
 | |
| 
 | |
|             $input = [
 | |
|                 "pickup_at" => $req->pickup_at,
 | |
|                 "pickup_zone_id" => $req->pickup_zone_id,
 | |
|                 "drop_zone_id" => $req->drop_zone_id,
 | |
|                 // "truck_type_id" => $req->truck_type_id,
 | |
|                 // "truck_type_name" => $req->truck_type_name,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "pickup_at" => "required|integer",
 | |
|                 "pickup_zone_id" => "required|integer",
 | |
|                 "drop_zone_id" => "required|integer",
 | |
|                 // "truck_type_id" => "required|numeric",
 | |
|                 // "truck_type_name" => "nullable|string",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $adm_id = 0;
 | |
|             $crt_type_order = Orders::CRT_TYPE_ORDER_CLIENT;
 | |
|             if ($req->auth->role === Users::ROLE_ADMIN) {
 | |
|                 $subInput = [
 | |
|                     "uid" => $req->uid,
 | |
|                 ];
 | |
|                 $rulesSubInput = [
 | |
|                     "uid" => "required|integer|not_in:0",
 | |
|                 ];
 | |
| 
 | |
|                 // validasi subInput
 | |
|                 $isValidInput = Validator::make($subInput, $rulesSubInput);
 | |
|                 if (!$isValidInput->passes()) {
 | |
|                     $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|                 $adminAuth = $req->auth;
 | |
|                 $req->auth = Users::getUserById($req->uid)[0];
 | |
|                 $req->auth->uid = $req->auth->id;
 | |
| 
 | |
|                 $adm_id = $adminAuth->uid;
 | |
|                 $crt_type_order = Orders::CRT_TYPE_ORDER_ADMIN;
 | |
|             }
 | |
| 
 | |
|             $pck = Zone::getZoneById($req->pickup_zone_id);
 | |
|             if (count($pck) < 1) {
 | |
|                 $apiResp = Responses::bad_request("Pickup zone not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($pck[0]->prid == 0) {
 | |
|                 $apiResp = Responses::bad_request(
 | |
|                     "Pickup zone province not filled, please recheck input province zone"
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $drop = Zone::getZoneById($req->drop_zone_id);
 | |
|             if (count($drop) < 1) {
 | |
|                 $apiResp = Responses::bad_request("Drop zone not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($drop[0]->ktid == 0) {
 | |
|                 $apiResp = Responses::bad_request(
 | |
|                     "Drop zone city not filled, please recheck input city zone"
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($drop[0]->kcid == 0) {
 | |
|                 $apiResp = Responses::bad_request(
 | |
|                     "Drop zone district not filled, please recheck input district zone"
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             // $rates = ConfRates::getRateByDestDistrict($pck[0]->prid, $drop[0]->kcid);
 | |
|             // // dd($rates);
 | |
|             // if (count($rates) < 1) {
 | |
|             //     $rates = ConfRates::getRateByDestCity($pck[0]->prid, $drop[0]->ktid);
 | |
|             // }
 | |
| 
 | |
|             // if (count($rates) < 1) {
 | |
|             //     $apiResp = Responses::bad_request("No service available going to drop zone");
 | |
|             //     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             // }
 | |
|             $rates = 0;
 | |
| 
 | |
|             $client = Clients::getClientById($req->auth->client_group_id);
 | |
| 
 | |
|             $check_truck_type = false;
 | |
|             $ttid = 0;
 | |
|             if ($req->truck_type_id && $req->truck_type_id != 0) {
 | |
|                 $check_truck_type = true;
 | |
|                 $ttid = (int) $req->truck_type_id;
 | |
|             }
 | |
| 
 | |
|             $opts = [];
 | |
|             // foreach ($rates as $k => $v) {
 | |
|             //     if ($check_truck_type) {
 | |
|             //         if ($v->vhc_type !== $ttid) {
 | |
|             //             continue;
 | |
|             //         }
 | |
|             //     }
 | |
| 
 | |
|             //     $opt = [
 | |
|             //         "is_best" => 0,
 | |
|             //     ];
 | |
|             //     if ($k === 0) {
 | |
|             //         $opt["is_best"] = 1;
 | |
|             //     }
 | |
|             //     $opt["lead_time_id"] = $v->id;
 | |
|             //     // $center_time = $v->long_time - $v->fast_time;
 | |
|             //     $opt["lead_time"] = $v->long_time;
 | |
|             //     $price = $v->sell_ftl ?? 0;
 | |
| 
 | |
|             //     // TRIGER JIKA HARGA 0
 | |
|             //     // if ($price < 1) {
 | |
|             //     //     $apiResp = Responses::bad_request("No service provided");
 | |
|             //     //     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             //     // }
 | |
|             //     $opt["price"] = $price;
 | |
|             //     $opt["real_price"] = $price;
 | |
|             //     $opt["disc_price"] = 0;
 | |
|             //     $opt["disc_type"] = $client[0]->disc_type;
 | |
|             //     $opt["disc_percent"] = 0;
 | |
|             //     if ($client[0]->disc_type === Clients::DISC_TYPE_FIX) {
 | |
|             //         $opt["disc_price"] = $client[0]->disc_amount;
 | |
|             //         $opt["price"] = $opt["price"] - $opt["disc_price"];
 | |
|             //     } elseif ($client[0]->disc_type === Clients::DISC_TYPE_PERCENT) {
 | |
|             //         $opt["disc_percent"] = $client[0]->disc_amount;
 | |
|             //         $opt["disc_price"] = ($opt["price"] * $client[0]->disc_amount) / 100;
 | |
|             //         $opt["price"] = $opt["price"] - $opt["disc_price"];
 | |
|             //     }
 | |
|             //     // group by lead_time and sell_price
 | |
|             //     $isSame = 0;
 | |
|             //     foreach ($opts as $key => $val) {
 | |
|             //         if ($val["price"] == $opt["price"] && $val["lead_time"] == $opt["lead_time"]) {
 | |
|             //             $isSame = 1;
 | |
|             //         }
 | |
|             //     }
 | |
|             //     if ($isSame === 1) {
 | |
|             //         continue;
 | |
|             //     }
 | |
|             //     array_push($opts, $opt);
 | |
|             // }
 | |
|             // dd(count($opts));
 | |
|             // if (count($opts) < 1 && $check_truck_type) {
 | |
|             //     $apiResp = Responses::bad_request("No truck type available going to drop zone");
 | |
|             //     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             // }
 | |
| 
 | |
|             $apiResp = Responses::success("checkout success");
 | |
|             $apiResp["data"] = $opts;
 | |
| 
 | |
|             if ($req->is_insurance === "true") {
 | |
|                 $insurances = Insurances::getInsurancesByRangeBeneficiaryAndActive($req->amt_beneficiary);
 | |
|                 if (count($insurances) < 1) {
 | |
|                     $apiResp = Responses::bad_request("Total pertangguhan tidak tersedia");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|                 $apiResp["insurance"] = $insurances[0];
 | |
|             }
 | |
| 
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_create_order_v1(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
| 
 | |
|             $input = [
 | |
|                 "pickup_at" => $req->pickup_at,
 | |
|                 "pickup_zone_id" => $req->pickup_zone_id,
 | |
|                 "drop_zone_id" => $req->drop_zone_id,
 | |
|                 "weight" => $req->weight,
 | |
|                 "cbm" => $req->cbm,
 | |
|                 "koli" => $req->koli,
 | |
|                 "qty" => $req->qty,
 | |
|                 "packing_list" => $req->packing_list,
 | |
|                 "lead_time" => $req->lead_time,
 | |
|                 "price" => $req->price,
 | |
|                 "real_price" => $req->real_price,
 | |
|                 "disc_price" => $req->disc_price,
 | |
|                 "lead_time_id" => $req->lead_time_id,
 | |
|                 "truck_type_id" => $req->truck_type_id,
 | |
|                 "truck_type_name" => $req->truck_type_name,
 | |
|                 "truck_type_weight" => $req->truck_type_weight,
 | |
|                 "truck_type_cbm" => $req->truck_type_cbm,
 | |
|                 "truck_type_koli" => $req->truck_type_koli,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "pickup_at" => "required|integer",
 | |
|                 "pickup_zone_id" => "required|integer",
 | |
|                 "drop_zone_id" => "required|integer",
 | |
|                 "weight" => "nullable",
 | |
|                 "cbm" => "nullable",
 | |
|                 "koli" => "nullable",
 | |
|                 "qty" => "nullable",
 | |
|                 "packing_list" => "required|array",
 | |
|                 "packing_list.*.Item Code" => "required|string",
 | |
|                 "packing_list.*.Description" => "required|string",
 | |
|                 "packing_list.*.Weight (kg)" => "required|numeric|min:0",
 | |
|                 // 'packing_list.*.Qty' => 'required|numeric|min:0',
 | |
|                 "packing_list.*.Length (cm)" => "required|numeric|min:0",
 | |
|                 "packing_list.*.Wide (cm)" => "required|numeric|min:0",
 | |
|                 "packing_list.*.Height (cm)" => "required|numeric|min:0",
 | |
|                 "packing_list.*.Volume (m3)" => "required|numeric|min:0",
 | |
|                 "lead_time" => "required|numeric",
 | |
|                 "price" => "required|numeric",
 | |
|                 "real_price" => "required|numeric",
 | |
|                 "disc_price" => "required|numeric",
 | |
|                 "lead_time_id" => "required|integer|not_in:0",
 | |
|                 "truck_type_id" => "nullable|numeric",
 | |
|                 "truck_type_name" => "nullable|string",
 | |
|                 "truck_type_weight" => "nullable",
 | |
|                 "truck_type_cbm" => "nullable",
 | |
|                 "truck_type_koli" => "nullable",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $type_truck_name = $req->truck_type_name;
 | |
|             if ($req->truck_type_id && $req->truck_type_id != 0) {
 | |
|                 $type_truck_name = $req->truck_type_name;
 | |
|             } else {
 | |
|                 $type_truck_name = "";
 | |
|                 $req->truck_type_id = 0;
 | |
|             }
 | |
| 
 | |
|             if (!is_numeric($req->weight)) {
 | |
|                 $req->weight = 0;
 | |
|             }
 | |
|             if (!is_numeric($req->cbm)) {
 | |
|                 $req->cbm = 0;
 | |
|             }
 | |
|             if (!is_numeric($req->koli)) {
 | |
|                 $req->koli = 0;
 | |
|             }
 | |
|             if (!is_numeric($req->qty)) {
 | |
|                 $req->qty = 0;
 | |
|             }
 | |
| 
 | |
|             $nanoid = new Nanoid();
 | |
|             $code = $nanoid->formattedId("0123456789", 12);
 | |
|             $uniqCode = Orders::getOrderByCode($code);
 | |
|             if (count($uniqCode) > 0) {
 | |
|                 $code = $nanoid->formattedId("0123456789", 12);
 | |
|                 if (count($uniqCode) > 0) {
 | |
|                     $code = $nanoid->formattedId("0123456789", 12);
 | |
|                     if (count($uniqCode) > 0) {
 | |
|                         $code = $nanoid->formattedId("0123456789", 12);
 | |
|                         $apiResp = Responses::bad_request("code has been used, try again");
 | |
|                         return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             $client = Clients::getClientById($req->auth->client_group_id);
 | |
|             $rate = ConfRates::getRateById($req->lead_time_id);
 | |
|             $pck = Zone::getZoneById($req->pickup_zone_id);
 | |
|             // $pck_pic = Clients::getClientById($pck[0]->client_group_id);
 | |
|             $drop = Zone::getZoneById($req->drop_zone_id);
 | |
|             // $drop_pic = Clients::getClientById($drop[0]->client_group_id);
 | |
|             $admins = Users::getUsersActiveByRole(Users::ROLE_ADMIN);
 | |
| 
 | |
|             $admins_data = [];
 | |
|             foreach ($admins as $k => $v) {
 | |
|                 array_push($admins_data, [
 | |
|                     "admin_id" => $v->id,
 | |
|                     "admin_name" => $v->first_name,
 | |
|                     "admin_phone" => $v->phone_code . " " . implode(" ", str_split($v->phone, 4)),
 | |
|                     "admin_mail" => $v->email,
 | |
|                     "admin_addr" => "",
 | |
|                 ]);
 | |
|             }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             $insOrd = [
 | |
|                 "code" => $code,
 | |
|                 "type" => Orders::TYPE_FCL,
 | |
|                 "pck_total" => 1,
 | |
|                 "drop_total" => 1,
 | |
|                 "est_weight" => $req->weight,
 | |
|                 "weight" => $req->weight,
 | |
|                 "est_cbm" => $req->cbm,
 | |
|                 "cbm" => $req->cbm,
 | |
|                 "est_koli" => $req->koli,
 | |
|                 "koli" => $req->koli,
 | |
|                 "est_qty" => $req->qty,
 | |
|                 "qty" => $req->qty,
 | |
|                 "est_lead_time" => $req->lead_time,
 | |
|                 "lead_time" => $req->lead_time,
 | |
|                 "est_price" => $req->price,
 | |
|                 "price" => $req->price,
 | |
|                 "est_real_price" => $req->real_price,
 | |
|                 "real_price" => $req->real_price,
 | |
|                 "est_disc_price" => $req->disc_price,
 | |
|                 "disc_price" => $req->disc_price,
 | |
|                 "est_rate_id" => $req->lead_time_id,
 | |
|                 "rate_id" => $req->lead_time_id,
 | |
|                 "crt" => $now,
 | |
|                 "crt_by" => $req->auth->uid,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->uid,
 | |
|             ];
 | |
|             $ord_id = Orders::addOrder($insOrd);
 | |
| 
 | |
|             if ($pck[0]->boundary_bounds) {
 | |
|                 // $pck[0]->boundary_bounds = json_encode($pck[0]->boundary_bounds);
 | |
|             }
 | |
|             if ($pck[0]->boundary_latlngs) {
 | |
|                 // $pck[0]->boundary_latlngs = json_encode($pck[0]->boundary_latlngs);
 | |
|             }
 | |
| 
 | |
|             $insPck = [
 | |
|                 "ord_id" => $ord_id,
 | |
|                 "ord_code" => $code,
 | |
|                 "set_pck_at" => $req->pickup_at,
 | |
|                 "stts_pck" => OrdersPickups::STTS_WAIT,
 | |
|                 "pck_id" => $pck[0]->id,
 | |
|                 "pck_name" => $pck[0]->name,
 | |
|                 "pck_desc" => $pck[0]->desc,
 | |
|                 "pck_type" => $pck[0]->type,
 | |
|                 "pck_workflow" => $pck[0]->workflow_type,
 | |
|                 "pck_shiptocode" => $pck[0]->shiptocode,
 | |
|                 "pck_prid" => $pck[0]->prid,
 | |
|                 "pck_ktid" => $pck[0]->ktid,
 | |
|                 "pck_kcid" => $pck[0]->kcid,
 | |
|                 "pck_klid" => $pck[0]->klid,
 | |
|                 "pck_addr" => $pck[0]->fulladdress,
 | |
|                 "pck_cgroup_id" => $pck[0]->client_group_id,
 | |
|                 "pck_cdiv_id" => $pck[0]->client_div_id,
 | |
|                 "pck_cgp_id" => $pck[0]->client_gp_id,
 | |
|                 "pck_hex_color" => $pck[0]->boundary_hex_color,
 | |
|                 "pck_shape" => $pck[0]->boundary_type,
 | |
|                 "pck_radius" => $pck[0]->boundary_radius,
 | |
|                 "pck_bounds" => $pck[0]->boundary_bounds,
 | |
|                 "pck_latlngs" => $pck[0]->boundary_latlngs,
 | |
|                 "pck_points" => $pck[0]->boundary_points,
 | |
|                 // 'pic_name' => $pck_pic[0]->pic_name,
 | |
|                 // 'pic_phone_code' => $pck_pic[0]->pic_phone_code,
 | |
|                 // 'pic_phone_val' => $pck_pic[0]->pic_phone,
 | |
|                 // 'pic_mail' => $pck_pic[0]->pic_mail,
 | |
|                 "pic_name" => $req->auth->first_name,
 | |
|                 "pic_phone_code" => $req->auth->phone_code,
 | |
|                 "pic_phone_val" => $req->auth->phone,
 | |
|                 "pic_mail" => $req->auth->email,
 | |
|                 "est_weight" => $req->weight,
 | |
|                 "weight" => $req->weight,
 | |
|                 "est_cbm" => $req->cbm,
 | |
|                 "cbm" => $req->cbm,
 | |
|                 "est_koli" => $req->koli,
 | |
|                 "koli" => $req->koli,
 | |
|                 "est_qty" => $req->qty,
 | |
|                 "qty" => $req->qty,
 | |
|             ];
 | |
| 
 | |
|             $pck_id = OrdersPickups::add($insPck);
 | |
| 
 | |
|             if ($drop[0]->boundary_bounds) {
 | |
|                 // $drop[0]->boundary_bounds = json_encode($drop[0]->boundary_bounds);
 | |
|             }
 | |
|             if ($drop[0]->boundary_latlngs) {
 | |
|                 // $drop[0]->boundary_latlngs = json_encode($drop[0]->boundary_latlngs);
 | |
|             }
 | |
| 
 | |
|             $insDrop = [
 | |
|                 "ord_id" => $ord_id,
 | |
|                 "ord_code" => $code,
 | |
|                 "stts_drop" => OrdersDrops::STTS_WAIT,
 | |
|                 "drop_id" => $drop[0]->id,
 | |
|                 "drop_name" => $drop[0]->name,
 | |
|                 "drop_desc" => $drop[0]->desc,
 | |
|                 "drop_type" => $drop[0]->type,
 | |
|                 "drop_workflow" => $drop[0]->workflow_type,
 | |
|                 "drop_shiptocode" => $drop[0]->shiptocode,
 | |
|                 "drop_prid" => $drop[0]->prid,
 | |
|                 "drop_ktid" => $drop[0]->ktid,
 | |
|                 "drop_kcid" => $drop[0]->kcid,
 | |
|                 "drop_klid" => $drop[0]->klid,
 | |
|                 "drop_addr" => $drop[0]->fulladdress,
 | |
|                 "drop_cgroup_id" => $drop[0]->client_group_id,
 | |
|                 "drop_cdiv_id" => $drop[0]->client_div_id,
 | |
|                 "drop_cgp_id" => $drop[0]->client_gp_id,
 | |
|                 "drop_hex_color" => $drop[0]->boundary_hex_color,
 | |
|                 "drop_shape" => $drop[0]->boundary_type,
 | |
|                 "drop_radius" => $drop[0]->boundary_radius,
 | |
|                 "drop_bounds" => $drop[0]->boundary_bounds,
 | |
|                 "drop_latlngs" => $drop[0]->boundary_latlngs,
 | |
|                 "drop_points" => $drop[0]->boundary_points,
 | |
|                 // 'pic_name' => $drop_pic[0]->pic_name,
 | |
|                 // 'pic_phone_code' => $drop_pic[0]->pic_phone_code,
 | |
|                 // 'pic_phone_val' => $drop_pic[0]->pic_phone,
 | |
|                 // 'pic_mail' => $drop_pic[0]->pic_mail,
 | |
|                 "pic_name" => $req->auth->first_name,
 | |
|                 "pic_phone_code" => $req->auth->phone_code,
 | |
|                 "pic_phone_val" => $req->auth->phone,
 | |
|                 "pic_mail" => $req->auth->email,
 | |
|                 "est_weight" => $req->weight,
 | |
|                 "weight" => $req->weight,
 | |
|                 "est_cbm" => $req->cbm,
 | |
|                 "cbm" => $req->cbm,
 | |
|                 "est_koli" => $req->koli,
 | |
|                 "koli" => $req->koli,
 | |
|                 "est_qty" => $req->qty,
 | |
|                 "qty" => $req->qty,
 | |
|             ];
 | |
|             $drop_id = OrdersDrops::add($insDrop);
 | |
| 
 | |
|             $insClient = [
 | |
|                 "ord_id" => $ord_id,
 | |
|                 "ord_code" => $code,
 | |
|                 "c_id" => $req->auth->uid,
 | |
|                 "c_name" => $req->auth->first_name,
 | |
|                 "c_phone_code" => $req->auth->phone_code,
 | |
|                 "c_phone_val" => $req->auth->phone,
 | |
|                 "c_mail" => $req->auth->email,
 | |
|                 "c_addr" => $req->auth->fulladdress,
 | |
|                 "c_disc_type" => $client[0]->disc_type,
 | |
|                 "c_disc_amount" => $client[0]->disc_amount,
 | |
|                 "c_pt_id" => $client[0]->id,
 | |
|                 "c_pt_div_id" => $req->auth->client_div_id,
 | |
|                 "c_pt_gp_id" => $req->auth->client_gp_id,
 | |
|                 "c_pt_name" => $client[0]->c_name,
 | |
|                 "c_pt_phone_code" => $client[0]->c_phone_code,
 | |
|                 "c_pt_phone_val" => $client[0]->c_phone,
 | |
|                 "c_pt_mail" => $client[0]->c_mail,
 | |
|                 "c_pt_addr" => $client[0]->c_addr_office,
 | |
|                 "c_pt_pic_name" => $client[0]->pic_name,
 | |
|                 "c_pt_pic_phone_code" => $client[0]->pic_phone_code,
 | |
|                 "c_pt_pic_phone_val" => $client[0]->pic_phone,
 | |
|                 "c_pt_pic_mail" => $client[0]->pic_mail,
 | |
|                 "c_pt_pic_addr" => null,
 | |
|                 "prefer_truck_type" => $req->truck_type_id,
 | |
|             ];
 | |
|             $ord_client_id = OrdersClients::add($insClient);
 | |
| 
 | |
|             foreach ($req->packing_list as $k => $v) {
 | |
|                 $insItems = [
 | |
|                     "ord_id" => $ord_id,
 | |
|                     "ord_code" => $code,
 | |
|                     "pck_id" => $pck_id,
 | |
|                     "drop_id" => $drop_id,
 | |
|                     "item_code" => $v["Item Code"],
 | |
|                     "desc" => $v["Description"],
 | |
|                     "unit_weight" => OrdersItems::DEFAULT_WEIGHT_UNIT,
 | |
|                     "weight" => $v["Weight (kg)"],
 | |
|                     "unit_dimension" => OrdersItems::DEFAULT_DIMENSION_UNIT,
 | |
|                     // 'qty' => $v['Qty'] ?? 0,
 | |
|                     "length" => $v["Length (cm)"],
 | |
|                     "wide" => $v["Wide (cm)"],
 | |
|                     "height" => $v["Height (cm)"],
 | |
|                     "volume" => $v["Volume (m3)"],
 | |
|                     "crt" => $now,
 | |
|                 ];
 | |
|                 OrdersItems::add($insItems);
 | |
|             }
 | |
| 
 | |
|             $insRate = [
 | |
|                 "ord_id" => $ord_id,
 | |
|                 "ord_code" => $code,
 | |
|                 "rate_id" => $rate[0]->id,
 | |
|                 "rate_code" => $rate[0]->code,
 | |
|                 "origin_prov" => $rate[0]->origin_prov,
 | |
|                 "origin_city" => $rate[0]->origin_city,
 | |
|                 "origin_district" => $rate[0]->origin_district,
 | |
|                 "origin_village" => $rate[0]->origin_village,
 | |
|                 "lane" => $rate[0]->lane,
 | |
|                 "dest_prov" => $rate[0]->dest_prov,
 | |
|                 "dest_city" => $rate[0]->dest_city,
 | |
|                 "dest_district" => $rate[0]->dest_district,
 | |
|                 "dest_village" => $rate[0]->dest_village,
 | |
|                 "fast_time" => $rate[0]->fast_time,
 | |
|                 "long_time" => $rate[0]->long_time,
 | |
|                 "unit_time" => $rate[0]->unit_time,
 | |
|                 "sell_kg" => $rate[0]->sell_kg,
 | |
|                 "buy_kg" => $rate[0]->buy_kg,
 | |
|                 "margin_kg" => $rate[0]->margin_kg,
 | |
|                 "percent_kg" => $rate[0]->percent_kg,
 | |
|                 "sell_cbm" => $rate[0]->sell_cbm,
 | |
|                 "buy_cbm" => $rate[0]->buy_cbm,
 | |
|                 "margin_cbm" => $rate[0]->margin_cbm,
 | |
|                 "percent_cbm" => $rate[0]->percent_cbm,
 | |
|                 "vdr_id" => $rate[0]->vdr_id,
 | |
|                 "vhc_type" => $rate[0]->vhc_type,
 | |
|             ];
 | |
|             OrdersRates::add($insRate);
 | |
| 
 | |
|             $url = env("API_URL_NODE") . "/order/create";
 | |
|             $guzReq = new GuzzleClient();
 | |
|             $respNode = $guzReq->request("POST", $url, [
 | |
|                 "headers" => [
 | |
|                     "Host" => $_SERVER["SERVER_ADDR"],
 | |
|                     "User-Agent" => "curl/7.65.3",
 | |
|                     "Accept" => "*/*",
 | |
|                     "Accept-Encoding" => "gzip, deflate, br",
 | |
|                     // 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
 | |
|                     // 'Connection' => 'keep-alive',
 | |
|                 ],
 | |
|                 "json" => [
 | |
|                     "trx_code" => $code,
 | |
|                     "trx_at" => $now,
 | |
|                     "client_id" => $req->auth->uid,
 | |
|                     "client_name" => $req->auth->first_name,
 | |
|                     "client_phone" =>
 | |
|                         $req->auth->phone_code . " " . implode(" ", str_split($req->auth->phone, 4)),
 | |
|                     "client_mail" => $req->auth->email,
 | |
|                     "client_addr" => "",
 | |
|                     "client_prefer_type_truck" => $type_truck_name,
 | |
|                     "weight" => $req->weight,
 | |
|                     "cbm" => $req->cbm,
 | |
|                     "koli" => $req->koli,
 | |
|                     "pickup_zone_title" => $pck[0]->name,
 | |
|                     "pickup_zone_addr" => $pck[0]->fulladdress,
 | |
|                     "pickup_at" => $req->pickup_at,
 | |
|                     "drop_zone_title" => $drop[0]->name,
 | |
|                     "drop_zone_addr" => $drop[0]->fulladdress,
 | |
|                     "admins" => $admins_data,
 | |
|                 ],
 | |
|             ]);
 | |
|             if ($respNode->getStatusCode() != 200) {
 | |
|                 DB::rollBack();
 | |
|                 $apiResp = Responses::bad_request("fail create order 0");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             $body = json_decode($respNode->getBody()->getContents());
 | |
| 
 | |
|             $apiResp = Responses::created("success create order");
 | |
| 
 | |
|             DB::commit();
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_create_order_v2(Request $req)
 | |
|     {
 | |
|         // dd($req->all());
 | |
|         try {
 | |
|             // $apiResp = Responses::bad_request("Service on maintenance");
 | |
|             // return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             $now = time();
 | |
| 
 | |
|             $input = [
 | |
|                 "pickup_at" => $req->pickup_at,
 | |
|                 "pickup_zone_id" => $req->pickup_zone_id,
 | |
|                 "drop_zone_id" => $req->drop_zone_id,
 | |
|                 // "lead_time" => $req->lead_time,
 | |
|                 // "price" => $req->price,
 | |
|                 // "real_price" => $req->real_price,
 | |
|                 // "disc_price" => $req->disc_price,
 | |
|                 // "lead_time_id" => $req->lead_time_id,
 | |
|                 "vehicle_id" => $req->vehicle_id,
 | |
|                 "vehicle_name" => $req->vehicle_name,
 | |
|                 "driver_id" => $req->driver_id,
 | |
|                 "driver_name" => $req->driver_name,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "pickup_at" => "required|integer",
 | |
|                 "pickup_zone_id" => "required|integer",
 | |
|                 "drop_zone_id" => "required|integer",
 | |
|                 // "lead_time" => "required|numeric",
 | |
|                 // "price" => "required|numeric",
 | |
|                 // "real_price" => "required|numeric",
 | |
|                 // "disc_price" => "required|numeric",
 | |
|                 // "lead_time_id" => "required|integer|not_in:0",
 | |
|                 "vehicle_id" => "nullable|numeric",
 | |
|                 "vehicle_name" => "nullable|string",
 | |
|                 "driver_id" => "nullable|numeric",
 | |
|                 "driver_name" => "nullable|string",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $adm_id = 0;
 | |
|             $crt_type_order = Orders::CRT_TYPE_ORDER_CLIENT;
 | |
|             if ($req->auth->role === Users::ROLE_ADMIN) {
 | |
|                 $subInput = [
 | |
|                     "uid" => $req->uid,
 | |
|                 ];
 | |
|                 $rulesSubInput = [
 | |
|                     "uid" => "required|integer|not_in:0",
 | |
|                 ];
 | |
| 
 | |
|                 // validasi subInput
 | |
|                 $isValidInput = Validator::make($subInput, $rulesSubInput);
 | |
|                 if (!$isValidInput->passes()) {
 | |
|                     $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|                 $adminAuth = $req->auth;
 | |
|                 $req->auth = Users::getUserById($req->uid)[0];
 | |
|                 $req->auth->uid = $req->auth->id;
 | |
| 
 | |
|                 $adm_id = $adminAuth->uid;
 | |
|                 $crt_type_order = Orders::CRT_TYPE_ORDER_ADMIN;
 | |
|             }
 | |
| 
 | |
|             $vehicle_name = $req->vehicle_name;
 | |
|             if ($req->vehicle_id && $req->vehicle_id != 0) {
 | |
|                 $vehicle_name = $req->vehicle_name;
 | |
|             } else {
 | |
|                 $vehicle_name = "";
 | |
|                 $req->truck_type_id = 0;
 | |
|             }
 | |
| 
 | |
|             $nanoid = new Nanoid();
 | |
|             $code = $nanoid->formattedId("0123456789", 12);
 | |
|             $doWhile = true;
 | |
|             do {
 | |
|                 $uniqCode = Orders::getOrderByCode($code);
 | |
|                 if (count($uniqCode) > 0) {
 | |
|                     $code = $nanoid->formattedId("0123456789", 12);
 | |
|                 } else {
 | |
|                     $doWhile = false;
 | |
|                 }
 | |
|             } while ($doWhile);
 | |
| 
 | |
|             $client = Clients::getClientById($req->auth->client_group_id);
 | |
|             // $rate = ConfRates::getRateById(0);
 | |
|             $pck = Zone::getZoneById($req->pickup_zone_id);
 | |
|             // $pck_pic = Clients::getClientById($pck[0]->client_group_id);
 | |
|             $drop = Zone::getZoneById($req->drop_zone_id);
 | |
|             // $drop_pic = Clients::getClientById($drop[0]->client_group_id);
 | |
|             $admins = Users::getUsersActiveByRole(Users::ROLE_ADMIN);
 | |
|             $insurance = [];
 | |
|             if ($req->is_insurance === "true") {
 | |
|                 $insurance = Insurances::getInsuranceById($req->insurance_id);
 | |
|                 if (count($insurance) < 1) {
 | |
|                     $apiResp = Responses::bad_request("Insurance not found");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             $admins_data = [];
 | |
|             foreach ($admins as $k => $v) {
 | |
|                 array_push($admins_data, [
 | |
|                     "admin_id" => $v->id,
 | |
|                     "admin_name" => $v->first_name,
 | |
|                     "admin_phone" => $v->phone_code . " " . implode(" ", str_split($v->phone, 4)),
 | |
|                     "admin_mail" => $v->email,
 | |
|                     "admin_addr" => "",
 | |
|                 ]);
 | |
|             }
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             $insOrd = [
 | |
|                 "code" => $code,
 | |
|                 "type" => Orders::TYPE_FCL,
 | |
|                 "pck_total" => 1,
 | |
|                 "drop_total" => 1,
 | |
|                 "est_lead_time" => 0,
 | |
|                 "lead_time" => 0,
 | |
|                 "est_price" => 0,
 | |
|                 "price" => 0,
 | |
|                 "est_real_price" => 0,
 | |
|                 "real_price" => 0,
 | |
|                 "est_disc_price" => 0,
 | |
|                 "disc_price" => 0,
 | |
|                 "est_rate_id" => 0,
 | |
|                 "rate_id" => 0,
 | |
|                 "crt_type_order" => $crt_type_order,
 | |
|                 "crt" => $now,
 | |
|                 "crt_by" => $req->auth->uid,
 | |
|                 "crt_adm_by" => $adm_id,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->uid,
 | |
|             ];
 | |
|             $ord_id = Orders::addOrder($insOrd);
 | |
| 
 | |
|             $insPck = [
 | |
|                 "ord_id" => $ord_id,
 | |
|                 "ord_code" => $code,
 | |
|                 "set_pck_at" => $req->pickup_at,
 | |
|                 "stts_pck" => OrdersPickups::STTS_WAIT,
 | |
|                 "pck_id" => $pck[0]->id,
 | |
|                 "pck_name" => $pck[0]->name,
 | |
|                 "pck_desc" => $pck[0]->desc,
 | |
|                 "pck_type" => $pck[0]->type,
 | |
|                 "pck_workflow" => $pck[0]->workflow_type,
 | |
|                 "pck_shiptocode" => $pck[0]->shiptocode,
 | |
|                 "pck_prid" => $pck[0]->prid,
 | |
|                 "pck_ktid" => $pck[0]->ktid,
 | |
|                 "pck_kcid" => $pck[0]->kcid,
 | |
|                 "pck_klid" => $pck[0]->klid,
 | |
|                 "pck_addr" => $pck[0]->fulladdress,
 | |
|                 "pck_cgroup_id" => $pck[0]->client_group_id,
 | |
|                 "pck_cdiv_id" => $pck[0]->client_div_id,
 | |
|                 "pck_cgp_id" => $pck[0]->client_gp_id,
 | |
|                 "pck_hex_color" => $pck[0]->boundary_hex_color,
 | |
|                 "pck_shape" => $pck[0]->boundary_type,
 | |
|                 "pck_radius" => $pck[0]->boundary_radius,
 | |
|                 "pck_bounds" => $pck[0]->boundary_bounds,
 | |
|                 "pck_latlngs" => $pck[0]->boundary_latlngs,
 | |
|                 "pck_points" => $pck[0]->boundary_points,
 | |
|                 // 'pic_name' => $pck_pic[0]->pic_name,
 | |
|                 // 'pic_phone_code' => $pck_pic[0]->pic_phone_code,
 | |
|                 // 'pic_phone_val' => $pck_pic[0]->pic_phone,
 | |
|                 // 'pic_mail' => $pck_pic[0]->pic_mail,
 | |
|                 "pic_name" => $req->auth->first_name,
 | |
|                 "pic_phone_code" => $req->auth->phone_code,
 | |
|                 "pic_phone_val" => $req->auth->phone,
 | |
|                 "pic_mail" => $req->auth->email,
 | |
|             ];
 | |
| 
 | |
|             $pck_id = OrdersPickups::add($insPck);
 | |
| 
 | |
|             $insDrop = [
 | |
|                 "ord_id" => $ord_id,
 | |
|                 "ord_code" => $code,
 | |
|                 "stts_drop" => OrdersDrops::STTS_WAIT,
 | |
|                 "drop_id" => $drop[0]->id,
 | |
|                 "drop_name" => $drop[0]->name,
 | |
|                 "drop_desc" => $drop[0]->desc,
 | |
|                 "drop_type" => $drop[0]->type,
 | |
|                 "drop_workflow" => $drop[0]->workflow_type,
 | |
|                 "drop_shiptocode" => $drop[0]->shiptocode,
 | |
|                 "drop_prid" => $drop[0]->prid,
 | |
|                 "drop_ktid" => $drop[0]->ktid,
 | |
|                 "drop_kcid" => $drop[0]->kcid,
 | |
|                 "drop_klid" => $drop[0]->klid,
 | |
|                 "drop_addr" => $drop[0]->fulladdress,
 | |
|                 "drop_cgroup_id" => $drop[0]->client_group_id,
 | |
|                 "drop_cdiv_id" => $drop[0]->client_div_id,
 | |
|                 "drop_cgp_id" => $drop[0]->client_gp_id,
 | |
|                 "drop_hex_color" => $drop[0]->boundary_hex_color,
 | |
|                 "drop_shape" => $drop[0]->boundary_type,
 | |
|                 "drop_radius" => $drop[0]->boundary_radius,
 | |
|                 "drop_bounds" => $drop[0]->boundary_bounds,
 | |
|                 "drop_latlngs" => $drop[0]->boundary_latlngs,
 | |
|                 "drop_points" => $drop[0]->boundary_points,
 | |
|                 // 'pic_name' => $drop_pic[0]->pic_name,
 | |
|                 // 'pic_phone_code' => $drop_pic[0]->pic_phone_code,
 | |
|                 // 'pic_phone_val' => $drop_pic[0]->pic_phone,
 | |
|                 // 'pic_mail' => $drop_pic[0]->pic_mail,
 | |
|                 "pic_name" => $req->auth->first_name,
 | |
|                 "pic_phone_code" => $req->auth->phone_code,
 | |
|                 "pic_phone_val" => $req->auth->phone,
 | |
|                 "pic_mail" => $req->auth->email,
 | |
|             ];
 | |
|             $drop_id = OrdersDrops::add($insDrop);
 | |
| 
 | |
|             $insClient = [
 | |
|                 "ord_id" => $ord_id,
 | |
|                 "ord_code" => $code,
 | |
|                 "c_id" => $req->auth->uid,
 | |
|                 "c_name" => $req->auth->first_name,
 | |
|                 "c_phone_code" => $req->auth->phone_code,
 | |
|                 "c_phone_val" => $req->auth->phone,
 | |
|                 "c_mail" => $req->auth->email,
 | |
|                 "c_addr" => $req->auth->fulladdress,
 | |
|                 "c_disc_type" => $client[0]->disc_type,
 | |
|                 "c_disc_amount" => $client[0]->disc_amount,
 | |
|                 "c_pt_id" => $client[0]->id,
 | |
|                 "c_pt_div_id" => $req->auth->client_div_id,
 | |
|                 "c_pt_gp_id" => $req->auth->client_gp_id,
 | |
|                 "c_pt_name" => $client[0]->c_name,
 | |
|                 "c_pt_phone_code" => $client[0]->c_phone_code,
 | |
|                 "c_pt_phone_val" => $client[0]->c_phone,
 | |
|                 "c_pt_mail" => $client[0]->c_mail,
 | |
|                 "c_pt_addr" => $client[0]->c_addr_office,
 | |
|                 "c_pt_pic_name" => $client[0]->pic_name,
 | |
|                 "c_pt_pic_phone_code" => $client[0]->pic_phone_code,
 | |
|                 "c_pt_pic_phone_val" => $client[0]->pic_phone,
 | |
|                 "c_pt_pic_mail" => $client[0]->pic_mail,
 | |
|                 "c_pt_pic_addr" => null,
 | |
|                 "prefer_truck_type" => 1,
 | |
|             ];
 | |
|             $ord_client_id = OrdersClients::add($insClient);
 | |
| 
 | |
|             if (count($insurance) > 0) {
 | |
|                 $insInsurance = [
 | |
|                     "ord_id" => $ord_id,
 | |
|                     "ord_code" => $code,
 | |
|                     "insurance_id" => $insurance[0]->id,
 | |
|                     "premi_name" => $insurance[0]->premi_name,
 | |
|                     "premi_price" => $insurance[0]->premi_price,
 | |
|                     "premi_min_price" => $insurance[0]->premi_min_price,
 | |
|                     "premi_max_price" => $insurance[0]->premi_max_price,
 | |
|                     "desc" => $insurance[0]->desc,
 | |
|                 ];
 | |
|                 OrdersInsurances::add($insInsurance);
 | |
|             }
 | |
|             Orders::updateOrder($ord_id, [
 | |
|                 "status" => Orders::STTS_HAVE_GET_VHC,
 | |
|             ]);
 | |
|             Vehicles::updateVehicle($req->vehicle_id, [
 | |
|                 "is_in_ord" => Vehicles::IN_ORD_YES,
 | |
|                 "ord_id" => $ord_id,
 | |
|                 "ord_code" => $code,
 | |
|                 "c_did" => $req->driver_id,
 | |
|                 "a_did" => $req->driver_id,
 | |
|             ]);
 | |
|             Drivers::updateDriver($req->driver_id, [
 | |
|                 "is_in_ord" => Drivers::IN_ORD_YES,
 | |
|                 "ord_id" => $ord_id,
 | |
|                 "ord_code" => $code,
 | |
|             ]);
 | |
|             $order = Orders::showOrder([
 | |
|                 "id" => $ord_id,
 | |
|                 "get_exp_vendor" => 1,
 | |
|                 // "vdr_id" => $req->auth->uid,
 | |
|             ]);
 | |
|             $driver = Drivers::getDriverByIdAllData($req->driver_id);
 | |
|             $vehicle = Vehicles::getVehicleByIdAllData($req->vehicle_id);
 | |
|             OrdersDrivers::add([
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|                 "ord_code" => $order[0]->ord_code,
 | |
|                 "vdr_id" => $driver[0]->vendor_id,
 | |
|                 "drv_id" => $driver[0]->drv_id,
 | |
|                 "drv_name" => $driver[0]->fullname,
 | |
|                 "drv_mail" => $driver[0]->email,
 | |
|                 "drv_name2" => $driver[0]->fullname2,
 | |
|                 "drv_phone_code" => $driver[0]->phone_code,
 | |
|                 "drv_phone_val" => $driver[0]->phone,
 | |
|                 "drv_phone2_code" => $driver[0]->phone2_code,
 | |
|                 "drv_phone2_val" => $driver[0]->phone2,
 | |
|                 "drv_addr" => $driver[0]->fulladdress,
 | |
|                 "drv_cgroup_id" => $driver[0]->client_group_id,
 | |
|                 "drv_nik" => $driver[0]->nik,
 | |
|                 "drv_dob" => $driver[0]->dob,
 | |
|                 "drv_age" => Helper::countAge($driver[0]->dob),
 | |
|                 "drv_gender" => $driver[0]->gender,
 | |
|                 "drv_blood" => $driver[0]->blood,
 | |
|                 "em_fullname" => $driver[0]->em_fullname,
 | |
|                 "em_phone_code" => $driver[0]->em_phone_code,
 | |
|                 "em_phone_val" => $driver[0]->em_phone,
 | |
|                 "em_relationship" => $driver[0]->em_relationship,
 | |
|                 "drv_ktp_img" => $driver[0]->ktp_img,
 | |
|                 "drv_npwp_img" => $driver[0]->npwp_img,
 | |
|                 "drv_npwp_number" => $driver[0]->npwp_number,
 | |
|                 "drv_npwp_string" => $driver[0]->npwp_string,
 | |
|                 "drv_license_img" => $driver[0]->license_img,
 | |
|                 "drv_license_number" => $driver[0]->license_number,
 | |
|                 "drv_license_exp" => $driver[0]->license_exp,
 | |
|             ]);
 | |
|             OrdersVehicles::add([
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|                 "ord_code" => $order[0]->ord_code,
 | |
|                 "vhc_id" => $vehicle[0]->vhc_id,
 | |
|                 "vhc_name" => $vehicle[0]->name,
 | |
|                 "vhc_device_id" => $vehicle[0]->device_id,
 | |
|                 "vhc_cat_id" => $vehicle[0]->cat_id,
 | |
|                 "vhc_brand_id" => $vehicle[0]->brand_id,
 | |
|                 "vhc_type_id" => $vehicle[0]->type_id,
 | |
|                 "vhc_model_id" => $vehicle[0]->model_id,
 | |
|                 "vhc_c_did" => $vehicle[0]->c_did,
 | |
|                 "vhc_a_did" => $vehicle[0]->a_did,
 | |
|                 "vhc_nopol1" => $vehicle[0]->nopol1,
 | |
|                 "vhc_nopol2" => $vehicle[0]->nopol2,
 | |
|                 "vhc_nopol3" => $vehicle[0]->nopol3,
 | |
|                 "vhc_is_track_holiday" => $vehicle[0]->is_track_holiday,
 | |
|                 "vhc_track_sch_d" => $vehicle[0]->track_sch_d,
 | |
|                 "vhc_track_sch_h" => $vehicle[0]->track_sch_h,
 | |
|                 "vhc_cgroup_id" => $vehicle[0]->client_group_id,
 | |
|                 "vhc_vdr_id" => $vehicle[0]->vendor_id,
 | |
|                 "vhc_speed_limit" => $vehicle[0]->speed_limit,
 | |
|                 "vhc_fuel_capacity" => $vehicle[0]->fuel_capacity,
 | |
|                 "vhc_fuel_drop_treshold" => $vehicle[0]->fuel_drop_treshold,
 | |
|                 "vhc_max_pressure" => $vehicle[0]->max_pressure,
 | |
|                 "vhc_fvhc_img" => $vehicle[0]->fvhc_img,
 | |
|                 "vhc_stnk_img" => $vehicle[0]->stnk_img,
 | |
|                 "vhc_stnk_exp" => $vehicle[0]->stnk_exp,
 | |
|                 "vhc_vyear" => $vehicle[0]->vyear,
 | |
|                 "vhc_cc" => $vehicle[0]->cc,
 | |
|                 "vhc_vin" => $vehicle[0]->vin,
 | |
|                 "vhc_en" => $vehicle[0]->en,
 | |
|                 "vhc_vcolor" => $vehicle[0]->vcolor,
 | |
|                 "vhc_fuel_type" => $vehicle[0]->fuel_type,
 | |
|                 "vhc_tnkb_color" => $vehicle[0]->tnkb_color,
 | |
|                 "vhc_regis_year" => $vehicle[0]->regis_year,
 | |
|                 "vhc_tax_exp" => $vehicle[0]->tax_exp,
 | |
|             ]);
 | |
| 
 | |
|             $dt_inst_pck_drop = [
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|                 "ord_code" => $order[0]->ord_code,
 | |
|                 "pck_id" => $pck_id,
 | |
|                 "drop_id" => $drop_id,
 | |
|                 "is_active" => 1,
 | |
|                 "stts" => 1,
 | |
|             ];
 | |
|             DB::table("t_orders_pck_drop")->insert($dt_inst_pck_drop);
 | |
| 
 | |
|             $apiResp = Responses::created("success create order");
 | |
| 
 | |
|             DB::commit();
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_list_orders(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [];
 | |
|             $rulesInput = [];
 | |
| 
 | |
|             // validasi input
 | |
|             // $isValidInput = Validator::make($input, $rulesInput);
 | |
|             // if (!$isValidInput->passes()) {
 | |
|             // 	$apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|             // 	return new Response($apiResp, $apiResp['meta']['code']);
 | |
|             // }
 | |
| 
 | |
|             $filter = [
 | |
|                 "group_by" => "ord_id",
 | |
|             ];
 | |
| 
 | |
|             if ($req->auth->role == Users::ROLE_ADMIN) {
 | |
|             } elseif ($req->auth->role == Users::ROLE_CLIENT_ADMIN) {
 | |
|                 $filter["client_id"] = $req->auth->uid;
 | |
|             } elseif ($req->auth->role == Users::ROLE_VENDOR) {
 | |
|                 $filter["vendor_id"] = $req->auth->uid;
 | |
|             } elseif ($req->auth->role == Users::ROLE_CHECKER) {
 | |
|                 $filter["get_stts_checker"] = 1;
 | |
|                 $filter["chk_id"] = $req->auth->uid;
 | |
|                 $filter["chk_type"] = $req->auth->chk_type;
 | |
|                 $filter["ready_checker"] = 1;
 | |
|             } else {
 | |
|                 $filter["client_id"] = 0;
 | |
|             }
 | |
| 
 | |
|             if ($req->cptid) {
 | |
|                 $filter["client_pt_id"] = $req->cptid;
 | |
|             }
 | |
|             if ($req->couple_pck_drop) {
 | |
|                 $filter["couple_pck_drop"] = 1;
 | |
|             }
 | |
|             if ($req->order_by === "desc") {
 | |
|                 $filter["order_by"] = "ord.id DESC";
 | |
|             }
 | |
| 
 | |
|             $list = Orders::listOrders($filter);
 | |
|             $newList = [];
 | |
|             $cntK = 0;
 | |
|             foreach ($list as $key => $row) {
 | |
|                 $list[$key]->action = "-";
 | |
|                 if ($req->auth->role == Users::ROLE_CHECKER) {
 | |
|                 } else {
 | |
|                     $isSame = 0;
 | |
|                     foreach ($newList as $nlK => $rowL) {
 | |
|                         if (!$row->group_code) {
 | |
|                             continue;
 | |
|                         }
 | |
|                         if ($row->group_code === $rowL->group_code) {
 | |
|                             $isSame = 1;
 | |
|                             $newList[$nlK]->childs[] = clone $list[$key];
 | |
|                         }
 | |
|                     }
 | |
|                     if ($isSame) {
 | |
|                         continue;
 | |
|                     }
 | |
|                 }
 | |
|                 $list[$key]->DT_RowIndex = ++$cntK;
 | |
|                 $list[$key]->childs = [];
 | |
|                 $newList[] = clone $list[$key];
 | |
|             }
 | |
| 
 | |
|             $apiResp = Responses::success("success list orders");
 | |
|             $apiResp["count"] = count($newList);
 | |
|             $apiResp["data"] = $newList;
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_show_order(Request $req, $ord_id)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
| 
 | |
|             $input = [
 | |
|                 "ord_id" => $ord_id,
 | |
|                 "get_current_track_vhcs" => $req->get_current_track_vhcs,
 | |
|                 "couple_pck_drop" => $req->couple_pck_drop,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "get_current_track_vhcs" => "nullable|numeric",
 | |
|                 "couple_pck_drop" => "nullable|numeric",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "id" => $ord_id,
 | |
|             ];
 | |
|             if ($req->couple_pck_drop) {
 | |
|                 $filter["couple_pck_drop"] = 1;
 | |
|             }
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $apiResp = Responses::success("success detail order");
 | |
|             $apiResp["data"] = $order[0];
 | |
| 
 | |
|             if ($req->get_current_track_vhcs) {
 | |
|                 // $rate = ConfRates::getRateById($order[0]->rate_id);
 | |
|                 $rate = OrdersRates::getById($order[0]->ord_rate_id);
 | |
|                 $filter = [
 | |
|                     "status" => Vehicles::STTS_ACTIVE,
 | |
|                     "is_in_ord" => Vehicles::IN_ORD_NO,
 | |
|                     "active_rates" => $rate[0],
 | |
|                 ];
 | |
|                 if ($order[0]->prefer_truck_type != 0) {
 | |
|                     $filter["prefer_truck_type"] = $order[0]->prefer_truck_type;
 | |
|                 }
 | |
|                 $list_current_track_vhcs = Tracks::listCurrentTracks($filter);
 | |
|                 $apiResp["list_current_track_vhcs"] = $list_current_track_vhcs;
 | |
|             }
 | |
| 
 | |
|             if ($req->drv_ups) {
 | |
|                 $apiResp["drvs_ups"] = OrdersDriversUploads::list([
 | |
|                     "ord_id" => $order[0]->ord_id,
 | |
|                     "pck_id" => $order[0]->ord_pck_id,
 | |
|                     "drop_id" => $order[0]->ord_drop_id,
 | |
|                     "ord_pck_drop_id" => $order[0]->ord_pck_drop_id,
 | |
|                 ]);
 | |
|             }
 | |
| 
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_download_package_list(Request $req, $ord_id)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $ord_id,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $filter = [];
 | |
|             // if ($req->auth->role != Users::ROLE_CHECKER) {
 | |
|             $filter["get_not_deleted"] = 1;
 | |
|             // }
 | |
| 
 | |
|             $items = OrdersItems::getsByOrdId($ord_id, $filter);
 | |
|             if (count($items) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $apiResp = Responses::success("success get package list");
 | |
|             $apiResp["data"] = $items;
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_adm_find_driver(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "boundary_type" => $req->boundary_type,
 | |
|                 "boundary_latlngs" => $req->boundary_latlngs,
 | |
|                 "boundary_bounds" => $req->boundary_bounds,
 | |
|                 "boundary_radius" => $req->boundary_radius,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "boundary_type" => "required|string|max:25",
 | |
|                 "boundary_latlngs" => "required|array",
 | |
|                 "boundary_latlngs.*.lat" => "required",
 | |
|                 "boundary_latlngs.*.lng" => "required",
 | |
|                 "boundary_bounds" => "nullable|array",
 | |
|                 "boundary_radius" => "nullable|numeric",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_prefer_type_truck" => 1,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             $apiResp = Responses::success("success get order");
 | |
|             $apiResp["data"] = $order[0];
 | |
| 
 | |
|             // $rate = ConfRates::getRateById($order[0]->rate_id);
 | |
|             $rate = OrdersRates::getById($order[0]->ord_rate_id);
 | |
|             $filter = [
 | |
|                 "active_rates" => $rate[0],
 | |
|             ];
 | |
|             if ($order[0]->prefer_truck_type != 0) {
 | |
|                 $filter["prefer_truck_type"] = $order[0]->prefer_truck_type;
 | |
|             }
 | |
| 
 | |
|             $lat = $req->boundary_latlngs[0]["lat"];
 | |
|             $lng = $req->boundary_latlngs[0]["lng"];
 | |
|             $nearest = Tracks::nearestInCircle($lat, $lng, $req->boundary_radius, $filter);
 | |
|             if (count($nearest) < 1) {
 | |
|                 $apiResp = Responses::not_found("no vehicle available");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $found_prefer = 0;
 | |
|             $group_vendors = [];
 | |
|             foreach ($nearest as $k => $v) {
 | |
|                 $is_add_vendor = 1;
 | |
|                 if ($order[0]->prefer_truck_type !== 0) {
 | |
|                     if ($v->type_id === $order[0]->prefer_truck_type) {
 | |
|                         $found_prefer = 1;
 | |
|                     } else {
 | |
|                         // remove from array but no reindex array
 | |
|                         // unset($nearest[$k]);
 | |
|                         // remove from array and reindex array
 | |
|                         array_splice($nearest, $k, 1);
 | |
|                         $is_add_vendor = 0;
 | |
|                     }
 | |
|                 }
 | |
|                 if ($is_add_vendor) {
 | |
|                     if (!isset($group_vendors[(int) $v->vendor_id])) {
 | |
|                         // $token = Str::uuid()->toString();
 | |
|                         $token = (new Nanoid())->generateId(36);
 | |
|                         $group_vendors[(int) $v->vendor_id] = [
 | |
|                             "vendor_id" => $v->vendor_id,
 | |
|                             "vendor_name" => $v->vendor_name,
 | |
|                             "vendor_phone" =>
 | |
|                                 $v->vendor_phone . " " . implode(" ", str_split($v->vendor_phone, 4)),
 | |
|                             "vendor_phone_code" => $v->vendor_phone_code,
 | |
|                             "vendor_phone_val" => $v->vendor_phone,
 | |
|                             "vendor_mail" => $v->vendor_mail,
 | |
|                             "vendor_addr" => $v->vendor_addr,
 | |
|                             "vendor_bank_id" => $v->bank_id,
 | |
|                             "vendor_bank_code" => $v->bank_code,
 | |
|                             "vendor_bank_short_name" => $v->bank_short_name,
 | |
|                             "vendor_bank_name" => $v->bank_name,
 | |
|                             "vendor_bank_acc_number" => $v->bank_acc_number,
 | |
|                             "vendor_bank_acc_name" => $v->bank_acc_name,
 | |
|                             "vendor_acc_link" =>
 | |
|                                 route("view_user_vendor_transaction_bid_order") . "?token=" . $token,
 | |
|                             "vhcs" => $v->id . ",", // string vhc_ids per vendor separated by comma
 | |
|                             "token" => $token,
 | |
|                             "distance" => $v->distance,
 | |
|                         ];
 | |
|                     } else {
 | |
|                         $group_vendors[(int) $v->vendor_id]["vhcs"] .= $v->id . ",";
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             $apiResp["nearest"] = $nearest;
 | |
| 
 | |
|             if ($order[0]->prefer_truck_type != 0) {
 | |
|                 if ($found_prefer === 0) {
 | |
|                     // $tt = ConfTruckTypes::getTypeById($order[0]->prefer_truck_type);
 | |
|                     $apiResp = Responses::not_found(
 | |
|                         "no vehicle available with prefered type truck " . $order[0]->prefer_truck_type_name
 | |
|                     );
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             // return (new Response($apiResp, 400));
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "confirm_at" => $now,
 | |
|                 "confirm_by" => $req->auth->id,
 | |
|                 "find_vhc_at" => $now,
 | |
|                 "find_vhc_by" => $req->auth->id,
 | |
|                 "status" => Orders::STTS_CONFIRM,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->id,
 | |
|             ]);
 | |
| 
 | |
|             $vendors = [];
 | |
|             $ik = 0;
 | |
|             foreach ($group_vendors as $k => $v) {
 | |
|                 $checkIsIns = OrdersVendors::getByOrdIdAndVdrId($order[0]->ord_id, $v["vendor_id"]);
 | |
|                 if (count($checkIsIns) > 0) {
 | |
|                     continue;
 | |
|                 }
 | |
|                 $vendor = [
 | |
|                     "vendor_id" => $v["vendor_id"],
 | |
|                     "vendor_name" => $v["vendor_name"],
 | |
|                     "vendor_phone" => $v["vendor_phone"],
 | |
|                     "vendor_mail" => $v["vendor_mail"],
 | |
|                     "vendor_addr" => $v["vendor_addr"],
 | |
|                     "vendor_acc_link" => $v["vendor_acc_link"],
 | |
|                 ];
 | |
|                 array_push($vendors, $vendor);
 | |
| 
 | |
|                 if (strpos($v["vhcs"], ",") !== false) {
 | |
|                     $v["vhcs"] = substr($v["vhcs"], 0, -1);
 | |
|                 }
 | |
| 
 | |
|                 // $is_mailing_bid = OrdersVendors::IS_MAILING_BID_NOT;
 | |
|                 // $is_mailing_bid_at = 0;
 | |
|                 // $exp_at = 0;
 | |
|                 // $is_exp = OrdersVendors::LINK_NOT_EXP;
 | |
|                 // if ($ik === 0) {
 | |
|                 $is_mailing_bid = OrdersVendors::IS_MAILING_BID_SEND;
 | |
|                 $is_mailing_bid_at = $now;
 | |
|                 $exp_at = strtotime("+10 minutes", $now);
 | |
|                 // $exp_at = strtotime('+1 day', $now);
 | |
|                 $is_exp = OrdersVendors::LINK_WILL_EXP;
 | |
|                 // }
 | |
| 
 | |
|                 $insVendors = [
 | |
|                     "ord_id" => $order[0]->ord_id,
 | |
|                     "ord_code" => $order[0]->ord_code,
 | |
|                     "vdr_id" => $v["vendor_id"],
 | |
|                     "vdr_name" => $v["vendor_name"],
 | |
|                     "vdr_mail" => $v["vendor_mail"],
 | |
|                     "vdr_phone_code" => $v["vendor_phone_code"],
 | |
|                     "vdr_phone_val" => $v["vendor_phone_val"],
 | |
|                     "vdr_addr" => $v["vendor_addr"],
 | |
|                     "vdr_bank_id" => $v["vendor_bank_id"],
 | |
|                     "vdr_bank_code" => $v["vendor_bank_code"],
 | |
|                     "vdr_bank_short_name" => $v["vendor_bank_short_name"],
 | |
|                     "vdr_bank_name" => $v["vendor_bank_name"],
 | |
|                     "vdr_bank_acc_number" => $v["vendor_bank_acc_number"],
 | |
|                     "vdr_bank_acc_name" => $v["vendor_bank_acc_name"],
 | |
|                     "find_vhcs" => $v["vhcs"],
 | |
|                     "find_radius" => $req->boundary_radius,
 | |
|                     "find_shape" => Zone::ZONE_BOUNDARY_CIRCLE,
 | |
|                     "find_center_lat" => $req->boundary_latlngs[0]["lat"],
 | |
|                     "find_center_lng" => $req->boundary_latlngs[0]["lng"],
 | |
|                     "distance" => $v["distance"],
 | |
|                     "is_exp" => $is_exp,
 | |
|                     "exp_at" => $exp_at,
 | |
|                     "bid_token" => $v["token"],
 | |
|                     "is_mailing_bid" => $is_mailing_bid,
 | |
|                     "is_mailing_bid_at" => $is_mailing_bid_at,
 | |
|                     "status" => OrdersVendors::STTS_WAIT,
 | |
|                     "crt" => $now,
 | |
|                 ];
 | |
|                 OrdersVendors::add($insVendors);
 | |
|                 $ik++;
 | |
|             }
 | |
| 
 | |
|             if (count($vendors) > 0) {
 | |
|                 // run schedule 3x dalam 10 menit
 | |
|                 $url = env("API_URL_NODE") . "/order/delay_blast_order";
 | |
|                 $guzReq = new GuzzleClient();
 | |
|                 $respNode = $guzReq->request("POST", $url, [
 | |
|                     "headers" => [
 | |
|                         "Host" => $_SERVER["SERVER_ADDR"],
 | |
|                         "User-Agent" => "curl/7.65.3",
 | |
|                         "Accept" => "*/*",
 | |
|                         "Accept-Encoding" => "gzip, deflate, br",
 | |
|                         // 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
 | |
|                         // 'Connection' => 'keep-alive',
 | |
|                     ],
 | |
|                     "json" => [
 | |
|                         "ord_id" => $order[0]->ord_id,
 | |
|                         "ord_code" => $order[0]->ord_code,
 | |
|                         "base_link" => route("view_user_vendor_transaction_bid_order") . "?token=",
 | |
|                     ],
 | |
|                 ]);
 | |
|                 if ($respNode->getStatusCode() != 200) {
 | |
|                     DB::rollBack();
 | |
|                     $apiResp = Responses::bad_request("fail setup scheduler on 10 minutes later");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|                 // $body = json_decode($respNode->getBody()->getContents());
 | |
| 
 | |
|                 $url = env("API_URL_NODE") . "/order/email_to_vendor";
 | |
|                 $guzReq = new GuzzleClient();
 | |
|                 $respNode = $guzReq->request("POST", $url, [
 | |
|                     "headers" => [
 | |
|                         "Host" => $_SERVER["SERVER_ADDR"],
 | |
|                         "User-Agent" => "curl/7.65.3",
 | |
|                         "Accept" => "*/*",
 | |
|                         "Accept-Encoding" => "gzip, deflate, br",
 | |
|                         // 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
 | |
|                         // 'Connection' => 'keep-alive',
 | |
|                     ],
 | |
|                     "json" => [
 | |
|                         "trx_code" => $order[0]->ord_code,
 | |
|                         "trx_at" => $order[0]->crt,
 | |
|                         "client_id" => $order[0]->c_id,
 | |
|                         "client_name" => $order[0]->c_name,
 | |
|                         "client_phone" =>
 | |
|                             $order[0]->c_phone_code .
 | |
|                             " " .
 | |
|                             implode(" ", str_split($order[0]->c_phone_val, 4)),
 | |
|                         "client_mail" => $order[0]->c_mail,
 | |
|                         "client_addr" => "",
 | |
|                         "client_prefer_type_truck" => $order[0]->prefer_truck_type_name ?? "",
 | |
|                         // "weight" => $order[0]->weight,
 | |
|                         // "cbm" => $order[0]->cbm,
 | |
|                         // "koli" => $order[0]->koli,
 | |
|                         "pickup_zone_title" => $order[0]->pck_name,
 | |
|                         "pickup_zone_addr" => $order[0]->pck_addr,
 | |
|                         "pickup_at" => $order[0]->set_pck_at,
 | |
|                         "drop_zone_title" => $order[0]->drop_name,
 | |
|                         "drop_zone_addr" => $order[0]->drop_addr,
 | |
|                         "vendors" => $vendors,
 | |
|                     ],
 | |
|                 ]);
 | |
|                 if ($respNode->getStatusCode() != 200) {
 | |
|                     DB::rollBack();
 | |
|                     $apiResp = Responses::bad_request("fail send email to vendor");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|                 // $body = json_decode($respNode->getBody()->getContents());
 | |
|             }
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success confirm order");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_adm_assign_vendor(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "vendor_id" => $req->vendor_id,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "vendor_id" => "required|integer|not_in:0",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_prefer_type_truck" => 1,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             $apiResp = Responses::success("success get order");
 | |
|             $apiResp["data"] = $order[0];
 | |
| 
 | |
|             $vendor = Users::getUserById($req->vendor_id);
 | |
|             if (count($vendor) < 1) {
 | |
|                 $apiResp = Responses::not_found("vendor not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $found_prefer = 0;
 | |
|             $group_vendors = [];
 | |
| 
 | |
|             // $token = Str::uuid()->toString();
 | |
|             $token = (new Nanoid())->generateId(36);
 | |
|             $group_vendors[(int) $vendor[0]->id] = [
 | |
|                 "vendor_id" => $vendor[0]->id,
 | |
|                 "vendor_name" => $vendor[0]->first_name,
 | |
|                 "vendor_phone" => $vendor[0]->phone . " " . implode(" ", str_split($vendor[0]->phone, 4)),
 | |
|                 "vendor_phone_code" => $vendor[0]->phone_code,
 | |
|                 "vendor_phone_val" => $vendor[0]->phone,
 | |
|                 "vendor_mail" => $vendor[0]->email,
 | |
|                 "vendor_addr" => $vendor[0]->fulladdress,
 | |
|                 "vendor_bank_id" => $vendor[0]->bank_id,
 | |
|                 "vendor_bank_code" => $vendor[0]->bank_code,
 | |
|                 "vendor_bank_short_name" => $vendor[0]->bank_short_name,
 | |
|                 "vendor_bank_name" => $vendor[0]->bank_name,
 | |
|                 "vendor_bank_acc_number" => $vendor[0]->bank_acc_number,
 | |
|                 "vendor_bank_acc_name" => $vendor[0]->bank_acc_name,
 | |
|                 "vendor_acc_link" => route("view_user_vendor_transaction_bid_order") . "?token=" . $token,
 | |
|                 "vhcs" => "", // string vhc_ids per vendor separated by comma
 | |
|                 "token" => $token,
 | |
|             ];
 | |
| 
 | |
|             $vhcs = Vehicles::getVehiclesInVendorIdsActiveNoInOrder(
 | |
|                 "" . $vendor[0]->id,
 | |
|                 $order[0]->prefer_truck_type
 | |
|             );
 | |
|             foreach ($vhcs as $vhc) {
 | |
|                 if ($vhc->type_id === $order[0]->prefer_truck_type) {
 | |
|                     $found_prefer = 1;
 | |
|                 }
 | |
|                 $group_vendors[(int) $vendor[0]->id]["vhcs"] .= $vhc->id . ",";
 | |
|             }
 | |
| 
 | |
|             if ($order[0]->prefer_truck_type != 0) {
 | |
|                 if ($found_prefer === 0) {
 | |
|                     // $tt = ConfTruckTypes::getTypeById($order[0]->prefer_truck_type);
 | |
|                     $apiResp = Responses::not_found(
 | |
|                         "no vehicle available with prefered type truck " . $order[0]->prefer_truck_type_name
 | |
|                     );
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             // return (new Response($apiResp, 400));
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "confirm_at" => $now,
 | |
|                 "confirm_by" => $req->auth->id,
 | |
|                 "find_vhc_at" => $now,
 | |
|                 "find_vhc_by" => $req->auth->id,
 | |
|                 "status" => Orders::STTS_CONFIRM,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->id,
 | |
|             ]);
 | |
| 
 | |
|             $vendors = [];
 | |
|             $ik = 0;
 | |
|             foreach ($group_vendors as $k => $v) {
 | |
|                 $checkIsIns = OrdersVendors::getByOrdIdAndVdrId($order[0]->ord_id, $v["vendor_id"]);
 | |
|                 if (count($checkIsIns) > 0) {
 | |
|                     continue;
 | |
|                 }
 | |
|                 $vendor = [
 | |
|                     "vendor_id" => $v["vendor_id"],
 | |
|                     "vendor_name" => $v["vendor_name"],
 | |
|                     "vendor_phone" => $v["vendor_phone"],
 | |
|                     "vendor_mail" => $v["vendor_mail"],
 | |
|                     "vendor_addr" => $v["vendor_addr"],
 | |
|                     "vendor_acc_link" => $v["vendor_acc_link"],
 | |
|                 ];
 | |
|                 array_push($vendors, $vendor);
 | |
| 
 | |
|                 if (strpos($v["vhcs"], ",") !== false) {
 | |
|                     $v["vhcs"] = substr($v["vhcs"], 0, -1);
 | |
|                 }
 | |
| 
 | |
|                 // $is_mailing_bid = OrdersVendors::IS_MAILING_BID_NOT;
 | |
|                 // $is_mailing_bid_at = 0;
 | |
|                 // $exp_at = 0;
 | |
|                 // $is_exp = OrdersVendors::LINK_NOT_EXP;
 | |
|                 // if ($ik === 0) {
 | |
|                 $is_mailing_bid = OrdersVendors::IS_MAILING_BID_SEND;
 | |
|                 $is_mailing_bid_at = $now;
 | |
|                 $exp_at = strtotime("+10 minutes", $now);
 | |
|                 // $exp_at = strtotime('+1 day', $now);
 | |
|                 $is_exp = OrdersVendors::LINK_WILL_EXP;
 | |
|                 // }
 | |
| 
 | |
|                 $insVendors = [
 | |
|                     "ord_id" => $order[0]->ord_id,
 | |
|                     "ord_code" => $order[0]->ord_code,
 | |
|                     "vdr_id" => $v["vendor_id"],
 | |
|                     "vdr_name" => $v["vendor_name"],
 | |
|                     "vdr_mail" => $v["vendor_mail"],
 | |
|                     "vdr_phone_code" => $v["vendor_phone_code"],
 | |
|                     "vdr_phone_val" => $v["vendor_phone_val"],
 | |
|                     "vdr_addr" => $v["vendor_addr"],
 | |
|                     "vdr_bank_id" => $v["vendor_bank_id"],
 | |
|                     "vdr_bank_code" => $v["vendor_bank_code"],
 | |
|                     "vdr_bank_short_name" => $v["vendor_bank_short_name"],
 | |
|                     "vdr_bank_name" => $v["vendor_bank_name"],
 | |
|                     "vdr_bank_acc_number" => $v["vendor_bank_acc_number"],
 | |
|                     "vdr_bank_acc_name" => $v["vendor_bank_acc_name"],
 | |
|                     "find_vhcs" => $v["vhcs"],
 | |
|                     "is_exp" => $is_exp,
 | |
|                     "exp_at" => $exp_at,
 | |
|                     "bid_token" => $v["token"],
 | |
|                     "is_mailing_bid" => $is_mailing_bid,
 | |
|                     "is_mailing_bid_at" => $is_mailing_bid_at,
 | |
|                     "status" => OrdersVendors::STTS_WAIT,
 | |
|                     "crt" => $now,
 | |
|                 ];
 | |
|                 OrdersVendors::add($insVendors);
 | |
|                 $ik++;
 | |
|             }
 | |
|             // if (count($vendors) > 0) {
 | |
|             //     // run schedule 3x dalam 10 menit
 | |
|             //     $url = env("API_URL_NODE") . "/order/delay_blast_order";
 | |
|             //     $guzReq = new GuzzleClient();
 | |
|             //     $respNode = $guzReq->request("POST", $url, [
 | |
|             //         "headers" => [
 | |
|             //             "Host" => $_SERVER["SERVER_ADDR"],
 | |
|             //             "User-Agent" => "curl/7.65.3",
 | |
|             //             "Accept" => "*/*",
 | |
|             //             "Accept-Encoding" => "gzip, deflate, br",
 | |
|             //             // 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
 | |
|             //             // 'Connection' => 'keep-alive',
 | |
|             //         ],
 | |
|             //         "json" => [
 | |
|             //             "ord_id" => $order[0]->ord_id,
 | |
|             //             "ord_code" => $order[0]->ord_code,
 | |
|             //             "base_link" =>
 | |
|             //                 route("view_user_vendor_transaction_bid_order") .
 | |
|             //                 "?token=",
 | |
|             //         ],
 | |
|             //     ]);
 | |
|             //     if ($respNode->getStatusCode() != 200) {
 | |
|             //         DB::rollBack();
 | |
|             //         $apiResp = Responses::bad_request(
 | |
|             //             "fail setup schedule 3x10 minutes"
 | |
|             //         );
 | |
|             //         return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             //     }
 | |
|             //     // $body = json_decode($respNode->getBody()->getContents());
 | |
| 
 | |
|             //     $url = env("API_URL_NODE") . "/order/email_to_vendor";
 | |
|             //     $guzReq = new GuzzleClient();
 | |
|             //     $respNode = $guzReq->request("POST", $url, [
 | |
|             //         "headers" => [
 | |
|             //             "Host" => $_SERVER["SERVER_ADDR"],
 | |
|             //             "User-Agent" => "curl/7.65.3",
 | |
|             //             "Accept" => "*/*",
 | |
|             //             "Accept-Encoding" => "gzip, deflate, br",
 | |
|             //             // 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
 | |
|             //             // 'Connection' => 'keep-alive',
 | |
|             //         ],
 | |
|             //         "json" => [
 | |
|             //             "trx_code" => $order[0]->ord_code,
 | |
|             //             "trx_at" => $order[0]->crt,
 | |
|             //             "client_id" => $order[0]->c_id,
 | |
|             //             "client_name" => $order[0]->c_name,
 | |
|             //             "client_phone" =>
 | |
|             //                 $order[0]->c_phone_code .
 | |
|             //                 " " .
 | |
|             //                 implode(" ", str_split($order[0]->c_phone_val, 4)),
 | |
|             //             "client_mail" => $order[0]->c_mail,
 | |
|             //             "client_addr" => "",
 | |
|             //             "client_prefer_type_truck" =>
 | |
|             //                 $order[0]->prefer_truck_type_name ?? "",
 | |
|             //             // "weight" => $order[0]->weight,
 | |
|             //             // "cbm" => $order[0]->cbm,
 | |
|             //             // "koli" => $order[0]->koli,
 | |
|             //             "pickup_zone_title" => $order[0]->pck_name,
 | |
|             //             "pickup_zone_addr" => $order[0]->pck_addr,
 | |
|             //             "pickup_at" => $order[0]->set_pck_at,
 | |
|             //             "drop_zone_title" => $order[0]->drop_name,
 | |
|             //             "drop_zone_addr" => $order[0]->drop_addr,
 | |
|             //             "vendors" => $vendors,
 | |
|             //         ],
 | |
|             //     ]);
 | |
|             //     if ($respNode->getStatusCode() != 200) {
 | |
|             //         DB::rollBack();
 | |
|             //         $apiResp = Responses::bad_request(
 | |
|             //             "fail send email to vendor"
 | |
|             //         );
 | |
|             //         return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             //     }
 | |
|             //     // $body = json_decode($respNode->getBody()->getContents());
 | |
|             // }
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success confirm order");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_want_this_order_v1(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $order = Orders::showOrder([
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_exp_vendor" => 1,
 | |
|                 "vdr_id" => $req->auth->uid,
 | |
|             ]);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             // if ($order[0]->vdr_is_exp === OrdersVendors::LINK_WILL_EXP) {
 | |
|             //     if ($order[0]->vdr_exp_at < time()) {
 | |
|             //         $apiResp = Responses::bad_request("link expired");
 | |
|             //         return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             //     }
 | |
|             // }
 | |
| 
 | |
|             // validate if another vendor want this order
 | |
|             $otherVendorsWantThisOrder = OrdersVendors::getOtherVendorsWantThisOrder(
 | |
|                 $order[0]->ord_id,
 | |
|                 $req->auth->uid
 | |
|             );
 | |
|             if (count($otherVendorsWantThisOrder) > 0) {
 | |
|                 $apiResp = Responses::bad_request(
 | |
|                     "There other vendor want this order, if next 10 minutes the vendor not take the order, we will send email again to you"
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             // $sendToNode = [
 | |
|             // 	"ord_id" => $order[0]->ord_id,
 | |
|             // 	"ord_code" => $order[0]->ord_code,
 | |
|             // 	"current_ord_vdr_id" => $order[0]->ord_vdr_id,
 | |
|             // 	"next_ord_vdr_id" => [],
 | |
|             // 	"next_vdr_bid_token" => [],
 | |
|             // 	"next_vdr_acc_link" => [],
 | |
|             // ];
 | |
| 
 | |
|             // $nextVendors = OrdersVendors::getNextVendors($order[0]->ord_id, $req->auth->uid);
 | |
|             // foreach ($nextVendors as $k => $v) {
 | |
|             // 	$sendToNode['next_ord_vdr_id'][] = ['id' => $v->id];
 | |
|             // 	$sendToNode['next_vdr_bid_token'][] = ['tkn' => $v->bid_token];
 | |
|             // 	$sendToNode['next_vdr_acc_link'][] = ['link' => route('view_user_vendor_transaction_bid_order') . '?token=' . $v->bid_token];
 | |
|             // }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             OrdersVendors::updt($order[0]->ord_vdr_id, [
 | |
|                 "is_want" => OrdersVendors::IS_WANT_YES,
 | |
|                 "is_want_at" => $now,
 | |
|                 "is_exp" => OrdersVendors::LINK_WILL_EXP,
 | |
|                 // 'exp_at' => strtotime('+10 minutes', $now),
 | |
|             ]);
 | |
| 
 | |
|             // gaperlu dihit karena sekarang sudah pakai konsep run schedule 3x dalam 10 menit
 | |
|             // $url = env('API_URL_NODE') . '/order/delay_blast_order';
 | |
|             // $guzReq = new GuzzleClient();
 | |
|             // $respNode = $guzReq->request('POST', $url, [
 | |
|             // 	'headers' => [
 | |
|             // 		'Host' => $_SERVER['SERVER_ADDR'],
 | |
|             // 		'User-Agent' => 'curl/7.65.3',
 | |
|             // 		'Accept' => '*/*',
 | |
|             // 		'Accept-Encoding' => 'gzip, deflate, br',
 | |
|             // 		// 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
 | |
|             // 		// 'Connection' => 'keep-alive',
 | |
|             // 	],
 | |
|             // 	'json' => $sendToNode,
 | |
|             // ]);
 | |
|             // if ($respNode->getStatusCode() != 200) {
 | |
|             // 	DB::rollBack();
 | |
|             // 	$apiResp = Responses::bad_request('fail setup scheduler on 10 minutes later');
 | |
|             // 	return (new Response($apiResp, $apiResp['meta']['code']));
 | |
|             // }
 | |
|             // $body = json_decode($respNode->getBody()->getContents());
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success want this order");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_accept_order_v1(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "vehicle" => $req->vehicle, // id
 | |
|                 "driver" => $req->driver, // id
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "vehicle" => "required|integer|not_in:0",
 | |
|                 "driver" => "required|integer|not_in:0",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $order = Orders::showOrder([
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_exp_vendor" => 1,
 | |
|                 "vdr_id" => $req->auth->uid,
 | |
|             ]);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($order[0]->vdr_status !== OrdersVendors::STTS_WAIT) {
 | |
|                 // $apiResp = Responses::bad_request('you had respond this order');
 | |
|                 $apiResp = Responses::bad_request("order has been cancel");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($order[0]->status === Orders::STTS_WAIT || $order[0]->status === Orders::STTS_CONFIRM) {
 | |
|             } else {
 | |
|                 $apiResp = Responses::bad_request("this order have beend accepted by another vendor");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             // date('Y-m-d H:i:s', $order[0]->vdr_exp_at);
 | |
|             // comment by meus
 | |
|             // if ($order[0]->vdr_is_exp === OrdersVendors::LINK_WILL_EXP) {
 | |
|             //     if ($order[0]->vdr_exp_at < time()) {
 | |
|             //         $apiResp = Responses::bad_request("link expired");
 | |
|             //         return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             //     }
 | |
|             // }
 | |
|             $haveBeenAcc = OrdersVendors::getByOrdIdByStatus($req->ord_id, OrdersVendors::STTS_ACC);
 | |
|             if (count($haveBeenAcc) > 0) {
 | |
|                 $apiResp = Responses::bad_request("this order have beend accepted by another vendor");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $driver = Drivers::getDriverByIdAllData($req->driver);
 | |
|             if (count($driver) < 1) {
 | |
|                 $apiResp = Responses::not_found("driver not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($driver[0]->is_in_ord === Drivers::IN_ORD_YES) {
 | |
|                 $apiResp = Responses::not_found("driver telah ditugaskan untuk order lain");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $vehicle = Vehicles::getVehicleByIdAllData($req->vehicle);
 | |
|             if (count($vehicle) < 1) {
 | |
|                 $apiResp = Responses::not_found("vehicle not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($vehicle[0]->is_in_ord === Vehicles::IN_ORD_YES) {
 | |
|                 $apiResp = Responses::not_found("vehicle telah ditugaskan untuk order lain");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             // $apiResp = Responses::success('success accept order');
 | |
|             // return (new Response($apiResp, $apiResp['meta']['code']));
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "status" => Orders::STTS_HAVE_GET_VHC,
 | |
|             ]);
 | |
|             Vehicles::updateVehicle($req->vehicle, [
 | |
|                 "is_in_ord" => Vehicles::IN_ORD_YES,
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|                 "ord_code" => $order[0]->ord_code,
 | |
|             ]);
 | |
|             Drivers::updateDriver($order[0]->drv_id, [
 | |
|                 "is_in_ord" => Drivers::IN_ORD_YES,
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|                 "ord_code" => $order[0]->ord_code,
 | |
|             ]);
 | |
|             OrdersVendors::updt($order[0]->ord_vdr_id, [
 | |
|                 "respond_at" => $now,
 | |
|                 "status" => OrdersVendors::STTS_ACC,
 | |
|             ]);
 | |
|             OrdersDrivers::add([
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|                 "ord_code" => $order[0]->ord_code,
 | |
|                 "vdr_id" => $driver[0]->vendor_id,
 | |
|                 "drv_id" => $driver[0]->drv_id,
 | |
|                 "drv_name" => $driver[0]->fullname,
 | |
|                 "drv_mail" => $driver[0]->email,
 | |
|                 "drv_name2" => $driver[0]->fullname2,
 | |
|                 "drv_phone_code" => $driver[0]->phone_code,
 | |
|                 "drv_phone_val" => $driver[0]->phone,
 | |
|                 "drv_phone2_code" => $driver[0]->phone2_code,
 | |
|                 "drv_phone2_val" => $driver[0]->phone2,
 | |
|                 "drv_addr" => $driver[0]->fulladdress,
 | |
|                 "drv_cgroup_id" => $driver[0]->client_group_id,
 | |
|                 "drv_nik" => $driver[0]->nik,
 | |
|                 "drv_dob" => $driver[0]->dob,
 | |
|                 "drv_age" => Helper::countAge($driver[0]->dob),
 | |
|                 "drv_gender" => $driver[0]->gender,
 | |
|                 "drv_blood" => $driver[0]->blood,
 | |
|                 "em_fullname" => $driver[0]->em_fullname,
 | |
|                 "em_phone_code" => $driver[0]->em_phone_code,
 | |
|                 "em_phone_val" => $driver[0]->em_phone,
 | |
|                 "em_relationship" => $driver[0]->em_relationship,
 | |
|                 "drv_ktp_img" => $driver[0]->ktp_img,
 | |
|                 "drv_npwp_img" => $driver[0]->npwp_img,
 | |
|                 "drv_npwp_number" => $driver[0]->npwp_number,
 | |
|                 "drv_npwp_string" => $driver[0]->npwp_string,
 | |
|                 "drv_license_img" => $driver[0]->license_img,
 | |
|                 "drv_license_number" => $driver[0]->license_number,
 | |
|                 "drv_license_exp" => $driver[0]->license_exp,
 | |
|             ]);
 | |
|             OrdersVehicles::add([
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|                 "ord_code" => $order[0]->ord_code,
 | |
|                 "vhc_id" => $vehicle[0]->vhc_id,
 | |
|                 "vhc_name" => $vehicle[0]->name,
 | |
|                 "vhc_device_id" => $vehicle[0]->device_id,
 | |
|                 "vhc_cat_id" => $vehicle[0]->cat_id,
 | |
|                 "vhc_brand_id" => $vehicle[0]->brand_id,
 | |
|                 "vhc_type_id" => $vehicle[0]->type_id,
 | |
|                 "vhc_model_id" => $vehicle[0]->model_id,
 | |
|                 "vhc_c_did" => $vehicle[0]->c_did,
 | |
|                 "vhc_a_did" => $vehicle[0]->a_did,
 | |
|                 "vhc_nopol1" => $vehicle[0]->nopol1,
 | |
|                 "vhc_nopol2" => $vehicle[0]->nopol2,
 | |
|                 "vhc_nopol3" => $vehicle[0]->nopol3,
 | |
|                 "vhc_is_track_holiday" => $vehicle[0]->is_track_holiday,
 | |
|                 "vhc_track_sch_d" => $vehicle[0]->track_sch_d,
 | |
|                 "vhc_track_sch_h" => $vehicle[0]->track_sch_h,
 | |
|                 "vhc_cgroup_id" => $vehicle[0]->client_group_id,
 | |
|                 "vhc_vdr_id" => $vehicle[0]->vendor_id,
 | |
|                 "vhc_speed_limit" => $vehicle[0]->speed_limit,
 | |
|                 "vhc_fuel_capacity" => $vehicle[0]->fuel_capacity,
 | |
|                 "vhc_fuel_drop_treshold" => $vehicle[0]->fuel_drop_treshold,
 | |
|                 "vhc_max_pressure" => $vehicle[0]->max_pressure,
 | |
|                 "vhc_fvhc_img" => $vehicle[0]->fvhc_img,
 | |
|                 "vhc_stnk_img" => $vehicle[0]->stnk_img,
 | |
|                 "vhc_stnk_exp" => $vehicle[0]->stnk_exp,
 | |
|                 "vhc_vyear" => $vehicle[0]->vyear,
 | |
|                 "vhc_cc" => $vehicle[0]->cc,
 | |
|                 "vhc_vin" => $vehicle[0]->vin,
 | |
|                 "vhc_en" => $vehicle[0]->en,
 | |
|                 "vhc_vcolor" => $vehicle[0]->vcolor,
 | |
|                 "vhc_fuel_type" => $vehicle[0]->fuel_type,
 | |
|                 "vhc_tnkb_color" => $vehicle[0]->tnkb_color,
 | |
|                 "vhc_regis_year" => $vehicle[0]->regis_year,
 | |
|                 "vhc_tax_exp" => $vehicle[0]->tax_exp,
 | |
|             ]);
 | |
|             // $url = env("API_URL_NODE") . "/order/email_vendor_acc_order";
 | |
|             // $guzReq = new GuzzleClient();
 | |
|             // $respNode = $guzReq->request("POST", $url, [
 | |
|             //     "headers" => [
 | |
|             //         "Host" => $_SERVER["SERVER_ADDR"],
 | |
|             //         "User-Agent" => "curl/7.65.3",
 | |
|             //         "Accept" => "*/*",
 | |
|             //         "Accept-Encoding" => "gzip, deflate, br",
 | |
|             //         // 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
 | |
|             //         // 'Connection' => 'keep-alive',
 | |
|             //     ],
 | |
|             //     "json" => [
 | |
|             //         "trx_code" => $order[0]->ord_code,
 | |
|             //         "trx_at" => $order[0]->crt,
 | |
|             //         "client_id" => $order[0]->c_id,
 | |
|             //         "client_name" => $order[0]->c_name,
 | |
|             //         "client_phone" =>
 | |
|             //             $order[0]->c_phone_code .
 | |
|             //             " " .
 | |
|             //             implode(" ", str_split($order[0]->c_phone_val, 4)),
 | |
|             //         "client_mail" => $order[0]->c_mail,
 | |
|             //         "client_addr" => "",
 | |
|             //         "client_prefer_type_truck" =>
 | |
|             //             $order[0]->prefer_truck_type_name ?? "",
 | |
|             //         "weight" => $order[0]->weight,
 | |
|             //         "cbm" => $order[0]->cbm,
 | |
|             //         "koli" => $order[0]->koli,
 | |
|             //         "pickup_zone_title" => $order[0]->pck_name,
 | |
|             //         "pickup_zone_addr" => $order[0]->pck_addr,
 | |
|             //         "pickup_at" => $order[0]->set_pck_at,
 | |
|             //         "drop_zone_title" => $order[0]->drop_name,
 | |
|             //         "drop_zone_addr" => $order[0]->drop_addr,
 | |
|             //         "vendors" => [
 | |
|             //             [
 | |
|             //                 "vendor_id" => $order[0]->vdr_id,
 | |
|             //                 "vendor_name" => $order[0]->vdr_name,
 | |
|             //                 "vendor_phone" =>
 | |
|             //                     $order[0]->vdr_phone_code .
 | |
|             //                     " " .
 | |
|             //                     implode(
 | |
|             //                         " ",
 | |
|             //                         str_split($order[0]->vdr_phone_val, 4)
 | |
|             //                     ),
 | |
|             //                 "vendor_mail" => $order[0]->vdr_mail,
 | |
|             //                 // "vendor_addr" => $order[0]->vdr_addr,
 | |
|             //                 "vendor_acc_at" => $now,
 | |
|             //             ],
 | |
|             //         ],
 | |
|             //         "drivers" => [
 | |
|             //             [
 | |
|             //                 "driver_id" => $driver[0]->id,
 | |
|             //                 "driver_name" => $driver[0]->fullname,
 | |
|             //                 "driver_phone" =>
 | |
|             //                     $driver[0]->phone_code .
 | |
|             //                     " " .
 | |
|             //                     implode(" ", str_split($driver[0]->phone, 4)),
 | |
|             //                 "driver_mail" => $driver[0]->email,
 | |
|             //                 // "driver_addr" => $driver[0]->fulladdress,
 | |
|             //             ],
 | |
|             //         ],
 | |
|             //     ],
 | |
|             // ]);
 | |
|             // if ($respNode->getStatusCode() != 200) {
 | |
|             //     DB::rollBack();
 | |
|             //     $apiResp = Responses::bad_request("fail send email to vendor");
 | |
|             //     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             // }
 | |
|             // $body = json_decode($respNode->getBody()->getContents());
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success accept order");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_checker_submit_items(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "type_check" => $req->type_check,
 | |
|                 "weight" => $req->weight,
 | |
|                 "cbm" => $req->cbm,
 | |
|                 // 'qty_total' => $req->qty_total,
 | |
|                 "koli" => $req->koli,
 | |
|                 "general_base64" => $req->general_base64,
 | |
|                 "goods_base64" => $req->goods_base64,
 | |
|                 "items" => $req->items,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "type_check" => "required|integer|not_in:0",
 | |
|                 "weight" => "required|numeric",
 | |
|                 "cbm" => "required|numeric",
 | |
|                 // 'qty_total' => 'required|integer|not_in:0',
 | |
|                 "koli" => "required|integer|not_in:0",
 | |
|                 "items" => "required|array",
 | |
|                 "items.*.id" => "required|numeric",
 | |
|                 "items.*.item_code" => "required|string|max:255",
 | |
|                 "items.*.desc" => "required|string",
 | |
|                 // 'items.*.qty' => 'required|numeric',
 | |
|                 "items.*.weight" => "required|numeric", // kg
 | |
|                 "items.*.length" => "required|numeric", // m
 | |
|                 "items.*.wide" => "required|numeric", // m
 | |
|                 "items.*.height" => "required|numeric", // m
 | |
|                 "items.*.cbm" => "required|numeric", // m
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if (count($req->items) < 1) {
 | |
|                 $apiResp = Responses::bad_input("at least 1 item left remaining");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $url_general = null;
 | |
|             $url_goods = null;
 | |
|             $calc_weight = $req->weight; // total
 | |
|             $calc_cbm = $req->cbm; // total
 | |
|             $calc_qty = $req->qty_total ?? 0; // total
 | |
|             $calc_koli = $req->koli; // total
 | |
| 
 | |
|             $order = Orders::showOrder([
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_stts_checker" => 1,
 | |
|                 // 'chk_id' => $req->auth->uid,
 | |
|             ]);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($req->type_check == Users::CHK_TYPE_PICKUP) {
 | |
|                 // case jika vehicle harus sedang ditempat
 | |
|                 // if ($order[0]->status === Orders::STTS_HAVE_GET_VHC || $order[0]->status === Orders::STTS_PCK || $order[0]->status === Orders::STTS_GO) {
 | |
|                 // } else {
 | |
|                 // 	$apiResp = Responses::bad_input('vehicle not in pickup zone');
 | |
|                 // 	return (new Response($apiResp, $apiResp['meta']['code']));
 | |
|                 // }
 | |
|                 // case jika checker bisa submit kapan saja
 | |
|                 if ($order[0]->status === Orders::STTS_WAIT || $order[0]->status === Orders::STTS_CONFIRM) {
 | |
|                     $apiResp = Responses::bad_input("vehicle not in pickup zone");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             } elseif ($req->type_check == Users::CHK_TYPE_DROP) {
 | |
|                 // case jika vehicle harus sedang ditempat
 | |
|                 // if ($order[0]->status === Orders::STTS_GO || $order[0]->status === Orders::STTS_ARV || $order[0]->status === Orders::STTS_DROP || $order[0]->status === Orders::STTS_CLIENT_PAY) {
 | |
|                 // } else {
 | |
|                 // 	$apiResp = Responses::bad_input('vehicle not in drop zone');
 | |
|                 // 	return (new Response($apiResp, $apiResp['meta']['code']));
 | |
|                 // }
 | |
|                 // case jika checker bisa submit kapan saja
 | |
|                 if (
 | |
|                     $order[0]->status === Orders::STTS_WAIT ||
 | |
|                     $order[0]->status === Orders::STTS_CONFIRM ||
 | |
|                     $order[0]->status === Orders::STTS_PCK
 | |
|                 ) {
 | |
|                     $apiResp = Responses::bad_input("vehicle not in drop zone");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             } else {
 | |
|                 $apiResp = Responses::bad_input("location type not valid");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             if ($req->general_base64 != "") {
 | |
|                 if ($req->type_check == Users::CHK_TYPE_PICKUP) {
 | |
|                     $url_general =
 | |
|                         "orders/" .
 | |
|                         $order[0]->ord_id .
 | |
|                         "/pickups/" .
 | |
|                         $order[0]->ord_pck_id .
 | |
|                         "/checkers/" .
 | |
|                         $req->auth->uid .
 | |
|                         "/general_$now.jpeg";
 | |
|                 } elseif ($req->type_check == Users::CHK_TYPE_DROP) {
 | |
|                     $url_general =
 | |
|                         "orders/" .
 | |
|                         $order[0]->ord_id .
 | |
|                         "/drops/" .
 | |
|                         $order[0]->ord_drop_id .
 | |
|                         "/checkers/" .
 | |
|                         $req->auth->uid .
 | |
|                         "/general_$now.jpeg";
 | |
|                 }
 | |
|                 if (!Storage::disk("public")->put($url_general, base64_decode($req->general_base64))) {
 | |
|                     $apiResp = Responses::bad_request("fail upload image delivery order");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             if ($req->goods_base64 != "") {
 | |
|                 if ($req->type_check == Users::CHK_TYPE_PICKUP) {
 | |
|                     $url_goods =
 | |
|                         "orders/" .
 | |
|                         $order[0]->ord_id .
 | |
|                         "/pickups/" .
 | |
|                         $order[0]->ord_pck_id .
 | |
|                         "/checkers/" .
 | |
|                         $req->auth->uid .
 | |
|                         "/goods_$now.jpeg";
 | |
|                 } elseif ($req->type_check == Users::CHK_TYPE_DROP) {
 | |
|                     $url_goods =
 | |
|                         "orders/" .
 | |
|                         $order[0]->ord_id .
 | |
|                         "/drops/" .
 | |
|                         $order[0]->ord_drop_id .
 | |
|                         "/checkers/" .
 | |
|                         $req->auth->uid .
 | |
|                         "/goods_$now.jpeg";
 | |
|                 }
 | |
|                 if (!Storage::disk("public")->put($url_goods, base64_decode($req->goods_base64))) {
 | |
|                     Storage::disk("public")->delete($url_general);
 | |
|                     $apiResp = Responses::bad_request("fail upload image delivery order");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             // update checker if id > 0 and new items if id == 0
 | |
|             foreach ($req->items as $k => $v) {
 | |
|                 // update
 | |
|                 if ($v["id"] > 0) {
 | |
|                     if ($req->type_check == Users::CHK_TYPE_PICKUP) {
 | |
|                         OrdersItems::updt($v["id"], [
 | |
|                             "chk_pck_id" => $req->auth->uid,
 | |
|                             "chk_pck_at" => $now,
 | |
|                         ]);
 | |
|                     } elseif ($req->type_check == Users::CHK_TYPE_DROP) {
 | |
|                         OrdersItems::updt($v["id"], [
 | |
|                             "chk_drop_id" => $req->auth->uid,
 | |
|                             "chk_drop_at" => $now,
 | |
|                         ]);
 | |
|                     }
 | |
|                 }
 | |
|                 // new data
 | |
|                 else {
 | |
|                     $insNewItem = [
 | |
|                         "ord_id" => $order[0]->ord_id,
 | |
|                         "ord_code" => $order[0]->ord_code,
 | |
|                         "pck_id" => $order[0]->ord_pck_id,
 | |
|                         "drop_id" => $order[0]->ord_drop_id,
 | |
|                         "item_code" => $v["item_code"],
 | |
|                         "desc" => $v["desc"],
 | |
|                         "unit_weight" => OrdersItems::DEFAULT_WEIGHT_UNIT,
 | |
|                         "weight" => $v["weight"],
 | |
|                         "unit_dimension" => OrdersItems::DEFAULT_DIMENSION_UNIT,
 | |
|                         "qty" => $v["qty"] ?? 0,
 | |
|                         "length" => $v["length"],
 | |
|                         "wide" => $v["wide"],
 | |
|                         "height" => $v["height"],
 | |
|                         "volume" => $v["cbm"],
 | |
|                         "crt" => $now,
 | |
|                     ];
 | |
|                     if ($req->type_check == Users::CHK_TYPE_PICKUP) {
 | |
|                         $insNewItem["chk_pck_new"] = $now;
 | |
|                     } elseif ($req->type_check == Users::CHK_TYPE_DROP) {
 | |
|                         $insNewItem["chk_drop_new"] = $now;
 | |
|                     }
 | |
|                     OrdersItems::add($insNewItem);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             // only delete if id > 0
 | |
|             if ($req->items_deleted && count($req->items_deleted) > 0) {
 | |
|                 foreach ($req->items_deleted as $k => $v) {
 | |
|                     if ($v["id"] > 0) {
 | |
|                         if ($req->type_check == Users::CHK_TYPE_PICKUP) {
 | |
|                             OrdersItems::updt($v["id"], [
 | |
|                                 "chk_pck_id" => $req->auth->uid,
 | |
|                                 "chk_pck_at" => $now,
 | |
|                                 "chk_pck_dlt" => $now,
 | |
|                             ]);
 | |
|                         } elseif ($req->type_check == Users::CHK_TYPE_DROP) {
 | |
|                             OrdersItems::updt($v["id"], [
 | |
|                                 "chk_drop_id" => $req->auth->uid,
 | |
|                                 "chk_drop_at" => $now,
 | |
|                                 "chk_drop_dlt" => $now,
 | |
|                             ]);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if ($req->type_check == Users::CHK_TYPE_PICKUP) {
 | |
|                 // case jika sudah drop namun checker pickup belum upload dan harus upload
 | |
|                 if ($order[0]->pck_chk_stts == OrdersPickups::CHK_STTS_SUBMIT) {
 | |
|                     $updt_stts_order = $order[0]->status;
 | |
|                 } else {
 | |
|                     $check_updt_stts = [Orders::STTS_HAVE_GET_VHC, Orders::STTS_PCK];
 | |
|                     if (in_array($order[0]->status, $check_updt_stts)) {
 | |
|                         $updt_stts_order = Orders::STTS_GO;
 | |
|                     } else {
 | |
|                         $updt_stts_order = $order[0]->status;
 | |
|                     }
 | |
|                 }
 | |
|                 OrdersPickups::updt($order[0]->ord_pck_id, [
 | |
|                     // pck_* => dicomment pas tracking udah jalan
 | |
|                     "pck_at" => $order[0]->pck_at ? $order[0]->pck_at : $now, // leave_at
 | |
|                     "pck_enter_at" => $order[0]->pck_enter_at ? $order[0]->pck_enter_at : $now,
 | |
|                     "pck_leave_at" => $order[0]->pck_leave_at ? $order[0]->pck_leave_at : $now,
 | |
|                     "stts_pck" => OrdersPickups::STTS_PICKED,
 | |
|                     "chk_id" => $req->auth->uid,
 | |
|                     "chk_at" => $now,
 | |
|                     "chk_stts" => OrdersPickups::CHK_STTS_SUBMIT,
 | |
|                     "chk_img" => $url_general,
 | |
|                     "chk_goods_img" => $url_goods,
 | |
|                     "chk_name" => $req->auth->first_name,
 | |
|                     "chk_mail" => $req->auth->email,
 | |
|                     "chk_addr" => $req->auth->fulladdress,
 | |
|                     "chk_phone_code" => $req->auth->phone_code,
 | |
|                     "chk_phone_val" => $req->auth->phone,
 | |
|                     "weight" => $calc_weight,
 | |
|                     "cbm" => $calc_cbm,
 | |
|                     "qty" => $calc_qty,
 | |
|                 ]);
 | |
|                 OrdersDrops::updt($order[0]->ord_drop_id, [
 | |
|                     "est_weight" => $calc_weight,
 | |
|                     "est_cbm" => $calc_cbm,
 | |
|                     "est_qty" => $calc_qty,
 | |
|                 ]);
 | |
|             } elseif ($req->type_check == Users::CHK_TYPE_DROP) {
 | |
|                 $check_updt_stts = [
 | |
|                     Orders::STTS_HAVE_GET_VHC,
 | |
|                     Orders::STTS_PCK,
 | |
|                     Orders::STTS_GO,
 | |
|                     Orders::STTS_ARV,
 | |
|                     Orders::STTS_DROP,
 | |
|                 ];
 | |
|                 if (in_array($order[0]->status, $check_updt_stts)) {
 | |
|                     $updt_stts_order = Orders::STTS_CLIENT_PAY;
 | |
|                 } else {
 | |
|                     $updt_stts_order = $order[0]->status;
 | |
|                 }
 | |
|                 OrdersDrops::updt($order[0]->ord_drop_id, [
 | |
|                     // drop_* => dicomment pas tracking udah jalan
 | |
|                     "drop_at" => $order[0]->drop_at ? $order[0]->drop_at : $now, // leave_at
 | |
|                     "drop_enter_at" => $order[0]->drop_enter_at ? $order[0]->drop_enter_at : $now,
 | |
|                     "drop_leave_at" => $order[0]->drop_leave_at ? $order[0]->drop_leave_at : $now,
 | |
|                     "stts_drop" => OrdersDrops::STTS_DROPED,
 | |
|                     "chk_id" => $req->auth->uid,
 | |
|                     "chk_at" => $now,
 | |
|                     "chk_stts" => OrdersDrops::CHK_STTS_SUBMIT,
 | |
|                     "chk_img" => $url_general,
 | |
|                     "chk_goods_img" => $url_goods,
 | |
|                     "chk_name" => $req->auth->first_name,
 | |
|                     "chk_mail" => $req->auth->email,
 | |
|                     "chk_addr" => $req->auth->fulladdress,
 | |
|                     "chk_phone_code" => $req->auth->phone_code,
 | |
|                     "chk_phone_val" => $req->auth->phone,
 | |
|                     "weight" => $calc_weight,
 | |
|                     "cbm" => $calc_cbm,
 | |
|                     "qty" => $calc_qty,
 | |
|                 ]);
 | |
|                 // Vehicles::updateVehicle($order[0]->vhc_id, [
 | |
|                 // 	'is_in_ord' => Vehicles::IN_ORD_NO,
 | |
|                 // 	'ord_id' => 0,
 | |
|                 // 	'ord_code' => 0,
 | |
|                 // ]);
 | |
|             }
 | |
| 
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "status" => $updt_stts_order,
 | |
|                 "going_at" => $order[0]->going_at ? $order[0]->going_at : $now,
 | |
|                 "arrived_at" => $order[0]->arrived_at ? $order[0]->arrived_at : $now,
 | |
|                 "weight" => $calc_weight,
 | |
|                 "cbm" => $calc_cbm,
 | |
|                 "qty" => $calc_qty,
 | |
|             ]);
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success submit checker data");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_checker_submit_pickup(Request $req)
 | |
|     {
 | |
|         $now = time();
 | |
|         $url_seal_img = null;
 | |
|         $url_drv_armd_img = null;
 | |
|         $url_nopol_img = null;
 | |
|         $url_docs_client_img = [];
 | |
|         $url_install_seal_img = null;
 | |
|         $url_goods_img = null;
 | |
|         try {
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "ord_pck_id" => $req->ord_pck_id,
 | |
|                 "seal_number" => $req->seal_number,
 | |
|                 "seal_img_base64" => $req->seal_img_base64,
 | |
|                 "drv_armd_img_base64" => $req->drv_armd_img_base64,
 | |
|                 "nopol_img_base64" => $req->nopol_img_base64,
 | |
|                 "docs_client_img_base64" => $req->docs_client_img_base64,
 | |
|                 "install_seal_img_base64" => $req->install_seal_img_base64,
 | |
|                 "goods_img_base64" => $req->goods_img_base64,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "ord_pck_id" => "nullable|integer|not_in:0",
 | |
|                 "seal_number" => "required|numeric",
 | |
|                 "seal_img_base64" => "required|string",
 | |
|                 "drv_armd_img_base64" => "required|string",
 | |
|                 "nopol_img_base64" => "required|string",
 | |
|                 "docs_client_img_base64" => "required|array",
 | |
|                 "install_seal_img_base64" => "nullable|string",
 | |
|                 "goods_img_base64" => "nullable|string",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if (count($req->docs_client_img_base64) < 1) {
 | |
|                 $apiResp = Responses::bad_input("silahkan upload dokumen kelengkapan dari client");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $order = Orders::showOrder([
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_stts_checker" => 1,
 | |
|                 // 'chk_id' => $req->auth->uid,
 | |
|             ]);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             if (
 | |
|                 $order[0]->status === Orders::STTS_HAVE_GET_VHC ||
 | |
|                 $order[0]->status === Orders::STTS_PCK ||
 | |
|                 $order[0]->status === Orders::STTS_GO
 | |
|             ) {
 | |
|             } else {
 | |
|                 $apiResp = Responses::bad_input("kendaraan belum berada di zona pickup");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             if ($req->seal_img_base64) {
 | |
|                 $clearBase64 = preg_replace(
 | |
|                     "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                     "",
 | |
|                     $req->seal_img_base64
 | |
|                 );
 | |
|                 $type = "jpeg";
 | |
|                 if (strpos($req->seal_img_base64, "application/pdf") !== false) {
 | |
|                     $type = "pdf";
 | |
|                 }
 | |
|                 $url_seal_img =
 | |
|                     "orders/" .
 | |
|                     $order[0]->ord_id .
 | |
|                     "/pickups/" .
 | |
|                     $order[0]->ord_pck_id .
 | |
|                     "/checkers/" .
 | |
|                     $req->auth->uid .
 | |
|                     "/seal_img_$now.$type";
 | |
|                 if (!Storage::disk("public")->put($url_seal_img, base64_decode($clearBase64))) {
 | |
|                     $apiResp = Responses::bad_request("gagal upload foto seal");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             if ($req->drv_armd_img_base64) {
 | |
|                 $clearBase64 = preg_replace(
 | |
|                     "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                     "",
 | |
|                     $req->drv_armd_img_base64
 | |
|                 );
 | |
|                 $type = "jpeg";
 | |
|                 if (strpos($req->drv_armd_img_base64, "application/pdf") !== false) {
 | |
|                     $type = "pdf";
 | |
|                 }
 | |
|                 $url_drv_armd_img =
 | |
|                     "orders/" .
 | |
|                     $order[0]->ord_id .
 | |
|                     "/pickups/" .
 | |
|                     $order[0]->ord_pck_id .
 | |
|                     "/checkers/" .
 | |
|                     $req->auth->uid .
 | |
|                     "/drv_armd_img_$now.$type";
 | |
|                 if (!Storage::disk("public")->put($url_drv_armd_img, base64_decode($clearBase64))) {
 | |
|                     Storage::disk("public")->delete($url_seal_img);
 | |
|                     $apiResp = Responses::bad_request("gagal upload foto driver armada");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             if ($req->nopol_img_base64) {
 | |
|                 $clearBase64 = preg_replace(
 | |
|                     "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                     "",
 | |
|                     $req->nopol_img_base64
 | |
|                 );
 | |
|                 $type = "jpeg";
 | |
|                 if (strpos($req->nopol_img_base64, "application/pdf") !== false) {
 | |
|                     $type = "pdf";
 | |
|                 }
 | |
|                 $url_nopol_img =
 | |
|                     "orders/" .
 | |
|                     $order[0]->ord_id .
 | |
|                     "/pickups/" .
 | |
|                     $order[0]->ord_pck_id .
 | |
|                     "/checkers/" .
 | |
|                     $req->auth->uid .
 | |
|                     "/nopol_img_$now.$type";
 | |
|                 if (!Storage::disk("public")->put($url_nopol_img, base64_decode($clearBase64))) {
 | |
|                     Storage::disk("public")->delete($url_seal_img);
 | |
|                     Storage::disk("public")->delete($url_drv_armd_img);
 | |
|                     $apiResp = Responses::bad_request("fail upload foto nomor polisi");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             if ($req->docs_client_img_base64 && count($req->docs_client_img_base64) > 0) {
 | |
|                 $skip = false;
 | |
|                 foreach ($req->docs_client_img_base64 as $i => $img) {
 | |
|                     if ($skip) {
 | |
|                         continue;
 | |
|                     }
 | |
|                     $clearBase64 = preg_replace(
 | |
|                         "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                         "",
 | |
|                         $img
 | |
|                     );
 | |
|                     $type = "jpeg";
 | |
|                     if (strpos($img, "application/pdf") !== false) {
 | |
|                         $type = "pdf";
 | |
|                     }
 | |
|                     $url_docs_client_img[$i] =
 | |
|                         "orders/" .
 | |
|                         $order[0]->ord_id .
 | |
|                         "/pickups/" .
 | |
|                         $order[0]->ord_pck_id .
 | |
|                         "/checkers/" .
 | |
|                         $req->auth->uid .
 | |
|                         "/docs_client_img_$now" .
 | |
|                         "_" .
 | |
|                         "$i.$type";
 | |
|                     if (
 | |
|                         !Storage::disk("public")->put($url_docs_client_img[$i], base64_decode($clearBase64))
 | |
|                     ) {
 | |
|                         Storage::disk("public")->delete($url_seal_img);
 | |
|                         Storage::disk("public")->delete($url_drv_armd_img);
 | |
|                         Storage::disk("public")->delete($url_nopol_img);
 | |
|                         $apiResp = Responses::bad_request("gagal upload foto dokumen kelengkapan client");
 | |
|                         return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             if ($req->install_seal_img_base64) {
 | |
|                 $clearBase64 = preg_replace(
 | |
|                     "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                     "",
 | |
|                     $req->install_seal_img_base64
 | |
|                 );
 | |
|                 $type = "jpeg";
 | |
|                 if (strpos($req->install_seal_img_base64, "application/pdf") !== false) {
 | |
|                     $type = "pdf";
 | |
|                 }
 | |
|                 $url_install_seal_img =
 | |
|                     "orders/" .
 | |
|                     $order[0]->ord_id .
 | |
|                     "/pickups/" .
 | |
|                     $order[0]->ord_pck_id .
 | |
|                     "/checkers/" .
 | |
|                     $req->auth->uid .
 | |
|                     "/install_seal_img_$now.$type";
 | |
|                 if (!Storage::disk("public")->put($url_install_seal_img, base64_decode($clearBase64))) {
 | |
|                     Storage::disk("public")->delete($url_seal_img);
 | |
|                     Storage::disk("public")->delete($url_drv_armd_img);
 | |
|                     Storage::disk("public")->delete($url_nopol_img);
 | |
|                     foreach ($url_docs_client_img as $path) {
 | |
|                         Storage::disk("public")->delete($path);
 | |
|                     }
 | |
|                     $apiResp = Responses::bad_request("gagal upload foto pemasangan seal");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             if ($req->goods_img_base64) {
 | |
|                 $clearBase64 = preg_replace(
 | |
|                     "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                     "",
 | |
|                     $req->goods_img_base64
 | |
|                 );
 | |
|                 $type = "jpeg";
 | |
|                 if (strpos($req->goods_img_base64, "application/pdf") !== false) {
 | |
|                     $type = "pdf";
 | |
|                 }
 | |
|                 $url_goods_img =
 | |
|                     "orders/" .
 | |
|                     $order[0]->ord_id .
 | |
|                     "/pickups/" .
 | |
|                     $order[0]->ord_pck_id .
 | |
|                     "/checkers/" .
 | |
|                     $req->auth->uid .
 | |
|                     "/goods_img_$now.$type";
 | |
|                 if (!Storage::disk("public")->put($url_goods_img, base64_decode($clearBase64))) {
 | |
|                     Storage::disk("public")->delete($url_seal_img);
 | |
|                     Storage::disk("public")->delete($url_drv_armd_img);
 | |
|                     Storage::disk("public")->delete($url_nopol_img);
 | |
|                     foreach ($url_docs_client_img as $path) {
 | |
|                         Storage::disk("public")->delete($path);
 | |
|                     }
 | |
|                     Storage::disk("public")->delete($url_install_seal_img);
 | |
|                     $apiResp = Responses::bad_request("gagal upload foto barang");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "status" => Orders::STTS_GO,
 | |
|                 "going_at" => $order[0]->going_at ? $order[0]->going_at : $now,
 | |
|                 "chk_stts" => Orders::CHK_STTS_HAS_PICKUP,
 | |
|             ]);
 | |
| 
 | |
|             OrdersPickups::updt($order[0]->ord_pck_id, [
 | |
|                 // pck_* => dicomment pas tracking udah jalan
 | |
|                 "pck_at" => $order[0]->pck_at ? $order[0]->pck_at : $now, // leave_at
 | |
|                 "pck_enter_at" => $order[0]->pck_enter_at ? $order[0]->pck_enter_at : $now,
 | |
|                 "pck_leave_at" => $order[0]->pck_leave_at ? $order[0]->pck_leave_at : $now,
 | |
|                 "stts_pck" => OrdersPickups::STTS_PICKED,
 | |
|                 "chk_id" => $req->auth->uid,
 | |
|                 "chk_at" => $now,
 | |
|                 "chk_stts" => OrdersPickups::CHK_STTS_SUBMIT,
 | |
|                 "chk_seal_number" => $req->seal_number,
 | |
|                 "chk_seal_img" => $url_seal_img,
 | |
|                 "chk_drv_armd_img" => $url_drv_armd_img,
 | |
|                 "chk_nopol_img" => $url_nopol_img,
 | |
|                 "chk_docs_client_img" => json_encode($url_docs_client_img),
 | |
|                 "chk_seal_install_img" => $url_install_seal_img,
 | |
|                 "chk_goods_img" => $url_goods_img,
 | |
|                 "chk_name" => $req->auth->first_name,
 | |
|                 "chk_mail" => $req->auth->email,
 | |
|                 "chk_addr" => $req->auth->fulladdress,
 | |
|                 "chk_phone_code" => $req->auth->phone_code,
 | |
|                 "chk_phone_val" => $req->auth->phone,
 | |
|             ]);
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success submit laporan penjemputan");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             if ($url_seal_img) {
 | |
|                 Storage::disk("public")->delete($url_seal_img);
 | |
|             }
 | |
|             if ($url_drv_armd_img) {
 | |
|                 Storage::disk("public")->delete($url_drv_armd_img);
 | |
|             }
 | |
|             if ($url_nopol_img) {
 | |
|                 Storage::disk("public")->delete($url_nopol_img);
 | |
|             }
 | |
|             if (count($url_docs_client_img) > 0) {
 | |
|                 foreach ($url_docs_client_img as $path) {
 | |
|                     Storage::disk("public")->delete($path);
 | |
|                 }
 | |
|             }
 | |
|             if ($url_install_seal_img) {
 | |
|                 Storage::disk("public")->delete($url_install_seal_img);
 | |
|             }
 | |
|             if ($url_goods_img) {
 | |
|                 Storage::disk("public")->delete($url_goods_img);
 | |
|             }
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_checker_submit_drop(Request $req)
 | |
|     {
 | |
|         $now = time();
 | |
|         $url_arrived_img = null;
 | |
|         $url_handover_img = null;
 | |
|         // $url_do_ttd_img = []; // multiple
 | |
|         $url_do_ttd_img = null; // single
 | |
|         // $url_spk_img = []; // multiple
 | |
|         $url_spk_img = null; // single
 | |
|         try {
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "ord_drop_id" => $req->ord_drop_id,
 | |
|                 "arrived_img_base64" => $req->arrived_img_base64,
 | |
|                 "handover_img_base64" => $req->handover_img_base64,
 | |
|                 "do_ttd_img_base64" => $req->do_ttd_img_base64,
 | |
|                 "spk_img_base64" => $req->spk_img_base64,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "ord_drop_id" => "nullable|integer|not_in:0",
 | |
|                 "arrived_img_base64" => "required|string",
 | |
|                 "handover_img_base64" => "required|string",
 | |
|                 "do_ttd_img_base64" => "required|string",
 | |
|                 "spk_img_base64" => "required|string",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $order = Orders::showOrder([
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_stts_checker" => 1,
 | |
|                 // 'chk_id' => $req->auth->uid,
 | |
|             ]);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             if (
 | |
|                 $order[0]->status === Orders::STTS_GO ||
 | |
|                 $order[0]->status === Orders::STTS_ARV ||
 | |
|                 $order[0]->status === Orders::STTS_DROP ||
 | |
|                 $order[0]->status === Orders::STTS_CLIENT_PAY
 | |
|             ) {
 | |
|             } else {
 | |
|                 $apiResp = Responses::bad_input("kendaraan belum berada di zona drop");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             if ($req->arrived_img_base64) {
 | |
|                 $clearBase64 = preg_replace(
 | |
|                     "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                     "",
 | |
|                     $req->arrived_img_base64
 | |
|                 );
 | |
|                 $type = "jpeg";
 | |
|                 if (strpos($req->arrived_img_base64, "application/pdf") !== false) {
 | |
|                     $type = "pdf";
 | |
|                 }
 | |
|                 $url_arrived_img =
 | |
|                     "orders/" .
 | |
|                     $order[0]->ord_id .
 | |
|                     "/pickups/" .
 | |
|                     $order[0]->ord_pck_id .
 | |
|                     "/checkers/" .
 | |
|                     $req->auth->uid .
 | |
|                     "/arrived_img_$now.$type";
 | |
|                 if (!Storage::disk("public")->put($url_arrived_img, base64_decode($clearBase64))) {
 | |
|                     $apiResp = Responses::bad_request("gagal upload foto seal");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             if ($req->handover_img_base64) {
 | |
|                 $clearBase64 = preg_replace(
 | |
|                     "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                     "",
 | |
|                     $req->handover_img_base64
 | |
|                 );
 | |
|                 $type = "jpeg";
 | |
|                 if (strpos($req->handover_img_base64, "application/pdf") !== false) {
 | |
|                     $type = "pdf";
 | |
|                 }
 | |
|                 $url_handover_img =
 | |
|                     "orders/" .
 | |
|                     $order[0]->ord_id .
 | |
|                     "/pickups/" .
 | |
|                     $order[0]->ord_pck_id .
 | |
|                     "/checkers/" .
 | |
|                     $req->auth->uid .
 | |
|                     "/handover_img_$now.$type";
 | |
|                 if (!Storage::disk("public")->put($url_handover_img, base64_decode($clearBase64))) {
 | |
|                     Storage::disk("public")->delete($url_arrived_img);
 | |
|                     $apiResp = Responses::bad_request("gagal upload foto driver armada");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             // single
 | |
|             if ($req->do_ttd_img_base64) {
 | |
|                 $clearBase64 = preg_replace(
 | |
|                     "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                     "",
 | |
|                     $req->do_ttd_img_base64
 | |
|                 );
 | |
|                 $type = "jpeg";
 | |
|                 if (strpos($req->do_ttd_img_base64, "application/pdf") !== false) {
 | |
|                     $type = "pdf";
 | |
|                 }
 | |
|                 $url_do_ttd_img =
 | |
|                     "orders/" .
 | |
|                     $order[0]->ord_id .
 | |
|                     "/pickups/" .
 | |
|                     $order[0]->ord_pck_id .
 | |
|                     "/checkers/" .
 | |
|                     $req->auth->uid .
 | |
|                     "/do_ttd_img_$now.$type";
 | |
|                 if (!Storage::disk("public")->put($url_do_ttd_img, base64_decode($clearBase64))) {
 | |
|                     Storage::disk("public")->delete($url_arrived_img);
 | |
|                     Storage::disk("public")->delete($url_handover_img);
 | |
|                     $apiResp = Responses::bad_request("gagal upload do dt ttd");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             // multiple
 | |
|             // if ($req->do_ttd_img_base64 && count($req->do_ttd_img_base64) > 0) {
 | |
|             // 	$skip = false;
 | |
|             // 	foreach ($req->do_ttd_img_base64 as $i => $img) {
 | |
|             // 		if ($skip) continue;
 | |
|             // 		$clearBase64 = preg_replace('/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/', '', $img);
 | |
|             // 		$type = 'jpeg';
 | |
|             // 		if (strpos($img, 'application/pdf') !== false) $type = 'pdf';
 | |
|             // 		$url_do_ttd_img[$i] = "orders/" . $order[0]->ord_id . "/pickups/" . $order[0]->ord_pck_id . "/checkers/" . $req->auth->uid . "/do_ttd_img_$now" . "_" . "$i.$type";
 | |
|             // 		if (!Storage::disk('public')->put($url_do_ttd_img[$i], base64_decode($clearBase64))) {
 | |
|             // 		Storage::disk('public')->delete($url_arrived_img);
 | |
|             // 		Storage::disk('public')->delete($url_handover_img);
 | |
|             // 		$apiResp = Responses::bad_request('gagal upload do ttd');
 | |
|             // 		return (new Response($apiResp, $apiResp['meta']['code']));
 | |
|             // 		}
 | |
|             // 	}
 | |
|             // }
 | |
|             // single
 | |
|             if ($req->spk_img_base64) {
 | |
|                 $clearBase64 = preg_replace(
 | |
|                     "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                     "",
 | |
|                     $req->spk_img_base64
 | |
|                 );
 | |
|                 $type = "jpeg";
 | |
|                 if (strpos($req->spk_img_base64, "application/pdf") !== false) {
 | |
|                     $type = "pdf";
 | |
|                 }
 | |
|                 $url_spk_img =
 | |
|                     "orders/" .
 | |
|                     $order[0]->ord_id .
 | |
|                     "/pickups/" .
 | |
|                     $order[0]->ord_pck_id .
 | |
|                     "/checkers/" .
 | |
|                     $req->auth->uid .
 | |
|                     "/spk_img_$now.$type";
 | |
|                 if (!Storage::disk("public")->put($url_spk_img, base64_decode($clearBase64))) {
 | |
|                     Storage::disk("public")->delete($url_arrived_img);
 | |
|                     Storage::disk("public")->delete($url_handover_img);
 | |
|                     Storage::disk("public")->delete($url_do_ttd_img);
 | |
|                     $apiResp = Responses::bad_request("gagal upload foto surat jalan di ttd");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|             }
 | |
|             // multiple
 | |
| 
 | |
|             // kalau devices portable di lepas manual
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             $updtOrd = [
 | |
|                 "status" => Orders::STTS_CLIENT_PAY,
 | |
|                 "arrived_at" => $order[0]->arrived_at ? $order[0]->arrived_at : $now,
 | |
|                 "chk_stts" => Orders::CHK_STTS_HAS_DROP,
 | |
|             ];
 | |
| 
 | |
|             $checkPaidOff = Finance::checkJustPaidOff($order[0]->ord_id);
 | |
|             if ($checkPaidOff["invc_paid"] === 1) {
 | |
|                 $updtOrd["is_invc_paid"] = Orders::IS_PAID_YES;
 | |
|                 $updtOrd["invc_paid_at"] = $now;
 | |
|             }
 | |
|             if ($checkPaidOff["vdr_paid"] === 1) {
 | |
|                 $updtOrd["is_vdr_paid"] = Orders::IS_PAID_YES;
 | |
|                 $updtOrd["vdr_paid_at"] = $now;
 | |
|             }
 | |
|             if ($checkPaidOff["invc_vdr_paid"] === 1 || $checkPaidOff["invc_vdr_paid"] === 2) {
 | |
|                 if (
 | |
|                     $order[0]->status === Orders::STTS_GO ||
 | |
|                     $order[0]->status === Orders::STTS_ARV ||
 | |
|                     $order[0]->status === Orders::STTS_DROP ||
 | |
|                     $order[0]->status === Orders::STTS_CLIENT_PAY ||
 | |
|                     $order[0]->status === Orders::STTS_VENDOR_PAYED
 | |
|                 ) {
 | |
|                     $updtOrd["status"] = Orders::STTS_CLOSE;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (count($updtOrd) > 0) {
 | |
|                 Orders::updateOrder($order[0]->ord_id, $updtOrd);
 | |
|             }
 | |
| 
 | |
|             OrdersDrops::updt($order[0]->ord_drop_id, [
 | |
|                 // drop_* => dicomment pas tracking udah jalan
 | |
|                 "drop_at" => $order[0]->drop_at ? $order[0]->drop_at : $now, // leave_at
 | |
|                 "drop_enter_at" => $order[0]->drop_enter_at ? $order[0]->drop_enter_at : $now,
 | |
|                 "drop_leave_at" => $order[0]->drop_leave_at ? $order[0]->drop_leave_at : $now,
 | |
|                 "stts_drop" => OrdersDrops::STTS_DROPED,
 | |
|                 "chk_id" => $req->auth->uid,
 | |
|                 "chk_at" => $now,
 | |
|                 "chk_stts" => OrdersDrops::CHK_STTS_SUBMIT,
 | |
|                 "chk_arrived_img" => $url_arrived_img,
 | |
|                 "chk_handover_img" => $url_handover_img,
 | |
|                 "chk_do_ttd_img" => $url_do_ttd_img,
 | |
|                 "chk_spk_img" => $url_spk_img,
 | |
|                 "chk_name" => $req->auth->first_name,
 | |
|                 "chk_mail" => $req->auth->email,
 | |
|                 "chk_addr" => $req->auth->fulladdress,
 | |
|                 "chk_phone_code" => $req->auth->phone_code,
 | |
|                 "chk_phone_val" => $req->auth->phone,
 | |
|             ]);
 | |
| 
 | |
|             // kalau sudah selesai drop vhc & driver bisa order lagi
 | |
|             $vehicle = Vehicles::getVehicleById($order[0]->vhc_id);
 | |
|             $updtVhc = [];
 | |
|             if ($vehicle[0]->ord_ids) {
 | |
|                 $vhc_in_ordis = json_decode($vehicle[0]->ord_ids);
 | |
|                 foreach ($vhc_in_ordis as $key => $val) {
 | |
|                     if ($val === $order[0]->ord_id) {
 | |
|                         if (count($vhc_in_ordis) <= 1) {
 | |
|                             $updtVhc = [
 | |
|                                 "is_in_ord" => Vehicles::IN_ORD_NO,
 | |
|                                 "ord_id" => 0,
 | |
|                                 "ord_code" => 0,
 | |
|                                 "ord_ids" => null,
 | |
|                             ];
 | |
|                         } else {
 | |
|                             $updtVhc["ord_ids"] = $vhc_in_ordis;
 | |
|                             array_splice($updtVhc["ord_ids"], $key, 1);
 | |
|                             $updtVhc["ord_ids"] = json_encode($updtVhc["ord_ids"]);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             if (count($updtVhc) > 0) {
 | |
|                 Vehicles::updateVehicle($order[0]->vhc_id, $updtVhc);
 | |
|             }
 | |
|             $driver = Drivers::getDriverById($order[0]->drv_id);
 | |
|             $updtDrv = [];
 | |
|             if ($driver[0]->ord_ids) {
 | |
|                 $drv_in_ordis = json_decode($driver[0]->ord_ids);
 | |
|                 foreach ($drv_in_ordis as $key => $val) {
 | |
|                     if ($val === $order[0]->ord_id) {
 | |
|                         if (count($drv_in_ordis) <= 1) {
 | |
|                             $updtDrv = [
 | |
|                                 "is_in_ord" => Drivers::IN_ORD_NO,
 | |
|                                 "ord_id" => 0,
 | |
|                                 "ord_code" => 0,
 | |
|                                 "ord_ids" => null,
 | |
|                             ];
 | |
|                         } else {
 | |
|                             $updtDrv["ord_ids"] = $drv_in_ordis;
 | |
|                             array_splice($updtDrv["ord_ids"], $key, 1);
 | |
|                             $updtDrv["ord_ids"] = json_encode($updtDrv["ord_ids"]);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             if (count($updtDrv) > 0) {
 | |
|                 Drivers::updateDriver($order[0]->drv_id, $updtDrv);
 | |
|             }
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success submit laporan pengantaran");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             if ($url_arrived_img) {
 | |
|                 Storage::disk("public")->delete($url_arrived_img);
 | |
|             }
 | |
|             if ($url_handover_img) {
 | |
|                 Storage::disk("public")->delete($url_handover_img);
 | |
|             }
 | |
|             if ($url_do_ttd_img) {
 | |
|                 Storage::disk("public")->delete($url_do_ttd_img);
 | |
|             }
 | |
|             if ($url_spk_img) {
 | |
|                 Storage::disk("public")->delete($url_spk_img);
 | |
|             }
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_checker_submit_accident(Request $req)
 | |
|     {
 | |
|         $now = time();
 | |
|         $url_accidents_img = [];
 | |
|         try {
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "acdnt_loc" => $req->acdnt_loc,
 | |
|                 "acdnt_story" => $req->acdnt_story,
 | |
|                 "accidents_img_base64" => $req->accidents_img_base64,
 | |
|                 "acdnt_vhc_nopol" => $req->acdnt_vhc_nopol,
 | |
|                 "acdnt_vhc_type" => $req->acdnt_vhc_type,
 | |
|                 "acdnt_drv_name" => $req->acdnt_drv_name,
 | |
|                 "acdnt_drv_phone" => $req->acdnt_drv_phone,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "acdnt_loc" => "required|string",
 | |
|                 "acdnt_story" => "required|string",
 | |
|                 "accidents_img_base64" => "nullable|array",
 | |
|                 "acdnt_vhc_nopol" => "required|string",
 | |
|                 "acdnt_vhc_type" => "required|numeric|not_in:0",
 | |
|                 "acdnt_drv_name" => "required|string|max:255",
 | |
|                 "acdnt_drv_phone" => "required|numeric",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             if ($req->accidents_img_base64 && count($req->accidents_img_base64) < 1) {
 | |
|                 $apiResp = Responses::bad_input("silahkan mengunggah foto pendukung");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             $nopol = explode(" ", strtoupper($req->acdnt_vhc_nopol));
 | |
|             if (count($nopol) < 3) {
 | |
|                 $apiResp = Responses::bad_input("Nomor polisi kendaraan tidak valid");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $order = Orders::showOrder([
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_stts_checker" => 1,
 | |
|                 "get_additional_vehicles_info" => 1,
 | |
|                 "get_accidents" => 1,
 | |
|             ]);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             if ($order[0]->is_accident === Orders::IS_ACCIDENT_YES) {
 | |
|                 $imgs = json_decode($order[0]->ord_acdnt_imgs);
 | |
|                 $countImgs = count($imgs);
 | |
| 
 | |
|                 if ($req->accidents_img_base64 && count($req->accidents_img_base64) > 0) {
 | |
|                     $skip = false;
 | |
|                     foreach ($req->accidents_img_base64 as $i => $img) {
 | |
|                         if ($skip) {
 | |
|                             continue;
 | |
|                         }
 | |
|                         $clearBase64 = preg_replace(
 | |
|                             "/^data:(image|application)\/(png|jpg|jpeg|pdf);base64,/",
 | |
|                             "",
 | |
|                             $img
 | |
|                         );
 | |
|                         $type = "jpeg";
 | |
|                         if (strpos($img, "application/pdf") !== false) {
 | |
|                             $type = "pdf";
 | |
|                         }
 | |
|                         $imgs[$i + $countImgs] =
 | |
|                             "orders/" .
 | |
|                             $order[0]->ord_id .
 | |
|                             "/accidents/" .
 | |
|                             $order[0]->ord_acdnt_id .
 | |
|                             "/accidents_img_$now" .
 | |
|                             "_" .
 | |
|                             "" .
 | |
|                             ($i + $countImgs) .
 | |
|                             ".$type";
 | |
|                         if (
 | |
|                             !Storage::disk("public")->put($imgs[$i + $countImgs], base64_decode($clearBase64))
 | |
|                         ) {
 | |
|                             $apiResp = Responses::bad_request("gagal upload mengunggah foto pendukung");
 | |
|                             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 OrdersAccidents::updateAccident($order[0]->ord_acdnt_id, [
 | |
|                     "accident_location" => $req->acdnt_loc,
 | |
|                     "accident_story" => $req->acdnt_story,
 | |
|                     "accident_imgs" => json_encode($imgs),
 | |
|                     "new_nopol1" => $nopol[0],
 | |
|                     "new_nopol2" => $nopol[1],
 | |
|                     "new_nopol3" => $nopol[2],
 | |
|                     "new_vhc_type_id" => $req->acdnt_vhc_type,
 | |
|                     "new_drv_name" => $req->acdnt_drv_name,
 | |
|                     "new_drv_phone_val" => (int) $req->acdnt_drv_phone,
 | |
|                 ]);
 | |
|             } else {
 | |
|                 $input = [
 | |
|                     "accidents_img_base64" => $req->accidents_img_base64,
 | |
|                 ];
 | |
|                 $rulesInput = [
 | |
|                     "accidents_img_base64" => "required|array",
 | |
|                 ];
 | |
| 
 | |
|                 // validasi input
 | |
|                 $isValidInput = Validator::make($input, $rulesInput);
 | |
|                 if (!$isValidInput->passes()) {
 | |
|                     $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
| 
 | |
|                 Orders::updateOrder($order[0]->ord_id, [
 | |
|                     "is_accident" => Orders::IS_ACCIDENT_YES,
 | |
|                 ]);
 | |
| 
 | |
|                 $aid = OrdersAccidents::addAccident([
 | |
|                     "ord_id" => $order[0]->ord_id,
 | |
|                     "ord_code" => $order[0]->ord_code,
 | |
|                     "accident_location" => $req->acdnt_loc,
 | |
|                     "accident_story" => $req->acdnt_story,
 | |
|                     "accident_imgs" => json_encode($url_accidents_img),
 | |
|                     "new_vhc_id" => $order[0]->vhc_id,
 | |
|                     "new_nopol1" => $nopol[0],
 | |
|                     "new_nopol2" => $nopol[1],
 | |
|                     "new_nopol3" => $nopol[2],
 | |
|                     "old_nopol1" => $order[0]->vhc_nopol1,
 | |
|                     "old_nopol2" => $order[0]->vhc_nopol2,
 | |
|                     "old_nopol3" => $order[0]->vhc_nopol3,
 | |
|                     "new_vhc_type_id" => $req->acdnt_vhc_type,
 | |
|                     "old_vhc_type_id" => $order[0]->vhc_type_id,
 | |
|                     "new_drv_name" => $req->acdnt_drv_name,
 | |
|                     "new_drv_phone_val" => (int) $req->acdnt_drv_phone,
 | |
|                     "old_drv_id" => $order[0]->drv_id,
 | |
|                     "old_drv_name" => $order[0]->drv_name,
 | |
|                     "old_drv_phone_code" => $order[0]->drv_phone_code,
 | |
|                     "old_drv_phone_val" => $order[0]->drv_phone_val,
 | |
|                     "crt" => $now,
 | |
|                     "crt_by" => $req->auth->uid,
 | |
|                     "updt" => $now,
 | |
|                     "updt_by" => $req->auth->uid,
 | |
|                 ]);
 | |
| 
 | |
|                 if ($req->accidents_img_base64 && count($req->accidents_img_base64) > 0) {
 | |
|                     $skip = false;
 | |
|                     foreach ($req->accidents_img_base64 as $i => $img) {
 | |
|                         if ($skip) {
 | |
|                             continue;
 | |
|                         }
 | |
|                         $url_accidents_img[$i] =
 | |
|                             "orders/" .
 | |
|                             $order[0]->ord_id .
 | |
|                             "/accidents/" .
 | |
|                             $aid .
 | |
|                             "/accidents_img_$now" .
 | |
|                             "_" .
 | |
|                             "$i.jpeg";
 | |
|                         if (!Storage::disk("public")->put($url_accidents_img[$i], base64_decode($img))) {
 | |
|                             $apiResp = Responses::bad_request("gagal upload mengunggah foto pendukung");
 | |
|                             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 OrdersAccidents::updateAccident($aid, [
 | |
|                     "accident_imgs" => json_encode($url_accidents_img),
 | |
|                 ]);
 | |
|             }
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success submit laporan kecelakaan");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             if (count($url_accidents_img) > 0) {
 | |
|                 foreach ($url_accidents_img as $path) {
 | |
|                     Storage::disk("public")->delete($path);
 | |
|                 }
 | |
|             }
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_checker_aprv_pck(Request $req)
 | |
|     {
 | |
|         $now = time();
 | |
|         try {
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "ord_pck_id" => $req->ord_pck_id,
 | |
|                 "is_aprv_pck" => $req->is_aprv_pck,
 | |
|                 "ord_pck_drop_id" => $req->ord_pck_drop_id,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "ord_pck_drop_id" => "required|integer|not_in:0",
 | |
|                 "ord_pck_id" => "required|integer|not_in:0",
 | |
|                 "is_aprv_pck" => "required|numeric",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $order = Orders::showOrder([
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_drv_bank" => 1,
 | |
|                 "ord_pck_drop_id" => $req->ord_pck_drop_id,
 | |
|                 "couple_pck_drop" => 1,
 | |
|             ]);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $drvPhone = DrvPhoneDevices::get(["drv_id" => $order[0]->drv_id]);
 | |
|             if (count($drvPhone) < 1) {
 | |
|                 $apiResp = Responses::bad_request("Driver belum pernah melakukan login");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $firstCheckpoint = OrdersCheckpoints::listCheckpoints([
 | |
|                 "sort" => 1,
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|             ]);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("checkpoint not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             /**
 | |
|              * approval checker (validasi 4 kondisi)
 | |
|              * 	Lokasi GPS kendaraan harus didalam zona pickup (GPS Tracker GT06, EElink)
 | |
|              * 	Lokasi GPS App tracker harus didalam zona pickup (Smartphone driver apps)
 | |
|              * 	Lokasi GPS kendaraan dan GPS App Tracker harus match
 | |
|              * 	DONE Driver harus mengunggah foto sampai step 4
 | |
|              */
 | |
| 
 | |
|             $lastLocDriverAps = Tracks::gpsLocsAddr([
 | |
|                 "source" => Tracks::SOURCE_SMARTPHONE,
 | |
|                 "drv_id" => $order[0]->drv_id,
 | |
|                 "order_by" => " tr.id DESC",
 | |
|                 "limit" => 1,
 | |
|             ]);
 | |
|             if (count($lastLocDriverAps) < 1) {
 | |
|                 $apiResp = Responses::bad_request("Lokasi GPS App Tracker tidak didalam zona pickup");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             $drvAppInsideCircle = Zone::insideOrdZoneCircle(
 | |
|                 $lastLocDriverAps[0]->latitude,
 | |
|                 $lastLocDriverAps[0]->longitude,
 | |
|                 ["zid" => $order[0]->ord_pck_zone_id]
 | |
|             );
 | |
|             $drvAppInsideShape = Zone::insideOrdZoneShape(
 | |
|                 $lastLocDriverAps[0]->latitude,
 | |
|                 $lastLocDriverAps[0]->longitude,
 | |
|                 ["zid" => $order[0]->ord_pck_zone_id]
 | |
|             );
 | |
|             if (count($drvAppInsideCircle) < 1 && count($drvAppInsideShape) < 1) {
 | |
|                 $apiResp = Responses::bad_request("Lokasi GPS App Tracker tidak didalam zona pickup");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             // $lastLocGpsTracker = Tracks::gpsLocsAddr(['source' => Tracks::SOURCE_GPS_TRACKER, 'vhc_id' => $order[0]->vhc_id, 'order_by' => ' tr.id DESC', 'limit' => 1]);
 | |
|             // if (count($lastLocGpsTracker) < 1) {
 | |
|             // 	$apiResp = Responses::bad_request('Lokasi GPS Kendaraan tidak didalam zona pickup');
 | |
|             // 	return (new Response($apiResp, $apiResp['meta']['code']));
 | |
|             // }
 | |
|             // $gpsTrackerInsideCircle = Zone::insideOrdZoneCircle($lastLocGpsTracker[0]->latitude, $lastLocGpsTracker[0]->longitude, ['zid' => $order[0]->ord_pck_zone_id]);
 | |
|             // $gpsTrackerInsideShape = Zone::insideOrdZoneShape($lastLocGpsTracker[0]->latitude, $lastLocGpsTracker[0]->longitude, ['zid' => $order[0]->ord_pck_zone_id]);
 | |
|             // if (count($gpsTrackerInsideCircle) < 1 && count($gpsTrackerInsideShape) < 1) {
 | |
|             // 	$apiResp = Responses::bad_request('Lokasi GPS Kendaraan tidak didalam zona pickup');
 | |
|             // 	return (new Response($apiResp, $apiResp['meta']['code']));
 | |
|             // }
 | |
| 
 | |
|             // $distance = Helper::haversineGreatCircleDistance($lastLocDriverAps[0]->latitude, $lastLocDriverAps[0]->longitude, $lastLocGpsTracker[0]->latitude, $lastLocGpsTracker[0]->longitude);
 | |
|             // // more than 100 meters
 | |
|             // if ($distance > 100) {
 | |
|             // 	$apiResp = Responses::bad_request('Lokasi GPS kendaraan dan GPS App Tracker harus match');
 | |
|             // 	return (new Response($apiResp, $apiResp['meta']['code']));
 | |
|             // }
 | |
| 
 | |
|             $admins = Users::getUsersActiveByRole(Users::ROLE_FINANCE);
 | |
|             $admins_data = [];
 | |
|             foreach ($admins as $k => $v) {
 | |
|                 array_push($admins_data, [
 | |
|                     "admin_id" => $v->id,
 | |
|                     "admin_name" => $v->first_name,
 | |
|                     "admin_phone" => $v->phone_code . " " . implode(" ", str_split($v->phone, 4)),
 | |
|                     "admin_mail" => $v->email,
 | |
|                     "admin_addr" => "",
 | |
|                 ]);
 | |
|             }
 | |
| 
 | |
|             $dana = Dana::getDanaById(Dana::PK_ID);
 | |
|             if (count($dana) < 1) {
 | |
|                 $apiResp = Responses::bad_request("dana error");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             $dana = $dana[0];
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             $insOrdersAItems = [
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|                 "ord_code" => $order[0]->ord_code,
 | |
|                 "flow_type" => OrdersAItems::FLOW_TYPE_PAYMENT,
 | |
|                 "cash_type" => OrdersAItems::TYPE_CASH_OUT,
 | |
|                 "a_item_type" => OrdersAItems::A_TYPE_SECONDARY,
 | |
|                 "unit_id" => 0,
 | |
|                 "unit_type" => UnitTypes::UNIT_TYPE_UNIT,
 | |
|                 "amt_base_flat" => $firstCheckpoint[0]->pocket_total,
 | |
|                 "unit_qty" => 0,
 | |
|                 "amt_tax_type" => 0,
 | |
|                 "amt_tax_ppn_percent" => 0,
 | |
|                 "amt_tax_ppn_flat" => 0,
 | |
|                 "amt_tax_pph_percent" => 0,
 | |
|                 "amt_tax_pph_flat" => 0,
 | |
|                 "amt_total_tax_flat" => 0,
 | |
|                 "amt_result_flat" => $firstCheckpoint[0]->pocket_total,
 | |
|                 "amt_total_flat" => $firstCheckpoint[0]->pocket_total,
 | |
|                 "only_vdr" => OrdersAItems::ONLY_VDR_YES,
 | |
|                 "bank_id" => $order[0]->drv_bank_id,
 | |
|                 "bank_name" => $order[0]->drv_bank_name,
 | |
|                 "bank_code" => $order[0]->drv_bank_code,
 | |
|                 "bank_short_name" => $order[0]->drv_bank_short_name,
 | |
|                 "bank_branch_name" => $order[0]->drv_bank_branch_name ?? null,
 | |
|                 "bank_acc_name" => $order[0]->drv_bank_acc_name,
 | |
|                 "bank_acc_number" => $order[0]->drv_bank_acc_number,
 | |
|                 "ref_ord_id" => $order[0]->ord_id,
 | |
|                 "ref_ord_code" => $order[0]->ord_code,
 | |
|                 "crt" => $now,
 | |
|                 "crt_by" => $req->auth->uid,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->uid,
 | |
|                 "desc" => "Uang Saku Driver di " . $firstCheckpoint[0]->pck_name,
 | |
|             ];
 | |
| 
 | |
|             $insOrdersAItems["calc_to_vdr"] = OrdersAItems::CALC_TO_VDR_YES;
 | |
|             $termins = OrdersTermins::listWithFilter([
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|                 "termin_for" => OrdersTermins::TERMIN_FOR_VENDOR,
 | |
|                 "termin_is_paid" => OrdersTermins::IS_PAID_NO,
 | |
|                 "in_stts_merge" => [OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT],
 | |
|             ]);
 | |
|             $insOrdersAItems["v_termin_id"] = 0;
 | |
|             $insOrdersAItems["ref_v_termin_id"] = 0;
 | |
|             if (count($termins) > 0) {
 | |
|                 $insOrdersAItems["v_termin_id"] = $termins[0]->id;
 | |
|                 $insOrdersAItems["ref_v_termin_id"] = $termins[0]->id;
 | |
|             }
 | |
|             if ($insOrdersAItems["v_termin_id"] === 0) {
 | |
|                 $termins = OrdersTermins::listWithFilter([
 | |
|                     "ord_id" => $order[0]->ord_id,
 | |
|                     "termin_for" => OrdersTermins::TERMIN_FOR_VENDOR,
 | |
|                     "in_stts_merge" => [OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT],
 | |
|                 ]);
 | |
|                 $insOrdersAItems["v_termin_id"] = $termins[count($termins) - 1]->id;
 | |
|                 $insOrdersAItems["ref_v_termin_id"] = $termins[count($termins) - 1]->id;
 | |
|             }
 | |
|             OrdersAItems::add($insOrdersAItems);
 | |
| 
 | |
|             OrdersPckDrop::updt($req->ord_pck_drop_id, [
 | |
|                 "stts" => OrdersPckDrop::STTS_DELIVERY_OTW_DROP,
 | |
|                 "is_aprv_pck" => OrdersPckDrop::IS_APRV_YES,
 | |
|                 "aprv_pck_by" => $req->auth->id,
 | |
|                 "aprv_pck_at" => $now,
 | |
|             ]);
 | |
| 
 | |
|             $url = env("API_DANA_BINGCORP") . "/order/create";
 | |
|             $guzReq = new GuzzleClient();
 | |
|             $json = [
 | |
|                 "ord_id" => $order[0]->ord_id,
 | |
|                 "ord_code" => $order[0]->ord_code,
 | |
|                 "checkpoint_id" => $firstCheckpoint[0]->ord_checkpoint_id,
 | |
|                 "bank_code" => $order[0]->drv_bank_code,
 | |
|                 "bank_name" => $order[0]->drv_bank_name,
 | |
|                 "bank_branch" => $order[0]->drv_bank_branch_name ?? null,
 | |
|                 "amt" => $firstCheckpoint[0]->pocket_total,
 | |
|                 "acc_name" => $order[0]->drv_bank_acc_name,
 | |
|                 "acc_number" => $order[0]->drv_bank_acc_number,
 | |
|                 "device_id" => $drvPhone[0]->device_id,
 | |
|             ];
 | |
|             if ($dana->amt > $firstCheckpoint[0]->pocket_total && $dana->amt > Dana::MINIMUM_AMT) {
 | |
|                 try {
 | |
|                     $respDana = $guzReq->request("POST", $url, [
 | |
|                         "headers" => [
 | |
|                             // 'Host' => $_SERVER['SERVER_ADDR'] ?? '127.0.0.1',
 | |
|                             "User-Agent" => "curl/7.65.3",
 | |
|                             "Accept" => "*/*",
 | |
|                             "Accept-Encoding" => "gzip, deflate, br",
 | |
|                             // 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
 | |
|                             "Content-Type" => "application/json",
 | |
|                             // 'Connection' => 'keep-alive',
 | |
|                         ],
 | |
|                         "json" => $json,
 | |
|                     ]);
 | |
|                     $isValidDana = 1;
 | |
|                     $bodyDana = json_decode($respDana->getBody()->getContents());
 | |
|                     if ($respDana->getStatusCode() != 200 || $bodyDana->meta->code != 200) {
 | |
|                         $isValidDana = 0;
 | |
|                         // DB::rollBack();
 | |
|                         OrdersLogsTf::addLogsTf([
 | |
|                             "ord_id" => $order[0]->ord_id,
 | |
|                             "ord_code" => $order[0]->ord_code,
 | |
|                             "type" => OrdersLogsTf::TYPE_TF_CHECKPOINT,
 | |
|                             "checkpoint_id" => $firstCheckpoint[0]->id,
 | |
|                             "amount" => $firstCheckpoint[0]->pocket_total,
 | |
|                             "stts" => OrdersLogsTf::STTS_FAIL,
 | |
|                             "fail_at" => time(),
 | |
|                             "note" => $bodyDana->data->note,
 | |
|                             "bank_id" => $order[0]->drv_bank_id,
 | |
|                             "bank_name" => $order[0]->drv_bank_name,
 | |
|                             "bank_code" => $order[0]->drv_bank_code,
 | |
|                             "bank_short_name" => $order[0]->drv_bank_short_name,
 | |
|                             "bank_branch_name" => $order[0]->drv_bank_branch_name ?? null,
 | |
|                             "bank_acc_name" => $order[0]->drv_bank_acc_name,
 | |
|                             "bank_acc_number" => $order[0]->drv_bank_acc_number,
 | |
|                             "method" => OrdersLogsTf::METHOD_DANA,
 | |
|                             "url" => $url,
 | |
|                             "ref_code" => $bodyDana->data->dana_reference_no,
 | |
|                             "req_data" => json_encode($json),
 | |
|                             "resp_data" => json_encode($bodyDana),
 | |
|                             "crt" => time(),
 | |
|                             "updt" => time(),
 | |
|                         ]);
 | |
|                         OrdersCheckpoints::updateCheckpoint($firstCheckpoint[0]->id, [
 | |
|                             "pocket_is_paid" => OrdersCheckpoints::IS_TF_FAIL,
 | |
|                             "pocket_paid_note" => $bodyDana->data->note,
 | |
|                             "bank_id" => $order[0]->drv_bank_id,
 | |
|                             "bank_name" => $order[0]->drv_bank_name,
 | |
|                             "bank_code" => $order[0]->drv_bank_code,
 | |
|                             "bank_short_name" => $order[0]->drv_bank_short_name,
 | |
|                             "bank_branch_name" => $order[0]->drv_bank_branch_name ?? null,
 | |
|                             "bank_acc_name" => $order[0]->drv_bank_acc_name,
 | |
|                             "bank_acc_number" => $order[0]->drv_bank_acc_number,
 | |
|                             "tf_method" => OrdersCheckpoints::TF_METHOD_DANA,
 | |
|                             "tf_at" => $now,
 | |
|                             "tf_url" => $url,
 | |
|                             "tf_ref_code" => $bodyDana->data->dana_reference_no,
 | |
|                             "tf_note" => $bodyDana->data->note,
 | |
|                             "tf_req_data" => json_encode($json),
 | |
|                             "tf_resp_data" => json_encode($bodyDana),
 | |
|                         ]);
 | |
|                         // $apiResp = Responses::bad_request('approval ditolak. gagal transfer ke rekening driver');
 | |
|                         // return (new Response($apiResp, $apiResp['meta']['code']));
 | |
|                     }
 | |
| 
 | |
|                     if ($isValidDana === 1) {
 | |
|                         OrdersLogsTf::addLogsTf([
 | |
|                             "ord_id" => $order[0]->ord_id,
 | |
|                             "ord_code" => $order[0]->ord_code,
 | |
|                             "type" => OrdersLogsTf::TYPE_TF_CHECKPOINT,
 | |
|                             "checkpoint_id" => $firstCheckpoint[0]->id,
 | |
|                             "amount" => $firstCheckpoint[0]->pocket_total,
 | |
|                             "stts" => OrdersLogsTf::STTS_PAID,
 | |
|                             "paid_at" => time(),
 | |
|                             "note" => $bodyDana->data->note,
 | |
|                             "bank_id" => $order[0]->drv_bank_id,
 | |
|                             "bank_name" => $order[0]->drv_bank_name,
 | |
|                             "bank_code" => $order[0]->drv_bank_code,
 | |
|                             "bank_short_name" => $order[0]->drv_bank_short_name,
 | |
|                             "bank_branch_name" => $order[0]->drv_bank_branch_name ?? null,
 | |
|                             "bank_acc_name" => $order[0]->drv_bank_acc_name,
 | |
|                             "bank_acc_number" => $order[0]->drv_bank_acc_number,
 | |
|                             "method" => OrdersLogsTf::METHOD_DANA,
 | |
|                             "url" => $url,
 | |
|                             "ref_code" => $bodyDana->data->dana_reference_no,
 | |
|                             "req_data" => json_encode($json),
 | |
|                             "resp_data" => json_encode($bodyDana),
 | |
|                             "crt" => time(),
 | |
|                             "updt" => time(),
 | |
|                         ]);
 | |
|                         OrdersCheckpoints::updateCheckpoint($firstCheckpoint[0]->id, [
 | |
|                             "pocket_is_paid" => OrdersCheckpoints::IS_PAID,
 | |
|                             "pocket_paid_at" => $now,
 | |
|                             // 'pocket_paid_by' => $req->auth->id,
 | |
|                             "bank_id" => $order[0]->drv_bank_id,
 | |
|                             "bank_name" => $order[0]->drv_bank_name,
 | |
|                             "bank_code" => $order[0]->drv_bank_code,
 | |
|                             "bank_short_name" => $order[0]->drv_bank_short_name,
 | |
|                             "bank_branch_name" => $order[0]->drv_bank_branch_name ?? null,
 | |
|                             "bank_acc_name" => $order[0]->drv_bank_acc_name,
 | |
|                             "bank_acc_number" => $order[0]->drv_bank_acc_number,
 | |
|                             "tf_method" => OrdersCheckpoints::TF_METHOD_DANA,
 | |
|                             "tf_at" => $now,
 | |
|                             "tf_url" => $url,
 | |
|                             "tf_ref_code" => $bodyDana->data->dana_reference_no ?? 0,
 | |
|                             "tf_note" => $bodyDana->data->note ?? 0,
 | |
|                             "tf_req_data" => json_encode($json),
 | |
|                             "tf_resp_data" => json_encode($bodyDana),
 | |
|                         ]);
 | |
|                         Dana::updateDana($dana->id, [
 | |
|                             "amt" => DB::raw("amt-" . $firstCheckpoint[0]->pocket_total),
 | |
|                         ]);
 | |
|                     }
 | |
|                 } catch (\GuzzleHttp\Exception\BadResponseException $e) {
 | |
|                     $respDana = $e->getResponse();
 | |
|                     $bodyDana = json_decode($respDana->getBody()->getContents());
 | |
|                     // DB::rollBack();
 | |
|                     OrdersLogsTf::addLogsTf([
 | |
|                         "ord_id" => $order[0]->ord_id,
 | |
|                         "ord_code" => $order[0]->ord_code,
 | |
|                         "type" => OrdersLogsTf::TYPE_TF_CHECKPOINT,
 | |
|                         "checkpoint_id" => $firstCheckpoint[0]->id,
 | |
|                         "amount" => $firstCheckpoint[0]->pocket_total,
 | |
|                         "stts" => OrdersLogsTf::STTS_FAIL,
 | |
|                         "fail_at" => time(),
 | |
|                         "note" => $bodyDana->data->note,
 | |
|                         "bank_id" => $order[0]->drv_bank_id,
 | |
|                         "bank_name" => $order[0]->drv_bank_name,
 | |
|                         "bank_code" => $order[0]->drv_bank_code,
 | |
|                         "bank_short_name" => $order[0]->drv_bank_short_name,
 | |
|                         "bank_branch_name" => $order[0]->drv_bank_branch_name ?? null,
 | |
|                         "bank_acc_name" => $order[0]->drv_bank_acc_name,
 | |
|                         "bank_acc_number" => $order[0]->drv_bank_acc_number,
 | |
|                         "method" => OrdersLogsTf::METHOD_DANA,
 | |
|                         "url" => $url,
 | |
|                         "ref_code" => $bodyDana->data->dana_reference_no,
 | |
|                         "req_data" => json_encode($json),
 | |
|                         "resp_data" => json_encode($bodyDana),
 | |
|                         "crt" => time(),
 | |
|                         "updt" => time(),
 | |
|                     ]);
 | |
|                     OrdersCheckpoints::updateCheckpoint($firstCheckpoint[0]->id, [
 | |
|                         "pocket_is_paid" => OrdersCheckpoints::IS_TF_FAIL,
 | |
|                         "pocket_paid_note" => $bodyDana->data->note,
 | |
|                         "bank_id" => $order[0]->drv_bank_id,
 | |
|                         "bank_name" => $order[0]->drv_bank_name,
 | |
|                         "bank_code" => $order[0]->drv_bank_code,
 | |
|                         "bank_short_name" => $order[0]->drv_bank_short_name,
 | |
|                         "bank_branch_name" => $order[0]->drv_bank_branch_name ?? null,
 | |
|                         "bank_acc_name" => $order[0]->drv_bank_acc_name,
 | |
|                         "bank_acc_number" => $order[0]->drv_bank_acc_number,
 | |
|                         "tf_method" => OrdersCheckpoints::TF_METHOD_DANA,
 | |
|                         "tf_at" => $now,
 | |
|                         "tf_url" => $url,
 | |
|                         "tf_ref_code" => $bodyDana->data->dana_reference_no,
 | |
|                         "tf_note" => $bodyDana->data->note,
 | |
|                         "tf_req_data" => json_encode($json),
 | |
|                         "tf_resp_data" => json_encode($bodyDana),
 | |
|                     ]);
 | |
|                     // $apiResp = Responses::bad_request('approval ditolak. gagal transfer ke rekening driver');
 | |
|                     // return (new Response($apiResp, $apiResp['meta']['code']));
 | |
|                 }
 | |
|             } else {
 | |
|                 $url = env("API_URL_NODE") . "/order/finance_info_dana_amount";
 | |
|                 $guzReq = new GuzzleClient();
 | |
|                 $respNode = $guzReq->request("POST", $url, [
 | |
|                     "headers" => [
 | |
|                         "Host" => $_SERVER["SERVER_ADDR"] ?? "127.0.0.1",
 | |
|                         "User-Agent" => "curl/7.65.3",
 | |
|                         "Accept" => "*/*",
 | |
|                         "Accept-Encoding" => "gzip, deflate, br",
 | |
|                         // 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
 | |
|                         // 'Connection' => 'keep-alive',
 | |
|                     ],
 | |
|                     "json" => [
 | |
|                         "trx_code" => $order[0]->ord_code,
 | |
|                         "drv_name" => $order[0]->drv_name,
 | |
|                         "pickup_zone_title" => $order[0]->pck_name,
 | |
|                         "pickup_zone_addr" => $order[0]->pck_addr,
 | |
|                         "drop_zone_title" => $order[0]->drop_name,
 | |
|                         "drop_zone_addr" => $order[0]->drop_addr,
 | |
|                         "pocket_total" =>
 | |
|                             "Rp" . number_format($firstCheckpoint[0]->pocket_total, 0, ",", "."),
 | |
|                         "bank_name" => $order[0]->drv_bank_name,
 | |
|                         "bank_code" => $order[0]->drv_bank_code,
 | |
|                         "bank_branch_name" => $order[0]->drv_bank_branch_name ?? "",
 | |
|                         "bank_acc_name" => $order[0]->drv_bank_acc_name,
 | |
|                         "bank_acc_no" => $order[0]->drv_bank_acc_number,
 | |
|                         "admins" => $admins_data,
 | |
|                     ],
 | |
|                 ]);
 | |
|                 if ($respNode->getStatusCode() != 200) {
 | |
|                     DB::rollBack();
 | |
|                     $apiResp = Responses::bad_request("gagal mengirim email ke finance");
 | |
|                     return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|                 }
 | |
|                 $body = json_decode($respNode->getBody()->getContents());
 | |
|             }
 | |
| 
 | |
|             DB::commit();
 | |
| 
 | |
|             $url = env("API_URL_NODE") . "/order/finance_info_tf_pocket";
 | |
|             $guzReq = new GuzzleClient();
 | |
|             $respNode = $guzReq->request("POST", $url, [
 | |
|                 "headers" => [
 | |
|                     "Host" => $_SERVER["SERVER_ADDR"] ?? "127.0.0.1",
 | |
|                     "User-Agent" => "curl/7.65.3",
 | |
|                     "Accept" => "*/*",
 | |
|                     "Accept-Encoding" => "gzip, deflate, br",
 | |
|                     // 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
 | |
|                     // 'Connection' => 'keep-alive',
 | |
|                 ],
 | |
|                 "json" => [
 | |
|                     "trx_code" => $order[0]->ord_code,
 | |
|                     "drv_name" => $order[0]->drv_name,
 | |
|                     "pickup_zone_title" => $order[0]->pck_name,
 | |
|                     "pickup_zone_addr" => $order[0]->pck_addr,
 | |
|                     "drop_zone_title" => $order[0]->drop_name,
 | |
|                     "drop_zone_addr" => $order[0]->drop_addr,
 | |
|                     "pocket_total" => "Rp" . number_format($firstCheckpoint[0]->pocket_total, 0, ",", "."),
 | |
|                     "bank_name" => $order[0]->drv_bank_name,
 | |
|                     "bank_code" => $order[0]->drv_bank_code,
 | |
|                     "bank_branch_name" => $order[0]->drv_bank_branch_name ?? "",
 | |
|                     "bank_acc_name" => $order[0]->drv_bank_acc_name,
 | |
|                     "bank_acc_no" => $order[0]->drv_bank_acc_number,
 | |
|                     "admins" => $admins_data,
 | |
|                 ],
 | |
|             ]);
 | |
|             if ($respNode->getStatusCode() != 200) {
 | |
|                 DB::rollBack();
 | |
|                 $apiResp = Responses::bad_request("gagal mengirim email ke finance");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             $body = json_decode($respNode->getBody()->getContents());
 | |
| 
 | |
|             $apiResp = Responses::success("persetujuan diterima");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // before approval checker
 | |
|     public function api_recreate_pocket(Request $req)
 | |
|     {
 | |
|         $now = time();
 | |
|         try {
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "pocket_id" => $req->pocket_id,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "pocket_id" => "required|integer|not_in:0",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $orders = Orders::showOrder([
 | |
|                 "id" => $req->ord_id,
 | |
|                 // 'get_drv_bank' => 1,
 | |
|                 // 'ord_pck_drop_id' => $req->ord_pck_drop_id,
 | |
|                 "couple_pck_drop" => 1,
 | |
|                 "join_pockets" => 1,
 | |
|                 "group_by" => "ord.id",
 | |
|             ]);
 | |
|             if (count($orders) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             $order = $orders[0];
 | |
| 
 | |
|             $pocket = PocketMoney::showPocketById($req->pocket_id);
 | |
|             if (count($pocket) < 1) {
 | |
|                 $apiResp = Responses::not_found("uang saku belum dipilih");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             $pocket[0]->checkpoints = Checkpoints::listCheckpoints([
 | |
|                 "pocket_id" => $pocket[0]->id,
 | |
|             ]);
 | |
| 
 | |
|             if ($pocket[0]->id === $order->pocket_id) {
 | |
|                 $apiResp = Responses::bad_request("uang saku tidak ada perubahan");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
|             OrdersPockets::updatePocket($order->ord_pocket_id, [
 | |
|                 // 'ord_id' => $order->ord_id,
 | |
|                 // 'ord_code' => $order->ord_code,
 | |
|                 "pocket_id" => $pocket[0]->id,
 | |
|                 "pocket_code" => $pocket[0]->code,
 | |
|                 "pocket_name" => $pocket[0]->name,
 | |
|                 "pck_id" => $pocket[0]->pck_id,
 | |
|                 "drop_id" => $pocket[0]->drop_id,
 | |
|                 "pocket_type" => $pocket[0]->type,
 | |
|                 "pocket_flow" => $pocket[0]->flow,
 | |
|                 "pocket_is_active" => $pocket[0]->is_active,
 | |
|                 "pocket_total" => $pocket[0]->total,
 | |
|                 // 'crt' => $now,
 | |
|                 // 'crt_by' => $req->auth->uid,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->uid,
 | |
|             ]);
 | |
|             OrdersCheckpoints::deleteCheckpointByOrdPocketId($order->ord_pocket_id);
 | |
|             foreach ($pocket[0]->checkpoints as $checkpoint) {
 | |
|                 OrdersCheckpoints::addCheckpoint([
 | |
|                     "ord_id" => $order->ord_id,
 | |
|                     "ord_code" => $order->ord_code,
 | |
|                     "ord_pocket_id" => $order->ord_pocket_id,
 | |
|                     "pocket_id" => $checkpoint->pocket_id,
 | |
|                     "pck_id" => $checkpoint->pck_id,
 | |
|                     "drop_id" => $checkpoint->drop_id,
 | |
|                     "pocket_sort" => $checkpoint->sort,
 | |
|                     "pocket_fee" => $checkpoint->pocket_fee,
 | |
|                     "pocket_tol_fee" => $checkpoint->tol_fee,
 | |
|                     "pocket_fuel_fee" => $checkpoint->fuel_fee,
 | |
|                     "pocket_total" => $checkpoint->total,
 | |
|                     "crt" => $now,
 | |
|                     "crt_by" => $req->auth->uid,
 | |
|                     "updt" => $now,
 | |
|                     "updt_by" => $req->auth->uid,
 | |
|                 ]);
 | |
|             }
 | |
| 
 | |
|             DB::commit();
 | |
| 
 | |
|             $apiResp = Responses::success("berhasil ganti uang saku");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_change_pic_invoice(Request $req)
 | |
|     {
 | |
|         $now = time();
 | |
|         try {
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "ord_client_id" => $req->ord_client_id,
 | |
|                 "c_pt_name" => $req->c_pt_name,
 | |
|                 "c_pt_addr" => $req->c_pt_addr,
 | |
|                 "c_pt_pic_name" => $req->c_pt_pic_name,
 | |
|                 "c_pt_pic_phone_val" => $req->c_pt_pic_phone_val,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "ord_client_id" => "required|integer|not_in:0",
 | |
|                 "c_pt_name" => "required|string",
 | |
|                 "c_pt_addr" => "required|string",
 | |
|                 "c_pt_pic_name" => "required|string",
 | |
|                 "c_pt_pic_phone_val" => "required|integer|not_in:0",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $orders = Orders::showOrder([
 | |
|                 "id" => $req->ord_id,
 | |
|                 // 'get_drv_bank' => 1,
 | |
|                 // 'ord_pck_drop_id' => $req->ord_pck_drop_id,
 | |
|                 "couple_pck_drop" => 1,
 | |
|                 // 'join_pockets' => 1,
 | |
|                 "get_client_pt" => 1,
 | |
|                 "group_by" => "ord.id",
 | |
|             ]);
 | |
|             if (count($orders) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             $order = $orders[0];
 | |
| 
 | |
|             DB::beginTransaction();
 | |
|             OrdersClients::updt($order->ord_client_id, [
 | |
|                 "c_pt_name" => $req->c_pt_name,
 | |
|                 "c_pt_addr" => $req->c_pt_addr,
 | |
|                 "c_pt_pic_name" => $req->c_pt_pic_name,
 | |
|                 "c_pt_pic_phone_val" => $req->c_pt_pic_phone_val,
 | |
|             ]);
 | |
|             DB::commit();
 | |
| 
 | |
|             $apiResp = Responses::success("berhasil ganti pic invoice");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_adm_confirm_price(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_stts_checker" => 1,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $updt_stts_order = $order[0]->status;
 | |
|             if (
 | |
|                 $order[0]->status == Orders::STTS_CLIENT_PAY ||
 | |
|                 $order[0]->status == Orders::STTS_VENDOR_PAYED
 | |
|             ) {
 | |
|             } elseif ($order[0]->status == Orders::STTS_CANCEL) {
 | |
|                 $apiResp = Responses::bad_input('can\'t confirm price, order is cancel');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             } elseif ($order[0]->status == Orders::STTS_CLOSE) {
 | |
|                 $apiResp = Responses::bad_input('can\'t confirm price, transaction is close');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             } elseif ($order[0]->pck_chk_stts != OrdersPickups::CHK_STTS_SUBMIT) {
 | |
|                 $apiResp = Responses::bad_input(
 | |
|                     'can\'t confirm price, checker pickup has not submitted data'
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             // else {
 | |
|             // 	$apiResp = Responses::bad_input('can\'t confirm price, order still on going');
 | |
|             // 	return new Response($apiResp, $apiResp['meta']['code']);
 | |
|             // }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "is_fix_price" => Orders::IS_FIX_PRICE_YES,
 | |
|                 "fix_price_at" => $now,
 | |
|                 "fix_price_by" => $req->auth->id,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->id,
 | |
|             ]);
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success confirm price");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_adm_invc_to_client(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_stts_checker" => 1,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $updt_stts_order = $order[0]->status;
 | |
|             if (
 | |
|                 $order[0]->status == Orders::STTS_CLIENT_PAY ||
 | |
|                 $order[0]->status == Orders::STTS_VENDOR_PAYED
 | |
|             ) {
 | |
|             } elseif ($order[0]->status == Orders::STTS_CANCEL) {
 | |
|                 $apiResp = Responses::bad_input('can\'t generate invoice, order is cancel');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             } elseif ($order[0]->status == Orders::STTS_CLOSE) {
 | |
|                 $apiResp = Responses::bad_input('can\'t generate invoice, transaction is close');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             } elseif ($order[0]->pck_chk_stts != OrdersPickups::CHK_STTS_SUBMIT) {
 | |
|                 $apiResp = Responses::bad_input(
 | |
|                     'can\'t generate invoice, checker pickup has not submitted data'
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             // else {
 | |
|             // 	$apiResp = Responses::bad_input('can\'t generate invoice, order still on going');
 | |
|             // 	return new Response($apiResp, $apiResp['meta']['code']);
 | |
|             // }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "invc_to_client_at" => $now,
 | |
|                 "invc_to_client_by" => $req->auth->id,
 | |
|                 // 'status' => $updt_stts_order,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->id,
 | |
|             ]);
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success generate invoice");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_adm_confirm_client_pay(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "ref_number" => $req->ref_number,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "ref_number" => "required|string|max:45",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_stts_checker" => 1,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $updt_stts_order = $order[0]->status;
 | |
|             if (
 | |
|                 $order[0]->status == Orders::STTS_CLIENT_PAY ||
 | |
|                 $order[0]->status == Orders::STTS_VENDOR_PAYED
 | |
|             ) {
 | |
|                 if ($order[0]->confirm_vdr_pay_at != 0) {
 | |
|                     $updt_stts_order = Orders::STTS_CLOSE;
 | |
|                 } else {
 | |
|                     $updt_stts_order = Orders::STTS_VENDOR_PAYED;
 | |
|                 }
 | |
|             } elseif ($order[0]->status == Orders::STTS_CANCEL) {
 | |
|                 $apiResp = Responses::bad_input('can\'t confirm payment, order is cancel');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             } elseif ($order[0]->status == Orders::STTS_CLOSE) {
 | |
|                 $apiResp = Responses::bad_input('can\'t confirm payment, transaction is close');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             } elseif ($order[0]->pck_chk_stts != OrdersPickups::CHK_STTS_SUBMIT) {
 | |
|                 $apiResp = Responses::bad_input(
 | |
|                     'can\'t confirm payment, checker pickup has not submitted data'
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             // else {
 | |
|             // 	$apiResp = Responses::bad_input('can\'t confirm payment, order still on going');
 | |
|             // 	return new Response($apiResp, $apiResp['meta']['code']);
 | |
|             // }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "confirm_client_pay_at" => $now,
 | |
|                 "confirm_client_pay_by" => $req->auth->id,
 | |
|                 "confirm_client_pay_ref_number" => $req->ref_number,
 | |
|                 "status" => $updt_stts_order,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->id,
 | |
|             ]);
 | |
|             OrdersClients::updt($order[0]->ord_client_id, [
 | |
|                 "pay_at" => $now,
 | |
|                 "is_pay" => OrdersClients::IS_PAYED,
 | |
|             ]);
 | |
|             if ($updt_stts_order === Orders::STTS_CLOSE) {
 | |
|                 Vehicles::updateVehicle($order[0]->vhc_id, [
 | |
|                     "is_in_ord" => Vehicles::IN_ORD_NO,
 | |
|                     "ord_id" => 0,
 | |
|                     "ord_code" => 0,
 | |
|                 ]);
 | |
|             }
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success confirm payment");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_adm_payout_to_vendor(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_stts_checker" => 1,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $updt_stts_order = $order[0]->status;
 | |
|             if (
 | |
|                 $order[0]->status == Orders::STTS_CLIENT_PAY ||
 | |
|                 $order[0]->status == Orders::STTS_VENDOR_PAYED
 | |
|             ) {
 | |
|                 // $updt_stts_order = Orders::STTS_VENDOR_PAYED;
 | |
|             } elseif ($order[0]->status == Orders::STTS_CANCEL) {
 | |
|                 $apiResp = Responses::bad_input('can\'t generate instruction payment, order is cancel');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             } elseif ($order[0]->status == Orders::STTS_CLOSE) {
 | |
|                 $apiResp = Responses::bad_input('can\'t generate instruction payment, transaction is close');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             } elseif ($order[0]->drop_chk_stts != OrdersDrops::CHK_STTS_SUBMIT) {
 | |
|                 $apiResp = Responses::bad_input(
 | |
|                     'can\'t generate instruction payment, checker drop has not submitted data'
 | |
|                 );
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             // else {
 | |
|             // 	$apiResp = Responses::bad_input('can\'t generate instruction payment, order still on going');
 | |
|             // 	return new Response($apiResp, $apiResp['meta']['code']);
 | |
|             // }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "payout_to_vdr_at" => $now,
 | |
|                 "payout_to_vdr_by" => $req->auth->id,
 | |
|                 // 'status' => $updt_stts_order,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->id,
 | |
|             ]);
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success generate instruction payment");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_adm_confirm_vendor_pay(Request $req)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
|             $input = [
 | |
|                 "ord_id" => $req->ord_id,
 | |
|                 "ref_number" => $req->ref_number,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|                 "ref_number" => "required|string|max:45",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "id" => $req->ord_id,
 | |
|                 "get_stts_checker" => 1,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $updt_stts_order = $order[0]->status;
 | |
|             if (
 | |
|                 $order[0]->status == Orders::STTS_CLIENT_PAY ||
 | |
|                 $order[0]->status == Orders::STTS_VENDOR_PAYED
 | |
|             ) {
 | |
|                 if ($order[0]->confirm_client_pay_at != 0) {
 | |
|                     $updt_stts_order = Orders::STTS_CLOSE;
 | |
|                 }
 | |
|             } elseif ($order[0]->status == Orders::STTS_CANCEL) {
 | |
|                 $apiResp = Responses::bad_input('can\'t confirm payout, order is cancel');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             } elseif ($order[0]->status == Orders::STTS_CLOSE) {
 | |
|                 $apiResp = Responses::bad_input('can\'t confirm payout, transaction is close');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             } elseif ($order[0]->drop_chk_stts != OrdersDrops::CHK_STTS_SUBMIT) {
 | |
|                 $apiResp = Responses::bad_input('can\'t confirm payout, checker drop has not submitted data');
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
|             // else {
 | |
|             // 	$apiResp = Responses::bad_input('can\'t confirm payout, order still on going');
 | |
|             // 	return new Response($apiResp, $apiResp['meta']['code']);
 | |
|             // }
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "confirm_vdr_pay_at" => $now,
 | |
|                 "confirm_vdr_pay_by" => $req->auth->id,
 | |
|                 "confirm_vdr_pay_ref_number" => $req->ref_number,
 | |
|                 "status" => $updt_stts_order,
 | |
|                 "updt" => $now,
 | |
|                 "updt_by" => $req->auth->id,
 | |
|             ]);
 | |
|             OrdersVendors::updt($order[0]->ord_vdr_id, [
 | |
|                 "pay_at" => $now,
 | |
|                 "is_pay" => OrdersVendors::IS_PAYED,
 | |
|             ]);
 | |
|             if ($updt_stts_order === Orders::STTS_CLOSE) {
 | |
|                 Vehicles::updateVehicle($order[0]->vhc_id, [
 | |
|                     "is_in_ord" => Vehicles::IN_ORD_NO,
 | |
|                     "ord_id" => 0,
 | |
|                     "ord_code" => 0,
 | |
|                 ]);
 | |
|             }
 | |
| 
 | |
|             DB::commit();
 | |
|             $apiResp = Responses::success("success confirm payout to vendor");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function api_delete_order(Request $req, $ord_id)
 | |
|     {
 | |
|         try {
 | |
|             $now = time();
 | |
| 
 | |
|             $input = [
 | |
|                 "ord_id" => $ord_id,
 | |
|             ];
 | |
|             $rulesInput = [
 | |
|                 "ord_id" => "required|integer|not_in:0",
 | |
|             ];
 | |
| 
 | |
|             // validasi input
 | |
|             $isValidInput = Validator::make($input, $rulesInput);
 | |
|             if (!$isValidInput->passes()) {
 | |
|                 $apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $filter = [
 | |
|                 "id" => $ord_id,
 | |
|             ];
 | |
|             $order = Orders::showOrder($filter);
 | |
|             if (count($order) < 1) {
 | |
|                 $apiResp = Responses::not_found("order not found");
 | |
|                 return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|             }
 | |
| 
 | |
|             $user = Auth::user();
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             // soft delete
 | |
|             Orders::updateOrder($order[0]->ord_id, [
 | |
|                 "dlt" => $now,
 | |
|                 "dlt_by" => $user->id,
 | |
|             ]);
 | |
|             OrdersAccidents::updateAccidentByOrdId($order[0]->ord_id, [
 | |
|                 "dlt" => $now,
 | |
|                 "dlt_by" => $user->id,
 | |
|             ]);
 | |
|             OrdersAItems::updtByOrdId($order[0]->ord_id, [
 | |
|                 "dlt" => $now,
 | |
|                 "dlt_by" => $user->id,
 | |
|             ]);
 | |
|             // OrdersClients::updtByOrdId($order[0]->ord_id, ['dlt'=>$now,'dlt_by'=>$user->id]);
 | |
|             // OrdersDrivers::updtByOrdId($order[0]->ord_id, ['dlt'=>$now,'dlt_by'=>$user->id]);
 | |
|             // OrdersDrops::updtByOrdId($order[0]->ord_id, ['dlt'=>$now,'dlt_by'=>$user->id]);
 | |
|             // OrdersInsurances::updtByOrdId($order[0]->ord_id, ['dlt'=>$now,'dlt_by'=>$user->id]);
 | |
|             OrdersInvoices::updtByOrdId($order[0]->ord_id, [
 | |
|                 "dlt" => $now,
 | |
|                 "dlt_by" => $user->id,
 | |
|             ]);
 | |
|             // OrdersItems::updtByOrdId($order[0]->ord_id, ['dlt'=>$now,'dlt_by'=>$user->id]);
 | |
|             // OrdersPickups::updtByOrdId($order[0]->ord_id, ['dlt'=>$now,'dlt_by'=>$user->id]);
 | |
|             // OrdersRates::updtByOrdId($order[0]->ord_id, ['dlt'=>$now,'dlt_by'=>$user->id]);
 | |
|             OrdersTermins::updtByOrdId($order[0]->ord_id, [
 | |
|                 "dlt" => $now,
 | |
|                 "dlt_by" => $user->id,
 | |
|             ]);
 | |
|             // OrdersVehicles::updtByOrdId($order[0]->ord_id, ['dlt'=>$now,'dlt_by'=>$user->id]);
 | |
|             // OrdersVendors::updtByOrdId($order[0]->ord_id, ['dlt'=>$now,'dlt_by'=>$user->id]);
 | |
|             OrdersPckDrop::updtByOrdId($order[0]->ord_id, [
 | |
|                 "dlt" => $now,
 | |
|                 "dlt_by" => $user->id,
 | |
|             ]);
 | |
|             OrdersPockets::updtByOrdId($order[0]->ord_id, [
 | |
|                 "dlt" => $now,
 | |
|                 "dlt_by" => $user->id,
 | |
|             ]);
 | |
|             OrdersCheckpoints::updtByOrdId($order[0]->ord_id, [
 | |
|                 "dlt" => $now,
 | |
|                 "dlt_by" => $user->id,
 | |
|             ]);
 | |
| 
 | |
|             DB::commit();
 | |
| 
 | |
|             $apiResp = Responses::success("success delete order");
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         } catch (\Exception $e) {
 | |
|             $apiResp = Responses::error($e->getMessage());
 | |
|             return new Response($apiResp, $apiResp["meta"]["code"]);
 | |
|         }
 | |
|     }
 | |
| }
 | 
