Skip to content

Commit cc40e2e

Browse files
Hieu Lam - TMAodkhangkhangon
authored andcommitted
feature-9020: Filter options for orders and attendees not working (#9150)
* feature-9020: Filter options for orders and attendees not working * feature-9020: Filter options for orders and attendees not working * feature-9020: Filter options for orders and attendees not working * feature-9020: Filter options for orders and attendees not working * feature-9020: Fix UI filter date * feature-9020: Fix UI filter date * feature-9020: Fix UI filter date at the order * feature-9020: Filter options for orders and attendees not working --------- Co-authored-by: odkhang <[email protected]> Co-authored-by: Khang On - TMA <[email protected]>
1 parent 54d7ae5 commit cc40e2e

File tree

10 files changed

+390
-25
lines changed

10 files changed

+390
-25
lines changed

app/controllers/events/view/tickets/attendees.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@ import classic from 'ember-classic-decorator';
22
import { action } from '@ember/object';
33
import Controller from '@ember/controller';
44
import { run } from '@ember/runloop';
5+
import { tracked } from '@glimmer/tracking';
56

67
@classic
78
export default class AttendeesController extends Controller {
89
isLoadingcsv = false;
910
isLoadingpdf = false;
1011

12+
@tracked
13+
start_date = this.router.currentRoute.queryParams?.start_date;
14+
15+
@tracked
16+
end_date = this.router.currentRoute.queryParams?.end_date;
17+
1118
@action
1219
export(mode) {
1320
this.set(`isLoading${mode}`, true);
@@ -23,6 +30,61 @@ export default class AttendeesController extends Controller {
2330
});
2431
}
2532

33+
@action
34+
attendeeFilter(name) {
35+
if (name === 'date') {
36+
if (!this.start_date || !this.end_date) {
37+
this.router.transitionTo('events.view.tickets.attendees.list', {
38+
queryParams: {
39+
filter: name
40+
}
41+
});
42+
return;
43+
}
44+
this.router.transitionTo('events.view.tickets.attendees.list', {
45+
queryParams: {
46+
start_date : this.start_date,
47+
end_date : this.end_date,
48+
filter : name
49+
}
50+
});
51+
} else {
52+
this.router.transitionTo('events.view.tickets.attendees.list', {
53+
queryParams: {
54+
filter: name
55+
}
56+
});
57+
}
58+
}
59+
60+
@action
61+
onChangeStartDate() {
62+
if (!this.end_date) {
63+
return;
64+
}
65+
this.router.transitionTo('events.view.tickets.attendees.list', {
66+
queryParams: {
67+
start_date : this.start_date,
68+
end_date : this.end_date,
69+
filter : 'date'
70+
}
71+
});
72+
}
73+
74+
@action
75+
onChangeEndDate() {
76+
if (!this.start_date) {
77+
return;
78+
}
79+
this.router.transitionTo('events.view.tickets.attendees.list', {
80+
queryParams: {
81+
start_date : this.start_date,
82+
end_date : this.end_date,
83+
filter : 'date'
84+
}
85+
});
86+
}
87+
2688
requestLoop(exportJobInfo, mode) {
2789
run.later(() => {
2890
this.loader

app/controllers/events/view/tickets/orders.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@ import classic from 'ember-classic-decorator';
22
import { action } from '@ember/object';
33
import Controller from '@ember/controller';
44
import { run } from '@ember/runloop';
5+
import { tracked } from '@glimmer/tracking';
56

67
@classic
78
export default class OrdersController extends Controller {
89
isLoadingcsv = false;
910
isLoadingpdf = false;
1011

12+
@tracked
13+
start_date = this.router.currentRoute.queryParams?.start_date;
14+
15+
@tracked
16+
end_date = this.router.currentRoute.queryParams?.end_date;
17+
1118
@action
1219
export(mode) {
1320
this.set(`isLoading${mode}`, true);
@@ -23,6 +30,61 @@ export default class OrdersController extends Controller {
2330
});
2431
}
2532

33+
@action
34+
orderFilter(name) {
35+
if (name === 'date') {
36+
if (!this.start_date || !this.end_date) {
37+
this.router.transitionTo('events.view.tickets.orders.list', {
38+
queryParams: {
39+
filter: name
40+
}
41+
});
42+
return;
43+
}
44+
this.router.transitionTo('events.view.tickets.orders.list', {
45+
queryParams: {
46+
start_date : this.start_date,
47+
end_date : this.end_date,
48+
filter : name
49+
}
50+
});
51+
} else {
52+
this.router.transitionTo('events.view.tickets.orders.list', {
53+
queryParams: {
54+
filter: name
55+
}
56+
});
57+
}
58+
}
59+
60+
@action
61+
onChangeStartDate() {
62+
if (!this.end_date) {
63+
return;
64+
}
65+
this.router.transitionTo('events.view.tickets.orders.list', {
66+
queryParams: {
67+
start_date : this.start_date,
68+
end_date : this.end_date,
69+
filter : 'date'
70+
}
71+
});
72+
}
73+
74+
@action
75+
onChangeEndDate() {
76+
if (!this.start_date) {
77+
return;
78+
}
79+
this.router.transitionTo('events.view.tickets.orders.list', {
80+
queryParams: {
81+
start_date : this.start_date,
82+
end_date : this.end_date,
83+
filter : 'date'
84+
}
85+
});
86+
}
87+
2688
requestLoop(exportJobInfo, mode) {
2789
run.later(() => {
2890
this.loader

app/mixins/ember-table-route.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@ export default Mixin.create({
1212
search: {
1313
refreshModel: true
1414
},
15+
filter: {
16+
refreshModel: true
17+
},
18+
start_date: {
19+
refreshModel: true
20+
},
21+
end_date: {
22+
refreshModel: true
23+
},
1524
sort_dir: {
1625
refreshModel: true
1726
},

app/routes/events/view/tickets/attendees/list.js

Lines changed: 44 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Route from '@ember/routing/route';
22
import EmberTableRouteMixin from 'open-event-frontend/mixins/ember-table-route';
3+
import moment from 'moment-timezone';
34

45
export default class extends Route.extend(EmberTableRouteMixin) {
56
titleToken() {
@@ -23,6 +24,7 @@ export default class extends Route.extend(EmberTableRouteMixin) {
2324

2425
async model(params) {
2526
this.set('params', params);
27+
const eventDetails = this.modelFor('events.view');
2628
let filterOptions = [];
2729
if (params.attendees_status === 'checkedIn') {
2830
filterOptions = [
@@ -40,20 +42,52 @@ export default class extends Route.extend(EmberTableRouteMixin) {
4042
val : false
4143
}
4244
];
43-
} else if (params.attendees_status === 'all') {
44-
filterOptions = [];
4545
} else {
46-
filterOptions = [
47-
{
46+
if (params.attendees_status !== 'all') {
47+
filterOptions = [
48+
{
49+
name : 'order',
50+
op : 'has',
51+
val : {
52+
name : 'status',
53+
op : 'eq',
54+
val : params.attendees_status
55+
}
56+
}
57+
];
58+
}
59+
}
60+
if (params.filter) {
61+
if (params.filter === 'discount') {
62+
filterOptions.pushObject({
4863
name : 'order',
4964
op : 'has',
5065
val : {
51-
name : 'status',
52-
op : 'eq',
53-
val : params.attendees_status
66+
name : 'discount_code_id',
67+
op : 'isnot',
68+
val : null
5469
}
55-
}
56-
];
70+
});
71+
} else if (params.filter === 'date' && params.start_date && params.end_date) {
72+
filterOptions.pushObject({
73+
name : 'order',
74+
op : 'has',
75+
val : {
76+
name : 'created-at',
77+
op : 'ge',
78+
val : moment.tz(params.start_date, eventDetails.timezone).toISOString()
79+
}
80+
});
81+
filterOptions.pushObject({
82+
name : 'order',
83+
op : 'has',
84+
val : {
85+
name : 'created-at',
86+
op : 'le',
87+
val : moment.tz(params.end_date, eventDetails.timezone).add(1, 'days').toISOString()
88+
}
89+
});
90+
}
5791
}
5892
filterOptions = this.applySearchFiltersExtend(
5993
filterOptions,
@@ -78,6 +112,6 @@ export default class extends Route.extend(EmberTableRouteMixin) {
78112

79113
queryString = this.applySortFilters(queryString, params);
80114

81-
return this.asArray(this.modelFor('events.view').query('attendees', queryString));
115+
return this.asArray(eventDetails.query('attendees', queryString));
82116
}
83117
}

app/routes/events/view/tickets/orders/list.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Route from '@ember/routing/route';
22
import EmberTableRouteMixin from 'open-event-frontend/mixins/ember-table-route';
3+
import moment from 'moment-timezone';
34

45
export default class extends Route.extend(EmberTableRouteMixin) {
56
titleToken() {
@@ -18,8 +19,33 @@ export default class extends Route.extend(EmberTableRouteMixin) {
1819
}
1920

2021
async model(params) {
22+
const eventDetails = this.modelFor('events.view');
2123
this.set('params', params);
2224
const filterOptions = [];
25+
if (params.filter) {
26+
if (params.filter === 'discount') {
27+
filterOptions.pushObject({
28+
name : 'discount_code_id',
29+
op : 'isnot',
30+
val : null
31+
});
32+
} else if (params.filter === 'date' && params.start_date && params.end_date) {
33+
filterOptions.push({
34+
and: [
35+
{
36+
name : 'created-at',
37+
op : 'ge',
38+
val : moment.tz(params.start_date, eventDetails.timezone).toISOString()
39+
},
40+
{
41+
name : 'created-at',
42+
op : 'le',
43+
val : moment.tz(params.end_date, eventDetails.timezone).add(1, 'days').toISOString()
44+
}
45+
]
46+
});
47+
}
48+
}
2349
if (params.search) {
2450
filterOptions.pushObject({
2551
name : 'user',
@@ -48,6 +74,6 @@ export default class extends Route.extend(EmberTableRouteMixin) {
4874

4975
queryString = this.applySortFilters(queryString, params);
5076

51-
return this.asArray(this.modelFor('events.view').query('orders', queryString));
77+
return this.asArray(eventDetails.query('orders', queryString));
5278
}
5379
}

app/styles/components/ticket-list.scss

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,15 @@
1010
vertical-align: baseline !important;
1111
}
1212
}
13+
14+
.filter-date-mobile-session {
15+
.end-date-session {
16+
.ui.popup.calendar {
17+
inset: 43px !important;
18+
19+
table {
20+
transform: translateX(-62%);
21+
}
22+
}
23+
}
24+
}

app/styles/partials/utils.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,10 @@
258258
vertical-align: bottom;
259259
}
260260

261+
.b-0 {
262+
border: 0 !important;
263+
}
264+
261265
.add-to-calender-join-video {
262266
height: 36px;
263267
}

app/templates/components/widgets/forms/date-picker.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
{{#if this.icon}}
33
<i class="calendar icon"></i>
44
{{/if}}
5-
<Input @type="text" @value={{value}} placeholder={{this.placeholder}} @name={{name}} @focus-out={{action "onChange"}} />
5+
<Input @type="text" @value={{value}} autocomplete="off" placeholder={{this.placeholder}} @name={{name}} @focus-out={{action "onChange"}} />

0 commit comments

Comments
 (0)