Merge branch '811-add-sealant-fee' into 'master'
Resolve "Add sealant fee" Closes #811 See merge request jankstudio/resq!924
This commit is contained in:
commit
630796df85
8 changed files with 131 additions and 4 deletions
|
|
@ -386,6 +386,7 @@ class RiderAppController extends ApiController
|
||||||
'flag_coolant' => $jo->hasCoolant(),
|
'flag_coolant' => $jo->hasCoolant(),
|
||||||
'has_motolite' => $cv->hasMotoliteBattery(),
|
'has_motolite' => $cv->hasMotoliteBattery(),
|
||||||
'delivery_status' => $jo->getDeliveryStatus(),
|
'delivery_status' => $jo->getDeliveryStatus(),
|
||||||
|
'flag_sealant' => $jo->hasSealant(),
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
@ -1324,7 +1325,7 @@ class RiderAppController extends ApiController
|
||||||
return new APIResponse(false, 'Invalid promo id - ' . $promo_id);
|
return new APIResponse(false, 'Invalid promo id - ' . $promo_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get other parameters, if any: has motolite battery, has warranty doc, with coolant, payment method
|
// get other parameters, if any: has motolite battery, has warranty doc, with coolant, payment method, with sealant
|
||||||
if (isset($items['flag_motolite_battery']))
|
if (isset($items['flag_motolite_battery']))
|
||||||
{
|
{
|
||||||
// get customer vehicle from jo
|
// get customer vehicle from jo
|
||||||
|
|
@ -1359,6 +1360,15 @@ class RiderAppController extends ApiController
|
||||||
$jo->setModeOfPayment($payment_method);
|
$jo->setModeOfPayment($payment_method);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($items['flag_sealant']))
|
||||||
|
{
|
||||||
|
$has_sealant = $items['flag_sealant'];
|
||||||
|
if ($has_sealant == 'true')
|
||||||
|
$jo->setHasSealant(true);
|
||||||
|
else
|
||||||
|
$jo->setHasSealant(false);
|
||||||
|
}
|
||||||
|
|
||||||
// get capi user
|
// get capi user
|
||||||
$capi_user = $this->getUser();
|
$capi_user = $this->getUser();
|
||||||
if ($capi_user == null)
|
if ($capi_user == null)
|
||||||
|
|
@ -1443,6 +1453,13 @@ class RiderAppController extends ApiController
|
||||||
else
|
else
|
||||||
$jo->setHasCoolant(false);
|
$jo->setHasCoolant(false);
|
||||||
|
|
||||||
|
// sealant
|
||||||
|
$flag_sealant = $req->request->get('flag_sealant', 'false');
|
||||||
|
if ($flag_sealant == 'true')
|
||||||
|
$jo->setHasSealant(true);
|
||||||
|
else
|
||||||
|
$jo->setHasSealant(false);
|
||||||
|
|
||||||
// has motolite battery
|
// has motolite battery
|
||||||
$cv = $jo->getCustomerVehicle();
|
$cv = $jo->getCustomerVehicle();
|
||||||
$has_motolite = $req->request->get('has_motolite', 'false');
|
$has_motolite = $req->request->get('has_motolite', 'false');
|
||||||
|
|
@ -1543,6 +1560,9 @@ class RiderAppController extends ApiController
|
||||||
// get coolant if any
|
// get coolant if any
|
||||||
$flag_coolant = $jo->hasCoolant();
|
$flag_coolant = $jo->hasCoolant();
|
||||||
|
|
||||||
|
// get sealant if any
|
||||||
|
$flag_sealant = $jo->hasSealant();
|
||||||
|
|
||||||
// check if new promo is null
|
// check if new promo is null
|
||||||
if ($promo == null)
|
if ($promo == null)
|
||||||
{
|
{
|
||||||
|
|
@ -1561,6 +1581,7 @@ class RiderAppController extends ApiController
|
||||||
->setCustomerVehicle($cv)
|
->setCustomerVehicle($cv)
|
||||||
->setSource($source)
|
->setSource($source)
|
||||||
->setHasCoolant($flag_coolant)
|
->setHasCoolant($flag_coolant)
|
||||||
|
->setHasSealant($flag_sealant)
|
||||||
->setIsTaxable();
|
->setIsTaxable();
|
||||||
|
|
||||||
// set price tier
|
// set price tier
|
||||||
|
|
|
||||||
|
|
@ -754,6 +754,8 @@ class JobOrderController extends Controller
|
||||||
$promo_id = $req->request->get('promo');
|
$promo_id = $req->request->get('promo');
|
||||||
$cvid = $req->request->get('cvid');
|
$cvid = $req->request->get('cvid');
|
||||||
$service_charges = $req->request->get('service_charges', []);
|
$service_charges = $req->request->get('service_charges', []);
|
||||||
|
$flag_coolant = $req->request->get('flag_coolant', false);
|
||||||
|
$flag_sealant = $req->request->get('flag_sealant', false);
|
||||||
|
|
||||||
// coordinates
|
// coordinates
|
||||||
// need to check if lng and lat are set
|
// need to check if lng and lat are set
|
||||||
|
|
@ -784,7 +786,9 @@ class JobOrderController extends Controller
|
||||||
->setCustomerVehicle($cv)
|
->setCustomerVehicle($cv)
|
||||||
->setIsTaxable()
|
->setIsTaxable()
|
||||||
->setSource(TransactionOrigin::CALL)
|
->setSource(TransactionOrigin::CALL)
|
||||||
->setPriceTier($price_tier);
|
->setPriceTier($price_tier)
|
||||||
|
->setHasCoolant($flag_coolant)
|
||||||
|
->setHasSealant($flag_sealant);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// if it's a jumpstart or troubleshoot only, we know what to charge already
|
// if it's a jumpstart or troubleshoot only, we know what to charge already
|
||||||
|
|
|
||||||
|
|
@ -441,6 +441,12 @@ class JobOrder
|
||||||
*/
|
*/
|
||||||
protected $flag_cust_new;
|
protected $flag_cust_new;
|
||||||
|
|
||||||
|
// only for tire service, if it requires sealant or not
|
||||||
|
/**
|
||||||
|
* @ORM\Column(type="boolean")
|
||||||
|
*/
|
||||||
|
protected $flag_sealant;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->date_create = new DateTime();
|
$this->date_create = new DateTime();
|
||||||
|
|
@ -458,6 +464,7 @@ class JobOrder
|
||||||
$this->trade_in_type = null;
|
$this->trade_in_type = null;
|
||||||
$this->flag_rider_rating = false;
|
$this->flag_rider_rating = false;
|
||||||
$this->flag_coolant = false;
|
$this->flag_coolant = false;
|
||||||
|
$this->flag_sealant = false;
|
||||||
|
|
||||||
$this->priority = 0;
|
$this->priority = 0;
|
||||||
$this->meta = [];
|
$this->meta = [];
|
||||||
|
|
@ -1256,4 +1263,15 @@ class JobOrder
|
||||||
return $this->flag_cust_new;
|
return $this->flag_cust_new;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setHasSealant($flag = true)
|
||||||
|
{
|
||||||
|
$this->flag_sealant = $flag;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasSealant()
|
||||||
|
{
|
||||||
|
return $this->flag_sealant;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ class TireRepair implements InvoiceRuleInterface
|
||||||
public function compute($criteria, &$total)
|
public function compute($criteria, &$total)
|
||||||
{
|
{
|
||||||
$stype = $criteria->getServiceType();
|
$stype = $criteria->getServiceType();
|
||||||
|
$has_sealant = $criteria->hasSealant();
|
||||||
$pt_id = $criteria->getPriceTier();
|
$pt_id = $criteria->getPriceTier();
|
||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
|
|
@ -56,8 +57,28 @@ class TireRepair implements InvoiceRuleInterface
|
||||||
'price' => $price,
|
'price' => $price,
|
||||||
];
|
];
|
||||||
|
|
||||||
$qty_price = bcmul($price, $qty, 2);
|
$qty_fee = bcmul($qty, $price, 2);
|
||||||
$total['total_price'] = bcadd($total['total_price'], $qty_price, 2);
|
$total_price = $qty_fee;
|
||||||
|
|
||||||
|
if ($has_sealant)
|
||||||
|
{
|
||||||
|
$sealant_fee_data = $this->getSealantFeeData();
|
||||||
|
|
||||||
|
$sealant_fee = $sealant_fee_data['fee'];
|
||||||
|
$sealant_title = $sealant_fee_data['title'];
|
||||||
|
|
||||||
|
$items[] = [
|
||||||
|
'service_type' => $this->getID(),
|
||||||
|
'qty' => $qty,
|
||||||
|
'title' => $sealant_title,
|
||||||
|
'price' => $sealant_fee,
|
||||||
|
];
|
||||||
|
|
||||||
|
$qty_price = bcmul($sealant_fee, $qty, 2);
|
||||||
|
$total_price = bcadd($total_price, $qty_price, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
$total['total_price'] = bcadd($total['total_price'], $total_price, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $items;
|
return $items;
|
||||||
|
|
@ -131,4 +152,28 @@ class TireRepair implements InvoiceRuleInterface
|
||||||
|
|
||||||
return $title;
|
return $title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getSealantFeeData()
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'fee' => 0.00,
|
||||||
|
'title' => '',
|
||||||
|
];
|
||||||
|
|
||||||
|
$code = 'tire_sealant_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' => $code]);
|
||||||
|
|
||||||
|
if ($fee != null)
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'fee' => $fee->getFee(),
|
||||||
|
'title' => $fee->getName(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ class InvoiceCriteria
|
||||||
protected $flag_taxable;
|
protected $flag_taxable;
|
||||||
protected $source; // use Ramcar's TransactionOrigin
|
protected $source; // use Ramcar's TransactionOrigin
|
||||||
protected $price_tier;
|
protected $price_tier;
|
||||||
|
protected $flag_sealant;
|
||||||
|
|
||||||
// entries are battery and trade-in combos
|
// entries are battery and trade-in combos
|
||||||
protected $entries;
|
protected $entries;
|
||||||
|
|
@ -34,6 +35,7 @@ class InvoiceCriteria
|
||||||
$this->flag_taxable = false;
|
$this->flag_taxable = false;
|
||||||
$this->source = '';
|
$this->source = '';
|
||||||
$this->price_tier = 0; // set to default
|
$this->price_tier = 0; // set to default
|
||||||
|
$this->flag_sealant = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setServiceType($stype)
|
public function setServiceType($stype)
|
||||||
|
|
@ -202,4 +204,15 @@ class InvoiceCriteria
|
||||||
{
|
{
|
||||||
return $this->price_tier;
|
return $this->price_tier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setHasSealant($flag = true)
|
||||||
|
{
|
||||||
|
$this->flag_sealant = $flag;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasSealant()
|
||||||
|
{
|
||||||
|
return $this->flag_sealant;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,14 @@ class InvoiceManager implements InvoiceGeneratorInterface
|
||||||
->setCustomerVehicle($jo->getCustomerVehicle())
|
->setCustomerVehicle($jo->getCustomerVehicle())
|
||||||
->setPriceTier($price_tier);
|
->setPriceTier($price_tier);
|
||||||
|
|
||||||
|
if (($jo->getServiceType() == ServiceType::OVERHEAT_ASSISTANCE) &&
|
||||||
|
($jo->hasCoolant()))
|
||||||
|
$criteria->setHasCoolant(true);
|
||||||
|
|
||||||
|
if (($jo->getServiceType() == ServiceType::TIRE_REPAIR) &&
|
||||||
|
($jo->hasSealant()))
|
||||||
|
$criteria->setHasSealant(true);
|
||||||
|
|
||||||
// set if taxable
|
// set if taxable
|
||||||
// NOTE: ideally, this should be a parameter when calling generateInvoiceCriteria. But that
|
// NOTE: ideally, this should be a parameter when calling generateInvoiceCriteria. But that
|
||||||
// would mean adding it as a parameter to the call, impacting all calls
|
// would mean adding it as a parameter to the call, impacting all calls
|
||||||
|
|
|
||||||
|
|
@ -1207,6 +1207,8 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var invoiceItems = [];
|
var invoiceItems = [];
|
||||||
|
var hasCoolant = 0;
|
||||||
|
var hasSealant = 0;
|
||||||
|
|
||||||
// location search autocomplete
|
// location search autocomplete
|
||||||
var input = document.getElementById('m_gmap_address');
|
var input = document.getElementById('m_gmap_address');
|
||||||
|
|
@ -1270,6 +1272,19 @@ $(function() {
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
// need to check if jo has coolant or sealant
|
||||||
|
{% if obj.getServiceType == 'overheat' %}
|
||||||
|
{% if obj.hasCoolant == 1 %}
|
||||||
|
hasCoolant = 1;
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if obj.getServiceType == 'tire' %}
|
||||||
|
{% if obj.hasSealant == 1 %}
|
||||||
|
hasSealant = 1;
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1830,6 +1845,8 @@ $(function() {
|
||||||
'cvid': cvid,
|
'cvid': cvid,
|
||||||
'coord_lng': lng,
|
'coord_lng': lng,
|
||||||
'coord_lat': lat,
|
'coord_lat': lat,
|
||||||
|
'flag_coolant': hasCoolant,
|
||||||
|
'flag_sealant': hasSealant,
|
||||||
}
|
}
|
||||||
}).done(function(response) {
|
}).done(function(response) {
|
||||||
// mark as invoice changed
|
// mark as invoice changed
|
||||||
|
|
|
||||||
1
utils/service_offering/insert_sealant_fee.sql
Normal file
1
utils/service_offering/insert_sealant_fee.sql
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
INSERT INTO service_offering (name, code, fee) VALUES ('Tire Sealant Fee', 'tire_sealant_fee', '200.00');
|
||||||
Loading…
Reference in a new issue