From fd982a1e0516be7b5f1073fd863316ba4d543c83 Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Mon, 26 Feb 2018 15:14:38 +0800 Subject: [PATCH 1/5] Update ticket types #21 --- src/Ramcar/TicketType.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Ramcar/TicketType.php b/src/Ramcar/TicketType.php index 8483d25b..0e1fd865 100644 --- a/src/Ramcar/TicketType.php +++ b/src/Ramcar/TicketType.php @@ -4,17 +4,20 @@ namespace App\Ramcar; class TicketType extends NameValue { - const COMPLAINT = 'complaint'; - const QUESTION = 'question'; - const ORDERS = 'orders'; - const BILLING = 'billing'; - const OTHER = 'other'; + const COMPLAINT = 'complaint'; + const INQUIRY = 'inquiry'; + const ORDERS = 'orders'; + const BILLING = 'billing'; + const OTHER = 'other'; + const FOR_FOLLOW_UP = 'for_follow_up'; const COLLECTION = [ 'complaint' => 'Complaint', - 'question' => 'Question', + 'inquiry' => 'Inquiry', 'orders' => 'Orders', 'billing' => 'Billing', 'other' => 'Other', + 'for_follow_up' => 'For follow-up', + ]; } -- 2.43.5 From 7cc7c81d9898e4ed22604d554ed7d859c2253dcd Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Mon, 26 Feb 2018 15:33:38 +0800 Subject: [PATCH 2/5] Add plate number to tickets #21 --- src/Controller/TicketController.php | 5 ++++- src/Entity/Ticket.php | 17 +++++++++++++++++ templates/ticket/form.html.twig | 7 +++++++ templates/ticket/list.html.twig | 4 ++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/Controller/TicketController.php b/src/Controller/TicketController.php index 5a307c2c..af5b1e60 100644 --- a/src/Controller/TicketController.php +++ b/src/Controller/TicketController.php @@ -99,6 +99,7 @@ class TicketController extends BaseController $row['contact_num'] = $orow->getContactNumber(); $row['status'] = $ticket_statuses[$orow->getStatus()]; $row['ticket_type'] = $ticket_types[$orow->getTicketType()]; + $row['plate_number'] = $orow->getPlateNumber(); // add row metadata $row['meta'] = [ @@ -216,6 +217,7 @@ class TicketController extends BaseController ->setOtherTicketType($other_ticket_type) ->setSubject($req->request->get('subject')) ->setDetails($req->request->get('details')) + ->setPlateNumber($req->request->get('plate_number')) ->setDateCreate(new DateTime()) ->setCreatedBy($this->getUser()); @@ -348,7 +350,8 @@ class TicketController extends BaseController ->setTicketType($ticket_type) ->setOtherTicketType($other_ticket_type) ->setSubject($req->request->get('subject')) - ->setDetails($req->request->get('details')); + ->setDetails($req->request->get('details')) + ->setPlateNumber($req->request->get('plate_number')); // initialize error list $error_array = []; diff --git a/src/Entity/Ticket.php b/src/Entity/Ticket.php index 2ed8ac5f..df305df7 100644 --- a/src/Entity/Ticket.php +++ b/src/Entity/Ticket.php @@ -83,6 +83,12 @@ class Ticket */ protected $details; + // plate number + /** + * @ORM\Column(type="string", length=10, nullable=true) + */ + protected $plate_number; + // user that created the ticket /** * @ORM\ManyToOne(targetEntity="User", inversedBy="tickets") @@ -222,6 +228,17 @@ class Ticket return $this->details; } + public function setPlateNumber($plate_number) + { + $this->plate_number = $plate_number; + return $this; + } + + public function getPlateNumber() + { + return $this->plate_number; + } + public function setCreatedBy(User $created_by) { $this->created_by = $created_by; diff --git a/templates/ticket/form.html.twig b/templates/ticket/form.html.twig index 9770422f..0a2c586c 100644 --- a/templates/ticket/form.html.twig +++ b/templates/ticket/form.html.twig @@ -80,6 +80,13 @@ +
+
+ + + +
+
diff --git a/templates/ticket/list.html.twig b/templates/ticket/list.html.twig index 3238942f..fc7c6c42 100644 --- a/templates/ticket/list.html.twig +++ b/templates/ticket/list.html.twig @@ -105,6 +105,10 @@ field: 'contact_num', title: 'Contact No.' }, + { + field: 'plate_number', + title: 'Plate Number' + }, { field: 'ticket_type', title: 'Type' -- 2.43.5 From 4aee9f8cde7e0da85566ff272f1e104c4c95994d Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Mon, 26 Feb 2018 16:17:50 +0800 Subject: [PATCH 3/5] Move ticket type fields to top of form #21 --- templates/ticket/form.html.twig | 56 ++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/templates/ticket/form.html.twig b/templates/ticket/form.html.twig index 0a2c586c..61d16890 100644 --- a/templates/ticket/form.html.twig +++ b/templates/ticket/form.html.twig @@ -38,32 +38,6 @@
-
- - - -
-
- - - -
-
- - - -
-
-
-
- - - -
+ +
+
+ + + +
+
+
+
+ + + +
+
@@ -87,6 +80,17 @@
+
+
+ + + +
+
-- 2.43.5 From 7b394197105a62b27926ff586677d4d194a8e229 Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Mon, 26 Feb 2018 17:52:10 +0800 Subject: [PATCH 4/5] Link tickets to job order #21 --- src/Entity/JobOrder.php | 11 +++++++++++ src/Entity/Ticket.php | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index 2cbac875..053c98e9 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -173,6 +173,12 @@ class JobOrder */ protected $cancel_reason; + // tickets associated with job order + /** + * @ORM\OneToMany(targetEntity="Ticket", mappedBy="job_order") + */ + protected $tickets; + public function __construct() { $this->date_create = new DateTime(); @@ -435,4 +441,9 @@ class JobOrder { return $this->cancel_reason; } + + public function getTickets() + { + return $this->tickets; + } } diff --git a/src/Entity/Ticket.php b/src/Entity/Ticket.php index df305df7..38faf2be 100644 --- a/src/Entity/Ticket.php +++ b/src/Entity/Ticket.php @@ -103,6 +103,13 @@ class Ticket */ protected $customer; + // job order associated with the ticket (optional) + /** + * @ORM\ManyToOne(targetEntity="JobOrder", inversedBy="tickets") + * @ORM\JoinColumn(name="job_order_id", referencedColumnName="id", nullable=true) + */ + protected $job_order; + public function __construct() { $this->date_create = new DateTime(); @@ -260,4 +267,15 @@ class Ticket { return $this->customer; } + + public function setJobOrder(JobOrder $job_order) + { + $this->job_order = $job_order; + return $this; + } + + public function getJobOrder() + { + return $this->job_order; + } } -- 2.43.5 From 50347027a3836dc852263a2e20ac2bcd2e4a936f Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Mon, 26 Feb 2018 17:52:38 +0800 Subject: [PATCH 5/5] Add job order ticket form blocks #21 --- config/routes/ticket.yaml | 6 +- src/Controller/TicketController.php | 42 ++++++++++- templates/job-order/form.html.twig | 106 ++++++++++++++++++++++++++-- templates/ticket/form.html.twig | 17 ++++- 4 files changed, 161 insertions(+), 10 deletions(-) diff --git a/config/routes/ticket.yaml b/config/routes/ticket.yaml index a1d6bdff..6e4d5343 100644 --- a/config/routes/ticket.yaml +++ b/config/routes/ticket.yaml @@ -10,18 +10,20 @@ ticket_rows: methods: [POST] ticket_create: - path: /tickets/create/{customer_id} + path: /tickets/create/{customer_id}/{job_order_id} controller: App\Controller\TicketController::addForm methods: [GET] defaults: customer_id: false + job_order_id: false ticket_create_submit: - path: /tickets/create/{customer_id} + path: /tickets/create/{customer_id}/{job_order_id} controller: App\Controller\TicketController::addSubmit methods: [POST] defaults: customer_id: false + job_order_id: false ticket_update: path: /tickets/{id} diff --git a/src/Controller/TicketController.php b/src/Controller/TicketController.php index af5b1e60..f8a2d3e0 100644 --- a/src/Controller/TicketController.php +++ b/src/Controller/TicketController.php @@ -7,6 +7,7 @@ use App\Ramcar\TicketType; use App\Ramcar\TicketStatus; use App\Entity\Ticket; use App\Entity\Customer; +use App\Entity\JobOrder; use Doctrine\ORM\Query; use Symfony\Component\HttpFoundation\Request; @@ -123,7 +124,7 @@ class TicketController extends BaseController ]); } - public function addForm(Request $req, $customer_id) + public function addForm(Request $req, $customer_id, $job_order_id) { $this->denyAccessUnlessGranted('ticket.add', null, 'No access.'); @@ -131,6 +132,7 @@ class TicketController extends BaseController $params['obj'] = new Ticket(); $params['mode'] = 'create'; $params['customer'] = false; + $params['job_order'] = false; $customer = false; // get customer data @@ -144,6 +146,18 @@ class TicketController extends BaseController // add to view $params['customer'] = $customer; + + // get job order data + if ($job_order_id) { + $job_order = $em->getRepository(JobOrder::class)->find($job_order_id); + + // make sure this row exists + if (empty($job_order)) + throw $this->createNotFoundException('This job order does not exist'); + + // add to view + $params['job_order'] = $job_order; + } } // get parent associations @@ -160,13 +174,21 @@ class TicketController extends BaseController if ($referer == $cust_update_url) $params['redirect_url'] = $cust_update_url; + + if ($job_order) + { + $job_order_url = $this->generateUrl('jo_proc_form', ['id' => $job_order->getID()], UrlGeneratorInterface::ABSOLUTE_URL); + + if ($referer == $job_order_url) + $params['redirect_url'] = $job_order_url; + } } // response return $this->render('ticket/form.html.twig', $params); } - public function addSubmit(Request $req, ValidatorInterface $validator, $customer_id) + public function addSubmit(Request $req, ValidatorInterface $validator, $customer_id, $job_order_id) { $this->denyAccessUnlessGranted('ticket.add', null, 'No access.'); @@ -190,6 +212,15 @@ class TicketController extends BaseController if (count($mobile_numbers) > 0) { $contact_num = $mobile_numbers[0]->getID(); } + + // get job order data + if ($job_order_id) { + $job_order = $em->getRepository(JobOrder::class)->find($job_order_id); + + // make sure this row exists + if (empty($job_order)) + throw $this->createNotFoundException('This job order does not exist'); + } } else { // get values directly from form $first_name = $req->request->get('first_name'); @@ -226,6 +257,11 @@ class TicketController extends BaseController $obj->setCustomer($customer); } + // if linked to job order, set association + if ($job_order_id) { + $obj->setJobOrder($job_order); + } + // initialize error list $error_array = []; @@ -279,9 +315,11 @@ class TicketController extends BaseController $em = $this->getDoctrine()->getManager(); $customer = $obj->getCustomer(); + $job_order = $obj->getJobOrder(); // get parent associations $params['customer'] = $customer; + $params['job_order'] = $job_order; $params['ticket_types'] = TicketType::getCollection(); $params['statuses'] = TicketStatus::getCollection(); $params['other_ticket_type'] = TicketType::OTHER; diff --git a/templates/job-order/form.html.twig b/templates/job-order/form.html.twig index a651990a..d395a52b 100644 --- a/templates/job-order/form.html.twig +++ b/templates/job-order/form.html.twig @@ -376,7 +376,7 @@ {% if mode == 'update-processing' %}
-
+

Nearest Hubs @@ -421,8 +421,12 @@

+
+
+
+
+
-
{% endif %} {% if mode in ['update-assigning', 'update-fulfillment'] %} @@ -473,7 +477,7 @@
{% if mode == 'update-assigning' %} -
+

Rider Assignment @@ -525,7 +529,7 @@ {% endif %} {% if mode == 'update-fulfillment' %} -
+

Rider Details @@ -565,6 +569,28 @@ {% endif %} {% endif %} + {% if mode != 'create' %} +
+ +
+
+

+ Tickets +

+
+
+
+
+
+
+
+ +
+
+ {% endif %} +

@@ -1070,7 +1096,7 @@ $(function() { selectedHub = id; // center the map - omap.setCenter(lat, lng); + hmap.setCenter(lat, lng); } else { // unhighlight this row $(this).removeClass('m-table__row--primary'); @@ -1104,6 +1130,76 @@ $(function() { } }); {% endif %} + + {% if mode != 'create' %} + var ticketRows = []; + + {% for ticket in obj.getTickets %} + trow = { + id: "{{ ticket.getID }}", + date_create: "{{ ticket.getDateCreate|date('d M Y - h:i A') }}", + subject: "{{ ticket.getSubject }}", + ticket_type: "{{ ticket.getTicketTypeText }}", + status: "{{ ticket.getStatusText }}", + edit_url: "{{ url('ticket_update', {'id': ticket.getID}) }}" + }; + + ticketRows.push(trow); + {% endfor %} + + // tickets data table + var ticketOptions = { + data: { + type: 'local', + source: ticketRows, + saveState: { + cookie: false, + webstorage: false + } + }, + layout: { + scroll: true + }, + columns: [ + { + field: 'id', + title: 'ID', + width: 30 + }, + { + field: 'date_create', + title: 'Date Created', + width: 200 + }, + { + field: 'subject', + title: 'Subject', + width: 300 + }, + { + field: 'ticket_type', + title: 'Ticket Type' + }, + { + field: 'status', + title: 'Status' + }, + { + field: 'Actions', + width: 70, + title: 'Actions', + sortable: false, + overflow: 'visible', + template: function (row, index, datatable) { + return ''; + }, + } + ], + pagination: false + }; + + var ticketTable = $("#data-tickets").mDatatable(ticketOptions); + {% endif %} }); {% endblock %} diff --git a/templates/ticket/form.html.twig b/templates/ticket/form.html.twig index 61d16890..e7bcee69 100644 --- a/templates/ticket/form.html.twig +++ b/templates/ticket/form.html.twig @@ -35,7 +35,7 @@
- +
@@ -107,6 +107,21 @@
+
+
+ + + +
+ {% if job_order %} +
+ + +
+ {% endif %} +
-- 2.43.5