67 lines
1.9 KiB
JavaScript
Executable File
67 lines
1.9 KiB
JavaScript
Executable File
const Component = require(`vn-print/core/component`);
|
|
const emailBody = new Component('email-body');
|
|
|
|
module.exports = {
|
|
name: 'osticket-report',
|
|
async serverPrefetch() {
|
|
const tickets = await this.fetchTickets();
|
|
this.resolvedTickets = tickets.length;
|
|
|
|
const technicians = [];
|
|
for (let ticket of tickets) {
|
|
const technicianName = ticket.assigned;
|
|
|
|
let technician = technicians.find(technician => {
|
|
return technician.name == technicianName;
|
|
});
|
|
|
|
if (!technician) {
|
|
technician = {
|
|
name: technicianName,
|
|
tickets: []
|
|
};
|
|
technicians.push(technician);
|
|
}
|
|
|
|
technician.tickets.push(ticket);
|
|
}
|
|
|
|
this.technicians = technicians.sort((acumulator, value) => {
|
|
return value.tickets.length - acumulator.tickets.length;
|
|
});
|
|
|
|
if (!this.technicians)
|
|
throw new Error('Something went wrong');
|
|
},
|
|
computed: {
|
|
dated: function() {
|
|
const filters = this.$options.filters;
|
|
|
|
return filters.date(Date.vnNew(), '%d-%m-%Y');
|
|
},
|
|
startedTime: function() {
|
|
return new Date(this.started).getTime();
|
|
},
|
|
endedTime: function() {
|
|
return new Date(this.ended).getTime();
|
|
}
|
|
},
|
|
methods: {
|
|
fetchDateRange() {
|
|
return this.findOneFromDef('dateRange');
|
|
},
|
|
async fetchTickets() {
|
|
const {started, ended} = await this.fetchDateRange();
|
|
this.started = started;
|
|
this.ended = ended;
|
|
|
|
const connection = await this.getConnection('osticket');
|
|
return this.rawSqlFromDef('tickets', [started, ended], connection);
|
|
}
|
|
},
|
|
components: {
|
|
'email-body': emailBody.build(),
|
|
},
|
|
props: {}
|
|
};
|