128 lines
3.1 KiB
PHP
128 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace App\InvoiceRule;
|
|
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
|
|
use App\InvoiceRuleInterface;
|
|
|
|
use App\Ramcar\ServiceType;
|
|
|
|
use App\Entity\ServiceOffering;
|
|
use App\Entity\CustomerVehicle;
|
|
|
|
class Overheat implements InvoiceRuleInterface
|
|
{
|
|
protected $em;
|
|
|
|
public function __construct(EntityManagerInterface $em)
|
|
{
|
|
$this->em = $em;
|
|
}
|
|
|
|
public function getID()
|
|
{
|
|
return 'overheat';
|
|
}
|
|
|
|
public function compute($criteria, &$total)
|
|
{
|
|
$stype = $criteria->getServiceType();
|
|
$has_coolant = $criteria->hasCoolant();
|
|
|
|
$items = [];
|
|
|
|
if ($stype == $this->getID())
|
|
{
|
|
$cv = $criteria->getCustomerVehicle();
|
|
$fee = $this->getServiceTypeFee($cv);
|
|
|
|
// add the service fee to items
|
|
$qty = 1;
|
|
$items[] = [
|
|
'service_type' => $this->getID(),
|
|
'qty' => $qty,
|
|
'title' => $this->getServiceTitle(),
|
|
'price' => $fee,
|
|
];
|
|
|
|
$qty_fee = bcmul($qty, $fee, 2);
|
|
$total_price = $qty_fee;
|
|
|
|
if ($has_coolant)
|
|
{
|
|
$coolant_fee = $this->getCoolantFee();
|
|
$items[] = [
|
|
'service_type' => $this->getID(),
|
|
'qty' => $qty,
|
|
'title' => $this->getServiceCoolantTitle(),
|
|
'price' => $coolant_fee,
|
|
];
|
|
|
|
$qty_price = bcmul($coolant_fee, $qty, 2);
|
|
$total_price = bcadd($total_price, $qty_price, 2);
|
|
}
|
|
|
|
$total['total_price'] = bcadd($total['total_price'], $total_price, 2);
|
|
}
|
|
|
|
return $items;
|
|
}
|
|
|
|
public function getServiceTypeFee(CustomerVehicle $cv)
|
|
{
|
|
$code = 'overheat_fee';
|
|
|
|
// check if customer vehicle has a motolite battery
|
|
// if yes, set the code to the motolite user service fee
|
|
if ($cv->hasMotoliteBattery())
|
|
$code = 'motolite_user_service_fee';
|
|
|
|
// find the service fee for overheat using the code
|
|
// if we can't find the fee, return 0
|
|
$fee = $this->em->getRepository(ServiceOffering::class)->findOneBy(['code' => $code]);
|
|
|
|
if ($fee == null)
|
|
return 0;
|
|
|
|
return $fee->getFee();
|
|
}
|
|
|
|
public function getCoolantFee()
|
|
{
|
|
$code = 'coolant_fee';
|
|
|
|
// find the service fee using the code
|
|
// if we can't find the fee, return 0
|
|
$fee = $this->em->getRepository(ServiceOffering::class)->findOneBy($code);
|
|
|
|
if ($fee == null)
|
|
return 0;
|
|
|
|
return $fee->getFee();
|
|
}
|
|
|
|
public function validatePromo($criteria, $promo_id)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public function validateInvoiceItems($criteria, $invoice_items)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
protected function getServiceTitle()
|
|
{
|
|
$title = 'Service - ' . ServiceType::getName(ServiceType::OVERHEAT_ASSISTANCE);
|
|
|
|
return $title;
|
|
}
|
|
|
|
protected function getServiceCoolantTitle()
|
|
{
|
|
$title = '4L Coolant';
|
|
|
|
return $title;
|
|
}
|
|
}
|