Skip to content

Commit 0a44087

Browse files
committed
Search by any date related field
1 parent ded18c9 commit 0a44087

3 files changed

Lines changed: 54 additions & 12 deletions

File tree

src/Controllers/TicketsController.php

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class TicketsController extends Controller
3535
protected $member;
3636
protected $a_search_fields_numeric = ['creator_id', 'user_id', 'status_id', 'priority_id', 'category_id', 'agent_id'];
3737
protected $a_search_fields_text = ['subject', 'html', 'intervention_html'];
38+
protected $a_search_fields_date = ['start_date', 'limit_date', 'created_at', 'completed_at', 'updated_at'];
3839

3940
public function __construct(Ticket $tickets, \PanicHDMember $member)
4041
{
@@ -78,12 +79,19 @@ public function data($ticketList = 'active')
7879
}elseif ($field == 'list'){
7980
$collection->inList($value);
8081

81-
}elseif(in_array($field, ['start_date', 'limit_date'])){
82-
if ($search_fields[$field . '_type'] == 'exact_day'){
83-
$collection->whereDate($field, Carbon::createFromFormat(trans('panichd::lang.datetime-format'), $value)->toDateTimeString());
82+
}elseif(in_array($field, $this->a_search_fields_date)){
83+
if (in_array($search_fields[$field . '_type'], ['exact_year', 'exact_month'])){
84+
$collection->whereYear('panichd_tickets.' . $field, Carbon::createFromFormat(trans('panichd::lang.datetime-format'), $value)->format('Y'));
85+
86+
if ($search_fields[$field . '_type'] == 'exact_month'){
87+
$collection->whereMonth('panichd_tickets.' . $field, Carbon::createFromFormat(trans('panichd::lang.datetime-format'), $value)->format('m'));
88+
}
89+
90+
}elseif ($search_fields[$field . '_type'] == 'exact_day'){
91+
$collection->whereDate('panichd_tickets.' . $field, Carbon::createFromFormat(trans('panichd::lang.datetime-format'), $value)->toDateString());
8492

8593
}else{
86-
$collection->where($field, ($search_fields[$field . '_type'] == 'from' ? '>=' : '<'), Carbon::createFromFormat(trans('panichd::lang.datetime-format'), $value)->toDateTimeString());
94+
$collection->where('panichd_tickets.' . $field, ($search_fields[$field . '_type'] == 'from' ? '>=' : '<'), Carbon::createFromFormat(trans('panichd::lang.datetime-format'), $value)->toDateTimeString());
8795
}
8896

8997
}elseif(in_array($field, $this->a_search_fields_text)){
@@ -804,19 +812,17 @@ public function register_search_fields(Request $request)
804812
session()->forget('search_fields');
805813

806814
// Check all fields
807-
$a_fields = array_merge($this->a_search_fields_numeric, $this->a_search_fields_text, ['department_id', 'list', 'start_date', 'limit_date', 'comments', 'attachment_name', 'any_text_field']);
815+
$a_fields = array_merge($this->a_search_fields_numeric, $this->a_search_fields_text, $this->a_search_fields_date, ['department_id', 'list', 'comments', 'attachment_name', 'any_text_field']);
808816
foreach ($a_fields as $field){
809817
if($request->filled($field)){
810818
$search_fields[$field] = $request->{$field};
811819
}
812820
}
813821

814-
// Register Start date and Limit date types (from radio buttons)
815-
if ($request->filled('start_date') or $request->filled('start_date')){
816-
foreach (['start_date', 'limit_date'] as $field){
817-
if($request->filled($field)){
818-
$search_fields[$field . '_type'] = $request->{$field . '_type'};
819-
}
822+
// Register date field related types (specified with radio buttons)
823+
foreach ($this->a_search_fields_date as $field){
824+
if($request->filled($field)){
825+
$search_fields[$field . '_type'] = $request->{$field . '_type'};
820826
}
821827
}
822828

src/Views/tickets/search/form.blade.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,6 @@
236236
</div>
237237
</div>
238238
@endif
239-
240239
<div class="form-group row"><!-- FIND IN ANY TEXT FIELD -->
241240
<label for="comments" class="col-lg-3 col-form-label">Any text field{{ trans('panichd::lang.colon') }}</label>
242241
<div class="col-lg-9">
@@ -245,6 +244,28 @@
245244
</div>
246245
</div>
247246

247+
@foreach(['created_at', 'completed_at', 'updated_at'] as $date_field)
248+
<div class="form-group row">
249+
{!! CollectiveForm::label($date_field, $date_field . trans('panichd::lang.colon'), ['class' => 'col-lg-3 col-form-label']) !!}
250+
<div class="col-lg-9">
251+
<div class="input-group date" id="{{ $date_field }}">
252+
<input type="text" class="form-control" name="{{ $date_field }}" value=""/>
253+
<span class="input-group-addon" style="display: none"></span>
254+
<span class="input-group-append">
255+
<button class="btn btn-light btn-default"><span class="fa fa-calendar"></span></button>
256+
</span>
257+
</div>
258+
<div class="form-text">
259+
<label><input type="radio" name="{{ $date_field }}_type" value="from" checked="checked"> From specified</label>
260+
<label class="ml-2"><input type="radio" name="{{ $date_field }}_type" value="until"> Until specified</label>
261+
<label class="ml-2"><input type="radio" name="{{ $date_field }}_type" value="exact_year"> Exact Year</label>
262+
<label class="ml-2"><input type="radio" name="{{ $date_field }}_type" value="exact_month"> Year, month</label>
263+
<label class="ml-2"><input type="radio" name="{{ $date_field }}_type" value="exact_day"> Day</label>
264+
</div>
265+
</div>
266+
</div>
267+
@endforeach
268+
248269
</div></div>
249270

250271
<div class="text-center"><!-- SUBMIT BUTTON -->

src/Views/tickets/search/scripts.blade.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,21 @@ function success_ajax_callback() {
4848
}
4949
});
5050
51+
// Date fields with datetimepicker
52+
@foreach(['created_at', 'completed_at', 'updated_at'] as $date_field)
53+
$('#{{ $date_field }}').datetimepicker({
54+
locale: '{{App::getLocale()}}',
55+
format: '{{ trans('panichd::lang.datetimepicker-format') }}',
56+
keyBinds: { 'delete':null, 'left':null, 'right':null },
57+
useCurrent: false
58+
});
59+
60+
$('#{{ $date_field }} .btn').click(function(e){
61+
e.preventDefault();
62+
$('#' + $(this).closest('.input-group').prop('id')).data("DateTimePicker").toggle();
63+
});
64+
@endforeach
65+
5166
// Edit search button
5267
$('#edit_search').click(function(e){
5368
e.preventDefault();

0 commit comments

Comments
 (0)