Update list columns and fields based on feedback

This commit is contained in:
Ramon Gutierrez 2018-01-31 23:56:25 +08:00
parent 7bf2b7aa5d
commit 8f4b745025
13 changed files with 175 additions and 115 deletions

View file

@ -3,6 +3,7 @@
namespace App\Controller;
use App\Ramcar\BaseController;
use App\Ramcar\CustomerClassification;
use App\Ramcar\FuelType;
use App\Ramcar\VehicleStatusCondition;
use App\Entity\Customer;
@ -103,10 +104,19 @@ class CustomerController extends BaseController
// process rows
$rows = [];
foreach ($obj_rows as $orow) {
$classifications = CustomerClassification::getCollection();
// add row data
$row['id'] = $orow->getID();
$row['first_name'] = $orow->getFirstName();
$row['last_name'] = $orow->getLastName();
$row['customer_classification'] = $classifications[$orow->getCustomerClassification()];
$row['flag_mobile_app'] = $orow->hasMobileApp();
$row['app_mobile_number'] = $orow->hasMobileApp() && !empty($orow->getMobileSessions()) ? $orow->getMobileSessions()[0]->getPhoneNumber() : '';
// TODO: properly add mobile numbers and plate numbers as searchable/sortable fields, use doctrine events
$row['mobile_numbers'] = implode("<br>", $orow->getMobileNumberList());
$row['plate_numbers'] = implode("<br>", $orow->getPlateNumberList());
// add row metadata
$row['meta'] = [
@ -143,6 +153,7 @@ class CustomerController extends BaseController
// get parent associations
$params['bmfgs'] = $em->getRepository(BatteryManufacturer::class)->findAll();
$params['vmfgs'] = $em->getRepository(VehicleManufacturer::class)->findAll();
$params['classifications'] = CustomerClassification::getCollection();
$params['fuel_types'] = FuelType::getCollection();
$params['status_conditions'] = VehicleStatusCondition::getCollection();
@ -163,8 +174,8 @@ class CustomerController extends BaseController
// set and save values
$row->setFirstName($req->request->get('first_name'))
->setLastName($req->request->get('last_name'))
->setCustomerNotes($req->request->get('customer_notes'))
->setConfirmed(false);
->setCustomerClassification($req->request->get('customer_classification'))
->setCustomerNotes($req->request->get('customer_notes'));
// initialize error lists
$error_array = [];
@ -317,6 +328,7 @@ class CustomerController extends BaseController
// get parent associations
$params['bmfgs'] = $em->getRepository(BatteryManufacturer::class)->findAll();
$params['vmfgs'] = $em->getRepository(VehicleManufacturer::class)->findAll();
$params['classifications'] = CustomerClassification::getCollection();
$params['fuel_types'] = FuelType::getCollection();
$params['status_conditions'] = VehicleStatusCondition::getCollection();
@ -343,6 +355,7 @@ class CustomerController extends BaseController
// set and save values
$row->setFirstName($req->request->get('first_name'))
->setLastName($req->request->get('last_name'))
->setCustomerClassification($req->request->get('customer_classification'))
->setCustomerNotes($req->request->get('customer_notes'));
// initialize error lists
@ -716,6 +729,7 @@ class CustomerController extends BaseController
if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) {
$query->where('q.first_name LIKE :filter')
->orWhere('q.last_name LIKE :filter')
->orWhere('q.customer_classification LIKE :filter')
->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%');
}
}

View file

@ -84,6 +84,7 @@ class HubController extends BaseController
// add row data
$row['id'] = $orow->getID();
$row['name'] = $orow->getName();
$row['branch'] = $orow->getBranch();
$row['address'] = $orow->getAddress();
$row['contact_nums'] = $orow->getContactNumbers();
$row['time_open'] = $orow->getTimeOpen()->format('g:i A');
@ -135,6 +136,7 @@ class HubController extends BaseController
// set and save values
$obj->setName($req->request->get('name'))
->setBranch($req->request->get('branch'))
->setAddress($req->request->get('address'))
->setContactNumbers($req->request->get('contact_nums'))
->setTimeOpen($time_open)

