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