diff --git a/app/Classes/Jobs/Commands/V2/FixInvoiceV2CommandJob.php b/app/Classes/Jobs/Commands/V2/FixInvoiceV2CommandJob.php index 4ea664f1..c5fd2449 100644 --- a/app/Classes/Jobs/Commands/V2/FixInvoiceV2CommandJob.php +++ b/app/Classes/Jobs/Commands/V2/FixInvoiceV2CommandJob.php @@ -8,16 +8,12 @@ use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; -use App\Classes\Modules\Documents\Services\CreatesDocument; -use App\Classes\Modules\Documents\Services\CreatesFiles; use App\Classes\Modules\Jobs\DataTransferObjects\FixInvoiceV2CommandObject; -use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\Modules\Transactions\Processors\CreateShippingInvoiceTransactionDocProcessor; use App\Classes\ValueObjects\Constants\DocumentType; use App\Classes\ValueObjects\Constants\TransactionType; use App\Models\CompanyConnection; use App\Models\Order; -use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; use Illuminate\Support\Facades\Log; class FixInvoiceV2CommandJob implements ShouldQueue @@ -52,29 +48,10 @@ class FixInvoiceV2CommandJob implements ShouldQueue dump($invoice->id); - $invoice->documents()->delete(); + // $invoice->documents()->delete(); + $invoice->documents()->where('document_type', DocumentType::SHIPPING_EINVOICE)->delete(); - $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()))], - '', - ApprovalStatus::COMPLETED, - 'shipping_invoice' - ); - - /** @var Document $document */ - $document = (App()->make(CreatesDocument::class))->execute($invoice, $document_object); - - (App()->make(CreatesFiles::class))->execute($document, $document_object); + (App()->make(CreateShippingInvoiceTransactionDocProcessor::class))->execute($invoice); } } diff --git a/app/Classes/Modules/Transactions/ControllersLogic/RegenerateShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateShippingInvoiceTransactionLogic.php index 352b3373..16ce4533 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/RegenerateShippingInvoiceTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateShippingInvoiceTransactionLogic.php @@ -4,18 +4,12 @@ namespace App\Classes\Modules\Transactions\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; -use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; -use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\DocumentType; use App\Classes\ValueObjects\Constants\TransactionType; use App\Models\Order; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -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; +use App\Classes\Modules\Transactions\Processors\CreateShippingInvoiceTransactionDocProcessor; class RegenerateShippingInvoiceTransactionLogic extends AbstractControllerLogic { @@ -29,19 +23,15 @@ class RegenerateShippingInvoiceTransactionLogic extends AbstractControllerLogic ]; } - /** @var CreatesDocument */ - private $createsDocument; - - /** @var CreatesFiles */ - private $createsFiles; + /** @var CreateShippingInvoiceTransactionDocProcessor */ + private $createShippingInvoiceTransactionDocProcessor; /** - * @param CreatesDocument $createsDocument + * @param CreateShippingInvoiceTransactionDocProcessor $createShippingInvoiceTransactionDocProcessor */ - public function __construct(CreatesDocument $createsDocument, CreatesFiles $createsFiles) + public function __construct(CreateShippingInvoiceTransactionDocProcessor $createShippingInvoiceTransactionDocProcessor) { - $this->createsDocument = $createsDocument; - $this->createsFiles = $createsFiles; + $this->createShippingInvoiceTransactionDocProcessor = $createShippingInvoiceTransactionDocProcessor; } public function logic(Request $request) : JsonResponse @@ -53,28 +43,10 @@ class RegenerateShippingInvoiceTransactionLogic extends AbstractControllerLogic $invoices = $order->transactions()->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get(); foreach ($invoices as $invoice){ - $invoice->documents()->delete(); + // $invoice->documents()->delete(); + $invoice->documents()->where('document_type', DocumentType::SHIPPING_EINVOICE)->delete(); - $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()))], - '', - ApprovalStatus::COMPLETED, - 'shipping_invoice' - ); - - $document =$this->createsDocument->execute($invoice, $document_object); - - $this->createsFiles->execute($document, $document_object); + $this->createShippingInvoiceTransactionDocProcessor->execute($invoice); // dump($document); } @@ -82,5 +54,4 @@ class RegenerateShippingInvoiceTransactionLogic extends AbstractControllerLogic return $this->response([]); } - } diff --git a/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleSalesOrderLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleSalesOrderLogic.php new file mode 100644 index 00000000..32dc4b78 --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleSalesOrderLogic.php @@ -0,0 +1,53 @@ + 'Regenerate Sales Order', + 'message' => 'You have successfully regenerated sales order' + ]; + } + + + /** @var FetchesTransaction */ + private $fetchesTransaction; + + /** @var CreateSalesOrderDocProcessor */ + private $createSalesOrderDocProcessor; + + /** + * @param FetchesTransaction $fetchesTransaction + * @param CreateSalesOrderDocProcessor $createSalesOrderDocProcessor + */ + public function __construct(FetchesTransaction $fetchesTransaction, CreateSalesOrderDocProcessor $createSalesOrderDocProcessor) + { + $this->fetchesTransaction = $fetchesTransaction; + $this->createSalesOrderDocProcessor = $createSalesOrderDocProcessor; + } + + public function logic(Request $request) : JsonResponse + { + $invoice = $this->fetchesTransaction->execute(['id' => $request->route('invoice_id')]); + + $invoice->documents()->where('document_type', DocumentType::SALES_ORDER)->delete(); + + $this->createSalesOrderDocProcessor->execute($invoice); + + return $this->response([]); + } + +} diff --git a/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingEInvoiceLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingEInvoiceLogic.php new file mode 100644 index 00000000..044894f7 --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingEInvoiceLogic.php @@ -0,0 +1,53 @@ + 'Regenerate Shipping E-Invoice', + 'message' => 'You have successfully regenerated shipping e-invoice' + ]; + } + + + /** @var FetchesTransaction */ + private $fetchesTransaction; + + /** @var CreateShippingEInvoiceDocProcessor */ + private $createShippingEInvoiceDocProcessor; + + /** + * @param FetchesTransaction $fetchesTransaction + * @param CreateShippingEInvoiceDocProcessor $createShippingEInvoiceDocProcessor + */ + public function __construct(FetchesTransaction $fetchesTransaction, CreateShippingEInvoiceDocProcessor $createShippingEInvoiceDocProcessor) + { + $this->fetchesTransaction = $fetchesTransaction; + $this->createShippingEInvoiceDocProcessor = $createShippingEInvoiceDocProcessor; + } + + public function logic(Request $request) : JsonResponse + { + $invoice = $this->fetchesTransaction->execute(['id' => $request->route('invoice_id')]); + + $invoice->documents()->where('document_type', DocumentType::SHIPPING_EINVOICE)->delete(); + + $this->createShippingEInvoiceDocProcessor->execute($invoice); + + return $this->response([]); + } + +} diff --git a/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingInvoiceTransactionLogic.php index 272a2a54..42d1ff6c 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingInvoiceTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/RegenerateSingleShippingInvoiceTransactionLogic.php @@ -4,19 +4,11 @@ namespace App\Classes\Modules\Transactions\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; -use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; -use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\DocumentType; -use App\Classes\ValueObjects\Constants\TransactionType; -use App\Models\Order; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; -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; +use App\Classes\Modules\Transactions\Processors\CreateShippingInvoiceTransactionDocProcessor; class RegenerateSingleShippingInvoiceTransactionLogic extends AbstractControllerLogic { @@ -30,51 +22,30 @@ class RegenerateSingleShippingInvoiceTransactionLogic extends AbstractController ]; } - /** @var CreatesDocument */ - private $createsDocument; - - /** @var CreatesFiles */ - private $createsFiles; - /** @var FetchesTransaction */ private $fetchesTransaction; + /** @var CreateShippingInvoiceTransactionDocProcessor */ + private $createShippingInvoiceTransactionDocProcessor; + /** - * @param CreatesDocument $createsDocument + * @param FetchesTransaction $fetchesTransaction + * @param CreateShippingInvoiceTransactionDocProcessor $createShippingInvoiceTransactionDocProcessor */ - public function __construct(CreatesDocument $createsDocument, CreatesFiles $createsFiles, FetchesTransaction $fetchesTransaction) + public function __construct(FetchesTransaction $fetchesTransaction, CreateShippingInvoiceTransactionDocProcessor $createShippingInvoiceTransactionDocProcessor) { - $this->createsDocument = $createsDocument; - $this->createsFiles = $createsFiles; $this->fetchesTransaction = $fetchesTransaction; + $this->createShippingInvoiceTransactionDocProcessor = $createShippingInvoiceTransactionDocProcessor; } public function logic(Request $request) : JsonResponse { $invoice = $this->fetchesTransaction->execute(['id' => $request->route('invoice_id')]); - $invoice->documents()->delete(); + // $invoice->documents()->delete(); + $invoice->documents()->where('document_type', DocumentType::SHIPPING_INVOICE)->delete(); - $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()))], - '', - ApprovalStatus::COMPLETED, - 'shipping_invoice' - ); - - $document =$this->createsDocument->execute($invoice, $document_object); - - $this->createsFiles->execute($document, $document_object); + $this->createShippingInvoiceTransactionDocProcessor->execute($invoice); // dump($document); diff --git a/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php index 6b2cae0e..2531f112 100644 --- a/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php @@ -8,18 +8,15 @@ use App\Classes\Notifications\InvoiceIssuedEmail; use App\Models\Document; use App\Models\PackingList; use App\Models\Transaction; -use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; -use App\Classes\ValueObjects\Constants\DocumentType; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\TransactionType; -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 App\Classes\Jobs\CreatePerfexCRMInvoice; use App\Classes\Modules\Transactions\Processors\CheckStorageInvoiceTransactionProcessor; +use App\Classes\Modules\Transactions\Processors\CreateShippingInvoiceTransactionDocProcessor; +use App\Classes\Modules\Transactions\Processors\CreateShippingEInvoiceDocProcessor; +use App\Classes\Modules\Transactions\Processors\CreateSalesOrderDocProcessor; use App\Models\Order; -use Carbon\Carbon; +use Illuminate\Support\Facades\Log; class ApproveShippingInvoiceTransactionProcessor { @@ -27,27 +24,32 @@ class ApproveShippingInvoiceTransactionProcessor /** @var UpdatesTransactionStatus */ private $updatesTransactionStatus; - /** @var CreatesDocument */ - private $createsDocument; - - /** @var CreatesFiles */ - private $createsFiles; - /** @var CheckStorageInvoiceTransactionProcessor */ private $storageInvoiceTransactionProcessor; + /** @var CreateShippingInvoiceTransactionDocProcessor */ + private $createShippingInvoiceTransactionDocProcessor; + + /** @var CreateSalesOrderDocProcessor */ + private $createSalesOrderDocProcessor; + + /** @var CreateShippingEInvoiceDocProcessor */ + private $createShippingEInvoiceDocProcessor; /** * @param UpdatesTransactionStatus $updatesTransactionStatus - * @param CreatesDocument $createsDocument - * @param CreatesFiles $createsFiles + * @param CheckStorageInvoiceTransactionProcessor $storageInvoiceTransactionProcessor + * @param CreateShippingInvoiceTransactionDocProcessor $createShippingInvoiceTransactionDocProcessor + * @param CreateSalesOrderDocProcessor $createSalesOrderDocProcessor + * @param CreateShippingEInvoiceDocProcessor $createShippingEInvoiceDocProcessor */ - public function __construct(UpdatesTransactionStatus $updatesTransactionStatus, CreatesDocument $createsDocument, CreatesFiles $createsFiles, CheckStorageInvoiceTransactionProcessor $storageInvoiceTransactionProcessor) + public function __construct(UpdatesTransactionStatus $updatesTransactionStatus, CheckStorageInvoiceTransactionProcessor $storageInvoiceTransactionProcessor, CreateShippingInvoiceTransactionDocProcessor $createShippingInvoiceTransactionDocProcessor, CreateSalesOrderDocProcessor $createSalesOrderDocProcessor, CreateShippingEInvoiceDocProcessor $createShippingEInvoiceDocProcessor) { $this->updatesTransactionStatus = $updatesTransactionStatus; - $this->createsDocument = $createsDocument; - $this->createsFiles = $createsFiles; $this->storageInvoiceTransactionProcessor = $storageInvoiceTransactionProcessor; + $this->createShippingInvoiceTransactionDocProcessor = $createShippingInvoiceTransactionDocProcessor; + $this->createSalesOrderDocProcessor = $createSalesOrderDocProcessor; + $this->createShippingEInvoiceDocProcessor = $createShippingEInvoiceDocProcessor; } @@ -60,33 +62,25 @@ 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'; - } + $companyModule = $invoice_transaction->owner->owner->companyModule; + Log::info('company module einvoice: ' . json_encode($companyModule->company->e_invoice)); + if($companyModule->company->e_invoice) + { + $this->createShippingEInvoiceDocProcessor->execute($invoice_transaction); + } + else{ + $this->createShippingInvoiceTransactionDocProcessor->execute($invoice_transaction); + } + $this->createSalesOrderDocProcessor->execute($invoice_transaction); $this->updatesTransactionStatus->execute($invoice_transaction, ApprovalStatus::APPROVED); - $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice_transaction]); - - $document_object = new DocumentObject( - DocumentType::SHIPPING_INVOICE, - [chunk_split('data:application/pdf;base64,'.base64_encode($transaction_invoice_pdf->output()))], - '', - ApprovalStatus::COMPLETED, - 'shipping_invoice' - ); - - /** @var Document $document */ - $document = $this->createsDocument->execute($invoice_transaction, $document_object); - - $this->createsFiles->execute($document, $document_object); - $user = $packingList->owner->companyModule->employees()->first(); - if(app()->environment(['production'])) { - $user->notify(new InvoiceIssuedEmail($user, $packingList)); - } + //cief todo: 90 - to determine if sending email is necessary + // if(app()->environment(['production'])) { + // $companyModule = $packingList->owner->companyModule; + // $user = $companyModule->employees()->first(); + // $user->notify(new InvoiceIssuedEmail($user, $packingList)); + // } $order = $packingList->owner()->first(); if($order instanceof Order){ @@ -95,5 +89,4 @@ class ApproveShippingInvoiceTransactionProcessor return; } - } diff --git a/app/Classes/Modules/Transactions/Processors/CreateSalesOrderDocProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateSalesOrderDocProcessor.php new file mode 100644 index 00000000..897efa8a --- /dev/null +++ b/app/Classes/Modules/Transactions/Processors/CreateSalesOrderDocProcessor.php @@ -0,0 +1,65 @@ +createsDocument = $createsDocument; + $this->createsFiles = $createsFiles; + } + + + /** + * @throws MalformedRequestException + */ + public function execute(Transaction $invoice_transaction) + { + $view = 'pages.pdfs.sales_order'; + + $companyModule = $invoice_transaction->owner->owner->companyModule; + $user = $companyModule->employees()->first(); + $brn = $companyModule->company->documents->where('document_type', DocumentType::SSM_REGISTRATION)->first(); + $documentDate = $invoice_transaction->created_at; + $documentIdentifierPrefix = 'S/O No: '; + $documentIdentifier = 'SO-'.$invoice_transaction->bill_no; + $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice_transaction, 'brn' => $brn, 'document_date' => $documentDate, 'document_identifier' => $documentIdentifier, 'document_identifier_prefix' => $documentIdentifierPrefix]); + + $document_object = new DocumentObject( + DocumentType::SALES_ORDER, + [chunk_split('data:application/pdf;base64,'.base64_encode($transaction_invoice_pdf->output()))], + '', + ApprovalStatus::COMPLETED, + 'sales_order' + ); + + /** @var Document $document */ + $document =$this->createsDocument->execute($invoice_transaction, $document_object); + + $this->createsFiles->execute($document, $document_object); + } +} diff --git a/app/Classes/Modules/Transactions/Processors/CreateShippingEInvoiceDocProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateShippingEInvoiceDocProcessor.php new file mode 100644 index 00000000..37d80156 --- /dev/null +++ b/app/Classes/Modules/Transactions/Processors/CreateShippingEInvoiceDocProcessor.php @@ -0,0 +1,66 @@ +createsDocument = $createsDocument; + $this->createsFiles = $createsFiles; + } + + + /** + * @throws MalformedRequestException + */ + public function execute(Transaction $invoice_transaction) + { + $view = 'pages.pdfs.shipping_einvoice'; + + $companyModule = $invoice_transaction->owner->owner->companyModule; + $user = $companyModule->employees()->first(); + $brn = $companyModule->company->documents->where('document_type', DocumentType::SSM_REGISTRATION)->first(); + $lastDayOfMonth = $invoice_transaction->created_at->copy()->endOfMonth(); + $documentDate = $lastDayOfMonth; + $documentIdentifierPrefix = 'EI#: '; + $documentIdentifier = 'NONE'; + $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice_transaction, 'brn' => $brn, 'document_date' => $documentDate, 'document_identifier' => $documentIdentifier, 'document_identifier_prefix' => $documentIdentifierPrefix]); + + $document_object = new DocumentObject( + DocumentType::SHIPPING_EINVOICE, + [chunk_split('data:application/pdf;base64,'.base64_encode($transaction_invoice_pdf->output()))], + '', + ApprovalStatus::COMPLETED, + 'shipping_einvoice' + ); + + /** @var Document $document */ + $document =$this->createsDocument->execute($invoice_transaction, $document_object); + + $this->createsFiles->execute($document, $document_object); + } +} diff --git a/app/Classes/Modules/Transactions/Processors/CreateShippingInvoiceTransactionDocProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateShippingInvoiceTransactionDocProcessor.php new file mode 100644 index 00000000..6a41291c --- /dev/null +++ b/app/Classes/Modules/Transactions/Processors/CreateShippingInvoiceTransactionDocProcessor.php @@ -0,0 +1,75 @@ +createsDocument = $createsDocument; + $this->createsFiles = $createsFiles; + } + + + /** + * @throws MalformedRequestException + */ + public function execute(Transaction $invoice_transaction) + { + $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'; + } + + $eInvoiceStartDate = Carbon::parse(env('E_INVOICE_START_DATE', '2025-07-01 00:00:00')); + if ($shippingInvoiceTransactionCreatedDate->isAfter($eInvoiceStartDate)) { + $view = 'pages.pdfs.shipping_invoice_sst_v2'; + } + + $companyModule = $invoice_transaction->owner->owner->companyModule; + $user = $companyModule->employees()->first(); + $brn = $companyModule->company->documents->where('document_type', DocumentType::SSM_REGISTRATION)->first(); + $documentDate = $invoice_transaction->created_at; + $documentIdentifierPrefix = 'Invoice No: '; + $documentIdentifier = $invoice_transaction->bill_no; + $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['invoice_transaction' => $invoice_transaction, 'brn' => $brn, 'document_date' => $documentDate, 'document_identifier' => $documentIdentifier, 'document_identifier_prefix' => $documentIdentifierPrefix]); + + $document_object = new DocumentObject( + DocumentType::SHIPPING_INVOICE, + [chunk_split('data:application/pdf;base64,'.base64_encode($transaction_invoice_pdf->output()))], + '', + ApprovalStatus::COMPLETED, + 'shipping_invoice' + ); + + /** @var Document $document */ + $document =$this->createsDocument->execute($invoice_transaction, $document_object); + + $this->createsFiles->execute($document, $document_object); + } +} diff --git a/app/Classes/ValueObjects/Constants/DocumentType.php b/app/Classes/ValueObjects/Constants/DocumentType.php index 5b084565..1463abd2 100644 --- a/app/Classes/ValueObjects/Constants/DocumentType.php +++ b/app/Classes/ValueObjects/Constants/DocumentType.php @@ -25,5 +25,6 @@ final class DocumentType { public const SHIPPING_INVOICE = 'SHIPPING_INVOICE'; public const STORAGE_INVOICE = 'STORAGE_INVOICE'; - + public const SALES_ORDER = 'SALES_ORDER'; + public const SHIPPING_EINVOICE = 'SHIPPING_EINVOICE'; } diff --git a/app/Console/Commands/FixInvoice.php b/app/Console/Commands/FixInvoice.php index 3136d940..203a002d 100644 --- a/app/Console/Commands/FixInvoice.php +++ b/app/Console/Commands/FixInvoice.php @@ -7,6 +7,7 @@ use App\Classes\Modules\Documents\Services\CreatesDocument; use App\Classes\Modules\Documents\Services\CreatesFiles; use App\Classes\Modules\PackingLists\Services\ListsPackingLists; use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor; +use App\Classes\Modules\Transactions\Processors\CreateShippingInvoiceTransactionDocProcessor; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\DocumentType; use App\Classes\ValueObjects\Constants\TransactionType; @@ -61,29 +62,10 @@ class FixInvoice extends Command dump($invoice->id); - $invoice->documents()->delete(); + // $invoice->documents()->delete(); + $invoice->documents()->where('document_type', DocumentType::SHIPPING_EINVOICE)->delete(); - $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()))], - '', - ApprovalStatus::COMPLETED, - 'shipping_invoice' - ); - - /** @var Document $document */ - $document = (App()->make(CreatesDocument::class))->execute($invoice, $document_object); - - (App()->make(CreatesFiles::class))->execute($document, $document_object); + (App()->make(CreateShippingInvoiceTransactionDocProcessor::class))->execute($invoice); } } } diff --git a/app/Http/Controllers/Reports/MonthlyReportController.php b/app/Http/Controllers/Reports/MonthlyReportController.php index 590723ce..2a14d443 100644 --- a/app/Http/Controllers/Reports/MonthlyReportController.php +++ b/app/Http/Controllers/Reports/MonthlyReportController.php @@ -45,7 +45,10 @@ class MonthlyReportController }); $packages = $packingLists->map(function ($packingList) { - $replica = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]) ? $packingList : $packingList->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST_REPLICA)->first(); + $userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + + $replica = $exceptionUsers ? $packingList : $packingList->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST_REPLICA)->first(); return $replica ? $replica : $packingList; })->flatMap(function ($packingList) { return $packingList->packages; @@ -107,7 +110,9 @@ class MonthlyReportController }); $packages = $packingLists->map(function ($packingList) { - $replica = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]) ? $packingList : $packingList->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST_REPLICA)->first(); + $userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + $replica = $exceptionUsers ? $packingList : $packingList->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST_REPLICA)->first(); return $replica ? $replica : $packingList; })->flatMap(function ($packingList) { return $packingList->packages; diff --git a/app/Http/Controllers/Transactions/RegenerateSingleShippingInvoiceTransactionController.php b/app/Http/Controllers/Transactions/RegenerateSingleShippingInvoiceTransactionController.php index 1607b327..2c0277f6 100644 --- a/app/Http/Controllers/Transactions/RegenerateSingleShippingInvoiceTransactionController.php +++ b/app/Http/Controllers/Transactions/RegenerateSingleShippingInvoiceTransactionController.php @@ -6,7 +6,8 @@ namespace App\Http\Controllers\Transactions; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use App\Classes\Modules\Transactions\ControllersLogic\RegenerateSingleShippingInvoiceTransactionLogic; - +use App\Classes\Modules\Transactions\ControllersLogic\RegenerateSingleSalesOrderLogic; +use App\Classes\Modules\Transactions\ControllersLogic\RegenerateSingleShippingEInvoiceLogic; class RegenerateSingleShippingInvoiceTransactionController { @@ -18,4 +19,22 @@ class RegenerateSingleShippingInvoiceTransactionController public function regenerate(Request $request, RegenerateSingleShippingInvoiceTransactionLogic $logic) : JsonResponse { return $logic->execute($request); } + + /** + * @param Request $request + * @param RegenerateSingleSalesOrderLogic $logic + * @return JsonResponse + */ + public function regenerateSalesOrder(Request $request, RegenerateSingleSalesOrderLogic $logic) : JsonResponse { + return $logic->execute($request); + } + + /** + * @param Request $request + * @param RegenerateSingleShippingEInvoiceLogic $logic + * @return JsonResponse + */ + public function regenerateEInvoice(Request $request, RegenerateSingleShippingEInvoiceLogic $logic) : JsonResponse { + return $logic->execute($request); + } } diff --git a/app/Http/Resources/OrderV2Resource.php b/app/Http/Resources/OrderV2Resource.php index 4e5f751a..5083a919 100644 --- a/app/Http/Resources/OrderV2Resource.php +++ b/app/Http/Resources/OrderV2Resource.php @@ -4,9 +4,7 @@ namespace App\Http\Resources; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\OrderRoleTypes; -use App\Classes\ValueObjects\Constants\PackingListType; use App\Classes\ValueObjects\Constants\TransactionType; -use App\Classes\ValueObjects\Constants\TransportType; use Carbon\Carbon; use Illuminate\Http\Resources\Json\JsonResource; @@ -20,6 +18,14 @@ class OrderV2Resource extends JsonResource */ public function toArray($request) { + $eInvoice = false; + $eInvoiceStartDate = Carbon::parse(env('E_INVOICE_START_DATE', '2025-07-01 00:00:00')); + $orderCreatedDate = Carbon::parse($this->created_at); + $eInvoiceRequestedDate = Carbon::parse($this->companyModule->company->e_invoice_requested_at); + if ($orderCreatedDate->isAfter($eInvoiceStartDate) && $this->companyModule->company->e_invoice === 1) { //&& $bookingCreatedDate->diffInMinutes($eInvoiceRequestedDate) <= 480 cief todo: 90 + $eInvoice = true; + } + return [ 'id' => $this->id, 'reference' => $this->reference, @@ -36,7 +42,8 @@ class OrderV2Resource extends JsonResource 'storages' => $this->storages ? $this->storages : null, //from middleware 'remarks' => RemarkResource::collection($this->remarks), 'supplier_tax_rebate' => SupplierTaxRebateResource::collection($this->supplierTaxRebate), - 'created_at' => $this->created_at->format('d-m-Y') + 'created_at' => $this->created_at->format('d-m-Y'), + 'is_einvoice_applicable' => $eInvoice, ]; } diff --git a/app/Http/Resources/PackageBaseResource.php b/app/Http/Resources/PackageBaseResource.php index b15e3f7d..bf9b2f7d 100644 --- a/app/Http/Resources/PackageBaseResource.php +++ b/app/Http/Resources/PackageBaseResource.php @@ -3,7 +3,6 @@ namespace App\Http\Resources; use App\Classes\ValueObjects\Constants\RoleTypes; -use App\Models\Order; use App\Models\PackingList; use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Support\Facades\Crypt; @@ -18,7 +17,9 @@ class PackageBaseResource extends JsonResource */ public function toArray($request) { - $exceptionUsers = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + // $exceptionUsers = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + $userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); $data = [ 'id' => $this->id, diff --git a/app/Http/Resources/PackingListBaseResource.php b/app/Http/Resources/PackingListBaseResource.php index 4d200e15..a29f174a 100644 --- a/app/Http/Resources/PackingListBaseResource.php +++ b/app/Http/Resources/PackingListBaseResource.php @@ -20,7 +20,10 @@ class PackingListBaseResource extends JsonResource */ public function toArray($request) { - $exceptionUsers = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + // $exceptionUsers = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + $userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + $packages = []; $receive_packing_list = null; diff --git a/app/Http/Resources/PackingListForPackagesReceivedResource.php b/app/Http/Resources/PackingListForPackagesReceivedResource.php index 6fab0a0d..df150f35 100644 --- a/app/Http/Resources/PackingListForPackagesReceivedResource.php +++ b/app/Http/Resources/PackingListForPackagesReceivedResource.php @@ -2,15 +2,9 @@ namespace App\Http\Resources; -use App\Classes\ValueObjects\Constants\ApprovalStatus; -use App\Classes\ValueObjects\Constants\PackingListType; -use App\Classes\ValueObjects\Constants\TransactionType; use App\Classes\ValueObjects\Constants\RoleTypes; use App\Models\Order; -use App\Models\PackingList; use Illuminate\Http\Resources\Json\JsonResource; -use Illuminate\Support\Facades\Crypt; -use Illuminate\Support\Facades\Log; class PackingListForPackagesReceivedResource extends JsonResource { @@ -22,7 +16,9 @@ class PackingListForPackagesReceivedResource extends JsonResource */ public function toArray($request) { - $exceptionUsers = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + // $exceptionUsers = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + $userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); $data = [ 'id' => $this->id, diff --git a/database/seeders/DummyDataSeeder.php b/database/seeders/DummyDataSeeder.php index 815ad6b9..f88e5747 100644 --- a/database/seeders/DummyDataSeeder.php +++ b/database/seeders/DummyDataSeeder.php @@ -590,17 +590,17 @@ class DummyDataSeeder extends Seeder // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // // Generate and Approve Dummmy Invoice // // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // - ini_set('memory_limit', '-1'); + ini_set('memory_limit', '-1'); $randomCompanyModule = CompanyModule::latest('id')->take(5)->get(); $centerPostcodeConstantObject = SegmentConstant::where('reference', SegmentConstants::CENTER_POSTCODE)->get(); $centerPostcodeConstant = $centerPostcodeConstantObject->isEmpty() ? [] : (array)$centerPostcodeConstantObject->first()->value; - + foreach($randomCompanyModule as $companyModule) { foreach($companyModule->addresses as $address) { $postcode = $address->postcode; $postcodeArea = in_array($postcode, $centerPostcodeConstant) ? 'CENTER_POSTCODE' : null; - + if (!$postcodeArea) { $random = rand(0, 1); $postcodeArray = ['OUTSTATION_POSTCODE', 'CENTER_POSTCODE']; @@ -609,10 +609,11 @@ class DummyDataSeeder extends Seeder } } } - - Artisan::call('invoice:generate'); - Artisan::call('approve:invoice'); + // Artisan::call('invoice:generate'); + // Artisan::call('approve:invoice'); + Artisan::call('invoice-generate-command'); + Artisan::call('approve-invoice-command'); } } diff --git a/database/seeders/SegmentsTableSeeder.php b/database/seeders/SegmentsTableSeeder.php index e23532f4..b2a0c2dc 100644 --- a/database/seeders/SegmentsTableSeeder.php +++ b/database/seeders/SegmentsTableSeeder.php @@ -57,5 +57,13 @@ class SegmentsTableSeeder extends Seeder 'created_at'=>'2022-09-21 03:51:34', 'updated_at'=>'2022-09-21 03:51:34' ] ); + + Segment::create( [ + 'company_module_id'=>1, + 'name'=>'No Extra Centimeter Charged', + 'deleted_at'=>NULL, + 'created_at'=>'2025-02-13 10:31:35', + 'updated_at'=>'2025-02-13 10:31:35' + ] ); } } diff --git a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue index bd0c896d..ad85aaaa 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue @@ -159,10 +159,10 @@
- +
- +
@@ -236,6 +236,10 @@ this.$store.dispatch('completeList', {'name': this.section, 'data': []}); this.isLoading = false; this.order = response.payload.data; + + if(this.order.company_module.e_invoice === null && !this.$store.getters.isAdmin){ + window.location.href = this.route('dashboard'); + } }, errorHandler(error, status){ if(status == 404){ diff --git a/resources/assets/vue/components/paymentsBilling/elements/CustomerPaymentsBillingComponent.vue b/resources/assets/vue/components/paymentsBilling/elements/CustomerPaymentsBillingComponent.vue index b312259d..cb5f4f46 100644 --- a/resources/assets/vue/components/paymentsBilling/elements/CustomerPaymentsBillingComponent.vue +++ b/resources/assets/vue/components/paymentsBilling/elements/CustomerPaymentsBillingComponent.vue @@ -1,25 +1,34 @@