View file

@ -188,9 +188,7 @@ class JobOrderController extends BaseController
$datatable = $req->request->get('datatable');
// count total records
$tquery = $qb->select('COUNT(q)')
->join('q.cus_vehicle', 'cv')
->join('q.customer', 'c');
$tquery = $qb->select('COUNT(q)');
$this->setQueryFilters($datatable, $tquery, $qb, $tier_params['jo_status']);
@ -214,22 +212,14 @@ class JobOrderController extends BaseController
];
// build query
$query = $qb->select('q')
->addSelect('cv.plate_number as plate_number')
->addSelect('c.first_name as customer_name')
->addSelect('c.last_name as cust_last_name');
$query = $qb->select('q');
$this->setQueryFilters($datatable, $query, $qb, $tier_params['jo_status']);
// check if sorting is present, otherwise use default
if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) {
$prefix = '';
if (!in_array($datatable['sort']['field'], ['plate_number', 'customer_name']))
$prefix = 'q.';
$order = $datatable['sort']['sort'] ?? 'asc';
$query->orderBy($prefix . $datatable['sort']['field'], $order);
$query->orderBy('q.' . $datatable['sort']['field'], $order);
} else {
$query->orderBy('q.date_schedule', 'asc');
}
@ -243,26 +233,16 @@ class JobOrderController extends BaseController
// process rows
$rows = [];
foreach ($obj_rows as $orow) {
// get service type name
$service_type = false;
$statuses = JOStatus::getCollection();
$service_types = ServiceType::getCollection();
foreach ($service_types as $key => $service) {
if ($key == $orow[0]->getServiceType()) {
$service_type = $service;
break;
}
}
// add row data
$row['id'] = $orow[0]->getID();
$row['date_schedule'] = $orow[0]->getDateSchedule()->format("d M Y");
$row['date_schedule_time'] = $orow[0]->getDateSchedule()->format("g:i A");
$row['service_type'] = $service_type;
$row['plate_number'] = $orow['plate_number'];
$row['customer_name'] = $orow['customer_name'] . " " . $orow['cust_last_name'];
$row['mobile_numbers'] = implode("<br>", $orow[0]->getCustomer()->getMobileNumberList());
$row['source'] = ucfirst($orow[0]->getSource());
$row['flag_advance'] = $orow[0]->isAdvanceOrder();
$row['id'] = $orow->getID();
$row['delivery_address'] = $orow->getDeliveryAddress();
$row['date_schedule'] = $orow->isAdvanceOrder() ? $orow->getDateSchedule()->format("d M Y g:i A") : 'Immediate';
$row['service_type'] = $service_types[$orow->getServiceType()];
$row['status'] = $statuses[$orow->getStatus()];
$row['flag_advance'] = $orow->isAdvanceOrder();
// add crud urls
$row['meta']['update_url'] = $this->generateUrl($tier_params['edit_route'], ['id' => $row['id']]);

View file

@ -96,6 +96,7 @@ class OutletController extends BaseController
// add row data
$row['id'] = $orow[0]->getID();
$row['name'] = $orow[0]->getName();
$row['branch'] = $orow[0]->getBranch();
$row['address'] = $orow[0]->getAddress();
$row['contact_nums'] = $orow[0]->getContactNumbers();
$row['time_open'] = $orow[0]->getTimeOpen()->format('g:i A');
@ -153,6 +154,7 @@ class OutletController extends BaseController
// set and save values
$obj->setName($req->request->get('name'))
->setBranch($req->request->get('branch'))
->setAddress($req->request->get('address'))
->setContactNumbers($req->request->get('contact_nums'))
->setTimeOpen($time_open)
@ -165,6 +167,7 @@ class OutletController extends BaseController
if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) {
$query->where('hub.name LIKE :filter')
->orWhere('q.name LIKE :filter')
->orWhere('q.branch LIKE :filter')
->orWhere('q.address LIKE :filter')
->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%');
}

