diff --git a/config/acl.yaml b/config/acl.yaml index 3e221f67..6da5b558 100644 --- a/config/acl.yaml +++ b/config/acl.yaml @@ -568,3 +568,17 @@ access_keys: label: Update - id: emergency_type.delete label: Delete + + - id: ownership_type + label: Ownership Type Access + acls: + - id: ownership_type.menu + label: Menu + - id: ownership_type.list + label: List + - id: ownership_type.add + label: Add + - id: ownership_type.update + label: Update + - id: ownership_type.delete + label: Delete diff --git a/config/menu.yaml b/config/menu.yaml index 487a4ef7..b75a9d38 100644 --- a/config/menu.yaml +++ b/config/menu.yaml @@ -245,3 +245,7 @@ main_menu: acl: emergency_type.menu label: Emergency Types parent: database + - id: ownership_type_list + acl: ownership_type.menu + label: Ownership Types + parent: database diff --git a/config/routes/ownership_type.yaml b/config/routes/ownership_type.yaml new file mode 100644 index 00000000..9d0b17b9 --- /dev/null +++ b/config/routes/ownership_type.yaml @@ -0,0 +1,35 @@ +ownership_type_list: + path: /ownership-types + controller: App\Controller\OwnershipTypeController::index + methods: [GET] + +ownership_type_rows: + path: /ownership-types/rowdata + controller: App\Controller\OwnershipTypeController::datatableRows + methods: [POST] + +ownership_type_add_form: + path: /ownership-types/newform + controller: App\Controller\OwnershipTypeController::addForm + methods: [GET] + +ownership_type_add_submit: + path: /ownership-types + controller: App\Controller\OwnershipTypeController::addSubmit + methods: [POST] + +ownership_type_update_form: + path: /ownership-types/{id} + controller: App\Controller\OwnershipTypeController::updateForm + methods: [GET] + +ownership_type_update_submit: + path: /ownership-types/{id} + controller: App\Controller\OwnershipTypeController::updateSubmit + methods: [POST] + +ownership_type_delete: + path: /ownership-types/{id} + controller: App\Controller\OwnershipTypeController::deleteSubmit + methods: [DELETE] + diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index 4fd4e30e..0df9bffe 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -902,7 +902,7 @@ class APIController extends Controller implements LoggedController { // TODO: put geofence error message in config file somewhere $res->setError(true) - ->setErrorMessage('Oops! Our service is limited to some areas in Metro Manila, Laguna, and Baguio only. We will update you as soon as we are able to cover your area'); + ->setErrorMessage($this->getGeoErrorMessage()); return $res->getReturnResponse(); } @@ -2308,7 +2308,7 @@ class APIController extends Controller implements LoggedController if (!$is_covered) { $res->setError(true) - ->setErrorMessage('Oops! Our service is limited to some areas in Metro Manila, Laguna, and Baguio only. We will update you as soon as we are able to cover your area'); + ->setErrorMessage($this->getGeoErrorMessage()); } return $res->getReturnResponse(); @@ -2769,7 +2769,7 @@ class APIController extends Controller implements LoggedController { // TODO: put geofence error message in config file somewhere $res->setError(true) - ->setErrorMessage('Oops! Our service is limited to some areas in Metro Manila, Laguna, and Baguio only. We will update you as soon as we are able to cover your area'); + ->setErrorMessage($this->getGeoErrorMessage()); return $res->getReturnResponse(); } @@ -4033,12 +4033,20 @@ class APIController extends Controller implements LoggedController $warr->setVehicle($vehicle); } + // TODO: make a standard clean plate number service + // clean plate number + $plate = $req->request->get('plate_number'); + // upper case and remove spaces + $plate = strtoupper(str_replace(' ', '', $plate)); + // remove special characters + $plate = preg_replace('/[^A-Za-z0-9. -]/', '', $plate); + // create or update warranty entry $warr->setSerial($serial) ->setFirstName($req->request->get('first_name')) ->setLastName($req->request->get('last_name')) ->setEmail($req->request->get('email')) - ->setPlateNumber($req->request->get('plate_number')) + ->setPlateNumber($plate) // TODO: figure out how to compute date of purchase ->setDatePurchase($date_pur) // TODO: set status @@ -4700,4 +4708,8 @@ class APIController extends Controller implements LoggedController { return trim(strtolower($string)); } + + protected function getGeoErrorMessage() { + return 'Oops! Our service is limited to some areas in Metro Manila, Laguna, Cavite, Pampanga and Baguio only. We will update you as soon as we are able to cover your area'; + } } diff --git a/src/Controller/OwnershipTypeController.php b/src/Controller/OwnershipTypeController.php new file mode 100644 index 00000000..3817b64e --- /dev/null +++ b/src/Controller/OwnershipTypeController.php @@ -0,0 +1,255 @@ +denyAccessUnlessGranted('ownership_type.list', null, 'No access.'); + + return $this->render('ownership-type/list.html.twig'); + } + + /** + * @IsGranted("ownership_type.list") + */ + public function datatableRows(Request $req) + { + // get query builder + $qb = $this->getDoctrine() + ->getRepository(OwnershipType::class) + ->createQueryBuilder('q'); + + // get datatable params + $datatable = $req->request->get('datatable'); + + // count total records + $tquery = $qb->select('COUNT(q)'); + $this->setQueryFilters($datatable, $tquery); + $total = $tquery->getQuery() + ->getSingleScalarResult(); + + // get current page number + $page = $datatable['pagination']['page'] ?? 1; + + $perpage = $datatable['pagination']['perpage']; + $offset = ($page - 1) * $perpage; + + // add metadata + $meta = [ + 'page' => $page, + 'perpage' => $perpage, + 'pages' => ceil($total / $perpage), + 'total' => $total, + 'sort' => 'asc', + 'field' => 'id' + ]; + + // build query + $query = $qb->select('q'); + $this->setQueryFilters($datatable, $query); + + // check if sorting is present, otherwise use default + if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { + $order = $datatable['sort']['sort'] ?? 'asc'; + $query->orderBy('q.' . $datatable['sort']['field'], $order); + } else { + $query->orderBy('q.id', 'asc'); + } + + // get rows for this page + $obj_rows = $query->setFirstResult($offset) + ->setMaxResults($perpage) + ->getQuery() + ->getResult(); + + // process rows + $rows = []; + foreach ($obj_rows as $orow) { + // add row data + $row['id'] = $orow->getID(); + $row['name'] = $orow->getName(); + + // add row metadata + $row['meta'] = [ + 'update_url' => '', + 'delete_url' => '' + ]; + + // add crud urls + if ($this->isGranted('ownership_type.update')) + $row['meta']['update_url'] = $this->generateUrl('ownership_type_update_form', ['id' => $row['id']]); + if ($this->isGranted('ownership_type.delete')) + $row['meta']['delete_url'] = $this->generateUrl('ownership_type_delete', ['id' => $row['id']]); + + $rows[] = $row; + } + + // response + return $this->json([ + 'meta' => $meta, + 'data' => $rows + ]); + } + + /** + * @Menu(selected="ownership_type.list") + * @IsGranted("ownership_type.add") + */ + public function addForm() + { + $ownership_type = new OwnershipType(); + $params = [ + 'ownership_type' => $ownership_type, + 'mode' => 'create', + ]; + + // response + return $this->render('ownership-type/form.html.twig', $params); + } + + /** + * @IsGranted("ownership_type.add") + */ + public function addSubmit(Request $req, EntityManagerInterface $em, ValidatorInterface $validator) + { + $ownership_type = new OwnershipType(); + + $this->setObject($ownership_type, $req); + + // validate + $errors = $validator->validate($ownership_type); + + // initialize error list + $error_array = []; + + // 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($ownership_type); + $em->flush(); + + // return successful response + return $this->json([ + 'success' => 'Changes have been saved!' + ]); + + } + + /** + * @Menu(selected="ownership_type_list") + * @ParamConverter("ownership_type", class="App\Entity\OwnershipType") + * @IsGranted("ownership_type.update") + */ + public function updateForm($id, EntityManagerInterface $em, OwnershipType $ownership_type) + { + $params = []; + $params['ownership_type'] = $ownership_type; + $params['mode'] = 'update'; + + // response + return $this->render('ownership-type/form.html.twig', $params); + } + + /** + * @ParamConverter("ownership_type", class="App\Entity\OwnershipType") + * @IsGranted("ownership_type.update") + */ + public function updateSubmit(Request $req, EntityManagerInterface $em, ValidatorInterface $validator, OwnershipType $ownership_type) + { + $this->setObject($ownership_type, $req); + + // validate + $errors = $validator->validate($ownership_type); + + // initialize error list + $error_array = []; + + // 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->flush(); + + // return successful response + return $this->json([ + 'success' => 'Changes have been saved!' + ]); + } + + /** + * @ParamConverter("ownership_type", class="App\Entity\OwnershipType") + * @IsGranted("ownership_type.update") + */ + public function deleteSubmit(EntityManagerInterface $em, OwnershipType $ownership_type) + { + // delete this object + $em->remove($ownership_type); + $em->flush(); + + // response + $response = new Response(); + $response->setStatusCode(Response::HTTP_OK); + $response->send(); + } + + + protected function setObject(OwnershipType $obj, Request $req) + { + // set and save values + $obj->setName($req->request->get('name')) + ->setCode($req->request->get('code')); + } + + protected function setQueryFilters($datatable, QueryBuilder $query) + { + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('q.name LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } + } + +} diff --git a/src/Controller/TicketController.php b/src/Controller/TicketController.php index 00dd82be..0f918058 100644 --- a/src/Controller/TicketController.php +++ b/src/Controller/TicketController.php @@ -251,6 +251,9 @@ class TicketController extends Controller $ttype_id = $req->request->get('new_ticket_type'); $sub_ttype_id = $req->request->get('sub_ticket_type'); + // get other description if any + $other_desc = $req->request->get('other_desc'); + // get source of awareness if any $soa_type = $req->request->get('source_of_awareness'); @@ -269,7 +272,8 @@ class TicketController extends Controller ->setDateCreate(new DateTime()) ->setCreatedBy($this->getUser()) ->setSourceOfAwareness($soa_type) - ->setRemarks($remarks); + ->setRemarks($remarks) + ->setOtherDescription($other_desc); // if assigned to customer, set association if ($customer_id) { @@ -458,6 +462,9 @@ class TicketController extends Controller $ttype_id = $req->request->get('new_ticket_type'); $sub_ttype_id = $req->request->get('sub_ticket_type'); + // get other description if any + $other_desc = $req->request->get('other_desc'); + // get source of awareness if any $soa_type = $req->request->get('source_of_awareness'); @@ -474,7 +481,8 @@ class TicketController extends Controller ->setDetails($req->request->get('details')) ->setPlateNumber($req->request->get('plate_number')) ->setSourceOfAwareness($soa_type) - ->setRemarks($remarks); + ->setRemarks($remarks) + ->setOtherDescription($other_desc); // initialize error list $error_array = []; diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index 0278405a..f9783568 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -156,7 +156,7 @@ class JobOrder // where requested job order came from (transaction origin) /** - * @ORM\Column(type="string", length=15) + * @ORM\Column(type="string", length=30) */ protected $source; @@ -415,6 +415,13 @@ class JobOrder */ protected $emergency_type; + // new ownership type + /** + * @ORM\ManyToOne(targetEntity="OwnershipType", inversedBy="job_orders") + * @ORM\JoinColumn(name="ownership_type_id", referencedColumnName="id", nullable=true) + */ + protected $ownership_type; + public function __construct() { $this->date_create = new DateTime(); @@ -1182,4 +1189,14 @@ class JobOrder return $this->emergency_type; } + public function setOwnershipType(OwnershipType $ownership_type = null) + { + $this->ownership_type = $ownership_type; + return $this; + } + + public function getOwnershipType() + { + return $this->ownership_type; + } } diff --git a/src/Entity/OwnershipType.php b/src/Entity/OwnershipType.php new file mode 100644 index 00000000..86d1171c --- /dev/null +++ b/src/Entity/OwnershipType.php @@ -0,0 +1,63 @@ +id; + } + + public function setName($name) + { + $this->name = $name; + return $this; + } + + public function getName() + { + return $this->name; + } + + public function setCode($code) + { + $this->code = $code; + return $this; + } + + public function getCode() + { + return $this->code; + } +} diff --git a/src/Entity/Ticket.php b/src/Entity/Ticket.php index d2a19569..0249d985 100644 --- a/src/Entity/Ticket.php +++ b/src/Entity/Ticket.php @@ -133,6 +133,12 @@ class Ticket */ protected $subticket_type; + // text field for Other subticket type + /** + * @ORM\Column(type="text", nullable=true) + */ + protected $other_description; + public function __construct() { $this->date_create = new DateTime(); @@ -337,4 +343,15 @@ class Ticket { return $this->subticket_type; } + + public function setOtherDescription($other_description) + { + $this->other_description = $other_description; + return $this; + } + + public function getOtherDescription() + { + return $this->other_description; + } } diff --git a/src/Ramcar/ModeOfPayment.php b/src/Ramcar/ModeOfPayment.php index 1b522dde..139dd18c 100644 --- a/src/Ramcar/ModeOfPayment.php +++ b/src/Ramcar/ModeOfPayment.php @@ -9,6 +9,7 @@ class ModeOfPayment extends NameValue const DEBIT_CARD = 'debit_card'; const INSTALLMENT = 'installment'; const GCASH = 'gcash'; + const CREDIT_CARD_AMEX = 'credit_card_amex'; const COLLECTION = [ 'cash' => 'Cash', @@ -16,5 +17,6 @@ class ModeOfPayment extends NameValue 'debit_card' => 'Debit Card', 'installment' => 'Installment - BDO', 'gcash' => 'GCash', + 'credit_card_amex' => 'Credit Card - AMEX', ]; } diff --git a/src/Ramcar/TransactionOrigin.php b/src/Ramcar/TransactionOrigin.php index 80f0d029..fabf2900 100644 --- a/src/Ramcar/TransactionOrigin.php +++ b/src/Ramcar/TransactionOrigin.php @@ -12,8 +12,13 @@ class TransactionOrigin extends NameValue const WALK_IN = 'walk_in'; const LAZADA = 'lazada'; const THIRD_PARTY = 'third_party'; + const YOKOHAMA_OP_FACEBOOK = 'yokohama_op_facebook'; + const YOKOHAMA_TWITTER = 'yokohama_twitter'; + const YOKOHAMA_INSTAGRAM = 'yokohama_instagram'; + const YOKOHAMA_CAROUSELL = 'yokohama_carousell'; // TODO: for now, resq also gets the walk-in option + // resq also gets new YOKOHAMA options const COLLECTION = [ 'call' => 'Hotline', 'online' => 'Online', @@ -23,5 +28,9 @@ class TransactionOrigin extends NameValue 'walk_in' => 'Walk-in', 'lazada' => 'Lazada', 'third_party' => 'Third Party', + 'yokohama_op_facebook' => 'Yokohama OP Facebook', + 'yokohama_twitter' => 'Yokohama Twitter', + 'yokohama_instagram' => 'Yokohama Instagram', + 'yokohama_carousell' => 'Yokohama Carousell', ]; } diff --git a/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php b/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php index b6e913d8..298d9988 100644 --- a/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php @@ -35,8 +35,8 @@ class ResqInvoiceGenerator implements InvoiceGeneratorInterface const WARRANTY_FEE = 0; const OTHER_SERVICES_FEE = 200; const COOLANT_FEE = 1600; - const REFUEL_FEE_GAS = 380; - const REFUEL_FEE_DIESEL = 360; + const REFUEL_FEE_GAS = 340; // for 4 liters + const REFUEL_FEE_DIESEL = 360; // for 4 liters private $security; protected $em; diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index 1562659f..5f88b057 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -27,6 +27,7 @@ use App\Entity\Warranty; use App\Entity\Customer; use App\Entity\CustomerTag; use App\Entity\EmergencyType; +use App\Entity\OwnershipType; use App\Ramcar\InvoiceCriteria; use App\Ramcar\ServiceType; @@ -445,6 +446,10 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $etype_id = $req->request->get('emergency_type', 0); $etype = $em->getRepository(EmergencyType::class)->find($etype_id); + // get ownership type if any + $ownertype_id = $req->request->get('ownership_type', 0); + $owner_type = $em->getRepository(OwnershipType::class)->find($ownertype_id); + // TODO: check status before saving since JO might already // have a status that needs to be retained @@ -483,7 +488,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setInitialConcernNotes($initial_concern_notes) ->setCallerClassification($caller_class) ->setGender($gender) - ->setEmergencyType($etype); + ->setEmergencyType($etype) + ->setOwnershipType($owner_type); // check if user is null, meaning call to create came from API if ($user != null) @@ -700,6 +706,10 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $etype_id = $req->request->get('emergency_type', 0); $etype = $em->getRepository(EmergencyType::class)->find($etype_id); + // get ownership type if any + $ownertype_id = $req->request->get('ownership_type', 0); + $owner_type = $em->getRepository(OwnershipType::class)->find($ownertype_id); + if (empty($error_array)) { // get current user @@ -733,7 +743,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setInitialConcernNotes($initial_concern_notes) ->setCallerClassification($caller_class) ->setGender($gender) - ->setEmergencyType($etype); + ->setEmergencyType($etype) + ->setOwnershipType($owner_type); // did they change invoice? $invoice_items = $req->request->get('invoice_items', []); @@ -901,6 +912,10 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $etype_id = $req->request->get('emergency_type', 0); $etype = $em->getRepository(EmergencyType::class)->find($etype_id); + // get ownership type if any + $ownertype_id = $req->request->get('ownership_type', 0); + $owner_type = $em->getRepository(OwnershipType::class)->find($ownertype_id); + if (empty($error_array)) { // coordinates @@ -931,7 +946,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setInitialConcernNotes($initial_concern_notes) ->setGender($gender) ->setCallerClassification($caller_class) - ->setEmergencyType($etype); + ->setEmergencyType($etype) + ->setOwnershipType($owner_type); // validate $errors = $this->validator->validate($obj); @@ -1045,6 +1061,10 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $etype_id = $req->request->get('emergency_type', 0); $etype = $em->getRepository(EmergencyType::class)->find($etype_id); + // get ownership type if any + $ownertype_id = $req->request->get('ownership_type', 0); + $owner_type = $em->getRepository(OwnershipType::class)->find($ownertype_id); + // get current user $user = $this->security->getUser(); @@ -1077,7 +1097,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setInitialConcernNotes($initial_concern_notes) ->setCallerClassification($caller_class) ->setGender($gender) - ->setEmergencyType($etype); + ->setEmergencyType($etype) + ->setOwnershipType($owner_type); if ($user != null) { @@ -1180,6 +1201,10 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $etype_id = $req->request->get('emergency_type', 0); $etype = $em->getRepository(EmergencyType::class)->find($etype_id); + // get ownership type if any + $ownertype_id = $req->request->get('ownership_type', 0); + $owner_type = $em->getRepository(OwnershipType::class)->find($ownertype_id); + if (empty($error_array)) { // coordinates $point = new Point($req->request->get('coord_lng'), $req->request->get('coord_lat')); @@ -1206,7 +1231,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setInitialConcernNotes($initial_concern_notes) ->setGender($gender) ->setCallerClassification($caller_class) - ->setEmergencyType($etype); + ->setEmergencyType($etype) + ->setOwnershipType($owner_type); // validate $errors = $this->validator->validate($obj); @@ -1429,6 +1455,10 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $etype_id = $req->request->get('emergency_type', 0); $etype = $em->getRepository(EmergencyType::class)->find($etype_id); + // get ownership type if any + $ownertype_id = $req->request->get('ownership_type', 0); + $owner_type = $em->getRepository(OwnershipType::class)->find($ownertype_id); + // get previously assigned hub, if any $old_hub = $obj->getHub(); @@ -1486,6 +1516,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setGender($gender) ->setCallerClassification($caller_class) ->setEmergencyType($etype) + ->setOwnershipType($owner_type) ->clearRider(); if ($user != null) @@ -1704,6 +1735,10 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $etype_id = $req->request->get('emergency_type', 0); $etype = $em->getRepository(EmergencyType::class)->find($etype_id); + // get ownership type if any + $ownertype_id = $req->request->get('ownership_type', 0); + $owner_type = $em->getRepository(OwnershipType::class)->find($ownertype_id); + if (empty($error_array)) { // rider mqtt event // NOTE: need to send this before saving because rider will be cleared @@ -1755,7 +1790,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setInitialConcernNotes($initial_concern_notes) ->setGender($gender) ->setCallerClassification($caller_class) - ->setEmergencyType($etype); + ->setEmergencyType($etype) + ->setOwnershipType($owner_type); if ($user != null) { @@ -2425,13 +2461,17 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $mres = $motiv->getInventory($branch_codes, $skus); foreach ($mres as $mres_item) { - $bcode = $mres_item['BranchCode']; - $inv_count = $mres_item['Quantity']; - if (isset($inv_data[$bcode])) + // check if we have a valid response from motiv, ignore otherwise + if (isset($mres_item['BranchCode'])) { - $hub_id = $inv_data[$bcode]['hub_id']; + $bcode = $mres_item['BranchCode']; + $inv_count = $mres_item['Quantity']; + if (isset($inv_data[$bcode])) + { + $hub_id = $inv_data[$bcode]['hub_id']; - $params['hubs'][$hub_id]['inventory'] = $inv_count; + $params['hubs'][$hub_id]['inventory'] = $inv_count; + } } } @@ -2728,13 +2768,17 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $mres = $motiv->getInventory($branch_codes, $skus); foreach ($mres as $mres_item) { - $bcode = $mres_item['BranchCode']; - $inv_count = $mres_item['Quantity']; - if (isset($inv_data[$bcode])) + // check if we have a valid response from motiv, ignore otherwise + if (isset($mres_item['BranchCode'])) { - $hub_id = $inv_data[$bcode]['hub_id']; + $bcode = $mres_item['BranchCode']; + $inv_count = $mres_item['Quantity']; + if (isset($inv_data[$bcode])) + { + $hub_id = $inv_data[$bcode]['hub_id']; - $params['hubs'][$hub_id]['inventory'] = $inv_count; + $params['hubs'][$hub_id]['inventory'] = $inv_count; + } } } @@ -3246,6 +3290,15 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } $params['emergency_types'] = $emergency_types; + // list of ownership types + $owner_types = $em->getRepository(OwnershipType::class)->findBy([]); + $ownership_types = []; + foreach ($owner_types as $ownership_type) + { + $ownership_types[$ownership_type->getID()] = $ownership_type->getName(); + } + $params['ownership_types'] = $ownership_types; + // list of hubs $hubs = $em->getRepository(Hub::class)->findBy([], ['name' => 'ASC']); $fac_hubs = []; diff --git a/src/Service/MotivConnector.php b/src/Service/MotivConnector.php index 60847192..f0ee8bc1 100644 --- a/src/Service/MotivConnector.php +++ b/src/Service/MotivConnector.php @@ -32,7 +32,13 @@ class MotivConnector $res = $this->curlPost('InventoryService', $body_text); - return json_decode($res, true); + $inv_res = json_decode($res, true); + + // check result + if ($inv_res == null) + return []; + + return $inv_res; } protected function curlPost($url, $body) diff --git a/src/Service/WarrantyHandler.php b/src/Service/WarrantyHandler.php index b59083a2..ccd38746 100644 --- a/src/Service/WarrantyHandler.php +++ b/src/Service/WarrantyHandler.php @@ -14,6 +14,7 @@ use App\Entity\CustomerVehicle; use App\Service\WarrantyAPILogger; use App\Ramcar\WarrantyClass; +use App\Ramcar\WarrantyStatus; use DateTime; use DateInterval; @@ -33,12 +34,10 @@ class WarrantyHandler $batt_list, DateTime $date_purchase, $warranty_class, $user_id, $source, $customer, $cust_vehicle) { - $bmodel_id = ''; - $bsize_id = ''; - $bmodel_name = ''; - $bsize_name =''; - $sap_batt_id = ''; - $w_serial = null; + $bty_model = null; + $bty_size = null; + $sap_batt = null; + $w_serial = ''; foreach ($batt_list as $battery) { @@ -61,20 +60,7 @@ class WarrantyHandler if (!empty($sap_code)) { // find sap battery - /* - $conn = $this->em->getConnection(); - $sql = 'SELECT sap.id FROM sap_battery sap WHERE sap.id = :id'; - $stmt = $conn->prepare($sql); - $stmt->execute(array('id' => $sap_code)); - - $query_results = $stmt->fetchAll(); - - foreach($query_results as $row) - { - $sap_batt_id = $row['id']; - } - */ - $sap_batt_id = $sap_code; + $sap_batt = $this->em->getRepository(SAPBattery::class)->find($sap_code); } } @@ -91,62 +77,31 @@ class WarrantyHandler if (trim($serial) != '') $w_serial = $serial; - // insert warranty - $q = $this->em->createQuery('INSERT App\Entity\Warranty w - SET w.serial = :serial, - w.plate_number = :plate_number, - w.first_name = :first_name, - w.last_name = :last_name, - w.mobile_number = :mobile_number, - w.date_purchase = :date_purchase, - w.warranty_class = :warranty_class, - w.create_source = :create_source, - w.customer_id = :customer_id, - w.vehicle_id = :vehicle_id, - w.bty_model_id = :bmodel_id, - w.bty_size_id = :bsize_id, - w.sap_bty_id = :sap_batt_id, - w.date_expire = :date_expire') - ->setParameters([ - 'serial' => $serial, - 'plate_number' => $plate_number, - 'first_name' => $first_name, - 'last_name' => $last_name, - 'mobile_number' => $mobile_number, - 'date_purchase' => $date_purchase, - 'warranty_class' => $warranty_class, - 'create_source' => $source, - 'customer_id' => $customer->getID(), - 'vehicle_id' => $cust_vehicle->getID(), - 'bmodel_id' => $bmodel_id, - 'bsize_id' => $bsize_id, - 'sap_batt_id' => $sap_batt_id, - 'date_expire' => $date_expire]); - $q->execute(); + $warranty = new Warranty(); + $warranty->setWarrantyClass($warranty_class) + ->setPlateNumber($plate_number) + ->setFirstName($first_name) + ->setLastName($last_name) + ->setMobileNumber($mobile_number) + ->setBatteryModel($bty_model) + ->setBatterySize($bty_size) + ->setSAPBattery($sap_batt) + ->setDatePurchase($date_purchase) + ->setCustomer($customer) + ->setVehicle($cust_vehicle) + ->setCreateSource($source); - // log warranty creation - $action = 'create'; - $exp_date = ''; + // set serial + if (!empty($w_serial)) + $warranty->setSerial($w_serial); + + // set date expire if ($date_expire != null) - $exp_date = $date_expire->format('d-M-y'); + $warranty->setDateExpire($date_expire); - $log_data = [ - 'serial' => $serial, - 'warranty_class' => $warranty_class, - 'first_name' => $first_name, - 'last_name' => $last_name, - 'mobile_number' => $mobile_number, - 'date_purchase' => $date_purchase->format('d-M-y'), - 'date_expire' => $exp_date, - 'battery_model' => $bmodel_name, - 'battery_size' => $bsize_name, - 'sap_battery' => $sap_batt_id, - 'plate_number' => $plate_number, - ]; - //$this->logger->logWarrantyInfo($log_data, '', $user_id, $action, $source); + $this->em->persist($warranty); + $this->em->flush(); - // update customer vehicle with warranty info - //$this->updateCustomerVehicle($serial, $batt_list, $plate_number, $date_expire); } public function updateCustomerVehicle($serial, $batteries, $plate_number, $date_expire) diff --git a/templates/job-order/form.html.twig b/templates/job-order/form.html.twig index b98b27bf..e57f8114 100644 --- a/templates/job-order/form.html.twig +++ b/templates/job-order/form.html.twig @@ -517,6 +517,22 @@
+