Add function to process the criteria entries. #744
This commit is contained in:
parent
0063f10f93
commit
15830924e2
7 changed files with 143 additions and 54 deletions
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -25,15 +25,39 @@ class BatteryReplacementWarranty implements InvoiceInterface
|
||||||
return 'battery_warranty';
|
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)
|
$stype = $criteria->getServiceType();
|
||||||
return $battery->getSellingPrice();
|
|
||||||
|
|
||||||
if (isset($service_type_fees[$id))
|
$items = [];
|
||||||
return $service_type_fees[$id];
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,14 +25,49 @@ class BatterySales implements InvoiceInterface
|
||||||
return 'battery_new';
|
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)
|
$stype = $criteria->getServiceType();
|
||||||
return $battery->getSellingPrice();
|
|
||||||
|
|
||||||
if (isset($service_type_fees[$id]))
|
$items = [];
|
||||||
return $service_type_fees[$id];
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ class JumpstartWarranty implements InvoiceInterface
|
||||||
if ($battery != null)
|
if ($battery != null)
|
||||||
return $battery->getSellingPrice();
|
return $battery->getSellingPrice();
|
||||||
|
|
||||||
if (isset($service_type_fees[$id))
|
if (isset($service_type_fees[$id]))
|
||||||
return $service_type_fees[$id];
|
return $service_type_fees[$id];
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ class PostRecharged implements InvoiceInterface
|
||||||
if ($battery != null)
|
if ($battery != null)
|
||||||
return $battery->getSellingPrice();
|
return $battery->getSellingPrice();
|
||||||
|
|
||||||
if (isset($service_type_fees[$id))
|
if (isset($service_type_fees[$id]))
|
||||||
return $service_type_fees[$id];
|
return $service_type_fees[$id];
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ class TireRepair implements InvoiceInterface
|
||||||
if ($battery != null)
|
if ($battery != null)
|
||||||
return $battery->getSellingPrice();
|
return $battery->getSellingPrice();
|
||||||
|
|
||||||
if (isset($service_type_fees[$id))
|
if (isset($service_type_fees[$id]))
|
||||||
return $service_type_fees[$id];
|
return $service_type_fees[$id];
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -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
|
// check what rules to use given the criteria
|
||||||
public function check($criteria)
|
public function check($criteria)
|
||||||
{
|
{
|
||||||
|
|
@ -58,7 +74,7 @@ class InvoiceManager
|
||||||
$trade_ins = [];
|
$trade_ins = [];
|
||||||
foreach ($entries as $entry)
|
foreach ($entries as $entry)
|
||||||
{
|
{
|
||||||
if ($entry['trade_in'] != null)
|
if ($entry['trade_in'] == null)
|
||||||
{
|
{
|
||||||
// battery purchase
|
// battery purchase
|
||||||
$batteries[] = [
|
$batteries[] = [
|
||||||
|
|
@ -102,6 +118,57 @@ class InvoiceManager
|
||||||
$discount = $criteria->getDiscount();
|
$discount = $criteria->getDiscount();
|
||||||
$entries = $criteria->getEntries();
|
$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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue