Merge pull request #22 from JurunenseDesenvolvimento/FEAT_SelecaoAutomaticaFilialRetira

Feat selecao automatica filial retira
This commit is contained in:
eduardoestevao-appsoluti 2025-09-17 09:58:47 -03:00 committed by GitHub
commit 19e1317e3a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 92 additions and 5 deletions

View File

@ -176,6 +176,20 @@ export class SalesController {
} }
} }
@Get('product/simil/:id')
@ApiOperation({ summary: 'Get products similar' })
@ApiParam({ name: 'id', description: 'Product ID' })
async getProductSimil(@Headers() headers, @Param('id') id: number) {
try {
const { store } = this.extractPaginationParams(headers);
return await this.salesService.GetProductsSimil(store, id);
} catch (e) {
throw new HttpException(e.message, HttpStatus.BAD_REQUEST);
}
}
@Get('stock/:storeid/:id') @Get('stock/:storeid/:id')
@ApiOperation({ summary: 'Get product stock information' }) @ApiOperation({ summary: 'Get product stock information' })
@ApiParam({ name: 'storeid', description: 'Store ID' }) @ApiParam({ name: 'storeid', description: 'Store ID' })

View File

@ -77,7 +77,8 @@ export class SalesService {
esvlistaprodutos.LETRABASETINTOMETRICO as "letter", esvlistaprodutos.LETRABASETINTOMETRICO as "letter",
esvlistaprodutos.LINHATINTOMETRICO as "line", esvlistaprodutos.LINHATINTOMETRICO as "line",
esvlistaprodutos.LITRAGEM as "can", esvlistaprodutos.LITRAGEM as "can",
esvlistaprodutos.QUANTIDADE_ESTOQUE_GERAL as "full_stock" esvlistaprodutos.QUANTIDADE_ESTOQUE_GERAL as "full_stock",
esvlistaprodutos.TEM_PRODUTO_SIMILAR as "similar"
FROM ESVLISTAPRODUTOS FROM ESVLISTAPRODUTOS
WHERE 1 = 1`; WHERE 1 = 1`;
@ -127,6 +128,7 @@ export class SalesService {
.addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line") .addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line")
.addSelect("\"esvlistaprodutos\".LITRAGEM", "can") .addSelect("\"esvlistaprodutos\".LITRAGEM", "can")
.addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock")
.addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar")
.where("UPPER(\"esvlistaprodutos\".CODFAB) LIKE '%'||REPLACE(:description, '@', '%')||'%'", { description }) .where("UPPER(\"esvlistaprodutos\".CODFAB) LIKE '%'||REPLACE(:description, '@', '%')||'%'", { description })
.andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store })
.andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')",
@ -184,6 +186,7 @@ export class SalesService {
.addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line") .addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line")
.addSelect("\"esvlistaprodutos\".LITRAGEM", "can") .addSelect("\"esvlistaprodutos\".LITRAGEM", "can")
.addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock")
.addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar")
.where("UPPER(\"esvlistaprodutos\".descricao) LIKE '%'||REPLACE(:description, '@', '%')||'%'", { description }) .where("UPPER(\"esvlistaprodutos\".descricao) LIKE '%'||REPLACE(:description, '@', '%')||'%'", { description })
.andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store })
.andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')",
@ -260,6 +263,7 @@ export class SalesService {
.addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line") .addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line")
.addSelect("\"esvlistaprodutos\".LITRAGEM", "can") .addSelect("\"esvlistaprodutos\".LITRAGEM", "can")
.addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock")
.addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar")
.where("esvlistaprodutos.brand in (" + xbrands + ")") .where("esvlistaprodutos.brand in (" + xbrands + ")")
.andWhere("\"esvlistaprodutos\".URLCATEGORIA LIKE :urlCategoria||'%'", { urlCategoria: filter.urlCategory }) .andWhere("\"esvlistaprodutos\".URLCATEGORIA LIKE :urlCategoria||'%'", { urlCategoria: filter.urlCategory })
.andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store })
@ -324,6 +328,7 @@ export class SalesService {
.addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line") .addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line")
.addSelect("\"esvlistaprodutos\".LITRAGEM", "can") .addSelect("\"esvlistaprodutos\".LITRAGEM", "can")
.addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock")
.addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar")
.where("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) .where("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store })
.andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')",
{ produtoComReducaoPreco: (filter.markdown.toString() == 'true') ? 'S' : 'N' }) { produtoComReducaoPreco: (filter.markdown.toString() == 'true') ? 'S' : 'N' })
@ -562,6 +567,7 @@ export class SalesService {
.addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing")
.addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base")
.addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock")
.addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar")
.where("esvlistaprodutos.idProduct = :id", { id: numbers }) .where("esvlistaprodutos.idProduct = :id", { id: numbers })
.andWhere("\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99'", { codfilial: store }) .andWhere("\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99'", { codfilial: store })
.limit(pageSize) .limit(pageSize)
@ -608,7 +614,8 @@ export class SalesService {
.addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice")
.addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing")
.addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base")
.addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock")
.addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar")
.where("esvlistaprodutos.CODAUXILIAR = :id", { id: numbers }) .where("esvlistaprodutos.CODAUXILIAR = :id", { id: numbers })
.andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store })
.limit(pageSize) .limit(pageSize)
@ -657,7 +664,8 @@ export class SalesService {
.addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice")
.addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing")
.addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base")
.addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock")
.addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar")
.where("UPPER(esvlistaprodutos.CODFAB) like REPLACE(:description, '@', '%')", { description }) .where("UPPER(esvlistaprodutos.CODFAB) like REPLACE(:description, '@', '%')", { description })
.andWhere("\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99'", { codfilial: store }) .andWhere("\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99'", { codfilial: store })
.limit(pageSize) .limit(pageSize)
@ -703,7 +711,8 @@ export class SalesService {
.addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice")
.addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing")
.addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base")
.addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock")
.addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar")
.where("UPPER(esvlistaprodutos.DESCRICAO) like REPLACE(:description, '@', '%')", { description }) .where("UPPER(esvlistaprodutos.DESCRICAO) like REPLACE(:description, '@', '%')", { description })
.andWhere("\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99'", { codfilial: store }) .andWhere("\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99'", { codfilial: store })
.limit(pageSize) .limit(pageSize)
@ -772,7 +781,8 @@ export class SalesService {
.addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice")
.addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing")
.addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base")
.addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock")
.addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar")
.where("esvlistaprodutos.idProduct = :id", { id: id }) .where("esvlistaprodutos.idProduct = :id", { id: id })
.andWhere("\"esvlistaprodutos\".codfilial = :codfilial", { codfilial: store }) .andWhere("\"esvlistaprodutos\".codfilial = :codfilial", { codfilial: store })
.orderBy("REPLACE(\"esvlistaprodutos\".DESCRICAO,'#', '')", "ASC") .orderBy("REPLACE(\"esvlistaprodutos\".DESCRICAO,'#', '')", "ASC")
@ -834,6 +844,7 @@ export class SalesService {
,esvlistaprodutos.PRODUTO_EM_CAMPANHA as "compaing" ,esvlistaprodutos.PRODUTO_EM_CAMPANHA as "compaing"
,esvlistaprodutos.BASETINTOMETRICO as "base" ,esvlistaprodutos.BASETINTOMETRICO as "base"
,esvlistaprodutos.QUANTIDADE_ESTOQUE_GERAL as "full_stock" ,esvlistaprodutos.QUANTIDADE_ESTOQUE_GERAL as "full_stock"
,esvlistaprodutos.TEM_PRODUTO_SIMILAR as "similar"
FROM ESVLISTAPRODUTOS, ESTCOMPREJUNTO FROM ESVLISTAPRODUTOS, ESTCOMPREJUNTO
WHERE ESVLISTAPRODUTOS.CODPROD = ESTCOMPREJUNTO.CODPROD WHERE ESVLISTAPRODUTOS.CODPROD = ESTCOMPREJUNTO.CODPROD
AND ESTCOMPREJUNTO.CODPRODVENDA = ${id} AND ESTCOMPREJUNTO.CODPRODVENDA = ${id}
@ -851,6 +862,67 @@ export class SalesService {
} }
} }
async GetProductsSimil(store: string, id: number) {
const connectionDb = new Connection(connectionOptions);
await connectionDb.connect();
const queryRunner = connectionDb.createQueryRunner();
await queryRunner.connect();
try {
const sql = `SELECT esvlistaprodutos.CODPROD as "idProduct"
,esvlistaprodutos.SEQ as "seq"
,esvlistaprodutos.DESCRICAO as "smallDescription"
,esvlistaprodutos.NOMEECOMMERCE as "title"
,esvlistaprodutos.CODFAB as "idProvider"
,esvlistaprodutos.CODAUXILIAR as "ean"
,esvlistaprodutos.TIPOPRODUTO as "productType"
,esvlistaprodutos.DADOSTECNICOS as "technicalData"
,esvlistaprodutos.INFORMACOESTECNICAS as "description"
,esvlistaprodutos.URLIMAGEM as "urlImage"
,esvlistaprodutos.NOMEMARCA as "brand"
,esvlistaprodutos.NOMEDEPARTAMENTO as "department"
,esvlistaprodutos.NOMESECAO as "section"
,esvlistaprodutos.NOMECATEGORIA as "category"
,esvlistaprodutos.NOMEFORNECEDOR as "supplier"
,esvlistaprodutos.CODIGOFILIAL as "store"
,esvlistaprodutos.CLASSEVENDA as "saleAbc"
,esvlistaprodutos.CLASSEESTOQUE as "stockAbc"
,esvlistaprodutos.FORALINHA as "outLine"
,esvlistaprodutos.PRECOVENDA as "listPrice"
,esvlistaprodutos.PRECOPROMOCIONAL as "salePrice"
,esvlistaprodutos.PRECOPROMOCIONAL as "salePromotion"
,esvlistaprodutos.PERCENTUALDESCONTO as"offPercent"
,esvlistaprodutos.QTESTOQUE_DISPONIVEL as "stock"
,esvlistaprodutos.QTCAIXAS as "boxStock"
,esvlistaprodutos.ESTOQUE_DISP_LOJA as "store_stock"
,esvlistaprodutos.ESTOQUE_DISP_CAIXA_LOJA as "store_boxStock"
,esvlistaprodutos.ESTOQUE_DISP_LOJA as "store_stock"
,esvlistaprodutos.ESTOQUE_DISP_CAIXA_LOJA as "store_boxStock"
,esvlistaprodutos.MULTIPLO as "mutiple"
,esvlistaprodutos.UNIDADE as "unity"
,esvlistaprodutos.URLDEPARTAMENTO as "urlDepartment"
,esvlistaprodutos.URLSECAO as "urlSection"
,esvlistaprodutos.PRODUTO_COM_REDUCAO_PRECO as "downPrice"
,esvlistaprodutos.PRODUTO_EM_CAMPANHA as "compaing"
,esvlistaprodutos.BASETINTOMETRICO as "base"
,esvlistaprodutos.QUANTIDADE_ESTOQUE_GERAL as "full_stock"
,esvlistaprodutos.TEM_PRODUTO_SIMILAR as "similar"
FROM ESVLISTAPRODUTOS, PCPRODSIMIL
WHERE ESVLISTAPRODUTOS.CODPROD = PCPRODSIMIL.CODSIMIL
AND PCPRODSIMIL.CODPROD = ${id}
AND ESVLISTAPRODUTOS.CODFILIAL = '${store}'
ORDER BY REPLACE(esvlistaprodutos.DESCRICAO,'#', '')`;
let products: SalesProduct[] = await queryRunner.query(sql);
products = this.createListImages(products);
return products;
} catch (error) {
throw error;
} finally {
await queryRunner.release();
await connectionDb.close();
}
}
async GetStocks(storeId: string, id: number) { async GetStocks(storeId: string, id: number) {
const connectionDb = new Connection(connectionOptions); const connectionDb = new Connection(connectionOptions);
await connectionDb.connect(); await connectionDb.connect();
@ -1265,6 +1337,7 @@ export class SalesService {
' ,esvlistaprodutos.LINHATINTOMETRICO "line" ' + ' ,esvlistaprodutos.LINHATINTOMETRICO "line" ' +
' ,esvlistaprodutos.LITRAGEM "can" ' + ' ,esvlistaprodutos.LITRAGEM "can" ' +
' ,esvlistaprodutos.QUANTIDADE_ESTOQUE_GERAL "full_stock" ' + ' ,esvlistaprodutos.QUANTIDADE_ESTOQUE_GERAL "full_stock" ' +
' ,esvlistaprodutos.TEM_PRODUTO_SIMILAR "similar" ' +
' FROM esvlistaprodutos ' + ' FROM esvlistaprodutos ' +
' WHERE 1 = 1'; ' WHERE 1 = 1';