import ngModule from '../../module'; import Section from 'salix/components/section'; import './style.scss'; export default class Controller extends Section { constructor($element, $) { super($element, $); this.filterParams = this.fetchParams(); this.smartTableOptions = { activeButtons: { search: true, shownColumns: true, }, columns: [ { field: 'totalProblems', searchable: false }, { field: 'salesPersonFk', autocomplete: { url: 'Workers/activeWithInheritedRole', where: `{role: 'salesPerson'}`, searchFunction: '{firstName: $search}', showField: 'nickname', valueField: 'id', } }, { field: 'provinceFk', autocomplete: { url: 'Provinces', } }, { field: 'stateFk', autocomplete: { url: 'States', } }, { field: 'zoneFk', autocomplete: { url: 'Zones', } }, { field: 'warehouseFk', autocomplete: { url: 'Warehouses', } }, { field: 'shipped', searchable: false }, { field: 'theoreticalHour', searchable: false }, { field: 'preparationHour', searchable: false } ] }; } $onInit() { if (!this.$params.q) { this.$.$applyAsync( () => this.$.model.applyFilter(null, this.filterParams)); } } fetchParams($params = {}) { const excludedParams = [ 'search', 'clientFk', 'orderFk', 'refFk', 'scopeDays' ]; const hasExcludedParams = excludedParams.some(param => { return $params && $params[param]; }); const hasParams = Object.entries($params).length; if (!hasParams || !hasExcludedParams) $params.scopeDays = 1; if (typeof $params.scopeDays === 'number') { const from = new Date(); from.setHours(0, 0, 0, 0); const to = new Date(from.getTime()); to.setDate(to.getDate() + $params.scopeDays); to.setHours(23, 59, 59, 999); Object.assign($params, {from, to}); } return $params; } compareDate(date) { let today = new Date(); today.setHours(0, 0, 0, 0); let timeTicket = new Date(date); timeTicket.setHours(0, 0, 0, 0); let comparation = today - timeTicket; if (comparation == 0) return 'warning'; if (comparation < 0) return 'success'; } stateColor(ticket) { if (ticket.alertLevelCode === 'OK') return 'success'; else if (ticket.alertLevelCode === 'FREE') return 'notice'; else if (ticket.alertLevel === 1) return 'warning'; else if (ticket.alertLevel === 0) return 'alert'; } totalPriceColor(ticket) { const total = parseInt(ticket.totalWithVat); if (total > 0 && total < 50) return 'warning'; } exprBuilder(param, value) { switch (param) { case 'stateFk': return {'ts.stateFk': value}; case 'salesPersonFk': return {'c.salesPersonFk': value}; case 'provinceFk': return {'a.provinceFk': value}; case 'theoreticalHour': return {'z.hour': value}; case 'practicalHour': return {'zed.etc': value}; case 'shipped': return {'t.shipped': { between: this.dateRange(value)} }; case 'nickname': return {[`t.nickname`]: {like: `%${value}%`}}; case 'zoneFk': case 'totalWithVat': return {[`t.${param}`]: value}; } } dateRange(value) { const minHour = new Date(value); minHour.setHours(0, 0, 0, 0); const maxHour = new Date(value); maxHour.setHours(23, 59, 59, 59); return [minHour, maxHour]; } preview(ticket) { this.selectedTicket = ticket; this.$.summary.show(); } autoRefresh(value) { if (value) this.refreshTimer = setInterval(() => this.$.model.refresh(), 120000); else { clearInterval(this.refreshTimer); this.refreshTimer = null; } } } ngModule.vnComponent('vnMonitorSalesTickets', { template: require('./index.html'), controller: Controller });