vendaweb-api/src/delivery/services/shipping.service.ts

221 lines
7.7 KiB
TypeScript
Raw Normal View History

2025-01-27 20:44:27 +00:00
import { Injectable } from '@nestjs/common';
import { Esventregasporcliente } from 'src/domain/entity/views/esventregasporcliente.entity';
import { Connection, getConnection } from 'typeorm';
import { ResultModel } from '../../domain/models/result.model';
import { Esvretiralojascliente } from '../../domain/entity/views/esventregaslojascliente.entity';
import { EsvRetiraLojas } from '../../domain/entity/views/esvretiralojas.entity';
import { connectionOptions } from 'src/configs/typeorm.config';
2025-01-27 20:44:27 +00:00
@Injectable()
export class ShippingService {
constructor(private connection: Connection) { }
async GetShippingsByCustomer(): Promise<any> {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
/*const user = await this.GetUser(queryRunner);
if (user == null) {
return new ResultModel(false, 'Não foi possível localizar entregas para este usuário',
null,
'Não foi localizado motorista para este usuário.');
}*/
const deliveries = await queryRunner.manager
.getRepository(Esventregasporcliente)
.createQueryBuilder('ESVENTREGASPORCLIENTE')
.select(['cliente as "nomeCliente"'
, 'cgcent as "cnpj_cpf"'
, 'email as "email"'
, 'endereco as "endereco"'
, 'numero as "numero"'
, 'bairro as "bairro"'
, 'complemento as "complemento"'
, 'cidade as "cidade"'
, 'estado as "uf"'
, 'cep as "cep"'
, 'qtpedidos as "quantidadePedidos"'
, 'qtlojas as "quantidaeLojas"'
, 'entrega_concluida as "entregaConcluida"'
, 'telefone as "telefoneCliente"'
, 'celular as "celularCliente"'
, 'codcli as "codigoCliente"'])
.where("email = 'eduardoestevao.gyn@gmail.com'")
.getRawMany();
return deliveries;
} catch (error) {
console.log(error);
return new ResultModel(false, 'Não foi possível consultar as entregas por cliente.',
null,
error);
} finally {
await queryRunner.release();
}
}
async GetCollectByShop(): Promise<any> {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
/*const user = await this.GetUser(queryRunner);
if (user == null) {
return new ResultModel(false, 'Não foi possível localizar entregas para este usuário',
null,
'Não foi localizado motorista para este usuário.');
}*/
const deliveries = await queryRunner.manager
.getRepository(EsvRetiraLojas)
.createQueryBuilder('ESVRETIRALOJAS')
.select(['codigo as "codigoLoja"'
, 'razaosocial as "razaoSocial"'
, 'quantidadepedidos as "quantidadePedidos"'
])
.where("email = 'eduardoestevao.gyn@gmail.com'")
.getRawMany();
return deliveries;
} catch (error) {
console.log(error);
return new ResultModel(false, 'Não foi possível consultar as coletas por loja.',
null,
error);
} finally {
await queryRunner.release();
}
}
async GetCollectByCustomer(id: string): Promise<any> {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
/*const user = await this.GetUser(queryRunner);
if (user == null) {
return new ResultModel(false, 'Não foi possível localizar entregas para este usuário',
null,
'Não foi localizado motorista para este usuário.');
}*/
const deliveries = await queryRunner.manager
.getRepository(Esvretiralojascliente)
.createQueryBuilder('ESVRETIRALOJASCLIENTE')
.select([
'codfilial as "codigoFilial"'
,'numped as "numeroPedido"'
,'numnota as "numeroNota"'
,'dtfat as "dataFaturamento"'
,'datapedido as "dataPedido"'
,'codcli as "codigoCliente"'
,'cliente as "nomeCliente"'
,'codfilialretira as "codigoLoja"'
,'razaosocial as "nomeLoja"'
,'qtitens as "quantidadeItens"'
,'quantidade as "quantidade"'
])
.where("email = 'eduardoestevao.gyn@gmail.com'")
.andWhere("codfilial = :codfilial", {codfilial: id})
.getRawMany();
return deliveries;
} catch (error) {
console.log(error);
return new ResultModel(false, 'Não foi possível consultar as coletas por cliente.',
null,
error);
} finally {
await queryRunner.release();
}
}
async getDeliverySchedule() {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = `SELECT PCDIASUTEIS.DATA as "dateDelivery",
NVL (PCDIASUTEIS.DIAROTA, 'N') as "delivery",
CASE WHEN NVL (PCDIASUTEIS.DIAROTA, 'N') = 'N' THEN 0
ELSE (PARAMFILIAL.OBTERCOMONUMBER ('CAPACIDADE_LOGISTICA', 12)) END as "deliverySize",
ROUND ( (NVL (VENDAS.TOTPESO, 0) / 1000), 3) as "saleWeigth",
CASE WHEN NVL (PCDIASUTEIS.DIAROTA, 'N') = 'N' THEN 0
ELSE ROUND (
GREATEST (
( ( PARAMFILIAL.OBTERCOMONUMBER ('CAPACIDADE_LOGISTICA',
12)
* 1000)
- NVL (VENDAS.TOTPESO, 0))
/ 1000,
0),
3) END as "avaliableDelivery"
FROM PCDIASUTEIS,
( SELECT PCPEDC.DTENTREGA, SUM (PCPEDC.TOTPESO) TOTPESO
FROM PCPEDC
WHERE PCPEDC.POSICAO IN ('L', 'M')
AND PCPEDC.CONDVENDA = 8
AND PCPEDC.CODFILIAL IN (12, 13, 4, 6)
AND EXISTS
(SELECT TV7.NUMPED
FROM PCPEDC TV7
WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT
AND TV7.POSICAO = 'F')
AND PCPEDC.DTENTREGA >= TRUNC (SYSDATE) + 3
GROUP BY PCPEDC.DTENTREGA) VENDAS
WHERE PCDIASUTEIS.CODFILIAL = 12 AND PCDIASUTEIS.DATA BETWEEN TRUNC (SYSDATE) + 3 AND TRUNC(SYSDATE) + 20 --AND NVL(PCDIASUTEIS.DIAROTA,'N') = 'S'
AND PCDIASUTEIS.DATA = VENDAS.DTENTREGA(+)
ORDER BY PCDIASUTEIS.DATA `;
const data = await queryRunner.query(sql);
const sqlDeliveryDate = `SELECT TRUNC(SYSDATE) + esf_calcular_prazo_entrega_programada(TRUNC(SYSDATE),
'12',
129, '', 0, 500) as "date"
FROM DUAL`;
const dataDeliveryDate = await queryRunner.query(sqlDeliveryDate);
const dataComplete = { dateDelivery: dataDeliveryDate[0].date, deliveries: [...data] };
return dataComplete;
} finally {
await queryRunner.release();
}
2025-01-27 20:44:27 +00:00
}
}