Resolve "Job Order form changes" #833

Merged
arcticzero merged 4 commits from 24-job-order-form-changes into master 2018-02-26 18:47:45 +00:00
4 changed files with 144 additions and 1 deletions
Showing only changes of commit cae5a5bbac - Show all commits

View file

@ -80,3 +80,8 @@ jo_fulfill_submit:
path: /job-order/fulfillment/{id}
controller: App\Controller\JobOrderController::fulfillmentSubmit
methods: [POST]
jo_search:
path: /job-order/search
controller: App\Controller\JobOrderController::getJobOrders
methods: [GET]

View file

@ -157,6 +157,11 @@ span.has-danger,
font-size: 14px !important;
}
.select2-container--default .select2-selection--single .select2-selection__rendered .select2-selection__clear {
margin-top: -0.95rem;
font-weight: 700;
}
@media (min-width: 995px) {
.modal-lg {
max-width: 1024px;

View file

@ -38,6 +38,87 @@ use DateTime;
class JobOrderController extends BaseController
{
public function getJobOrders(Request $req)
{
if (!$this->isGranted('jo_in.list')) {
$exception = $this->createAccessDeniedException('No access.');
throw $exception;
}
// get search term
$term = $req->query->get('search');
// get querybuilder
$qb = $this->getDoctrine()
->getRepository(JobOrder::class)
->createQueryBuilder('q');
// build expression now since we're reusing it
$jo_label = $qb->expr()->concat($qb->expr()->literal('#'), 'q.id', $qb->expr()->literal(' - '), 'c.first_name', $qb->expr()->literal(' '), 'c.last_name', $qb->expr()->literal(' (Plate No: '), 'v.plate_number', $qb->expr()->literal(')'));
// count total records
$tquery = $qb->select('COUNT(q)')
->join('q.customer', 'c')
->join('q.cus_vehicle', 'v');
// add filters to count query
if (!empty($term)) {
$tquery->where($jo_label . ' LIKE :filter')
->setParameter('filter', '%' . $term . '%');
}
$total = $tquery->getQuery()
->getSingleScalarResult();
// pagination vars
$page = $req->query->get('page') ?? 1;
$perpage = 20;
$offset = ($page - 1) * $perpage;
$pages = ceil($total / $perpage);
$has_more_pages = $page < $pages ? true : false;
// build main query
$query = $qb->select('q')
->addSelect($jo_label . ' as jo_label')
->addSelect('c.first_name as cust_first_name')
->addSelect('c.last_name as cust_last_name')
->addSelect('v.plate_number as vehicle_plate_number');
// add filters if needed
if (!empty($term)) {
$query->where($jo_label . ' LIKE :filter')
->setParameter('filter', '%' . $term . '%');
}
// get rows
$obj_rows = $query->orderBy('q.id', 'asc')
->setFirstResult($offset)
->setMaxResults($perpage)
->getQuery()
->getResult();
// build job order array
$job_orders = [];
foreach ($obj_rows as $jo) {
$service_type = ServiceType::getName($jo[0]->getServiceType());
$job_orders[] = [
'id' => $jo[0]->getID(),
'text' => $jo['jo_label'] . ' - ' . $service_type
];
}
// response
return $this->json([
'success' => true,
'results' => $job_orders,
'pagination' => [
'more' => $has_more_pages
]
]);
}
public function incomingForm()
{
$this->denyAccessUnlessGranted('jo_in.list', null, 'No access.');
@ -113,6 +194,18 @@ class JobOrderController extends BaseController
->setAgentNotes($req->request->get('agent_notes'))
->setDeliveryAddress($req->request->get('delivery_address'));
// check if reference JO is set and validate
if (!empty($req->request->get('ref_jo'))) {
// get reference JO
$ref_jo = $em->getRepository(JobOrder::class)->find($req->request->get('ref_jo'));
if (empty($ref_jo)) {
$error_array['ref_jo'] = 'Invalid reference job order specified.';
} else {
$obj->setReferenceJO($ref_jo);
}
}
// instantiate invoice criteria
$criteria = new InvoiceCriteria();

View file

@ -48,9 +48,30 @@
</div>
</div>
</div>
<div class="m-form__section">
<div class="form-group m-form__group row">
<div class="col-lg-6">
<label data-field="ref_jo">Reference Job Order:</label>
<select class="form-control m-select2" id="ref-jo" name="ref_jo"></select>
<div class="form-control-feedback hide" data-field="ref_jo"></div>
</div>
</div>
</div>
{% endif %}
<div class="m-form__section{{ mode != 'create' ? ' m-form__section--first' }}">
{% if mode != 'create' and obj.getReferenceJO %}
<div class="m-form__section m-form__section--first">
<div class="form-group m-form__group row">
<div class="col-lg-6">
<label data-field="ref_jo">Reference Job Order:</label>
<input type="text" name="ref_jo" id="ref-jo" class="form-control m-input" value="{{ '#' ~ obj.getReferenceJO.getID ~ ' - ' ~ obj.getReferenceJO.getCustomer.getFirstName ~ ' ' ~ obj.getReferenceJO.getCustomer.getLastName ~ ' (Plate No: ' ~ obj.getReferenceJO.getCustomerVehicle.getPlateNumber ~ ') - ' ~ service_types[obj.getReferenceJO.getServiceType] }}" disabled>
<div class="form-control-feedback hide" data-field="ref_jo"></div>
</div>
</div>
</div>
{% endif %}
<div class="m-form__section{{ mode != 'create' and not obj.getReferenceJO ? ' m-form__section--first' }}">
<div class="m-form__heading">
<h3 class="m-form__heading-title">
Customer Details
@ -856,6 +877,25 @@ $(function() {
})
}).focus();
// reference job order selector
$('#ref-jo').select2({
ajax: {
url: "{{ url('jo_search') }}",
dataType: 'json',
delay: 200,
data: function (params) {
var query = {
search: params.term,
page: params.page || 1
}
return query;
}
},
placeholder: "Select a job order",
allowClear: true
});
// reset all vehicle info form fields
function resetVehicleFields() {
$("[data-vehicle-field='1']").val("").css('color', '').prop('placeholder', 'Select a vehicle first');