From 68ce8373e9303c508a1a05f87329a78021e8f85a Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sun, 7 Apr 2024 09:27:09 +0800 Subject: [PATCH 1/4] SST Impelemtation --- .env.example | 4 + ...enerateShippingInvoiceTransactionLogic.php | 22 +- ...eSingleShippingInvoiceTransactionLogic.php | 10 +- .../UpdateShippingInvoiceTransactionLogic.php | 40 ++- .../TransactionDetailObject.php | 29 +- .../DataTransferObjects/TransactionObject.php | 32 +- ...oveShippingInvoiceTransactionProcessor.php | 10 +- ...heckStorageInvoiceTransactionProcessor.php | 35 +- .../CreateInvoiceTransactionProcessor.php | 22 +- ...CreateShippingCostTransactionProcessor.php | 4 +- ...orageInvoiceDocTransactionFixProcessor.php | 14 +- ...eStorageInvoiceDocTransactionProcessor.php | 13 +- .../CreatesShippingCostTransaction.php | 2 + .../Services/CreatesTransactionDetail.php | 4 +- .../Services/UpdatesTransactionDetail.php | 4 +- .../ValueObjects/Constants/TaxPercentage.php | 10 + .../Constants/TransactionDetailType.php | 2 + app/Console/Commands/FixInvoice.php | 21 +- .../Resources/GroupForOrderV2Resource.php | 2 +- app/Http/Resources/TransactionResource.php | 2 +- .../TransactionWithStorageResource.php | 6 +- ...d_columns_to_transaction_details_table.php | 36 ++ .../AdminPaymentsBillingComponent.vue | 322 ------------------ ...dminPaymentsBillingWithSearchComponent.vue | 1 + .../forms/InvoiceItemFormComponent.vue | 19 +- .../forms/InvoiceItemsFormComponent.vue | 6 +- .../pages/pdfs/shipping_invoice_sst.blade.php | 21 ++ .../pdfs/shipping_invoice_sst_inner.blade.php | 149 ++++++++ .../shipping_invoices_sst_combined.blade.php | 169 +++++++++ routes/web.php | 21 +- 30 files changed, 634 insertions(+), 398 deletions(-) create mode 100644 app/Classes/ValueObjects/Constants/TaxPercentage.php create mode 100644 database/migrations/2024_04_06_004026_add_columns_to_transaction_details_table.php delete mode 100644 resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingComponent.vue create mode 100644 resources/views/pages/pdfs/shipping_invoice_sst.blade.php create mode 100644 resources/views/pages/pdfs/shipping_invoice_sst_inner.blade.php create mode 100644 resources/views/pages/pdfs/shipping_invoices_sst_combined.blade.php diff --git a/.env.example b/.env.example index 8f2f87a1..245cbd56 100644 --- a/.env.example +++ b/.env.example @@ -59,3 +59,7 @@ YD_API_CODE='' PERFEXCRM_BASE_URL="" PERFEXCRM_API_KEY="" PERFEXCRM_IS_ENABLED="false" + + +STORAGE_FEE_LAUNCH_DATE="2023-12-11 00:00:00" +SST_START_DATE="2024-04-01 00:00:00" diff --git a/app/Classes/Modules/Transactions/ControllersLogic/RegenerateShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateShippingInvoiceTransactionLogic.php index 8922e651..352b3373 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/RegenerateShippingInvoiceTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateShippingInvoiceTransactionLogic.php @@ -15,6 +15,7 @@ use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; use App\Classes\Modules\Documents\Services\CreatesDocument; use App\Classes\Modules\Documents\Services\CreatesFiles; use App\Models\Document; +use Carbon\Carbon; class RegenerateShippingInvoiceTransactionLogic extends AbstractControllerLogic { @@ -51,11 +52,18 @@ class RegenerateShippingInvoiceTransactionLogic extends AbstractControllerLogic foreach ($orders as $order){ $invoices = $order->transactions()->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get(); foreach ($invoices as $invoice){ - + $invoice->documents()->delete(); - - $transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice]); - + + $view = 'pages.pdfs.shipping_invoice'; + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + $shippingInvoiceTransactionCreatedDate = Carbon::parse($invoice->created_at); + if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare) && $invoice->tax > 0) { + $view = 'pages.pdfs.shipping_invoice_sst'; + } + + $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice]); + $document_object = new DocumentObject( DocumentType::SHIPPING_INVOICE, [chunk_split('data:application/pdf;base64,'.base64_encode($transaction_invoice_pdf->output()))], @@ -63,11 +71,11 @@ class RegenerateShippingInvoiceTransactionLogic extends AbstractControllerLogic ApprovalStatus::COMPLETED, 'shipping_invoice' ); - + $document =$this->createsDocument->execute($invoice, $document_object); - + $this->createsFiles->execute($document, $document_object); - + // dump($document); } } diff --git a/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingInvoiceTransactionLogic.php index 20dba2a0..272a2a54 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingInvoiceTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingInvoiceTransactionLogic.php @@ -16,6 +16,7 @@ use App\Classes\Modules\Documents\Services\CreatesDocument; use App\Classes\Modules\Documents\Services\CreatesFiles; use App\Classes\Modules\Transactions\Services\FetchesTransaction; use App\Models\Document; +use Carbon\Carbon; class RegenerateSingleShippingInvoiceTransactionLogic extends AbstractControllerLogic { @@ -54,7 +55,14 @@ class RegenerateSingleShippingInvoiceTransactionLogic extends AbstractController $invoice->documents()->delete(); - $transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice]); + $view = 'pages.pdfs.shipping_invoice'; + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + $shippingInvoiceTransactionCreatedDate = Carbon::parse($invoice->created_at); + if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare) && $invoice->tax > 0) { + $view = 'pages.pdfs.shipping_invoice_sst'; + } + + $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice]); $document_object = new DocumentObject( DocumentType::SHIPPING_INVOICE, diff --git a/app/Classes/Modules/Transactions/ControllersLogic/UpdateShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/UpdateShippingInvoiceTransactionLogic.php index 278d6959..3254e194 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/UpdateShippingInvoiceTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/UpdateShippingInvoiceTransactionLogic.php @@ -25,6 +25,8 @@ use App\Classes\Modules\Transactions\Services\DeletesTransactionDetails; use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject; use App\Classes\Modules\Transactions\Services\FetchesTransaction; +use App\Classes\ValueObjects\Constants\TaxPercentage; +use Carbon\Carbon; class UpdateShippingInvoiceTransactionLogic extends AbstractControllerLogic { @@ -60,9 +62,9 @@ class UpdateShippingInvoiceTransactionLogic extends AbstractControllerLogic /** @var DeletesTransactionDetails */ private $deletesTransactionDetails; - + public function __construct( - FetchesPackingList $fetchesPackingList, + FetchesPackingList $fetchesPackingList, FetchesTransaction $fetchesTransaction, UpdatesTransaction $updatesTransaction, FetchesTransactionDetail $fetchesTransactionDetail, @@ -105,11 +107,25 @@ class UpdateShippingInvoiceTransactionLogic extends AbstractControllerLogic $transaction_detail = (object) $transaction_detail; if(!in_array($transaction_detail->reference, ['SHIPPING_FEE', 'OVER_WEIGHT_CHARGES', 'MIN_CBM_CHARGES'])){ + $reference = 'CUSTOM_CHARGES'; + $taxPercentage = TaxPercentage::DEFAULT; + + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + $shippingInvoiceTransactionCreatedDate = Carbon::parse($invoice_transaction->created_at); + if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare)) { + $taxPercentage = TaxPercentage::SIX_PERCENT; + } + + if($transaction_detail->reference === "PAY_ON_BEHALF"){ + $reference = "PAY_ON_BEHALF"; + $taxPercentage = TaxPercentage::DEFAULT; + } $object_detail = new TransactionDetailObject( - 'CUSTOM_CHARGES', + $reference, isset($transaction_detail->name) ? $transaction_detail->name : TransactionDetailType::CUSTOM_CHARGES, $transaction_detail->quantity, - $transaction_detail->price + $transaction_detail->price, + $taxPercentage ); if(isset($transaction_detail->id)){ @@ -121,20 +137,20 @@ class UpdateShippingInvoiceTransactionLogic extends AbstractControllerLogic } $object = new TransactionObject( - $invoice_transaction->bill_no, - TransactionType::SHIPPING_INVOICE, - 1, + $invoice_transaction->bill_no, + TransactionType::SHIPPING_INVOICE, + 1, $invoice_transaction->issuer, - 1, + 1, PaymentMethodType::CASH, $invoice_transaction->transactionDetails()->sum('amount'), $invoice_transaction->transactionDetails()->sum('amount'), 1, - 1, - 0, - 0, + 1, 0, - null, + $invoice_transaction->transactionDetails()->sum('tax_amount'), + 0, + null, ApprovalStatus::PENDING_VERIFICATION ); diff --git a/app/Classes/Modules/Transactions/DataTransferObjects/TransactionDetailObject.php b/app/Classes/Modules/Transactions/DataTransferObjects/TransactionDetailObject.php index beb4b4dc..3e015947 100644 --- a/app/Classes/Modules/Transactions/DataTransferObjects/TransactionDetailObject.php +++ b/app/Classes/Modules/Transactions/DataTransferObjects/TransactionDetailObject.php @@ -18,19 +18,25 @@ class TransactionDetailObject implements DataTransferObject /** @var float|null */ private $price; + /** @var float|null */ + private $taxPercentage; + + /** * TransactionDetailObject constructor. * @param string $reference * @param string $name * @param float $quantity * @param float $price + * @param float $taxPercentage */ - public function __construct(?string $reference, ?string $name , ?float $quantity, ?float $price) + public function __construct(?string $reference, ?string $name , ?float $quantity, ?float $price, ?float $taxPercentage) { $this->reference = $reference; $this->name = $name; $this->quantity = $quantity; $this->price = $price; + $this->taxPercentage = $taxPercentage; } /** @@ -65,9 +71,28 @@ class TransactionDetailObject implements DataTransferObject return $this->price; } + /** + * @return float + */ public function getAmount(): float { - return $this->getQuantity() * $this->getPrice(); + return ($this->getQuantity() * $this->getPrice()) + $this->getTaxAmount(); + } + + /** + * @return float + */ + public function getTaxPercentage(): ?float + { + return $this->taxPercentage; + } + + /** + * @return float + */ + public function getTaxAmount(): float + { + return ($this->getQuantity() * $this->getPrice()) * $this->getTaxPercentage() / 100; } } diff --git a/app/Classes/Modules/Transactions/DataTransferObjects/TransactionObject.php b/app/Classes/Modules/Transactions/DataTransferObjects/TransactionObject.php index 5e943e29..36488488 100644 --- a/app/Classes/Modules/Transactions/DataTransferObjects/TransactionObject.php +++ b/app/Classes/Modules/Transactions/DataTransferObjects/TransactionObject.php @@ -80,21 +80,21 @@ class TransactionObject implements DataTransferObject * @param array|null $details */ public function __construct( - string $billNo, - string $transactionType, - int $issuer, - int $receiver, - int $recipientBankAccountId, - int $paymentMethod, - float $amount, - float $originalAmount, + string $billNo, + string $transactionType, + int $issuer, + int $receiver, + int $recipientBankAccountId, + int $paymentMethod, + float $amount, + float $originalAmount, int $currencyId, - int $originalCurrencyId, + int $originalCurrencyId, float $currencyRate, - float $tax, - float $serviceCharge, - ?Carbon $expiresOn, - ?int $status = ApprovalStatus::PENDING_SUBMISSION, + float $tax, + float $serviceCharge, + ?Carbon $expiresOn, + ?int $status = ApprovalStatus::PENDING_SUBMISSION, ?array $details = [], ?string $paymentReference = null ) @@ -241,10 +241,10 @@ class TransactionObject implements DataTransferObject /** * @return array */ - public function getDetails(): array + public function getDetails(): array //cief todo: not in used as of 20240407 { return array_map(function($product){ - return new TransactionDetailObject($product['stockCode'] ?? '', $product['description'] ?? '', $product['quantity'] ?? '', floatval(str_replace(',', '', $product['unit_price']))); + return new TransactionDetailObject($product['stockCode'] ?? '', $product['description'] ?? '', $product['quantity'] ?? '', floatval(str_replace(',', '', $product['unit_price'])), 0.0 ); }, $this->details); } @@ -255,4 +255,4 @@ class TransactionObject implements DataTransferObject { return $this->paymentReference; } -} \ No newline at end of file +} diff --git a/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php index 05abbc8d..6b2cae0e 100644 --- a/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php @@ -19,6 +19,7 @@ use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; use App\Classes\Jobs\CreatePerfexCRMInvoice; use App\Classes\Modules\Transactions\Processors\CheckStorageInvoiceTransactionProcessor; use App\Models\Order; +use Carbon\Carbon; class ApproveShippingInvoiceTransactionProcessor { @@ -59,9 +60,16 @@ class ApproveShippingInvoiceTransactionProcessor /** @var Transaction $invoice_transaction */ $invoice_transaction = $packingList->transactions()->where('transactions.type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::PENDING_SUBMISSION])->first(); + $view = 'pages.pdfs.shipping_invoice'; + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + $shippingInvoiceTransactionCreatedDate = Carbon::parse($invoice_transaction->created_at); + if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare) && $invoice_transaction->tax > 0) { + $view = 'pages.pdfs.shipping_invoice_sst'; + } + $this->updatesTransactionStatus->execute($invoice_transaction, ApprovalStatus::APPROVED); - $transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice_transaction]); + $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice_transaction]); $document_object = new DocumentObject( DocumentType::SHIPPING_INVOICE, diff --git a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php index 0faca0d2..ad72b218 100644 --- a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php @@ -23,6 +23,7 @@ use App\Classes\ValueObjects\Constants\PaymentMethodType; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\PackageType; use App\Classes\ValueObjects\Constants\PackingListType; +use App\Classes\ValueObjects\Constants\TaxPercentage; use App\Classes\ValueObjects\Constants\TransactionDetailType; use App\Http\Resources\TransactionWithStorageResource; use App\Models\Order; @@ -195,12 +196,22 @@ class CheckStorageInvoiceTransactionProcessor $cbm = $cbm + $quantity; } + $total_tax = 0; $price_cbm = $pricePerCBM * $cbm * $resultNumberOfDaysExceeded; + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + $shippingInvoiceTransactionCreatedDate = Carbon::now(); + Log::channel('storage_invoices')->info('storageInvoice: '.json_encode($storageInvoice).', $transaction->status: '.$transaction->status); if(!$storageInvoice && $resultNumberOfDaysExceeded > 0 && $transaction->status != ApprovalStatus::COMPLETED){ Log::channel('storage_invoices')->info('Created $transaction->id: '.$transaction->id); $billNumber = $this->generatesTransactionBillNumber->execute('STOR-'); - $storageInvoice = $this->createStorageInvoiceTransaction($destinationWarehousePackage, $billNumber, $company_module_id, $price_cbm); + + if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare)) { + $total_tax = $price_cbm * TaxPercentage::SIX_PERCENT / 100; + $price_cbm = $price_cbm + $total_tax; + } + + $storageInvoice = $this->createStorageInvoiceTransaction($destinationWarehousePackage, $billNumber, $company_module_id, $price_cbm, $total_tax); $storageInvoiceId = $storageInvoice->id; $this->createStorageInvoiceTransactionDetails($storageInvoice, $destinationWarehousePackage, $cbm, $pricePerCBM, $resultNumberOfDaysExceeded); } @@ -221,6 +232,11 @@ class CheckStorageInvoiceTransactionProcessor $price_cbm = $pricePerCBM * $cbm * $resultNumberOfDaysExceeded; } + if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare)) { + $total_tax = $price_cbm * TaxPercentage::SIX_PERCENT / 100; + $price_cbm = $price_cbm + $total_tax; + } + $amount = $storageInvoice->amount; $epsilon = 0.0001; // Tolerance for the comparison Log::channel('storage_invoices')->info('Update $transaction->id: '.$transaction->id); @@ -246,7 +262,8 @@ class CheckStorageInvoiceTransactionProcessor if($proceedToUpdate || ($pricePerCBM == 0 && $amount != 0)){ Log::channel('storage_invoices')->info('proceedToUpdate'); - $storageInvoice = $this->updateStorageInvoiceTransaction($storageInvoice, $price_cbm); + + $storageInvoice = $this->updateStorageInvoiceTransaction($storageInvoice, $price_cbm, $total_tax); $invoiceTransactionDetails = $storageInvoice->transactionDetails()->first(); $this->updateStorageInvoiceTransactionDetails($invoiceTransactionDetails, $destinationWarehousePackage, $cbm, $pricePerCBM, $resultNumberOfDaysExceeded); } @@ -356,7 +373,7 @@ class CheckStorageInvoiceTransactionProcessor } } - private function updateStorageInvoiceTransaction(Transaction $transaction, float $totalAmount){ + private function updateStorageInvoiceTransaction(Transaction $transaction, float $totalAmount, float $totalTax){ $object = new TransactionObject( $transaction->bill_no, @@ -370,7 +387,7 @@ class CheckStorageInvoiceTransactionProcessor 1, 1, 0, - 0, + $totalTax, 0, null, ApprovalStatus::APPROVED @@ -387,13 +404,14 @@ class CheckStorageInvoiceTransactionProcessor 'STORAGE_FEE', TransactionDetailType::STORAGE_FEE.' for '.$numberOfDays. ' days * RM'.$pricePerCBM.'
'.round($packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum('quantity'), 3).' CTNS - '.round($cbm, 3).' CBM', $cbm, - $pricePerCBM * $numberOfDays + $pricePerCBM * $numberOfDays, + TaxPercentage::SIX_PERCENT ); $this->updatesTransactionDetail->execute($invoice_transaction_details, $object_detail); } - private function createStorageInvoiceTransaction(PackingList $packing_list, string $billNumber, int $companyModuleId, float $totalAmount){ + private function createStorageInvoiceTransaction(PackingList $packing_list, string $billNumber, int $companyModuleId, float $totalAmount, float $totalTax){ $object = new TransactionObject( $billNumber, @@ -407,7 +425,7 @@ class CheckStorageInvoiceTransactionProcessor 1, 1, 0, - 0, + $totalTax, 0, null, ApprovalStatus::APPROVED @@ -424,7 +442,8 @@ class CheckStorageInvoiceTransactionProcessor 'STORAGE_FEE', TransactionDetailType::STORAGE_FEE.' for '.$numberOfDays. ' days * RM'.$pricePerCBM.'
'.round($packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum('quantity'), 3).' CTNS - '.round($cbm, 3).' CBM', $cbm, - $pricePerCBM * $numberOfDays + $pricePerCBM * $numberOfDays, + TaxPercentage::SIX_PERCENT ); $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php index c3d20062..fc100a13 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php @@ -22,14 +22,17 @@ use App\Classes\ValueObjects\Constants\PaymentMethodType; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\PackageType; use App\Classes\ValueObjects\Constants\SegmentConstants; +use App\Classes\ValueObjects\Constants\TaxPercentage; 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 Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; class CreateInvoiceTransactionProcessor @@ -171,6 +174,14 @@ class CreateInvoiceTransactionProcessor $billNumber = $this->generatesTransactionBillNumber->execute('SHIP-'); + $total_tax = 0; + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + $shippingInvoiceTransactionCreatedDate = Carbon::now(); + if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare)) { + $total_tax = $total_cbm * TaxPercentage::SIX_PERCENT / 100; + $total_cbm = $total_cbm + $total_tax; + } + $object = new TransactionObject( $billNumber, TransactionType::SHIPPING_INVOICE, @@ -183,7 +194,7 @@ class CreateInvoiceTransactionProcessor 1, 1, 0, - 0, + $total_tax, 0, null, ApprovalStatus::PENDING_SUBMISSION @@ -196,7 +207,8 @@ class CreateInvoiceTransactionProcessor '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 + $price_cbm, + TaxPercentage::SIX_PERCENT ); $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); @@ -206,7 +218,8 @@ class CreateInvoiceTransactionProcessor 'OVER_WEIGHT_CHARGES', TransactionDetailType::OVER_WEIGHT_CHARGES, $over_weight_cbm, - $price_cbm + $price_cbm, + TaxPercentage::SIX_PERCENT ); $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); @@ -217,7 +230,8 @@ class CreateInvoiceTransactionProcessor 'MIN_CBM_CHARGES', TransactionDetailType::MIN_CBM_CHARGES, $minimum_charge, - $price_cbm + $price_cbm, + TaxPercentage::SIX_PERCENT ); $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); diff --git a/app/Classes/Modules/Transactions/Processors/CreateShippingCostTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateShippingCostTransactionProcessor.php index 5591731c..d93702b9 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateShippingCostTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateShippingCostTransactionProcessor.php @@ -9,6 +9,7 @@ use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\SegmentConstants; use App\Classes\ValueObjects\Constants\TransactionType; use App\Classes\ValueObjects\Constants\PaymentMethodType; +use App\Classes\ValueObjects\Constants\TaxPercentage; use App\Models\Order; class CreateShippingCostTransactionProcessor @@ -57,7 +58,8 @@ class CreateShippingCostTransactionProcessor TransactionType::SHIPPING_COST, 'Shipping Cost', $quantity, - $totalShippingCost/$totalCBM + $totalShippingCost/$totalCBM, + TaxPercentage::SIX_PERCENT ); $shippingCostTransaction = $this->createsShippingCostTransaction->execute($order, $transactionObject, $transactionDetailObject); diff --git a/app/Classes/Modules/Transactions/Processors/CreateStorageInvoiceDocTransactionFixProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateStorageInvoiceDocTransactionFixProcessor.php index f019209e..940935fa 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateStorageInvoiceDocTransactionFixProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateStorageInvoiceDocTransactionFixProcessor.php @@ -16,6 +16,8 @@ use App\Classes\Modules\Documents\Services\CreatesFiles; use App\Classes\Modules\Documents\Services\CreatesDocument; use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; +use Carbon\Carbon; +use Illuminate\Support\Facades\Log; class CreateStorageInvoiceDocTransactionFixProcessor { @@ -51,9 +53,17 @@ class CreateStorageInvoiceDocTransactionFixProcessor /** @var Transaction $invoice_transaction */ $invoice_transaction = $packingList->transactions()->where('transactions.type', TransactionType::STORAGE_INVOICE)->whereIn('status', [ApprovalStatus::COMPLETED])->first(); - // $this->updatesTransactionStatus->execute($invoice_transaction, ApprovalStatus::APPROVED); + // $this->updatesTransactionStatus->execute($invoice_transaction, ApprovalStatus::APPROVED); + $view = 'pages.pdfs.shipping_invoice'; + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + Log::info('$dateToCompare 2: '.$dateToCompare); + $storageInvoiceTransactionCreatedDate = Carbon::parse($invoice_transaction->created_at); + Log::info('$storageInvoiceTransactionCreatedDate 2: '.$storageInvoiceTransactionCreatedDate); + if ($storageInvoiceTransactionCreatedDate->isAfter($dateToCompare) && $invoice_transaction->tax > 0) { + $view = 'pages.pdfs.shipping_invoice_sst'; + } - $transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice_transaction]); + $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice_transaction]); $document_object = new DocumentObject( DocumentType::STORAGE_INVOICE, diff --git a/app/Classes/Modules/Transactions/Processors/CreateStorageInvoiceDocTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateStorageInvoiceDocTransactionProcessor.php index d46f5661..d5277409 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateStorageInvoiceDocTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateStorageInvoiceDocTransactionProcessor.php @@ -16,6 +16,8 @@ use App\Classes\Modules\Documents\Services\CreatesFiles; use App\Classes\Modules\Documents\Services\CreatesDocument; use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; +use Carbon\Carbon; +use Illuminate\Support\Facades\Log; class CreateStorageInvoiceDocTransactionProcessor { @@ -53,7 +55,16 @@ class CreateStorageInvoiceDocTransactionProcessor // $this->updatesTransactionStatus->execute($invoice_transaction, ApprovalStatus::APPROVED); - $transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice_transaction]); + $view = 'pages.pdfs.shipping_invoice'; + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + Log::info('$dateToCompare: '.$dateToCompare); + $storageInvoiceTransactionCreatedDate = Carbon::parse($invoice_transaction->created_at); + Log::info('$storageInvoiceTransactionCreatedDate: '.$storageInvoiceTransactionCreatedDate); + if ($storageInvoiceTransactionCreatedDate->isAfter($dateToCompare) && $invoice_transaction->tax > 0) { + $view = 'pages.pdfs.shipping_invoice_sst'; + } + + $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice_transaction]); $document_object = new DocumentObject( DocumentType::STORAGE_INVOICE, diff --git a/app/Classes/Modules/Transactions/Services/CreatesShippingCostTransaction.php b/app/Classes/Modules/Transactions/Services/CreatesShippingCostTransaction.php index e071d174..55c6ac99 100644 --- a/app/Classes/Modules/Transactions/Services/CreatesShippingCostTransaction.php +++ b/app/Classes/Modules/Transactions/Services/CreatesShippingCostTransaction.php @@ -44,6 +44,8 @@ class CreatesShippingCostTransaction extends AbstractUpdateRelationshipRecord $model->quantity = $transactionDetailObject->getQuantity(); $model->price = $transactionDetailObject->getPrice(); $model->amount = $transactionDetailObject->getAmount(); + $model->tax_amount = $transactionDetailObject->getTaxAmount(); + $model->tax_percentage = $transactionDetailObject->getTaxPercentage(); return $this->handler($transaction->transactionDetails(), $model); diff --git a/app/Classes/Modules/Transactions/Services/CreatesTransactionDetail.php b/app/Classes/Modules/Transactions/Services/CreatesTransactionDetail.php index bdb0f387..76ad6850 100644 --- a/app/Classes/Modules/Transactions/Services/CreatesTransactionDetail.php +++ b/app/Classes/Modules/Transactions/Services/CreatesTransactionDetail.php @@ -23,8 +23,10 @@ class CreatesTransactionDetail extends AbstractUpdateRelationshipRecord $model->quantity = $object->getQuantity(); $model->price = $object->getPrice(); $model->amount = $object->getAmount(); + $model->tax_amount = $object->getTaxAmount(); + $model->tax_percentage = $object->getTaxPercentage(); return $this->handler($transaction->transactionDetails(), $model); } -} \ No newline at end of file +} diff --git a/app/Classes/Modules/Transactions/Services/UpdatesTransactionDetail.php b/app/Classes/Modules/Transactions/Services/UpdatesTransactionDetail.php index 128214d4..457379bd 100644 --- a/app/Classes/Modules/Transactions/Services/UpdatesTransactionDetail.php +++ b/app/Classes/Modules/Transactions/Services/UpdatesTransactionDetail.php @@ -20,8 +20,10 @@ class UpdatesTransactionDetail extends AbstractUpdateRecord $transactionDetail->quantity = $object->getQuantity(); $transactionDetail->price = $object->getPrice(); $transactionDetail->amount = $object->getAmount(); + $transactionDetail->tax_amount = $object->getTaxAmount(); + $transactionDetail->tax_percentage = $object->getTaxPercentage(); return $this->handler($transactionDetail); } -} \ No newline at end of file +} diff --git a/app/Classes/ValueObjects/Constants/TaxPercentage.php b/app/Classes/ValueObjects/Constants/TaxPercentage.php new file mode 100644 index 00000000..3c6717a2 --- /dev/null +++ b/app/Classes/ValueObjects/Constants/TaxPercentage.php @@ -0,0 +1,10 @@ +transactions()->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get(); foreach ($invoices as $invoice){ - + dump($invoice->id); - + $invoice->documents()->delete(); - - $transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice]); - + + $view = 'pages.pdfs.shipping_invoice'; + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + $shippingInvoiceTransactionCreatedDate = Carbon::parse($invoice->created_at); + if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare) && $invoice->tax > 0) { + $view = 'pages.pdfs.shipping_invoice_sst'; + } + + $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice]); + $document_object = new DocumentObject( DocumentType::SHIPPING_INVOICE, [chunk_split('data:application/pdf;base64,'.base64_encode($transaction_invoice_pdf->output()))], @@ -72,10 +79,10 @@ class FixInvoice extends Command ApprovalStatus::COMPLETED, 'shipping_invoice' ); - + /** @var Document $document */ $document = (App()->make(CreatesDocument::class))->execute($invoice, $document_object); - + (App()->make(CreatesFiles::class))->execute($document, $document_object); } } diff --git a/app/Http/Resources/GroupForOrderV2Resource.php b/app/Http/Resources/GroupForOrderV2Resource.php index 69cce0ed..cfd2f121 100644 --- a/app/Http/Resources/GroupForOrderV2Resource.php +++ b/app/Http/Resources/GroupForOrderV2Resource.php @@ -26,7 +26,7 @@ class GroupForOrderV2Resource extends JsonResource 'original_currency' => new CurrencyResource($this->original_currency), 'issuer_name' => $this->issuerCompany->name, 'issuer_id' => $this->issuerCompany->id, - 'amount' => (float) $this->amount, + 'amount' => (float) $this->amount, //cief todo: 58 'service_charge' => (float) $this->amount, 'currency' => new CurrencyResource($this->currency), 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y h:i:s A'), diff --git a/app/Http/Resources/TransactionResource.php b/app/Http/Resources/TransactionResource.php index d8697f8a..6a21f1d2 100644 --- a/app/Http/Resources/TransactionResource.php +++ b/app/Http/Resources/TransactionResource.php @@ -52,7 +52,7 @@ class TransactionResource extends JsonResource 'documents' => $groupTransactions ? DocumentResource::collection($this->documents->where('status', ApprovalStatus::PENDING_VERIFICATION)) : DocumentResource::collection($this->documents), 'type' => (int) $this->type, 'bill_no' => $this->bill_no, - 'amount' => (double) $this->amount, + 'amount' => (double) $this->amount, //cief todo: 58 'payment_method' => (int) $this->payment_method, 'payment_reference' => $this->payment_reference, 'outstanding' => (double) $this->amount - ($this->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount')), diff --git a/app/Http/Resources/TransactionWithStorageResource.php b/app/Http/Resources/TransactionWithStorageResource.php index dd307ad8..fe71d674 100644 --- a/app/Http/Resources/TransactionWithStorageResource.php +++ b/app/Http/Resources/TransactionWithStorageResource.php @@ -59,7 +59,7 @@ class TransactionWithStorageResource extends JsonResource if ($ts) { $paymentTransaction = Transaction::where('payment_reference', $ts->reference)->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION])->first(); if($paymentTransaction){ - $groupTotalAmount = (double) $this->amount; + $groupTotalAmount = (double) $this->amount; //cief todo: 58 foreach ($group_payment_history as $key => $value) { if ($value->id === $ts->id && $value->reference === $ts->reference) { @@ -88,10 +88,10 @@ class TransactionWithStorageResource extends JsonResource 'documents' => $groupTransactions ? DocumentResource::collection($this->documents->where('status', ApprovalStatus::PENDING_VERIFICATION)) : DocumentResource::collection($this->documents), 'type' => (int) $this->type, 'bill_no' => $this->bill_no, - 'amount' => (double) $this->amount, + 'amount' => (double) $this->amount, //cief todo: 58 'payment_method' => (int) $this->payment_method, 'payment_reference' => $this->payment_reference, - 'outstanding' => (double) $this->amount - ($this->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount')), + 'outstanding' => (double) $this->amount - ($this->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount')), //cief todo: 58 'floating' => $group_payment_attempts ? $groupTotalAmount : (double) $this->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION, ApprovalStatus::PENDING_VERIFICATION])->sum('amount'), 'service_charge' => (double) $this->service_charge, 'tax' => (double) $this->tax, diff --git a/database/migrations/2024_04_06_004026_add_columns_to_transaction_details_table.php b/database/migrations/2024_04_06_004026_add_columns_to_transaction_details_table.php new file mode 100644 index 00000000..7d179b3e --- /dev/null +++ b/database/migrations/2024_04_06_004026_add_columns_to_transaction_details_table.php @@ -0,0 +1,36 @@ +decimal('tax_amount', 14, 5)->after('amount')->default(0.00); + $table->decimal('tax_percentage', 6, 2)->after('tax_amount')->default(0.00); + $table->decimal('discount', 14, 5)->after('tax_percentage')->default(0.00); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('transaction_details', function (Blueprint $table) { + $table->dropColumn('tax_amount'); + $table->dropColumn('tax_percentage'); + $table->dropColumn('discount'); + }); + } +} diff --git a/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingComponent.vue b/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingComponent.vue deleted file mode 100644 index 13a4981b..00000000 --- a/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingComponent.vue +++ /dev/null @@ -1,322 +0,0 @@ - - diff --git a/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingWithSearchComponent.vue b/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingWithSearchComponent.vue index 6cbfa39e..682cd602 100644 --- a/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingWithSearchComponent.vue +++ b/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingWithSearchComponent.vue @@ -38,6 +38,7 @@ diff --git a/resources/assets/vue/components/paymentsBilling/forms/InvoiceItemFormComponent.vue b/resources/assets/vue/components/paymentsBilling/forms/InvoiceItemFormComponent.vue index b32e2b49..262c67ab 100644 --- a/resources/assets/vue/components/paymentsBilling/forms/InvoiceItemFormComponent.vue +++ b/resources/assets/vue/components/paymentsBilling/forms/InvoiceItemFormComponent.vue @@ -37,7 +37,11 @@
-
+
+

Name

+

{{product.name}}

+
+
@@ -93,6 +97,10 @@ // required: true default: 0 }, + name:{ + type: String, + default: "" + }, }, data(){ return { @@ -102,6 +110,7 @@ quantity: 0, price: 0, amount: 0, + reference: 'CUSTOM_CHARGES', }, products: [] } @@ -113,6 +122,12 @@ price: { required }, } }, + mounted() { + if(this.name){ + this.product.name = this.name; + this.product.reference = 'PAY_ON_BEHALF'; + } + }, created() { if (this.data) { this.product = this.data; @@ -136,7 +151,7 @@ this.$emit('add', { name: this.product.name, quantity: this.product.quantity, - reference: 'CUSTOM_CHARGES', + reference: this.product.reference, price: parseFloat((this.product.price).toString().replace(',', '')), amount: this.productTotal }); diff --git a/resources/assets/vue/components/paymentsBilling/forms/InvoiceItemsFormComponent.vue b/resources/assets/vue/components/paymentsBilling/forms/InvoiceItemsFormComponent.vue index 5153c14a..a0806e4d 100644 --- a/resources/assets/vue/components/paymentsBilling/forms/InvoiceItemsFormComponent.vue +++ b/resources/assets/vue/components/paymentsBilling/forms/InvoiceItemsFormComponent.vue @@ -15,13 +15,14 @@
- +
-
{{ addCharges? 'Cancel' : 'Add Charges' }}
+
{{ addCharges? 'Cancel' : 'Add \'Pay On Behalf \' Charges' }}
+
{{ addCharges? 'Cancel' : 'Add Charges' }}
Save Change
@@ -44,6 +45,7 @@ parameters: { transaction_details: [] }, + addChargesName: '' } }, methods: { diff --git a/resources/views/pages/pdfs/shipping_invoice_sst.blade.php b/resources/views/pages/pdfs/shipping_invoice_sst.blade.php new file mode 100644 index 00000000..5e08aea2 --- /dev/null +++ b/resources/views/pages/pdfs/shipping_invoice_sst.blade.php @@ -0,0 +1,21 @@ +@extends('layouts.base_pdf') +@section('inner_content') +
+ +

+
{{ $invoice_transaction->bill_no }}
+
+ @include('pages.pdfs.shipping_invoice_sst_inner', ['invoice_transaction' => $invoice_transaction]) + + + @include('pages.pdfs.packing_list_measurement', ['invoice_transaction' => $invoice_transaction]) + + + + + + + +
SST This is generated by computer. No signature required.Page {PAGENO} of {nbpg}
+
+@endsection diff --git a/resources/views/pages/pdfs/shipping_invoice_sst_inner.blade.php b/resources/views/pages/pdfs/shipping_invoice_sst_inner.blade.php new file mode 100644 index 00000000..c0006b1d --- /dev/null +++ b/resources/views/pages/pdfs/shipping_invoice_sst_inner.blade.php @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + +
+ + + CIEF WORLDWIDE SDN BHD + + + (1134596-M)
+ No. 72-3, Jalan Jalil 1,
+ The Earth Bukit Jalil,
+ 57000 Kuala Lumpur
+ Tel: 03-8082 1252 +
+
+ + Invoice + +
+ +
Invoice No: {{ $invoice_transaction->bill_no }}
+ + @php + $companyModule = $invoice_transaction->owner->owner->companyModule; + @endphp + +
Date: {{ $invoice_transaction->created_at }}
+
Order No: {{ $invoice_transaction->owner->owner->reference }}
+
Container Ref: {{ $invoice_transaction->owner->containers()->first()->reference }}
+ {{--
{{ $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference }}
--}} +
 
+ +
+ + Tax Invoice + +
+ + Bill To + +
+
+ {{ $companyModule->name }} +
+
+ @php + $addresses = $companyModule->addresses()->where('status', '=', \App\Classes\ValueObjects\Constants\ApprovalStatus::APPROVED)->where('type', '=', \App\Classes\ValueObjects\Constants\AddressType::BILLING)->first(); + @endphp + @if($addresses) + {{ $addresses->street_one }} + {{ $addresses->street_two }} , + {{ $addresses->district()->first()->name }}, + {{ $addresses->postcode }} + {{ $addresses->state()->first()->name }}, + {{ $addresses->country()->first()->name }} + @endif +
+
+ @php + $contact = $companyModule->contacts()->first(); + @endphp + Phone: {{ $contact ? $contact->phone : '' }} +
+
+ +
+
+ + + + + + + + + + + + + + @foreach ($invoice_transaction->transactionDetails as $key => $transaction_detail) + + + + + + + + + + @endforeach + + + + + + + + + + + + + + + + + + + + + + + +
NoDescriptionQuantityUnit Price (RM)Tax (%)Tax Amount (RM)Total Amount
(RM)
{{ $key + 1 }}{!! $transaction_detail->name !!}{{ round($transaction_detail->quantity, 3) }} + {{ round($transaction_detail->price, 2) }} + + {{ round($transaction_detail->tax_percentage, 2) }} + + {{ number_format(round($transaction_detail->tax_amount, 2), 2) }} + + {{ number_format(round($transaction_detail->amount, 2), 2) }} +
Subtotal + {{ number_format(round($invoice_transaction->amount - $invoice_transaction->tax, 2), 2) }} +
Service Charges + {{ number_format(round($invoice_transaction->service_charge, 2), 2) }} +
Tax{{ number_format($invoice_transaction->tax, 2) }}
Total + {{ number_format(round($invoice_transaction->amount, 2), 2) }} +
diff --git a/resources/views/pages/pdfs/shipping_invoices_sst_combined.blade.php b/resources/views/pages/pdfs/shipping_invoices_sst_combined.blade.php new file mode 100644 index 00000000..8e452590 --- /dev/null +++ b/resources/views/pages/pdfs/shipping_invoices_sst_combined.blade.php @@ -0,0 +1,169 @@ +@extends('layouts.base_pdf') +@section('inner_content') +@php +$grandTotal = 0; +$grandTotalTax = 0; +$grandSubTotal = 0; +@endphp + + + + + + + + + + + + + + + + +
+ + + CIEF WORLDWIDE SDN BHD + + + (1134596-M)
+ No. 72-3, Jalan Jalil 1,
+ The Earth Bukit Jalil,
+ 57000 Kuala Lumpur
+ Tel: 03-8082 1252 +
+
+ + Summary + +
+ + @php + $companyModule = $invoice_transactions[0]->owner->owner->companyModule; + @endphp + + {{--
Date: {{ $invoice_transactions[0]->created_at }}
--}} +
Date: {{ \Carbon\Carbon::now() }}
+
 
+ +
+ + Tax Invoice + +
+ + Bill To + +
+
+ {{ $companyModule->name }} +
+
+ @php + $addresses = $companyModule->addresses()->where('status', '=', \App\Classes\ValueObjects\Constants\ApprovalStatus::APPROVED)->where('type', '=', \App\Classes\ValueObjects\Constants\AddressType::BILLING)->first(); + @endphp + {{ $addresses->street_one }} + {{ $addresses->street_two }} , + {{ $addresses->district()->first()->name }}, + {{ $addresses->postcode }} + {{ $addresses->state()->first()->name }}, + {{ $addresses->country()->first()->name }} +
+
+ @php + $contact = $companyModule->contacts()->first(); + @endphp + Phone: {{ $contact ? $contact->phone : '' }} +
+
+ +
+
+ + + + + + + + + + + + + + + @foreach ($invoice_transactions as $key => $invoice_transaction) + @foreach ($invoice_transaction->transactionDetails as $transaction_detail) + + + + + + + + + + + @endforeach + @php + $grandSubTotal = $grandSubTotal + round($invoice_transaction->amount - $invoice_transaction->tax, 2); + $grandTotalTax = $grandTotalTax + round($invoice_transaction->tax, 2); + $grandTotal = $grandTotal + round($invoice_transaction->amount, 2); + @endphp + @endforeach + + + + + + + + + + + + + + + + + + +
NoInvoice NoDescriptionQuantityUnit Price (RM)Tax (%)Tax Amount (RM)Total Amount
(RM)
{{ $key + 1 }}{{ $invoice_transaction->bill_no }}{!! $transaction_detail->name !!}{{ round($transaction_detail->quantity, 3) }} + {{ round($transaction_detail->price, 2) }} + + {{ round($transaction_detail->tax_percentage, 2) }} + + {{ number_format(round($transaction_detail->tax_amount, 2), 2) }} + + {{ round($transaction_detail->amount, 2) }} +
Subtotal + {{ round($grandSubTotal, 2) }} +
Tax + {{ round($grandTotalTax, 2) }} +
Total + {{ round($grandTotal, 2) }} + +
+ + @foreach ($invoice_transactions as $transaction) + + @include('pages.pdfs.shipping_invoice_sst_inner', ['invoice_transaction' => $transaction]) + + @include('pages.pdfs.packing_list_measurement', ['invoice_transaction' => $transaction]) + @endforeach + + + + + + + + +
This is generated by computer. No signature required.Page {PAGENO} of {nbpg}
+
+@endsection diff --git a/routes/web.php b/routes/web.php index da9575b8..c95a958d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -802,7 +802,14 @@ Route::get('/invoices/fix/{company_module_id}', function($company_module_id) { $invoice->documents()->delete(); - $transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice]); + $view = 'pages.pdfs.shipping_invoice'; + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + $shippingInvoiceTransactionCreatedDate = Carbon::parse($invoice->created_at); + if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare) && $invoice->tax > 0) { + $view = 'pages.pdfs.shipping_invoice_sst'; + } + + $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice]); $document_object = new DocumentObject( DocumentType::SHIPPING_INVOICE, @@ -828,8 +835,16 @@ Route::get('/invoices/combine/{ids}', function($ids){ $ids = json_decode($ids); $transactions = Transaction::whereIn('id', $ids)->get(); + $invoice = $transactions[0]; //NOTE: invoices that need to be combined need to be seperated before and after SST implementation - $pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoices_combined', ['invoice_transactions' => $transactions]); + $view = 'pages.pdfs.shipping_invoices_combined'; + $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); + $shippingInvoiceTransactionCreatedDate = Carbon::parse($invoice->created_at); + if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare) && $invoice->tax > 0) { + $view = 'pages.pdfs.shipping_invoices_sst_combined'; + } + + $pdf = LaravelMpdf::loadView($view, ['invoice_transactions' => $transactions]); return $pdf->download('combined_invoice_.pdf'); })->name('invoice.combined_summary'); @@ -1255,7 +1270,7 @@ Route::get('/payment-and-billing-2', function () { })->name('admin.payment-and-billing-2'); Route::get('/show-all-extra-payments', function () { - ini_set('memory_limit', '-1'); + ini_set('memory_limit', '-1'); $invoices = Transaction::where('type', TransactionType::SHIPPING_INVOICE) ->where('status', ApprovalStatus::COMPLETED) From a809aec9a719c8500b1853417969e280d0a19c74 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sun, 7 Apr 2024 10:22:12 +0800 Subject: [PATCH 2/4] SST Impelemtation --- .../UpdateShippingInvoiceTransactionLogic.php | 2 +- ...heckStorageInvoiceTransactionProcessor.php | 19 +++++++++++-------- .../CreateInvoiceTransactionProcessor.php | 10 ++++++---- .../ValueObjects/Constants/TaxPercentage.php | 2 ++ 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/app/Classes/Modules/Transactions/ControllersLogic/UpdateShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/UpdateShippingInvoiceTransactionLogic.php index 3254e194..86db0e3f 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/UpdateShippingInvoiceTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/UpdateShippingInvoiceTransactionLogic.php @@ -118,7 +118,7 @@ class UpdateShippingInvoiceTransactionLogic extends AbstractControllerLogic if($transaction_detail->reference === "PAY_ON_BEHALF"){ $reference = "PAY_ON_BEHALF"; - $taxPercentage = TaxPercentage::DEFAULT; + $taxPercentage = TaxPercentage::NO_TAX; } $object_detail = new TransactionDetailObject( $reference, diff --git a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php index ad72b218..dfe76267 100644 --- a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php @@ -197,6 +197,7 @@ class CheckStorageInvoiceTransactionProcessor } $total_tax = 0; + $taxPercentage = TaxPercentage::DEFAULT; $price_cbm = $pricePerCBM * $cbm * $resultNumberOfDaysExceeded; $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); $shippingInvoiceTransactionCreatedDate = Carbon::now(); @@ -207,13 +208,14 @@ class CheckStorageInvoiceTransactionProcessor $billNumber = $this->generatesTransactionBillNumber->execute('STOR-'); if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare)) { - $total_tax = $price_cbm * TaxPercentage::SIX_PERCENT / 100; + $taxPercentage = TaxPercentage::SIX_PERCENT; + $total_tax = $price_cbm * $taxPercentage / 100; $price_cbm = $price_cbm + $total_tax; } $storageInvoice = $this->createStorageInvoiceTransaction($destinationWarehousePackage, $billNumber, $company_module_id, $price_cbm, $total_tax); $storageInvoiceId = $storageInvoice->id; - $this->createStorageInvoiceTransactionDetails($storageInvoice, $destinationWarehousePackage, $cbm, $pricePerCBM, $resultNumberOfDaysExceeded); + $this->createStorageInvoiceTransactionDetails($storageInvoice, $destinationWarehousePackage, $cbm, $pricePerCBM, $resultNumberOfDaysExceeded, $taxPercentage); } else if($storageInvoice){ //Additional handling for giving selected storage invoice a waiver @@ -233,7 +235,8 @@ class CheckStorageInvoiceTransactionProcessor } if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare)) { - $total_tax = $price_cbm * TaxPercentage::SIX_PERCENT / 100; + $taxPercentage = TaxPercentage::SIX_PERCENT; + $total_tax = $price_cbm * $taxPercentage / 100; $price_cbm = $price_cbm + $total_tax; } @@ -265,7 +268,7 @@ class CheckStorageInvoiceTransactionProcessor $storageInvoice = $this->updateStorageInvoiceTransaction($storageInvoice, $price_cbm, $total_tax); $invoiceTransactionDetails = $storageInvoice->transactionDetails()->first(); - $this->updateStorageInvoiceTransactionDetails($invoiceTransactionDetails, $destinationWarehousePackage, $cbm, $pricePerCBM, $resultNumberOfDaysExceeded); + $this->updateStorageInvoiceTransactionDetails($invoiceTransactionDetails, $destinationWarehousePackage, $cbm, $pricePerCBM, $resultNumberOfDaysExceeded, $taxPercentage); } $storageInvoiceId = $storageInvoice->id; @@ -399,13 +402,13 @@ class CheckStorageInvoiceTransactionProcessor return $invoice_transaction; } - private function updateStorageInvoiceTransactionDetails($invoice_transaction_details, PackingList $packing_list, $cbm, $pricePerCBM, $numberOfDays){ + private function updateStorageInvoiceTransactionDetails($invoice_transaction_details, PackingList $packing_list, $cbm, $pricePerCBM, $numberOfDays, $taxPercentage){ $object_detail = new TransactionDetailObject( 'STORAGE_FEE', TransactionDetailType::STORAGE_FEE.' for '.$numberOfDays. ' days * RM'.$pricePerCBM.'
'.round($packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum('quantity'), 3).' CTNS - '.round($cbm, 3).' CBM', $cbm, $pricePerCBM * $numberOfDays, - TaxPercentage::SIX_PERCENT + $taxPercentage ); $this->updatesTransactionDetail->execute($invoice_transaction_details, $object_detail); @@ -437,13 +440,13 @@ class CheckStorageInvoiceTransactionProcessor return $invoice_transaction; } - private function createStorageInvoiceTransactionDetails($invoice_transaction, PackingList $packing_list, $cbm, $pricePerCBM, $numberOfDays){ + private function createStorageInvoiceTransactionDetails($invoice_transaction, PackingList $packing_list, $cbm, $pricePerCBM, $numberOfDays, $taxPercentage){ $object_detail = new TransactionDetailObject( 'STORAGE_FEE', TransactionDetailType::STORAGE_FEE.' for '.$numberOfDays. ' days * RM'.$pricePerCBM.'
'.round($packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum('quantity'), 3).' CTNS - '.round($cbm, 3).' CBM', $cbm, $pricePerCBM * $numberOfDays, - TaxPercentage::SIX_PERCENT + $taxPercentage ); $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php index fc100a13..dec6dd2f 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php @@ -175,10 +175,12 @@ class CreateInvoiceTransactionProcessor $billNumber = $this->generatesTransactionBillNumber->execute('SHIP-'); $total_tax = 0; + $taxPercentage = TaxPercentage::DEFAULT; $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); $shippingInvoiceTransactionCreatedDate = Carbon::now(); if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare)) { - $total_tax = $total_cbm * TaxPercentage::SIX_PERCENT / 100; + $taxPercentage = TaxPercentage::SIX_PERCENT; + $total_tax = $total_cbm * $taxPercentage / 100; $total_cbm = $total_cbm + $total_tax; } @@ -208,7 +210,7 @@ class CreateInvoiceTransactionProcessor TransactionDetailType::SHIPPING_FEE.'
'.round($packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum('quantity'), 3).' CTNS - '.round($cbm, 3).' CBM', $cbm, $price_cbm, - TaxPercentage::SIX_PERCENT + $taxPercentage ); $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); @@ -219,7 +221,7 @@ class CreateInvoiceTransactionProcessor TransactionDetailType::OVER_WEIGHT_CHARGES, $over_weight_cbm, $price_cbm, - TaxPercentage::SIX_PERCENT + $taxPercentage ); $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); @@ -231,7 +233,7 @@ class CreateInvoiceTransactionProcessor TransactionDetailType::MIN_CBM_CHARGES, $minimum_charge, $price_cbm, - TaxPercentage::SIX_PERCENT + $taxPercentage ); $this->createsTransactionDetail->execute($invoice_transaction, $object_detail); diff --git a/app/Classes/ValueObjects/Constants/TaxPercentage.php b/app/Classes/ValueObjects/Constants/TaxPercentage.php index 3c6717a2..a47336c9 100644 --- a/app/Classes/ValueObjects/Constants/TaxPercentage.php +++ b/app/Classes/ValueObjects/Constants/TaxPercentage.php @@ -6,5 +6,7 @@ final class TaxPercentage { public const DEFAULT = 0; + public const NO_TAX = 0; + public const SIX_PERCENT = 6; } From 28feba2ae931fbecb90741acfc71077c0ffe498a Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Tue, 16 Apr 2024 12:39:44 +0800 Subject: [PATCH 3/4] change sst invoice format --- .../shipping_invoices_sst_combined.blade.php | 88 +++++++++---------- 1 file changed, 41 insertions(+), 47 deletions(-) diff --git a/resources/views/pages/pdfs/shipping_invoices_sst_combined.blade.php b/resources/views/pages/pdfs/shipping_invoices_sst_combined.blade.php index 8e452590..f7cff168 100644 --- a/resources/views/pages/pdfs/shipping_invoices_sst_combined.blade.php +++ b/resources/views/pages/pdfs/shipping_invoices_sst_combined.blade.php @@ -1,10 +1,10 @@ @extends('layouts.base_pdf') @section('inner_content') -@php -$grandTotal = 0; -$grandTotalTax = 0; -$grandSubTotal = 0; -@endphp + @php + $grandTotal = 0; + $grandTotalTax = 0; + $grandSubTotal = 0; + @endphp @@ -21,7 +21,8 @@ $grandSubTotal = 0; No. 72-3, Jalan Jalil 1,
The Earth Bukit Jalil,
57000 Kuala Lumpur
- Tel: 03-8082 1252 + Tel: 03-8082 1252
+ SST No: W10-2403-32000643 - - - @@ -84,16 +78,16 @@ $grandSubTotal = 0;
@@ -40,13 +41,6 @@ $grandSubTotal = 0;
- - Tax Invoice - -
@@ -71,9 +65,9 @@ $grandSubTotal = 0; {{ $addresses->country()->first()->name }}
- @php - $contact = $companyModule->contacts()->first(); - @endphp + @php + $contact = $companyModule->contacts()->first(); + @endphp Phone: {{ $contact ? $contact->phone : '' }}
- - - - - - - - - - + + + + + + + + + + @foreach ($invoice_transactions as $key => $invoice_transaction) @@ -109,7 +103,7 @@ $grandSubTotal = 0; - - - - - - - + - - - - - - - + + + + + + + + + + + - + +
NoInvoice NoDescriptionQuantityUnit Price (RM)Tax (%)Tax Amount (RM)Total Amount
(RM)
NoInvoice NoDescriptionQtyUnit Price
(RM)
Tax (%)Tax Amount
(RM)
Sub Total
(RM)
{{ round($transaction_detail->tax_percentage, 2) }} + {{ number_format(round($transaction_detail->tax_amount, 2), 2) }} @@ -125,28 +119,28 @@ $grandSubTotal = 0; @endforeach
Subtotal - {{ round($grandSubTotal, 2) }} -
Tax - {{ round($grandTotalTax, 2) }} -
Total - {{ round($grandTotal, 2) }} + Total Taxable Amount + {{ round($grandSubTotal, 2) }} +
Total SST (6%) RM + {{ round($grandTotalTax, 2) }} +
Total Amount RM + {{ round($grandTotal, 2) }} -
From c7e3091f9bae76fa4a63ca90bf953397bd674044 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Tue, 16 Apr 2024 12:49:46 +0800 Subject: [PATCH 4/4] change sst invoice format --- .../pdfs/shipping_invoice_sst_inner.blade.php | 136 +++++++++--------- 1 file changed, 65 insertions(+), 71 deletions(-) diff --git a/resources/views/pages/pdfs/shipping_invoice_sst_inner.blade.php b/resources/views/pages/pdfs/shipping_invoice_sst_inner.blade.php index c0006b1d..eadd5f87 100644 --- a/resources/views/pages/pdfs/shipping_invoice_sst_inner.blade.php +++ b/resources/views/pages/pdfs/shipping_invoice_sst_inner.blade.php @@ -18,7 +18,8 @@ No. 72-3, Jalan Jalil 1,
The Earth Bukit Jalil,
57000 Kuala Lumpur
- Tel: 03-8082 1252 + Tel: 03-8082 1252
+ SST No: W10-2403-32000643
@@ -41,13 +42,6 @@
- - - - Tax Invoice - - - @@ -65,18 +59,18 @@ $addresses = $companyModule->addresses()->where('status', '=', \App\Classes\ValueObjects\Constants\ApprovalStatus::APPROVED)->where('type', '=', \App\Classes\ValueObjects\Constants\AddressType::BILLING)->first(); @endphp @if($addresses) - {{ $addresses->street_one }} - {{ $addresses->street_two }} , - {{ $addresses->district()->first()->name }}, - {{ $addresses->postcode }} - {{ $addresses->state()->first()->name }}, - {{ $addresses->country()->first()->name }} + {{ $addresses->street_one }} + {{ $addresses->street_two }} , + {{ $addresses->district()->first()->name }}, + {{ $addresses->postcode }} + {{ $addresses->state()->first()->name }}, + {{ $addresses->country()->first()->name }} @endif
- @php - $contact = $companyModule->contacts()->first(); - @endphp + @php + $contact = $companyModule->contacts()->first(); + @endphp Phone: {{ $contact ? $contact->phone : '' }}
@@ -87,63 +81,63 @@
- - - - - - - - - + + + + + + + + + - @foreach ($invoice_transaction->transactionDetails as $key => $transaction_detail) - - - - - - - - - - @endforeach + @foreach ($invoice_transaction->transactionDetails as $key => $transaction_detail) + + + + + + + + + + @endforeach - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + +
NoDescriptionQuantityUnit Price (RM)Tax (%)Tax Amount (RM)Total Amount
(RM)
NoDescriptionQtyUnit Price
(RM)
Tax (%)Tax Amount
(RM)
Sub Total
(RM)
{{ $key + 1 }}{!! $transaction_detail->name !!}{{ round($transaction_detail->quantity, 3) }} - {{ round($transaction_detail->price, 2) }} - - {{ round($transaction_detail->tax_percentage, 2) }} - - {{ number_format(round($transaction_detail->tax_amount, 2), 2) }} - - {{ number_format(round($transaction_detail->amount, 2), 2) }} -
{{ $key + 1 }}{!! $transaction_detail->name !!}{{ round($transaction_detail->quantity, 3) }} + {{ round($transaction_detail->price, 2) }} + + {{ round($transaction_detail->tax_percentage, 2) }} + + {{ number_format(round($transaction_detail->tax_amount, 2), 2) }} + + {{ number_format(round($transaction_detail->amount, 2), 2) }} +
Subtotal - {{ number_format(round($invoice_transaction->amount - $invoice_transaction->tax, 2), 2) }} -
Service Charges - {{ number_format(round($invoice_transaction->service_charge, 2), 2) }} -
Tax{{ number_format($invoice_transaction->tax, 2) }}
Total - {{ number_format(round($invoice_transaction->amount, 2), 2) }} -
Subtotal + {{ number_format(round($invoice_transaction->amount - $invoice_transaction->tax, 2), 2) }} +
Service Charges + {{ number_format(round($invoice_transaction->service_charge, 2), 2) }} +
Total SST (6%) RM{{ number_format($invoice_transaction->tax, 2) }}
Total Amount RM + {{ number_format(round($invoice_transaction->amount, 2), 2) }} +