reschedule container

This commit is contained in:
glovetleong
2021-09-22 18:14:36 +08:00
parent 16573e9e00
commit 9aec13da74
4 changed files with 125 additions and 0 deletions
@@ -0,0 +1,82 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\Schedules\Services\UpdatesScheduleStatus;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\ContainerResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
class RescheduleContainerLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Reschedule Container',
'message' => 'You have successfully Reschedule Container'
];
}
/** @var FetchesContainer */
private $fetchesContainer;
/** @var UpdatesScheduleStatus */
private $updatesScheduleStatus;
/** @var CreatesSchedule */
private $createsSchedule;
/**
* DeleteContainerControllersLogic constructor.
* @param FetchesContainer $fetchesContainer
* @param CreatesSchedule $createsSchedule
*/
public function __construct(FetchesContainer $fetchesContainer, UpdatesScheduleStatus $updatesScheduleStatus, CreatesSchedule $createsSchedule)
{
$this->fetchesContainer = $fetchesContainer;
$this->updatesScheduleStatus = $updatesScheduleStatus;
$this->createsSchedule = $createsSchedule;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
$transport = $container->transports()->first();
$old_sechedule = $transport->schedules()->first();
$this->updatesScheduleStatus->execute($old_sechedule, ApprovalStatus::REJECTED);
$scheduleObject = new ScheduleObject(
Carbon::parse($request->input('eta')),
Carbon::parse($request->input('etd')),
ApprovalStatus::APPROVED
);
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
return $this->resourceResponse(new ContainerResource($container));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Classes\Modules\Schedules\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Schedule;
class UpdatesScheduleStatus extends AbstractUpdateRecord
{
/**
* @param Schedule $model
* @param int $status
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Schedule $model, int $status) {
$model->status = $status;
return $this->handler($model);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers\PackingLists\Containers;
use App\Classes\Modules\PackingLists\ControllersLogic\Containers\RescheduleContainerLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RescheduleContainerController
{
/**
* @param Request $request
* @param RescheduleContainerLogic $logic
* @return JsonResponse
*/
public function reschedule(Request $request, RescheduleContainerLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
+1
View File
@@ -18,6 +18,7 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' =
Route::put('/update/{id}', 'UpdateContainerController@update')->name('update');
Route::delete('/delete/{id}', 'DeleteContainerController@delete')->name('delete');
Route::put('/assign-packing_list/{id}', 'AssignPackingListContainerController@assign')->name('assign.packing_list');
Route::put('/reschedule/{id}', 'RescheduleContainerController@reschedule')->name('reschedule');
});
Route::group(['namespace' => 'Packages', 'as' => 'package.', 'prefix' => 'package'], function () {