salix/modules/invoiceOut/front/descriptor/index.js

107 lines
3.1 KiB
JavaScript

import ngModule from '../module';
class Controller {
constructor($scope, vnToken, vnApp, $state, $translate, $http, aclService) {
this.$scope = $scope;
this.accessToken = vnToken.token;
this.vnApp = vnApp;
this.$state = $state;
this.$translate = $translate;
this.$http = $http;
this.aclService = aclService;
this.moreOptions = [
{callback: this.showInvoiceOutPdf, name: 'Show invoice PDF'},
{callback: this.showDeleteInvoiceOutDialog, name: 'Delete Invoice', acl: 'invoicing'},
{callback: this.showBookInvoiceOutDialog, name: 'Book invoice', acl: 'invoicing'}
];
}
onMoreOpen() {
let options = this.moreOptions.filter(option => {
const hasAclProperty = Object.hasOwnProperty.call(option, 'acl');
return !hasAclProperty || (hasAclProperty && this.aclService.hasAny([option.acl]));
});
this.$scope.moreButton.data = options;
}
onMoreChange(callback) {
callback.call(this);
}
set invoiceOut(value) {
this._invoiceOut = value;
if (value) {
this._quicklinks = {
btnOne: {
icon: 'icon-person',
state: `client.card.summary({id: ${value.clientFk}})`,
tooltip: 'Client card'
},
btnTwo: {
icon: 'icon-ticket',
state: `ticket.index({q: '{"refFk": "${value.ref}"}'})`,
tooltip: 'Invoice ticket list'
}
};
}
}
get invoiceOut() {
return this._invoiceOut;
}
showInvoiceOutPdf() {
let url = `InvoiceOuts/${this.invoiceOut.id}/download?access_token=${this.accessToken}`;
window.open(url, '_blank');
}
showDeleteInvoiceOutDialog() {
this.$scope.deleteConfirmation.show();
}
showBookInvoiceOutDialog() {
this.$scope.bookConfirmation.show();
}
deleteInvoiceOut(response) {
if (response === 'accept') {
const query = `InvoiceOuts/${this.invoiceOut.id}/delete`;
this.$http.post(query).then(() => {
this.vnApp.showSuccess(this.$translate.instant('InvoiceOut deleted'));
this.$state.go('invoiceOut.index');
});
}
}
bookInvoiceOut(response) {
if (response === 'accept') {
const query = `InvoiceOuts/${this.invoiceOut.ref}/book`;
this.$http.post(query).then(() => {
this.vnApp.showSuccess(this.$translate.instant('InvoiceOut booked'));
this.$state.reload();
});
}
}
set quicklinks(value = {}) {
this._quicklinks = Object.assign(value, this._quicklinks);
}
get quicklinks() {
return this._quicklinks;
}
}
Controller.$inject = ['$scope', 'vnToken', 'vnApp', '$state', '$translate', '$http', 'aclService'];
ngModule.component('vnInvoiceOutDescriptor', {
template: require('./index.html'),
bindings: {
invoiceOut: '<',
quicklinks: '<'
},
controller: Controller
});