From 19c8f1e658f543305d7dd64188ef0e709f548b3d Mon Sep 17 00:00:00 2001 From: glovetleong Date: Fri, 18 Mar 2022 20:46:40 +0800 Subject: [PATCH] transaction detail over weight --- .../CreateShippingInvoiceTransactionLogic.php | 32 +++++++++++++------ .../TransactionDetailObject.php | 10 +++--- .../Constants/TransactionDetailType.php | 10 ++++++ ...23129_create_transaction_details_table.php | 2 +- 4 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 app/Classes/ValueObjects/Constants/TransactionDetailType.php diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php index f988d73c..7528b423 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php @@ -20,6 +20,8 @@ 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\TransactionDetailType; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -86,7 +88,11 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic { $packing_list = $this->fetchesPackingList->execute(['id' => $request->input('packing_list_id')]); - $cbm = $packing_list->packages->sum(function($package) { + $cbm = $packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum(function($package) { + return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); + }); + + $over_weight_cbm = $packing_list->packages->where('type', PackageType::OVER_WEIGHT)->sum(function($package) { return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); }); @@ -143,7 +149,7 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic } $price_cbm = $base_price + $warehouse_rate + $state_rate; - $total_cbm = $price_cbm * $cbm; + $total_cbm = $price_cbm * ($cbm + $over_weight_cbm); $billNumber = $this->generatesTransactionBillNumber->execute('SHIP-'); @@ -168,13 +174,22 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic $invoice_transaction = $this->createsTransaction->execute($packing_list, $object); $object_detail = new TransactionDetailObject( - $invoice_transaction->bill_no, - $invoice_transaction->bill_no, - 1, - $invoice_transaction->amount, - $invoice_transaction->amount + TransactionDetailType::SHIPPING_FEE, + TransactionDetailType::SHIPPING_FEE, + $cbm, + $price_cbm ); $transaction_detail = $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); + + if ($over_weight_cbm > 0) { + $object_detail = new TransactionDetailObject( + TransactionDetailType::OVERWIEGHT_CHARGES, + TransactionDetailType::OVERWIEGHT_CHARGES, + $over_weight_cbm, + $price_cbm + ); + $transaction_detail = $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); + } $transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice_transaction]); @@ -185,11 +200,10 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic ApprovalStatus::COMPLETED, 'shipping_invoice' ); - /** @var Document $document */ + $document = $this->createsDocument->execute($invoice_transaction, $document_object); $this->createsFile->execute($document, $document_object); - // dd('yess'); return $this->response([]); } } diff --git a/app/Classes/Modules/Transactions/DataTransferObjects/TransactionDetailObject.php b/app/Classes/Modules/Transactions/DataTransferObjects/TransactionDetailObject.php index ab024596..beb4b4dc 100644 --- a/app/Classes/Modules/Transactions/DataTransferObjects/TransactionDetailObject.php +++ b/app/Classes/Modules/Transactions/DataTransferObjects/TransactionDetailObject.php @@ -12,7 +12,7 @@ class TransactionDetailObject implements DataTransferObject /** @var string|null */ private $name; - /** @var int|null */ + /** @var float|null */ private $quantity; /** @var float|null */ @@ -22,10 +22,10 @@ class TransactionDetailObject implements DataTransferObject * TransactionDetailObject constructor. * @param string $reference * @param string $name - * @param int $quantity + * @param float $quantity * @param float $price */ - public function __construct(?string $reference, ?string $name , ?int $quantity, ?float $price) + public function __construct(?string $reference, ?string $name , ?float $quantity, ?float $price) { $this->reference = $reference; $this->name = $name; @@ -50,9 +50,9 @@ class TransactionDetailObject implements DataTransferObject } /** - * @return int + * @return float */ - public function getQuantity(): ?int + public function getQuantity(): ?float { return $this->quantity; } diff --git a/app/Classes/ValueObjects/Constants/TransactionDetailType.php b/app/Classes/ValueObjects/Constants/TransactionDetailType.php new file mode 100644 index 00000000..fd03c863 --- /dev/null +++ b/app/Classes/ValueObjects/Constants/TransactionDetailType.php @@ -0,0 +1,10 @@ +foreignId('transaction_id')->unsigned(); $table->string('reference'); $table->string('name'); - $table->integer('quantity')->default(0); + $table->decimal('quantity', 25, 5)->default(0.00); $table->decimal('price', 25, 5)->default(0.00); $table->decimal('amount', 25, 5)->default(0.00); $table->softDeletes();