salix/back/methods/docuware/upload.js

424 lines
15 KiB
JavaScript

const UserError = require('vn-loopback/util/user-error');
const axios = require('axios');
module.exports = Self => {
Self.remoteMethodCtx('upload', {
description: 'Upload an docuware PDF',
accessType: 'WRITE',
accepts: [
{
arg: 'id',
type: 'number',
description: 'The ticket id',
http: {source: 'path'}
},
{
arg: 'fileCabinet',
type: 'string',
description: 'The file cabinet'
},
{
arg: 'dialog',
type: 'string',
description: 'The dialog'
}
],
returns: [],
http: {
path: `/:id/upload`,
verb: 'POST'
}
});
Self.upload = async function(ctx, id, fileCabinet) {
const models = Self.app.models;
const action = 'store';
const options = await Self.getOptions();
const fileCabinetId = await Self.getFileCabinet(fileCabinet);
const dialogId = await Self.getDialog(fileCabinet, action, fileCabinetId);
// get delivery note
const deliveryNote = await models.Ticket.deliveryNotePdf(ctx, {
id,
type: 'deliveryNote'
});
// get ticket data
const ticket = await models.Ticket.findById(id, {
include: [{
relation: 'client',
scope: {
fields: ['id', 'socialName', 'fi']
}
}]
});
const [taxes] = await models.Ticket.rawSql('CALL vn.ticketGetTaxAdd(?)', [id]);
// upload file
const templateJson = {
'Fields': [
{
'FieldName': 'N__ALBAR_N',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'string',
'PointAndShootInfo': {
'Box': [
{
'Left': 2531,
'Top': 3645,
'Width': 257,
'Height': 230,
'PageNumber': 0
}
],
'PageNumber': 0
},
'IsAutoNumber': false,
'IsNull': false,
'Item': id,
'FieldValue': id
},
{
'FieldName': 'CIF_PROVEEDOR',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'string',
'PointAndShootInfo': {
'Box': [
{
'Left': 6176,
'Top': 4624,
'Width': 839,
'Height': 168,
'PageNumber': 0
}
],
'PageNumber': 0
},
'IsAutoNumber': false,
'IsNull': false,
'Item': ticket.client().fi,
'FieldValue': ticket.client().fi
},
{
'FieldName': 'CODIGO_PROVEEDOR',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'string',
'PointAndShootInfo': {
'Box': [
{
'Left': 2531,
'Top': 3240,
'Width': 514,
'Height': 230,
'PageNumber': 0
}
],
'PageNumber': 0
},
'IsAutoNumber': false,
'IsNull': false,
'Item': ticket.client().id,
'FieldValue': ticket.client().id
},
{
'FieldName': 'NOMBRE_PROVEEDOR',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'string',
'PointAndShootInfo': {
'Box': [
{
'Left': 6175,
'Top': 4264,
'Width': 858,
'Height': 168,
'PageNumber': 0
}
],
'PageNumber': 0
},
'IsAutoNumber': false,
'IsNull': false,
'Item': ticket.client().socialName,
'FieldValue': ticket.client().socialName
},
{
'FieldName': 'FECHA_FACTURA',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'date',
'PointAndShootInfo': {
'Box': [
{
'Left': 2531,
'Top': 4050,
'Width': 1181,
'Height': 230,
'PageNumber': 0
}
],
'PageNumber': 0
},
'IsAutoNumber': false,
'IsNull': false,
'Item': ticket.shipped,
'FieldValue': ticket.shipped
},
{
'FieldName': 'TIPO_IVA__1_',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': {
'Box': [
{
'Left': 9537,
'Top': 10057,
'Width': 615,
'Height': 168,
'PageNumber': 0
}
],
'PageNumber': 0
},
'IsAutoNumber': false,
'IsNull': false,
'Item': taxes[0].rate,
'FieldValue': taxes[0].rate
},
{
'FieldName': 'BASE_IMPONIBLE__1_',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': {
'Box': [
{
'Left': 8907,
'Top': 10567,
'Width': 419,
'Height': 168,
'PageNumber': 0
}
],
'PageNumber': 0
},
'IsAutoNumber': false,
'IsNull': false,
'Item': ticket.totalWithoutVat,
'FieldValue': ticket.totalWithoutVat
},
{
'FieldName': 'IMPORTE_IVA__1_',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': {
'Box': [
{
'Left': 10423,
'Top': 10057,
'Width': 419,
'Height': 168,
'PageNumber': 0
}
],
'PageNumber': 0
},
'IsAutoNumber': false,
'IsNull': false,
'Item': taxes[0].tax,
'FieldValue': taxes[0].tax
},
{
'FieldName': 'TIPO_IVA__2_',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': true,
'Item': null,
'FieldValue': null
},
{
'FieldName': 'BASE_IMPONIBLE__2_',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': true,
'Item': null,
'FieldValue': null
},
{
'FieldName': 'IMPORTE_IVA__2_',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': true,
'Item': null,
'FieldValue': null
},
{
'FieldName': 'TIPO_IVA__3_',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': true,
'Item': null,
'FieldValue': null
},
{
'FieldName': 'BASE_IMPONIBLE__3_',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': true,
'Item': null,
'FieldValue': null
},
{
'FieldName': 'IMPORTE_IVA__3_',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': true,
'Item': null,
'FieldValue': null
},
{
'FieldName': 'IRPF',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': true,
'Item': null,
'FieldValue': null
},
{
'FieldName': 'TOTAL_FACTURA',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'Decimal',
'PointAndShootInfo': {
'Box': [
{
'Left': 10423,
'Top': 10958,
'Width': 419,
'Height': 168,
'PageNumber': 0
}
],
'PageNumber': 0
},
'IsAutoNumber': false,
'IsNull': false,
'Item': ticket.totalWithVat,
'FieldValue': ticket.totalWithVat
},
{
'FieldName': 'ESTADO',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'string',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': false,
'Item': 'Pendiente procesar',
'FieldValue': 'Pendiente procesar'
},
{
'FieldName': 'URL',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'string',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': true,
'Item': null,
'FieldValue': ''
},
{
'FieldName': 'FIRMA_',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'string',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': false,
'Item': 'Si',
'FieldValue': 'Si'
},
{
'FieldName': 'FILTRO_TABLET',
'ReadOnly': false,
'SystemField': false,
'ItemElementName': 'string',
'PointAndShootInfo': null,
'IsAutoNumber': false,
'IsNull': false,
'Item': 'Tablet1',
'FieldValue': 'Tablet1'
}
]
};
// if (process.env.NODE_ENV != 'production')
// throw new UserError('Action not allowed on the test environment');
const docuwareFile = await models.Docuware.checkFile(ctx, id, fileCabinet);
console.log(docuwareFile, id, fileCabinet);
// replace
if (docuwareFile) {
console.log(docuwareFile);
const uri = `${options.url}/FileCabinets/${fileCabinetId}/Sections?DocId=${docuwareFile.id}`;
console.log(uri);
return await axios.post(uri, deliveryNote[0], {headers: {
'Content-Type': 'application/pdf',
'Content-Disposition': 'file; filename="10.pdf"',
'X-File-ModifiedDate': '2020-08-26T00:00:00.000Z'
}
});
}
let uploadUri = `${options.url}/FileCabinets/${fileCabinetId}/Documents?StoreDialogId=${dialogId}`;
const FormData = require('form-data');
const data = new FormData();
data.append('document', JSON.stringify(templateJson), 'schema.json');
data.append('file[]', deliveryNote[0], 'file.pdf');
const uploadOptions = {
headers: {
'Content-Type': 'multipart/form-data',
'X-File-ModifiedDate': new Date(),
'Cookie': options.headers.headers.Cookie,
...data.getHeaders()
},
};
return await axios.post(uploadUri, data, uploadOptions)
.catch(() => {
throw new UserError('Failed to upload file');
});
};
};