salix/modules/ticket/front/advance/index.js

239 lines
7.5 KiB
JavaScript
Raw Normal View History

2022-11-14 13:30:35 +00:00
import ngModule from '../module';
import Section from 'salix/components/section';
2023-01-31 13:20:08 +00:00
import './style.scss';
2022-11-14 13:30:35 +00:00
export default class Controller extends Section {
constructor($element, $) {
super($element, $);
this.$checkAll = false;
this.smartTableOptions = {
activeButtons: {
search: true,
},
columns: [
{
field: 'state',
searchable: false
}, {
2022-12-20 10:36:58 +00:00
field: 'futureState',
2022-11-14 13:30:35 +00:00
searchable: false
}, {
2022-11-15 14:30:00 +00:00
field: 'totalWithVat',
searchable: false
}, {
2022-12-20 10:36:58 +00:00
field: 'futureTotalWithVat',
2022-11-15 14:30:00 +00:00
searchable: false
}, {
2022-12-20 10:36:37 +00:00
field: 'shipped',
searchable: false
}, {
2022-12-20 10:36:58 +00:00
field: 'futureShipped',
2022-11-16 09:57:15 +00:00
searchable: false
}, {
2022-11-14 13:30:35 +00:00
field: 'ipt',
autocomplete: {
url: 'ItemPackingTypes',
where: `{isActive: true}`,
2022-11-14 13:30:35 +00:00
showField: 'description',
2022-12-20 10:36:37 +00:00
valueField: 'code'
2022-11-14 13:30:35 +00:00
}
}, {
2022-12-20 10:36:58 +00:00
field: 'futureIpt',
2022-11-14 13:30:35 +00:00
autocomplete: {
url: 'ItemPackingTypes',
where: `{isActive: true}`,
2022-11-14 13:30:35 +00:00
showField: 'description',
2022-12-20 10:36:37 +00:00
valueField: 'code'
2022-11-14 13:30:35 +00:00
}
}, {
field: 'futureZoneFk',
autocomplete: {
url: 'Zones',
}
2022-11-14 13:30:35 +00:00
},
]
};
2022-12-20 10:36:58 +00:00
}
$postLink() {
2022-11-16 09:57:15 +00:00
this.setDefaultFilter();
}
setDefaultFilter() {
2023-01-16 14:18:24 +00:00
let today = Date.vnNew();
2022-12-20 10:36:37 +00:00
const tomorrow = new Date(today);
2022-11-16 09:57:15 +00:00
tomorrow.setDate(tomorrow.getDate() + 1);
2023-02-08 12:47:35 +00:00
this.$http.get(`UserConfigs/getUserConfig`)
.then(res => {
this.filterParams = {
dateFuture: tomorrow,
dateToAdvance: today,
warehouseFk: res.data.warehouseFk
};
this.$.model.addFilter({}, this.filterParams);
});
2022-11-14 13:30:35 +00:00
}
get checked() {
const tickets = this.$.model.data || [];
const checkedLines = [];
for (let ticket of tickets) {
if (ticket.checked)
checkedLines.push(ticket);
}
return checkedLines;
}
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];
}
totalPriceColor(totalWithVat) {
2023-02-10 07:46:54 +00:00
return this.isLessThan50(totalWithVat) ? 'warning' : '';
}
totalPriceTitle(totalWithVat) {
return this.isLessThan50(totalWithVat) ? 'Less than 50€' : '';
}
isLessThan50(totalWithVat) {
return (parseInt(totalWithVat) > 0 && parseInt(totalWithVat) < 50);
2022-11-14 13:30:35 +00:00
}
get confirmationMessage() {
if (!this.$.model) return 0;
return this.$t(`Advance confirmation`, {
checked: this.checked.length
});
}
2023-01-31 13:20:08 +00:00
agencies(futureAgency, agency) {
return this.$t(`Origin agency`, {agency: futureAgency}) +
2023-02-10 07:46:54 +00:00
'\n' + this.$t(`Destination agency`, {agency: agency});
2023-01-31 13:20:08 +00:00
}
2022-11-14 13:30:35 +00:00
moveTicketsAdvance() {
2022-12-20 10:36:58 +00:00
let ticketsToMove = [];
// falta ver que hacer con los nulls
for (ticket of this.checked) {
2022-12-20 10:36:58 +00:00
ticketsToMove.push({
originId: ticket.futureId,
destinationId: ticket.id,
originShipped: ticket.futureShipped,
destinationShipped: ticket.shipped,
workerFk: ticket.workerFk
});
}
2022-12-20 10:36:58 +00:00
const params = {tickets: ticketsToMove};
2022-11-14 13:30:35 +00:00
return this.$http.post('Tickets/merge', params)
.then(() => {
this.$.model.refresh();
this.vnApp.showSuccess(this.$t('Success'));
});
}
async getLanded(params) {
const query = `Agencies/getLanded`;
return this.$http.get(query, {params}).then(res => {
if (res.data)
return res.data;
else {
return this.vnApp.showError(
this.$t(`No delivery zone available for this landing date`)
);
}
});
}
async splitTickets() {
this.progress = [];
this.splitErrors = [];
this.$.splitTickets.hide();
this.$.splitProgress.enable = true;
this.$.splitProgress.cancel = false;
this.$.splitProgress.show();
for (const ticket of this.checked) {
if (this.$.splitProgress.cancel) break;
try {
if (!ticket.landed) {
const newLanded = await this.getLanded({
shipped: this.$.model.userParams.dateToAdvance,
addressFk: ticket.addressFk,
agencyModeFk: ticket.agencyModeFk,
warehouseFk: ticket.warehouseFk
});
ticket.landed = newLanded?.landed;
ticket.zoneFk = newLanded?.zoneFk;
}
const query = `tickets/${ticket.futureId}/componentUpdate`;
const params = {
clientFk: ticket.clientFk,
nickname: ticket.nickname,
agencyModeFk: ticket.agencyModeFk,
addressFk: ticket.addressFk,
zoneFk: ticket.zoneFk,
warehouseFk: ticket.warehouseFk,
companyFk: ticket.companyFk,
shipped: this.$.model.userParams.dateToAdvance,
landed: ticket.landed,
isDeleted: false,
isWithoutNegatives: true,
withWarningAccept: false,
newTicket: ticket.id ?? undefined,
keepPrice: true
};
this.$http.post(query, params)
.catch(e => {
this.splitErrors.push({id: ticket.futureId, reason: e.message});
})
.finally(() => {
this.progress.push(ticket.futureId);
if (this.progress.length == this.checked.length) {
this.$.splitProgress.enable = false;
this.$.model.refresh();
this.vnApp.showSuccess(this.$t('Success'));
this.$checkAll = null;
}
});
} catch (e) {}
}
}
2022-11-14 13:30:35 +00:00
exprBuilder(param, value) {
switch (param) {
2022-11-29 09:29:18 +00:00
case 'id':
2022-12-20 10:36:58 +00:00
case 'futureId':
2022-11-29 09:29:18 +00:00
case 'liters':
case 'futureLiters':
case 'lines':
case 'futureLines':
case 'totalWithVat':
case 'futureTotalWithVat':
case 'futureZone':
case 'notMovableLines':
case 'futureZoneFk':
return {[param]: value};
2022-11-29 09:29:18 +00:00
case 'ipt':
return {'ipt': {like: `%${value}%`}};
2022-12-20 10:36:58 +00:00
case 'futureIpt':
return {'futureIpt': {like: `%${value}%`}};
2022-11-14 13:30:35 +00:00
}
}
}
Controller.$inject = ['$element', '$scope'];
ngModule.vnComponent('vnTicketAdvance', {
template: require('./index.html'),
controller: Controller
});