View file

@ -142,7 +142,8 @@ class JobOrder
// delivery address
/**
* @ORM\Column(type="text", nullable=true)
* @ORM\Column(type="text")
* @Assert\NotBlank()
*/
protected $delivery_address;

View file

@ -53,23 +53,34 @@
<div class="tab-content">
<div class="tab-pane active" id="customer-info" role="tabpanel">
<div class="form-group m-form__group row">
<div class="col-lg-6">
<div class="col-lg-4">
<label data-field="first_name">
First Name
</label>
<input type="text" name="first_name" class="form-control m-input" value="{{ obj.getFirstName() }}" data-name="first_name">
<div class="form-control-feedback hide" data-field="first_name"></div>
</div>
<div class="col-lg-6">
<div class="col-lg-4">
<label data-field="last_name">
Last Name
</label>
<input type="text" name="last_name" class="form-control m-input" value="{{ obj.getLastName() }}" data-name="last_name">
<div class="form-control-feedback hide" data-field="last_name"></div>
</div>
<div class="col-lg-4">
<label data-field="customer_classification">
Customer Classification
</label>
<select name="customer_classification" class="form-control m-input">
{% for key, classification in classifications %}
<option value="{{ key }}"{{ obj.getCustomerClassification == key ? ' selected' }}>{{ classification }}</option>
{% endfor %}
</select>
<div class="form-control-feedback hide" data-field="customer_classification"></div>
</div>
</div>
<div class="form-group m-form__group row">
<div class="col-lg-6">
<div class="col-lg-4">
<label data-field="customer_notes">
Customer Notes
</label>

View file

