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

154 lines
3.9 KiB
JavaScript

import ngModule from '../../module';
import {toJsonDate} from 'core/lib/date';
class Controller {
constructor($scope, $http, $translate, vnApp) {
this.$scope = $scope;
this.$http = $http;
this.$translate = $translate;
this.vnApp = vnApp;
}
$onInit() {
this.data.registerChild(this);
}
set ticket(value) {
this._ticket = value;
if (!value || !value.id) return;
this.onChangeAddress(value.clientFk);
}
get ticket() {
return this._ticket;
}
set clientFk(value) {
this.ticket.clientFk = value;
this.ticket.addressFk = null;
this.onChangeAddress(value);
}
get clientFk() {
if (this.ticket)
return this.ticket.clientFk;
}
set shipped(value) {
this.ticket.shipped = value;
this.onChangeShipped(value);
}
get shipped() {
if (this.ticket)
return this.ticket.shipped;
}
set landed(value) {
this.ticket.landed = value;
this.onChangeLanded(value);
}
get landed() {
if (this.ticket)
return this.ticket.landed;
}
onChangeShipped(value) {
let data = {
shipped: toJsonDate(value),
addressFk: this.ticket.addressFk,
agencyModeFk: this.ticket.agencyModeFk,
warehouseFk: this.ticket.warehouseFk
};
let query = `/api/Tickets/getLanded`;
this.$http.post(query, data).then(res => {
if (res.data && res.data.landed)
this.ticket.landed = res.data.landed;
});
}
onChangeLanded(value) {
let data = {
landed: value,
addressFk: this.ticket.addressFk,
agencyModeFk: this.ticket.agencyModeFk
};
let query = `/api/Tickets/getShipped`;
this.$http.post(query, data).then(res => {
if (res.data && res.data.shipped)
this.ticket.shipped = res.data.shipped;
});
}
onChangeAddress(value) {
let filter = {
include: [
{
relation: 'province',
scope: {
fields: ['name']
}
}
]
};
filter = encodeURIComponent(JSON.stringify(filter));
let query = `/api/Clients/${value}/addresses?filter=${filter}`;
this.$http.get(query).then(res => {
if (res.data)
this.addresses = res.data;
});
}
async onStepChange(state) {
if (this.isFormInvalid())
return this.vnApp.showError(
this.$translate.instant('Some fields are invalid')
);
let query = `/ticket/api/sales/${this.ticket.id}/priceDifference`;
let data = {
landed: toJsonDate(this.ticket.landed),
addressFk: this.ticket.addressFk,
agencyModeFk: this.ticket.agencyModeFk,
warehouseFk: this.ticket.warehouseFk
};
return this.$http.post(query, data).then(res => {
if (res.data)
this.ticket.sale = res.data;
return true;
}, res => {
if (res.data.error.message === 'NO_AGENCY_AVAILABLE')
this.vnApp.showMessage(
this.$translate.instant(`There's no available agency for this landing date`)
);
});
}
isFormInvalid() {
return !this.ticket.clientFk || !this.ticket.addressFk || !this.ticket.agencyModeFk
|| !this.ticket.companyFk || !this.ticket.shipped || !this.ticket.landed;
}
}
Controller.$inject = ['$scope', '$http', '$translate', 'vnApp'];
ngModule.component('vnTicketDataStepOne', {
template: require('./index.html'),
controller: Controller,
bindings: {
ticket: '<'
},
require: {
data: '^vnTicketData'
}
});