Add service charges to invoice generation. #341

This commit is contained in:
Korina Cordero 2020-02-17 13:24:32 +00:00
parent 115c207868
commit f3f941e0a0
3 changed files with 68 additions and 0 deletions

View file

@ -694,6 +694,7 @@ class JobOrderController extends Controller
$items = $req->request->get('items');
$promo_id = $req->request->get('promo');
$cvid = $req->request->get('cvid');
$service_charges = $req->request->get('service_charges');
$em = $this->getDoctrine()->getManager();
@ -740,6 +741,9 @@ class JobOrderController extends Controller
// TODO: this snippet should be in the invoice generator
$error = $ic->validateDiscount($criteria, $promo_id);
// process service charges
$error = $ic->invoiceServiceCharges($criteria, $service_charges);
if (!$error)
$error = $ic->invoiceBatteries($criteria, $items);

View file

@ -5,6 +5,7 @@ namespace App\Ramcar;
use App\Entity\Battery;
use App\Entity\Promo;
use App\Entity\CustomerVehicle;
use App\Entity\ServiceCharge;
class InvoiceCriteria
{
@ -13,6 +14,7 @@ class InvoiceCriteria
protected $cv;
protected $flag_coolant;
protected $discount;
protected $service_charges;
// entries are battery and trade-in combos
protected $entries;
@ -25,6 +27,7 @@ class InvoiceCriteria
$this->cv = null;
$this->flag_coolant = false;
$this->discount = 0;
$this->service_charges = [];
}
public function setServiceType($stype)
@ -138,4 +141,16 @@ class InvoiceCriteria
{
return $this->discount;
}
public function addServiceCharge(ServiceCharge $service_charge)
{
$this->service_charges[] = $service_charge;
return $this;
}
public function getServiceCharges()
{
return $this->service_charges;
}
}

View file

@ -18,6 +18,7 @@ use App\Entity\Invoice;
use App\Entity\InvoiceItem;
use App\Entity\Battery;
use App\Entity\User;
use App\Entity\ServiceCharge;
use App\Service\InvoiceGeneratorInterface;
@ -105,6 +106,13 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface
// break;
}
// process service charges if any
$service_charges = $criteria->getServiceCharges();
if (count($service_charges) > 0)
{
$this->processServiceCharges($total, $criteria, $invoice);
}
// get current user
$user = $this->security->getUser();
if ($user != null)
@ -286,6 +294,28 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface
return null;
}
public function invoiceServiceCharges(InvoiceCriteria $criteria, $service_charges)
{
if (!empty($service_charges))
{
foreach ($service_charges as $service_charge)
{
// check if valid service charge
$sc = $this->em->getRepository(ServiceCharge::class)->find($service_charge['id']);
if (empty($sc))
{
$error = 'Invalid service charge specified.';
return $error;
}
$criteria->addServiceCharge($sc);
}
}
return null;
}
protected function processEntries(&$total, InvoiceCriteria $criteria, Invoice $invoice)
{
@ -604,4 +634,23 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface
$total['vat'] = $vat;
}
protected function processServiceCharges(&$total, InvoiceCriteria $criteria, Invoice $invoice)
{
$service_charges = $criteria->getServiceCharges();
foreach ($service_charges as $service_charge)
{
$amount = $service_charge->getAmount();
$total['total_price'] += $amount;
// add item
$item = new InvoiceItem();
$item->setInvoice($invoice)
->setTitle('Service Charge - ' . $service_charge->getName())
->setQuantity(1)
->setPrice($amount);
$invoice->addItem($item);
}
}
}