diff --git a/app/Classes/Jobs/ListBookings.php b/app/Classes/Jobs/ListBookings.php new file mode 100644 index 00000000..2c6c048c --- /dev/null +++ b/app/Classes/Jobs/ListBookings.php @@ -0,0 +1,41 @@ +listGenericJobObject = $listGenericJobObject; + } + + public function handle() + { + $result = (App()->make(ListBookingJobProcessor::class))->execute($this->listGenericJobObject); + } + + public function getJobId(){ + return $this->job->getJobId(); + } +} diff --git a/app/Classes/Jobs/ListDocuments.php b/app/Classes/Jobs/ListDocuments.php index 0b50baac..42197a6b 100644 --- a/app/Classes/Jobs/ListDocuments.php +++ b/app/Classes/Jobs/ListDocuments.php @@ -2,8 +2,8 @@ namespace App\Classes\Jobs; -use App\Classes\Modules\Documents\Processors\ListDocumentProcessor; -use App\Classes\Modules\Documents\DataTransferObjects\ListDocumentJobObject; +use App\Classes\Modules\Documents\Processors\ListDocumentJobProcessor; +use App\Classes\Modules\Generic\DataTransferObjects\ListGenericJobObject; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; @@ -16,23 +16,23 @@ class ListDocuments implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - /** @var ListDocumentJobObject */ - private $listDocumentJobObject; + /** @var ListGenericJobObject */ + private $listGenericJobObject; private $jobId; /** * ListDocuments constructor. - * @param ListDocumentJobObject $listDocumentJobObject + * @param ListGenericJobObject $listGenericJobObject */ - public function __construct(ListDocumentJobObject $listDocumentJobObject) + public function __construct(ListGenericJobObject $listGenericJobObject) { - $this->listDocumentJobObject = $listDocumentJobObject; + $this->listGenericJobObject = $listGenericJobObject; } public function handle() { - $result = (App()->make(ListDocumentProcessor::class))->execute($this->listDocumentJobObject); + $result = (App()->make(ListDocumentJobProcessor::class))->execute($this->listGenericJobObject); // Log::error(json_encode($result)); diff --git a/app/Classes/Jobs/ListTransactions.php b/app/Classes/Jobs/ListTransactions.php new file mode 100644 index 00000000..4d94ea42 --- /dev/null +++ b/app/Classes/Jobs/ListTransactions.php @@ -0,0 +1,41 @@ +listGenericJobObject = $listGenericJobObject; + } + + public function handle() + { + $result = (App()->make(ListTransactionJobProcessor::class))->execute($this->listGenericJobObject); + } + + public function getJobId(){ + return $this->job->getJobId(); + } +} diff --git a/app/Classes/Modules/Bookings/ControllersLogic/ListBookingJobLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/ListBookingJobLogic.php new file mode 100644 index 00000000..e97028c0 --- /dev/null +++ b/app/Classes/Modules/Bookings/ControllersLogic/ListBookingJobLogic.php @@ -0,0 +1,56 @@ + 'List Booking Job', + 'message' => 'You have successfully submit a job to list bookings' + ]; + } + + /** + * @param Request $request + * @return JsonResponse + */ + public function logic(Request $request) : JsonResponse + { + $jobId = uniqid(); + + $user = Auth::user(); + $userInfo = (object) [ + 'email' => $user->email, + 'type' => $user->type, + ]; + + $listGenericJobObject = new ListGenericJobObject( + "Proof of Concept", + $request->all(), + $jobId, + $userInfo + ); + + ListBookings::dispatch($listGenericJobObject); + + $result = []; + $result['job_id'] = $jobId; + + return $this->response(['data' => $result]); + } + +} diff --git a/app/Classes/Modules/Bookings/Processors/ListBookingJobProcessor.php b/app/Classes/Modules/Bookings/Processors/ListBookingJobProcessor.php new file mode 100644 index 00000000..da2c3969 --- /dev/null +++ b/app/Classes/Modules/Bookings/Processors/ListBookingJobProcessor.php @@ -0,0 +1,65 @@ +listsBookings = $listsBookings; + $this->createsJobResult = $createsJobResult; + } + + /** + * @param ListGenericJobObject $listGenericJobObject + * @return null|object + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function execute(ListGenericJobObject $listGenericJobObject) { + + $query = $this->listsBookings->execute($this->listsBookings->deserializeFilters($listGenericJobObject->getPayload()['filters']), ['page' => $listGenericJobObject->getPayload()['page']]); + Log::error('ListBookingJobProcessor: '. json_encode($listGenericJobObject->getuserInfo())); + Log::error('ListBookingJobProcessor: '. json_encode(gettype($query))); + + // $result = $this->collectionResponse(BookingResource::collection($query)->userInfo($listGenericJobObject->getuserInfo())); + $result = $this->collectionResponse(BookingResource::customResourceCollection($query, $listGenericJobObject->getuserInfo())); + + // $result = new JobBookingCollectionResponse($query, $listGenericJobObject->getuserInfo()); + // $result = $this->collectionResponse(new BookingResourceCollection(BookingResource::collection($query), $listGenericJobObject->getuserInfo())); + + $create = $this->createsJobResult->execute($listGenericJobObject->getJobId(), json_encode($result)); + + return $create; + } + + + /** + * @param ResourceCollection $collection + * @return JsonResponse + */ + public function collectionResponse(ResourceCollection $collection){ + return json_decode($collection->response()->getContent(), true); + } + +} diff --git a/app/Classes/Modules/Documents/ControllersLogic/ListDocumentJobLogic.php b/app/Classes/Modules/Documents/ControllersLogic/ListDocumentJobLogic.php index 518a5065..100cdd5b 100644 --- a/app/Classes/Modules/Documents/ControllersLogic/ListDocumentJobLogic.php +++ b/app/Classes/Modules/Documents/ControllersLogic/ListDocumentJobLogic.php @@ -5,7 +5,7 @@ namespace App\Classes\Modules\Documents\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\Documents\Services\ListsDocuments; -use App\Classes\Modules\Documents\DataTransferObjects\ListDocumentJobObject; +use App\Classes\Modules\Generic\DataTransferObjects\ListGenericJobObject; use App\Classes\Jobs\ListDocuments; use App\Http\Resources\DocumentResource; use ErrorException; @@ -13,6 +13,7 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use App\Classes\General\Helper; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Auth; class ListDocumentJobLogic extends AbstractControllerLogic { @@ -22,8 +23,8 @@ class ListDocumentJobLogic extends AbstractControllerLogic */ protected function notification():array { return [ - 'title' => 'List Job', - 'message' => 'You have successfully submit a job to list Documents' + 'title' => 'List Document Job', + 'message' => 'You have successfully submit a job to list documents' ]; } @@ -34,18 +35,25 @@ class ListDocumentJobLogic extends AbstractControllerLogic public function logic(Request $request) : JsonResponse { $jobId = uniqid(); - Log::error(json_encode($request->all())); - $listDocumentJobObject = new ListDocumentJobObject( + $user = Auth::user(); + $userInfo = (object) [ + 'email' => $user->email, + 'type' => $user->type, + ]; + + + $listGenericJobObject = new ListGenericJobObject( "Proof of Concept", $request->all(), - $jobId + $jobId, + $userInfo ); - ListDocuments::dispatch($listDocumentJobObject); + ListDocuments::dispatch($listGenericJobObject); // // Create your job instance with delay, so we can back here within delay and take control in our hands. - // $job = new ListDocuments($listDocumentJobObject); + // $job = new ListDocuments($listGenericJobObject); // $job->delay(now()->addSeconds(5)); // // Dispath your job with our custom_dispatch helper. This will return job id from jobs table diff --git a/app/Classes/Modules/Documents/Processors/ListDocumentProcessor.php b/app/Classes/Modules/Documents/Processors/ListDocumentJobProcessor.php similarity index 53% rename from app/Classes/Modules/Documents/Processors/ListDocumentProcessor.php rename to app/Classes/Modules/Documents/Processors/ListDocumentJobProcessor.php index 1f16c2bd..24239c0b 100644 --- a/app/Classes/Modules/Documents/Processors/ListDocumentProcessor.php +++ b/app/Classes/Modules/Documents/Processors/ListDocumentJobProcessor.php @@ -7,12 +7,12 @@ use App\Classes\Modules\Jobs\Services\CreatesJobResult; use App\Classes\Exceptions\MalformedRequestException; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; -use App\Classes\Modules\Documents\DataTransferObjects\ListDocumentJobObject; +use App\Classes\Modules\Generic\DataTransferObjects\ListGenericJobObject; use App\Http\Controllers\Documents\ListDocumentsController; use Illuminate\Http\Resources\Json\ResourceCollection; use App\Http\Resources\DocumentResource; -class ListDocumentProcessor +class ListDocumentJobProcessor { /** @var ListsDocuments */ @@ -22,7 +22,7 @@ class ListDocumentProcessor private $createsJobResult; /** - * ListDocumentProcessor constructor. + * ListDocumentJobProcessor constructor. * @param ListsDocuments $listsDocuments * @param CreatesJobResult $createsJobResult */ @@ -33,19 +33,24 @@ class ListDocumentProcessor } /** - * @param ListDocumentJobObject $listDocumentJobObject + * @param ListGenericJobObject $listGenericJobObject * @return null|object * @throws \App\Classes\Exceptions\MalformedRequestException */ - public function execute(ListDocumentJobObject $listDocumentJobObject) { + public function execute(ListGenericJobObject $listGenericJobObject) { - $query = $this->listsDocuments->execute($this->listsDocuments->deserializeFilters($listDocumentJobObject->getPayload()['filters']), ['page' => $listDocumentJobObject->getPayload()['page']]); + $query = $this->listsDocuments->execute($this->listsDocuments->deserializeFilters($listGenericJobObject->getPayload()['filters']), ['page' => $listGenericJobObject->getPayload()['page']]); + Log::error('ListDocumentJobProcessor: '. json_encode($listGenericJobObject->getuserInfo())); - // Log::error('page: '.json_encode($listDocumentJobObject->getPayload()['page'])); - $result = $this->collectionResponse(DocumentResource::collection($query)); + //attempt 1 + // $result = $this->collectionResponse(DocumentResource::collection($query, $listGenericJobObject->getuserInfo())); - Log::error(json_encode($result)); - $create = $this->createsJobResult->execute($listDocumentJobObject->getJobId(), json_encode($result)); + //attempt 2 + // $result = new JobDocumentCollectionResponse($query, $listGenericJobObject->getuserInfo()); + $result = $this->collectionResponse(DocumentResource::customResourceCollection($query, $listGenericJobObject->getuserInfo())); + // $result = $this->collectionResponse(new DocumentResourceCollection(DocumentResource::collection($query), $listGenericJobObject->getuserInfo())); + + $create = $this->createsJobResult->execute($listGenericJobObject->getJobId(), json_encode($result)); return $create; } diff --git a/app/Classes/Modules/Documents/DataTransferObjects/ListDocumentJobObject.php b/app/Classes/Modules/Generic/DataTransferObjects/ListGenericJobObject.php similarity index 70% rename from app/Classes/Modules/Documents/DataTransferObjects/ListDocumentJobObject.php rename to app/Classes/Modules/Generic/DataTransferObjects/ListGenericJobObject.php index 147ab3ee..5b0bf4c2 100644 --- a/app/Classes/Modules/Documents/DataTransferObjects/ListDocumentJobObject.php +++ b/app/Classes/Modules/Generic/DataTransferObjects/ListGenericJobObject.php @@ -1,11 +1,11 @@ name = $name; $this->payload = $payload; $this->jobId = $jobId; + $this->userInfo = $userInfo; } /** @@ -48,6 +51,14 @@ class ListDocumentJobObject implements DataTransferObject return $this->jobId; } + /** + * @return object + */ + public function getUserInfo(): object + { + return $this->userInfo; + } + // public function setJobId(int $jobId) // { // $this->jobId = $jobId; diff --git a/app/Classes/Modules/Transactions/ControllersLogic/ListTransactionsJobLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/ListTransactionsJobLogic.php new file mode 100644 index 00000000..b844b4a9 --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/ListTransactionsJobLogic.php @@ -0,0 +1,47 @@ + 'List Transaction Job', + 'message' => 'You have successfully submit a job to list transactions' + ]; + } + + /** + * @param Request $request + * @return JsonResponse + */ + public function logic(Request $request) : JsonResponse + { + $jobId = uniqid(); + + $listGenericJobObject = new ListGenericJobObject( + "Proof of Concept", + $request->all(), + $jobId + ); + + ListTransactions::dispatch($listGenericJobObject); + + $result = []; + $result['job_id'] = $jobId; + + return $this->response(['data' => $result]); + } + +} diff --git a/app/Classes/Modules/Transactions/Processors/ListTransactionJobProcessor.php b/app/Classes/Modules/Transactions/Processors/ListTransactionJobProcessor.php new file mode 100644 index 00000000..17c43d60 --- /dev/null +++ b/app/Classes/Modules/Transactions/Processors/ListTransactionJobProcessor.php @@ -0,0 +1,59 @@ +listsTransactions = $listsTransactions; + $this->createsJobResult = $createsJobResult; + } + + /** + * @param ListGenericJobObject $listGenericJobObject + * @return null|object + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function execute(ListGenericJobObject $listGenericJobObject) { + + $query = $this->listsTransactions->execute($this->listsTransactions->deserializeFilters($listGenericJobObject->getPayload()['filters']), ['page' => $listGenericJobObject->getPayload()['page']]); + + $result = $this->collectionResponse(TransactionResource::collection($query)); + + $create = $this->createsJobResult->execute($listGenericJobObject->getJobId(), json_encode($result)); + + return $create; + } + + + /** + * @param ResourceCollection $collection + * @return JsonResponse + */ + public function collectionResponse(ResourceCollection $collection){ + return json_decode($collection->response()->getContent(), true); + } + +} diff --git a/app/Http/Controllers/Bookings/ListBookingsJobController.php b/app/Http/Controllers/Bookings/ListBookingsJobController.php new file mode 100644 index 00000000..9b32fc77 --- /dev/null +++ b/app/Http/Controllers/Bookings/ListBookingsJobController.php @@ -0,0 +1,22 @@ +execute($request); + } +} diff --git a/app/Http/Controllers/Documents/ListDocumentsJobController.php b/app/Http/Controllers/Documents/ListDocumentsJobController.php index 42378c3b..394f15bd 100644 --- a/app/Http/Controllers/Documents/ListDocumentsJobController.php +++ b/app/Http/Controllers/Documents/ListDocumentsJobController.php @@ -3,7 +3,6 @@ namespace App\Http\Controllers\Documents; use App\Classes\Modules\Documents\ControllersLogic\ListDocumentJobLogic; -use App\Classes\Modules\Documents\DataTransferObjects\ListDocumentJobObject; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use App\Classes\Jobs\ListDocuments; diff --git a/app/Http/Controllers/Transactions/ListTransactionsJobController.php b/app/Http/Controllers/Transactions/ListTransactionsJobController.php new file mode 100644 index 00000000..fb341d5d --- /dev/null +++ b/app/Http/Controllers/Transactions/ListTransactionsJobController.php @@ -0,0 +1,21 @@ +execute($request); + } +} diff --git a/app/Http/Resources/BookingResource.php b/app/Http/Resources/BookingResource.php index f3a7881d..09a2c237 100644 --- a/app/Http/Resources/BookingResource.php +++ b/app/Http/Resources/BookingResource.php @@ -11,10 +11,19 @@ use App\Classes\ValueObjects\Constants\TransactionType; use App\Classes\ValueObjects\Constants\DocumentType; use Carbon\Carbon; use Illuminate\Http\Resources\Json\JsonResource; +use Illuminate\Http\Resources\Json\AnonymousResourceCollection; use Illuminate\Support\Facades\Log; class BookingResource extends JsonResource { + // protected $userInfo; + private static $userInfo; + + public function userInfo($resource, $userInfo = null) + { + parent::__construct($resource); + self::$userInfo = $userInfo; + } /** * Transform the resource into an array. @@ -27,7 +36,7 @@ class BookingResource extends JsonResource { return [ 'id' => $this->id, - 'company' => new CompanyResource($this->company), + 'company' => new CompanyResource($this->company, self::$userInfo), 'bank' => new BankResource($this->bank), 'service' => new ServiceTypeResource($this->service), 'marking' => $this->marking, @@ -72,4 +81,10 @@ class BookingResource extends JsonResource ]) ]; } + + public static function customResourceCollection($resource, $userInfo): AnonymousResourceCollection + { + self::$userInfo = $userInfo; + return parent::collection($resource); + } } diff --git a/app/Http/Resources/CompanyResource.php b/app/Http/Resources/CompanyResource.php index 5d27055e..2c1e2e9c 100644 --- a/app/Http/Resources/CompanyResource.php +++ b/app/Http/Resources/CompanyResource.php @@ -19,6 +19,14 @@ use Illuminate\Support\Facades\Log; class CompanyResource extends JsonResource { + protected $userInfo; + + public function __construct($resource, $userInfo = null) + { + parent::__construct($resource); + $this->userInfo = $userInfo; + } + /** * Transform the resource into an array. * @@ -33,6 +41,26 @@ class CompanyResource extends JsonResource $segment = SegmentConstant::where('reference', SegmentConstants::SUPPLIER_CURRENCIES)->where('detail->id', $this->id)->first(); $serviceCharge = SegmentConstant::where('reference', SegmentConstants::SERVICE_CHARGE)->where('detail->id', $this->id)->first(); + $userResource = null; + + $userInfoEmail = $this->userInfo && isset($this->userInfo->email) ? $this->userInfo->email : null; + $userInfoType = $this->userInfo && isset($this->userInfo->type) ? $this->userInfo->type : null; + + if(!$userInfoEmail && Auth::user()){ + $userInfoEmail = Auth::user()->email; + } + if(!$userInfoType && Auth::user()){ + $userInfoType = Auth::user()->type; + } + + //cief todo: remove + // Log::error('CompanyResource 1: '. json_encode($userInfoEmail)); + // Log::error('CompanyResource 2: '. json_encode($userInfoType)); + + if(!is_null($userInfoEmail) && !is_null($userInfoType)){ + $userResource = new UserResource($userInfoType === RoleTypes::USER ? $this->employees()->where('email', '=', $userInfoEmail)->first() : $this->employees()->orderBy('id', 'DESC')->first()); + } + return [ 'id' => $this->id, 'name' => $this->name, @@ -44,7 +72,7 @@ class CompanyResource extends JsonResource 'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())), 'address' => new AddressResource($this->when($this->has('addresses'), $this->addresses->where('billing', true)->first())), //cief todo: this one need to decide what to do to replace Auth:user() when it is run by job queue - // 'employee' => new UserResource(Auth::user()->type === RoleTypes::USER ? $this->employees()->where('email', '=', Auth::user()->email)->first() : $this->employees()->orderBy('id', 'DESC')->first()), + 'employee' => $userResource, 'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->first()), 'bookings' => $this->whenLoaded('bookings', $this->bookings()->orderBy('id', 'DESC')->get(), []), 'confirmed_bookings' => $this->bookings()->whereHas('transactions', function ($query){ diff --git a/app/Http/Resources/DocumentResource.php b/app/Http/Resources/DocumentResource.php index 59933a67..20da2c45 100644 --- a/app/Http/Resources/DocumentResource.php +++ b/app/Http/Resources/DocumentResource.php @@ -8,9 +8,21 @@ use App\Models\Document; use Carbon\Carbon; use Illuminate\Database\Eloquent\Model; use Illuminate\Http\Resources\Json\JsonResource; +use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Auth; +use Illuminate\Http\Resources\Json\AnonymousResourceCollection; class DocumentResource extends JsonResource { + // protected $userInfo; + + // public function userInfo($resource, $userInfo = null) + // { + // $this->userInfo = $userInfo; + // } + + private static $userInfo; + /** * Transform the resource into an array. * @@ -19,14 +31,23 @@ class DocumentResource extends JsonResource */ public function toArray($request) { + //cief todo: remove + // Log::error('DocumentResource 1: '. json_encode(self::$userInfo)); + // Log::error('DocumentResource 2: '. json_encode($this->relationLoaded('owner'))); return [ 'id' => $this->id, 'reference' => $this->reference, 'status' => (int) $this->status, 'document_type' => $this->document_type, - 'owner' => $this->relationLoaded('owner') ? ($this->owner instanceof Booking ? new BookingResource($this->owner) : new CompanyResource($this->owner)) : null, + 'owner' => $this->relationLoaded('owner') ? ($this->owner instanceof Booking ? new BookingResource($this->owner, self::$userInfo) : new CompanyResource($this->owner, self::$userInfo)) : null, 'files' => FileResource::collection($this->files), 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y h:i:s A') ]; } + + public static function customResourceCollection($resource, $userInfo): AnonymousResourceCollection + { + self::$userInfo = $userInfo; + return parent::collection($resource); + } } diff --git a/docker-setup/php/default.conf b/docker-setup/php/default.conf index dced3233..db2a7f38 100644 --- a/docker-setup/php/default.conf +++ b/docker-setup/php/default.conf @@ -3,6 +3,7 @@ daemonize = no [www] listen = 9000 +php_admin_value[max_execution_time] = 60 pm.max_children = 15 pm.max_requests = 500 diff --git a/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue b/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue index 7df9c125..5cc561f7 100644 --- a/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue +++ b/resources/assets/vue/components/bookings/sections/SupplierPendingOrdersSectionComponent.vue @@ -117,11 +117,11 @@