refs #6321 test: spliy

This commit is contained in:
Javier Segarra 2024-04-01 16:11:30 +02:00
parent 59498179ec
commit 601f5db080
3 changed files with 115 additions and 19 deletions

View File

@ -10,7 +10,7 @@ describe('Item Lack Detail', () => {
const result = await models.Ticket.itemLackDetail(id, options); const result = await models.Ticket.itemLackDetail(id, options);
expect(result).toBeFalsy(); expect(result.length).toEqual(0);
await tx.rollback(); await tx.rollback();
} catch (e) { } catch (e) {
await tx.rollback(); await tx.rollback();
@ -26,7 +26,7 @@ describe('Item Lack Detail', () => {
const id = 1167; const id = 1167;
const result = await models.Ticket.itemLackDetail(id, options); const result = await models.Ticket.itemLackDetail(id, options);
expect(result).toBeFalsy(); expect(result.length).toEqual(0);
await tx.rollback(); await tx.rollback();
} catch (e) { } catch (e) {
await tx.rollback(); await tx.rollback();
@ -42,7 +42,7 @@ describe('Item Lack Detail', () => {
const id = 0; const id = 0;
const result = await models.Ticket.itemLackDetail(id, options); const result = await models.Ticket.itemLackDetail(id, options);
expect(result).toBeFalsy(); expect(result.length).toEqual(0);
await tx.rollback(); await tx.rollback();
} catch (e) { } catch (e) {
await tx.rollback(); await tx.rollback();

View File

@ -0,0 +1,98 @@
const models = require('vn-loopback/server/server').models;
describe('Split', () => {
beforeAll(async() => {
ctx = {
req: {
accessToken: {},
headers: {origin: 'http://localhost'},
}
};
});
it('should split tickets with count 1', async() => {
const tx = await models.Ticket.beginTransaction({});
const options = {transaction: tx};
const data = [
{ticketFk: 7}
];
try {
const result = await models.Ticket.split(ctx, data, options);
expect(result.length).toEqual(1);
expect(result[0].ticket).toEqual(7);
expect(result[0].status).toEqual('noSplit');
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
it('should split tickets with count 2 and error', async() => {
const tx = await models.Ticket.beginTransaction({});
const options = {transaction: tx};
const data = [
{ticketFk: 8}
];
try {
const result = await models.Ticket.split(ctx, data, options);
expect(result.length).toEqual(1);
expect(result[0].ticket).toEqual(8);
expect(result[0].status).toEqual('error');
expect(result[0].message).toEqual('This ticket is not editable.');
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
it('should split tickets with count 2 and other error', async() => {
const tx = await models.Ticket.beginTransaction({});
const options = {transaction: tx};
const data = [
{ticketFk: 16}
];
try {
const result = await models.Ticket.split(ctx, data, options);
expect(result.length).toEqual(1);
expect(result[0].ticket).toEqual(16);
expect(result[0].status).toEqual('error');
expect(result[0].message).toEqual('Can\'t transfer claimed sales');
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
it('should split tickets with count 2 and success', async() => {
const tx = await models.Ticket.beginTransaction({});
const options = {transaction: tx};
const data = [
{ticketFk: 32}
];
try {
const result = await models.Ticket.split(ctx, data, options);
expect(result.length).toEqual(1);
expect(result[0].ticket).toEqual(32);
expect(result[0].status).toEqual('split');
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
});

View File

@ -1,6 +1,3 @@
const {ParameterizedSQL} = require('loopback-connector/lib/sql');
const UserError = require('vn-loopback/util/user-error');
module.exports = Self => { module.exports = Self => {
Self.remoteMethodCtx('split', { Self.remoteMethodCtx('split', {
description: 'Split a ticket or n tickets', description: 'Split a ticket or n tickets',
@ -24,7 +21,7 @@ module.exports = Self => {
}); });
Self.split = async(ctx, tickets, options) => { Self.split = async(ctx, tickets, options) => {
// const models = Self.app.models; const models = Self.app.models;
const myOptions = {}; const myOptions = {};
let tx; let tx;
let results = []; let results = [];
@ -46,15 +43,11 @@ module.exports = Self => {
ON s.ticketFk = t.id ON s.ticketFk = t.id
WHERE t.id IN (?) GROUP BY t.id;`, WHERE t.id IN (?) GROUP BY t.id;`,
[ticketsIds], myOptions); [ticketsIds], myOptions);
console.log(ticketsCount);
// stmts.push(stmt); for (const {tid, count} of ticketsCount) {
// const sql = ParameterizedSQL.join(stmts, ';');
// const result = await conn.executeStmt(sql, myOptions);
for (const {tid, sid, count} of ticketsCount) {
try { try {
if (count === 1) { if (count === 1) {
results.push({ticket: tid, message: 'noSplit'}); results.push({ticket: tid, status: 'noSplit'});
continue; continue;
} }
const [, [{vNewTicket}]] = await Self.rawSql(` const [, [{vNewTicket}]] = await Self.rawSql(`
@ -63,15 +56,20 @@ module.exports = Self => {
[tid], myOptions); [tid], myOptions);
if (vNewTicket === 0) continue; if (vNewTicket === 0) continue;
await Self.rawSql(` const sales = await models.Sale.find({
where: {ticketFk: tid}
}, myOptions);
const updateIsPicked = sales.map(({sid}) => Self.rawSql(`
UPDATE vn.sale SET isPicked = (id = ?) WHERE ticketFk = ?`, UPDATE vn.sale SET isPicked = (id = ?) WHERE ticketFk = ?`,
[sid, tid], myOptions); [sid, tid], myOptions));
await Self.transferSales(ctx, tid, vNewTicket, sid, myOptions); await Promise.all(updateIsPicked);
await Self.transferSales(ctx, tid, vNewTicket, sales, myOptions);
await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [tid, 'FIXING'], myOptions); await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [tid, 'FIXING'], myOptions);
results.push({ticket: tid, message: 'split'}); results.push({ticket: tid, status: 'split'});
} catch (error) { } catch ({message}) {
throw new UserError('You cannot close tickets for today'); results.push({ticket: tid, status: 'error', message});
} }
} }
return results; return results;