commit
This commit is contained in:
705
src/sales/dashboard/dashboard.service.ts
Normal file
705
src/sales/dashboard/dashboard.service.ts
Normal file
@@ -0,0 +1,705 @@
|
||||
/*
|
||||
https://docs.nestjs.com/providers#services
|
||||
*/
|
||||
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { connectionOptions } from 'src/configs/typeorm.config';
|
||||
import { Connection } from 'typeorm';
|
||||
|
||||
@Injectable()
|
||||
export class DashboardService {
|
||||
|
||||
async dashboarSale() {
|
||||
const connection = new Connection(connectionOptions);
|
||||
await connection.connect();
|
||||
const queryRunner = connection.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
try {
|
||||
const sqlSale = `SELECT ROUND(SUM(VLVENDA),2) as "sale",
|
||||
ROUND(SUM(CUSTOFIN),2) as "cost",
|
||||
ROUND(SUM(VLDEVOLUCAO),2) as "devolution",
|
||||
ROUND(SUM(VLMETA),2) as "objetivo",
|
||||
CASE WHEN SUM(VLVENDA) > 0 THEN
|
||||
ROUND(( ( ( SUM(VLVENDA) - SUM(CUSTOFIN) ) / SUM(VLVENDA) ) * 100 ),2) ELSE 0 END as "profit",
|
||||
CASE WHEN SUM(VLMETA) > 0 THEN ROUND((( SUM(VLVENDA) / SUM(VLMETA) ) * 100),2) ELSE 0 END as "percentual",
|
||||
SUM(NFS) as "nfs"
|
||||
FROM (
|
||||
SELECT VENDAS.DTSAIDA, VENDAS.CODSUPERVISOR,
|
||||
SUM(VENDAS.VLVENDA) VLVENDA,
|
||||
SUM(VENDAS.VLCUSTOFIN) CUSTOFIN,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLMETA,
|
||||
COUNT(DISTINCT VENDAS.NUMTRANSVENDA) NFS
|
||||
FROM view_vendas_resumo_faturamento vendas
|
||||
WHERE VENDAS.DTSAIDA = TRUNC(SYSDATE)
|
||||
AND VENDAS.CONDVENDA IN (1,7)
|
||||
GROUP BY VENDAS.DTSAIDA, VENDAS.CODSUPERVISOR
|
||||
UNION ALL
|
||||
SELECT DEVOLUCAO.DTENT DTSAIDA, PCUSUARI.CODSUPERVISOR,
|
||||
ROUND(SUM(DEVOLUCAO.vldevolucao * (-1)), 2) VLVENDA,
|
||||
ROUND(SUM(DEVOLUCAO.VLCUSTOFIN * (-1)), 2) VLCUSTOFIN,
|
||||
ROUND(SUM(DEVOLUCAO.VLDEVOLUCAO), 2) VLDEVOLUCAO,
|
||||
0 VLMETA,
|
||||
0 NFS
|
||||
FROM view_devol_resumo_faturamento devolucao, PCNFSAID, PCNFENT, PCUSUARI
|
||||
WHERE devolucao.dtent = TRUNC(SYSDATE)
|
||||
AND DEVOLUCAO.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA (+)
|
||||
AND DEVOLUCAO.NUMTRANSENT = PCNFENT.NUMTRANSENT
|
||||
AND DEVOLUCAO.codusurdevol = PCUSUARI.CODUSUR
|
||||
GROUP BY DEVOLUCAO.DTENT, PCUSUARI.CODSUPERVISOR
|
||||
UNION ALL
|
||||
SELECT PCMETARCA.DATA, PCUSUARI.CODSUPERVISOR,
|
||||
0 VLVENDA,
|
||||
0 VLCUSTOFIN,
|
||||
0 VLDEVOLUCAO,
|
||||
SUM(PCMETARCA.VLVENDAPREV) VLMETA,
|
||||
0 NFS
|
||||
FROM PCMETARCA, PCUSUARI
|
||||
WHERE PCMETARCA.DATA = trunc(sysdate)
|
||||
AND PCMETARCA.CODUSUR = PCUSUARI.CODUSUR
|
||||
GROUP BY PCMETARCA.DATA, PCUSUARI.CODSUPERVISOR ) DADOS`;
|
||||
|
||||
const sqlSaleBySupervisor = `SELECT DADOS.CODSUPERVISOR as "supervisorId",
|
||||
PCSUPERV.NOME as "name",
|
||||
ROUND(SUM(VLVENDA),2) as "sale",
|
||||
ROUND(SUM(CUSTOFIN),2) as "cost",
|
||||
ROUND(SUM(VLDEVOLUCAO),2) as "devolution",
|
||||
ROUND(SUM(VLMETA),2) as "objetivo",
|
||||
CASE WHEN SUM(VLVENDA) > 0 THEN
|
||||
ROUND(( ( ( SUM(VLVENDA) - SUM(CUSTOFIN) ) / SUM(VLVENDA) ) * 100 ),2) ELSE 0 END as "profit",
|
||||
CASE WHEN SUM(VLMETA) > 0 THEN ROUND((( SUM(VLVENDA) / SUM(VLMETA) ) * 100),2) ELSE 0 END as "percentual",
|
||||
SUM(NFS) as "nfs"
|
||||
FROM (
|
||||
SELECT VENDAS.DTSAIDA, VENDAS.CODSUPERVISOR,
|
||||
SUM(VENDAS.VLVENDA) VLVENDA,
|
||||
SUM(VENDAS.VLCUSTOFIN) CUSTOFIN,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLMETA,
|
||||
COUNT(DISTINCT VENDAS.NUMTRANSVENDA) NFS
|
||||
FROM view_vendas_resumo_faturamento vendas
|
||||
WHERE VENDAS.DTSAIDA = TRUNC(SYSDATE)
|
||||
AND VENDAS.CONDVENDA IN (1,7)
|
||||
GROUP BY VENDAS.DTSAIDA, VENDAS.CODSUPERVISOR
|
||||
UNION ALL
|
||||
SELECT DEVOLUCAO.DTENT DTSAIDA, PCUSUARI.CODSUPERVISOR,
|
||||
SUM(DEVOLUCAO.vldevolucao * (-1)) VLVENDA,
|
||||
SUM(DEVOLUCAO.VLCUSTOFIN * (-1)) VLCUSTOFIN,
|
||||
SUM(DEVOLUCAO.VLDEVOLUCAO) VLDEVOLUCAO,
|
||||
0 VLMETA,
|
||||
0 NFS
|
||||
FROM view_devol_resumo_faturamento devolucao, PCNFSAID, PCNFENT, PCUSUARI
|
||||
WHERE devolucao.dtent = TRUNC(SYSDATE)
|
||||
AND DEVOLUCAO.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA (+)
|
||||
AND DEVOLUCAO.NUMTRANSENT = PCNFENT.NUMTRANSENT
|
||||
AND DEVOLUCAO.codusurdevol = PCUSUARI.CODUSUR
|
||||
GROUP BY DEVOLUCAO.DTENT, PCUSUARI.CODSUPERVISOR
|
||||
UNION ALL
|
||||
SELECT PCMETARCA.DATA, PCUSUARI.CODSUPERVISOR,
|
||||
0 VLVENDA,
|
||||
0 VLCUSTOFIN,
|
||||
0 VLDEVOLUCAO,
|
||||
SUM(PCMETARCA.VLVENDAPREV) VLMETA,
|
||||
0 NFS
|
||||
FROM PCMETARCA, PCUSUARI
|
||||
WHERE PCMETARCA.DATA = TRUNC(SYSDATE)
|
||||
AND PCMETARCA.CODUSUR = PCUSUARI.CODUSUR
|
||||
GROUP BY PCMETARCA.DATA, PCUSUARI.CODSUPERVISOR ) DADOS, PCSUPERV
|
||||
WHERE DADOS.CODSUPERVISOR = PCSUPERV.CODSUPERVISOR
|
||||
GROUP BY DADOS.CODSUPERVISOR, PCSUPERV.NOME
|
||||
ORDER BY SUM(DADOS.VLVENDA) DESC`;
|
||||
|
||||
const sale = await queryRunner.query(sqlSale);
|
||||
const saleBySupervisor = await queryRunner.query(sqlSaleBySupervisor);
|
||||
|
||||
const data = { ...sale[0], saleSupervisor: [...saleBySupervisor] };
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
throw error;
|
||||
} finally {
|
||||
await queryRunner.release();
|
||||
await connection.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async dashboardSeller(supervisorId: number, supervisorIds: string) {
|
||||
const connection = new Connection(connectionOptions);
|
||||
await connection.connect();
|
||||
const queryRunner = connection.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
try {
|
||||
let filter = '';
|
||||
if (supervisorId != null) {
|
||||
filter = `CODSUPERVISOR = ${supervisorId} `;
|
||||
}
|
||||
if (supervisorIds != null) {
|
||||
filter = `CODSUPERVISOR IN ( ${supervisorIds} )`;
|
||||
}
|
||||
|
||||
const sqlDashboard = `SELECT PCSUPERV.CODSUPERVISOR as "supervisorId",
|
||||
PCSUPERV.NOME as "store",
|
||||
PCUSUARI.CODUSUR as "sellerId",
|
||||
PCUSUARI.NOME as "sellerName",
|
||||
MAX(DIASMES.QTDIAS) as "qtdeDaysMonth",
|
||||
MAX(DIASMES.QTDIASTRANSCORRIDOS) as "qtdeDays",
|
||||
SUM(DADOS.VLMETA) as "objetivo" ,
|
||||
SUM(DADOS.VLVENDA) as "saleValue",
|
||||
SUM(DADOS.VLDEVOLUCAO) as "devolution",
|
||||
( SUM(DADOS.VLVENDA) - SUM(DADOS.VLMETA) ) as "dif",
|
||||
ROUND(CASE WHEN ( SUM(DADOS.VLVENDA) - SUM(DADOS.VLMETA) ) < 0 THEN
|
||||
( SUM(DADOS.VLMETA) - SUM(DADOS.VLVENDA) ) /
|
||||
DECODE(( MAX(DIASMES.QTDIAS) - MAX(DIASMES.QTDIASTRANSCORRIDOS) ), 0, 1, ( MAX(DIASMES.QTDIAS) - MAX(DIASMES.QTDIASTRANSCORRIDOS) ) )
|
||||
ELSE 0 END,2) as "ObjetivoSale",
|
||||
( CASE WHEN SUM(DADOS.VLMETA) > 0 THEN
|
||||
ROUND(( SUM(DADOS.VLVENDA) / SUM(DADOS.VLMETA) * 100),2)
|
||||
ELSE 0 END ) as "percentualObjective",
|
||||
SUM(DADOS.QTNOTAS) as "qtdeInvoice",
|
||||
CASE WHEN SUM(DADOS.QTNOTAS) > 0 THEN
|
||||
ROUND(( SUM(DADOS.VLVENDA) / SUM(DADOS.QTNOTAS) ),2)
|
||||
ELSE 0 END as "ticket",
|
||||
SUM(DADOS.VLTABELA) as "listPrice",
|
||||
( SUM(DADOS.VLTABELA) - SUM(DADOS.VLVENDA) ) as "discountValue",
|
||||
ROUND(CASE WHEN SUM(DADOS.VLTABELA) > 0 THEN
|
||||
( ( SUM(DADOS.VLTABELA) - SUM(DADOS.VLVENDA) ) / SUM(DADOS.VLTABELA) * 100 )
|
||||
ELSE 0 END,2) as "percentOff",
|
||||
SUM(DADOS.MIX) as "mix",
|
||||
SUM(DADOS.VLMETADIA) as "objetiveToday",
|
||||
SUM(DADOS.VLVENDADIA) as "saleToday",
|
||||
SUM(DADOS.VLORCAMENTO) as "preSaleValue",
|
||||
SUM(DADOS.QTORCAMENTO) as "preSaleQtde",
|
||||
SUM(DADOS.QTNOTASDIA) as "qtdeInvoiceDay",
|
||||
SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORA / 100) as "objetiveHour",
|
||||
( CASE WHEN SUM(DADOS.VLMETADIA) > 0 THEN
|
||||
ROUND(( SUM(DADOS.VLVENDADIA) / SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORA / 100) * 100),2)
|
||||
ELSE 0 END ) as "percentualObjectiveHour",
|
||||
SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORATOTAL / 100) as "objetiveTotalHour",
|
||||
( CASE WHEN SUM(DADOS.VLMETADIA) > 0 THEN
|
||||
ROUND(( SUM(DADOS.VLVENDADIA) / SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORATOTAL / 100) * 100),2)
|
||||
ELSE 0 END ) as "percentualObjectiveTotalHour"
|
||||
FROM ( SELECT PCMETARCA.CODUSUR,
|
||||
SUM(PCMETARCA.VLVENDAPREV) VLMETA,
|
||||
0 VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
0 VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
0 QTNOTASDIA
|
||||
FROM PCMETARCA
|
||||
WHERE PCMETARCA.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),-1)) + 1 AND LAST_DAY(TRUNC(SYSDATE))
|
||||
GROUP BY PCMETARCA.CODUSUR
|
||||
UNION ALL
|
||||
SELECT PCMETARCA.CODUSUR,
|
||||
0 VLMETA,
|
||||
0 VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
0 VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
SUM(PCMETARCA.VLVENDAPREV) VLMETADIA,
|
||||
0 QTNOTASDIA
|
||||
FROM PCMETARCA
|
||||
WHERE PCMETARCA.DATA = TRUNC(SYSDATE)
|
||||
GROUP BY PCMETARCA.CODUSUR
|
||||
UNION ALL
|
||||
SELECT VENDAS.CODUSUR,
|
||||
0 VLMETA,
|
||||
SUM(VENDAS.VLVENDA) VLVENDA,
|
||||
COUNT(DISTINCT VENDAS.NUMPED) QTNOTAS,
|
||||
SUM(VENDAS.VLTABELA) VLTABELA,
|
||||
COUNT(DISTINCT VENDAS.CODPROD) MIX,
|
||||
0 VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
0 QTNOTASDIA
|
||||
FROM view_vendas_resumo_faturamento VENDAS
|
||||
WHERE VENDAS.DTSAIDA BETWEEN LAST_DAY(ADD_MONTHS((TRUNC(SYSDATE) - 1),-1)) + 1 AND TRUNC(SYSDATE)
|
||||
AND VENDAS.CONDVENDA IN (1,7)
|
||||
GROUP BY VENDAS.CODUSUR
|
||||
UNION ALL
|
||||
SELECT DEVOLUCAO.CODUSURDEVOL CODUSUR,
|
||||
0 VLMETA,
|
||||
SUM(DEVOLUCAO.VLDEVOLUCAO * (-1)) VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
0 VLVENDADIA,
|
||||
SUM(DEVOLUCAO.VLDEVOLUCAO) VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
0 QTNOTASDIA
|
||||
FROM view_devol_resumo_faturamento DEVOLUCAO
|
||||
WHERE DEVOLUCAO.DTENT BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE)-1,-1)) + 1 AND TRUNC(SYSDATE)
|
||||
GROUP BY DEVOLUCAO.CODUSURDEVOL
|
||||
UNION ALL
|
||||
SELECT VENDAS.CODUSUR,
|
||||
0 VLMETA,
|
||||
0 VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
SUM(VENDAS.VLVENDA) VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
COUNT(DISTINCT VENDAS.NUMPED) QTNOTASDIA
|
||||
FROM view_vendas_resumo_faturamento VENDAS
|
||||
WHERE VENDAS.DTSAIDA = TRUNC(SYSDATE)
|
||||
AND VENDAS.CONDVENDA IN (1,7)
|
||||
GROUP BY VENDAS.CODUSUR
|
||||
UNION ALL
|
||||
SELECT DEVOLUCAO.CODUSURDEVOL CODUSUR,
|
||||
0 VLMETA,
|
||||
0 VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
SUM(DEVOLUCAO.VLDEVOLUCAO * (-1)) VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
0 QTNOTASDIA
|
||||
FROM view_devol_resumo_faturamento DEVOLUCAO
|
||||
WHERE DEVOLUCAO.DTENT = TRUNC(SYSDATE)
|
||||
GROUP BY DEVOLUCAO.CODUSURDEVOL
|
||||
UNION ALL
|
||||
SELECT PCORCAVENDAC.CODUSUR,
|
||||
0 VLMETA,
|
||||
0 VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
0 VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
SUM(PCORCAVENDAC.VLATEND) VLORCAMENTO,
|
||||
COUNT(DISTINCT PCORCAVENDAC.NUMORCA) QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
0 QTNOTASDIA
|
||||
FROM PCORCAVENDAC
|
||||
WHERE NVL(PCORCAVENDAC.ORCAMENTOUTILIZADO,'N') = 'N'
|
||||
AND PCORCAVENDAC.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE) - 1, -1)) + 1 AND TRUNC(SYSDATE)
|
||||
GROUP BY PCORCAVENDAC.CODUSUR
|
||||
,PCORCAVENDAC.CODSUPERVISOR
|
||||
) DADOS,
|
||||
( SELECT COUNT(1) QTDIAS
|
||||
,COUNT(CASE WHEN PCDIASUTEIS.DATA < TRUNC(SYSDATE) THEN 1 ELSE NULL END) QTDIASTRANSCORRIDOS
|
||||
FROM PCDIASUTEIS
|
||||
WHERE PCDIASUTEIS.CODFILIAL = '4'
|
||||
AND PCDIASUTEIS.DIAVENDAS = 'S'
|
||||
AND PCDIASUTEIS.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),-1)) + 1 AND LAST_DAY(TRUNC(SYSDATE)) ) DIASMES,
|
||||
(SELECT ESTMETAHORA.CODSUPERVISOR,
|
||||
CASE WHEN TO_CHAR(SYSDATE, 'D') = 7 THEN
|
||||
ESTMETAHORA.PERCMETADOM
|
||||
ELSE ESTMETAHORA.PERCMETAHORA END PERCMETAHORA
|
||||
, CASE WHEN TO_CHAR(SYSDATE, 'D') = 7 THEN
|
||||
ESTMETAHORA.PERCMETADOMTOTAL
|
||||
ELSE ESTMETAHORA.PERCMETAHORATOTAL END PERCMETAHORATOTAL
|
||||
FROM ESTMETAHORA
|
||||
WHERE ESTMETAHORA.${filter}
|
||||
AND TO_CHAR(HORA, 'HH24') = TO_CHAR(SYSDATE, 'HH24')) META_HORA,
|
||||
PCUSUARI, PCSUPERV
|
||||
WHERE PCUSUARI.CODUSUR = DADOS.CODUSUR
|
||||
AND PCUSUARI.CODSUPERVISOR = PCSUPERV.CODSUPERVISOR
|
||||
AND PCUSUARI.CODSUPERVISOR = META_HORA.CODSUPERVISOR
|
||||
AND PCUSUARI.${filter}
|
||||
-- HAVING SUM(DADOS.VLMETA) > 0
|
||||
GROUP BY PCSUPERV.CODSUPERVISOR, PCSUPERV.NOME, PCUSUARI.CODUSUR, PCUSUARI.NOME
|
||||
ORDER BY PCUSUARI.NOME`;
|
||||
|
||||
const saleByRCA = await queryRunner.query(sqlDashboard);
|
||||
let initialValue = 0;
|
||||
const totalSale = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.saleValue,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalObjetive = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.objetivo,
|
||||
initialValue,
|
||||
);
|
||||
initialValue = 0;
|
||||
const totalObjetiveDay = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.objetiveToday,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalDiscount = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.discountValue,
|
||||
initialValue,
|
||||
);
|
||||
initialValue = 0;
|
||||
const totalMix = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.mix,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalNFs = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.qtdeInvoice,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalSaleToday = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.saleToday,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalDevolution = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.devolution,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalQtNfsDia = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.qtdeInvoiceDay,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
const percentualSale = Number.parseFloat(((totalSale / totalObjetive) * 100).toFixed(2));
|
||||
|
||||
initialValue = 0;
|
||||
const totalObjetiveHour = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.objetiveHour,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
const percentualObjetiveHour = Number.parseFloat(((totalSaleToday / totalObjetiveHour) * 100).toFixed(2));
|
||||
|
||||
|
||||
initialValue = 0;
|
||||
const totalObjetiveCompanyHour = saleByRCA.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.objetiveTotalHour,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
const percentualObjetiveCompanyHour = Number.parseFloat(((totalSaleToday / totalObjetiveCompanyHour) * 100).toFixed(2));
|
||||
|
||||
|
||||
|
||||
const data = {
|
||||
objetive: totalObjetive, sale: totalSale, percentualSale: percentualSale,
|
||||
discount: totalDiscount, nfs: totalNFs, mix: totalMix, objetiveToday: totalObjetiveDay,
|
||||
saleToday: totalSaleToday, nfsToday: totalQtNfsDia, devolution: totalDevolution,
|
||||
objetiveHour: totalObjetiveHour, percentualObjetiveHour: percentualObjetiveHour,
|
||||
objetiveTotalHour: totalObjetiveCompanyHour, percentualObjetiveTotalHour: percentualObjetiveCompanyHour,
|
||||
saleSupervisor: [...saleByRCA]
|
||||
};
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
throw error;
|
||||
} finally {
|
||||
await queryRunner.release();
|
||||
await connection.close();
|
||||
}
|
||||
}
|
||||
|
||||
async dashboardCompany() { //supervisorId: number, supervisorIds: string) {
|
||||
const connection = new Connection(connectionOptions);
|
||||
await connection.connect();
|
||||
const queryRunner = connection.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
try {
|
||||
|
||||
const sqlDashboard = `SELECT PCSUPERV.CODSUPERVISOR as "supervisorId",
|
||||
PCSUPERV.NOME as "store",
|
||||
MAX(DIASMES.QTDIAS) as "qtdeDaysMonth",
|
||||
MAX(DIASMES.QTDIASTRANSCORRIDOS) as "qtdeDays",
|
||||
SUM(DADOS.VLMETA) as "objetivo" ,
|
||||
SUM(DADOS.VLVENDA) as "saleValue",
|
||||
SUM(DADOS.VLDEVOLUCAO) as "devolution",
|
||||
( SUM(DADOS.VLVENDA) - SUM(DADOS.VLMETA) ) as "dif",
|
||||
ROUND(CASE WHEN ( SUM(DADOS.VLVENDA) - SUM(DADOS.VLMETA) ) < 0 THEN
|
||||
( SUM(DADOS.VLMETA) - SUM(DADOS.VLVENDA) ) /
|
||||
DECODE(( MAX(DIASMES.QTDIAS) - MAX(DIASMES.QTDIASTRANSCORRIDOS) ), 0, 1, ( MAX(DIASMES.QTDIAS) - MAX(DIASMES.QTDIASTRANSCORRIDOS) ) )
|
||||
ELSE 0 END,2) as "ObjetivoSale",
|
||||
( CASE WHEN SUM(DADOS.VLMETA) > 0 THEN
|
||||
ROUND(( SUM(DADOS.VLVENDA) / SUM(DADOS.VLMETA) * 100),2)
|
||||
ELSE 0 END ) as "percentualObjective",
|
||||
SUM(DADOS.QTNOTAS) as "qtdeInvoice",
|
||||
CASE WHEN SUM(DADOS.QTNOTAS) > 0 THEN
|
||||
ROUND(( SUM(DADOS.VLVENDA) / SUM(DADOS.QTNOTAS) ),2)
|
||||
ELSE 0 END as "ticket",
|
||||
SUM(DADOS.VLTABELA) as "listPrice",
|
||||
( SUM(DADOS.VLTABELA) - SUM(DADOS.VLVENDA) ) as "discountValue",
|
||||
ROUND(CASE WHEN SUM(DADOS.VLTABELA) > 0 THEN
|
||||
( ( SUM(DADOS.VLTABELA) - SUM(DADOS.VLVENDA) ) / SUM(DADOS.VLTABELA) * 100 )
|
||||
ELSE 0 END,2) as "percentOff",
|
||||
SUM(DADOS.MIX) as "mix",
|
||||
SUM(DADOS.VLMETADIA) as "objetiveToday",
|
||||
SUM(DADOS.VLVENDADIA) as "saleToday",
|
||||
SUM(DADOS.VLORCAMENTO) as "preSaleValue",
|
||||
SUM(DADOS.QTORCAMENTO) as "preSaleQtde",
|
||||
SUM(DADOS.QTNOTASDIA) as "qtdeInvoiceDay",
|
||||
SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORA / 100) as "objetiveHour",
|
||||
( CASE WHEN SUM(DADOS.VLMETADIA) > 0 THEN
|
||||
ROUND(( SUM(DADOS.VLVENDADIA) / SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORA / 100) * 100),2)
|
||||
ELSE 0 END ) as "percentualObjectiveHour",
|
||||
SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORATOTAL / 100) as "objetiveTotalHour",
|
||||
( CASE WHEN SUM(DADOS.VLMETADIA) > 0 THEN
|
||||
ROUND(( SUM(DADOS.VLVENDADIA) / SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORATOTAL / 100) * 100),2)
|
||||
ELSE 0 END ) as "percentualObjectiveTotalHour",
|
||||
SUM(DADOS.VLCUSTOFIN) as "profitValue"
|
||||
FROM ( SELECT PCMETARCA.CODUSUR,
|
||||
SUM(PCMETARCA.VLVENDAPREV) VLMETA,
|
||||
0 VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
0 VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
0 QTNOTASDIA,
|
||||
0 VLCUSTOFIN
|
||||
FROM PCMETARCA
|
||||
WHERE PCMETARCA.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),-1)) + 1 AND TRUNC(SYSDATE) - 1
|
||||
GROUP BY PCMETARCA.CODUSUR
|
||||
UNION ALL
|
||||
SELECT PCMETARCA.CODUSUR,
|
||||
0 VLMETA,
|
||||
0 VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
0 VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
SUM(PCMETARCA.VLVENDAPREV) VLMETADIA,
|
||||
0 QTNOTASDIA,
|
||||
0 VLCUSTOFIN
|
||||
FROM PCMETARCA
|
||||
WHERE PCMETARCA.DATA = TRUNC(SYSDATE)
|
||||
GROUP BY PCMETARCA.CODUSUR
|
||||
UNION ALL
|
||||
SELECT VENDAS.CODUSUR,
|
||||
0 VLMETA,
|
||||
SUM(VENDAS.VLVENDA) VLVENDA,
|
||||
COUNT(DISTINCT VENDAS.NUMPED) QTNOTAS,
|
||||
SUM(VENDAS.VLTABELA) VLTABELA,
|
||||
COUNT(DISTINCT VENDAS.CODPROD) MIX,
|
||||
0 VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
0 QTNOTASDIA,
|
||||
0 VLCUSTOFIN
|
||||
FROM view_vendas_resumo_faturamento VENDAS
|
||||
WHERE VENDAS.DTSAIDA BETWEEN LAST_DAY(ADD_MONTHS((TRUNC(SYSDATE) - 1),-1)) + 1 AND TRUNC(SYSDATE) - 1
|
||||
AND VENDAS.CONDVENDA IN (1,7)
|
||||
GROUP BY VENDAS.CODUSUR
|
||||
UNION ALL
|
||||
SELECT DEVOLUCAO.CODUSURDEVOL CODUSUR,
|
||||
0 VLMETA,
|
||||
SUM(DEVOLUCAO.VLDEVOLUCAO * (-1)) VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
0 VLVENDADIA,
|
||||
SUM(DEVOLUCAO.VLDEVOLUCAO) VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
0 QTNOTASDIA,
|
||||
0 VLCUSTOFIN
|
||||
FROM view_devol_resumo_faturamento DEVOLUCAO
|
||||
WHERE DEVOLUCAO.DTENT BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE)-1,-1)) + 1 AND TRUNC(SYSDATE) - 1
|
||||
GROUP BY DEVOLUCAO.CODUSURDEVOL
|
||||
UNION ALL
|
||||
SELECT VENDAS.CODUSUR,
|
||||
0 VLMETA,
|
||||
0 VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
SUM(VENDAS.VLVENDA) VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
COUNT(DISTINCT VENDAS.NUMPED) QTNOTASDIA,
|
||||
SUM(VENDAS.VLCUSTOFIN) VLCUSTOFIN
|
||||
FROM view_vendas_resumo_faturamento VENDAS
|
||||
WHERE VENDAS.DTSAIDA = TRUNC(SYSDATE)
|
||||
AND VENDAS.CONDVENDA IN (1,7)
|
||||
GROUP BY VENDAS.CODUSUR
|
||||
UNION ALL
|
||||
SELECT DEVOLUCAO.CODUSURDEVOL CODUSUR,
|
||||
0 VLMETA,
|
||||
0 VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
SUM(DEVOLUCAO.VLDEVOLUCAO * (-1)) VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
0 VLORCAMENTO,
|
||||
0 QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
0 QTNOTASDIA,
|
||||
SUM(DEVOLUCAO.VLCUSTOFIN * (-1)) VLCUSTOFIN
|
||||
FROM view_devol_resumo_faturamento DEVOLUCAO
|
||||
WHERE DEVOLUCAO.DTENT = TRUNC(SYSDATE)
|
||||
GROUP BY DEVOLUCAO.CODUSURDEVOL
|
||||
UNION ALL
|
||||
SELECT PCORCAVENDAC.CODUSUR,
|
||||
0 VLMETA,
|
||||
0 VLVENDA,
|
||||
0 QTNOTAS,
|
||||
0 VLTABELA,
|
||||
0 MIX,
|
||||
0 VLVENDADIA,
|
||||
0 VLDEVOLUCAO,
|
||||
SUM(PCORCAVENDAC.VLATEND) VLORCAMENTO,
|
||||
COUNT(DISTINCT PCORCAVENDAC.NUMORCA) QTORCAMENTO,
|
||||
0 VLMETADIA,
|
||||
0 QTNOTASDIA,
|
||||
0 VLCUSTOFIN
|
||||
FROM PCORCAVENDAC
|
||||
WHERE NVL(PCORCAVENDAC.ORCAMENTOUTILIZADO,'N') = 'N'
|
||||
AND PCORCAVENDAC.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE) - 1, -1)) + 1 AND TRUNC(SYSDATE)
|
||||
GROUP BY PCORCAVENDAC.CODUSUR
|
||||
,PCORCAVENDAC.CODSUPERVISOR
|
||||
) DADOS,
|
||||
( SELECT COUNT(1) QTDIAS
|
||||
,COUNT(CASE WHEN PCDIASUTEIS.DATA < TRUNC(SYSDATE) THEN 1 ELSE NULL END) QTDIASTRANSCORRIDOS
|
||||
FROM PCDIASUTEIS
|
||||
WHERE PCDIASUTEIS.CODFILIAL = '4'
|
||||
AND PCDIASUTEIS.DIAVENDAS = 'S'
|
||||
AND PCDIASUTEIS.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),-1)) + 1 AND LAST_DAY(TRUNC(SYSDATE)) ) DIASMES,
|
||||
(SELECT ESTMETAHORA.CODSUPERVISOR,
|
||||
CASE WHEN TO_CHAR(SYSDATE, 'D') = 7 THEN
|
||||
ESTMETAHORA.PERCMETADOM
|
||||
ELSE ESTMETAHORA.PERCMETAHORA END PERCMETAHORA
|
||||
, CASE WHEN TO_CHAR(SYSDATE, 'D') = 7 THEN
|
||||
ESTMETAHORA.PERCMETADOMTOTAL
|
||||
ELSE ESTMETAHORA.PERCMETAHORATOTAL END PERCMETAHORATOTAL
|
||||
FROM ESTMETAHORA
|
||||
WHERE TO_CHAR(HORA, 'HH24') = TO_CHAR(SYSDATE, 'HH24')) META_HORA,
|
||||
PCUSUARI, PCSUPERV
|
||||
WHERE PCUSUARI.CODUSUR = DADOS.CODUSUR
|
||||
AND PCUSUARI.CODSUPERVISOR = PCSUPERV.CODSUPERVISOR
|
||||
AND PCUSUARI.CODSUPERVISOR = META_HORA.CODSUPERVISOR
|
||||
-- HAVING SUM(DADOS.VLMETA) > 0
|
||||
GROUP BY PCSUPERV.CODSUPERVISOR, PCSUPERV.NOME
|
||||
ORDER BY PCSUPERV.NOME`;
|
||||
|
||||
const saleByStore = await queryRunner.query(sqlDashboard);
|
||||
let initialValue = 0;
|
||||
const totalSale = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.saleValue,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalObjetive = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.objetivo,
|
||||
initialValue,
|
||||
);
|
||||
initialValue = 0;
|
||||
const totalObjetiveDay = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.objetiveToday,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalDiscount = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.discountValue,
|
||||
initialValue,
|
||||
);
|
||||
initialValue = 0;
|
||||
const totalMix = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.mix,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalNFs = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.qtdeInvoice,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalSaleToday = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.saleToday,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalDevolution = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.devolution,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
initialValue = 0;
|
||||
const totalQtNfsDia = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.qtdeInvoiceDay,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
const percentualSale = Number.parseFloat(((totalSale / totalObjetive) * 100).toFixed(2));
|
||||
|
||||
initialValue = 0;
|
||||
const totalObjetiveHour = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.objetiveHour,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
const percentualObjetiveHour = Number.parseFloat(((totalSaleToday / totalObjetiveHour) * 100).toFixed(2));
|
||||
|
||||
|
||||
initialValue = 0;
|
||||
const totalObjetiveCompanyHour = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.objetiveTotalHour,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
const percentualObjetiveCompanyHour = Number.parseFloat(((totalSaleToday / totalObjetiveCompanyHour) * 100).toFixed(2));
|
||||
|
||||
initialValue = 0;
|
||||
const totalProfitCompany = saleByStore.reduce(
|
||||
(accumulator, currentValue) => accumulator + currentValue.profitValue,
|
||||
initialValue,
|
||||
);
|
||||
|
||||
const profitPerc = ( ( totalSaleToday - totalProfitCompany) / totalSaleToday ) * 100;
|
||||
const profitValue = ( totalSaleToday - totalProfitCompany);
|
||||
|
||||
|
||||
const data = {
|
||||
objetive: totalObjetive, sale: totalSale, percentualSale: percentualSale,
|
||||
discount: totalDiscount, nfs: totalNFs, mix: totalMix, objetiveToday: totalObjetiveDay,
|
||||
saleToday: totalSaleToday, nfsToday: totalQtNfsDia, devolution: totalDevolution,
|
||||
objetiveHour: totalObjetiveHour, percentualObjetiveHour: percentualObjetiveHour,
|
||||
objetiveTotalHour: totalObjetiveCompanyHour, percentualObjetiveTotalHour: percentualObjetiveCompanyHour,
|
||||
profitValue: profitValue, profitPerc: profitPerc,
|
||||
saleSupervisor: [...saleByStore]
|
||||
};
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
throw error;
|
||||
} finally {
|
||||
await queryRunner.release();
|
||||
await connection.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user