diff --git a/src/Invoice/1 b/src/Invoice/1 deleted file mode 100644 index 4ce94378..00000000 --- a/src/Invoice/1 +++ /dev/null @@ -1,37 +0,0 @@ -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 index a6c8b201..4d571a9f 100644 --- a/src/Invoice/BatteryReplacementWarranty.php +++ b/src/Invoice/BatteryReplacementWarranty.php @@ -25,15 +25,39 @@ class BatteryReplacementWarranty implements InvoiceInterface return 'battery_warranty'; } - public function getAmount($battery = null, $service_type_fees, $id) + // TODO: need to add service type fees as a parameter + public function compute($criteria) { - if ($battery != null) - return $battery->getSellingPrice(); + $stype = $criteria->getServiceType(); - if (isset($service_type_fees[$id)) - return $service_type_fees[$id]; + $items = []; + if ($stype == $this->getID()) + { + // get the entries + $entries = $criteria->getEntries(); + foreach($entries as $entry) + { + $batt = $entry['battery']; + $qty = 1; + $price = 0; // need to put this in a config or something - return 0; + $items[] = [ + 'battery' => $batt, + 'qty' => $qty, + 'title' => $this->getTitle($batt), + 'price' => $price, + ]; + } + } + + return $items; + } + + protected function getTitle($battery) + { + $title = $battery->getModel()->getName() . ' ' . $battery->getSize()->getName() . ' - Service Unit'); + + return $title; } } diff --git a/src/Invoice/BatterySales.php b/src/Invoice/BatterySales.php index 2e05ab2b..f0b316d7 100644 --- a/src/Invoice/BatterySales.php +++ b/src/Invoice/BatterySales.php @@ -25,14 +25,49 @@ class BatterySales implements InvoiceInterface return 'battery_new'; } - public function getAmount($battery = null, $service_type_fees, $id) + // TODO: need to add service type fees as a parameter + public function compute($criteria) { - if ($battery != null) - return $battery->getSellingPrice(); + $stype = $criteria->getServiceType(); - if (isset($service_type_fees[$id])) - return $service_type_fees[$id]; + $items = []; + if ($stype == $this->getID()) + { + // get the entries + $entries = $criteria->getEntries(); + foreach($entries as $entry) + { + $batt = $entry['battery']; + $qty = $entry['qty']; + $trade_in = null; - return 0; + if (isset($entry['trade_in'])) + $trade_in = $entry['trade_in']; + + $size = $batt->getSize(); + + if ($trade_in == null) + { + // battery purchase + $price = $batt->getSellingPrice(); + + $items[] = [ + 'battery' => $batt, + 'qty' => $qty, + 'title' => $this->getTitle($batt), + 'price' => $price, + ]; + } + } + } + + return $items; + } + + protected function getTitle($battery) + { + $title = $battery->getModel()->getName() . ' ' . $battery->getSize()->getName(); + + return $title; } } diff --git a/src/Invoice/JumpstartWarranty.php b/src/Invoice/JumpstartWarranty.php index 5ca77781..b7f89c3c 100644 --- a/src/Invoice/JumpstartWarranty.php +++ b/src/Invoice/JumpstartWarranty.php @@ -29,7 +29,7 @@ class JumpstartWarranty implements InvoiceInterface if ($battery != null) return $battery->getSellingPrice(); - if (isset($service_type_fees[$id)) + 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 index 31678bc1..26122764 100644 --- a/src/Invoice/PostRecharged.php +++ b/src/Invoice/PostRecharged.php @@ -29,7 +29,7 @@ class PostRecharged implements InvoiceInterface if ($battery != null) return $battery->getSellingPrice(); - if (isset($service_type_fees[$id)) + if (isset($service_type_fees[$id])) return $service_type_fees[$id]; return 0; diff --git a/src/Invoice/TireRepair.php b/src/Invoice/TireRepair.php index dcd20ed3..c659aa31 100644 --- a/src/Invoice/TireRepair.php +++ b/src/Invoice/TireRepair.php @@ -29,7 +29,7 @@ class TireRepair implements InvoiceInterface if ($battery != null) return $battery->getSellingPrice(); - if (isset($service_type_fees[$id)) + if (isset($service_type_fees[$id])) return $service_type_fees[$id]; return 0; diff --git a/src/Service/InvoiceManager.php b/src/Service/InvoiceManager.php index 84479f62..95831d65 100644 --- a/src/Service/InvoiceManager.php +++ b/src/Service/InvoiceManager.php @@ -46,6 +46,22 @@ class InvoiceManager ]; } + public function getServiceTypeFees() + { + return [ + 'service_fee' => 300, + 'coolant_fee' => 1600, + 'recharge_fee' => 300, + 'jumpstart_fee' => 150, + 'jumpstart_warranty_fee' => 0, + 'battery_replacement_fee' => 0, + 'warranty_fee' => 0, + 'other_services_fee' => 200, + 'refuel_fee_gas' => 320, + 'refuel_fee_diesel' => 320, + ]; + } + // check what rules to use given the criteria public function check($criteria) { @@ -58,7 +74,7 @@ class InvoiceManager $trade_ins = []; foreach ($entries as $entry) { - if ($entry['trade_in'] != null) + if ($entry['trade_in'] == null) { // battery purchase $batteries[] = [ @@ -102,6 +118,57 @@ class InvoiceManager $discount = $criteria->getDiscount(); $entries = $criteria->getEntries(); - // TODO: need to find out how to call the correct rule + $flag_trade_in = false; + foreach ($entries as $entry) + { + if ($entry['trade_in'] != null) + { + $flag_trade_in = true; + } + } + + foreach ($active_rules as $id => $active_rule) + { + if ($id == $stype) + { + // process trade-ins by calling the trade-in rule if there are trade-ins + // since it's lumped with only the battery_new service type + $trade_in_items = []; + if ($flag_trade_in) + { + $trade_in_items = $active_rules['trade_in']->compute($criteria); + } + + // TODO: need to pass service type fees to compute + $items = $active_rule->compute($criteria); + + foreach ($items as $item) + { + $invoice_item = new InvoiceItem(); + + $invoice_item->setInvoice($invoice) + ->setTitle($item['title']) + ->setQuantity($item['qty']) + ->setPrice($item['price']); + + if (isset($item['battery'])) + $invoice_item->setBattery($item['battery']); + + $invoice->addItem($invoice_item); + } + + foreach ($trade_in_items as $trade_in) + { + $invoice_item = new InvoiceItem(); + + $invoice_item->setInvoice($invoice) + ->setTitle($trade_in_item['title']) + ->setQuantity($trade_in_item['qty']) + ->setPrice($trade_initem['price']); + + $invoice->addItem($invoice_item); + } + } + } } }