refs #5094 feat(ticket_index): docuware multiple deliveryNote
gitea/salix/pipeline/head There was a failure building this commit Details

This commit is contained in:
Alex Moreno 2023-06-12 15:20:46 +02:00
parent bbdc0d3e7f
commit d3c4a6ba5c
8 changed files with 161 additions and 164 deletions

View File

@ -20,8 +20,8 @@ module.exports = Self => {
const options = await Self.getOptions();
if (!process.env.NODE_ENV)
return Math.round();
// if (!process.env.NODE_ENV)
// return Math.round();
const response = await axios.get(`${options.url}/FileCabinets/${fileCabinetId}/dialogs`, options.headers);
const dialogs = response.data.Dialog;
@ -44,8 +44,8 @@ module.exports = Self => {
}
});
if (!process.env.NODE_ENV)
return Math.round();
// if (!process.env.NODE_ENV)
// return Math.round();
const fileCabinetResponse = await axios.get(`${options.url}/FileCabinets`, options.headers);
const fileCabinets = fileCabinetResponse.data.FileCabinet;

View File

@ -7,30 +7,27 @@ module.exports = Self => {
accessType: 'WRITE',
accepts: [
{
arg: 'id',
type: 'number',
description: 'The ticket id',
http: {source: 'path'}
arg: 'ticketIds',
type: ['number'],
description: 'The ticket ids',
required: true
},
{
arg: 'fileCabinet',
type: 'string',
description: 'The file cabinet'
},
{
arg: 'dialog',
type: 'string',
description: 'The dialog'
description: 'The file cabinet',
required: true
}
],
returns: [],
http: {
path: `/:id/upload`,
path: `/upload`,
verb: 'POST'
}
});
Self.upload = async function(ctx, id, fileCabinet) {
Self.upload = async function(ctx, ticketIds, fileCabinet) {
delete ctx.args.ticketIds;
const models = Self.app.models;
const action = 'store';
@ -38,18 +35,22 @@ module.exports = Self => {
const fileCabinetId = await Self.getFileCabinet(fileCabinet);
const dialogId = await Self.getDialog(fileCabinet, action, fileCabinetId);
const uploaded = [];
// get delivery note
for (id of ticketIds) {
// get delivery note
ctx.args.id = id;
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']
fields: ['id', 'name', 'fi']
}
}]
});
@ -75,7 +76,7 @@ module.exports = Self => {
{
'FieldName': 'NOMBRE_PROVEEDOR',
'ItemElementName': 'string',
'Item': ticket.client().socialName,
'Item': ticket.client().name + ' - ' + id,
},
{
'FieldName': 'FECHA_FACTURA',
@ -105,8 +106,8 @@ module.exports = Self => {
]
};
if (process.env.NODE_ENV != 'production')
throw new UserError('Action not allowed on the test environment');
// if (process.env.NODE_ENV != 'production')
// throw new UserError('Action not allowed on the test environment');
// delete old
const docuwareFile = await models.Docuware.checkFile(ctx, id, fileCabinet, false);
@ -133,9 +134,17 @@ module.exports = Self => {
},
};
return await axios.post(uploadUri, data, uploadOptions)
.catch(() => {
throw new UserError('Failed to upload file');
});
try {
await axios.post(uploadUri, data, uploadOptions);
} catch (err) {
const $t = ctx.req.__;
const message = $t('Failed to upload ticket', {id});
if (uploaded.length)
await models.TicketTracking.setDelivered(ctx, uploaded);
throw new UserError(message);
}
uploaded.push(id);
}
return models.TicketTracking.setDelivered(ctx, ticketIds);
};
};

View File

@ -173,5 +173,6 @@
"This ticket is already a refund": "This ticket is already a refund",
"A claim with that sale already exists": "A claim with that sale already exists",
"Can't transfer claimed sales": "Can't transfer claimed sales",
"Invalid quantity": "Invalid quantity"
"Invalid quantity": "Invalid quantity",
"Failed to upload delivery note": "Error to upload delivery note {{id}}"
}

View File

