diff --git a/app/Classes/Modules/Bookings/ControllersLogic/BatchBookingsGenerateEInvoiceLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/BatchBookingsGenerateEInvoiceLogic.php
new file mode 100644
index 00000000..d674c3c6
--- /dev/null
+++ b/app/Classes/Modules/Bookings/ControllersLogic/BatchBookingsGenerateEInvoiceLogic.php
@@ -0,0 +1,95 @@
+ 'Generate Bookings E-Invoices',
+ 'message' => 'You have successfully process bookings for E-Invoices'
+ ];
+ }
+
+ /** @var RegenerateInvoiceBookingProcessor */
+ private $regenerateInvoiceBookingProcessor;
+
+ /**
+ * BatchBookingsGenerateEInvoiceLogic constructor.
+ * @param RegenerateInvoiceBookingProcessor $regenerateInvoiceBookingProcessor
+ */
+ public function __construct(
+ RegenerateInvoiceBookingProcessor $regenerateInvoiceBookingProcessor
+ ) {
+ $this->regenerateInvoiceBookingProcessor = $regenerateInvoiceBookingProcessor;
+ }
+
+
+ /**
+ * @param Request $request
+ * @return JsonResponse
+ * @throws \App\Classes\Exceptions\AccessForbiddenException
+ * @throws \App\Classes\Exceptions\MalformedRequestException
+ * @throws \App\Classes\Exceptions\RequestValidationException
+ */
+ public function logic(Request $request): JsonResponse
+ {
+ $validated = $request->validate([
+ 'startDate' => 'nullable|date_format:d-m-Y',
+ 'endDate' => 'nullable|date_format:d-m-Y|after_or_equal:startDate',
+ ]);
+
+ $startDate = null;
+ $endDate = null;
+
+ if (isset($validated['startDate']) && $validated['startDate']) {
+ $startDate = Carbon::createFromFormat('d-m-Y', $validated['startDate'])->startOfDay();
+ } else {
+ $startDate = Carbon::now()->subMonths(1)->startOfDay();
+ }
+
+ if (isset($validated['endDate']) && $validated['endDate']) {
+ $endDate = Carbon::createFromFormat('d-m-Y', $validated['endDate'])->endOfDay();
+ } else {
+ $endDate = Carbon::now()->endOfDay();
+ }
+
+ $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('attributesKVP', function (Builder $query) {
+ $query->where('key', 'AUTOCOUNT_DOCNO');
+ })
+ ->with(['attributesKVP' => function ($query) {
+ $query->where('key', 'AUTOCOUNT_DOCNO');
+ }])
+ ->get();
+
+ foreach ($bookings as $booking) {
+ // $autocountValue = optional($booking->attributesKVP->first())->value;
+ //Log::info('Booking ID: ' . $booking->marking . ' | AUTOCOUNT_DOCNO: ' . $autocountValue);
+ $this->regenerateInvoiceBookingProcessor->execute($booking);
+ }
+
+ return $this->resourceResponse(JsonResource::collection(collect([])));
+ }
+}
diff --git a/app/Classes/Modules/Bookings/ControllersLogic/RegenerateInvoiceBookingLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/RegenerateInvoiceBookingLogic.php
index 4a63eca4..39db1708 100644
--- a/app/Classes/Modules/Bookings/ControllersLogic/RegenerateInvoiceBookingLogic.php
+++ b/app/Classes/Modules/Bookings/ControllersLogic/RegenerateInvoiceBookingLogic.php
@@ -5,19 +5,11 @@ namespace App\Classes\Modules\Bookings\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Bookings\Services\FetchesBooking;
use App\Classes\Modules\Bookings\Standards\Rules\CanFetchBooking;
-use App\Classes\Modules\Bookings\Services\UpdatesBookingStatus;
-use App\Classes\Modules\Transactions\Services\DeletesTransaction;
-use App\Classes\Modules\Documents\Services\DeletesDocument;
-use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor;
-use Illuminate\Support\Str;
-use App\Classes\ValueObjects\Constants\DocumentType;
+use App\Classes\Modules\Bookings\Processors\RegenerateInvoiceBookingProcessor;
use App\Http\Resources\BookingResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
-use App\Classes\ValueObjects\Constants\TransactionType;
-use App\Models\Transaction;
-use Illuminate\Support\Carbon;
class RegenerateInvoiceBookingLogic extends AbstractControllerLogic
{
@@ -39,41 +31,23 @@ class RegenerateInvoiceBookingLogic extends AbstractControllerLogic
/** @var FetchesBooking */
private $fetchesBooking;
- /** @var DeletesTransaction */
- private $deletesTransaction;
-
- /** @var UpdatesBookingStatus */
- private $updatesBookingStatus;
-
- /** @var DeletesDocument */
- private $deletesDocument;
-
- /** @var CreateInvoiceTransactionProcessor */
- private $createInvoiceTransactionProcessor;
+ /** @var RegenerateInvoiceBookingProcessor */
+ private $regenerateInvoiceBookingProcessor;
/**
- * FetchBookingLogic constructor.
+ * RegenerateInvoiceBookingLogic constructor.
* @param CanFetchBooking $canFetchBooking
* @param FetchesBooking $fetchesBooking
- * @param DeletesTransaction $deletesTransaction
- * @param UpdatesBookingStatus $updatesBookingStatus
- * @param DeletesDocument $deletesDocument
- * @param CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor
+ * @param RegenerateInvoiceBookingProcessor $regenerateInvoiceBookingProcessor
*/
public function __construct(
CanFetchBooking $canFetchBooking,
FetchesBooking $fetchesBooking,
- DeletesTransaction $deletesTransaction,
- UpdatesBookingStatus $updatesBookingStatus,
- DeletesDocument $deletesDocument,
- CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor
+ RegenerateInvoiceBookingProcessor $regenerateInvoiceBookingProcessor
) {
$this->canFetchBooking = $canFetchBooking;
$this->fetchesBooking = $fetchesBooking;
- $this->deletesTransaction = $deletesTransaction;
- $this->updatesBookingStatus = $updatesBookingStatus;
- $this->deletesDocument = $deletesDocument;
- $this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor;
+ $this->regenerateInvoiceBookingProcessor = $regenerateInvoiceBookingProcessor;
}
@@ -96,46 +70,7 @@ class RegenerateInvoiceBookingLogic extends AbstractControllerLogic
]
);
- $this->updatesBookingStatus->execute($booking, ApprovalStatus::APPROVED);
-
- $firstInvoice = $booking->transactions()
- ->whereIn('type', [TransactionType::INVOICE])
- ->withTrashed()
- ->orderBy('created_at', 'asc')
- ->first();
-
- // get the first bill_no
- $firstBillNo = $firstInvoice->bill_no;
- if (strpos($firstBillNo, '-deleted') !== false) {
- $firstBillNo = substr($firstBillNo, 0, strpos($firstBillNo, '-deleted'));
- }
-
- // update currentInvoice bill_no to '-deleted-'
- $currentInvoice = $booking->transactions()->where('type', TransactionType::INVOICE)->first();
- if($currentInvoice){
- $currentInvoice->bill_no = $currentInvoice->bill_no ."-deleted-" . (string)(Carbon::now()->timestamp);
- $currentInvoice->save();
- }
-
- $transactionWithSameBillNo = Transaction::where('bill_no', $firstBillNo)->withTrashed()->get();
- if ($transactionWithSameBillNo) {
- foreach ($transactionWithSameBillNo as $transaction) {
- $transaction->bill_no = $transaction->bill_no . "-deleted-" . Str::random(10);
- $transaction->save();
- }
- }
-
- $transaction = $booking->transactions()->whereIn('type', [TransactionType::INVOICE, TransactionType::SUPPLIER_DELIVER])->get();
- foreach ($transaction as $key => $row) {
- $this->deletesTransaction->execute($row);
- }
-
- $document = $booking->documents()->whereIn('document_type', [DocumentType::PURCHASE_ORDER, DocumentType::INVOICE, DocumentType::DELIVER_ORDER, DocumentType::SUPPLIER_DELIVER_ORDER])->get();
- foreach ($document as $key => $row) {
- $this->deletesDocument->execute($row);
- }
-
- $this->createInvoiceTransactionProcessor->execute($booking, $firstBillNo, true);
+ $this->regenerateInvoiceBookingProcessor->execute($booking);
return $this->resourceResponse(new BookingResource($booking));
}
diff --git a/app/Classes/Modules/Bookings/Processors/RegenerateInvoiceBookingProcessor.php b/app/Classes/Modules/Bookings/Processors/RegenerateInvoiceBookingProcessor.php
new file mode 100644
index 00000000..38d89f08
--- /dev/null
+++ b/app/Classes/Modules/Bookings/Processors/RegenerateInvoiceBookingProcessor.php
@@ -0,0 +1,99 @@
+deletesTransaction = $deletesTransaction;
+ $this->updatesBookingStatus = $updatesBookingStatus;
+ $this->deletesDocument = $deletesDocument;
+ $this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor;
+ }
+
+ public function execute(Booking $booking)
+ {
+ $this->updatesBookingStatus->execute($booking, ApprovalStatus::APPROVED);
+
+ $firstInvoice = $booking->transactions()
+ ->whereIn('type', [TransactionType::INVOICE])
+ ->withTrashed()
+ ->orderBy('created_at', 'asc')
+ ->first();
+
+ // get the first bill_no
+ if($firstInvoice){
+ $firstBillNo = $firstInvoice->bill_no;
+ if (strpos($firstBillNo, '-deleted') !== false) {
+ $firstBillNo = substr($firstBillNo, 0, strpos($firstBillNo, '-deleted'));
+ }
+
+ // update currentInvoice bill_no to '-deleted-'
+ $currentInvoice = $booking->transactions()->where('type', TransactionType::INVOICE)->first();
+ if($currentInvoice){
+ $currentInvoice->bill_no = $currentInvoice->bill_no ."-deleted-" . (string)(Carbon::now()->timestamp);
+ $currentInvoice->save();
+ }
+
+ $transactionWithSameBillNo = Transaction::where('bill_no', $firstBillNo)->withTrashed()->get();
+ if ($transactionWithSameBillNo) {
+ foreach ($transactionWithSameBillNo as $transaction) {
+ $transaction->bill_no = $transaction->bill_no . "-deleted-" . Str::random(10);
+ $transaction->save();
+ }
+ }
+
+ $transaction = $booking->transactions()->whereIn('type', [TransactionType::INVOICE, TransactionType::SUPPLIER_DELIVER])->get();
+ foreach ($transaction as $key => $row) {
+ $this->deletesTransaction->execute($row);
+ }
+
+ $document = $booking->documents()->whereIn('document_type', [DocumentType::PURCHASE_ORDER, DocumentType::INVOICE, DocumentType::DELIVER_ORDER, DocumentType::SUPPLIER_DELIVER_ORDER])->get();
+ foreach ($document as $key => $row) {
+ $this->deletesDocument->execute($row);
+ }
+
+ $this->createInvoiceTransactionProcessor->execute($booking, $firstBillNo, true);
+ }
+ else {
+ $this->createInvoiceTransactionProcessor->execute($booking);
+ }
+ }
+}
diff --git a/app/Http/Controllers/Bookings/RegenerateBookingEInvoiceController.php b/app/Http/Controllers/Bookings/RegenerateBookingEInvoiceController.php
index 0b07d938..baec723f 100644
--- a/app/Http/Controllers/Bookings/RegenerateBookingEInvoiceController.php
+++ b/app/Http/Controllers/Bookings/RegenerateBookingEInvoiceController.php
@@ -3,10 +3,10 @@
namespace App\Http\Controllers\Bookings;
use App\Classes\Modules\Bookings\ControllersLogic\RegenerateInvoiceBookingLogic;
+use App\Classes\Modules\Bookings\ControllersLogic\BatchBookingsGenerateEInvoiceLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
-
class RegenerateBookingEInvoiceController
{
/**
@@ -17,4 +17,13 @@ class RegenerateBookingEInvoiceController
public function regenerate(Request $request, RegenerateInvoiceBookingLogic $logic): JsonResponse {
return $logic->execute($request);
}
+
+ /**
+ * @param Request $request
+ * @param BatchBookingsGenerateEInvoiceLogic $logic
+ * @return JsonResponse
+ */
+ public function batchProcess(Request $request, BatchBookingsGenerateEInvoiceLogic $logic): JsonResponse {
+ return $logic->execute($request);
+ }
}
diff --git a/resources/assets/vue/components/bookings/elements/DownloadUploadComponent.vue b/resources/assets/vue/components/bookings/elements/DownloadUploadComponent.vue
index cabd9f8b..4bacfb71 100644
--- a/resources/assets/vue/components/bookings/elements/DownloadUploadComponent.vue
+++ b/resources/assets/vue/components/bookings/elements/DownloadUploadComponent.vue
@@ -22,7 +22,7 @@