diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index 15d44e1d..d50471fe 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -605,7 +605,7 @@ class JobOrderController extends Controller * @Menu(selected="jo_all") */ public function allForm($id, JobOrderHandlerInterface $jo_handler, - GISManagerInterface $gis) + GISManagerInterface $gis, EntityManagerInterface $em) { $this->denyAccessUnlessGranted('jo_all.list', null, 'No access.'); @@ -618,6 +618,8 @@ class JobOrderController extends Controller throw $this->createNotFoundException($e->getMessage()); } + $params['vmfgs'] = $em->getRepository(VehicleManufacturer::class)->findAll(); + $params['vmakes'] = $em->getRepository(Vehicle::class)->findAll(); $params['return_url'] = $this->generateUrl('jo_all'); $params['submit_url'] = ''; $params['map_js_file'] = $gis->getJSJOFile(); @@ -736,7 +738,7 @@ class JobOrderController extends Controller */ // TODO: this snippet should be in the invoice generator - $error = $ic->invoicePromo($criteria, $promo_id); + $error = $ic->validateDiscount($criteria, $promo_id); if (!$error) $error = $ic->invoiceBatteries($criteria, $items); diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index 36834cc1..08a1f15a 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -280,6 +280,12 @@ class JobOrder */ protected $hub_rejections; + // meta + /** + * @ORM\Column(type="json") + */ + protected $meta; + public function __construct() { $this->date_create = new DateTime(); @@ -297,6 +303,8 @@ class JobOrder $this->trade_in_type = null; $this->flag_rider_rating = false; $this->flag_coolant = false; + + $this->meta = []; } public function getID() @@ -802,4 +810,15 @@ class JobOrder { return $this->hub_rejections; } + + public function addMeta($id, $value) + { + $this->meta[$id] = $value; + return $this; + } + + public function getMeta($id) + { + return $this->meta[$id]; + } } diff --git a/src/Ramcar/InvoiceCriteria.php b/src/Ramcar/InvoiceCriteria.php index 5ea5e623..49290e33 100644 --- a/src/Ramcar/InvoiceCriteria.php +++ b/src/Ramcar/InvoiceCriteria.php @@ -12,6 +12,7 @@ class InvoiceCriteria protected $promos; protected $cv; protected $flag_coolant; + protected $discount; // entries are battery and trade-in combos protected $entries; @@ -23,6 +24,7 @@ class InvoiceCriteria $this->entries = []; $this->cv = null; $this->flag_coolant = false; + $this->discount = 0; } public function setServiceType($stype) @@ -125,4 +127,15 @@ class InvoiceCriteria { return $this->flag_coolant; } + + public function setDiscount($discount) + { + $this->discount = $discount; + return $this; + } + + public function getDiscount() + { + return $this->discount; + } } diff --git a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php index f25348a4..73f4524e 100644 --- a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php @@ -17,7 +17,6 @@ use App\Ramcar\FuelType; use App\Entity\Invoice; use App\Entity\InvoiceItem; use App\Entity\Battery; -use App\Entity\Promo; use App\Entity\User; use App\Service\InvoiceGeneratorInterface; @@ -106,10 +105,6 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface // break; } - // TODO: check if any promo is applied - // apply discounts - $promos = $criteria->getPromos(); - // get current user $user = $this->security->getUser(); if ($user != null) @@ -140,7 +135,8 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface $criteria->setServiceType($jo->getServiceType()) ->setCustomerVehicle($jo->getCustomerVehicle()); - $ierror = $this->invoicePromo($criteria, $promo_id); + $discount = $promo_id; + $ierror = $this->validateDiscount($criteria, $discount); if (!$ierror && !empty($invoice_items)) { @@ -224,27 +220,26 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface return 0; } - public function invoicePromo(InvoiceCriteria $criteria, $promo_id) + public function validateDiscount(InvoiceCriteria $criteria, $discount) { + // return error if there's a problem, false otherwise // check service type $stype = $criteria->getServiceType(); if ($stype != CMBServiceType::BATTERY_REPLACEMENT_NEW) return null; - - if (empty($promo_id)) + // check if discount is blank or 0 + if ((empty($discount)) || ($discount == 0)) { return false; } - // check if this is a valid promo - $promo = $this->em->getRepository(Promo::class)->find($promo_id); + // check if discount is greater than 50 or negative number + if (($discount > 50) || ($discount < 0)) + return 'Invalid discount specified'; - if (empty($promo)) - return 'Invalid promo specified.'; - - $criteria->addPromo($promo); + $criteria->setDiscount($discount); return false; } @@ -389,33 +384,14 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface protected function processDiscount(&$total, InvoiceCriteria $criteria, Invoice $invoice) { - $promos = $criteria->getPromos(); - if (count($promos) < 1) - return; - - // NOTE: only get first promo because only one is applicable anyway - $promo = $promos[0]; - - $rate = $promo->getDiscountRate(); - $apply_to = $promo->getDiscountApply(); - - switch ($apply_to) - { - case DiscountApply::SRP: - $discount = round($total['sell_price'] * $rate, 2); - break; - case DiscountApply::OPL: - // $discount = round($total['sell_price'] * 0.6 / 0.7 * $rate, 2); - $discount = round($total['sell_price'] * (1 - 1.5 / 0.7 * $rate), 2); - break; - } + $discount = $criteria->getDiscount(); // if discount is higher than 0, display in invoice if ($discount > 0) { $item = new InvoiceItem(); $item->setInvoice($invoice) - ->setTitle('Promo discount') + ->setTitle('Discount') ->setQuantity(1) ->setPrice(-1 * $discount); $invoice->addItem($item); @@ -425,7 +401,7 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface $total['total_price'] -= $discount; // process - $invoice->setPromo($promo); + $invoice->setDiscount($discount); } protected function processJumpstart(&$total, $invoice) diff --git a/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php b/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php index c5e9c81c..f9aad46a 100644 --- a/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/ResqInvoiceGenerator.php @@ -18,6 +18,7 @@ use App\Entity\Invoice; use App\Entity\InvoiceItem; use App\Entity\User; use App\Entity\Battery; +use App\Entity\Promo; use App\Service\InvoiceGeneratorInterface; diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index a2727fea..cfdab814 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -522,6 +522,13 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface } } + // get discount and set to meta + $discount = $req->request->get('invoice_promo'); + + // check if discount is greater than 50 or negative number + if (($discount > 50) || ($discount < 0)) + $error_array['invoice_promo'] = 'Invalid discount specified'; + if (empty($error_array)) { // get current user @@ -551,7 +558,9 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface ->setHub($hub) ->setRider($rider); - // check if user is null, meaning call to create came from API + $jo->addMeta('discount', $discount); + + // check if user is null, meaning call to create came from API if ($user != null) { $jo->setCreatedBy($user); @@ -2488,6 +2497,13 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $hub_coordinates = $hub->getCoordinates(); } + // get discount and set to meta + $discount = $req->request->get('invoice_promo'); + + // check if discount is greater than 50 or negative number + if (($discount > 50) || ($discount < 0)) + $error_array['invoice_promo'] = 'Invalid discount specified'; + if (empty($error_array)) { // get current user @@ -2513,6 +2529,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface ->setCoordinates($hub_coordinates) ->setHub($hub); + $jo->addMeta('discount', $discount); + // check if user is null, meaning call to create came from API if ($user != null) { diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index e0714676..34fe7af4 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -500,22 +500,13 @@