From d439a411a8180b0f3d30636d79c21cd34e84148e Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 14 Feb 2020 09:40:08 +0000 Subject: [PATCH] Change computation of discount for CMB. #343 --- src/Controller/JobOrderController.php | 2 +- src/Entity/Invoice.php | 3 +- src/Ramcar/InvoiceCriteria.php | 14 +++++ .../InvoiceGenerator/CMBInvoiceGenerator.php | 54 +++++++------------ .../JobOrderHandler/CMBJobOrderHandler.php | 1 - .../job-order/cmb.form.onestep.html.twig | 15 ++---- 6 files changed, 40 insertions(+), 49 deletions(-) diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index 15d44e1d..bdd0b2a0 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -736,7 +736,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/Invoice.php b/src/Entity/Invoice.php index 305c7d84..2353b925 100644 --- a/src/Entity/Invoice.php +++ b/src/Entity/Invoice.php @@ -59,7 +59,8 @@ class Invoice */ protected $items; - // total discount (amount, not %) + // total discount (amount, not %) for resq + // for cmb, discount is the percentage /** * @ORM\Column(type="decimal", precision=9, scale=2) */ diff --git a/src/Ramcar/InvoiceCriteria.php b/src/Ramcar/InvoiceCriteria.php index 5ea5e623..a1fb2568 100644 --- a/src/Ramcar/InvoiceCriteria.php +++ b/src/Ramcar/InvoiceCriteria.php @@ -12,6 +12,8 @@ class InvoiceCriteria protected $promos; protected $cv; protected $flag_coolant; + // for discount and other info + protected $meta; // entries are battery and trade-in combos protected $entries; @@ -23,6 +25,7 @@ class InvoiceCriteria $this->entries = []; $this->cv = null; $this->flag_coolant = false; + $this->meta = []; } public function setServiceType($stype) @@ -125,4 +128,15 @@ class InvoiceCriteria { return $this->flag_coolant; } + + public function addMeta($id, $value) + { + $this->meta[$id] = $value; + return $this; + } + + public function getMeta() + { + return $this->meta; + } } diff --git a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php index f25348a4..fa13b752 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,8 +220,9 @@ 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(); @@ -233,18 +230,17 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface 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 + if ($discount > 50) + return 'Invalid discount specified'; - if (empty($promo)) - return 'Invalid promo specified.'; - - $criteria->addPromo($promo); + $criteria->addMeta('discount', $discount); return false; } @@ -389,33 +385,23 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface protected function processDiscount(&$total, InvoiceCriteria $criteria, Invoice $invoice) { - $promos = $criteria->getPromos(); - if (count($promos) < 1) + $rate = 0; + $meta = $criteria->getMeta(); + if (isset($meta['discount'])) + $rate = $meta['discount']; + else 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; - } + // compute discount + $rate = $rate * 0.01; + $discount = round($total['sell_price'] * $rate, 2); // 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 +411,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/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index a2727fea..ee83970f 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -2670,7 +2670,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['warranty_classes'] = CMBWarrantyClass::getCollection(); $params['modes_of_payment'] = CMBModeOfPayment::getCollection(); $params['statuses'] = JOStatus::getCollection(); - $params['discount_apply'] = DiscountApply::getCollection(); $params['trade_in_types'] = CMBTradeInType::getCollection(); $params['facilitated_types'] = FacilitatedType::getCollection(); $params['facilitated_hubs'] = $fac_hubs; diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index e0714676..b91c0a2c 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -500,22 +500,13 @@
{% if ftags.invoice_edit %} - + {% else %} - + {% endif %}
-
- - -
-
+