mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/portal.git
synced 2026-08-24 06:54:26 +00:00
New endpoint to add/edit/delete item in shipping invoice
This commit is contained in:
+166
@@ -0,0 +1,166 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Classes\Modules\Transactions\ControllersLogic;
|
||||
|
||||
use App\Models\Transaction;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Meneses\LaravelMpdf\Facades\LaravelMpdf;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\ValueObjects\Constants\TransactionDetailType;
|
||||
use App\Classes\Modules\Documents\DataTransferObjects\FileObject;
|
||||
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransaction;
|
||||
|
||||
use App\Classes\Modules\Transactions\Services\CreatesTransactionDetail;
|
||||
use App\Classes\Modules\Transactions\Services\FetchesTransactionDetail;
|
||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionDetail;
|
||||
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;
|
||||
|
||||
class UpdateShippingInvoiceTransactionLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Update Shipping Invoice Transaction',
|
||||
'message' => 'You have successfully update shipping invoice transaction'
|
||||
];
|
||||
}
|
||||
|
||||
/** @var FetchesPackingList */
|
||||
private $fetchesPackingList;
|
||||
|
||||
/** @var FetchesTransaction */
|
||||
private $fetchesTransaction;
|
||||
|
||||
/** @var UpdatesTransaction */
|
||||
private $updatesTransaction;
|
||||
|
||||
/** @var FetchesTransactionDetail */
|
||||
private $fetchesTransactionDetail;
|
||||
|
||||
/** @var CreatesTransactionDetail */
|
||||
private $createsTransactionDetail;
|
||||
|
||||
/** @var UpdatesTransactionDetail */
|
||||
private $updatesTransactionDetail;
|
||||
|
||||
/** @var DeletesTransactionDetails */
|
||||
private $deletesTransactionDetails;
|
||||
|
||||
public function __construct(
|
||||
FetchesPackingList $fetchesPackingList,
|
||||
FetchesTransaction $fetchesTransaction,
|
||||
UpdatesTransaction $updatesTransaction,
|
||||
FetchesTransactionDetail $fetchesTransactionDetail,
|
||||
CreatesTransactionDetail $createsTransactionDetail,
|
||||
UpdatesTransactionDetail $updatesTransactionDetail,
|
||||
DeletesTransactionDetails $deletesTransactionDetails
|
||||
)
|
||||
{
|
||||
|
||||
$this->fetchesPackingList = $fetchesPackingList;
|
||||
$this->fetchesTransaction = $fetchesTransaction;
|
||||
$this->updatesTransaction = $updatesTransaction;
|
||||
$this->fetchesTransactionDetail = $fetchesTransactionDetail;
|
||||
$this->createsTransactionDetail = $createsTransactionDetail;
|
||||
$this->updatesTransactionDetail = $updatesTransactionDetail;
|
||||
$this->deletesTransactionDetails = $deletesTransactionDetails;
|
||||
}
|
||||
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
$packing_list = $this->fetchesPackingList->execute(['id' => $request->input('packing_list_id')]);
|
||||
|
||||
$invoice_transaction = $packing_list->transactions->where('type', TransactionType::SHIPPING_INVOICE)->first();
|
||||
|
||||
$old_transaction_details = $invoice_transaction->transactionDetails->whereNotIn('reference', ['SHIPPING_FEE', 'OVER_WEIGHT_CHARGES'])->pluck('id')->toArray();
|
||||
|
||||
$new_transaction_details = collect($request->input('transaction_details'));
|
||||
|
||||
$total_cbm = $invoice_transaction->amount;
|
||||
|
||||
foreach($old_transaction_details as $old_transaction_detail_id){
|
||||
$old_transaction_detail = $this->fetchesTransactionDetail->execute(['id' => $old_transaction_detail_id]);
|
||||
|
||||
$total_cbm -= $old_transaction_detail->price;
|
||||
|
||||
if(!$new_transaction_details->contains('id', $old_transaction_detail_id)){
|
||||
$this->deletesTransactionDetails->execute($old_transaction_detail);
|
||||
}
|
||||
}
|
||||
|
||||
foreach($new_transaction_details as $transaction_detail){
|
||||
$transaction_detail = (object) $transaction_detail;
|
||||
$object_detail = new TransactionDetailObject(
|
||||
'CUSTOM_CHARGES',
|
||||
TransactionDetailType::CUSTOM_CHARGES,
|
||||
1,
|
||||
$transaction_detail->price
|
||||
);
|
||||
|
||||
if($transaction_detail->id){
|
||||
$new_transaction_detail = $this->updatesTransactionDetail->execute($this->fetchesTransactionDetail->execute(['id' => $transaction_detail->id]), $object_detail);
|
||||
}else{
|
||||
$new_transaction_detail = $this->createsTransactionDetail->execute($invoice_transaction, $object_detail);
|
||||
}
|
||||
|
||||
$total_cbm += $new_transaction_detail->price;
|
||||
}
|
||||
|
||||
$object = new TransactionObject(
|
||||
$invoice_transaction->bill_no,
|
||||
TransactionType::SHIPPING_INVOICE,
|
||||
1,
|
||||
$invoice_transaction->issuer,
|
||||
1,
|
||||
PaymentMethodType::CASH,
|
||||
$total_cbm,
|
||||
$total_cbm,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
null,
|
||||
ApprovalStatus::PENDING_SUBMISSION
|
||||
);
|
||||
|
||||
/** @var Transaction $invoice_transaction */
|
||||
$invoice_transaction = $this->updatesTransaction->execute($invoice_transaction, $object);
|
||||
|
||||
$document = $invoice_transaction->documents->where('document_type', DocumentType::SHIPPING_INVOICE)->first();
|
||||
|
||||
$files = $document->files;
|
||||
|
||||
$invoice_transaction = $this->fetchesTransaction->execute(['id' => $invoice_transaction->id]);
|
||||
|
||||
$transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice_transaction]);
|
||||
|
||||
$file_object = new FileObject(chunk_split('data:application/pdf;base64,'.base64_encode($transaction_invoice_pdf->output())));
|
||||
|
||||
$filePath = $files[0]->file->path.'/'.$files[0]->file->filename;
|
||||
|
||||
if(Storage::disk('documents')->exists($filePath)){
|
||||
Storage::disk('documents')->delete($filePath);
|
||||
}
|
||||
|
||||
Storage::disk('documents')->put($filePath, $file_object->getDecodedData());
|
||||
|
||||
return $this->response([]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,17 +3,17 @@
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractDeleteRecord;
|
||||
use App\Models\Transaction;
|
||||
use App\Models\TransactionDetail;
|
||||
|
||||
class DeletesTransactionDetails extends AbstractDeleteRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Transaction $model
|
||||
* @param TransactionDetail $model
|
||||
* @return mixed
|
||||
*/
|
||||
public function execute(Transaction $model) {
|
||||
return $model->transactionDetails()->delete();
|
||||
public function execute(TransactionDetail $model) {
|
||||
return $model->delete();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject;
|
||||
use App\Models\TransactionDetail;
|
||||
|
||||
class UpdatesTransactionDetail extends AbstractUpdateRecord
|
||||
{
|
||||
/**
|
||||
* @param TransactionDetail $transactionDetail
|
||||
* @param TransactionDetailObject $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(TransactionDetail $transactionDetail, TransactionDetailObject $object) {
|
||||
$transactionDetail->reference = $object->getReference();
|
||||
$transactionDetail->name = $object->getName();
|
||||
$transactionDetail->quantity = $object->getQuantity();
|
||||
$transactionDetail->price = $object->getPrice();
|
||||
$transactionDetail->amount = $object->getAmount();
|
||||
|
||||
return $this->handler($transactionDetail);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -7,4 +7,6 @@ final class TransactionDetailType {
|
||||
public const SHIPPING_FEE = 'Shipping Fee';
|
||||
|
||||
public const OVER_WEIGHT_CHARGES = 'Over weight charges';
|
||||
|
||||
public const CUSTOM_CHARGES = 'Custom charges';
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Http\Controllers\Transactions;
|
||||
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Classes\Modules\Transactions\ControllersLogic\UpdateShippingInvoiceTransactionLogic;
|
||||
|
||||
|
||||
class UpdateShippingInvoiceTransactionController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param UpdateShippingInvoiceTransactionLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function update(Request $request, UpdateShippingInvoiceTransactionLogic $logic) : JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,8 @@ Route::group(['prefix' => 'transactions', 'namespace' => 'Transactions', 'as' =>
|
||||
|
||||
route::post('/shipping-invoice/create', 'CreateShippingInvoiceTransactionController@create')->name('supplier.create');
|
||||
|
||||
route::put('/shipping-invoice/update', 'UpdateShippingInvoiceTransactionController@update')->name('supplier.update');
|
||||
|
||||
route::post('/shipping-invoice/calculator', 'ShippingEstimationCalculatorController@calculate')->name('shipping.estimation.calculator');
|
||||
|
||||
// Route::group(['prefix' => '{id}/payment', 'as' => 'payment.'], function () {
|
||||
|
||||
Reference in New Issue
Block a user