refs #4131 changeStateRefactor #1753

Merged
pablone merged 14 commits from 4131-unifyTicketStatusChanges into dev 2023-10-31 09:34:24 +00:00
10 changed files with 55 additions and 48 deletions
Showing only changes of commit 65a1d052dc - Show all commits

View File

@ -1,5 +1,6 @@
UPDATE `salix`.`ACL`
SET property = 'state'
SET property = 'state',
model = 'Ticket'
WHERE property = 'changeState';
REVOKE INSERT, UPDATE, DELETE ON `vn`.`ticketTracking` FROM 'productionboss'@;

View File

@ -44,6 +44,40 @@ module.exports = Self => {
myOptions.transaction = tx;
}
try {
for (const ticketId of tickets) {
const ticketState = await models.TicketState.findOne(
{where: {ticketFk: ticketId},
fields: ['alertLevel']
}, myOptions);
const packedAlertLevel = await models.AlertLevel.findOne({where: {code: 'PACKED'},
fields: ['id']
}, myOptions);
if (!ticketState)
throw new UserError('Ticket does not exist');
if (ticketState.alertLevel < packedAlertLevel.id)
throw new UserError('This ticket cannot be signed because it has not been boxed');
if (await gestDocExists(ticketId))
throw new UserError('Ticket is already signed');
if (location) setLocation(ticketId);
if (!gestDocCreated) await createGestDoc(ticketId);
await models.TicketDms.create({ticketFk: ticketId, dmsFk: dms[0].id}, myOptions);
const ticket = await models.Ticket.findById(ticketId, null, myOptions);
await ticket.updateAttribute('isSigned', true, myOptions);
const params = {ticketFk: ticketId, code: 'DELIVERED'};
await models.Ticket.state(ctx, params, options);
}
if (tx) await tx.commit();
return;
} catch (e) {
if (tx) await tx.rollback();
throw e;
}
async function setLocation(ticketId) {
await models.Delivery.create({
ticketFk: ticketId,
@ -103,41 +137,9 @@ module.exports = Self => {
description: `Firma del cliente - Ruta ${ticket.route().id}`,
hasFile: false
};
dms = await models.Dms.uploadFile(ctxUploadFile, myOptions);
gestDocCreated = true;
}
try {
for (const ticketId of tickets) {
const ticketState = await models.TicketState.findOne(
{where: {ticketFk: ticketId},
fields: ['alertLevel']
}, myOptions);
const packedAlertLevel = await models.AlertLevel.findOne({where: {code: 'PACKED'},
fields: ['id']
}, myOptions);
if (!ticketState)
throw new UserError('Ticket does not exist');
if (ticketState.alertLevel < packedAlertLevel.id)
throw new UserError('This ticket cannot be signed because it has not been boxed');
if (await gestDocExists(ticketId))
throw new UserError('Ticket is already signed');
if (location) setLocation(ticketId);
if (!gestDocCreated) await createGestDoc(ticketId);
await models.TicketDms.create({ticketFk: ticketId, dmsFk: dms[0].id}, myOptions);
const ticket = await models.Ticket.findById(ticketId, null, myOptions);
await ticket.updateAttribute('isSigned', true, myOptions);
await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [ticketId, 'DELIVERED'], myOptions);
}
if (tx) await tx.commit();
return;
} catch (e) {
if (tx) await tx.rollback();
throw e;
}
};
};

View File

@ -1,5 +1,4 @@
module.exports = Self => {
// Methods
require('./ticket-methods')(Self);
require('../methods/ticket/state')(Self);
};

View File

