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..86db0e3f 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::NO_TAX;
+ }
$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..dfe76267 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,14 +196,26 @@ class CheckStorageInvoiceTransactionProcessor
$cbm = $cbm + $quantity;
}
+ $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();
+
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)) {
+ $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
@@ -221,6 +234,12 @@ class CheckStorageInvoiceTransactionProcessor
$price_cbm = $pricePerCBM * $cbm * $resultNumberOfDaysExceeded;
}
+ if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare)) {
+ $taxPercentage = TaxPercentage::SIX_PERCENT;
+ $total_tax = $price_cbm * $taxPercentage / 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,9 +265,10 @@ 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);
+ $this->updateStorageInvoiceTransactionDetails($invoiceTransactionDetails, $destinationWarehousePackage, $cbm, $pricePerCBM, $resultNumberOfDaysExceeded, $taxPercentage);
}
$storageInvoiceId = $storageInvoice->id;
@@ -356,7 +376,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 +390,7 @@ class CheckStorageInvoiceTransactionProcessor
1,
1,
0,
- 0,
+ $totalTax,
0,
null,
ApprovalStatus::APPROVED
@@ -382,18 +402,19 @@ 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.' Marking Container Invoice Date Address Status Amount Container Reference Due Date Total CBM Subtotal Service Charges Tax Total
'.round($packing_list->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum('quantity'), 3).' CTNS - '.round($cbm, 3).' CBM',
$cbm,
- $pricePerCBM * $numberOfDays
+ $pricePerCBM * $numberOfDays,
+ $taxPercentage
);
$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 +428,7 @@ class CheckStorageInvoiceTransactionProcessor
1,
1,
0,
- 0,
+ $totalTax,
0,
null,
ApprovalStatus::APPROVED
@@ -419,12 +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
+ $pricePerCBM * $numberOfDays,
+ $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 c3d20062..dec6dd2f 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,16 @@ 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)) {
+ $taxPercentage = TaxPercentage::SIX_PERCENT;
+ $total_tax = $total_cbm * $taxPercentage / 100;
+ $total_cbm = $total_cbm + $total_tax;
+ }
+
$object = new TransactionObject(
$billNumber,
TransactionType::SHIPPING_INVOICE,
@@ -183,7 +196,7 @@ class CreateInvoiceTransactionProcessor
1,
1,
0,
- 0,
+ $total_tax,
0,
null,
ApprovalStatus::PENDING_SUBMISSION
@@ -196,7 +209,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
);
$this->createsTransactionDetail->execute($invoice_transaction, $object_detail);
@@ -206,7 +220,8 @@ class CreateInvoiceTransactionProcessor
'OVER_WEIGHT_CHARGES',
TransactionDetailType::OVER_WEIGHT_CHARGES,
$over_weight_cbm,
- $price_cbm
+ $price_cbm,
+ $taxPercentage
);
$this->createsTransactionDetail->execute($invoice_transaction, $object_detail);
@@ -217,7 +232,8 @@ class CreateInvoiceTransactionProcessor
'MIN_CBM_CHARGES',
TransactionDetailType::MIN_CBM_CHARGES,
$minimum_charge,
- $price_cbm
+ $price_cbm,
+ $taxPercentage
);
$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..a47336c9
--- /dev/null
+++ b/app/Classes/ValueObjects/Constants/TaxPercentage.php
@@ -0,0 +1,12 @@
+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 @@
-
- Invoice Details
-
Name
+{{product.name}}
+| SST This is generated by computer. No signature required. | +Page {PAGENO} of {nbpg} | +
+
+ |
+
+
+
+ CIEF WORLDWIDE SDN BHD
+
+
+ (1134596-M) + No. 72-3, Jalan Jalil 1, + The Earth Bukit Jalil, + 57000 Kuala Lumpur + Tel: 03-8082 1252 + SST No: W10-2403-32000643 + |
+
+
+
+ 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 }} --}}
+ |
+
| + + 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 : '' }}
+
+ |
+ ||
| No | +Description | +Qty | +Unit 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) }} + | +
| + | 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) }} + | +||||
+
+ |
+
+
+
+ CIEF WORLDWIDE SDN BHD
+
+
+ (1134596-M) + No. 72-3, Jalan Jalil 1, + The Earth Bukit Jalil, + 57000 Kuala Lumpur + Tel: 03-8082 1252 + SST No: W10-2403-32000643 + |
+
+
+
+ Summary
+
+
+
+ @php
+ $companyModule = $invoice_transactions[0]->owner->owner->companyModule;
+ @endphp
+
+ {{-- Date: {{ $invoice_transactions[0]->created_at }} --}}
+ Date: {{ \Carbon\Carbon::now() }}
+ |
+
| + + 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 : '' }}
+
+ |
+ ||
| No | +Invoice No | +Description | +Qty | +Unit Price (RM) |
+ Tax (%) | +Tax Amount (RM) |
+ Sub Total (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) }} + | +
| + | Total Taxable Amount | ++ {{ round($grandSubTotal, 2) }} + | +|||||
| + | Total SST (6%) RM | ++ {{ round($grandTotalTax, 2) }} + | +|||||
| + | Total Amount RM | ++ {{ round($grandTotal, 2) }} + + | +|||||
| This is generated by computer. No signature required. | +Page {PAGENO} of {nbpg} | +