@ -91,6 +91,20 @@
field: 'last_name',
title: 'Last Name'
},
{
field: 'customer_classification',
title: 'Classification'
},
{
field: 'mobile_numbers',
title: 'Mobile Numbers',
sortable: false
},
{
field: 'plate_numbers',
title: 'Plate Numbers',
sortable: false
},
{
field: 'flag_confirmed',
title: 'Status',
@ -106,6 +120,25 @@
return tag;
}
},
{
field: 'flag_mobile_app',
title: 'Has Mobile App?',
template: function (row, index, datatable) {
var tag = '';
if (row.flag_mobile_app === 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: 'app_mobile_number',
title: 'Registered Number'
},
{
field: 'Actions',
width: 110,

View file

@ -58,6 +58,31 @@
<input type="text" name="name" class="form-control m-input" value="{{ obj.getName() }}">
<div class="form-control-feedback hide" data-field="name"></div>
</div>
<div class="col-lg-6">
<label for="name" data-field="branch">
Branch
</label>
<input type="text" name="branch" class="form-control m-input" value="{{ obj.getBranch() }}">
<div class="form-control-feedback hide" data-field="branch"></div>
</div>
</div>
<div class="form-group m-form__group row no-border">
<div class="col-lg-6">
<label for="address" data-field="address">
Address
</label>
<textarea class="form-control m-input" id="address" rows="4" name="address">{{ obj.getAddress }}</textarea>
<div class="form-control-feedback hide" data-field="address"></div>
</div>
<div class="col-lg-6">
<label for="contact_nums" data-field="contact_nums">
Contact Numbers
</label>
<textarea class="form-control m-input" id="contact_nums" rows="4" name="contact_nums">{{ obj.getContactNumbers }}</textarea>
<div class="form-control-feedback hide" data-field="contact_nums"></div>
</div>
</div>
<div class="form-group m-form__group row no-border">
<div class="col-lg-3">
<label for="time_open">
Time Open
@ -83,22 +108,6 @@
<div class="form-control-feedback hide" data-field="time_close"></div>
</div>
</div>
<div class="form-group m-form__group row no-border">
<div class="col-lg-6">
<label for="address" data-field="address">
Address
</label>
<textarea class="form-control m-input" id="address" rows="4" name="address">{{ obj.getAddress }}</textarea>
<div class="form-control-feedback hide" data-field="address"></div>
</div>
<div class="col-lg-6">
<label for="contact_nums" data-field="contact_nums">
Contact Numbers
</label>
<textarea class="form-control m-input" id="contact_nums" rows="4" name="contact_nums">{{ obj.getContactNumbers }}</textarea>
<div class="form-control-feedback hide" data-field="contact_nums"></div>
</div>
</div>
<div class="form-group m-form__group row">
<div class="col-lg-12">
<label>
@ -309,6 +318,7 @@ $(function() {
{% for outlet in obj.getOutlets() %}
orow = {
name: "{{ outlet.getName() }}",
branch: "{{ outlet.getBranch() }}",
address: "{{ outlet.getAddress() }}",
contact_nums: '{{ outlet.getContactNumbers()|replace({"\r\n": "<br>"})|raw }}',
time_open: "{{ outlet.getTimeOpen()|date('g:i A') }}",
@ -342,7 +352,11 @@ $(function() {
columns: [
{
field: 'name',
title: 'Name'
title: 'Outlet'
},
{
field: 'branch',
title: 'Branch'
},
{
field: 'address',

View file

@ -82,7 +82,11 @@
},
{
field: 'name',
title: 'Name'
title: 'Hub'
},
{
field: 'branch',
title: 'Branch'
},
{
field: 'address',

View file

@ -154,7 +154,7 @@
<select class="form-control m-input" name="service_type">
<!--<option value=""></option>-->
{% for key, service in service_types %}
<option value="{{ key }}"{{ obj.getServiceType == service ? ' selected' }}>{{ service }}</option>
<option value="{{ key }}"{{ obj.getServiceType == key ? ' selected' }}>{{ service }}</option>
{% endfor %}
</select>
<div class="form-control-feedback hide" data-field="service_type"></div>
@ -339,21 +339,17 @@
<table id="outlets-table" class="table table-compact table-hover table-clickable m-table">
<thead>
<tr>
<th>Name</th>
<th>Address</th>
<th>Numbers</th>
<th>Opening</th>
<th>Closing</th>
<th class="text-right">Sales Count</th>
<th class="text-right">Sales Amount</th>
<th class="text-right">Service Count</th>
<th>Outlet</th>
<th>Branch</th>
<th class="text-right">Distance</th>
<th class="text-right">Travel Time</th>
</tr>
<th class="text-right">Sales (Day)</th>
<th class="text-right">Services (Day)</th>
<th>Contact Numbers</th> </tr>
</thead>
<tbody>
<tr class="placeholder-row{{ outlets|length > 0 ? ' hide' }}">
<td colspan="10">
<td colspan="7">
No items to display.
</td>
</tr>
@ -361,15 +357,12 @@
{% for outlet in outlets %}
<tr data-lat="{{ outlet.outlet.getCoordinates.getLatitude }}" data-lng="{{ outlet.outlet.getCoordinates.getLongitude }}" data-id="{{ outlet.outlet.getID }}"{{ obj.getOutlet and obj.getOutlet.getID == outlet.outlet.getID ? ' class="m-table__row--primary"' }}>
<td>{{ outlet.outlet.getName }}</td>
<td>{{ outlet.outlet.getAddress }}</td>
<td>{{ outlet.outlet.getContactNumbers }}</td>
<td>{{ outlet.outlet.getTimeOpen|date("g:i A") }}</td>
<td>{{ outlet.outlet.getTimeClose|date("g:i A") }}</td>
<td class="text-right">0.00</td>
<td class="text-right">0.00</td>
<td class="text-right">0</td>
<td>{{ outlet.outlet.getBranch }}</td>
<td class="text-right">{{ outlet.distance ? outlet.distance : '-' }}</td>
<td class="text-right">{{ outlet.duration ? outlet.duration : '-' }}</td>
<td class="text-right">0</td>
<td class="text-right">0</td>
<td>{{ outlet.outlet.getContactNumbers }}</td>
</tr>
{% endfor %}
</tbody>

View file

@ -75,32 +75,27 @@
columns: [
{
field: 'id',
title: 'ID'
title: 'JO Number'
},
{
field: 'delivery_address',
title: 'Customer Area'
},
{
field: 'service_type',
title: 'Type of Transaction'
},
{
field: 'date_schedule',
title: 'Scheduled Date'
},
{
field: 'date_schedule_time',
title: 'Scheduled Time',
sortable: false
field: 'status',
title: 'Status'
},
{
field: 'service_type',
title: 'Service Type'
},
{
field: 'plate_number',
title: 'Plate No.'
},
{
field: 'customer_name',
title: 'Customer'
},
{
field: 'mobile_numbers',
title: 'Mobile Numbers'
field: 'owner',
title: 'Owner'
},
{
field: 'Actions',

View file

@ -43,18 +43,32 @@
<input type="text" name="name" class="form-control m-input" value="{{ obj.getName() }}">
<div class="form-control-feedback hide" data-field="name"></div>
</div>
<div class="col-lg-6">
<label for="name" data-field="branch">
Branch
</label>
<input type="text" name="branch" class="form-control m-input" value="{{ obj.getBranch() }}">
<div class="form-control-feedback hide" data-field="branch"></div>
</div>
</div>
<div class="form-group m-form__group row no-border">
<div class="col-lg-6">
<label data-field="hub">Hub</label>
<select class="form-control m-input" id="hub" name="hub">
<option value=""></option>
{% for hub in hubs %}
<option value="{{ hub.getID() }}"{{ obj.getHub() and hub.getID() == obj.getHub().getID() ? ' selected' }}>{{ hub.getName() }}</option>
{% endfor %}
</select>
<div class="form-control-feedback hide" data-field="hub"></div>
<label for="address" data-field="address">
Address
</label>
<textarea class="form-control m-input" id="address" rows="4" name="address">{{ obj.getAddress }}</textarea>
<div class="form-control-feedback hide" data-field="address"></div>
</div>
<div class="col-lg-6">
<label for="contact_nums" data-field="contact_nums">
Contact Numbers
</label>
<textarea class="form-control m-input" id="contact_nums" rows="4" name="contact_nums">{{ obj.getContactNumbers }}</textarea>
<div class="form-control-feedback hide" data-field="contact_nums"></div>
</div>
</div>
<div class="form-group m-form__group row no-border">
<div class="col-lg-3">
<label for="time_open">
Time Open
@ -79,21 +93,15 @@
</div>
<div class="form-control-feedback hide" data-field="time_close"></div>
</div>
</div>
<div class="form-group m-form__group row no-border">
<div class="col-lg-6">
<label for="address" data-field="address">
Address
</label>
<textarea class="form-control m-input" id="address" rows="4" name="address">{{ obj.getAddress }}</textarea>
<div class="form-control-feedback hide" data-field="address"></div>
</div>
<div class="col-lg-6">
<label for="contact_nums" data-field="contact_nums">
Contact Numbers
</label>
<textarea class="form-control m-input" id="contact_nums" rows="4" name="contact_nums">{{ obj.getContactNumbers }}</textarea>
<div class="form-control-feedback hide" data-field="contact_nums"></div>
<label data-field="hub">Hub</label>
<select class="form-control m-input" id="hub" name="hub">
<option value=""></option>
{% for hub in hubs %}
<option value="{{ hub.getID() }}"{{ obj.getHub() and hub.getID() == obj.getHub().getID() ? ' selected' }}>{{ hub.getName() }}</option>
{% endfor %}
</select>
<div class="form-control-feedback hide" data-field="hub"></div>
</div>
</div>
<div class="form-group m-form__group row">
@ -115,8 +123,6 @@
<div class="form-control-feedback hide" data-field="coordinates"></div>
</div>
</div>
</div>
<div class="m-portlet__foot m-portlet__foot--fit">
<div class="m-form__actions m-form__actions--solid m-form__actions--right">

View file

@ -82,7 +82,11 @@
},
{
field: 'name',
title: 'Name'
title: 'Outlet'
},
{
field: 'branch',
title: 'Branch'
},
{
field: 'address',