Add support for retrieving subscription specific compatible battery #799

This commit is contained in:
Ramon Gutierrez 2024-10-26 03:39:30 +08:00
parent 874c35bfff
commit 74c45b6d18
6 changed files with 94 additions and 32 deletions

View file

@ -118,6 +118,7 @@ class BatteryController extends Controller
$row['total_height'] = $orow[0]->getTotalHeight(); $row['total_height'] = $orow[0]->getTotalHeight();
$row['image_file'] = $orow[0]->getImageFile(); $row['image_file'] = $orow[0]->getImageFile();
$row['flag_active'] = $orow[0]->isActive(); $row['flag_active'] = $orow[0]->isActive();
$row['flag_subscription'] = $orow[0]->isSubscription();
// add row metadata // add row metadata
$row['meta'] = [ $row['meta'] = [
@ -184,7 +185,8 @@ class BatteryController extends Controller
->setTotalHeight($req->request->get('total_height')) ->setTotalHeight($req->request->get('total_height'))
->setSellingPrice($req->request->get('sell_price')) ->setSellingPrice($req->request->get('sell_price'))
->setImageFile($req->request->get('image_file')) ->setImageFile($req->request->get('image_file'))
->setActive($req->request->get('flag_active', false)); ->setActive($req->request->get('flag_active', false))
->setSubscription($req->request->get('flag_subscription', false));
// initialize error list // initialize error list
$error_array = []; $error_array = [];
@ -311,6 +313,7 @@ class BatteryController extends Controller
->setSellingPrice($req->request->get('sell_price')) ->setSellingPrice($req->request->get('sell_price'))
->setImageFile($req->request->get('image_file')) ->setImageFile($req->request->get('image_file'))
->setActive($req->request->get('flag_active', false)) ->setActive($req->request->get('flag_active', false))
->setSubscription($req->request->get('flag_subscription', false))
->clearVehicles(); ->clearVehicles();
// initialize error list // initialize error list

View file

@ -261,7 +261,10 @@ class VehicleController extends ApiController
$lng = $req->query->get('longitude', ''); $lng = $req->query->get('longitude', '');
$lat = $req->query->get('latitude', ''); $lat = $req->query->get('latitude', '');
$batts = $vehicle->getActiveBatteries(); // if for subscription purposes, get only the most qualified model either by tag or price
$is_subscription = $req->query->get('is_subscription', false);
$batts = $vehicle->getActiveBatteries($is_subscription);
$pt_id = 0; $pt_id = 0;
if ((!(empty($lng))) && (!(empty($lat)))) if ((!(empty($lng))) && (!(empty($lat))))
{ {

View file

@ -153,6 +153,12 @@ class Battery
*/ */
protected $flag_active; protected $flag_active;
// flag if battery is used for subscriptions
/**
* @ORM\Column(type="boolean", options={"default": false})
*/
protected $flag_subscription;
public function __construct() public function __construct()
{ {
$this->vehicles = new ArrayCollection(); $this->vehicles = new ArrayCollection();
@ -167,6 +173,7 @@ class Battery
$this->date_create = new DateTime(); $this->date_create = new DateTime();
$this->flag_active = true; $this->flag_active = true;
$this->flag_subscription = false;
} }
public function getID() public function getID()
@ -396,9 +403,20 @@ class Battery
return $this->flag_active; return $this->flag_active;
} }
public function setActive($flag_active = true) public function setActive($flag_subscription = true)
{ {
$this->flag_active = $flag_active; $this->flag_subscription = $flag_subscription;
return $this;
}
public function isSubscription()
{
return $this->flag_subscription;
}
public function setSubscription($flag_subscription = true)
{
$this->flag_subscription = $flag_subscription;
return $this; return $this;
} }
} }

View file

@ -180,11 +180,20 @@ class Vehicle
return $this->cust_vehicles; return $this->cust_vehicles;
} }
public function getActiveBatteries() public function getActiveBatteries($is_subscription = false)
{ {
$crit = Criteria::create(); $crit = Criteria::create();
$crit->where(Criteria::expr()->eq('flag_active', true)); $crit->where(Criteria::expr()->eq('flag_active', true));
// if by subscrpiption, order first by if it is a subscription battery, then by descending price
if ($is_subscription) {
$crit->orderBy([
'flag_subscription' => 'desc',
'sell_price' => 'desc',
])
->setMaxResults(1);
}
return $this->batteries->matching($crit); return $this->batteries->matching($crit);
} }
} }

View file

@ -101,20 +101,34 @@
<div class="form-control-feedback hide" data-field="size"></div> <div class="form-control-feedback hide" data-field="size"></div>
</div> </div>
</div> </div>
<div class="form-group m-form__group row"> <div class="form-group m-form__group row">
<div class="col-lg-4"> <div class="col-lg-4">
<span class="m-switch m-switch--icon block-switch"> <span class="m-switch m-switch--icon block-switch">
<label> <label>
<input type="checkbox" name="flag_active" id="flag_active" value="1"{{ obj.isActive() ? ' checked' }}> <input type="checkbox" name="flag_active" id="flag_active" value="1"{{ obj.isActive() ? ' checked' }}>
<label class="switch-label">Active</label> <label class="switch-label">Active</label>
<span></span> <span></span>
</label> </label>
</span> </span>
<div class="form-control-feedback hide" data-field="flag_active"></div> <div class="form-control-feedback hide" data-field="flag_active"></div>
</div> </div>
<div class="col-lg-8"> <div class="col-lg-8">
</div> </div>
</div> </div>
<div class="form-group m-form__group row">
<div class="col-lg-4">
<span class="m-switch m-switch--icon block-switch">
<label>
<input type="checkbox" name="flag_subscription" id="flag_subscription" value="1"{{ obj.isSubscription() ? ' checked' }}>
<label class="switch-label">Used for subscriptions</label>
<span></span>
</label>
</span>
<div class="form-control-feedback hide" data-field="flag_subscription"></div>
</div>
<div class="col-lg-8">
</div>
</div>
<div class="form-group m-form__group row"> <div class="form-group m-form__group row">
<div class="col-lg-6"> <div class="col-lg-6">
<label data-field="image_file"> <label data-field="image_file">

View file

@ -111,21 +111,36 @@
title: 'Brand', title: 'Brand',
width: 120 width: 120
}, },
{ {
field: 'flag_active', field: 'flag_active',
title: 'Active', title: 'Active',
template: function (row, index, datatable) { template: function (row, index, datatable) {
var tag = ''; var tag = '';
if (row.flag_active === true) { if (row.flag_active === true) {
tag = '<span class="m-badge m-badge--success m-badge--wide">Yes</span>'; tag = '<span class="m-badge m-badge--success m-badge--wide">Yes</span>';
} else { } else {
tag = '<span class="m-badge m-badge--danger m-badge--wide">No</span>'; tag = '<span class="m-badge m-badge--danger m-badge--wide">No</span>';
} }
return tag; return tag;
} }
}, },
{
field: 'flag_subscription',
title: 'Subscription',
template: function (row, index, datatable) {
var tag = '';
if (row.flag_subscription === true) {
tag = '<span class="m-badge m-badge--success m-badge--wide">Yes</span>';
} else {
tag = '<span class="m-badge m-badge--danger m-badge--wide">No</span>';
}
return tag;
}
},
/* /*
{ {
field: 'prod_code', field: 'prod_code',