Add function to process the criteria entries. #744

This commit is contained in:
Korina Cordero 2023-05-25 06:06:15 -04:00
parent 0063f10f93
commit 15830924e2
7 changed files with 143 additions and 54 deletions

View file

@ -1,37 +0,0 @@
<?php
namespace App\Invoice;
use App\InvoiceInterface;
class Overheat implements InvoiceInterface
{
public function check($settings, $criteria)
{
$type_id = $settings['service_type'];
if ($type_id == $criteria->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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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);
}
}
}
}
}