diff --git a/app/Classes/Modules/Bookings/ControllersLogic/UploadPurchaseOrderLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/UploadPurchaseOrderLogic.php index 1a99d852..b4f0a4b8 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/UploadPurchaseOrderLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/UploadPurchaseOrderLogic.php @@ -4,6 +4,7 @@ namespace App\Classes\Modules\Bookings\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\Modules\Bookings\Processors\CreatePurchaseOrderFor1688OrderProcessor; use App\Classes\Modules\Bookings\Services\FetchesBooking; use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; use App\Classes\Modules\Documents\Services\ApprovesDocument; @@ -11,11 +12,15 @@ use App\Classes\Modules\Documents\Services\CreatesDocument; use App\Classes\Modules\Documents\Services\CreatesFiles; use App\Classes\Modules\Documents\Services\FetchesDocument; use App\Classes\Modules\Documents\Services\RejectsDocument; +use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor; +use App\Classes\Modules\Transactions\Processors\CreatePurchaseOrderTransactionProcessor; use App\Classes\Modules\Transactions\Services\FetchesTransaction; +use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\DocumentType; +use App\Classes\ValueObjects\Constants\PaymentMethodType; use App\Classes\ValueObjects\Constants\TransactionType; use App\Models\Document; use Illuminate\Http\JsonResponse; @@ -43,18 +48,23 @@ class UploadPurchaseOrderLogic extends AbstractControllerLogic /** @var CreatesFiles */ private $createsFile; + /** @var CreatePurchaseOrderFor1688OrderProcessor */ + private $createPurchaseOrderFor1688OrderProcessor; + /** * UploadPurchaseOrderLogic constructor. * @param FetchesBooking $fetchesBooking * @param CreatesDocument $createsDocument * @param CreatesFiles $createsFile + * @param CreatePurchaseOrderFor1688OrderProcessor $createPurchaseOrderFor1688OrderProcessor */ - public function __construct(FetchesBooking $fetchesBooking, CreatesDocument $createsDocument, CreatesFiles $createsFile) + public function __construct(FetchesBooking $fetchesBooking, CreatesDocument $createsDocument, CreatesFiles $createsFile, CreatePurchaseOrderFor1688OrderProcessor $createPurchaseOrderFor1688OrderProcessor) { $this->fetchesBooking = $fetchesBooking; $this->createsDocument = $createsDocument; $this->createsFile = $createsFile; + $this->createPurchaseOrderFor1688OrderProcessor = $createPurchaseOrderFor1688OrderProcessor; } /** @@ -74,6 +84,8 @@ class UploadPurchaseOrderLogic extends AbstractControllerLogic $this->createsFile->execute($document, $object); + $this->createPurchaseOrderFor1688OrderProcessor->execute($booking); + return $this->response([]); } diff --git a/app/Classes/Modules/Bookings/Processors/CreatePurchaseOrderFor1688OrderProcessor.php b/app/Classes/Modules/Bookings/Processors/CreatePurchaseOrderFor1688OrderProcessor.php new file mode 100644 index 00000000..aa7f2ed7 --- /dev/null +++ b/app/Classes/Modules/Bookings/Processors/CreatePurchaseOrderFor1688OrderProcessor.php @@ -0,0 +1,73 @@ +generatesTransactionBillNumber = $generatesTransactionBillNumber; + $this->createPurchaseOrderTransactionProcessor = $createPurchaseOrderTransactionProcessor; + $this->updatesTransactionStatus = $updatesTransactionStatus; + $this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor; + } + + public function execute(Booking $booking){ + $billNumber = $this->generatesTransactionBillNumber->execute('PO-'); + + $products = [ + [ + 'description' => 'please refer to the attachment below', + 'quantity' => 1, + 'stockCode' => '', + 'unit_price' => $booking->fix_amount + ] + ]; + + $total = collect($products)->sum(function($product){ + return $product['quantity'] * floatval(str_replace(',', '', $product['unit_price'])); + }); + + $object = new TransactionObject($billNumber, TransactionType::PURCHASE_ORDER, $booking->company->id, 1, + 1, PaymentMethodType::CASH, + $total, $total, $booking->fix_currency_id, $booking->fix_currency_id, + 1, 0, 0, null, ApprovalStatus::PENDING_SUBMISSION, $products); + + $purchaseOrder = $this->createPurchaseOrderTransactionProcessor->execute($booking, $object); + + $this->updatesTransactionStatus->execute($purchaseOrder, ApprovalStatus::APPROVED); + + $this->createInvoiceTransactionProcessor->execute($booking); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php index d6231e0c..ae57a626 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php @@ -6,7 +6,10 @@ use App\Classes\Modules\Documents\Services\CreatesDocument; use App\Classes\Modules\Documents\Services\CreatesFiles; use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\ValueObjects\Constants\DocumentType; +use App\Models\Document; use Meneses\LaravelMpdf\Facades\LaravelMpdf; +use Webklex\PDFMerger\Facades\PDFMergerFacade as PDFMerger; class CreateInvoiceDocumentProcessor { @@ -40,6 +43,24 @@ class CreateInvoiceDocumentProcessor $lowercaseDocumentType = strtolower($document_type); $order_pdf = LaravelMpdf::loadView('pages.pdfs.' . $lowercaseDocumentType, ['transaction' => $transaction, 'po_order_transaction' => $purchaseOrder, 'supplier' => $supplier]); + + if($purchaseOrder->booking->service_id === 4) { + $purchaseOrderDocuments = $purchaseOrder->booking->documents()->where('document_type', DocumentType::ECOMMERCE_PURCHASE_ORDER)->get(); + + + $oMerger = PDFMerger::init(); + $order_pdf->save(storage_path('app/documents/temp.pdf')); + + $oMerger->addPDF(storage_path('app/documents/temp.pdf'), 'all'); + foreach ($purchaseOrderDocuments as $document){ + $oMerger->addPDF(storage_path('app/documents/'.$document->files()->first()->file->file_info->original->file), 'all'); + } + + $oMerger->merge(); + + $order_pdf = $oMerger; + } + $document_object = new DocumentObject( $document_type, [chunk_split('data:application/pdf;base64,' . base64_encode($order_pdf->output()))], @@ -48,7 +69,9 @@ class CreateInvoiceDocumentProcessor $lowercaseDocumentType . 's' ); + /** @var Document $document */ $document = $this->createsDocument->execute($purchaseOrder->booking, $document_object); $this->createsFile->execute($document, $document_object); + } } diff --git a/composer.json b/composer.json index ee759dbb..80a34ede 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,8 @@ "spatie/laravel-permission": "^3.17", "staudenmeir/eloquent-has-many-deep": "^1.7", "timehunter/laravel-google-recaptcha-v3": "~2.5", - "tymon/jwt-auth": "^1.0" + "tymon/jwt-auth": "^1.0", + "webklex/laravel-pdfmerger": "^1.3" }, "require-dev": { "facade/ignition": "^2.0", diff --git a/config/app.php b/config/app.php index 55cdb890..d48e24c6 100644 --- a/config/app.php +++ b/config/app.php @@ -179,7 +179,8 @@ return [ Spatie\Permission\PermissionServiceProvider::class, Barryvdh\DomPDF\ServiceProvider::class, Meneses\LaravelMpdf\LaravelMpdfServiceProvider::class, - TimeHunter\LaravelGoogleReCaptchaV3\Providers\GoogleReCaptchaV3ServiceProvider::class + TimeHunter\LaravelGoogleReCaptchaV3\Providers\GoogleReCaptchaV3ServiceProvider::class, + Webklex\PDFMerger\Providers\PDFMergerServiceProvider::class ], @@ -234,7 +235,8 @@ return [ 'View' => Illuminate\Support\Facades\View::class, 'PDF' => Barryvdh\DomPDF\Facade::class, 'MPDF' => Meneses\LaravelMpdf\Facades\LaravelMpdf::class, - 'GoogleReCaptchaV3'=> TimeHunter\LaravelGoogleReCaptchaV3\Facades\GoogleReCaptchaV3::class + 'GoogleReCaptchaV3'=> TimeHunter\LaravelGoogleReCaptchaV3\Facades\GoogleReCaptchaV3::class, + 'PDFMerger' => Webklex\PDFMerger\Facades\PDFMergerFacade::class ], diff --git a/routes/web.php b/routes/web.php index f20e7a74..b017f298 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,6 @@ whereIn('payment_method', [\App\Classes\ValueObjects\Constants\PaymentMethodType::CASH, \App\Classes\ValueObjects\Constants\PaymentMethodType::BA, \App\Classes\ValueObjects\Constants\PaymentMethodType::CHEQUE])->where('owner_type', Booking::class)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->get(); $i = 0; @@ -375,3 +378,12 @@ Route::get('/payments/manual', function(){ echo ''; }); +Route::get('/1688/fix', function(){ + $purchaseOrderDocuments = \App\Models\Document::where('document_type', DocumentType::ECOMMERCE_PURCHASE_ORDER)->get(); + + foreach($purchaseOrderDocuments as $document){ + if($document->owner->status === ApprovalStatus::COMPLETED) continue; + (App()->make(createPurchaseOrderFor1688OrderProcessor::class))->execute($document->owner); + } +}); +