import ngModule from '../module'; import Section from 'salix/components/section'; import './style.scss'; import UserError from 'core/lib/user-error'; class Controller extends Section { get isChecked() { if (this.tickets) { for (let instance of this.tickets) if (instance.checked) return true; } return false; } getHighestPriority() { let highestPriority = Math.max(...this.$.model.data.map(tag => { return tag.priority; })); return highestPriority + 1; } setHighestPriority(ticket) { const highestPriority = this.getHighestPriority(); if (highestPriority - 1 != ticket.priority) { const params = {priority: highestPriority}; const query = `Tickets/${ticket.id}/`; this.$http.patch(query, params).then(res => { ticket.priority = res.data.priority; this.vnApp.showSuccess(this.$t('Data saved!')); }); } } setPriority(id, priority) { let params = {priority: priority}; let query = `Tickets/${id}/`; this.$http.patch(query, params).then(() => { this.vnApp.showSuccess(this.$t('Data saved!')); }); } deletePriority() { const lines = this.getSelectedItems(this.tickets); for (const line of lines) { this.$http.patch(`Tickets/${line.id}/`, {priority: null}).then(() => { this.vnApp.showSuccess(this.$t('Data saved!')); this.$.model.refresh(); }); } } setOrderedPriority(lines) { let priority = 1; for (const line of lines) { this.$http.patch(`Tickets/${line.id}/`, {priority: priority}).then(() => { this.vnApp.showSuccess(this.$t('Data saved!')); this.$.model.refresh(); }); priority++; } } getSelectedItems(items) { const selectedItems = []; if (items) { for (let i = 0; i < items.length; i++) { if (items[i].checked) selectedItems.push(items[i]); } } return selectedItems; } goToBuscaman(ticket) { if (!this.route.vehicleFk) throw new UserError(`The route doesn't have a vehicle`); this.$http.get(`Routes/${this.route.vehicleFk}/getDeliveryPoint`).then(res => { if (!res.data) throw new UserError(`The route's vehicle doesn't have a delivery point`); let addresses = res.data; const lines = ticket ? [ticket] : this.getSelectedItems(this.tickets); lines.forEach((line, index) => { const previousLine = lines[index - 1] ? lines[index - 1].street : null; if (previousLine != line.street) addresses = addresses + '+to:' + line.postalCode + ' ' + line.city + ' ' + line.street; }); const url = 'http://gps.buscalia.com/usuario/localizar.aspx?bmi=true&addr='; window.open(url + encodeURI(addresses), '_blank'); }); } showDeleteConfirm(id) { this.selectedTicket = id; this.$.confirm.show(); } removeTicketFromRoute($index) { let params = {routeFk: null}; let query = `Tickets/${this.selectedTicket}/`; this.$http.patch(query, params).then(() => { this.$.model.remove($index); this.vnApp.showSuccess(this.$t('Ticket removed from route')); this.updateVolume(); }); } updateVolume() { let url = `Routes/${this.$params.id}/updateVolume`; this.$http.post(url).then(() => { this.card.reload(); this.$.model.refresh(); }); } guessPriority() { let query = `Routes/${this.$params.id}/guessPriority/`; this.$http.get(query).then(() => { this.vnApp.showSuccess(this.$t('Order changed')); this.$.model.refresh(); }); } onDrop($event) { const ticketId = $event.dataTransfer.getData('Text'); if (isNaN(ticketId)) { const regexp = new RegExp(/\/ticket\/([0-9]+)\//i); const matches = ticketId.match(regexp); if (matches && matches.length) this.insert(matches[1]); else this.vnApp.showError(this.$t('Ticket not found')); } if (!isNaN(ticketId)) this.insert(ticketId); } insert(ticketId) { ticketId = parseInt(ticketId); const query = `Routes/${this.route.id}/insertTicket`; return this.$http.patch(query, {ticketId}).then(() => { this.vnApp.showSuccess(this.$t('Data saved!')); this.updateVolume(); }).catch(error => { if (error.status == 404) return this.vnApp.showError(this.$t('Ticket not found')); throw error; }); } async sendSms() { try { const clientsFk = []; const clientsName = []; const clients = []; const selectedTickets = this.getSelectedItems(this.$.$ctrl.tickets); for (let ticket of selectedTickets) { clientsFk.push(ticket.clientFk); let userContact = await this.$http.get(`Clients/${ticket.clientFk}`); clientsName.push(userContact.data.name); clients.push(userContact.data.phone); } const destinationFk = String(clientsFk); const destination = String(clients); this.newSMS = Object.assign({ destinationFk: destinationFk, destination: destination }); this.$.sms.open(); return true; } catch (e) { this.vnApp.showError(this.$t(e.message)); return false; } } } ngModule.vnComponent('vnRouteTickets', { template: require('./index.html'), controller: Controller, require: { card: '^vnRouteCard' }, bindings: { route: '<' } });