@ -173,7 +173,7 @@ class Controller extends Section {
state(value) {
const params = {ticketFk: this.$params.id, code: value};
return this.$http.post('TicketTrackings/state', params).then(() => {
return this.$http.post('Tickets/state', params).then(() => {
this.vnApp.showSuccess(this.$t('Data saved!'));
this.card.reload();
}).finally(() => this.resetChanges());

View File

@ -229,13 +229,14 @@ describe('Ticket', () => {
});
describe('state()', () => {
it('should make an HTTP post query, then call the showSuccess(), reload() and resetChanges() methods', () => {
it('should make an HTTP post query, then call the showSuccess(),' +
' reload() and resetChanges() methods', () => {
jest.spyOn(controller.card, 'reload').mockReturnThis();
jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis();
jest.spyOn(controller, 'resetChanges').mockReturnThis();
const expectedParams = {ticketFk: 1, code: 'OK'};
$httpBackend.expect('POST', `TicketTrackings/state`, expectedParams).respond(200);
$httpBackend.expect('POST', `Tickets/state`, expectedParams).respond(200);
controller.state('OK');
$httpBackend.flush();
@ -246,7 +247,8 @@ describe('Ticket', () => {
});
describe('removeSales()', () => {
it('should make an HTTP post query, then call the showSuccess(), removeSelectedSales() and resetChanges() methods', () => {
it('should make an HTTP post query, then call the showSuccess(),' +
' removeSelectedSales() and resetChanges() methods', () => {
jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis();
jest.spyOn(controller, 'removeSelectedSales').mockReturnThis();
jest.spyOn(controller, 'resetChanges').mockReturnThis();
@ -352,7 +354,8 @@ describe('Ticket', () => {
});
describe('updatePrice()', () => {
it('should make an HTTP POST query, update the sale price and then call to the resetChanges() method', () => {
it('should make an HTTP POST query, update the sale price ' +
'and then call to the resetChanges() method', () => {
jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis();
jest.spyOn(controller, 'resetChanges').mockReturnThis();
@ -418,7 +421,8 @@ describe('Ticket', () => {
expect(controller.$.editDiscount.hide).toHaveBeenCalledWith();
});
it('should not call to the updateDiscount() method and then to the editDiscountDialog hide() method', () => {
it('should not call to the updateDiscount() method and then' +
' to the editDiscountDialog hide() method', () => {
jest.spyOn(controller, 'updateDiscount').mockReturnThis();
const firstSelectedSale = controller.sales[0];
@ -444,7 +448,8 @@ describe('Ticket', () => {
});
describe('updateDiscount()', () => {
it('should make an HTTP POST query, update the sales discount and then call to the resetChanges() method', () => {
it('should make an HTTP POST query, update the sales discount ' +
'and then call to the resetChanges() method', () => {
jest.spyOn(controller, 'resetChanges').mockReturnThis();
jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis();

View File

@ -64,8 +64,8 @@ class Controller extends Summary {
ticketFk: 'id' in this.ticket ? this.ticket.id : this.$params.id,
code: value
};
this.$http.post(`TicketTrackings/state`, params)
console.log('entra');
pablone marked this conversation as resolved
Review

llevar

llevar
this.$http.post(`Tickets/state`, params)
.then(() => {
if ('id' in this.$params) this.reload();
})

View File

@ -50,7 +50,7 @@ describe('Ticket', () => {
let res = {id: 1, nickname: 'myNickname'};
$httpBackend.when('GET', `Tickets/1/summary`).respond(200, res);
$httpBackend.expectPOST(`TicketTrackings/state`).respond(200, 'ok');
$httpBackend.expectPOST(`Tickets/state`).respond(200, 'ok');
controller.state(value);
$httpBackend.flush();

View File

@ -1,4 +1,4 @@
<mg-ajax path="TicketTrackings/state" options="vnPost"></mg-ajax>
<mg-ajax path="Tickets/state" options="vnPost"></mg-ajax>
<vn-watcher
vn-id="watcher"
data="$ctrl.params"

View File

@ -53,7 +53,7 @@ class Controller extends Section {
}
onSubmit() {
this.$http.post(`TicketTrackings/state`, this.params).then(() => {
this.$http.post(`Tickets/state`, this.params).then(() => {
this.$.watcher.updateOriginalData();
this.card.reload();
this.vnApp.showSuccess(this.$t('Data saved!'));

View File

@ -61,7 +61,7 @@ describe('Ticket', () => {
jest.spyOn(controller.vnApp, 'showSuccess');
jest.spyOn(controller.$state, 'go');
$httpBackend.expectPOST(`TicketTrackings/state`, controller.params).respond({});
$httpBackend.expectPOST(`Tickets/state`, controller.params).respond({});
controller.onSubmit();
$httpBackend.flush();