188 lines
5.5 KiB
JavaScript
188 lines
5.5 KiB
JavaScript
import ngModule from '../module';
|
|
import Section from 'salix/components/section';
|
|
import UserError from 'core/lib/user-error';
|
|
|
|
class Controller extends Section {
|
|
constructor($element, $, vnFile) {
|
|
super($element, $, vnFile);
|
|
this.dms = {
|
|
files: [],
|
|
hasFile: false,
|
|
hasFileAttached: false
|
|
};
|
|
this.vnFile = vnFile;
|
|
this.getAllowedContentTypes();
|
|
this._editDownloadDisabled = false;
|
|
}
|
|
|
|
get contentTypesInfo() {
|
|
return this.$t('ContentTypesInfo', {
|
|
allowedContentTypes: this.allowedContentTypes
|
|
});
|
|
}
|
|
|
|
get editDownloadDisabled() {
|
|
return this._editDownloadDisabled;
|
|
}
|
|
|
|
async checkFileExists(dmsId) {
|
|
if (!dmsId) return;
|
|
let filter = {
|
|
fields: ['id']
|
|
};
|
|
await this.$http.get(`Dms/${dmsId}`, {filter})
|
|
.then(() => this._editDownloadDisabled = false)
|
|
.catch(() => this._editDownloadDisabled = true);
|
|
}
|
|
|
|
async getFile(dmsId) {
|
|
const path = `Dms/${dmsId}`;
|
|
await this.$http.get(path).then(res => {
|
|
const dms = res.data && res.data;
|
|
this.dms = {
|
|
dmsId: dms.id,
|
|
reference: dms.reference,
|
|
warehouseId: dms.warehouseFk,
|
|
companyId: dms.companyFk,
|
|
dmsTypeId: dms.dmsTypeFk,
|
|
description: dms.description,
|
|
hasFile: dms.hasFile,
|
|
hasFileAttached: false,
|
|
files: []
|
|
};
|
|
});
|
|
}
|
|
|
|
getAllowedContentTypes() {
|
|
this.$http.get('DmsContainers/allowedContentTypes').then(res => {
|
|
if (res.data.length > 0) {
|
|
const contentTypes = res.data.join(', ');
|
|
this.allowedContentTypes = contentTypes;
|
|
}
|
|
});
|
|
}
|
|
|
|
openEditDialog(dmsId) {
|
|
this.getFile(dmsId).then(() => this.$.dmsEditDialog.show());
|
|
}
|
|
|
|
openCreateDialog() {
|
|
const params = {filter: {
|
|
where: {code: 'invoiceIn'}
|
|
}};
|
|
this.$http.get('DmsTypes/findOne', {params}).then(res => {
|
|
this.dms = {
|
|
reference: this.invoiceIn.supplierRef,
|
|
warehouseId: this.vnConfig.warehouseFk,
|
|
companyId: this.vnConfig.companyFk,
|
|
dmsTypeId: res.data.id,
|
|
description: this.invoiceIn.supplier.name,
|
|
hasFile: true,
|
|
hasFileAttached: true,
|
|
files: null
|
|
};
|
|
this.$.dmsCreateDialog.show();
|
|
});
|
|
}
|
|
|
|
downloadFile(dmsId) {
|
|
this.vnFile.download(`api/dms/${dmsId}/downloadFile`);
|
|
}
|
|
|
|
onFileChange(files) {
|
|
let hasFileAttached = false;
|
|
if (files.length > 0)
|
|
hasFileAttached = true;
|
|
|
|
this.$.$applyAsync(() => {
|
|
this.dms.hasFileAttached = hasFileAttached;
|
|
});
|
|
}
|
|
|
|
onEdit() {
|
|
if (!this.dms.companyId)
|
|
throw new UserError(`The company can't be empty`);
|
|
if (!this.dms.warehouseId)
|
|
throw new UserError(`The warehouse can't be empty`);
|
|
if (!this.dms.dmsTypeId)
|
|
throw new UserError(`The DMS Type can't be empty`);
|
|
if (!this.dms.description)
|
|
throw new UserError(`The description can't be empty`);
|
|
|
|
const query = `dms/${this.dms.dmsId}/updateFile`;
|
|
const options = {
|
|
method: 'POST',
|
|
url: query,
|
|
params: this.dms,
|
|
headers: {
|
|
'Content-Type': undefined
|
|
},
|
|
transformRequest: files => {
|
|
const formData = new FormData();
|
|
|
|
for (let i = 0; i < files.length; i++)
|
|
formData.append(files[i].name, files[i]);
|
|
|
|
return formData;
|
|
},
|
|
data: this.dms.files
|
|
};
|
|
|
|
this.$http(options).then(res => {
|
|
if (res) {
|
|
this.vnApp.showSuccess(this.$t('Data saved!'));
|
|
if (res.data.length > 0) this.invoiceIn.dmsFk = res.data[0].id;
|
|
}
|
|
});
|
|
}
|
|
|
|
onCreate() {
|
|
if (!this.dms.companyId)
|
|
throw new UserError(`The company can't be empty`);
|
|
if (!this.dms.warehouseId)
|
|
throw new UserError(`The warehouse can't be empty`);
|
|
if (!this.dms.dmsTypeId)
|
|
throw new UserError(`The DMS Type can't be empty`);
|
|
if (!this.dms.description)
|
|
throw new UserError(`The description can't be empty`);
|
|
if (!this.dms.files)
|
|
throw new UserError(`The files can't be empty`);
|
|
|
|
const query = `Dms/uploadFile`;
|
|
const options = {
|
|
method: 'POST',
|
|
url: query,
|
|
params: this.dms,
|
|
headers: {
|
|
'Content-Type': undefined
|
|
},
|
|
transformRequest: files => {
|
|
const formData = new FormData();
|
|
|
|
for (let i = 0; i < files.length; i++)
|
|
formData.append(files[i].name, files[i]);
|
|
|
|
return formData;
|
|
},
|
|
data: this.dms.files
|
|
};
|
|
|
|
this.$http(options).then(res => {
|
|
if (res) {
|
|
this.vnApp.showSuccess(this.$t('Data saved!'));
|
|
if (res.data.length > 0) this.invoiceIn.dmsFk = res.data[0].id;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
Controller.$inject = ['$element', '$scope', 'vnFile'];
|
|
|
|
ngModule.vnComponent('vnInvoiceInBasicData', {
|
|
template: require('./index.html'),
|
|
controller: Controller,
|
|
bindings: {
|
|
invoiceIn: '<'
|
|
}
|
|
});
|