diff --git a/app/Classes/Modules/Bookings/ControllersLogic/BatchBookingsGenerateEInvoiceLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/BatchBookingsGenerateEInvoiceLogic.php index 00175130..8fc26c37 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/BatchBookingsGenerateEInvoiceLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/BatchBookingsGenerateEInvoiceLogic.php @@ -8,6 +8,7 @@ use App\Classes\Jobs\Commands\V2\ProcessBookingForEInvoiceV2CommandJob; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Models\Booking; use App\Classes\ValueObjects\Constants\KVPKey; +use App\Classes\ValueObjects\Constants\TransactionType; use Carbon\Carbon; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\JsonResponse; @@ -66,29 +67,50 @@ class BatchBookingsGenerateEInvoiceLogic extends AbstractControllerLogic $startDate = $startDate ? Carbon::parse($startDate)->startOfDay() : Carbon::now()->subMonths(1); $endDate = $endDate ? Carbon::parse($endDate)->endOfDay() : Carbon::now(); + // $bookings = Booking::where('status', ApprovalStatus::COMPLETED) + // // ->whereBetween('created_at', [$startDate, $endDate]) + // ->whereHas('transactions', function ($query) use ($startDate, $endDate) { + // $query->payments() + // ->complete() + // ->whereBetween('created_at', [$startDate, $endDate]) + // ->latest('created_at'); + // }) + // ->whereHas('attributesKVP', function (Builder $query) { + // $query->where('key', KVPKey::AUTOCOUNT_DOCNO_INVOICE); + // }) + // ->with(['attributesKVP' => function ($query) { + // $query->where('key', KVPKey::AUTOCOUNT_DOCNO_INVOICE); + // }]) + // ->get(); + $bookings = Booking::where('status', ApprovalStatus::COMPLETED) - // ->whereBetween('created_at', [$startDate, $endDate]) ->whereHas('transactions', function ($query) use ($startDate, $endDate) { $query->payments() - ->complete() - ->whereBetween('created_at', [$startDate, $endDate]) - ->latest('created_at'); + ->complete() + ->whereBetween('created_at', [$startDate, $endDate]) + ->latest('created_at'); }) - ->whereHas('attributesKVP', function (Builder $query) { - $query->where('key', KVPKey::AUTOCOUNT_DOCNO_INVOICE); - }) - ->with(['attributesKVP' => function ($query) { - $query->where('key', KVPKey::AUTOCOUNT_DOCNO_INVOICE); - }]) ->get(); + $count = 0; foreach ($bookings as $booking) { - //$autocountValue = optional($booking->attributesKVP->first())->value; - //Log::info('Booking ID: ' . $booking->marking . ' | AUTOCOUNT_DOCNO_INVOICE: ' . $autocountValue); - // $this->regenerateInvoiceBookingV2Processor->execute($booking); - ProcessBookingForEInvoiceV2CommandJob::dispatch($booking); + $temp = $booking->transactions() + ->whereIn('transactions.type', [TransactionType::INVOICE]) + ->whereHas('attributesKVP', function ($q) { + $q->where('key', KVPKey::AUTOCOUNT_DOCNO_INVOICE); + }) + ->whereHas('attributesKVP', function ($q) { + $q->where('key', KVPKey::AUTOCOUNT_EINVOICE_VALIDATION_LINK); + }) + ->first(); + Log::info('Booking ID: ' . $booking->marking); + if($temp){ + ProcessBookingForEInvoiceV2CommandJob::dispatch($booking); + Log::info('Booking ID with AUTOCOUNT_DOCNO_INVOICE: ' . $booking->marking); + $count = $count + 1; + } } - $this->processedCount = count($bookings); + $this->processedCount = $count; //count($bookings); return $this->resourceResponse(JsonResource::collection(collect([]))); } diff --git a/app/Classes/Modules/Bookings/Processors/RegenerateInvoiceBookingV2Processor.php b/app/Classes/Modules/Bookings/Processors/RegenerateInvoiceBookingV2Processor.php index bbec8757..c42aece9 100644 --- a/app/Classes/Modules/Bookings/Processors/RegenerateInvoiceBookingV2Processor.php +++ b/app/Classes/Modules/Bookings/Processors/RegenerateInvoiceBookingV2Processor.php @@ -99,7 +99,11 @@ class RegenerateInvoiceBookingV2Processor $this->deletesDocument->execute($row); } - $this->createInvoiceTransactionProcessor->execute($booking, $firstBillNo, [ + $kvpCopies = $firstInvoice->attributesKVP->map(function ($kvp) { + return $kvp->replicate(); + }); + + $this->createInvoiceTransactionProcessor->execute($booking, $firstBillNo, $kvpCopies, [ 'generateEInvoice' => true, 'generateEInvoiceWithNormalInvoiceTemplate' => $eInvoiceWithNormalInvoiceTemplate, 'generateEInvoiceRefund' => $eInvoiceWithRefund, @@ -107,7 +111,7 @@ class RegenerateInvoiceBookingV2Processor ]); } else { - $this->createInvoiceTransactionProcessor->execute($booking, "", [ + $this->createInvoiceTransactionProcessor->execute($booking, "", null, [ 'generateEInvoice' => false, 'generateEInvoiceWithNormalInvoiceTemplate' => $eInvoiceWithNormalInvoiceTemplate, 'generateEInvoiceRefund' => $eInvoiceWithRefund, diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionV2Processor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionV2Processor.php index f261ac11..504dece5 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionV2Processor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionV2Processor.php @@ -88,11 +88,12 @@ class CreateInvoiceTransactionV2Processor /** * @param Booking $booking * @param String $invoiceNo + * @param Illuminate\Support\Collection<\App\Models\KeyValuePair> $kvpCopies * @param array $options * @return void * @throws MalformedRequestException */ - public function execute(Booking $booking, String $invoiceNo= "", array $options = []) + public function execute(Booking $booking, String $invoiceNo= "", $kvpCopies = null, array $options = []) { $generateEInvoice = $options['generateEInvoice'] ?? false; $generateEInvoiceWithNormalInvoiceTemplate = $options['generateEInvoiceWithNormalInvoiceTemplate'] ?? false; @@ -220,6 +221,12 @@ class CreateInvoiceTransactionV2Processor ); $invoice_transaction = $this->createsTransaction->execute($purchaseOrder->booking ?? $booking, $transaction_object); + if ($kvpCopies) { + foreach ($kvpCopies as $kvp) { + $invoice_transaction->attributesKVP()->save($kvp); + } + } + $voucherRedemption = $transaction->voucherRedemption; // purchase order