From 0063f10f93a19b6ec5917b70d2a86a818803a301 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 24 May 2023 06:16:44 -0400 Subject: [PATCH] Add function to check what rules to use. #744 --- src/Invoice/1 | 37 +++++++++ src/Invoice/BatteryReplacementWarranty.php | 39 ++++++++++ src/Invoice/BatterySales.php | 38 +++++++++ src/Invoice/Discount.php | 34 +++++++++ src/Invoice/Fuel.php | 37 +++++++++ src/Invoice/Jumpstart.php | 37 +++++++++ src/Invoice/JumpstartWarranty.php | 37 +++++++++ src/Invoice/Overheat.php | 37 +++++++++ src/Invoice/PostRecharged.php | 37 +++++++++ src/Invoice/PostReplacement.php | 37 +++++++++ src/Invoice/ServiceType.php | 19 +++-- src/Invoice/TireRepair.php | 37 +++++++++ src/Invoice/TradeIn.php | 58 ++++++++++++++ src/InvoiceCriteria.php | 2 +- src/Service/InvoiceManager.php | 89 +++++++++++++++++++++- 15 files changed, 565 insertions(+), 10 deletions(-) create mode 100644 src/Invoice/1 create mode 100644 src/Invoice/BatteryReplacementWarranty.php create mode 100644 src/Invoice/BatterySales.php create mode 100644 src/Invoice/Discount.php create mode 100644 src/Invoice/Fuel.php create mode 100644 src/Invoice/Jumpstart.php create mode 100644 src/Invoice/JumpstartWarranty.php create mode 100644 src/Invoice/Overheat.php create mode 100644 src/Invoice/PostRecharged.php create mode 100644 src/Invoice/PostReplacement.php create mode 100644 src/Invoice/TireRepair.php create mode 100644 src/Invoice/TradeIn.php diff --git a/src/Invoice/1 b/src/Invoice/1 new file mode 100644 index 00000000..4ce94378 --- /dev/null +++ b/src/Invoice/1 @@ -0,0 +1,37 @@ +getServiceType()) + return true; + + return false; + } + + public function getTemplate() + { + } + + public function getID() + { + return 'overheat'; + } + + public function getAmount($battery = null, $service_type_fees) + { + if ($battery != null) + return $battery->getSellingPrice(); + + if (isset($service_type_fees[$this->getID()])) + return $service_type_fees[$this->getID()]; + + return 0; + } +} diff --git a/src/Invoice/BatteryReplacementWarranty.php b/src/Invoice/BatteryReplacementWarranty.php new file mode 100644 index 00000000..a6c8b201 --- /dev/null +++ b/src/Invoice/BatteryReplacementWarranty.php @@ -0,0 +1,39 @@ +getServiceType()) + return true; + + return false; + } + + public function getTemplate() + { + return 'invoice/battery.html.twig'; + } + + public function getID() + { + return 'battery_warranty'; + } + + public function getAmount($battery = null, $service_type_fees, $id) + { + if ($battery != null) + return $battery->getSellingPrice(); + + if (isset($service_type_fees[$id)) + return $service_type_fees[$id]; + + return 0; + } +} + diff --git a/src/Invoice/BatterySales.php b/src/Invoice/BatterySales.php new file mode 100644 index 00000000..2e05ab2b --- /dev/null +++ b/src/Invoice/BatterySales.php @@ -0,0 +1,38 @@ +getServiceType()) + return true; + + return false; + } + + public function getTemplate() + { + return 'invoice/battery.html.twig'; + } + + public function getID() + { + return 'battery_new'; + } + + public function getAmount($battery = null, $service_type_fees, $id) + { + if ($battery != null) + return $battery->getSellingPrice(); + + if (isset($service_type_fees[$id])) + return $service_type_fees[$id]; + + return 0; + } +} diff --git a/src/Invoice/Discount.php b/src/Invoice/Discount.php new file mode 100644 index 00000000..62a37eb6 --- /dev/null +++ b/src/Invoice/Discount.php @@ -0,0 +1,34 @@ +getDiscount()) + return true; + + return false; + + } + + public function getTemplate() + { + return 'invoice/discount.html.twig'; + } + + public function getID() + { + return 'discount'; + } + + public function getAmount($battery = null, $discount_list, $id) + { + return 0; + } +} + diff --git a/src/Invoice/Fuel.php b/src/Invoice/Fuel.php new file mode 100644 index 00000000..4a700f3b --- /dev/null +++ b/src/Invoice/Fuel.php @@ -0,0 +1,37 @@ +getServiceType()) + return true; + + return false; + } + + public function getTemplate() + { + } + + public function getID() + { + return 'fuel'; + } + + public function getAmount($battery = null, $service_type_fees, $id) + { + if ($battery != null) + return $battery->getSellingPrice(); + + if (isset($service_type_fees[$id])) + return $service_type_fees[$id]; + + return 0; + } +} diff --git a/src/Invoice/Jumpstart.php b/src/Invoice/Jumpstart.php new file mode 100644 index 00000000..36c25fa7 --- /dev/null +++ b/src/Invoice/Jumpstart.php @@ -0,0 +1,37 @@ +getServiceType()) + return true; + + return false; + } + + public function getTemplate() + { + } + + public function getID() + { + return 'jumpstart_troubleshoot'; + } + + public function getAmount($battery = null, $service_type_fees, $id) + { + if ($battery != null) + return $battery->getSellingPrice(); + + if (isset($service_type_fees[$id])) + return $service_type_fees[$id]; + + return 0; + } +} diff --git a/src/Invoice/JumpstartWarranty.php b/src/Invoice/JumpstartWarranty.php new file mode 100644 index 00000000..5ca77781 --- /dev/null +++ b/src/Invoice/JumpstartWarranty.php @@ -0,0 +1,37 @@ +getServiceType()) + return true; + + return false; + } + + public function getTemplate() + { + } + + public function getID() + { + return 'jumpstart_warranty'; + } + + public function getAmount($battery = null, $service_type_fees, $id) + { + if ($battery != null) + return $battery->getSellingPrice(); + + if (isset($service_type_fees[$id)) + return $service_type_fees[$id]; + + return 0; + } +} diff --git a/src/Invoice/Overheat.php b/src/Invoice/Overheat.php new file mode 100644 index 00000000..dfe33cbc --- /dev/null +++ b/src/Invoice/Overheat.php @@ -0,0 +1,37 @@ +getServiceType()) + return true; + + return false; + } + + public function getTemplate() + { + } + + public function getID() + { + return 'overheat'; + } + + public function getAmount($battery = null, $service_type_fees, $id) + { + if ($battery != null) + return $battery->getSellingPrice(); + + if (isset($service_type_fees[$id])) + return $service_type_fees[$id]; + + return 0; + } +} diff --git a/src/Invoice/PostRecharged.php b/src/Invoice/PostRecharged.php new file mode 100644 index 00000000..31678bc1 --- /dev/null +++ b/src/Invoice/PostRecharged.php @@ -0,0 +1,37 @@ +getServiceType()) + return true; + + return false; + } + + public function getTemplate() + { + } + + public function getID() + { + return 'post_recharged'; + } + + public function getAmount($battery = null, $service_type_fees, $id) + { + if ($battery != null) + return $battery->getSellingPrice(); + + if (isset($service_type_fees[$id)) + return $service_type_fees[$id]; + + return 0; + } +} diff --git a/src/Invoice/PostReplacement.php b/src/Invoice/PostReplacement.php new file mode 100644 index 00000000..bab0cb44 --- /dev/null +++ b/src/Invoice/PostReplacement.php @@ -0,0 +1,37 @@ +getServiceType()) + return true; + + return false; + } + + public function getTemplate() + { + } + + public function getID() + { + return 'post_replacement'; + } + + public function getAmount($battery = null, $service_type_fees, $id) + { + if ($battery != null) + return $battery->getSellingPrice(); + + if (isset($service_type_fees[$id])) + return $service_type_fees[$id]; + + return 0; + } +} diff --git a/src/Invoice/ServiceType.php b/src/Invoice/ServiceType.php index e27f2bc6..fc33c64b 100644 --- a/src/Invoice/ServiceType.php +++ b/src/Invoice/ServiceType.php @@ -8,13 +8,8 @@ class ServiceType implements InvoiceInterface { public function check($settings, $criteria) { - // compare specified type ids with service type of criteria - $stypes = $settings['type_id']; - foreach ($stypes as $type_id) - { - if ($type_id == $criteria->getServiceType()) - return true; - } + if (isset($settings['service_type'])) + return true; return false; } @@ -23,4 +18,14 @@ class ServiceType implements InvoiceInterface { return 'invoice/service_type.html.twig'; } + + public function getID() + { + return 'service_type'; + } + + public function getAmount($battery = null, $service_type_fees, $id) + { + return 0; + } } diff --git a/src/Invoice/TireRepair.php b/src/Invoice/TireRepair.php new file mode 100644 index 00000000..dcd20ed3 --- /dev/null +++ b/src/Invoice/TireRepair.php @@ -0,0 +1,37 @@ +getServiceType()) + return true; + + return false; + } + + public function getTemplate() + { + } + + public function getID() + { + return 'tire'; + } + + public function getAmount($battery = null, $service_type_fees, $id) + { + if ($battery != null) + return $battery->getSellingPrice(); + + if (isset($service_type_fees[$id)) + return $service_type_fees[$id]; + + return 0; + } +} diff --git a/src/Invoice/TradeIn.php b/src/Invoice/TradeIn.php new file mode 100644 index 00000000..e4fb974b --- /dev/null +++ b/src/Invoice/TradeIn.php @@ -0,0 +1,58 @@ +getEntries(); + + foreach ($trade_ins as $type_id) + { + foreach($entries as $entry) + { + if ($type_id == $entry['trade_in']) + return true; + } + } + + return false; + } + + public function getTemplate() + { + return 'invoice/trade_in.html.twig'; + } + + public function getID() + { + return 'trade_in'; + } + + public function getAmount($battery = null, $trade_in_types, $id) + { + if (isset($trade_in_types[$id])) + { + if ($battery != null) + { + switch ($trade_in) + { + case TradeInType::MOTOLITE: + return $battery->getSize()->getTIPriceMotolite(); + case TradeInType::PREMIUM: + return $battery0>getSize()->getTIPricePremium(); + case TradeInType::OTHER: + return $battery->getSize()->getTIPriceOther(); + } + } + } + + return 0; + } +} + diff --git a/src/InvoiceCriteria.php b/src/InvoiceCriteria.php index 886d6024..12ee71e0 100644 --- a/src/InvoiceCriteria.php +++ b/src/InvoiceCriteria.php @@ -1,6 +1,6 @@ em = $em; + + $this->available_rules = $this->getAllRules(); + } + + public function getAvailableRules() + { + // TODO: get list of invoice rules from .env + return [ + new Invoice\ServiceType(), + new Invoice\BatterySales(), + new Invoice\BatteryReplacementWarranty(), + new Invoice\Jumpstart(), + new Invoice\JumstartWarranty(), + new Invoice\PostRecharged(), + new Invoice\PostReplacement(), + new Invoice\Overheat(), + new Invoice\Fuel(), + new Invoice\TireRepair(), + new Invoice\Discount(), + new Invoice\TradeIn(), + ]; + } + + // check what rules to use given the criteria + public function check($criteria) + { + // get what is in criteria + $stype = $criteria->getServiceType(); + $discount = $criteria->getDiscount(); + $entries = $criteria->getEntries(); + + $batteries = []; + $trade_ins = []; + foreach ($entries as $entry) + { + if ($entry['trade_in'] != null) + { + // battery purchase + $batteries[] = [ + 'battery' => $entry['battery'], + 'qty' => $entry['qty'], + ]; + } + else + { + // trade in + $trade_ins[] = [ + 'battery' => $entry['battery'], + 'qty' => $entry['qty'], + ]; + } + } + + $settings = [ + 'service_type' => $criteria->getServiceType(), + 'discount' => $criteria->getDiscount(), + 'batteries' => $batteries, + 'trade_ins' => $trade_ins, + ]; + + $active_rules = []; + foreach ($this->available_rules as $rule) + { + $is_active = $rule->check($settings, $criteria); + if ($is_active) + $active_rules[$rule->getID()] = $rule; + } + + return $active_rules; + + } + + public function compute($invoice, $criteria, $active_rules) + { + // get what is in criteria + $stype = $criteria->getServiceType(); + $discount = $criteria->getDiscount(); + $entries = $criteria->getEntries(); + + // TODO: need to find out how to call the correct rule + } }