From 59d76c39757eb4e4a25d9dd66d084c264d89c3c1 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sun, 4 Feb 2018 04:00:38 +0800 Subject: [PATCH] Add locking version in job order entities and place TODOs in controller --- src/Controller/JobOrderController.php | 12 ++++++++ src/Entity/JobOrder.php | 44 +++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index bab6eacb..917a4037 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -271,6 +271,12 @@ class JobOrderController extends BaseController { $this->denyAccessUnlessGranted('jo_proc.list', null, 'No access.'); + // TODO: check if anyone is already processing + + // TODO: lock and make this user be the processor + + // TODO: throw error if unable to lock (means someone already locked it before us) + $params = $this->initParameters('jo_proc'); $params['mode'] = 'update-processing'; @@ -335,6 +341,8 @@ class JobOrderController extends BaseController { $this->denyAccessUnlessGranted('jo_proc.list', null, 'No access.'); + // TODO: check if we're the one processing, return error otherwise + // initialize error list $error_array = []; @@ -398,6 +406,10 @@ class JobOrderController extends BaseController ], 422); } + // TODO: unlock job order and set version to 0, so someone else can modify it + + // NOTE: we don't touch processed_by since we're the one who processed it + // validated! save the entity $em->flush(); diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index c834bca4..81c9fba3 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -80,6 +80,14 @@ class JobOrder */ protected $assigned_by; + // user that processed or is processing the job order + // used to determine lock + /** + * @ORM\ManyToOne(targetEntity="User", inversedBy="job_orders_processed") + * @ORM\JoinColumn(name="process_user_id", referencedColumnName="id", nullable=true) + */ + protected $processed_by; + // service type /** * @ORM\Column(type="string", length=25) @@ -153,6 +161,18 @@ class JobOrder */ protected $delivery_address; + // invoice + protected $invoice; + + // version for optimistic locking + // this will intiially be set to 0 then modified to be the id of the user that locks it + // so only the user can update the entity + /** + * @ORM\Version + * @ORM\Column(type="integer") + */ + protected $version; + public function __construct() { $this->date_create = new DateTime(); @@ -160,6 +180,8 @@ class JobOrder $this->flag_advance = false; $this->source = 'mobile'; + + $this->version = 0; } public function getID() @@ -255,6 +277,17 @@ class JobOrder return $this->assigned_by; } + public function setProcessedBy(User $user) + { + $this->processed_by = $user; + return $this; + } + + public function getProcessedBy() + { + return $this->processed_by; + } + public function setServiceType($service_type) { $this->service_type = $service_type; @@ -375,4 +408,15 @@ class JobOrder { return $this->delivery_address; } + + public function setVersion($version) + { + $this->version = $version; + return $this; + } + + public function getVersion() + { + return $this->version; + } }