From e2faeb4bff1bbcf4a94b03ae42abf108777470cb Mon Sep 17 00:00:00 2001 From: ahmedsophyudden Date: Sat, 23 Apr 2022 17:20:07 +0800 Subject: [PATCH 1/6] Add reference in supplier (Settings Ui & Pending Order Ui & API) --- .../Processors/CreateCompanyProcessor.php | 3 ++- .../SupplierPendingOrdersSectionComponent.vue | 4 ++-- .../companies/forms/SupplierFormComponent.vue | 14 +++++++++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php b/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php index fc84e9cc..0f852dda 100644 --- a/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php +++ b/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php @@ -46,9 +46,10 @@ class CreateCompanyProcessor public function execute(Request $request, int $businessType = BusinessType::IMPORTER, ?int $companyType = CompanyType::COMPANY_BUSINESS, ?int $status = ApprovalStatus::PENDING_SUBMISSION): Model { $companyName = $companyType === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'); + $companyReference = $request->input('company_name') ? $request->input('company_name') : mt_rand(1000, 9999).(new GeneratesInitials())->name($companyName)->length(3)->generate(); $company_object = new CompanyObject( $companyName, - mt_rand(1000, 9999).(new GeneratesInitials())->name($companyName)->length(3)->generate(), + $companyReference, $businessType, $companyType, $status); $this->canCreateCompany->passes($company_object); diff --git a/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue b/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue index 5e43314b..a08a16c9 100644 --- a/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue +++ b/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue @@ -12,7 +12,7 @@
- {{selectedSupplier.name}} + {{selectedSupplier.name}} - {{selectedSupplier.reference}}
@@ -31,7 +31,7 @@
-
{{supplier.name}}
+
{{supplier.name}} - {{supplier.reference}}
diff --git a/resources/assets/vue/components/companies/forms/SupplierFormComponent.vue b/resources/assets/vue/components/companies/forms/SupplierFormComponent.vue index 6c346db6..8b53a970 100644 --- a/resources/assets/vue/components/companies/forms/SupplierFormComponent.vue +++ b/resources/assets/vue/components/companies/forms/SupplierFormComponent.vue @@ -22,6 +22,14 @@
+
+
+ + + + +
+
Cancel
@@ -43,6 +51,7 @@ return { parameters: { company_name: '', + company_reference: '', } } }, @@ -50,7 +59,10 @@ parameters: { company_name: { required: true - } + }, + company_reference: { + required: true + }, } }, mixins: [ModalFormHandler] From ac690be428d90c526bfc1fb2a9b18a8b547daf20 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Sun, 24 Apr 2022 12:24:01 +0800 Subject: [PATCH 2/6] Invoice + PO + DO Invoice + PO + DO + SDO --- .../DownloadBookingDocumentLogic.php | 34 +++++++++++++++---- .../bookings/elements/BillingComponent.vue | 9 ++++- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/app/Classes/Modules/Bookings/ControllersLogic/DownloadBookingDocumentLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/DownloadBookingDocumentLogic.php index d8fdb0df..de4b59f1 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/DownloadBookingDocumentLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/DownloadBookingDocumentLogic.php @@ -14,6 +14,7 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; use App\Classes\Exceptions\MalformedRequestException; use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\ValueObjects\Constants\DocumentType; class DownloadBookingDocumentLogic { @@ -26,9 +27,9 @@ class DownloadBookingDocumentLogic */ public function execute(Request $request) { - Auth::login(User::findOrFail(1)); - $zip_file = $request->input('type').'.zip'; + $document_type = str_replace(' ', '', $request->input('type')); + $zip_file = $document_type.'.zip'; $attachment = storage_path().'/app/documents/collections/' . $zip_file; $zip = new ZipArchive(); @@ -36,19 +37,40 @@ class DownloadBookingDocumentLogic $bookings = Booking::where('status', ApprovalStatus::COMPLETED) ->whereDate('created_at', '>=', Carbon::parse($request->input('startDate'))) - ->whereDate('created_at', '<=', Carbon::parse($request->input('endDate')))->whereHas('transactions', function ($query) use ($request){ + ->whereDate('created_at', '<=', Carbon::parse($request->input('endDate'))) + ->whereHas('transactions', function ($query) use ($request){ return $query->where('type', TransactionType::PAYMENT)->whereHas('transactions', function ($query) use ($request){ return $query->where('type', TransactionType::BILL)->where('issuer', $request->input('supplier')); }); })->get(); + if (!count($bookings)) throw new MalformedRequestException('No available file to download'); foreach ($bookings as $booking) { - $file = $booking->documents()->where('document_type', $request->input('type'))->first()->files()->first(); - $zip->addFile(Storage::disk('documents')->path($file->file->file_info->original->file), $booking->created_at->format('d_m_Y') . '_' . $booking->marking . '.pdf'); - } + if ($document_type == 'INVOICEPODO' || $document_type == 'INVOICEPODOSDO') { + $invoice_file = $booking->documents()->where('document_type', DocumentType::INVOICE)->first()->files()->first(); + $purchase_file = $booking->documents()->where('document_type', DocumentType::PURCHASE_ORDER)->first()->files()->first(); + $deliver_file = $booking->documents()->where('document_type', DocumentType::DELIVER_ORDER)->first()->files()->first(); + if ($document_type == 'INVOICEPODOSDO') { + $supplier_deliver_order_file = $booking->documents()->where('document_type', DocumentType::SUPPLIER_DELIVER_ORDER)->first()->files()->first(); + } + + $zip->addFile(Storage::disk('documents')->path($invoice_file->file->file_info->original->file), 'invoice-' . $booking->created_at->format('d_m_Y') . '_' . $booking->marking . '.pdf'); + + $zip->addFile(Storage::disk('documents')->path($purchase_file->file->file_info->original->file), 'purchase-order-' . $booking->created_at->format('d_m_Y') . '_' . $booking->marking . '.pdf'); + + $zip->addFile(Storage::disk('documents')->path($deliver_file->file->file_info->original->file), 'deliver-' . $booking->created_at->format('d_m_Y') . '_' . $booking->marking . '.pdf'); + + $zip->addFile(Storage::disk('documents')->path($supplier_deliver_order_file->file->file_info->original->file), 'supplier-deliver-order-' . $booking->created_at->format('d_m_Y') . '_' . $booking->marking . '.pdf'); + } + else { + $file = $booking->documents()->where('document_type', $document_type)->first()->files()->first(); + $zip->addFile(Storage::disk('documents')->path($file->file->file_info->original->file), $booking->created_at->format('d_m_Y') . '_' . $booking->marking . '.pdf'); + } + + } $zip->close(); while (ob_get_level()) { ob_end_clean(); diff --git a/resources/assets/vue/components/bookings/elements/BillingComponent.vue b/resources/assets/vue/components/bookings/elements/BillingComponent.vue index 70f511ed..f24078ed 100644 --- a/resources/assets/vue/components/bookings/elements/BillingComponent.vue +++ b/resources/assets/vue/components/bookings/elements/BillingComponent.vue @@ -84,7 +84,14 @@ export default { type: 'INVOICE', supplier: null }, - documents: ['INVOICE', 'PURCHASE_ORDER', 'DELIVER_ORDER', 'SUPPLIER_DELIVER_ORDER'], + documents: [ + 'INVOICE', + 'PURCHASE_ORDER', + 'DELIVER_ORDER', + 'SUPPLIER_DELIVER_ORDER', + 'INVOICE + PO + DO', + 'INVOICE + PO + DO + SDO' + ], selectedDocumentStatus: false } }, From 1af96a26cea4e0011f5906226c7b08a9fb3e3f54 Mon Sep 17 00:00:00 2001 From: Uwais Al-Qarni Date: Sun, 24 Apr 2022 23:12:14 +0800 Subject: [PATCH 3/6] refactoring invoice transaction processor --- .../CreateInvoiceDocumentProcessor.php | 69 +++++++++++++++++ .../CreateInvoiceTransactionProcessor.php | 75 +++++-------------- 2 files changed, 86 insertions(+), 58 deletions(-) create mode 100644 app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php new file mode 100644 index 00000000..95aa933d --- /dev/null +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php @@ -0,0 +1,69 @@ +createsDocument = $createsDocument; + $this->createsFile = $createsFile; + } + + /** + * @param Booking $booking + * @return void + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function execute($transaction, $po_order_transaction, $supplier, $document_type) + { + $lowercaseDocumentType = strtolower($document_type); + + if ($document_type !== DocumentType::SUPPLIER_DELIVER_ORDER) { + + $order_pdf = LaravelMpdf::loadView('pages.pdfs.' . $lowercaseDocumentType, ['invoice_transaction' => $transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]); + $document_object = new DocumentObject( + $document_type, + [chunk_split('data:application/pdf;base64,' . base64_encode($order_pdf->output()))], + '', + ApprovalStatus::COMPLETED, + $lowercaseDocumentType . 's' + ); + + } + else { + + $order_pdf = LaravelMpdf::loadView('pages.pdfs.supplier_deliver_order', ['supplier_deliver_order_transaction' => $transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]); + $document_object = new DocumentObject( + $document_type, + [chunk_split('data:application/pdf;base64,'.base64_encode($order_pdf->output()))], + '', + ApprovalStatus::COMPLETED, + $lowercaseDocumentType . 's' + ); + + } + + $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); + $this->createsFile->execute($document, $document_object); + } +} diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php index 5a29a1a2..3f98af4e 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php @@ -55,15 +55,12 @@ class CreateInvoiceTransactionProcessor /** @var FetchesCompany */ private $fetchesCompany; - /** @var CreatesDocument */ - private $createsDocument; - - /** @var CreatesFiles */ - private $createsFile; - /** @var UpdatesBookingStatus */ private $updatesBookingStatus; + /** @var CreateInvoiceDocumentProcessor */ + private $invoiceDocumentProcessor; + /** * CreateInvoiceTransactionProcessor constructor. * @param ListsTransactions $listsTransactions @@ -75,11 +72,10 @@ class CreateInvoiceTransactionProcessor * @param FetchesServiceConfigurations $fetchesServiceConfigurations * @param CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate * @param FetchesCompany $fetchesCompany - * @param CreatesDocument $createsDocument - * @param CreatesFiles $createsFile * @param UpdatesBookingStatus $updatesBookingStatus + * @param CreateInvoiceDocumentProcessor $invoiceDocumentProcessor */ - public function __construct(ListsTransactions $listsTransactions, CreatesTransaction $createsTransaction, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesBookingPaidAmount $calculatesBookingPaidAmount, CalculatesBookingPayableAmount $calculatesBookingPayableAmount, CalculatesBookingTransferredAmount $calculatesBookingTransferredAmount, FetchesServiceConfigurations $fetchesServiceConfigurations, CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate, FetchesCompany $fetchesCompany, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesBookingStatus $updatesBookingStatus) + public function __construct(ListsTransactions $listsTransactions, CreatesTransaction $createsTransaction, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesBookingPaidAmount $calculatesBookingPaidAmount, CalculatesBookingPayableAmount $calculatesBookingPayableAmount, CalculatesBookingTransferredAmount $calculatesBookingTransferredAmount, FetchesServiceConfigurations $fetchesServiceConfigurations, CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate, FetchesCompany $fetchesCompany, UpdatesBookingStatus $updatesBookingStatus, CreateInvoiceTransactionProcessor $invoiceDocumentProcessor) { $this->listsTransactions = $listsTransactions; $this->createsTransaction = $createsTransaction; @@ -90,9 +86,8 @@ class CreateInvoiceTransactionProcessor $this->fetchesServiceConfigurations = $fetchesServiceConfigurations; $this->calculatesBookingCurrencyAverageRate = $calculatesBookingCurrencyAverageRate; $this->fetchesCompany = $fetchesCompany; - $this->createsDocument = $createsDocument; - $this->createsFile = $createsFile; $this->updatesBookingStatus = $updatesBookingStatus; + $this->invoiceDocumentProcessor = $invoiceDocumentProcessor; } @@ -101,7 +96,7 @@ class CreateInvoiceTransactionProcessor * @return void * @throws \App\Classes\Exceptions\MalformedRequestException */ - public function execute(Booking $booking) + public function execute(Booking $booking) { if ($booking->status === ApprovalStatus::COMPLETED) { @@ -116,7 +111,7 @@ class CreateInvoiceTransactionProcessor return; } // confirm that all payments has been transferred - if($this->calculatesBookingTransferredAmount->execute($booking) !== $this->calculatesBookingPaidAmount->execute($booking)){ + if ($this->calculatesBookingTransferredAmount->execute($booking) !== $this->calculatesBookingPaidAmount->execute($booking)) { return; } @@ -127,7 +122,7 @@ class CreateInvoiceTransactionProcessor $constants = SegmentConstant::where('reference', SegmentConstants::SERVICE_TYPE)->where('detail->id', $booking->service->id)->first(); - if($constants->detail->is_billable && !$po_order_transaction) { + if ($constants->detail->is_billable && !$po_order_transaction) { return; } @@ -170,42 +165,14 @@ class CreateInvoiceTransactionProcessor $supplier = $this->fetchesCompany->execute(['id' => $transaction->receiver]); - $purchase_order_pdf = LaravelMpdf::loadView('pages.pdfs.purchase_order', ['invoice_transaction' => $invoice_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]); - $document_object = new DocumentObject( - DocumentType::PURCHASE_ORDER, - [chunk_split('data:application/pdf;base64,'.base64_encode($purchase_order_pdf->output()))], - '', - ApprovalStatus::COMPLETED, - 'purchase_orders' - ); - /** @var Document $document */ - $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); - $this->createsFile->execute($document, $document_object); + // purchase order + $this->invoiceDocumentProcessor->execute($invoice_transaction, $po_order_transaction, $supplier, DocumentType::PURCHASE_ORDER); - $deliver_order_pdf = LaravelMpdf::loadView('pages.pdfs.deliver_order', ['invoice_transaction' => $invoice_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]); - $document_object = new DocumentObject( - DocumentType::DELIVER_ORDER, - [chunk_split('data:application/pdf;base64,'.base64_encode($deliver_order_pdf->output()))], - '', - ApprovalStatus::COMPLETED, - 'delivery_orders' - ); + // deliver order + $this->invoiceDocumentProcessor->execute($invoice_transaction, $po_order_transaction, $supplier, DocumentType::DELIVER_ORDER); - /** @var Document $document */ - $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); - $this->createsFile->execute($document, $document_object); - - - $invoice_pdf = LaravelMpdf::loadView('pages.pdfs.invoice', ['invoice_transaction' => $invoice_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]); - $document_object = new DocumentObject( - DocumentType::INVOICE, - [chunk_split('data:application/pdf;base64,'.base64_encode($invoice_pdf->output()))], - '', - ApprovalStatus::COMPLETED, - 'invoices' - ); - $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); - $this->createsFile->execute($document, $document_object); + // invoice + $this->invoiceDocumentProcessor->execute($invoice_transaction, $po_order_transaction, $supplier, DocumentType::INVOICE); $billNumber = $this->generatesTransactionBillNumber->execute('SPDO-'); @@ -233,16 +200,8 @@ class CreateInvoiceTransactionProcessor ); $supplier_deliver_order_transaction = $this->createsTransaction->execute($po_order_transaction->booking, $transaction_object); - $supplier_order_pdf = LaravelMpdf::loadView('pages.pdfs.supplier_deliver_order', ['supplier_deliver_order_transaction' => $supplier_deliver_order_transaction, 'po_order_transaction' => $po_order_transaction, 'supplier' => $supplier]); - $document_object = new DocumentObject( - DocumentType::SUPPLIER_DELIVER_ORDER, - [chunk_split('data:application/pdf;base64,'.base64_encode($supplier_order_pdf->output()))], - '', - ApprovalStatus::COMPLETED, - 'supplier_delivery_orders' - ); - $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); - $this->createsFile->execute($document, $document_object); + // supply deliver order + $this->invoiceDocumentProcessor->execute($supplier_deliver_order_transaction, $po_order_transaction, $supplier, DocumentType::SUPPLIER_DELIVER_ORDER); $this->updatesBookingStatus->execute($booking, ApprovalStatus::COMPLETED); } From 32cea19480c6403cef69edc860226ebfca129ee1 Mon Sep 17 00:00:00 2001 From: ahmedsophyudden Date: Mon, 25 Apr 2022 07:19:03 +0800 Subject: [PATCH 4/6] Fix bug reference in supplier (Settings Ui & Pending Order Ui & API) --- .../vue/components/companies/elements/SupplierComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/companies/elements/SupplierComponent.vue b/resources/assets/vue/components/companies/elements/SupplierComponent.vue index a2e45bd7..19cf37c2 100644 --- a/resources/assets/vue/components/companies/elements/SupplierComponent.vue +++ b/resources/assets/vue/components/companies/elements/SupplierComponent.vue @@ -18,7 +18,7 @@
-
{{item.name}}
+
{{item.name}} - {{item.reference}}
From 2e3a94e4f443e9c0674adf88a92b7f605c26666b Mon Sep 17 00:00:00 2001 From: ahmedsophyudden Date: Mon, 25 Apr 2022 08:34:40 +0800 Subject: [PATCH 5/6] Fix bug reference in supplier (Settings Ui & Pending Order Ui & API) --- .../Modules/Companies/Processors/CreateCompanyProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php b/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php index 0f852dda..3579e46a 100644 --- a/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php +++ b/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php @@ -46,7 +46,7 @@ class CreateCompanyProcessor public function execute(Request $request, int $businessType = BusinessType::IMPORTER, ?int $companyType = CompanyType::COMPANY_BUSINESS, ?int $status = ApprovalStatus::PENDING_SUBMISSION): Model { $companyName = $companyType === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'); - $companyReference = $request->input('company_name') ? $request->input('company_name') : mt_rand(1000, 9999).(new GeneratesInitials())->name($companyName)->length(3)->generate(); + $companyReference = $request->input('company_referece') ? $request->input('company_referece') : mt_rand(1000, 9999).(new GeneratesInitials())->name($companyName)->length(3)->generate(); $company_object = new CompanyObject( $companyName, $companyReference, From 4cce57874f2b336d45ea933c906461f7189ceef9 Mon Sep 17 00:00:00 2001 From: ahmedsophyudden Date: Mon, 25 Apr 2022 08:40:46 +0800 Subject: [PATCH 6/6] Fix bug reference in supplier (Settings Ui & Pending Order Ui & API) --- .../Modules/Companies/Processors/CreateCompanyProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php b/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php index 3579e46a..ad9abeb8 100644 --- a/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php +++ b/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php @@ -46,7 +46,7 @@ class CreateCompanyProcessor public function execute(Request $request, int $businessType = BusinessType::IMPORTER, ?int $companyType = CompanyType::COMPANY_BUSINESS, ?int $status = ApprovalStatus::PENDING_SUBMISSION): Model { $companyName = $companyType === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'); - $companyReference = $request->input('company_referece') ? $request->input('company_referece') : mt_rand(1000, 9999).(new GeneratesInitials())->name($companyName)->length(3)->generate(); + $companyReference = $request->input('company_reference') ? $request->input('company_reference') : mt_rand(1000, 9999).(new GeneratesInitials())->name($companyName)->length(3)->generate(); $company_object = new CompanyObject( $companyName, $companyReference,