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"]);
|
|
}
|
|
}
|
|
}
|