Merge branch '674-color-code-jos-in-dispatch-page' into 'master'

Resolve "Color code JOs in dispatch page"

Closes #674

See merge request jankstudio/resq!788
This commit is contained in:
Kendrick Chan 2022-06-01 11:11:07 +00:00
commit 16e0d8448f
3 changed files with 142 additions and 86 deletions

View file

@ -155,6 +155,30 @@ span.has-danger,
color: #fff !important; color: #fff !important;
} }
.m-table__row--is_vip td {
background-color: #ffff00 !important;
color: #414a4c !important;
}
.m-table__row--is_vip td > span,
.m-table__row--is_vip td > span a,
.m-table__row--is_vip td > span a i {
color: #414a4c !important;
}
.m-table__row--is_emergency td {
background-color: #ffa500 !important;
color: #fff !important;
}
.m-table__row--is_emergency td > span,
.m-table__row--is_emergency td > span a,
.m-table__row--is_emergency td > span a i {
color: #fff !important;
}
.m-datatable.m-datatable--default > .m-datatable__table { .m-datatable.m-datatable--default > .m-datatable__table {
min-height: 0 !important; min-height: 0 !important;
} }

View file

@ -46,6 +46,7 @@ use App\Ramcar\HubCriteria;
use App\Ramcar\DeliveryStatus; use App\Ramcar\DeliveryStatus;
use App\Ramcar\SourceOfAwareness; use App\Ramcar\SourceOfAwareness;
use App\Ramcar\InitialConcern; use App\Ramcar\InitialConcern;
use App\Ramcar\CustomerClassification;
use App\Ramcar\Gender; use App\Ramcar\Gender;
use App\Ramcar\CallerClassification; use App\Ramcar\CallerClassification;
@ -187,8 +188,20 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
$service_types = ServiceType::getCollection(); $service_types = ServiceType::getCollection();
// process rows // process rows
$is_vip = false;
$is_emergency = false;
$rows = []; $rows = [];
foreach ($obj_rows as $orow) { foreach ($obj_rows as $orow) {
// check if customer is vip
$cust_class = $orow->getCustomer()->getCustomerClassification();
if ($cust_class == CustomerClassification::VIP)
$is_vip = true;
// check if customer is not willing to wait
$will_not_wait = $orow->getWillWait();
if ($will_not_wait == WillingToWaitContent::NOT_WILLING_TO_WAIT)
$is_emergency = true;
// add row data // add row data
$row['id'] = $orow->getID(); $row['id'] = $orow->getID();
$row['customer_name'] = $orow->getCustomer()->getFirstName() . ' ' . $orow->getCustomer()->getLastName(); $row['customer_name'] = $orow->getCustomer()->getFirstName() . ' ' . $orow->getCustomer()->getLastName();
@ -200,6 +213,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
$row['flag_advance'] = $orow->isAdvanceOrder(); $row['flag_advance'] = $orow->isAdvanceOrder();
$row['plate_number'] = $orow->getCustomerVehicle()->getPlateNumber(); $row['plate_number'] = $orow->getCustomerVehicle()->getPlateNumber();
$row['is_mobile'] = $orow->getSource() == TransactionOrigin::MOBILE_APP; $row['is_mobile'] = $orow->getSource() == TransactionOrigin::MOBILE_APP;
$row['is_vip'] = $is_vip;
$row['is_emergency'] = $is_emergency;
$processor = $orow->getProcessedBy(); $processor = $orow->getProcessedBy();
if ($processor == null) if ($processor == null)

View file

@ -45,94 +45,111 @@
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script> <script>
$(function() { $(function() {
var options = { var options = {
data: { data: {
type: 'remote', type: 'remote',
source: { source: {
read: { read: {
url: '{{ url('jo_proc_rows') }}', url: '{{ url('jo_proc_rows') }}',
method: 'POST' method: 'POST'
} }
}, },
saveState: { saveState: {
cookie: false, cookie: false,
webstorage: false webstorage: false
}, },
pageSize: 10, pageSize: 10,
serverPaging: true, serverPaging: true,
serverFiltering: true, serverFiltering: true,
serverSorting: true serverSorting: true
}, },
rows: { rows: {
beforeTemplate: function (row, data, index) { beforeTemplate: function (row, data, index) {
if (data.flag_advance) { var attribute = getRowAttribute(data);
$(row).addClass('m-table__row--danger'); // check if we have to apply a background color for the row
} if (attribute) {
var row_class = "m-table__row--" + attribute;
$(row).addClass(row_class);
}
}
},
columns: [
{
field: 'id',
title: 'JO Number'
},
{
field: 'delivery_address',
title: 'Customer Area'
},
{
field: 'type',
title: 'Schedule'
},
{
field: 'date_schedule',
title: 'Scheduled Date'
},
{
field: 'status',
title: 'Status'
},
{
field: 'processor',
title: 'Dispatcher'
},
{
field: 'Actions',
width: 110,
title: 'Actions',
sortable: false,
overflow: 'visible',
template: function (row, index, datatable) {
var actions = '<a href="' + row.meta.update_url + '" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill btn-edit" title="View / Edit"><i class="la la-edit"></i></a>';
if (data.is_mobile) { {% if is_granted('jo_proc.unlock') %}
$(row).addClass('m-table__row--is_mobile'); if (row.meta.unlock_url != '') {
} actions += '<a href="' + row.meta.unlock_url + '" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill btn-edit" title="Unlock"><i class="fa fa-unlock"></i></a>';
} }
}, {% endif %}
columns: [
{
field: 'id',
title: 'JO Number'
},
{
field: 'delivery_address',
title: 'Customer Area'
},
{
field: 'type',
title: 'Schedule'
},
{
field: 'date_schedule',
title: 'Scheduled Date'
},
{
field: 'status',
title: 'Status'
},
{
field: 'processor',
title: 'Dispatcher'
},
{
field: 'Actions',
width: 110,
title: 'Actions',
sortable: false,
overflow: 'visible',
template: function (row, index, datatable) {
var actions = '<a href="' + row.meta.update_url + '" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill btn-edit" title="View / Edit"><i class="la la-edit"></i></a>';
{% if is_granted('jo_proc.unlock') %} return actions;
if (row.meta.unlock_url != '') { },
actions += '<a href="' + row.meta.unlock_url + '" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill btn-edit" title="Unlock"><i class="fa fa-unlock"></i></a>'; }
} ],
{% endif %} search: {
onEnter: false,
input: $('#data-rows-search'),
delay: 400
}
};
return actions; var table = $("#data-rows").mDatatable(options);
},
}
],
search: {
onEnter: false,
input: $('#data-rows-search'),
delay: 400
}
};
var table = $("#data-rows").mDatatable(options); // auto refresh table
setInterval(function() {
table.reload();
}, {{ table_refresh_rate }});
});
// auto refresh table function getRowAttribute(data) {
setInterval(function() { if (data.is_vip) {
table.reload(); return 'is_vip';
}, {{ table_refresh_rate }}); }
}); if (data.is_emergency) {
</script> return 'is_emergency';
}
if (data.flag_advance) {
return 'danger';
}
if (data.is_mobile) {
return 'is_mobile';
}
return false;
};
</script>
{% endblock %} {% endblock %}