diff --git a/app/Classes/General/Eloquent/Filters/DateEnd.php b/app/Classes/General/Eloquent/Filters/DateEnd.php new file mode 100644 index 00000000..3a5608f7 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/DateEnd.php @@ -0,0 +1,18 @@ +whereDate('created_at', '<=', $value); + } +} \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/DateStart.php b/app/Classes/General/Eloquent/Filters/DateStart.php new file mode 100644 index 00000000..21979a92 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/DateStart.php @@ -0,0 +1,18 @@ +whereDate('created_at', '>=', $value); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateBulkPurchaseOrderTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateBulkPurchaseOrderTransactionLogic.php new file mode 100644 index 00000000..51e2b973 --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateBulkPurchaseOrderTransactionLogic.php @@ -0,0 +1,99 @@ + 'Generate Bulk Purchase Order', + 'message' => 'You have successfully generated bulk purchase order' + ]; + } + + /** @var ListsGroups */ + private $listsGroups; + + /** @var FetchesCompany */ + private $fetchesCompany; + + /** @var CreateInvoiceDocumentProcessor */ + private $createInvoiceDocumentProcessor; + + /** + * CreateBulkPurchaseOrderTransactionLogic constructor. + * @param ListsGroups $listsGroups + * @param FetchesCompany $fetchesCompany + * @param CreateInvoiceDocumentProcessor $createInvoiceDocumentProcessor + */ + public function __construct(ListsGroups $listsGroups, FetchesCompany $fetchesCompany, CreateInvoiceDocumentProcessor $createInvoiceDocumentProcessor) + { + $this->listsGroups = $listsGroups; + $this->fetchesCompany = $fetchesCompany; + $this->createInvoiceDocumentProcessor = $createInvoiceDocumentProcessor; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request) : JsonResponse + { + $groups = $this->listsGroups->execute(['issuer_id' => [$request->issuer_id], 'date_start' => $request->start_date, 'date_end' => $request->end_date]); + + foreach($groups as $group){ + foreach($group->transactions as $transaction){ + if($transaction->owner()->owner()->transactions()->where('type', TransactionType::PURCHASE_ORDER)->where('status', '!=', ApprovalStatus::APPROVED)->exists()){ + throw new MalformedRequestException('You can\'t generate bulk purchased order if there in uncomplete transactions'); + } + } + } + + foreach($groups as $group){ + foreach($group->transactions as $transaction){ + $completed_transactions = $transaction->owner()->owner()->transactions()->where('type', TransactionType::PURCHASE_ORDER)->where('status', '=', ApprovalStatus::APPROVED)->get(); + + $purchaseOrder = $transaction->owner()->transactions() + ->where('type', TransactionType::PURCHASE_ORDER) + ->complete() + ->first(); + dd($purchaseOrder); + + foreach($completed_transactions as $transaction){ + $supplier = $this->fetchesCompany->execute(['id' => $transaction->receiver]); + + // purchase order + $this->invoiceDocumentProcessor->execute($transaction, $purchaseOrder, $supplier, DocumentType::PURCHASE_ORDER); + } + } + } + + return $this->response([]); + + } + + + +} diff --git a/app/Http/Controllers/Transactions/CreateBulkPurchaseOrderTransactionController.php b/app/Http/Controllers/Transactions/CreateBulkPurchaseOrderTransactionController.php new file mode 100644 index 00000000..695b8487 --- /dev/null +++ b/app/Http/Controllers/Transactions/CreateBulkPurchaseOrderTransactionController.php @@ -0,0 +1,21 @@ +execute($request); + } +} diff --git a/app/Http/Resources/GroupResource.php b/app/Http/Resources/GroupResource.php index 2d628d19..ea7405c4 100644 --- a/app/Http/Resources/GroupResource.php +++ b/app/Http/Resources/GroupResource.php @@ -2,6 +2,8 @@ namespace App\Http\Resources; +use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\ValueObjects\Constants\TransactionType; use Carbon\Carbon; use Illuminate\Http\Resources\Json\JsonResource; @@ -17,13 +19,14 @@ class GroupResource extends JsonResource { return [ 'id' => $this->id, - 'original_amount' => (double) $this->original_amount, + 'original_amount' => (float) $this->original_amount, 'original_currency' => new CurrencyResource($this->original_currency), - 'amount' => (double) $this->amount, + 'amount' => (float) $this->amount, 'currency' => new CurrencyResource($this->currency), 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y h:i:s A'), 'currency_rate' => (float) $this->currency_rate, 'transactions' => TransactionResource::collection($this->transactions()->get()), + 'complete_transactions' => TransactionResource::collection($this->transactions()->owner()->owner()->transactions()->where('type', TransactionType::PURCHASE_ORDER)->where('status', ApprovalStatus::APPROVED)->get()), ]; } } diff --git a/routes/transaction.php b/routes/transaction.php index 9a820c11..6a9039a5 100644 --- a/routes/transaction.php +++ b/routes/transaction.php @@ -16,6 +16,8 @@ Route::group(['prefix' => 'transactions', 'namespace' => 'Transactions', 'as' => route::delete('{id}/bill/delete', 'DeletePaymentProofDocumentController@delete')->name('bill.delete'); Route::post('booking/{id}/details/update', 'CreatePurchaseOrderTransactionController@create')->name('po.create'); + + Route::get('bulk/po/{issuer_id}/{start_date}/{end_date}', 'CreateBulkPurchaseOrderTransactionController@create')->name('po.bulk.create'); Route::get('wallet/list', 'ListWalletTransactionsController@list')->name('wallet.list');