From 7cb27a6114eb3c412b06edb66c7dcc68f9cf12cc Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Fri, 17 Feb 2023 13:02:18 +0800 Subject: [PATCH] auto generate invoices --- .../CreateShippingInvoiceTransactionLogic.php | 238 +----------- .../CreateInvoiceTransactionProcessor.php | 364 +++++++++--------- routes/web.php | 4 +- 3 files changed, 201 insertions(+), 405 deletions(-) diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php index fb0b6404..1997eac4 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php @@ -5,41 +5,15 @@ namespace App\Classes\Modules\Transactions\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\PackingLists\Services\FetchesPackingList; -use App\Classes\Modules\SegmentConstants\Services\FetchesSegmentConstant; -use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber; -use App\Classes\Modules\Transactions\Services\CreatesTransaction; -use App\Classes\Modules\Transactions\Services\CreatesTransactionDetail; -use App\Classes\Modules\Documents\Services\CreatesDocument; -use App\Classes\Modules\Documents\Services\CreatesFiles; -use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; -use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject; -use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; - -use App\Classes\ValueObjects\Constants\OrderRoleTypes; -use App\Classes\ValueObjects\Constants\PackingListType; -use App\Classes\ValueObjects\Constants\TransactionType; -use App\Classes\ValueObjects\Constants\PaymentMethodType; -use App\Classes\ValueObjects\Constants\ApprovalStatus; -use App\Classes\ValueObjects\Constants\DocumentType; -use App\Classes\ValueObjects\Constants\PackageType; -use App\Classes\ValueObjects\Constants\SegmentConstants; -use App\Classes\ValueObjects\Constants\TransactionDetailType; - -use App\Models\CompanyModule; -use App\Models\Document; -use App\Models\PackingList; -use App\Models\Transaction; -use Carbon\Carbon; +use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Storage; -use Illuminate\Support\Str; -use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic { + /** * @return array */ @@ -53,214 +27,26 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic /** @var FetchesPackingList */ private $fetchesPackingList; - /** @var FetchesSegmentConstant */ - private $fetchesSegmentConstant; + /** @var CreateInvoiceTransactionProcessor */ + private $createInvoiceTransactionProcessor; - /** @var GeneratesTransactionBillNumber */ - private $generatesTransactionBillNumber; - - /** @var CreatesTransaction */ - private $createsTransaction; - - /** @var CreatesTransactionDetail */ - private $createsTransactionDetail; - - /** @var CreatesDocument */ - private $createsDocument; - - /** @var CreatesFiles */ - private $createsFile; - - public function __construct( - FetchesPackingList $fetchesPackingList, - FetchesSegmentConstant $fetchesSegmentConstant, - GeneratesTransactionBillNumber $generatesTransactionBillNumber, - CreatesTransaction $createsTransaction, - CreatesTransactionDetail $createsTransactionDetail, - CreatesDocument $createsDocument, - CreatesFiles $createsFile - ) + /** + * @param FetchesPackingList $fetchesPackingList + * @param CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor + */ + public function __construct(FetchesPackingList $fetchesPackingList, CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor) { - $this->fetchesPackingList = $fetchesPackingList; - $this->fetchesSegmentConstant = $fetchesSegmentConstant; - $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; - $this->createsTransaction = $createsTransaction; - $this->createsTransactionDetail = $createsTransactionDetail; - $this->createsDocument = $createsDocument; - $this->createsFile = $createsFile; + $this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor; } public function logic(Request $request) : JsonResponse { + $packing_list = $this->fetchesPackingList->execute(['id' => $request->input('packing_list_id')]); - $packing_list = PackingList::where('reference', $packing_list->reference)->where('type', PackingListType::SHIPPING_PACKING_LIST)->first(); - - $billable_packing_list = $packing_list->packingLists()->first(); - - $billable_packing_list = $billable_packing_list ? $billable_packing_list : $packing_list; - - $cbm = round($billable_packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum(function($package) { - return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); - }), 3); - - $over_weight_cbm = round($billable_packing_list->packages->where('type', PackageType::OVER_WEIGHT)->sum(function($package) { - return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); - }), 3); - - $order = $packing_list->owner; - $companyModule = $order->companyModule; - $connection = $companyModule->connections()->first(); - $address = $order->addresses()->first(); - - $base_price_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::BASE_PRICE]); - $warehouse_rate_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::WAREHOUSE_RATE]); - $state_rate_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::STATE_RATE]); - $center_postcode_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::CENTER_POSTCODE]); - $outstation_postcode_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::OUTSTATION_POSTCODE]); - - $noMinimumCharge = $connection->segments()->where('segments.id', 2)->first(); - - $minimum_cbm = 0.3; - $state_select = ''; - - $segment_price = $connection->segments()->whereHas('constants', function($query){ - return $query->where('reference', SegmentConstants::CUSTOM_PRICE); - })->get()->map(function($segment){ - return (float) $segment->constants()->first()->value[0]; - })->sort()->first(); - $segment_price = $segment_price ? $segment_price : 0; - - $packing_list_drop_date = PackingList::where('reference', $packing_list->reference)->where('type', 1)->first()->transports->first()->drop_date->format('Y-m-d'); - $base_price = $this->getConstantByKey($base_price_constant, $packing_list_drop_date); - - $warehouseId = $order->orderRoles()->where('role_id', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->company_module_id; - $selected_warehouse_rate = $this->getConstantByKey($warehouse_rate_constant, $warehouseId); - $warehouse_rate = is_object($selected_warehouse_rate) ? $selected_warehouse_rate->amount : 0; - - $stateId = $address->state_id; - $state_rate_constant = $this->getConstantByKey($state_rate_constant, $stateId); - - // get $state_rate - $postcode = $address->postcode; - $this->checkPostcodeExistInConstant($center_postcode_constant, $postcode) === true ? $state_select = 'center' : '' ; - $this->checkPostcodeExistInConstant($outstation_postcode_constant, $postcode) === true ? $state_select = 'outstation' : '' ; - $state_rate_constant = (array)$state_rate_constant; - $state_rate = $state_select == '' ? 0 : $state_rate_constant[$state_select]; - - $container = $packing_list->containers()->first(); - $containerPackingLists = collect(); - $hasMinimumCharge = null; - - foreach ($container->packingLists as $packingList){ - if($packingList->owner instanceof CompanyModule) continue; - if($packingList->owner->companyModule->id !== $companyModule->id) continue; - $containerPackingLists->push($packingList); - - if(!$hasMinimumCharge) { - $hasMinimumCharge = $packingList->transactions()->whereHas('transactionDetails', function ($query){ - $query->where('reference', 'MIN_CBM_CHARGES'); - })->first(); - } - - } - - $totalContainerCbm = $containerPackingLists->sum(function($packingList){ - $billable_packing_list = $packingList->packingLists()->first(); - $billable_packing_list = $billable_packing_list ? $billable_packing_list : $packingList; - return $billable_packing_list->packages->sum(function($package) { - return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); - }); - }); - - $minimum_charge = $minimum_cbm - $totalContainerCbm; - $minimum_charge = ($minimum_charge < 0) ? 0 : $minimum_charge; - $minimum_charge = $noMinimumCharge ? 0 : $minimum_charge; - - $minimum_charge = $noMinimumCharge ? 0 : round($minimum_charge, 3); - - - if($hasMinimumCharge) { - $minimum_charge = 0; - } - - $price_cbm = $base_price + $segment_price + $warehouse_rate + $state_rate; - - $total_cbm = $price_cbm * ($cbm + $minimum_charge + $over_weight_cbm); - - $billNumber = $this->generatesTransactionBillNumber->execute('SHIP-'); - - $object = new TransactionObject( - $billNumber, - TransactionType::SHIPPING_INVOICE, - 1, - $order->company_module_id, - 1, - PaymentMethodType::CASH, - $total_cbm, - $total_cbm, - 1, - 1, - 0, - 0, - 0, - null, - ApprovalStatus::PENDING_SUBMISSION - ); - - /** @var Transaction $invoice_transaction */ - $invoice_transaction = $this->createsTransaction->execute($packing_list, $object); - - $object_detail = new TransactionDetailObject( - 'SHIPPING_FEE', - TransactionDetailType::SHIPPING_FEE.'
'.round($packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum('quantity'), 3).' CTNS - '.round($cbm, 3).' CBM', - $cbm, - $price_cbm - ); - - $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); - - if ($over_weight_cbm > 0) { - $object_detail = new TransactionDetailObject( - 'OVER_WEIGHT_CHARGES', - TransactionDetailType::OVER_WEIGHT_CHARGES, - $over_weight_cbm, - $price_cbm - ); - - $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); - } - - if ($minimum_charge > 0) { - $object_detail = new TransactionDetailObject( - 'MIN_CBM_CHARGES', - TransactionDetailType::MIN_CBM_CHARGES, - $minimum_charge, - $price_cbm - ); - - $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); - } + $this->createInvoiceTransactionProcessor->execute($packing_list); return $this->response([]); } - function getConstantByKey($segmentConstantObject, $key) { - if ($segmentConstantObject) { - $base_rate = (array) $segmentConstantObject->value; - $base_rate = array_key_exists($key, $base_rate) === true ? $base_rate[$key] : 0; - - return $base_rate; - } - } - - function checkPostcodeExistInConstant($segmentConstantObject, $postcode) { - $segmentConstantObject = $segmentConstantObject->value; - if (!empty($segmentConstantObject)) { - return in_array($postcode, $segmentConstantObject); - } else { - return false; - } - } - } diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php index d0a70946..5ffa1390 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php @@ -1,229 +1,239 @@ listsTransactions = $listsTransactions; - $this->createsTransaction = $createsTransaction; + $this->fetchesPackingList = $fetchesPackingList; + $this->fetchesSegmentConstant = $fetchesSegmentConstant; $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; - $this->calculatesBookingPaidAmount = $calculatesBookingPaidAmount; - $this->calculatesBookingTransferredAmount = $calculatesBookingTransferredAmount; - $this->fetchesServiceConfigurations = $fetchesServiceConfigurations; - $this->calculatesBookingCurrencyAverageRate = $calculatesBookingCurrencyAverageRate; - $this->fetchesCompany = $fetchesCompany; - $this->createsDocument = $createsDocument; - $this->createsFile = $createsFile; - $this->updatesBookingStatus = $updatesBookingStatus; + $this->createsTransaction = $createsTransaction; + $this->createsTransactionDetail = $createsTransactionDetail; } - - /** - * @param Booking $booking - * @return void - * @throws \App\Classes\Exceptions\MalformedRequestException - */ - public function execute(Booking $booking) + public function execute(PackingList $packingList) : JsonResponse { - $payment_amount = $this->calculatesBookingTransferredAmount->execute($booking, $booking->fix_currency_id); - $booking_amount = $booking->fix_amount; + $packing_list = PackingList::where('reference', $packingList->reference)->where('type', PackingListType::SHIPPING_PACKING_LIST)->first(); + + $billable_packing_list = $packing_list->packingLists()->first(); + + $billable_packing_list = $billable_packing_list ? $billable_packing_list : $packing_list; + + $cbm = round($billable_packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum(function($package) { + return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); + }), 3); + + $over_weight_cbm = round($billable_packing_list->packages->where('type', PackageType::OVER_WEIGHT)->sum(function($package) { + return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); + }), 3); + + $order = $packing_list->owner; + $companyModule = $order->companyModule; + $connection = $companyModule->connections()->first(); + $address = $order->addresses()->first(); + + $base_price_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::BASE_PRICE]); + $warehouse_rate_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::WAREHOUSE_RATE]); + $state_rate_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::STATE_RATE]); + $center_postcode_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::CENTER_POSTCODE]); + $outstation_postcode_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::OUTSTATION_POSTCODE]); + + $noMinimumCharge = $connection->segments()->where('segments.id', 2)->first(); + + $minimum_cbm = 0.3; + $state_select = ''; + + $segment_price = $connection->segments()->whereHas('constants', function($query){ + return $query->where('reference', SegmentConstants::CUSTOM_PRICE); + })->get()->map(function($segment){ + return (float) $segment->constants()->first()->value[0]; + })->sort()->first(); + $segment_price = $segment_price ? $segment_price : 0; + + $packing_list_drop_date = PackingList::where('reference', $packing_list->reference)->where('type', 1)->first()->transports->first()->drop_date->format('Y-m-d'); + $base_price = $this->getConstantByKey($base_price_constant, $packing_list_drop_date); + + $warehouseId = $order->orderRoles()->where('role_id', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->company_module_id; + $selected_warehouse_rate = $this->getConstantByKey($warehouse_rate_constant, $warehouseId); + $warehouse_rate = is_object($selected_warehouse_rate) ? $selected_warehouse_rate->amount : 0; + + $stateId = $address->state_id; + $state_rate_constant = $this->getConstantByKey($state_rate_constant, $stateId); + + // get $state_rate + $postcode = $address->postcode; + $this->checkPostcodeExistInConstant($center_postcode_constant, $postcode) === true ? $state_select = 'center' : '' ; + $this->checkPostcodeExistInConstant($outstation_postcode_constant, $postcode) === true ? $state_select = 'outstation' : '' ; + $state_rate_constant = (array)$state_rate_constant; + $state_rate = $state_select == '' ? 0 : $state_rate_constant[$state_select]; + + $container = $packing_list->containers()->first(); + $containerPackingLists = collect(); + $hasMinimumCharge = null; + + foreach ($container->packingLists as $packingList){ + if($packingList->owner instanceof CompanyModule) continue; + if($packingList->owner->companyModule->id !== $companyModule->id) continue; + $containerPackingLists->push($packingList); + + if(!$hasMinimumCharge) { + $hasMinimumCharge = $packingList->transactions()->whereHas('transactionDetails', function ($query){ + $query->where('reference', 'MIN_CBM_CHARGES'); + })->first(); + } - if ((float) $booking_amount !== (float) $payment_amount) { - return; } - $po_order_transaction = $booking->transactions() - ->where('type', TransactionType::PURCHASE_ORDER) - ->complete() - ->first(); + $totalContainerCbm = $containerPackingLists->sum(function($packingList){ + $billable_packing_list = $packingList->packingLists()->first(); + $billable_packing_list = $billable_packing_list ? $billable_packing_list : $packingList; + return $billable_packing_list->packages->sum(function($package) { + return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); + }); + }); - $constants = SegmentConstant::where('reference', SegmentConstants::SERVICE_TYPE)->where('detail->id', $booking->service->id)->first(); + $minimum_charge = $minimum_cbm - $totalContainerCbm; + $minimum_charge = ($minimum_charge < 0) ? 0 : $minimum_charge; + $minimum_charge = $noMinimumCharge ? 0 : $minimum_charge; - if($constants->detail->is_billable && !$po_order_transaction) { - return; + $minimum_charge = $noMinimumCharge ? 0 : round($minimum_charge, 3); + + + if($hasMinimumCharge) { + $minimum_charge = 0; } - $transaction = $booking->transactions() - ->where('type', TransactionType::PAYMENT) - ->first(); + $price_cbm = $base_price + $segment_price + $warehouse_rate + $state_rate; - $billNumber = $this->generatesTransactionBillNumber->execute('INV-'); + $total_cbm = $price_cbm * ($cbm + $minimum_charge + $over_weight_cbm); - $booking_currency_average_rate = $this->calculatesBookingCurrencyAverageRate->execute($booking, TransactionType::PAYMENT); + $billNumber = $this->generatesTransactionBillNumber->execute('SHIP-'); - $total_service_charge = $booking->transactions() - ->where('type', TransactionType::PAYMENT) - ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) - ->sum('service_charge'); - - $total_tax = $booking->transactions() - ->where('type', TransactionType::PAYMENT) - ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) - ->sum('tax'); - - $transaction_object = new TransactionObject( + $object = new TransactionObject( $billNumber, - TransactionType::INVOICE, - $transaction->issuer, - $transaction->receiver, - $transaction->recipient_bank_account_id, - $transaction->payment_method, - $payment_amount, - $booking_amount, - $transaction->currency_id, - $transaction->original_currency_id, - $booking_currency_average_rate, - $total_tax, - $total_service_charge, + TransactionType::SHIPPING_INVOICE, + 1, + $order->company_module_id, + 1, + PaymentMethodType::CASH, + $total_cbm, + $total_cbm, + 1, + 1, + 0, + 0, + 0, null, - ApprovalStatus::APPROVED - ); - $invoice_transaction = $this->createsTransaction->execute($po_order_transaction->booking, $transaction_object); - - $supplier = $this->fetchesCompany->execute(['id' => $transaction->receiver]); - - $purchase_order_pdf = LaravelMpdf::loadView('pages.pdfs.purchase_order', ['invoice_transaction' => $invoice_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]); - $document_object = new DocumentObject( - DocumentType::PURCHASE_ORDER, - [chunk_split('data:application/pdf;base64,'.base64_encode($purchase_order_pdf->output()))], - '', - ApprovalStatus::COMPLETED, - 'purchase_orders' - ); - $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); - $this->createsFile->execute($document, $document_object); - - $deliver_order_pdf = LaravelMpdf::loadView('pages.pdfs.deliver_order', ['invoice_transaction' => $invoice_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]); - $document_object = new DocumentObject( - DocumentType::DELIVER_ORDER, - [chunk_split('data:application/pdf;base64,'.base64_encode($deliver_order_pdf->output()))], - '', - ApprovalStatus::COMPLETED, - 'delivery_orders' + ApprovalStatus::PENDING_SUBMISSION ); - /** @var Document $document */ - $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); - $this->createsFile->execute($document, $document_object); + /** @var Transaction $invoice_transaction */ + $invoice_transaction = $this->createsTransaction->execute($packing_list, $object); - - $invoice_pdf = LaravelMpdf::loadView('pages.pdfs.invoice', ['invoice_transaction' => $invoice_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]); - $document_object = new DocumentObject( - DocumentType::INVOICE, - [chunk_split('data:application/pdf;base64,'.base64_encode($invoice_pdf->output()))], - '', - ApprovalStatus::COMPLETED, - 'invoices' + $object_detail = new TransactionDetailObject( + 'SHIPPING_FEE', + TransactionDetailType::SHIPPING_FEE.'
'.round($packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum('quantity'), 3).' CTNS - '.round($cbm, 3).' CBM', + $cbm, + $price_cbm ); - $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); - $this->createsFile->execute($document, $document_object); - $billNumber = $this->generatesTransactionBillNumber->execute('SPDO-'); + $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); - $booking_currency_average_rate = $this->calculatesBookingCurrencyAverageRate->execute($booking, TransactionType::BILL); + if ($over_weight_cbm > 0) { + $object_detail = new TransactionDetailObject( + 'OVER_WEIGHT_CHARGES', + TransactionDetailType::OVER_WEIGHT_CHARGES, + $over_weight_cbm, + $price_cbm + ); - $transaction_object = new TransactionObject( - $billNumber, - TransactionType::SUPPLIER_DELIVER, - $transaction->issuer, - $transaction->receiver, - $transaction->recipient_bank_account_id, - $transaction->payment_method, - $payment_amount, - $booking_amount, - $transaction->currency_id, - $transaction->original_currency_id, - $booking_currency_average_rate, - $total_tax, - $total_service_charge, - null, - ApprovalStatus::APPROVED - ); - $supplier_deliver_order_transaction = $this->createsTransaction->execute($po_order_transaction->booking, $transaction_object); + $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); + } - $supplier_order_pdf = LaravelMpdf::loadView('pages.pdfs.supplier_deliver_order', ['supplier_deliver_order_transaction' => $supplier_deliver_order_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]); - $document_object = new DocumentObject( - DocumentType::SUPPLIER_DELIVER_ORDER, - [chunk_split('data:application/pdf;base64,'.base64_encode($supplier_order_pdf->output()))], - '', - ApprovalStatus::COMPLETED, - 'supplier_delivery_orders' - ); - $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); - $this->createsFile->execute($document, $document_object); + if ($minimum_charge > 0) { + $object_detail = new TransactionDetailObject( + 'MIN_CBM_CHARGES', + TransactionDetailType::MIN_CBM_CHARGES, + $minimum_charge, + $price_cbm + ); - $this->updatesBookingStatus->execute($booking, ApprovalStatus::COMPLETED); + $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); + } + + return; } + + function getConstantByKey($segmentConstantObject, $key) { + if ($segmentConstantObject) { + $base_rate = (array) $segmentConstantObject->value; + $base_rate = array_key_exists($key, $base_rate) === true ? $base_rate[$key] : 0; + + return $base_rate; + } + } + + function checkPostcodeExistInConstant($segmentConstantObject, $postcode) { + $segmentConstantObject = $segmentConstantObject->value; + if (!empty($segmentConstantObject)) { + return in_array($postcode, $segmentConstantObject); + } else { + return false; + } + } + } diff --git a/routes/web.php b/routes/web.php index dd378f27..842ec306 100644 --- a/routes/web.php +++ b/routes/web.php @@ -20,6 +20,7 @@ use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProce use App\Classes\Modules\PackingLists\Processors\FetchPackingListFromVTPortalProcessor; use App\Classes\Modules\PackingLists\Processors\FetchPackingListsFromYdPortalProcessor; use App\Classes\Modules\PackingLists\Services\ListsPackingLists; +use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\BusinessType; use App\Classes\ValueObjects\Constants\DocumentType; @@ -751,8 +752,7 @@ Route::get('/generate/invoices', function(){ $postCodes = \App\Models\SegmentConstant::whereIn('reference', ['CENTER_POSTCODE', 'OUTSTATION_POSTCODE'])->get()->pluck('value')->flatten(); if(!!$billingAddress && in_array($deliveryAddress->postcode, $postCodes->toArray())){ - echo 'generating...'; - continue; + (App()->make(CreateInvoiceTransactionProcessor::class))->execute($packingList); } echo 'failed to generate...'; }