diff --git a/config/routes/job_order.yaml b/config/routes/job_order.yaml index a048ef2c..473c8353 100644 --- a/config/routes/job_order.yaml +++ b/config/routes/job_order.yaml @@ -5,9 +5,14 @@ jo_in: jo_proc: path: /job-order/processing - controller: App\Controller\JobOrderController::processingForm + controller: App\Controller\JobOrderController::processingList methods: [GET] +jo_proc_rows: + path: /job-order/processing-rows + controller: App\Controller\JobOrderController::processingRows + methods: [POST] + jo_in_submit: path: /job-order/incoming controller: App\Controller\JobOrderController::incomingSubmit diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index d818781f..f93ccf49 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -17,19 +17,12 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Validator\Validator\ValidatorInterface; -use App\Menu\Generator as MenuGenerator; -use App\Access\Generator as ACLGenerator; +use CrEOF\Spatial\PHP\Types\Geometry\Point; + +use DateTime; class JobOrderController extends BaseController { - protected $acl_gen; - - public function __construct(MenuGenerator $menu_gen, ACLGenerator $acl_gen) - { - $this->acl_gen = $acl_gen; - parent::__construct($menu_gen); - } - public function incomingForm() { $this->denyAccessUnlessGranted('jo_in.list', null, 'No access.'); @@ -56,22 +49,83 @@ class JobOrderController extends BaseController { $this->denyAccessUnlessGranted('jo_in.list', null, 'No access.'); - // create new row - $em = $this->getDoctrine()->getManager(); - $row = new JobOrder(); - - // TODO: Validation, handling of job order - - // DEBUG: Get all variables - error_log(print_r($req->request->all(), true)); - - // DEBUG: Fake error array + // initialize error list $error_array = []; - // DEBUG: Error response for now + // create new row + $em = $this->getDoctrine()->getManager(); + $obj = new JobOrder(); + + // check if lat and lng are provided + if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) { + $error_array['coordinates'] = 'No map coordinates provided. Please click on a location on the map.'; + } + + // check if customer vehicle is set + if (empty($req->request->get('customer_vehicle'))) { + $error_array['customer_vehicle'] = 'No vehicle selected.'; + } else { + // get customer vehicle + $cust_vehicle = $em->getRepository(CustomerVehicle::class)->find($req->request->get('customer_vehicle')); + + if (empty($cust_vehicle)) { + $error_array['customer_vehicle'] = 'Invalid vehicle specified.'; + } + } + + if (empty($error_array)) { + // coordinates + $point = new Point($req->request->get('coord_lng'), $req->request->get('coord_lat')); + + // set and save values + $obj->setDateCreate(DateTime::createFromFormat("d M Y", $req->request->get('date_transaction'))) + ->setDateSchedule(DateTime::createFromFormat("d M Y h:i A", $req->request->get('date_schedule_date') . " " . $req->request->get('date_schedule_time'))) + ->setCoordinates($point) + ->setAdvanceOrder($req->request->get('flag_advance') ?? false) + ->setCreatedBy($this->getUser()) + ->setServiceType($req->request->get('service_type')) + ->setCustomer($cust_vehicle->getCustomer()) + ->setCustomerVehicle($cust_vehicle) + ->setSource('web') + ->setStatus($req->request->get('status')) + ->setDeliveryInstructions($req->request->get('delivery_instructions')) + ->setAgentNotes($req->request->get('agent_notes')) + ->setDeliveryAddress($req->request->get('delivery_address')); + } + + // TODO: Validation + + /* + // validate + $errors = $validator->validate($obj); + + // add errors to list + foreach ($errors as $error) { + $error_array[$error->getPropertyPath()] = $error->getMessage(); + } + */ + + // check if any errors were found + if (!empty($error_array)) { + // return validation failure response + return $this->json([ + 'success' => false, + 'errors' => $error_array + ], 422); + } + + // validated! save the entity + $em->persist($obj); + $em->flush(); + + // return successful response return $this->json([ - 'success' => false, - 'errors' => $error_array - ], 422); + 'success' => 'Changes have been saved!' + ]); + } + + public function processingList() + { + $this->denyAccessUnlessGranted('jo_proc.list', null, 'No access.'); } } diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index c4f3c9c1..f864f1d3 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -125,6 +125,12 @@ class JobOrder */ protected $agent_notes; + // delivery address + /** + * @ORM\Column(type="text", nullable=true) + */ + protected $delivery_address; + public function __construct() { $this->date_create = new DateTime(); @@ -303,4 +309,15 @@ class JobOrder { return $this->agent_notes; } + + public function setDeliveryAddress($delivery_address) + { + $this->delivery_address = $delivery_address; + return $this; + } + + public function getDeliveryAddress() + { + return $this->delivery_address; + } } diff --git a/templates/job-order/incoming.html.twig b/templates/job-order/incoming.html.twig index 642bdfc5..7659cce5 100644 --- a/templates/job-order/incoming.html.twig +++ b/templates/job-order/incoming.html.twig @@ -32,7 +32,7 @@