Add processing of trade in items from rider app. #783

This commit is contained in:
Korina Cordero 2024-02-05 03:06:06 -05:00
parent c9057b9617
commit 8ca7292a25
4 changed files with 45 additions and 18 deletions

View file

@ -23,6 +23,7 @@ use App\Entity\BatterySize;
use App\Entity\RiderAPISession;
use App\Entity\User;
use App\Entity\ApiUser as APIUser;
use App\Entity\JobOrder;
use App\Service\RedisClientProvider;
use App\Service\RiderCache;
@ -1205,10 +1206,9 @@ class RiderAppController extends ApiController
// need to get the existing invoice items using jo id and invoice id
$existing_ii = $this->getInvoiceItems($em, $jo_id);
// $this->generateUpdatedInvoice($em, $jo_id, $existing_ii, $trade_in_items);
$this->generateUpdatedInvoice($em, $ic, $jo_id, $existing_ii, $ti_items);
$data = [];
return new APIResponse(true, 'Job order updated.', $data);
}
@ -1354,7 +1354,7 @@ class RiderAppController extends ApiController
return new APIResponse(true, 'Job order service changed.', $data);
}
protected function generateUpdatedInvoice(EntityManagerInterface $em, $jo_id, $existing_ii, $trade_in_items)
protected function generateUpdatedInvoice(EntityManagerInterface $em, InvoiceGeneratorInterface $ic, $jo_id, $existing_ii, $trade_in_items)
{
// get the job order since we need info in the JO for the invoice criteria
$jo = $em->getRepository(JobOrder::class)->find($jo_id);
@ -1370,7 +1370,7 @@ class RiderAppController extends ApiController
// get the promo id from existing invoice item
$promo_id = $existing_ii['promo_id'];
if ($promo_id = null)
if ($promo_id == null)
$promo = null;
else
$promo = $em->getRepository(Promo::class)->find($promo_id);
@ -1404,8 +1404,13 @@ class RiderAppController extends ApiController
// add the trade in items to the criteria
foreach ($trade_in_items as $ti_item)
{
// TODO: need to discuss how to store since what we have is battery size
// and we're supposed to store battery
$batt_size_id = $ti_item['battery_size_id'];
$qty = $ti_item['qty'];
$trade_in_type = $ti_item['trade_in_type'];
$batt_size = $em->getRepository(BatterySize::class)->find($batt_size_id);
$icrit->addTradeInEntry($batt_size, $trade_in_type, $qty);
}
// call generateInvoice

View file

@ -36,18 +36,21 @@ class BatterySales implements InvoiceRuleInterface
$entries = $criteria->getEntries();
foreach($entries as $entry)
{
$batt = $entry['battery'];
$qty = $entry['qty'];
$trade_in = null;
// check if entry is for trade in
if (isset($entry['trade_in']))
$trade_in = $entry['trade_in'];
$size = $batt->getSize();
// entry is a battery purchase
if ($trade_in == null)
{
// battery purchase
// safe to get entry with battery key since CRM and apps
// will set this for a battery purchase and trade_in will
// will not be set
$batt = $entry['battery'];
$price = $batt->getSellingPrice();
$items[] = [

View file

@ -21,7 +21,6 @@ class TradeIn implements InvoiceRuleInterface
$entries = $criteria->getEntries();
foreach($entries as $entry)
{
$batt = $entry['battery'];
$qty = $entry['qty'];
$trade_in_type = null;
@ -30,7 +29,18 @@ class TradeIn implements InvoiceRuleInterface
if ($trade_in_type != null)
{
$ti_rate = $this->getTradeInRate($batt, $trade_in_type);
// at this point, entry is a trade in
// need to check if battery (coming from CRM) is set
// or battery_size is set (coming from rider app)
if (isset($entry['battery']))
{
$battery = $entry['battery'];
$batt_size = $battery->getSize();
}
else
$batt_size = $entry['battery_size'];
$ti_rate = $this->getTradeInRate($batt_size, $trade_in_type);
$qty_ti = bcmul($ti_rate, $qty, 2);
@ -41,7 +51,7 @@ class TradeIn implements InvoiceRuleInterface
$items[] = [
'qty' => $qty,
'title' => $this->getTitle($batt, $trade_in_type),
'title' => $this->getTitle($batt_size, $trade_in_type),
'price' => $price,
];
}
@ -60,10 +70,8 @@ class TradeIn implements InvoiceRuleInterface
return null;
}
protected function getTradeInRate($battery, $trade_in_type)
protected function getTradeInRate($size, $trade_in_type)
{
$size = $battery->getSize();
switch ($trade_in_type)
{
case TradeInType::MOTOLITE:
@ -77,9 +85,9 @@ class TradeIn implements InvoiceRuleInterface
return 0;
}
protected function getTitle($battery, $trade_in_type)
protected function getTitle($battery_size, $trade_in_type)
{
$title = 'Trade-in ' . TradeInType::getName($trade_in_type) . ' ' . $battery->getSize()->getName() . ' battery';
$title = 'Trade-in ' . TradeInType::getName($trade_in_type) . ' ' . $battery_size->getName() . ' battery';
return $title;
}

View file

@ -108,6 +108,17 @@ class InvoiceCriteria
$this->entries[] = $entry;
}
public function addTradeInEntry($battery_size, $trade_in, $qty)
{
$entry = [
'battery_size' => $battery_size,
'trade_in' => $trade_in,
'qty' => $qty
];
$this->entries[] = $entry;
}
public function getEntries()
{
return $this->entries;