fix: refs #7844 salesFilter and tmp.ticket_problems.totalProblems
This commit is contained in:
parent
6f97d1b83a
commit
0c3349dc03
|
@ -35,6 +35,7 @@ BEGIN
|
|||
saleFk INT(11),
|
||||
isFreezed INTEGER(1) DEFAULT 0,
|
||||
risk DECIMAL(10,1) DEFAULT 0,
|
||||
hasRisk TINYINT(1) DEFAULT 0,
|
||||
hasHighRisk TINYINT(1) DEFAULT 0,
|
||||
hasTicketRequest INTEGER(1) DEFAULT 0,
|
||||
itemShortage VARCHAR(255),
|
||||
|
@ -52,6 +53,7 @@ BEGIN
|
|||
saleFk,
|
||||
isFreezed,
|
||||
risk,
|
||||
hasRisk,
|
||||
hasHighRisk,
|
||||
hasTicketRequest,
|
||||
isTaxDataChecked,
|
||||
|
@ -62,6 +64,7 @@ BEGIN
|
|||
s.id,
|
||||
IF(FIND_IN_SET('isFreezed', t.problem), TRUE, FALSE) isFreezed,
|
||||
t.risk,
|
||||
IF(FIND_IN_SET('hasRisk', t.problem), TRUE, FALSE) hasRisk,
|
||||
IF(FIND_IN_SET('hasHighRisk', t.problem), TRUE, FALSE) hasHighRisk,
|
||||
IF(FIND_IN_SET('hasTicketRequest', t.problem), TRUE, FALSE) hasTicketRequest,
|
||||
IF(FIND_IN_SET('isTaxDataChecked', t.problem), FALSE, TRUE) isTaxDataChecked,
|
||||
|
|
|
@ -18,6 +18,7 @@ BEGIN
|
|||
SELECT ticketFk,
|
||||
MAX(isFreezed) isFreezed,
|
||||
MAX(risk) risk,
|
||||
MAX(hasRisk) hasRisk,
|
||||
MAX(hasHighRisk) hasHighRisk,
|
||||
MAX(hasTicketRequest) hasTicketRequest,
|
||||
MAX(itemShortage) itemShortage,
|
||||
|
@ -32,19 +33,19 @@ BEGIN
|
|||
FROM tmp.sale_problems
|
||||
GROUP BY ticketFk;
|
||||
|
||||
UPDATE tmp.ticket_problems tp
|
||||
SET tp.totalProblems = (
|
||||
(tp.isFreezed) +
|
||||
IF(tp.risk,TRUE, FALSE) +
|
||||
(tp.hasTicketRequest) +
|
||||
(tp.isTaxDataChecked = 0) +
|
||||
(tp.hasComponentLack) +
|
||||
(tp.itemDelay) +
|
||||
(tp.isTooLittle) +
|
||||
(tp.itemLost) +
|
||||
(tp.hasRounding) +
|
||||
(tp.itemShortage) +
|
||||
(tp.isVip)
|
||||
UPDATE tmp.ticket_problems
|
||||
SET totalProblems = (
|
||||
(isFreezed) +
|
||||
(hasRisk) +
|
||||
(hasTicketRequest) +
|
||||
(isTaxDataChecked) +
|
||||
(hasComponentLack) +
|
||||
(itemDelay IS NOT NULL) +
|
||||
(isTooLittle) +
|
||||
(itemLost IS NOT NULL) +
|
||||
(hasRounding IS NOT NULL) +
|
||||
(itemShortage IS NOT NULL) +
|
||||
(isVip)
|
||||
);
|
||||
|
||||
DROP TEMPORARY TABLE tmp.sale_problems;
|
||||
|
|
|
@ -238,45 +238,6 @@ module.exports = Self => {
|
|||
|
||||
stmts.push(`SET SESSION optimizer_search_depth = @_optimizer_search_depth`);
|
||||
|
||||
// Get client debt balance
|
||||
stmts.push(`
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.clientGetDebt
|
||||
(PRIMARY KEY (clientFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT DISTINCT clientFk FROM tmp.filter`);
|
||||
|
||||
stmt = new ParameterizedSQL('CALL client_getDebt(?)', [args.to]);
|
||||
stmts.push(stmt);
|
||||
stmts.push('DROP TEMPORARY TABLE tmp.clientGetDebt');
|
||||
|
||||
stmt = new ParameterizedSQL(`
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.tickets
|
||||
(PRIMARY KEY (id))
|
||||
ENGINE = MEMORY
|
||||
SELECT f.*, r.risk AS debt
|
||||
FROM tmp.filter f
|
||||
LEFT JOIN tmp.risk r ON f.clientFk = r.clientFk`);
|
||||
stmts.push(stmt);
|
||||
|
||||
// Sum risk to future
|
||||
stmts.push(`SET @client:= 0`);
|
||||
stmts.push('SET @risk := 0');
|
||||
stmts.push(`
|
||||
UPDATE tmp.tickets
|
||||
SET debt = IF(@client <> @client:= clientFk,
|
||||
-totalWithVat + @risk:= - debt + totalWithVat,
|
||||
-totalWithVat + @risk:= @risk + totalWithVat
|
||||
)
|
||||
ORDER BY clientFk, shipped DESC
|
||||
`);
|
||||
|
||||
// Remove positive risks
|
||||
stmts.push(`
|
||||
UPDATE tmp.tickets t
|
||||
SET debt = 0
|
||||
WHERE t.debt + t.credit >= 0
|
||||
`);
|
||||
|
||||
stmt = new ParameterizedSQL(`
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.sale_getProblems
|
||||
(INDEX (ticketFk))
|
||||
|
@ -290,15 +251,6 @@ module.exports = Self => {
|
|||
|
||||
stmts.push('CALL ticket_getProblems(FALSE)');
|
||||
|
||||
stmts.push(`
|
||||
INSERT INTO tmp.ticket_problems (ticketFk, risk, totalProblems)
|
||||
SELECT t.id, t.debt + t.credit AS risk, 1
|
||||
FROM tmp.tickets t
|
||||
WHERE (t.debt + t.credit) < 0
|
||||
ON DUPLICATE KEY UPDATE
|
||||
risk = t.debt + t.credit, totalProblems = totalProblems + 1
|
||||
`);
|
||||
|
||||
stmt = new ParameterizedSQL(`
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.sale_getWarnings
|
||||
(INDEX (ticketFk, agencyModeFk))
|
||||
|
@ -311,14 +263,18 @@ module.exports = Self => {
|
|||
stmts.push('CALL ticket_getWarnings()');
|
||||
|
||||
stmt = new ParameterizedSQL(`
|
||||
SELECT t.*,
|
||||
tp.*,
|
||||
tp.hasHighRisk,
|
||||
tw.*
|
||||
FROM tmp.tickets t
|
||||
LEFT JOIN tmp.ticket_problems tp ON tp.ticketFk = t.id
|
||||
LEFT JOIN tmp.ticket_warnings tw ON tw.ticketFk = t.id
|
||||
UPDATE tmp.ticket_problems
|
||||
SET risk = IF(hasRisk AND risk > 0, risk, 0)
|
||||
`);
|
||||
stmts.push(stmt);
|
||||
|
||||
stmt = new ParameterizedSQL(`
|
||||
SELECT *
|
||||
FROM tmp.filter f
|
||||
LEFT JOIN tmp.ticket_problems tp ON tp.ticketFk = f.id
|
||||
LEFT JOIN tmp.ticket_warnings tw ON tw.ticketFk = f.id
|
||||
`);
|
||||
stmts.push(stmt);
|
||||
|
||||
const hasProblems = args.problems;
|
||||
if (hasProblems != undefined && (!args.from && !args.to))
|
||||
|
@ -354,23 +310,23 @@ module.exports = Self => {
|
|||
switch (param) {
|
||||
case 'search':
|
||||
return /^\d+$/.test(value)
|
||||
? {'t.id': {inq: value}}
|
||||
: {'t.nickname': {like: `%${value}%`}};
|
||||
? {'f.id': {inq: value}}
|
||||
: {'f.nickname': {like: `%${value}%`}};
|
||||
|
||||
case 'nickname':
|
||||
return {'t.nickname': {like: `%${value}%`}};
|
||||
return {'f.nickname': {like: `%${value}%`}};
|
||||
case 'refFk':
|
||||
return {'t.refFk': value};
|
||||
return {'f.refFk': value};
|
||||
|
||||
case 'provinceFk':
|
||||
return {'t.provinceFk': value};
|
||||
return {'f.provinceFk': value};
|
||||
case 'stateFk':
|
||||
return {'t.stateFk': value};
|
||||
return {'f.stateFk': value};
|
||||
case 'alertLevel':
|
||||
return {'t.alertLevel': value};
|
||||
return {'f.alertLevel': value};
|
||||
case 'pending':
|
||||
if (value) {
|
||||
return {'t.alertLevelCode': {inq: [
|
||||
return {'f.alertLevelCode': {inq: [
|
||||
'FIXING',
|
||||
'FREE',
|
||||
'NOT_READY',
|
||||
|
@ -380,7 +336,7 @@ module.exports = Self => {
|
|||
'WAITING_FOR_PAYMENT'
|
||||
]}};
|
||||
} else {
|
||||
return {'t.alertLevelCode': {inq: [
|
||||
return {'f.alertLevelCode': {inq: [
|
||||
'ON_PREPARATION',
|
||||
'ON_CHECKING',
|
||||
'CHECKED',
|
||||
|
@ -404,7 +360,7 @@ module.exports = Self => {
|
|||
}
|
||||
case 'agencyModeFk':
|
||||
case 'warehouseFk':
|
||||
param = `t.${param}`;
|
||||
param = `f.${param}`;
|
||||
return {[param]: value};
|
||||
}
|
||||
});
|
||||
|
@ -417,14 +373,14 @@ module.exports = Self => {
|
|||
stmt.merge(conn.makeLimit(filter));
|
||||
const ticketsIndex = stmts.push(stmt) - 1;
|
||||
|
||||
stmts.push(
|
||||
`DROP TEMPORARY TABLE
|
||||
stmts.push(`
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.filter,
|
||||
tmp.ticket_problems,
|
||||
tmp.sale_getProblems,
|
||||
tmp.sale_getWarnings,
|
||||
tmp.ticket_warnings,
|
||||
tmp.risk`);
|
||||
tmp.ticket_warnings
|
||||
`);
|
||||
|
||||
const sql = ParameterizedSQL.join(stmts, ';');
|
||||
const result = await conn.executeStmt(sql, myOptions);
|
||||
|
|
|
@ -39,7 +39,7 @@ describe('SalesMonitor salesFilter()', () => {
|
|||
const filter = {};
|
||||
const result = await models.SalesMonitor.salesFilter(ctx, filter, options);
|
||||
|
||||
expect(result.length).toBeGreaterThan(11);
|
||||
expect(result.length).toBeGreaterThan(10);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
|
@ -68,7 +68,7 @@ describe('SalesMonitor salesFilter()', () => {
|
|||
const filter = {};
|
||||
const result = await models.SalesMonitor.salesFilter(ctx, filter, options);
|
||||
|
||||
expect(result.length).toEqual(0);
|
||||
expect(result.length).toEqual(4);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
|
@ -218,8 +218,8 @@ describe('SalesMonitor salesFilter()', () => {
|
|||
const firstTicket = result.shift();
|
||||
const secondTicket = result.shift();
|
||||
|
||||
expect(firstTicket.totalProblems).toEqual(1);
|
||||
expect(secondTicket.totalProblems).toEqual(1);
|
||||
expect(firstTicket.totalProblems).toEqual(4);
|
||||
expect(secondTicket.totalProblems).toEqual(4);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
|
|
Loading…
Reference in New Issue