refs #6321 test: spliy
This commit is contained in:
parent
59498179ec
commit
601f5db080
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue