207 lines
5.8 KiB
JavaScript
207 lines
5.8 KiB
JavaScript
import ngModule from '../module';
|
|
import Section from 'salix/components/section';
|
|
import './style.scss';
|
|
|
|
class Controller extends Section {
|
|
get route() {
|
|
return this._route;
|
|
}
|
|
|
|
set route(value) {
|
|
this._route = value;
|
|
if (value)
|
|
this.buildPossibleTicketsFilter();
|
|
}
|
|
|
|
get isChecked() {
|
|
if (this.tickets) {
|
|
for (let instance of this.tickets)
|
|
if (instance.checked) return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
buildPossibleTicketsFilter() {
|
|
let minDate = new Date(this.route.finished);
|
|
minDate.setHours(0, 0, 0, 0);
|
|
|
|
let maxDate = new Date(this.route.finished);
|
|
maxDate.setHours(23, 59, 59, 59);
|
|
|
|
this.possibleTicketsFilter = {
|
|
where: {
|
|
zoneFk: this.route.zoneFk,
|
|
routeFk: null,
|
|
landed: {between: [minDate, maxDate]},
|
|
},
|
|
include: [
|
|
{
|
|
relation: 'warehouse',
|
|
scope: {
|
|
fields: ['name']
|
|
},
|
|
}, {
|
|
relation: 'address'
|
|
}
|
|
]
|
|
};
|
|
}
|
|
|
|
getHighestPriority() {
|
|
let highestPriority = Math.max(...this.$.model.data.map(tag => {
|
|
return tag.priority;
|
|
}));
|
|
return highestPriority + 1;
|
|
}
|
|
|
|
setPriority(id, priority) {
|
|
let params = {priority: priority};
|
|
let query = `Tickets/${id}/`;
|
|
this.$http.patch(query, params).then(() => {
|
|
this.vnApp.showSuccess(this.$translate.instant('Data saved!'));
|
|
this.$.model.refresh();
|
|
});
|
|
}
|
|
|
|
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() {
|
|
let query = `Routes/${this.route.vehicleFk}/getDeliveryPoint`;
|
|
let deliveryPointAddress;
|
|
let addresses;
|
|
|
|
this.$http.get(query).then(response => {
|
|
deliveryPointAddress = response.data;
|
|
}).then(() => {
|
|
addresses = deliveryPointAddress;
|
|
let lines = this.getSelectedItems(this.tickets);
|
|
|
|
let url = 'http://gps.buscalia.com/usuario/localizar.aspx?bmi=true&addr=';
|
|
lines.forEach(line => {
|
|
addresses = addresses + '+to:' + line.address.postalCode + ' ' + line.address.city + ' ' + line.address.street;
|
|
});
|
|
|
|
window.open(url + addresses, '_blank');
|
|
});
|
|
}
|
|
|
|
showDeleteConfirm(id) {
|
|
this.selectedTicket = id;
|
|
this.$.confirm.show();
|
|
}
|
|
|
|
removeTicketFromRoute(response) {
|
|
if (response === 'accept') {
|
|
let params = {routeFk: null};
|
|
let query = `Tickets/${this.selectedTicket}/`;
|
|
this.$http.patch(query, params).then(() => {
|
|
this.vnApp.showSuccess(this.$translate.instant('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.$translate.instant('Order changed'));
|
|
this.$.model.refresh();
|
|
});
|
|
}
|
|
|
|
showTicketDescriptor(event, ticketFk) {
|
|
this.$.ticketDescriptor.ticketFk = ticketFk;
|
|
this.$.ticketDescriptor.parent = event.target;
|
|
this.$.ticketDescriptor.show();
|
|
event.preventDefault();
|
|
}
|
|
|
|
showClientDescriptor(event, clientFk) {
|
|
this.$.clientDescriptor.clientFk = clientFk;
|
|
this.$.clientDescriptor.parent = event.target;
|
|
this.$.clientDescriptor.show();
|
|
event.preventDefault();
|
|
}
|
|
|
|
openPossibleTicketsDialog() {
|
|
this.$.possibleTicketsModel.refresh();
|
|
this.$.possibleTicketsDialog.show();
|
|
}
|
|
|
|
setTicketsRoute(response) {
|
|
if (response === 'accept') {
|
|
let tickets = this.getSelectedItems(this.possibleTickets);
|
|
|
|
for (let i = 0; i < tickets.length; i++) {
|
|
delete tickets[i].checked;
|
|
tickets[i].routeFk = this.route.id;
|
|
}
|
|
|
|
return this.$.possibleTicketsModel.save().then(() => {
|
|
this.$.model.data = this.$.model.data.concat(tickets);
|
|
});
|
|
}
|
|
return Promise.resolve();
|
|
}
|
|
|
|
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.$translate.instant('Ticket not found'));
|
|
}
|
|
|
|
if (!isNaN(ticketId))
|
|
this.insert(ticketId);
|
|
}
|
|
|
|
insert(id) {
|
|
const params = {routeFk: this.route.id};
|
|
this.$http.patch(`Tickets/${id}`, params).then(() => {
|
|
this.vnApp.showSuccess(this.$translate.instant('Data saved!'));
|
|
this.$.model.refresh();
|
|
this.card.reload();
|
|
}).catch(error => {
|
|
if (error.status == 404)
|
|
return this.vnApp.showError(this.$translate.instant('Ticket not found'));
|
|
throw error;
|
|
});
|
|
}
|
|
}
|
|
|
|
ngModule.component('vnRouteTickets', {
|
|
template: require('./index.html'),
|
|
controller: Controller,
|
|
require: {
|
|
card: '^vnRouteCard'
|
|
},
|
|
bindings: {
|
|
route: '<'
|
|
}
|
|
});
|