diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index 73643bbf..f1721149 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -630,8 +630,8 @@ class APIController extends Controller implements LoggedController ->setPlateNumber($req->request->get('plate_num')) ->setModelYear($req->request->get('model_year')) ->setColor($req->request->get('color')) - ->setFuelType($req->request->get('fuel_type')) - ->setStatusCondition($req->request->get('condition')); + ->setFuelType($this->normalizeString($req->request->get('fuel_type'))) + ->setStatusCondition($this->normalizeString($req->request->get('condition'))); // set warranty code and expiration // TODO: check warranty requirements @@ -4695,4 +4695,9 @@ class APIController extends Controller implements LoggedController return $jo_data; } + + protected function normalizeString($string) + { + return trim(strtolower($string)); + } } diff --git a/src/Controller/TicketController.php b/src/Controller/TicketController.php index 303b34a6..0f9f3cd9 100644 --- a/src/Controller/TicketController.php +++ b/src/Controller/TicketController.php @@ -4,6 +4,8 @@ namespace App\Controller; use App\Ramcar\TicketType; use App\Ramcar\TicketStatus; +use App\Ramcar\SourceOfAwareness; + use App\Entity\Ticket; use App\Entity\Customer; use App\Entity\JobOrder; @@ -172,6 +174,7 @@ class TicketController extends Controller $params['statuses'] = TicketStatus::getCollection(); $params['other_ticket_type'] = TicketType::OTHER; $params['redirect_url'] = $this->generateUrl('ticket_list'); + $params['soa_types'] = SourceOfAwareness::getCollection(); // set redirect url if ($customer) @@ -240,6 +243,12 @@ class TicketController extends Controller $other_ticket_type = $req->request->get('other_ticket_type'); } + // get source of awareness if any + $soa_type = $req->request->get('source_of_awareness'); + + // get remarks + $remarks = $req->request->get('remarks', ''); + // set and save values $obj->setFirstName($first_name) ->setLastName($last_name) @@ -250,7 +259,9 @@ class TicketController extends Controller ->setDetails($req->request->get('details')) ->setPlateNumber($req->request->get('plate_number')) ->setDateCreate(new DateTime()) - ->setCreatedBy($this->getUser()); + ->setCreatedBy($this->getUser()) + ->setSourceOfAwareness($soa_type) + ->setRemarks($remarks); // if assigned to customer, set association if ($customer_id) { @@ -326,6 +337,7 @@ class TicketController extends Controller $params['statuses'] = TicketStatus::getCollection(); $params['other_ticket_type'] = TicketType::OTHER; $params['redirect_url'] = $this->generateUrl('ticket_list'); + $params['soa_types'] = SourceOfAwareness::getCollection(); // set redirect url if ($customer) @@ -423,6 +435,12 @@ class TicketController extends Controller $other_ticket_type = $req->request->get('other_ticket_type'); } + // get source of awareness if any + $soa_type = $req->request->get('source_of_awareness'); + + // get remarks + $remarks = $req->request->get('remarks', ''); + // set and save values $obj->setFirstName($first_name) ->setLastName($last_name) @@ -431,7 +449,9 @@ class TicketController extends Controller ->setTicketType($ticket_type) ->setOtherTicketType($other_ticket_type) ->setDetails($req->request->get('details')) - ->setPlateNumber($req->request->get('plate_number')); + ->setPlateNumber($req->request->get('plate_number')) + ->setSourceOfAwareness($soa_type) + ->setRemarks($remarks); // initialize error list $error_array = []; diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index 591a982e..67f317ca 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -372,6 +372,18 @@ class JobOrder */ protected $rating; + // source of awareness + /** + * @ORM\Column(type="string", length=80, nullable=true) + */ + protected $source_of_awareness; + + // remarks related to source of awareness + /** + * @ORM\Column(type="text", nullable=true) + */ + protected $remarks; + public function __construct() { $this->date_create = new DateTime(); @@ -1061,4 +1073,26 @@ class JobOrder { return $this->rating; } + + public function setSourceOfAwareness($source_of_awareness) + { + $this->source_of_awareness = $source_of_awareness; + return $this; + } + + public function getSourceOfAwareness() + { + return $this->source_of_awareness; + } + + public function setRemarks($remarks) + { + $this->remarks = $remarks; + return $this; + } + + public function getRemarks() + { + return $this->remarks; + } } diff --git a/src/Entity/Ticket.php b/src/Entity/Ticket.php index 35882075..a3218c47 100644 --- a/src/Entity/Ticket.php +++ b/src/Entity/Ticket.php @@ -108,6 +108,18 @@ class Ticket */ protected $job_order; + // source of awareness + /** + * @ORM\Column(type="string", length=80, nullable=true) + */ + protected $source_of_awareness; + + // remarks related to source of awareness + /** + * @ORM\Column(type="text", nullable=true) + */ + protected $remarks; + public function __construct() { $this->date_create = new DateTime(); @@ -265,4 +277,27 @@ class Ticket { return $this->job_order; } + + public function setSourceOfAwareness($source_of_awareness) + { + $this->source_of_awareness = $source_of_awareness; + return $this; + } + + public function getSourceOfAwareness() + { + return $this->source_of_awareness; + } + + public function setRemarks($remarks) + { + $this->remarks = $remarks; + return $this; + } + + public function getRemarks() + { + return $this->remarks; + } + } diff --git a/src/Ramcar/SourceOfAwareness.php b/src/Ramcar/SourceOfAwareness.php new file mode 100644 index 00000000..656b1725 --- /dev/null +++ b/src/Ramcar/SourceOfAwareness.php @@ -0,0 +1,27 @@ + 'Facebook', + 'instagram' => 'Instagram', + 'radio_ads' => 'Radio Ads', + 'tarp_ads' => 'Tarp Ads', + 'flyers' => 'Flyers', + 'word_of_mouth' => 'Word of Mouth', + 'referral' => 'Referral', + 'other' => 'Other', + ]; +} + diff --git a/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php b/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php index bc6f2d67..a79f3f5c 100644 --- a/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php @@ -36,7 +36,7 @@ class ResqInvoiceGenerator implements InvoiceGeneratorInterface const OTHER_SERVICES_FEE = 200; const COOLANT_FEE = 1600; const REFUEL_FEE_GAS = 320; - const REFUEL_FEE_DIESEL = 280; + const REFUEL_FEE_DIESEL = 340; private $security; protected $em; diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index 40be027a..4480c473 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -44,6 +44,7 @@ use App\Ramcar\WillingToWaitContent; use App\Ramcar\WarrantySource; use App\Ramcar\HubCriteria; use App\Ramcar\DeliveryStatus; +use App\Ramcar\SourceOfAwareness; use App\Service\InvoiceGeneratorInterface; use App\Service\JobOrderHandlerInterface; @@ -396,6 +397,12 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } } + // get source of awareness if any + $soa_type = $req->request->get('source_of_awareness'); + + // get remarks + $remarks = $req->request->get('remarks', ''); + // TODO: check status before saving since JO might already // have a status that needs to be retained @@ -427,7 +434,9 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setWillWait($req->request->get('flag_willing_to_wait')) ->setReasonNotWait($reason) ->setNotWaitingNotes($more_reason) - ->setNoTradeInReason($no_trade_in_reason); + ->setNoTradeInReason($no_trade_in_reason) + ->setSourceOfAwareness($soa_type) + ->setRemarks($remarks); // check if user is null, meaning call to create came from API if ($user != null) @@ -622,6 +631,12 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } } + // get source of awareness if any + $soa_type = $req->request->get('source_of_awareness'); + + // get remarks + $remarks = $req->request->get('remarks', ''); + if (empty($error_array)) { // get current user @@ -648,7 +663,9 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setWillWait($req->request->get('flag_willing_to_wait')) ->setReasonNotWait($reason) ->setNotWaitingNotes($more_reason) - ->setNoTradeInReason($no_trade_in_reason); + ->setNoTradeInReason($no_trade_in_reason) + ->setSourceOfAwareness($soa_type) + ->setRemarks($remarks); // did they change invoice? $invoice_items = $req->request->get('invoice_items', []); @@ -794,6 +811,12 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $more_reason = $req->request->get('not_wait_notes'); } + // get source of awareness if any + $soa_type = $req->request->get('source_of_awareness'); + + // get remarks + $remarks = $req->request->get('remarks', ''); + if (empty($error_array)) { // coordinates @@ -817,7 +840,9 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setLandmark($req->request->get('landmark')) ->setWillWait($req->request->get('flag_willing_to_wait')) ->setReasonNotWait($reason) - ->setNotWaitingNotes($more_reason); + ->setNotWaitingNotes($more_reason) + ->setSourceOfAwareness($soa_type) + ->setRemarks($remarks); // validate $errors = $this->validator->validate($obj); @@ -909,6 +934,12 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $more_reason = $req->request->get('not_wait_notes'); } + // get source of awareness if any + $soa_type = $req->request->get('source_of_awareness'); + + // get remarks + $remarks = $req->request->get('remarks', ''); + // get current user $user = $this->security->getUser(); @@ -934,7 +965,9 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setWillWait($req->request->get('flag_willing_to_wait')) ->setReasonNotWait($reason) ->setNotWaitingNotes($more_reason) - ->setDeliveryStatus(DeliveryStatus::RIDER_ASSIGN); + ->setDeliveryStatus(DeliveryStatus::RIDER_ASSIGN) + ->setSourceOfAwareness($soa_type) + ->setRemarks($remarks); if ($user != null) { @@ -1015,6 +1048,12 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $more_reason = $req->request->get('not_wait_notes'); } + // get source of awareness if any + $soa_type = $req->request->get('source_of_awareness'); + + // get remarks + $remarks = $req->request->get('remarks', ''); + if (empty($error_array)) { // coordinates $point = new Point($req->request->get('coord_lng'), $req->request->get('coord_lat')); @@ -1034,7 +1073,9 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setWillWait($req->request->get('flag_willing_to_wait')) ->setReasonNotWait($reason) ->setNotWaitingNotes($more_reason) - ->setDeliveryStatus(DeliveryStatus::FULFILLED); + ->setDeliveryStatus(DeliveryStatus::FULFILLED) + ->setSourceOfAwareness($soa_type) + ->setRemarks($remarks); // validate $errors = $this->validator->validate($obj); @@ -1235,6 +1276,12 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $more_reason = $req->request->get('not_wait_notes'); } + // get source of awareness if any + $soa_type = $req->request->get('source_of_awareness'); + + // get remarks + $remarks = $req->request->get('remarks', ''); + // get previously assigned hub, if any $old_hub = $obj->getHub(); @@ -1269,6 +1316,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setWillWait($req->request->get('flag_willing_to_wait')) ->setReasonNotWait($reason) ->setNotWaitingNotes($more_reason) + ->setSourceOfAwareness($soa_type) + ->setRemarks($remarks) ->clearRider(); if ($user != null) @@ -1465,6 +1514,12 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $more_reason = $req->request->get('not_wait_notes'); } + // get source of awareness if any + $soa_type = $req->request->get('source_of_awareness'); + + // get remarks + $remarks = $req->request->get('remarks', ''); + if (empty($error_array)) { // rider mqtt event // NOTE: need to send this before saving because rider will be cleared @@ -1505,6 +1560,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setWillWait($req->request->get('flag_willing_to_wait')) ->setReasonNotWait($reason) ->setNotWaitingNotes($more_reason) + ->setSourceOfAwareness($soa_type) + ->setRemarks($remarks) ->setDeliveryStatus(DeliveryStatus::RIDER_ASSIGN); if ($user != null) @@ -3011,6 +3068,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $params['willing_to_wait_content'] = WillingToWaitContent::getCollection(); $params['no_wait_reasons'] = CustomerNotWaitReason::getCollection(); $params['no_trade_in_reasons'] = NoTradeInReason::getCollection(); + $params['soa_types'] = SourceOfAwareness::getCollection(); } protected function initFormTags(&$params) diff --git a/templates/job-order/form.html.twig b/templates/job-order/form.html.twig index 4fff73e0..2d510c36 100644 --- a/templates/job-order/form.html.twig +++ b/templates/job-order/form.html.twig @@ -449,6 +449,23 @@
+ +
+
+ + + +
+
+ + + +