From 6cd6fccb8c837f1a8f7646c488a5d6d927e87701 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Tue, 27 Feb 2018 06:21:43 +0800 Subject: [PATCH 1/2] Add unlock processor and assignor feature for job order #14 --- config/acl.yaml | 4 ++ config/routes/job_order.yaml | 12 +++++- src/Controller/JobOrderController.php | 39 +++++++++++++++++++ src/Entity/JobOrder.php | 4 +- templates/job-order/list.assigning.html.twig | 4 ++ templates/job-order/list.html.twig | 4 ++ templates/job-order/list.processing.html.twig | 1 + 7 files changed, 65 insertions(+), 3 deletions(-) diff --git a/config/acl.yaml b/config/acl.yaml index ce8eb67a..14d8a410 100644 --- a/config/acl.yaml +++ b/config/acl.yaml @@ -187,8 +187,12 @@ access_keys: label: Incoming - id: jo_proc.list label: Processing + - id: jo_proc.unlock + label: Processing Unlock - id: jo_assign.list label: Assigning + - id: jo_assign.unlock + label: Assigning Unlock - id: jo_fulfill.list label: Fulfillment diff --git a/config/routes/job_order.yaml b/config/routes/job_order.yaml index a3099fd0..755c7f84 100644 --- a/config/routes/job_order.yaml +++ b/config/routes/job_order.yaml @@ -84,4 +84,14 @@ jo_fulfill_submit: jo_search: path: /job-order/search controller: App\Controller\JobOrderController::getJobOrders - methods: [GET] \ No newline at end of file + methods: [GET] + +jo_proc_unlock: + path: /job-order/{id}/unlock/processor + controller: App\Controller\JobOrderController::unlockProcessor + methods: [GET] + +jo_assign_unlock: + path: /job-order/{id}/unlock/assignor + controller: App\Controller\JobOrderController::unlockAssignor + methods: [GET] diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index 826088b8..99e4710f 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -278,6 +278,7 @@ class JobOrderController extends BaseController $tier_name = 'Processing'; $rows_route = 'jo_proc_rows'; $edit_route = 'jo_proc_form'; + $unlock_route = 'jo_proc_unlock'; $jo_status = JOStatus::PENDING; break; case 'assign': @@ -285,6 +286,7 @@ class JobOrderController extends BaseController $tier_name = 'Assigning'; $rows_route = 'jo_assign_rows'; $edit_route = 'jo_assign_form'; + $unlock_route = 'jo_assign_unlock'; $jo_status = JOStatus::RIDER_ASSIGN; break; case 'fulfill': @@ -311,6 +313,7 @@ class JobOrderController extends BaseController 'name' => $tier_name, 'rows_route' => $rows_route, 'edit_route' => $edit_route, + 'unlock_route' => $unlock_route, 'jo_status' => $jo_status ]; } @@ -436,6 +439,7 @@ class JobOrderController extends BaseController // add crud urls $row['meta']['update_url'] = $this->generateUrl($tier_params['edit_route'], ['id' => $row['id']]); + $row['meta']['unlock_url'] = $this->generateUrl($tier_params['unlock_route'], ['id' => $row['id']]); $rows[] = $row; } @@ -1094,4 +1098,39 @@ class JobOrderController extends BaseController 'invoice' => $invoice ]); } + + public function unlockProcessor($id) + { + $this->denyAccessUnlessGranted('jo_proc.unlock', null, 'No access.'); + + // clear lock + $em = $this->getDoctrine()->getManager(); + $jo = $em->getRepository(JobOrder::class)->find($id); + if ($jo == null) + return $this->redirectToRoute('jo_proc'); + + $jo->setProcessedBy(null); + + $em->flush(); + + // redirect to list + return $this->redirectToRoute('jo_proc'); + } + + public function unlockAssignor($id) + { + $this->denyAccessUnlessGranted('jo_assign.unlock', null, 'No access.'); + + // clear lock + $em = $this->getDoctrine()->getManager(); + $jo = $em->getRepository(JobOrder::class)->find($id); + if ($jo == null) + return $this->redirectToRoute('jo_assign'); + + $jo->setAssignedBy(null); + $em->flush(); + + // redirect to list + return $this->redirectToRoute('jo_assign'); + } } diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index fe3e16c2..bc4dc342 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -288,7 +288,7 @@ class JobOrder return $this->created_by; } - public function setAssignedBy(User $assigned_by) + public function setAssignedBy(User $assigned_by = null) { $this->assigned_by = $assigned_by; return $this; @@ -299,7 +299,7 @@ class JobOrder return $this->assigned_by; } - public function setProcessedBy(User $user) + public function setProcessedBy(User $user = null) { $this->processed_by = $user; return $this; diff --git a/templates/job-order/list.assigning.html.twig b/templates/job-order/list.assigning.html.twig index ca7635bc..d1c32275 100644 --- a/templates/job-order/list.assigning.html.twig +++ b/templates/job-order/list.assigning.html.twig @@ -109,6 +109,10 @@ overflow: 'visible', template: function (row, index, datatable) { var actions = ''; + + {% if is_granted('jo_assign.unlock') %} + actions += ''; + {% endif %} return actions; }, diff --git a/templates/job-order/list.html.twig b/templates/job-order/list.html.twig index 2878f10a..53ee5aef 100644 --- a/templates/job-order/list.html.twig +++ b/templates/job-order/list.html.twig @@ -105,6 +105,10 @@ overflow: 'visible', template: function (row, index, datatable) { var actions = ''; + + {% if is_granted('jo_proc.unlock') %} + actions += ''; + {% endif %} return actions; }, diff --git a/templates/job-order/list.processing.html.twig b/templates/job-order/list.processing.html.twig index 2878f10a..64d7fff8 100644 --- a/templates/job-order/list.processing.html.twig +++ b/templates/job-order/list.processing.html.twig @@ -105,6 +105,7 @@ overflow: 'visible', template: function (row, index, datatable) { var actions = ''; + actions += ''; return actions; }, From dddfbef61916b997a89eca98ed4365ccee98b7dd Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Tue, 27 Feb 2018 06:28:31 +0800 Subject: [PATCH 2/2] Fix fulfillment table bug #14 --- src/Controller/JobOrderController.php | 4 +++- templates/job-order/list.html.twig | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index 99e4710f..e0451b4d 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -294,6 +294,7 @@ class JobOrderController extends BaseController $tier_name = 'Fullfillment'; $rows_route = 'jo_fulfill_rows'; $edit_route = 'jo_fulfill_form'; + $unlock_route = ''; $jo_status = [ JOStatus::ASSIGNED, JOStatus::IN_PROGRESS @@ -439,7 +440,8 @@ class JobOrderController extends BaseController // add crud urls $row['meta']['update_url'] = $this->generateUrl($tier_params['edit_route'], ['id' => $row['id']]); - $row['meta']['unlock_url'] = $this->generateUrl($tier_params['unlock_route'], ['id' => $row['id']]); + if ($tier_params['unlock_route'] != '') + $row['meta']['unlock_url'] = $this->generateUrl($tier_params['unlock_route'], ['id' => $row['id']]); $rows[] = $row; } diff --git a/templates/job-order/list.html.twig b/templates/job-order/list.html.twig index 53ee5aef..114d45f0 100644 --- a/templates/job-order/list.html.twig +++ b/templates/job-order/list.html.twig @@ -106,7 +106,7 @@ template: function (row, index, datatable) { var actions = ''; - {% if is_granted('jo_proc.unlock') %} + {% if row.meta.unlock_url != "" && is_granted('jo_proc.unlock') %} actions += ''; {% endif %}