@ -259,7 +259,7 @@
"App name does not exist": "El nombre de aplicación no es válido",
"Try again": "Vuelve a intentarlo",
"Aplicación bloqueada por el usuario 9": "Aplicación bloqueada por el usuario 9",
"Failed to upload file": "Error al subir archivo",
"Failed to upload delivery note": "Error al subir albarán {{id}}",
"The DOCUWARE PDF document does not exists": "El documento PDF Docuware no existe",
"It is not possible to modify tracked sales": "No es posible modificar líneas de pedido que se hayan empezado a preparar",
"It is not possible to modify sales that their articles are from Floramondo": "No es posible modificar líneas de pedido cuyos artículos sean de Floramondo",

View File

@ -326,14 +326,8 @@ class Controller extends Section {
if (!force)
return this.$.pdfToTablet.show();
return this.$http.post(`Docuwares/${this.id}/upload`, {fileCabinet: 'deliveryNote'})
return this.$http.post(`Docuwares/upload`, {fileCabinet: 'deliveryNote', ticketIds: [this.id]})
.then(() => {
this.$.balanceCreate.amountPaid = this.ticket.totalWithVat;
this.$.balanceCreate.clientFk = this.ticket.clientFk;
this.$.balanceCreate.description = 'Albaran: ';
this.$.balanceCreate.description += this.ticket.id;
this.$.balanceCreate.show();
this.vnApp.showSuccess(this.$t('PDF sent!'));
});
}

View File

@ -304,9 +304,8 @@ describe('Ticket Component vnTicketDescriptorMenu', () => {
expect(controller.$.pdfToTablet.show).toHaveBeenCalled();
});
it('should make a query and show balance create', () => {
it('should make a query', () => {
controller.$.balanceCreate = {show: () => {}};
jest.spyOn(controller.$.balanceCreate, 'show');
jest.spyOn(controller.vnApp, 'showSuccess');
$httpBackend.whenPOST(`Docuwares/${ticket.id}/upload`).respond(true);
@ -314,7 +313,6 @@ describe('Ticket Component vnTicketDescriptorMenu', () => {
$httpBackend.flush();
expect(controller.vnApp.showSuccess).toHaveBeenCalled();
expect(controller.$.balanceCreate.show).toHaveBeenCalled();
});
});

View File

@ -152,21 +152,21 @@
</vn-data-viewer>
<div fixed-bottom-right>
<vn-vertical style="align-items: center;">
<vn-button class="round sm vn-mb-sm"
icon="print"
<vn-button class="round vn-mb-sm"
icon="install_mobile"
ng-show="$ctrl.totalChecked > 0"
ng-click="$ctrl.setDelivered()"
ng-click="$ctrl.sendDocuware()"
vn-tooltip="Set as delivered and open delivery note(s)"
tooltip-position="left">
</vn-button>
<vn-button class="round sm vn-mb-sm"
<vn-button class="round vn-mb-sm"
icon="icon-recovery"
ng-show="$ctrl.totalChecked > 0"
ng-click="$ctrl.openBalanceDialog()"
vn-tooltip="Payment on account..."
tooltip-position="left">
</vn-button>
<vn-button class="round sm vn-mb-sm"
<vn-button class="round vn-mb-sm"
icon="icon-invoice"
ng-click="makeInvoiceConfirmation.show()"
ng-show="$ctrl.totalChecked > 0"

View File

@ -9,14 +9,15 @@ export default class Controller extends Section {
this.vnReport = vnReport;
}
setDelivered() {
sendDocuware() {
const checkedTickets = this.checked;
let ids = [];
let ticketIds = [];
for (let ticket of checkedTickets)
ids.push(ticket.id);
ticketIds.push(ticket.id);
this.$http.post('TicketTrackings/setDelivered', ids).then(res => {
return this.$http.post(`Docuwares/upload`, {fileCabinet: 'deliveryNote', ticketIds})
.then(res => {
let state = res.data;
for (let ticket of checkedTickets) {
ticket.stateFk = state.id;
@ -24,15 +25,9 @@ export default class Controller extends Section {
ticket.alertLevel = state.alertLevel;
ticket.alertLevelCode = state.code;
}
this.openDeliveryNotes(ids);
});
}
openDeliveryNotes(ids) {
for (let id of ids)
this.vnReport.show(`Tickets/${id}/delivery-note-pdf`);
}
openBalanceDialog() {
const checkedTickets = this.checked;
const description = [];