diff --git a/config/routes/api.yaml b/config/routes/api.yaml index 242fe879..9fd14142 100644 --- a/config/routes/api.yaml +++ b/config/routes/api.yaml @@ -89,3 +89,8 @@ api_rider_rating_add: path: /api/rider_rating controller: App\Controller\APIController::addRiderRating methods: [POST] + +api_jo_cancel: + path: /api/job_order/cancel + controller: App\Controller\APIController:cancelJobOrder + methods: [POST] diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index 70a22c82..23d498bf 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -1104,7 +1104,16 @@ class APIController extends Controller return $res->getReturnResponse(); } - // TODO: check job order status if it's + // check that the customer owns the job order + $jo_cust = $jo->getCustomer(); + if ($jo_cust->getID() != $cust->getID()) + { + $res->setError(true) + ->setErrorMessage('Job order was not initiated by customer'); + return $res->getReturnResponse(); + } + + // TODO: check job order status, if it's complete // add rider rating $rating_num = $req->request->get('rating'); @@ -1117,6 +1126,60 @@ class APIController extends Controller $em->persist($rating); $em->flush(); + // TODO: set average rating in rider entity + + $res->setData([]); + + return $res->getReturnResponse(); + } + + public function cancelJobOrder(Request $req) + { + $required_params = [ + 'jo_id', + 'reason' + ]; + $em = $this->getDoctrine()->getManager(); + $res = $this->checkParamsAndKey($req, $em, $required_params); + if ($res->isError()) + return $res->getReturnResponse(); + + // get job order + $jo_id = $req->request->get('jo_id'); + $jo = $em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $res->setError(true) + ->setErrorMessage('No job order found'); + return $res->getReturnResponse(); + } + + // get customer + $cust = $this->session->getCustomer(); + if ($cust == null) + { + $res->setError(true) + ->setErrorMessage('No customer information found'); + return $res->getReturnResponse(); + } + + // check that the customer owns the job order + $jo_cust = $jo->getCustomer(); + if ($jo_cust->getID() != $cust->getID()) + { + $res->setError(true) + ->setErrorMessage('Job order was not initiated by customer'); + return $res->getReturnResponse(); + } + + // TODO: check job order status, if it's cancellable + + $jo->setStatus(JOStatus::CANCELLED) + ->setDateCancel(new DateTime()) + ->setCancelReason($req->request->get('reason')); + + $em->flush(); + $res->setData([]); return $res->getReturnResponse(); diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index e4e98d6c..2cbac875 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -167,6 +167,12 @@ class JobOrder */ protected $invoice; + // reason for cancel + /** + * @ORM\Column(type="string", length=200) + */ + protected $cancel_reason; + public function __construct() { $this->date_create = new DateTime(); @@ -181,18 +187,12 @@ class JobOrder return $this->id; } - public function setDateCreate($date_create) - { - $this->date_create = $date_create; - return $this; - } - public function getDateCreate() { return $this->date_create; } - public function setDateSchedule($date_schedule) + public function setDateSchedule(DateTime $date_schedule) { $this->date_schedule = $date_schedule; return $this; @@ -203,7 +203,18 @@ class JobOrder return $this->date_schedule; } - public function setDateFulfill($date_fulfill) + public function setDateCancel(DateTime $date_cancel) + { + $this->date_cancel = $date_cancel; + return $this; + } + + public function getDateCancel() + { + return $this->date_cancel; + } + + public function setDateFulfill(DateTime $date_fulfill) { $this->date_fulfill = $date_fulfill; return $this; @@ -214,7 +225,7 @@ class JobOrder return $this->date_fulfill; } - public function setDateAssign($date_assign) + public function setDateAssign(DateTime $date_assign) { $this->date_assign = $date_assign; return $this; @@ -359,6 +370,7 @@ class JobOrder public function setStatus($status) { + // TODO: validate status $this->status = $status; return $this; } @@ -412,4 +424,15 @@ class JobOrder { return $this->invoice; } + + public function setCancelReason($reason) + { + $this->cancel_reason = $reason; + return $this; + } + + public function getCancelReason() + { + return $this->cancel_reason; + } }