Add subject field to tickets

This commit is contained in:
Ramon Gutierrez 2018-01-31 12:04:52 +08:00
parent 6be23b27c5
commit d0d0c04c5d
5 changed files with 53 additions and 23 deletions

View file

@ -39,8 +39,7 @@ class TicketController extends BaseController
$datatable = $req->request->get('datatable'); $datatable = $req->request->get('datatable');
// count total records // count total records
$tquery = $qb->select('COUNT(q)') $tquery = $qb->select('COUNT(q)');
->leftJoin('q.created_by', 'u');
// add filters to count query // add filters to count query
$this->setQueryFilters($datatable, $tquery, $qb); $this->setQueryFilters($datatable, $tquery, $qb);
@ -65,21 +64,15 @@ class TicketController extends BaseController
]; ];
// build query // build query
$query = $qb->select('q') $query = $qb->select('q');
->addSelect($qb->expr()->concat('u.first_name', $qb->expr()->literal(' '), 'u.last_name') . ' as user_full_name');
// add filters to query // add filters to query
$this->setQueryFilters($datatable, $query, $qb); $this->setQueryFilters($datatable, $query, $qb);
// check if sorting is present, otherwise use default // check if sorting is present, otherwise use default
if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) {
$prefix = '';
if (!in_array($datatable['sort']['field'], ['user_full_name']))
$prefix = 'q.';
$order = $datatable['sort']['sort'] ?? 'asc'; $order = $datatable['sort']['sort'] ?? 'asc';
$query->orderBy($prefix . $datatable['sort']['field'], $order); $query->orderBy('q.' . $datatable['sort']['field'], $order);
} else { } else {
$query->orderBy('q.id', 'asc'); $query->orderBy('q.id', 'asc');
} }
@ -94,14 +87,14 @@ class TicketController extends BaseController
$rows = []; $rows = [];
foreach ($obj_rows as $orow) { foreach ($obj_rows as $orow) {
// add row data // add row data
$row['id'] = $orow[0]->getID(); $row['id'] = $orow->getID();
$row['date_create'] = $orow[0]->getDateCreate()->format("d M Y g:i A"); $row['date_create'] = $orow->getDateCreate()->format("d M Y g:i A");
$row['first_name'] = $orow[0]->getFirstName(); $row['subject'] = $orow->getSubject();
$row['last_name'] = $orow[0]->getLastName(); $row['first_name'] = $orow->getFirstName();
$row['contact_num'] = $orow[0]->getContactNumber(); $row['last_name'] = $orow->getLastName();
$row['status'] = $orow[0]->getStatusText(); $row['contact_num'] = $orow->getContactNumber();
$row['ticket_type'] = $orow[0]->getTicketTypeText(); $row['status'] = $orow->getStatusText();
$row['user_full_name'] = $orow['user_full_name']; $row['ticket_type'] = $orow->getTicketTypeText();
// add row metadata // add row metadata
$row['meta'] = [ $row['meta'] = [
@ -205,6 +198,7 @@ class TicketController extends BaseController
->setStatus($req->request->get('status')) ->setStatus($req->request->get('status'))
->setTicketType($ticket_type) ->setTicketType($ticket_type)
->setOtherTicketType($other_ticket_type) ->setOtherTicketType($other_ticket_type)
->setSubject($req->request->get('subject'))
->setDetails($req->request->get('details')) ->setDetails($req->request->get('details'))
->setDateCreate(new DateTime()) ->setDateCreate(new DateTime())
->setCreatedBy($this->getUser()); ->setCreatedBy($this->getUser());
@ -330,6 +324,7 @@ class TicketController extends BaseController
->setStatus($req->request->get('status')) ->setStatus($req->request->get('status'))
->setTicketType($ticket_type) ->setTicketType($ticket_type)
->setOtherTicketType($other_ticket_type) ->setOtherTicketType($other_ticket_type)
->setSubject($req->request->get('subject'))
->setDetails($req->request->get('details')); ->setDetails($req->request->get('details'));
// initialize error list // initialize error list
@ -392,7 +387,7 @@ class TicketController extends BaseController
// check if datatable filter is present and append to query // check if datatable filter is present and append to query
protected function setQueryFilters($datatable, &$query, $qb) { protected function setQueryFilters($datatable, &$query, $qb) {
if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) {
$query->where($qb->expr()->concat('u.first_name', $qb->expr()->literal(' '), 'u.last_name') . ' LIKE :filter') $query->where('q.subject LIKE :filter')
->orWhere('q.status LIKE :filter') ->orWhere('q.status LIKE :filter')
->orWhere('q.ticket_type LIKE :filter') ->orWhere('q.ticket_type LIKE :filter')
->orWhere('q.other_ticket_type LIKE :filter') ->orWhere('q.other_ticket_type LIKE :filter')

View file

@ -50,6 +50,13 @@ class Ticket
*/ */
protected $other_ticket_type; protected $other_ticket_type;
// subject of this ticket
/**
* @ORM\Column(type="string", length=80)
* @Assert\NotBlank()
*/
protected $subject;
// first name of ticket owner // first name of ticket owner
/** /**
* @ORM\Column(type="string", length=80) * @ORM\Column(type="string", length=80)
@ -161,6 +168,17 @@ class Ticket
} }
} }
public function setSubject($subject)
{
$this->subject = $subject;
return $this;
}
public function getSubject()
{
return $this->subject;
}
public function setFirstName($first_name) public function setFirstName($first_name)
{ {
$this->first_name = $first_name; $this->first_name = $first_name;

View file

@ -537,6 +537,7 @@
trow = { trow = {
id: "{{ ticket.getID }}", id: "{{ ticket.getID }}",
date_create: "{{ ticket.getDateCreate|date('d M Y - h:i A') }}", date_create: "{{ ticket.getDateCreate|date('d M Y - h:i A') }}",
subject: "{{ ticket.getSubject }}",
ticket_type: "{{ ticket.getTicketTypeText }}", ticket_type: "{{ ticket.getTicketTypeText }}",
status: "{{ ticket.getStatusText }}", status: "{{ ticket.getStatusText }}",
edit_url: "{{ url('ticket_update', {'id': ticket.getID}) }}" edit_url: "{{ url('ticket_update', {'id': ticket.getID}) }}"
@ -1106,6 +1107,11 @@
title: 'Date Created', title: 'Date Created',
width: 200 width: 200
}, },
{
field: 'subject',
title: 'Subject',
width: 300
},
{ {
field: 'ticket_type', field: 'ticket_type',
title: 'Ticket Type' title: 'Ticket Type'

View file

@ -80,6 +80,13 @@
<div class="form-control-feedback hide" data-field="other_ticket_type"></div> <div class="form-control-feedback hide" data-field="other_ticket_type"></div>
</div> </div>
</div> </div>
<div class="form-group m-form__group row no-border">
<div class="col-lg-12">
<label data-field="subject">Subject</label>
<input type="text" name="subject" class="form-control m-input" value="{{ obj.getSubject }}">
<div class="form-control-feedback hide" data-field="subject"></div>
</div>
</div>
<div class="form-group m-form__group row no-border"> <div class="form-group m-form__group row no-border">
<div class="col-lg-12"> <div class="col-lg-12">
<label for="details" data-field="details"> <label for="details" data-field="details">

View file

@ -74,6 +74,9 @@
serverFiltering: true, serverFiltering: true,
serverSorting: true serverSorting: true
}, },
layout: {
scroll: true
},
columns: [ columns: [
{ {
field: 'id', field: 'id',
@ -84,6 +87,11 @@
field: 'date_create', field: 'date_create',
title: 'Date Created' title: 'Date Created'
}, },
{
field: 'subject',
title: 'Subject',
width: 300
},
{ {
field: 'first_name', field: 'first_name',
title: 'First Name' title: 'First Name'
@ -104,10 +112,6 @@
field: 'status', field: 'status',
title: 'Status' title: 'Status'
}, },
{
field: 'user_full_name',
title: 'Created By'
},
{ {
field: 'Actions', field: 'Actions',
width: 110, width: 110,