salix/modules/ticket/front/basic-data/step-one/index.js

293 lines
7.7 KiB
JavaScript
Raw Normal View History

2018-04-04 11:56:16 +00:00
import ngModule from '../../module';
2020-03-18 07:35:59 +00:00
import Component from 'core/lib/component';
2019-02-05 10:25:47 +00:00
import './style.scss';
2018-04-04 11:56:16 +00:00
2020-03-18 07:35:59 +00:00
class Controller extends Component {
$onInit() {
this.basicData.registerChild(this);
}
get ticket() {
return this._ticket;
}
set ticket(value) {
this._ticket = value;
if (!value || !value.id) return;
2020-03-06 07:38:03 +00:00
this.clientAddressesList(value.clientFk);
}
get clientId() {
2019-10-04 07:28:09 +00:00
return this.ticket && this.ticket.clientFk;
}
set clientId(value) {
2018-07-02 11:14:14 +00:00
this.ticket.clientFk = value;
this.ticket.addressFk = null;
2020-03-06 07:50:55 +00:00
if (!value) return;
2020-03-06 07:38:03 +00:00
this.getClientDefaultAddress(value);
this.clientAddressesList(value);
2018-07-02 11:14:14 +00:00
}
2019-10-04 07:28:09 +00:00
get addressId() {
return this.ticket && this.ticket.addressFk;
}
set addressId(value) {
if (value != this.ticket.addressFk) {
this.ticket.addressFk = value;
this.getShipped({
landed: this.ticket.landed,
addressFk: value,
2019-11-18 11:32:50 +00:00
agencyModeFk: this.ticket.agencyModeFk,
warehouseFk: this.ticket.warehouseFk
2019-10-04 07:28:09 +00:00
});
}
}
2019-10-04 07:28:09 +00:00
get warehouseId() {
return this.ticket && this.ticket.warehouseFk;
2018-08-16 11:12:18 +00:00
}
2019-09-04 06:04:31 +00:00
set warehouseId(value) {
if (value != this.ticket.warehouseFk) {
this.ticket.warehouseFk = value;
2020-10-20 08:19:12 +00:00
this.getShipped({
landed: this.ticket.landed,
addressFk: this.ticket.addressFk,
agencyModeFk: this.ticket.agencyModeFk,
warehouseFk: value
}).then(() => {
if (this.zoneId == null)
this.ticket.agencyModeFk = null;
});
}
}
2018-08-16 11:12:18 +00:00
get shipped() {
2019-10-04 07:28:09 +00:00
return this.ticket && this.ticket.shipped;
2018-08-16 11:12:18 +00:00
}
set shipped(value) {
this.ticket.shipped = value;
2019-09-04 06:04:31 +00:00
this.getLanded({
shipped: value,
addressFk: this.ticket.addressFk,
2019-11-18 11:32:50 +00:00
agencyModeFk: this.ticket.agencyModeFk,
2020-09-23 09:21:25 +00:00
warehouseFk: this.ticket.warehouseFk
2019-09-04 06:04:31 +00:00
});
}
get landed() {
2019-10-04 07:28:09 +00:00
return this.ticket && this.ticket.landed;
}
set landed(value) {
this.ticket.landed = value;
2019-09-04 06:04:31 +00:00
this.getShipped({
landed: value,
addressFk: this.ticket.addressFk,
2019-11-18 11:32:50 +00:00
agencyModeFk: this.ticket.agencyModeFk,
warehouseFk: this.ticket.warehouseFk
2019-09-04 06:04:31 +00:00
});
}
get agencyModeId() {
2019-10-04 07:28:09 +00:00
return this.ticket && this.ticket.agencyModeFk;
}
2019-09-04 06:04:31 +00:00
set agencyModeId(value) {
if (value != this.ticket.agencyModeFk) {
this.ticket.agencyModeFk = value;
2020-09-23 09:21:25 +00:00
if (!value) return;
const agencyMode = this.$.agencyMode.selection;
this.ticket.warehouseFk = agencyMode.warehouseFk;
2019-10-04 07:28:09 +00:00
this.getLanded({
shipped: this.ticket.shipped,
2019-09-04 06:04:31 +00:00
addressFk: this.ticket.addressFk,
2019-11-18 11:32:50 +00:00
agencyModeFk: value,
2020-09-23 09:21:25 +00:00
warehouseFk: this.ticket.warehouseFk
2019-09-04 06:04:31 +00:00
});
2019-08-20 12:18:32 +00:00
}
}
get zoneId() {
2019-10-04 07:28:09 +00:00
return this.ticket && this.ticket.zoneFk;
}
2019-09-04 06:04:31 +00:00
set zoneId(value) {
if (value != this.ticket.zoneFk) {
this.ticket.zoneFk = value;
this.onChangeZone(value);
2019-08-20 12:18:32 +00:00
}
}
/*
* Autocompletes address on client change
*/
2020-03-06 07:38:03 +00:00
clientAddressesList(value) {
let filter = {
include: [
{
relation: 'province',
scope: {
fields: ['name']
}
},
{
relation: 'agencyMode',
scope: {
fields: ['name']
}
}
]
};
filter = encodeURIComponent(JSON.stringify(filter));
let query = `Clients/${value}/addresses?filter=${filter}`;
this.$http.get(query).then(res => {
if (res.data)
this.addresses = res.data;
});
}
2020-03-06 07:38:03 +00:00
getClientDefaultAddress(value) {
let query = `Clients/${value}`;
this.$http.get(query).then(res => {
if (res.data)
2020-09-01 06:33:11 +00:00
this.addressId = res.data.defaultAddressFk;
2020-03-06 07:38:03 +00:00
});
}
/*
* Gets an agency from an specified zone
*/
onChangeZone(zoneId) {
2019-08-20 12:18:32 +00:00
this.ticket.agencyModeFk = null;
const query = `Zones/${zoneId}`;
this.$http.get(query).then(res => {
2019-11-12 07:51:50 +00:00
this.ticket.agencyModeFk = res.data.agencyModeFk;
});
}
async onStepChange() {
2019-01-24 14:41:48 +00:00
if (this.isFormInvalid()) {
return this.vnApp.showError(
this.$t('Some fields are invalid')
);
2019-01-24 14:41:48 +00:00
}
2020-10-20 08:19:12 +00:00
const query = `tickets/${this.ticket.id}/priceDifference`;
const params = {
landed: this.ticket.landed,
addressId: this.ticket.addressFk,
agencyModeId: this.ticket.agencyModeFk,
zoneId: this.ticket.zoneFk,
warehouseId: this.ticket.warehouseFk
};
return this.$http.post(query, params).then(res => {
2018-05-22 06:14:16 +00:00
if (res.data)
this.ticket.sale = res.data;
2018-05-22 06:14:16 +00:00
return true;
}, err => {
this.vnApp.showError(
this.$t(err.data.error.message)
);
});
}
/*
* Returns a landing date
*/
getLanded(params) {
2020-10-20 08:19:12 +00:00
const validParams = this.shipped && this.addressId
&& this.agencyModeId && this.warehouseId;
if (!validParams) return this.$q.resolve();
2019-09-04 06:04:31 +00:00
this.ticket.zoneFk = null;
const query = `Agencies/getLanded`;
2020-10-20 08:19:12 +00:00
return this.$http.get(query, {params}).then(res => {
2019-09-04 06:04:31 +00:00
if (res.data) {
this.ticket.zoneFk = res.data.zoneFk;
2019-10-04 07:28:09 +00:00
this.ticket.landed = res.data.landed;
this.ticket.shipped = params.shipped;
2019-09-04 06:04:31 +00:00
} else {
return this.vnApp.showError(
this.$t(`No delivery zone available for this landing date`)
2019-09-04 06:04:31 +00:00
);
}
});
}
/*
* Returns a shipment date
*/
getShipped(params) {
2020-10-20 08:19:12 +00:00
const validParams = this.landed && this.addressId
&& this.agencyModeId && this.warehouseId;
if (!validParams) return this.$q.resolve();
2019-09-04 06:04:31 +00:00
this.ticket.zoneFk = null;
const query = `Agencies/getShipped`;
2020-10-20 08:19:12 +00:00
return this.$http.get(query, {params}).then(res => {
2019-09-04 06:04:31 +00:00
if (res.data) {
this.ticket.zoneFk = res.data.zoneFk;
2019-10-04 07:28:09 +00:00
this.ticket.landed = params.landed;
this.ticket.shipped = res.data.shipped;
2019-09-04 06:04:31 +00:00
} else {
return this.vnApp.showError(
this.$t(`No delivery zone available for this landing date`)
2019-09-04 06:04:31 +00:00
);
}
});
}
isFormInvalid() {
2018-05-22 06:14:16 +00:00
return !this.ticket.clientFk || !this.ticket.addressFk || !this.ticket.agencyModeFk
|| !this.ticket.companyFk || !this.ticket.shipped || !this.ticket.landed
|| !this.ticket.zoneFk;
2018-04-04 11:56:16 +00:00
}
2020-09-19 11:02:00 +00:00
zoneWhere() {
2020-09-22 05:38:20 +00:00
if (this.ticket.agencyModeFk) {
return {
shipped: this.ticket.shipped,
addressFk: this.ticket.addressFk,
agencyModeFk: this.ticket.agencyModeFk,
warehouseFk: this.ticket.warehouseFk
};
}
2020-09-19 11:02:00 +00:00
return {};
}
2020-09-23 09:21:25 +00:00
agencyModeWhere() {
if (this.warehouseId) {
return {
warehouseFk: this.warehouseId
};
}
return {};
}
2018-04-04 11:56:16 +00:00
}
ngModule.vnComponent('vnTicketBasicDataStepOne', {
template: require('./index.html'),
controller: Controller,
2018-04-04 11:56:16 +00:00
bindings: {
ticket: '<'
},
require: {
basicData: '^vnTicketBasicData'
}
2018-04-04 11:56:16 +00:00
});