diff --git a/src/app.module.ts b/src/app.module.ts index b09a08c..7f16c43 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,51 +1,53 @@ -import { Module } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { createOracleConfig } from './core/configs/typeorm.oracle.config'; -import { createPostgresConfig } from './core/configs/typeorm.postgres.config'; -import { LogisticModule } from './logistic/logistic.module'; -import { OrdersPaymentModule } from './orders-payment/orders-payment.module'; -import { ProductsModule } from './products/products.module'; -import { AuthModule } from './auth/auth/auth.module'; -import { DataConsultModule } from './data-consult/data-consult.module'; -import { OrdersModule } from './orders/orders.module'; -import { OcorrencesController } from './crm/occurrences/ocorrences.controller'; -import { OccurrencesModule } from './crm/occurrences/occurrences.module'; -import { ReasonTableModule } from './crm/reason-table/reason-table.module'; -import { NegotiationsModule } from './crm/negotiations/negotiations.module'; -import { HttpModule } from '@nestjs/axios'; -import { LogisticController } from './logistic/logistic.controller'; -import { LogisticService } from './logistic/logistic.service'; -import { LoggerModule } from './Log/logger.module'; -import { UsersModule } from './auth/users/users.module'; + import { Module } from '@nestjs/common'; + import { ConfigModule, ConfigService } from '@nestjs/config'; + import { TypeOrmModule } from '@nestjs/typeorm'; + import { createOracleConfig } from './core/configs/typeorm.oracle.config'; + import { createPostgresConfig } from './core/configs/typeorm.postgres.config'; + import { LogisticModule } from './logistic/logistic.module'; + import { OrdersPaymentModule } from './orders-payment/orders-payment.module'; + import { ProductsModule } from './products/products.module'; + import { AuthModule } from './auth/auth/auth.module'; + import { DataConsultModule } from './data-consult/data-consult.module'; + import { OrdersModule } from './orders/modules/orders.module'; + import { OcorrencesController } from './crm/occurrences/ocorrences.controller'; + import { OccurrencesModule } from './crm/occurrences/occurrences.module'; + import { ReasonTableModule } from './crm/reason-table/reason-table.module'; + import { NegotiationsModule } from './crm/negotiations/negotiations.module'; + import { HttpModule } from '@nestjs/axios'; + import { LogisticController } from './logistic/logistic.controller'; + import { LogisticService } from './logistic/logistic.service'; + import { LoggerModule } from './Log/logger.module'; + import { UsersModule } from './auth/users/users.module'; -@Module({ - imports: [ - UsersModule, - ConfigModule.forRoot({ isGlobal: true }), - TypeOrmModule.forRootAsync({ - name: 'oracle', - inject: [ConfigService], - useFactory: createOracleConfig, - }), - TypeOrmModule.forRootAsync({ - name: 'postgres', - inject: [ConfigService], - useFactory: createPostgresConfig, - }), - LogisticModule, - OrdersPaymentModule, - HttpModule, - NegotiationsModule, - OccurrencesModule, - ReasonTableModule, - LoggerModule, - DataConsultModule, - ProductsModule, - AuthModule, - OrdersModule, - ], - controllers: [OcorrencesController, LogisticController], - providers: [ LogisticService], -}) -export class AppModule {} + + @Module({ + imports: [ + UsersModule, + ConfigModule.forRoot({ isGlobal: true }), + TypeOrmModule.forRootAsync({ + name: 'oracle', + inject: [ConfigService], + useFactory: createOracleConfig, + }), + TypeOrmModule.forRootAsync({ + name: 'postgres', + inject: [ConfigService], + useFactory: createPostgresConfig, + }), + LogisticModule, + OrdersPaymentModule, + HttpModule, + OrdersModule, + NegotiationsModule, + OccurrencesModule, + ReasonTableModule, + LoggerModule, + DataConsultModule, + ProductsModule, + AuthModule, + OrdersModule, + ], + controllers: [OcorrencesController, LogisticController ], + providers: [ LogisticService, ], + }) + export class AppModule {} diff --git a/src/common/response.interceptor.ts b/src/common/response.interceptor.ts new file mode 100644 index 0000000..8a14af4 --- /dev/null +++ b/src/common/response.interceptor.ts @@ -0,0 +1,22 @@ +// common/interceptors/response.interceptor.ts +import { + CallHandler, + ExecutionContext, + Injectable, + NestInterceptor, + } from '@nestjs/common'; + import { Observable } from 'rxjs'; + import { map } from 'rxjs/operators'; + import { ResultModel } from '../shared/ResultModel'; + + @Injectable() + export class ResponseInterceptor implements NestInterceptor> { + intercept(context: ExecutionContext, next: CallHandler): Observable> { + return next.handle().pipe( + map((data) => { + return ResultModel.success(data); + }), + ); + } + } + \ No newline at end of file diff --git a/src/data-consult/data-consult.repository.ts b/src/data-consult/data-consult.repository.ts index 056ac26..1157fbc 100644 --- a/src/data-consult/data-consult.repository.ts +++ b/src/data-consult/data-consult.repository.ts @@ -72,7 +72,6 @@ export class DataConsultRepository { const likeFilter = filter.toUpperCase().replace('@', '%') + '%'; const queries = [ - // Busca por código (apenas números) { sql: ` SELECT PCCLIENT.CODCLI as "id", @@ -84,7 +83,6 @@ export class DataConsultRepository { `, params: [cleanedNumeric], }, - // Busca por CNPJ/CPF limpo { sql: ` SELECT PCCLIENT.CODCLI as "id", @@ -96,7 +94,6 @@ export class DataConsultRepository { `, params: [cleanedNumeric], }, - // Busca por nome do cliente { sql: ` SELECT PCCLIENT.CODCLI as "id", @@ -122,7 +119,7 @@ export class DataConsultRepository { async findProducts(filter: string): Promise { - const cleanedFilter = filter.replace(/[^\d]/g, ''); // apenas números + const cleanedFilter = filter.replace(/[^\d]/g, ''); const likeFilter = filter + '%'; const queries = [ diff --git a/src/main.ts b/src/main.ts index 1132ac3..303438a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,11 +1,14 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { ValidationPipe } from '@nestjs/common'; +import { ResponseInterceptor } from './common/response.interceptor'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; async function bootstrap() { const app = await NestFactory.create(AppModule); + app.useGlobalInterceptors(new ResponseInterceptor()); + app.useGlobalPipes( new ValidationPipe({ diff --git a/src/orders/application/invoice.service.ts b/src/orders/application/invoice.service.ts deleted file mode 100644 index 6d341b4..0000000 --- a/src/orders/application/invoice.service.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Injectable, NotFoundException } from '@nestjs/common'; -import { InvoiceRepository } from '../repositories/invoice.repository'; -import { InvoiceDto } from '../dto/invoice.dto'; - -@Injectable() -export class InvoiceService { - constructor(private readonly invoiceRepo: InvoiceRepository) {} - - async getInvoiceByChave(chavenfe: string): Promise { - const invoice = await this.invoiceRepo.findInvoiceByChave(chavenfe); - if (!invoice) { - throw new NotFoundException('Nota fiscal não localizada.'); - } - - const itens = await this.invoiceRepo.findInvoiceItems(invoice.transactionId); - return { - ...invoice, - itens, - }; - } -} \ No newline at end of file diff --git a/src/orders/application/orders.service.ts b/src/orders/application/orders.service.ts deleted file mode 100644 index 639e13c..0000000 --- a/src/orders/application/orders.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -///← Orquestra operações de pedido - - -import { Injectable } from '@nestjs/common'; - - diff --git a/src/orders/dto/invoice.dto.ts b/src/orders/dto/invoice.dto.ts deleted file mode 100644 index a14faa4..0000000 --- a/src/orders/dto/invoice.dto.ts +++ /dev/null @@ -1,25 +0,0 @@ -export class InvoiceItemDto { - productId: number; - productName: string; - package: string; - qt: number; - ean: string; - multiple: number; - productType: string; - image: string | null; - } - - export class InvoiceDto { - storeId: number; - invoiceDate: Date; - orderId: number; - invoiceId: number; - transactionId: number; - customerId: number; - customer: string; - sellerId: number; - sellerName: string; - itensQt: number; - itens: InvoiceItemDto[]; - } - \ No newline at end of file diff --git a/src/orders/orders.controller.ts b/src/orders/orders.controller.ts index 76f8ddb..e2daf9a 100644 --- a/src/orders/orders.controller.ts +++ b/src/orders/orders.controller.ts @@ -7,35 +7,20 @@ https://docs.nestjs.com/controllers#controllers import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common'; import { OrdersService } from './orders.service'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; -import { AuthGuard } from '@nestjs/passport'; -import { UseGuards } from '@nestjs/common'; -import { ApiOperation } from '@nestjs/swagger'; -import { InvoiceService } from './application/invoice.service'; -import { InvoiceDto } from './dto/invoice.dto'; - - -@ApiTags('Invoice') -@ApiBearerAuth() -@UseGuards(AuthGuard('jwt')) -@Controller('api/v1/invoice') +@Controller('api/v1/orders') export class OrdersController { - constructor( - private readonly ordersService: OrdersService, - private readonly invoiceService: InvoiceService, - ) {} - + constructor( private readonly ordersService: OrdersService) {} @Get('find') findOrders(@Query() query) { return this.ordersService.findOrders(query); } - @Get(':chavenfe') - async getByChave(@Param('chavenfe') chavenfe: string): Promise { - return this.invoiceService.getInvoiceByChave(chavenfe); + @Get('invoice/:chavenfe') + findInvoice(@Param('chavenfe') chavenfe: string) { + return this.ordersService.findInvoice(chavenfe); } @Get('itens/:id') @@ -67,4 +52,4 @@ export class OrdersController { createInvoiceCheck(@Body() invoice: any) { return this.ordersService.createInvoiceCheck(invoice); } - } + } \ No newline at end of file diff --git a/src/orders/orders.module.ts b/src/orders/orders.module.ts index 746ad4d..08edd8a 100644 --- a/src/orders/orders.module.ts +++ b/src/orders/orders.module.ts @@ -1,27 +1,19 @@ /* eslint-disable prettier/prettier */ /* eslint-disable @typescript-eslint/no-unused-vars */ -import { Module } from '@nestjs/common'; -import { ConfigModule } from '@nestjs/config'; -import { TypeOrmModule } from '@nestjs/typeorm'; - import { OrdersService } from './orders.service'; -import { InvoiceRepository } from './repositories/invoice.repository'; -import { InvoiceService } from './application/invoice.service'; import { OrdersController } from './orders.controller'; +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; @Module({ - imports: [ - ConfigModule, - TypeOrmModule, - ], - controllers: [ - OrdersController, - ], - providers: [ - OrdersService, - InvoiceService, - InvoiceRepository, - ], + imports: [], + controllers: [ + OrdersController,], + providers: [ + OrdersService,], }) -export class OrdersModule {} +export class OrdersModule { } \ No newline at end of file diff --git a/src/orders/orders.service.ts b/src/orders/orders.service.ts index f041dfb..12eb608 100644 --- a/src/orders/orders.service.ts +++ b/src/orders/orders.service.ts @@ -7,644 +7,642 @@ https://docs.nestjs.com/providers#services import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { createOracleConfig } from '../core/configs/typeorm.oracle.config'; import { DataSource } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; @Injectable() -export class OrdersService { - constructor(private readonly configService: ConfigService) {} +export class OrdersService { - async findOrders(query) { - const dataSource = new DataSource(createOracleConfig(this.configService)); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - try { + async findOrders(query) { + const dataSource = new DataSource(createOracleConfig); + await dataSource.initialize(); + const queryRunner = dataSource.createQueryRunner(); + await queryRunner.connect(); + try { - - let sql = `SELECT PCPEDC.DATA as "createDate" - ,PCPEDC.CODFILIAL || CASE WHEN PCPEDC.CODFILIALLOJA IS NOT NULL THEN - ' - Pre-Box ('||PCPEDC.CODFILIALLOJA||')' - ELSE NULL END as "storeId" - ,PCPEDC.NUMPED as "orderId" - ,PCPEDC.CODCLI as "customerId" - ,PCPEDC.CODCLI||' - '||PCCLIENT.CLIENTE as "customerName" - ,PCPEDC.CODUSUR as "sellerId" - ,PCPEDC.CODUSUR||' - '||PCUSUARI.NOME as "sellerName" - ,PCSUPERV.NOME as "store" - ,( SELECT CASE WHEN PCPEDI.TIPOENTREGA = 'EN' THEN 'Entrega ('||PCPEDI.TIPOENTREGA||')' - WHEN PCPEDI.TIPOENTREGA = 'EF' THEN 'Entrega Futura ('||PCPEDI.TIPOENTREGA||')' - WHEN PCPEDI.TIPOENTREGA = 'RP' THEN 'Retira Posterior ('||PCPEDI.TIPOENTREGA||')' - WHEN PCPEDI.TIPOENTREGA = 'RI' THEN 'Retira Imediata ('||PCPEDI.TIPOENTREGA||')' - ELSE 'Não Informado' END - FROM PCPEDI - WHERE PCPEDI.NUMPED = PCPEDC.NUMPED - AND ROWNUM = 1 ) as "deliveryType" - ,CASE WHEN NVL(PCPEDC.CODENDENTCLI,0) = 0 THEN - ( SELECT PCPRACA.CODPRACA||'-'||PCPRACA.PRACA - FROM PCPRACA - WHERE PCPRACA.CODPRACA = PCPEDC.CODPRACA ) - ELSE ( SELECT PCPRACA.CODPRACA||'-'||PCPRACA.PRACA - FROM PCCLIENTENDENT, PCPRACA - WHERE PCCLIENTENDENT.CODCLI = PCPEDC.CODCLI - AND PCCLIENTENDENT.CODENDENTCLI = PCPEDC.CODENDENTCLI - AND PCCLIENTENDENT.CODPRACAENT = PCPRACA.CODPRACA ) END as "deliveryLocal" - ,CASE WHEN NVL(PCPEDC.CODENDENTCLI,0) = 0 THEN - ( SELECT PCROTAEXP.CODROTA||'-'||PCROTAEXP.DESCRICAO - FROM PCPRACA, PCROTAEXP - WHERE PCPRACA.CODPRACA = PCPEDC.CODPRACA - AND PCPRACA.ROTA = PCROTAEXP.CODROTA ) - ELSE ( SELECT PCROTAEXP.CODROTA||'-'||PCROTAEXP.DESCRICAO - FROM PCCLIENTENDENT, PCPRACA, PCROTAEXP - WHERE PCCLIENTENDENT.CODCLI = PCPEDC.CODCLI - AND PCCLIENTENDENT.CODENDENTCLI = PCPEDC.CODENDENTCLI - AND PCCLIENTENDENT.CODPRACAENT = PCPRACA.CODPRACA - AND PCPRACA.ROTA = PCROTAEXP.CODROTA ) END as "masterDeliveryLocal" - ,CASE WHEN PCPEDC.CONDVENDA = 1 THEN 'TV1 - Retira Imediata' - WHEN PCPEDC.CONDVENDA = 7 THEN 'TV7 - Faturamento' - WHEN PCPEDC.CONDVENDA = 8 THEN 'TV8 - Entrega (' || - ( SELECT PCPEDI.TIPOENTREGA FROM PCPEDI - WHERE PCPEDI.NUMPED = PCPEDC.NUMPED - AND ROWNUM = 1 ) ||')' - WHEN PCPEDC.CONDVENDA = 10 THEN 'TV10 - Transferência' - ELSE 'Outros' END as "orderType" - ,CASE WHEN PCPEDC.POSICAO = 'P' THEN 'Pendente' - WHEN PCPEDC.POSICAO = 'B' THEN 'Bloqueado' - WHEN PCPEDC.POSICAO = 'L' THEN 'Liberado' - WHEN PCPEDC.POSICAO = 'M' THEN 'Montado' - WHEN PCPEDC.POSICAO = 'F' THEN 'Faturado' - WHEN PCPEDC.POSICAO = 'C' THEN 'Cancelado' - END as "status" - ,CASE WHEN PCPEDC.CONDVENDA IN (1,7) THEN PCPEDC.VLATEND ELSE PCPEDC.VLTOTAL END as "amount" - ,PCPEDC.DTENTREGA as "deliveryDate" - ,CASE WHEN PCPEDC.tipoprioridadeentrega = 'B' THEN 'Baixa' - WHEN PCPEDC.TIPOPRIORIDADEENTREGA = 'M' THEN 'Média' - WHEN PCPEDC.TIPOPRIORIDADEENTREGA = 'A' THEN 'Alta' - ELSE 'Não Definido' END as "deliveryPriority" - ,PCPEDC.NUMCAR as "shipmentId" - ,PCPEDC.DTLIBERA as "releaseDate" - ,PCPEDC.CODFUNCLIBERA as "releaseUser" - ,PCPEDC.CODFUNCLIBERA||'-'|| - (SELECT PCEMPR.NOME FROM PCEMPR WHERE PCEMPR.MATRICULA = PCPEDC.CODFUNCLIBERA) as "releaseUserName" - ,PCCARREG.DTSAIDA as "shipmentDate" - ,PCCARREG.DATAMON as "shipmentDateCreate" - ,CASE WHEN PCPEDC.NUMCAR = 0 THEN NULL - ELSE PCCARREG.DTFECHA END as "shipmentCloseDate" - ,PCPEDC.CODPLPAG as "paymentId" - ,PCPLPAG.DESCRICAO as "paymentName" - ,PCPEDC.CODCOB as "billingId" - ,PCPEDC.CODCOB||'-'|| - PCCOB.COBRANCA as "billingName" - ,PCPEDC.DTFAT as "invoiceDate" - ,PCPEDC.HORAFAT as "invoiceHour" - ,PCPEDC.MINUTOFAT as "invoiceMinute" - ,PCPEDC.NUMNOTA as "invoiceNumber" - ,PCPEDC.MOTIVOPOSICAO as "BloqDescription" - ,PCNFSAID.DTCANHOTO as "confirmDeliveryDate" - ,PCPEDC.TOTPESO as "totalWeigth" - ,CASE WHEN PCNFSAID.DTCANHOTO IS NOT NULL THEN 4 - WHEN PCPEDC.POSICAO = 'F' THEN 3 - WHEN PCPEDC.DTFINALSEP IS NOT NULL THEN 2 - WHEN PCPEDC.POSICAO = 'M' THEN 1 - WHEN PCPEDC.POSICAO IN ('L', 'P', 'B') THEN 0 - ELSE 0 END as "processOrder" - ,( SELECT COUNT(1) FROM PCPREST, PCNFSAID, PCPEDC PED_VGER - WHERE PCPREST.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA - AND PCNFSAID.NUMTRANSVENDA = PED_VGER.NUMTRANSVENDA - AND PED_VGER.NUMPED = PCPEDC.NUMPEDENTFUT - AND PCPREST.DTPAG IS NULL - AND PCPREST.CODCOB = 'VGER' ) as "payment" - ,MOTORISTA.MATRICULA || ' - ' || MOTORISTA.NOME as "driver" - ,PCPEDC.NUMPEDENTFUT as "orderSaleId" - ,PCVEICUL.DESCRICAO||' ( '|| PCVEICUL.PLACA||' )' as "carDescription" - ,PCVEICUL.PLACA as "carIdentification" - ,PCPEDC.CODFORNECFRETE||' - '||PCFORNEC.FORNECEDOR as "carrier" - ,CASE WHEN (SELECT COUNT(1) FROM PCNFENT, PCFILIAL - WHERE PCFILIAL.CODIGO = PCPEDC.CODFILIAL - AND PCFILIAL.CODFORNEC = PCNFENT.CODFORNEC - AND PCNFENT.NUMNOTA = PCPEDC.NUMNOTA ) = 0 - AND PCPEDC.CONDVENDA = 10 - AND PCPEDC.POSICAO = 'F' THEN 'Em Trânsito' - WHEN PCPEDC.POSICAO = 'M' - AND PCPEDC.CONDVENDA = 10 THEN 'Em Separação' - WHEN PCPEDC.POSICAO IN ( 'L', 'P' ) - AND PCPEDC.CONDVENDA = 10 THEN 'Aguardando Separação' - WHEN PCPEDC.CONDVENDA NOT IN ( 10 ) THEN NULL - ELSE 'Concluída' END as "statusTransfer" - ,PCPEDC.CODFILIALLOJA as "storePreBox" - FROM PCPEDC, PCCLIENT, PCUSUARI, PCSUPERV, PCCOB, PCPLPAG, PCCARREG, PCNFSAID, - PCEMPR MOTORISTA, PCVEICUL, PCFORNEC - WHERE PCPEDC.CODCLI = PCCLIENT.CODCLI - AND PCPEDC.CODUSUR = PCUSUARI.CODUSUR - AND PCPEDC.CODPLPAG = PCPLPAG.CODPLPAG - AND PCPEDC.CODCOB = PCCOB.CODCOB - AND PCPEDC.CODSUPERVISOR = PCSUPERV.CODSUPERVISOR - AND PCPEDC.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA (+) - AND PCPEDC.NUMCAR = PCCARREG.NUMCAR (+) - AND PCCARREG.CODMOTORISTA = MOTORISTA.MATRICULA (+) - AND PCCARREG.CODVEICULO = PCVEICUL.CODVEICULO (+) - AND PCPEDC.CODFORNECFRETE = PCFORNEC.CODFORNEC (+)`; + + let sql = `SELECT PCPEDC.DATA as "createDate" + ,PCPEDC.CODFILIAL || CASE WHEN PCPEDC.CODFILIALLOJA IS NOT NULL THEN + ' - Pre-Box ('||PCPEDC.CODFILIALLOJA||')' + ELSE NULL END as "storeId" + ,PCPEDC.NUMPED as "orderId" + ,PCPEDC.CODCLI as "customerId" + ,PCPEDC.CODCLI||' - '||PCCLIENT.CLIENTE as "customerName" + ,PCPEDC.CODUSUR as "sellerId" + ,PCPEDC.CODUSUR||' - '||PCUSUARI.NOME as "sellerName" + ,PCSUPERV.NOME as "store" + ,( SELECT CASE WHEN PCPEDI.TIPOENTREGA = 'EN' THEN 'Entrega ('||PCPEDI.TIPOENTREGA||')' + WHEN PCPEDI.TIPOENTREGA = 'EF' THEN 'Entrega Futura ('||PCPEDI.TIPOENTREGA||')' + WHEN PCPEDI.TIPOENTREGA = 'RP' THEN 'Retira Posterior ('||PCPEDI.TIPOENTREGA||')' + WHEN PCPEDI.TIPOENTREGA = 'RI' THEN 'Retira Imediata ('||PCPEDI.TIPOENTREGA||')' + ELSE 'Não Informado' END + FROM PCPEDI + WHERE PCPEDI.NUMPED = PCPEDC.NUMPED + AND ROWNUM = 1 ) as "deliveryType" + ,CASE WHEN NVL(PCPEDC.CODENDENTCLI,0) = 0 THEN + ( SELECT PCPRACA.CODPRACA||'-'||PCPRACA.PRACA + FROM PCPRACA + WHERE PCPRACA.CODPRACA = PCPEDC.CODPRACA ) + ELSE ( SELECT PCPRACA.CODPRACA||'-'||PCPRACA.PRACA + FROM PCCLIENTENDENT, PCPRACA + WHERE PCCLIENTENDENT.CODCLI = PCPEDC.CODCLI + AND PCCLIENTENDENT.CODENDENTCLI = PCPEDC.CODENDENTCLI + AND PCCLIENTENDENT.CODPRACAENT = PCPRACA.CODPRACA ) END as "deliveryLocal" + ,CASE WHEN NVL(PCPEDC.CODENDENTCLI,0) = 0 THEN + ( SELECT PCROTAEXP.CODROTA||'-'||PCROTAEXP.DESCRICAO + FROM PCPRACA, PCROTAEXP + WHERE PCPRACA.CODPRACA = PCPEDC.CODPRACA + AND PCPRACA.ROTA = PCROTAEXP.CODROTA ) + ELSE ( SELECT PCROTAEXP.CODROTA||'-'||PCROTAEXP.DESCRICAO + FROM PCCLIENTENDENT, PCPRACA, PCROTAEXP + WHERE PCCLIENTENDENT.CODCLI = PCPEDC.CODCLI + AND PCCLIENTENDENT.CODENDENTCLI = PCPEDC.CODENDENTCLI + AND PCCLIENTENDENT.CODPRACAENT = PCPRACA.CODPRACA + AND PCPRACA.ROTA = PCROTAEXP.CODROTA ) END as "masterDeliveryLocal" + ,CASE WHEN PCPEDC.CONDVENDA = 1 THEN 'TV1 - Retira Imediata' + WHEN PCPEDC.CONDVENDA = 7 THEN 'TV7 - Faturamento' + WHEN PCPEDC.CONDVENDA = 8 THEN 'TV8 - Entrega (' || + ( SELECT PCPEDI.TIPOENTREGA FROM PCPEDI + WHERE PCPEDI.NUMPED = PCPEDC.NUMPED + AND ROWNUM = 1 ) ||')' + WHEN PCPEDC.CONDVENDA = 10 THEN 'TV10 - Transferência' + ELSE 'Outros' END as "orderType" + ,CASE WHEN PCPEDC.POSICAO = 'P' THEN 'Pendente' + WHEN PCPEDC.POSICAO = 'B' THEN 'Bloqueado' + WHEN PCPEDC.POSICAO = 'L' THEN 'Liberado' + WHEN PCPEDC.POSICAO = 'M' THEN 'Montado' + WHEN PCPEDC.POSICAO = 'F' THEN 'Faturado' + WHEN PCPEDC.POSICAO = 'C' THEN 'Cancelado' + END as "status" + ,CASE WHEN PCPEDC.CONDVENDA IN (1,7) THEN PCPEDC.VLATEND ELSE PCPEDC.VLTOTAL END as "amount" + ,PCPEDC.DTENTREGA as "deliveryDate" + ,CASE WHEN PCPEDC.tipoprioridadeentrega = 'B' THEN 'Baixa' + WHEN PCPEDC.TIPOPRIORIDADEENTREGA = 'M' THEN 'Média' + WHEN PCPEDC.TIPOPRIORIDADEENTREGA = 'A' THEN 'Alta' + ELSE 'Não Definido' END as "deliveryPriority" + ,PCPEDC.NUMCAR as "shipmentId" + ,PCPEDC.DTLIBERA as "releaseDate" + ,PCPEDC.CODFUNCLIBERA as "releaseUser" + ,PCPEDC.CODFUNCLIBERA||'-'|| + (SELECT PCEMPR.NOME FROM PCEMPR WHERE PCEMPR.MATRICULA = PCPEDC.CODFUNCLIBERA) as "releaseUserName" + ,PCCARREG.DTSAIDA as "shipmentDate" + ,PCCARREG.DATAMON as "shipmentDateCreate" + ,CASE WHEN PCPEDC.NUMCAR = 0 THEN NULL + ELSE PCCARREG.DTFECHA END as "shipmentCloseDate" + ,PCPEDC.CODPLPAG as "paymentId" + ,PCPLPAG.DESCRICAO as "paymentName" + ,PCPEDC.CODCOB as "billingId" + ,PCPEDC.CODCOB||'-'|| + PCCOB.COBRANCA as "billingName" + ,PCPEDC.DTFAT as "invoiceDate" + ,PCPEDC.HORAFAT as "invoiceHour" + ,PCPEDC.MINUTOFAT as "invoiceMinute" + ,PCPEDC.NUMNOTA as "invoiceNumber" + ,PCPEDC.MOTIVOPOSICAO as "BloqDescription" + ,PCNFSAID.DTCANHOTO as "confirmDeliveryDate" + ,PCPEDC.TOTPESO as "totalWeigth" + ,CASE WHEN PCNFSAID.DTCANHOTO IS NOT NULL THEN 4 + WHEN PCPEDC.POSICAO = 'F' THEN 3 + WHEN PCPEDC.DTFINALSEP IS NOT NULL THEN 2 + WHEN PCPEDC.POSICAO = 'M' THEN 1 + WHEN PCPEDC.POSICAO IN ('L', 'P', 'B') THEN 0 + ELSE 0 END as "processOrder" + ,( SELECT COUNT(1) FROM PCPREST, PCNFSAID, PCPEDC PED_VGER + WHERE PCPREST.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA + AND PCNFSAID.NUMTRANSVENDA = PED_VGER.NUMTRANSVENDA + AND PED_VGER.NUMPED = PCPEDC.NUMPEDENTFUT + AND PCPREST.DTPAG IS NULL + AND PCPREST.CODCOB = 'VGER' ) as "payment" + ,MOTORISTA.MATRICULA || ' - ' || MOTORISTA.NOME as "driver" + ,PCPEDC.NUMPEDENTFUT as "orderSaleId" + ,PCVEICUL.DESCRICAO||' ( '|| PCVEICUL.PLACA||' )' as "carDescription" + ,PCVEICUL.PLACA as "carIdentification" + ,PCPEDC.CODFORNECFRETE||' - '||PCFORNEC.FORNECEDOR as "carrier" + ,CASE WHEN (SELECT COUNT(1) FROM PCNFENT, PCFILIAL + WHERE PCFILIAL.CODIGO = PCPEDC.CODFILIAL + AND PCFILIAL.CODFORNEC = PCNFENT.CODFORNEC + AND PCNFENT.NUMNOTA = PCPEDC.NUMNOTA ) = 0 + AND PCPEDC.CONDVENDA = 10 + AND PCPEDC.POSICAO = 'F' THEN 'Em Trânsito' + WHEN PCPEDC.POSICAO = 'M' + AND PCPEDC.CONDVENDA = 10 THEN 'Em Separação' + WHEN PCPEDC.POSICAO IN ( 'L', 'P' ) + AND PCPEDC.CONDVENDA = 10 THEN 'Aguardando Separação' + WHEN PCPEDC.CONDVENDA NOT IN ( 10 ) THEN NULL + ELSE 'Concluída' END as "statusTransfer" + ,PCPEDC.CODFILIALLOJA as "storePreBox" + FROM PCPEDC, PCCLIENT, PCUSUARI, PCSUPERV, PCCOB, PCPLPAG, PCCARREG, PCNFSAID, + PCEMPR MOTORISTA, PCVEICUL, PCFORNEC + WHERE PCPEDC.CODCLI = PCCLIENT.CODCLI + AND PCPEDC.CODUSUR = PCUSUARI.CODUSUR + AND PCPEDC.CODPLPAG = PCPLPAG.CODPLPAG + AND PCPEDC.CODCOB = PCCOB.CODCOB + AND PCPEDC.CODSUPERVISOR = PCSUPERV.CODSUPERVISOR + AND PCPEDC.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA (+) + AND PCPEDC.NUMCAR = PCCARREG.NUMCAR (+) + AND PCCARREG.CODMOTORISTA = MOTORISTA.MATRICULA (+) + AND PCCARREG.CODVEICULO = PCVEICUL.CODVEICULO (+) + AND PCPEDC.CODFORNECFRETE = PCFORNEC.CODFORNEC (+)`; - let sqlWhere = ""; - if (query.storeId) { - sqlWhere += ` AND PCPEDC.CODFILIAL = '${query.storeId}'`; - } - if (query.storeStockId) { - sqlWhere += ` AND EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI - WHERE PCPEDI.NUMPED = PCPEDC.NUMPED - AND PCPEDI.CODFILIALRETIRA = '${query.storeStockId}' )`; - } + let sqlWhere = ""; + if (query.storeId) { + sqlWhere += ` AND PCPEDC.CODFILIAL = '${query.storeId}'`; + } + if (query.storeStockId) { + sqlWhere += ` AND EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI + WHERE PCPEDI.NUMPED = PCPEDC.NUMPED + AND PCPEDI.CODFILIALRETIRA = '${query.storeStockId}' )`; + } - if (query.sellerId) { - sqlWhere += ` AND PCPEDC.CODUSUR = ${query.sellerId}`; - } - if (query.customerId) { - sqlWhere += ` AND PCPEDC.CODCLI = ${query.customerId}`; - } - if (query.billingId) { - sqlWhere += ` AND PCPEDC.CODCOB = '${query.billingId}'`; - } - if (query.orderId) { - sqlWhere += ` AND ( PCPEDC.NUMPED = ${query.orderId} or PCPEDC.NUMPEDENTFUT = ${query.orderId} )`; - } - if (query.invoiceId) { - sqlWhere += ` AND PCPEDC.NUMNOTA = ${query.invoiceId}`; - } - if (query.productId) { - sqlWhere += ` AND EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI - WHERE PCPEDI.NUMPED = PCPEDC.NUMPED - AND PCPEDI.CODPROD = ${query.productId} )`; - } - if (query.createDateIni) { - sqlWhere += ` AND PCPEDC.DATA >= TO_DATE('${query.createDateIni}', 'YYYY-MM-DD')`; - } - if (query.createDateEnd) { - sqlWhere += ` AND PCPEDC.DATA <= TO_DATE('${query.createDateEnd}', 'YYYY-MM-DD')`; - } - if (query.invoiceDateIni) { - sqlWhere += ` AND PCPEDC.DTFAT >= TO_DATE('${query.invoiceDateIni}', 'YYYY-MM-DD')`; - } - if (query.invoiceDateEnd) { - sqlWhere += ` AND PCPEDC.DTFAT <= TO_DATE('${query.invoiceDateEnd}', 'YYYY-MM-DD')`; - } - if (query.shippimentId) { - sqlWhere += ` AND PCPEDC.NUMCAR = ${query.shippimentId}`; - } - if (query.deliveryType) { - const deliveryType: string[] = query.deliveryType.split(','); - const listDeliveryType = deliveryType.map(type => `'${type}'`) - sqlWhere += ` AND EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI - WHERE PCPEDI.NUMPED = PCPEDC.NUMPED - AND PCPEDI.TIPOENTREGA IN ( ${listDeliveryType} ) )`; - } + if (query.sellerId) { + sqlWhere += ` AND PCPEDC.CODUSUR = ${query.sellerId}`; + } + if (query.customerId) { + sqlWhere += ` AND PCPEDC.CODCLI = ${query.customerId}`; + } + if (query.billingId) { + sqlWhere += ` AND PCPEDC.CODCOB = '${query.billingId}'`; + } + if (query.orderId) { + sqlWhere += ` AND ( PCPEDC.NUMPED = ${query.orderId} or PCPEDC.NUMPEDENTFUT = ${query.orderId} )`; + } + if (query.invoiceId) { + sqlWhere += ` AND PCPEDC.NUMNOTA = ${query.invoiceId}`; + } + if (query.productId) { + sqlWhere += ` AND EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI + WHERE PCPEDI.NUMPED = PCPEDC.NUMPED + AND PCPEDI.CODPROD = ${query.productId} )`; + } + if (query.createDateIni) { + sqlWhere += ` AND PCPEDC.DATA >= TO_DATE('${query.createDateIni}', 'YYYY-MM-DD')`; + } + if (query.createDateEnd) { + sqlWhere += ` AND PCPEDC.DATA <= TO_DATE('${query.createDateEnd}', 'YYYY-MM-DD')`; + } + if (query.invoiceDateIni) { + sqlWhere += ` AND PCPEDC.DTFAT >= TO_DATE('${query.invoiceDateIni}', 'YYYY-MM-DD')`; + } + if (query.invoiceDateEnd) { + sqlWhere += ` AND PCPEDC.DTFAT <= TO_DATE('${query.invoiceDateEnd}', 'YYYY-MM-DD')`; + } + if (query.shippimentId) { + sqlWhere += ` AND PCPEDC.NUMCAR = ${query.shippimentId}`; + } + if (query.deliveryType) { + const deliveryType: string[] = query.deliveryType.split(','); + const listDeliveryType = deliveryType.map(type => `'${type}'`) + sqlWhere += ` AND EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI + WHERE PCPEDI.NUMPED = PCPEDC.NUMPED + AND PCPEDI.TIPOENTREGA IN ( ${listDeliveryType} ) )`; + } - if (query.status) { - const statusOrder: string[] = query.status.split(','); - const listStatusOrder = statusOrder.map(status => `'${status}'`) - sqlWhere += ` AND PCPEDC.POSICAO IN ( ${listStatusOrder} )`; - } + if (query.status) { + const statusOrder: string[] = query.status.split(','); + const listStatusOrder = statusOrder.map(status => `'${status}'`) + sqlWhere += ` AND PCPEDC.POSICAO IN ( ${listStatusOrder} )`; + } - if (query.type) { - const typeOrder: string[] = query.type.split(','); - const listTypeOrder = typeOrder.map(type => `'${type}'`) - sqlWhere += ` AND PCPEDC.CONDVENDA IN ( ${listTypeOrder} )`; - } + if (query.type) { + const typeOrder: string[] = query.type.split(','); + const listTypeOrder = typeOrder.map(type => `'${type}'`) + sqlWhere += ` AND PCPEDC.CONDVENDA IN ( ${listTypeOrder} )`; + } - if (query.onlyPendentingTransfer && query.onlyPendentingTransfer == "S") { - sqlWhere += ` AND NOT EXISTS(SELECT PCNFENT.NUMTRANSENT FROM PCNFENT, PCFILIAL - WHERE PCFILIAL.CODIGO = PCPEDC.CODFILIAL - AND PCFILIAL.CODFORNEC = PCNFENT.CODFORNEC - AND PCNFENT.NUMNOTA = PCPEDC.NUMNOTA ) ` - } + if (query.onlyPendentingTransfer && query.onlyPendentingTransfer == "S") { + sqlWhere += ` AND NOT EXISTS(SELECT PCNFENT.NUMTRANSENT FROM PCNFENT, PCFILIAL + WHERE PCFILIAL.CODIGO = PCPEDC.CODFILIAL + AND PCFILIAL.CODFORNEC = PCNFENT.CODFORNEC + AND PCNFENT.NUMNOTA = PCPEDC.NUMNOTA ) ` + } - sql += sqlWhere; + sql += sqlWhere; - sql += ' AND ROWNUM < 5000'; + sql += ' AND ROWNUM < 5000'; - const orders = await queryRunner.manager.query(sql); + const orders = await queryRunner.manager.query(sql); - return orders; - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } - - async findInvoice(chavenfe: string) { - const dataSource = new DataSource(createOracleConfig(this.configService)); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - try { - - - const sql = `select pcnfsaid.codfilial as "storeId", - pcnfsaid.dtsaida as "invoiceDate", - pcnfsaid.numped as "orderId", - pcnfsaid.numnota as "invoiceId", - pcnfsaid.numtransvenda as "transactionId", - pcnfsaid.codcli as "customerId", - pcclient.cliente as "customer", - pcnfsaid.codusur as "sellerId", - pcusuari.nome as "sellerName", - ( select sum(pcmov.qt) from pcmov where pcmov.numtransvenda = pcnfsaid.numtransvenda ) as "itensQt", - null as "itens" - from pcnfsaid, pcclient, pcusuari - where pcnfsaid.codcli = pcclient.codcli - and pcnfsaid.codusur = pcusuari.codusur - and pcnfsaid.chavenfe = '${chavenfe}'`; - - const invoice = await queryRunner.manager.query(sql); - - if ( invoice == null || invoice.length == 0 ) { - throw new HttpException('Nota fiscal não foi localizada na sistema', HttpStatus.BAD_REQUEST); - } - - - const sqlItem = `select pcmov.codprod as "productId" - ,pcprodut.descricao as "productName" - ,pcprodut.embalagem as "package" - ,pcmov.qt as "qt" - ,pcprodut.codauxiliar as "ean" - ,pcprodut.multiplo as "multiple" - ,pcprodut.tipoproduto as "productType" - ,REPLACE(CASE WHEN INSTR(PCPRODUT.URLIMAGEM, ';') > 0 THEN - SUBSTR(PCPRODUT.URLIMAGEM,1,INSTR(PCPRODUT.URLIMAGEM, ';') - 1) - WHEN PCPRODUT.URLIMAGEM IS NOT NULL THEN - PCPRODUT.URLIMAGEM - ELSE NULL END, '167.249.211.178:8001', '10.1.1.191') as "image" - from pcmov, pcprodut - where pcmov.codprod = pcprodut.codprod - and pcmov.numtransvenda = ${invoice[0].transactionId}`; - - const itens = await queryRunner.manager.query(sqlItem); - - const sqlProduct = `SELECT PCPRODUT.URLIMAGEM FROM PCPRODUT WHERE CODPROD = ` - - invoice[0].itens = [...itens]; - - return invoice[0]; - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } - - - async getItens(orderId: string) { - const dataSource = new DataSource(createOracleConfig(this.configService)); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - try { - const sql = `SELECT PCPEDI.CODPROD as "productId" - , PCPRODUT.DESCRICAO as "description" - , PCPRODUT.EMBALAGEM as "pacth" - , NVL(PCPEDI.COMPLEMENTO, - ( SELECT TV7I.COMPLEMENTO FROM PCPEDC, PCPEDC TV7, PCPEDITEMP TV7I - WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT - AND PCPEDC.NUMPED = PCPEDI.NUMPED - AND TV7.NUMPEDRCA = TV7I.NUMPEDRCA - AND TV7I.CODPROD = PCPEDI.codprod - AND TV7I.NUMSEQ = PCPEDI.NUMSEQ ) ) as "color" - , PCPEDI.CODFILIALRETIRA as "stockId" - , PCPEDI.QT as "quantity" - , PCPEDI.PVENDA as "salePrice" - , CASE WHEN PCPEDI.TIPOENTREGA = 'RI' THEN 'RETIRA IMEDIATA' - WHEN PCPEDI.TIPOENTREGA = 'RP' THEN 'RETIRA POSTERIOR' - WHEN PCPEDI.TIPOENTREGA = 'EN' THEN 'ENTREGA' - WHEN PCPEDI.TIPOENTREGA = 'EF' THEN 'ENTREGA FUTURA' - END as "deliveryType" - , ( PCPEDI.QT * - PCPEDI.PVENDA ) as "total" - , ( PCPEDI.QT * PCPRODUT.PESOBRUTO ) as "weigth" - , PCDEPTO.DESCRICAO as "department" - , PCMARCA.MARCA as "brand" - FROM PCPEDI, PCPRODUT, PCDEPTO, PCMARCA - WHERE PCPEDI.CODPROD = PCPRODUT.CODPROD - AND PCPRODUT.CODEPTO = PCDEPTO.CODEPTO - AND PCPRODUT.CODMARCA = PCMARCA.CODMARCA - AND PCPEDI.NUMPED = ${orderId}`; - - const itens = await queryRunner.manager.query(sql); - - return itens; - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } - - async getCutItens(orderId: string) { - const dataSource = new DataSource(createOracleConfig(this.configService)); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - try { - const sql = `SELECT PCCORTEI.CODPROD as "productId" - , PCPRODUT.DESCRICAO as "description" - , PCPRODUT.EMBALAGEM as "pacth" - , PCCORTEI.CODFILIAL as "stockId" - , ( PCCORTEI.QTSEPARADA + - PCCORTEI.QTCORTADA ) as "saleQuantity" - , PCCORTEI.QTCORTADA as "cutQuantity" - , PCCORTEI.QTSEPARADA as "separedQuantity" - FROM PCCORTEI, PCPRODUT - WHERE PCCORTEI.CODPROD = PCPRODUT.CODPROD - AND PCCORTEI.NUMPED = ${orderId}`; - - const itens = await queryRunner.manager.query(sql); - - return itens; - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } - - async getOrderDelivery(orderId: string){ - const dataSource = new DataSource(createOracleConfig(this.configService)); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - try { - const sql = `SELECT PCPRACA.CODPRACA as "placeId" - ,PCPRACA.PRACA as "placeName" - ,NVL(ENDENT.ENDERENT, PCCLIENT.ENDERENT) as "street" - ,NVL(ENDENT.NUMEROENT, PCCLIENT.NUMEROENT) as "addressNumber" - ,NVL(ENDENT.BAIRROENT, PCCLIENT.BAIRROENT) as "bairro" - ,NVL(ENDENT.MUNICENT, PCCLIENT.MUNICENT) as "city" - ,NVL(ENDENT.ESTENT, PCCLIENT.ESTENT) as "state" - ,NVL(ENDENT.COMPLEMENTOENT, PCCLIENT.COMPLEMENTOENT) as "addressComplement" - ,NVL(ENDENT.CEPENT, PCCLIENT.CEPENT) as "cep" - ,PCPEDC.OBS1 as "commentOrder1" - ,PCPEDC.OBS2 as "commentOrder2" - ,PCPEDC.OBSENTREGA1 as "commentDelivery1" - ,PCPEDC.OBSENTREGA2 as "commentDelivery2" - ,PCPEDC.OBSENTREGA3 as "commentDelivery3" - ,PCPEDC.OBSENTREGA4 as "commentDelivery4" - ,PCPEDC.NUMCAR as "shippimentId" - ,PCCARREG.DTSAIDA as "shippimentDate" - ,PCCARREG.DESTINO as "shippimentComment" - ,PCROTAEXP.DESCRICAO as "place" - ,PCEMPR.MATRICULA||'-'|| - PCEMPR.NOME as "driver" - ,PCVEICUL.PLACA||' - '||PCVEICUL.DESCRICAO as "car" - ,CASE WHEN PCCARREG.DTFECHA < PCCARREG.DTSAIDA THEN NULL - ELSE PCCARREG.DTFECHA END as "closeDate" - ,SEPARADOR.NOME as "separatorName" - ,CONFERENTE.NOME as "confName" - ,PCPEDC.DTLIBERA as "releaseDate" - FROM PCPEDC, PCCLIENT, PCPRACA, PCCLIENTENDENT ENDENT, PCCARREG, PCVEICUL, PCEMPR, PCROTAEXP, - PCEMPR SEPARADOR, PCEMPR CONFERENTE - WHERE NVL(ENDENT.CODPRACAENT, PCPEDC.CODPRACA) = PCPRACA.CODPRACA - AND PCPEDC.CODCLI = PCCLIENT.CODCLI - AND PCPEDC.CODENDENTCLI = ENDENT.CODENDENTCLI (+) - AND PCPEDC.CODCLI = ENDENT.CODCLI (+) - AND PCPEDC.NUMCAR = PCCARREG.NUMCAR (+) - AND PCCARREG.CODMOTORISTA = PCEMPR.MATRICULA (+) - AND PCCARREG.CODVEICULO = PCVEICUL.CODVEICULO (+) - AND PCCARREG.CODROTAPRINC = PCROTAEXP.CODROTA (+) - AND PCPEDC.CODFUNCSEP = SEPARADOR.MATRICULA (+) - AND PCPEDC.CODFUNCCONF = CONFERENTE.MATRICULA (+) - AND PCPEDC.NUMPED = ${orderId}`; - - const orderDelivery = await queryRunner.manager.query(sql); - if ( orderDelivery.length > 0 ) { - return orderDelivery[0]; - } else { - return null; - } - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - - } - - - async getTransfer(orderId: number) { - const dataSource = new DataSource(createOracleConfig(this.configService)); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - try { - const sql = `SELECT L.NUMPED as "orderId" - ,L.DTTRANSF as "transferDate" - ,L.NUMNOTA as "invoiceId" - ,L.NUMTRANSVENDA as "transactionId" - ,L.NUMCARANTERIOR as "oldShipment" - ,L.NUMCARATUAL as "newShipment" - ,L.MOTIVOTRANSF as "transferText" - ,L.codmotivo||'-'||PCTABDEV.MOTIVO as "cause" - ,L.codfunctransf||'-'||PCEMPR.NOME as "userName" - ,L.rotinatransf as "program" - FROM PCLOGTRANSFNFCARREG L, PCTABDEV, PCEMPR - WHERE L.CODMOTIVO = PCTABDEV.coddevol (+) - AND L.CODFUNCTRANSF = PCEMPR.MATRICULA (+) - AND L.NUMTRANSVENDA IN ( SELECT PCPEDC.NUMTRANSVENDA FROM PCPEDC WHERE PCPEDC.NUMPED = ${orderId} )`; - - const transferOrder = await queryRunner.manager.query(sql); - if ( transferOrder.length > 0 ) { - return transferOrder; - } else { - return null; - } - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } - - async getStatusOrder(orderId: number) { - const dataSource = new DataSource(createOracleConfig(this.configService)); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - try { - const sql = `SELECT pcpedc.numped AS "orderId", - 'Digitação pedido' AS "status", - TO_DATE (TO_CHAR(pcpedc.data, 'DD/MM/YYYY') || ' ' || pcpedc.hora || ':' || pcpedc.minuto, - 'DD/MM/YYYY HH24:MI') - AS "statusDate", - pcpedc.codemitente || '-' || pcempr.nome "userName" - ,NULL as "comments" - FROM pcpedc, pcempr - WHERE pcpedc.numped = ${orderId} AND pcpedc.codemitente = pcempr.matricula(+) - UNION ALL - SELECT pcpedc.numped AS "orderId", - 'Montagem de carga' AS "status", - TO_DATE ( - TO_CHAR(pccarreg.datamon, 'DD/MM/YYYY') - || ' ' - || pccarreg.horamon - || ':' - || pccarreg.minutomon, - 'DD/MM/YYYY HH24:MI') - AS "statusDate", - pccarreg.codfuncmon || '-' || pcempr.nome "userName" - ,NULL as "comments" - FROM pcpedc, pcempr, pccarreg - WHERE pcpedc.numped = ${orderId} - AND pccarreg.codfuncmon = pcempr.matricula(+) - AND pcpedc.numcar = pccarreg.numcar - AND pcpedc.numcar > 0 - AND pccarreg.datamon is not null - UNION ALL - SELECT pcpedc.numped AS "orderId", - 'Emissão do mapa' AS "status", - CASE WHEN PCPEDC.DTEMISSAOMAPA IS NOT NULL THEN - TO_DATE ( - TO_CHAR(pcpedc.dtemissaomapa, 'DD/MM/YYYY') - || ' ' - || NVL(pcpedc.horaemissaomapa, '00') - || ':' - || nvl(pcpedc.minutoemissaomapa, '01'), - 'DD/MM/YYYY HH24:MI') ELSE NULL END - AS "statusDate", - pcpedc.codfuncemissaomapa || '-' || pcempr.nome AS "userName" - ,NULL as "comments" - FROM pcpedc, pcempr - WHERE pcpedc.numped = ${orderId} - AND pcpedc.codfuncemissaomapa = pcempr.matricula(+) - AND PCPEDC.DTEMISSAOMAPA IS NOT NULL - UNION ALL - SELECT pcpedc.numped AS "orderId", - 'Inicio de Separação' AS "status", - pcpedc.dtinicialsep as "statusDate", - pcpedc.codfuncsep || '-' || pcempr.nome "userName" - ,NULL as "comments" - FROM pcpedc, pcempr - WHERE pcpedc.numped = ${orderId} - AND pcpedc.codfuncsep = pcempr.matricula(+) - AND PCPEDC.dtinicialsep IS NOT NULL - UNION ALL - SELECT pcpedc.numped AS "orderId", - 'Fim de Separação' AS "status", - pcpedc.dtfinalsep as "statusDate", - pcpedc.codfuncsep || '-' || pcempr.nome "userName" - ,NULL as "comments" - FROM pcpedc, pcempr - WHERE pcpedc.numped = ${orderId} AND pcpedc.codfuncsep = pcempr.matricula(+) - and pcpedc.dtfinalsep is not null - UNION ALL - SELECT pcpedc.numped AS "orderId", - 'Inicio conferência' AS "status", - pcpedc.dtinicialcheckout AS "statusDate", - pcpedc.codfuncconf || '-' || pcempr.nome "userName" - ,NULL as "comments" - FROM pcpedc, pcempr - WHERE pcpedc.numped = ${orderId} - AND pcpedc.codfuncconf = pcempr.matricula(+) - AND pcpedc.dtinicialcheckout IS NOT NULL - UNION ALL - SELECT pcpedc.numped AS "orderId", - 'Fim conferência' AS "status", - pcpedc.dtfinalcheckout AS "statusDate", - pcpedc.codfuncconf || '-' || pcempr.nome "userName" - ,NULL as "comments" - FROM pcpedc, pcempr - WHERE pcpedc.numped = ${orderId} - AND pcpedc.codfuncconf = pcempr.matricula(+) - AND pcpedc.dtfinalcheckout IS NOT NULL - UNION ALL - SELECT pcpedc.numped AS "orderId", - 'Faturamento' AS "status", - TO_DATE ( - TO_CHAR(pcpedc.dtfat, 'DD/MM/YYYY') || ' ' || pcpedc.horafat || ':' || pcpedc.minutofat, - 'DD/MM/YYYY HH24:MI') - AS "statusDate", - pcempr.matricula || '-' || pcempr.nome "userName" - ,NULL as "comments" - FROM pcpedc, pcempr, pccarreg, pcnfsaid - WHERE pcpedc.numped = ${orderId} - AND pcpedc.numcar = pccarreg.numcar - and pcpedc.numtransvenda = pcnfsaid.numtransvenda - AND nvl(pcnfsaid.codemitente, decode(pcpedc.numcar,0,-1,pccarreg.codfuncfat)) = pcempr.matricula(+) - AND pcpedc.dtfat IS NOT NULL - UNION ALL - SELECT pcpedc.numped AS "orderId", - 'Entrega' AS "status", - pcnfsaid.dtcanhoto AS "statusDate", - CASE WHEN PCNFSAID.NUMCAR > 0 THEN - pcnfsaid.codfunccanhoto || '-' || pcempr.nome - ELSE '' END "userName" - ,NULL as "comments" - FROM pcpedc, pcnfsaid, pcempr, pccarreg - WHERE pcpedc.numped = ${orderId} - AND pcpedc.numtransvenda = pcnfsaid.numtransvenda - AND pcnfsaid.numcar = pccarreg.numcar (+) - AND pcnfsaid.codfunccanhoto = pcempr.matricula(+) - AND pcnfsaid.dtcanhoto IS NOT NULL - UNION ALL - SELECT pcpedc.numped AS "orderId", - 'Transf entre carregamento' AS "status", - pclogtransfnfcarreg.dttransf AS "statusDate", - pclogtransfnfcarreg.codfunctransf || '-' || pcempr.nome "userName", - 'ORIG: '||pclogtransfnfcarreg.numcaranterior || ' -> - DEST.: ' ||pclogtransfnfcarreg.numcaratual as "comments" - FROM pclogtransfnfcarreg, pcpedc, pcempr - WHERE pclogtransfnfcarreg.numnota = pcpedc.numnota (+) - AND pcpedc.numped = ${orderId} - AND pclogtransfnfcarreg.codfunctransf = pcempr.matricula(+) - ORDER BY 3`; - - const statusOrder = await queryRunner.manager.query(sql); - if ( statusOrder.length > 0 ) { - return statusOrder; - } else { - return null; - } - } catch(e) { - console.log(e); - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } - - - async createInvoiceCheck(invoice: any) { - const dataSource = new DataSource(createOracleConfig(this.configService)); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - // TO_DATE('YYYY-MM-DDTHH24:MI:SS.000Z','${invoice.startDate}'), - // TO_DATE('YYYY-MM-DDTHH24:MI:SS.000Z','${invoice.endDate}'), - try { - const sqlSequence = 'SELECT ESSCONFERENCIANF.NEXTVAL as "id" FROM DUAL'; - const dbSequence = await queryRunner.manager.query(sqlSequence); - - const checkId = dbSequence[0].id; - - - const sql = `INSERT INTO ESTCONFERENCIANF ( ID, NUMTRANSVENDA, CODFILIAL, NUMNOTA, DTINICIO, DTFIM, CODFUNCCONF ) - VALUES ( ${checkId}, ${invoice.transactionId}, ${invoice.storeId}, ${invoice.invoiceId}, - TO_DATE(SUBSTR(REPLACE(REPLACE('${invoice.startDate}', 'T', ' '), 'Z', ''),1,18), 'YYYY-MM-DD HH24:MI:SS'), - TO_DATE(SUBSTR(REPLACE(REPLACE('${invoice.endDate}', 'T', ' '), 'Z', ''),1,18), 'YYYY-MM-DD HH24:MI:SS'), - ${invoice.userId} )`; - await queryRunner.manager.query(sql); - - for ( const item of invoice.itens ) { - const sqlItem = `INSERT INTO ESTCONFERENCIANFITENS ( IDCONF, NUMTRANSVENDA, CODPROD, NUMSEQ, QT, DTCONF ) - VALUES ( ${checkId}, ${invoice.transactionId}, ${item.productId}, ${item.seq}, ${item.qt}, - TO_DATE(SUBSTR(REPLACE(REPLACE('${item.confDate}', 'T', ' '), 'Z', ''),1,18), 'YYYY-MM-DD HH24:MI:SS') )`; - await queryRunner.manager.query(sqlItem); - } - await queryRunner.commitTransaction(); - - return { message: 'Conferência salva com sucesso!' } - - } catch(erro) { - await queryRunner.rollbackTransaction(); - console.log(erro); - throw new HttpException(erro.message, HttpStatus.BAD_REQUEST); + return orders; + } finally { + await queryRunner.release(); + await dataSource.destroy(); + } } - finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } + + async findInvoice(chavenfe: string) { + const dataSource = new DataSource(typeOrmConfig); + await dataSource.initialize(); + const queryRunner = dataSource.createQueryRunner(); + await queryRunner.connect(); + try { + + + const sql = `select pcnfsaid.codfilial as "storeId", + pcnfsaid.dtsaida as "invoiceDate", + pcnfsaid.numped as "orderId", + pcnfsaid.numnota as "invoiceId", + pcnfsaid.numtransvenda as "transactionId", + pcnfsaid.codcli as "customerId", + pcclient.cliente as "customer", + pcnfsaid.codusur as "sellerId", + pcusuari.nome as "sellerName", + ( select sum(pcmov.qt) from pcmov where pcmov.numtransvenda = pcnfsaid.numtransvenda ) as "itensQt", + null as "itens" + from pcnfsaid, pcclient, pcusuari + where pcnfsaid.codcli = pcclient.codcli + and pcnfsaid.codusur = pcusuari.codusur + and pcnfsaid.chavenfe = '${chavenfe}'`; + + const invoice = await queryRunner.manager.query(sql); + + if ( invoice == null || invoice.length == 0 ) { + throw new HttpException('Nota fiscal não foi localizada na sistema', HttpStatus.BAD_REQUEST); + } -} + const sqlItem = `select pcmov.codprod as "productId" + ,pcprodut.descricao as "productName" + ,pcprodut.embalagem as "package" + ,pcmov.qt as "qt" + ,pcprodut.codauxiliar as "ean" + ,pcprodut.multiplo as "multiple" + ,pcprodut.tipoproduto as "productType" + ,REPLACE(CASE WHEN INSTR(PCPRODUT.URLIMAGEM, ';') > 0 THEN + SUBSTR(PCPRODUT.URLIMAGEM,1,INSTR(PCPRODUT.URLIMAGEM, ';') - 1) + WHEN PCPRODUT.URLIMAGEM IS NOT NULL THEN + PCPRODUT.URLIMAGEM + ELSE NULL END, '167.249.211.178:8001', '10.1.1.191') as "image" + from pcmov, pcprodut + where pcmov.codprod = pcprodut.codprod + and pcmov.numtransvenda = ${invoice[0].transactionId}`; + + const itens = await queryRunner.manager.query(sqlItem); + + const sqlProduct = `SELECT PCPRODUT.URLIMAGEM FROM PCPRODUT WHERE CODPROD = ` + + invoice[0].itens = [...itens]; + + return invoice[0]; + } finally { + await queryRunner.release(); + await dataSource.destroy(); + } + } + + + async getItens(orderId: string) { + const dataSource = new DataSource(typeOrmConfig); + await dataSource.initialize(); + const queryRunner = dataSource.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT PCPEDI.CODPROD as "productId" + , PCPRODUT.DESCRICAO as "description" + , PCPRODUT.EMBALAGEM as "pacth" + , NVL(PCPEDI.COMPLEMENTO, + ( SELECT TV7I.COMPLEMENTO FROM PCPEDC, PCPEDC TV7, PCPEDITEMP TV7I + WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT + AND PCPEDC.NUMPED = PCPEDI.NUMPED + AND TV7.NUMPEDRCA = TV7I.NUMPEDRCA + AND TV7I.CODPROD = PCPEDI.codprod + AND TV7I.NUMSEQ = PCPEDI.NUMSEQ ) ) as "color" + , PCPEDI.CODFILIALRETIRA as "stockId" + , PCPEDI.QT as "quantity" + , PCPEDI.PVENDA as "salePrice" + , CASE WHEN PCPEDI.TIPOENTREGA = 'RI' THEN 'RETIRA IMEDIATA' + WHEN PCPEDI.TIPOENTREGA = 'RP' THEN 'RETIRA POSTERIOR' + WHEN PCPEDI.TIPOENTREGA = 'EN' THEN 'ENTREGA' + WHEN PCPEDI.TIPOENTREGA = 'EF' THEN 'ENTREGA FUTURA' + END as "deliveryType" + , ( PCPEDI.QT * + PCPEDI.PVENDA ) as "total" + , ( PCPEDI.QT * PCPRODUT.PESOBRUTO ) as "weigth" + , PCDEPTO.DESCRICAO as "department" + , PCMARCA.MARCA as "brand" + FROM PCPEDI, PCPRODUT, PCDEPTO, PCMARCA + WHERE PCPEDI.CODPROD = PCPRODUT.CODPROD + AND PCPRODUT.CODEPTO = PCDEPTO.CODEPTO + AND PCPRODUT.CODMARCA = PCMARCA.CODMARCA + AND PCPEDI.NUMPED = ${orderId}`; + + const itens = await queryRunner.manager.query(sql); + + return itens; + } finally { + await queryRunner.release(); + await dataSource.destroy(); + } + } + + async getCutItens(orderId: string) { + const dataSource = new DataSource(typeOrmConfig); + await dataSource.initialize(); + const queryRunner = dataSource.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT PCCORTEI.CODPROD as "productId" + , PCPRODUT.DESCRICAO as "description" + , PCPRODUT.EMBALAGEM as "pacth" + , PCCORTEI.CODFILIAL as "stockId" + , ( PCCORTEI.QTSEPARADA + + PCCORTEI.QTCORTADA ) as "saleQuantity" + , PCCORTEI.QTCORTADA as "cutQuantity" + , PCCORTEI.QTSEPARADA as "separedQuantity" + FROM PCCORTEI, PCPRODUT + WHERE PCCORTEI.CODPROD = PCPRODUT.CODPROD + AND PCCORTEI.NUMPED = ${orderId}`; + + const itens = await queryRunner.manager.query(sql); + + return itens; + } finally { + await queryRunner.release(); + await dataSource.destroy(); + } + } + + async getOrderDelivery(orderId: string){ + const dataSource = new DataSource(typeOrmConfig); + await dataSource.initialize(); + const queryRunner = dataSource.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT PCPRACA.CODPRACA as "placeId" + ,PCPRACA.PRACA as "placeName" + ,NVL(ENDENT.ENDERENT, PCCLIENT.ENDERENT) as "street" + ,NVL(ENDENT.NUMEROENT, PCCLIENT.NUMEROENT) as "addressNumber" + ,NVL(ENDENT.BAIRROENT, PCCLIENT.BAIRROENT) as "bairro" + ,NVL(ENDENT.MUNICENT, PCCLIENT.MUNICENT) as "city" + ,NVL(ENDENT.ESTENT, PCCLIENT.ESTENT) as "state" + ,NVL(ENDENT.COMPLEMENTOENT, PCCLIENT.COMPLEMENTOENT) as "addressComplement" + ,NVL(ENDENT.CEPENT, PCCLIENT.CEPENT) as "cep" + ,PCPEDC.OBS1 as "commentOrder1" + ,PCPEDC.OBS2 as "commentOrder2" + ,PCPEDC.OBSENTREGA1 as "commentDelivery1" + ,PCPEDC.OBSENTREGA2 as "commentDelivery2" + ,PCPEDC.OBSENTREGA3 as "commentDelivery3" + ,PCPEDC.OBSENTREGA4 as "commentDelivery4" + ,PCPEDC.NUMCAR as "shippimentId" + ,PCCARREG.DTSAIDA as "shippimentDate" + ,PCCARREG.DESTINO as "shippimentComment" + ,PCROTAEXP.DESCRICAO as "place" + ,PCEMPR.MATRICULA||'-'|| + PCEMPR.NOME as "driver" + ,PCVEICUL.PLACA||' - '||PCVEICUL.DESCRICAO as "car" + ,CASE WHEN PCCARREG.DTFECHA < PCCARREG.DTSAIDA THEN NULL + ELSE PCCARREG.DTFECHA END as "closeDate" + ,SEPARADOR.NOME as "separatorName" + ,CONFERENTE.NOME as "confName" + ,PCPEDC.DTLIBERA as "releaseDate" + FROM PCPEDC, PCCLIENT, PCPRACA, PCCLIENTENDENT ENDENT, PCCARREG, PCVEICUL, PCEMPR, PCROTAEXP, + PCEMPR SEPARADOR, PCEMPR CONFERENTE + WHERE NVL(ENDENT.CODPRACAENT, PCPEDC.CODPRACA) = PCPRACA.CODPRACA + AND PCPEDC.CODCLI = PCCLIENT.CODCLI + AND PCPEDC.CODENDENTCLI = ENDENT.CODENDENTCLI (+) + AND PCPEDC.CODCLI = ENDENT.CODCLI (+) + AND PCPEDC.NUMCAR = PCCARREG.NUMCAR (+) + AND PCCARREG.CODMOTORISTA = PCEMPR.MATRICULA (+) + AND PCCARREG.CODVEICULO = PCVEICUL.CODVEICULO (+) + AND PCCARREG.CODROTAPRINC = PCROTAEXP.CODROTA (+) + AND PCPEDC.CODFUNCSEP = SEPARADOR.MATRICULA (+) + AND PCPEDC.CODFUNCCONF = CONFERENTE.MATRICULA (+) + AND PCPEDC.NUMPED = ${orderId}`; + + const orderDelivery = await queryRunner.manager.query(sql); + if ( orderDelivery.length > 0 ) { + return orderDelivery[0]; + } else { + return null; + } + } finally { + await queryRunner.release(); + await dataSource.destroy(); + } + + } + + + async getTransfer(orderId: number) { + const dataSource = new DataSource(typeOrmConfig); + await dataSource.initialize(); + const queryRunner = dataSource.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT L.NUMPED as "orderId" + ,L.DTTRANSF as "transferDate" + ,L.NUMNOTA as "invoiceId" + ,L.NUMTRANSVENDA as "transactionId" + ,L.NUMCARANTERIOR as "oldShipment" + ,L.NUMCARATUAL as "newShipment" + ,L.MOTIVOTRANSF as "transferText" + ,L.codmotivo||'-'||PCTABDEV.MOTIVO as "cause" + ,L.codfunctransf||'-'||PCEMPR.NOME as "userName" + ,L.rotinatransf as "program" + FROM PCLOGTRANSFNFCARREG L, PCTABDEV, PCEMPR + WHERE L.CODMOTIVO = PCTABDEV.coddevol (+) + AND L.CODFUNCTRANSF = PCEMPR.MATRICULA (+) + AND L.NUMTRANSVENDA IN ( SELECT PCPEDC.NUMTRANSVENDA FROM PCPEDC WHERE PCPEDC.NUMPED = ${orderId} )`; + + const transferOrder = await queryRunner.manager.query(sql); + if ( transferOrder.length > 0 ) { + return transferOrder; + } else { + return null; + } + } finally { + await queryRunner.release(); + await dataSource.destroy(); + } + } + + async getStatusOrder(orderId: number) { + const dataSource = new DataSource(typeOrmConfig); + await dataSource.initialize(); + const queryRunner = dataSource.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT pcpedc.numped AS "orderId", + 'Digitação pedido' AS "status", + TO_DATE (TO_CHAR(pcpedc.data, 'DD/MM/YYYY') || ' ' || pcpedc.hora || ':' || pcpedc.minuto, + 'DD/MM/YYYY HH24:MI') + AS "statusDate", + pcpedc.codemitente || '-' || pcempr.nome "userName" + ,NULL as "comments" + FROM pcpedc, pcempr + WHERE pcpedc.numped = ${orderId} AND pcpedc.codemitente = pcempr.matricula(+) + UNION ALL + SELECT pcpedc.numped AS "orderId", + 'Montagem de carga' AS "status", + TO_DATE ( + TO_CHAR(pccarreg.datamon, 'DD/MM/YYYY') + || ' ' + || pccarreg.horamon + || ':' + || pccarreg.minutomon, + 'DD/MM/YYYY HH24:MI') + AS "statusDate", + pccarreg.codfuncmon || '-' || pcempr.nome "userName" + ,NULL as "comments" + FROM pcpedc, pcempr, pccarreg + WHERE pcpedc.numped = ${orderId} + AND pccarreg.codfuncmon = pcempr.matricula(+) + AND pcpedc.numcar = pccarreg.numcar + AND pcpedc.numcar > 0 + AND pccarreg.datamon is not null + UNION ALL + SELECT pcpedc.numped AS "orderId", + 'Emissão do mapa' AS "status", + CASE WHEN PCPEDC.DTEMISSAOMAPA IS NOT NULL THEN + TO_DATE ( + TO_CHAR(pcpedc.dtemissaomapa, 'DD/MM/YYYY') + || ' ' + || NVL(pcpedc.horaemissaomapa, '00') + || ':' + || nvl(pcpedc.minutoemissaomapa, '01'), + 'DD/MM/YYYY HH24:MI') ELSE NULL END + AS "statusDate", + pcpedc.codfuncemissaomapa || '-' || pcempr.nome AS "userName" + ,NULL as "comments" + FROM pcpedc, pcempr + WHERE pcpedc.numped = ${orderId} + AND pcpedc.codfuncemissaomapa = pcempr.matricula(+) + AND PCPEDC.DTEMISSAOMAPA IS NOT NULL + UNION ALL + SELECT pcpedc.numped AS "orderId", + 'Inicio de Separação' AS "status", + pcpedc.dtinicialsep as "statusDate", + pcpedc.codfuncsep || '-' || pcempr.nome "userName" + ,NULL as "comments" + FROM pcpedc, pcempr + WHERE pcpedc.numped = ${orderId} + AND pcpedc.codfuncsep = pcempr.matricula(+) + AND PCPEDC.dtinicialsep IS NOT NULL + UNION ALL + SELECT pcpedc.numped AS "orderId", + 'Fim de Separação' AS "status", + pcpedc.dtfinalsep as "statusDate", + pcpedc.codfuncsep || '-' || pcempr.nome "userName" + ,NULL as "comments" + FROM pcpedc, pcempr + WHERE pcpedc.numped = ${orderId} AND pcpedc.codfuncsep = pcempr.matricula(+) + and pcpedc.dtfinalsep is not null + UNION ALL + SELECT pcpedc.numped AS "orderId", + 'Inicio conferência' AS "status", + pcpedc.dtinicialcheckout AS "statusDate", + pcpedc.codfuncconf || '-' || pcempr.nome "userName" + ,NULL as "comments" + FROM pcpedc, pcempr + WHERE pcpedc.numped = ${orderId} + AND pcpedc.codfuncconf = pcempr.matricula(+) + AND pcpedc.dtinicialcheckout IS NOT NULL + UNION ALL + SELECT pcpedc.numped AS "orderId", + 'Fim conferência' AS "status", + pcpedc.dtfinalcheckout AS "statusDate", + pcpedc.codfuncconf || '-' || pcempr.nome "userName" + ,NULL as "comments" + FROM pcpedc, pcempr + WHERE pcpedc.numped = ${orderId} + AND pcpedc.codfuncconf = pcempr.matricula(+) + AND pcpedc.dtfinalcheckout IS NOT NULL + UNION ALL + SELECT pcpedc.numped AS "orderId", + 'Faturamento' AS "status", + TO_DATE ( + TO_CHAR(pcpedc.dtfat, 'DD/MM/YYYY') || ' ' || pcpedc.horafat || ':' || pcpedc.minutofat, + 'DD/MM/YYYY HH24:MI') + AS "statusDate", + pcempr.matricula || '-' || pcempr.nome "userName" + ,NULL as "comments" + FROM pcpedc, pcempr, pccarreg, pcnfsaid + WHERE pcpedc.numped = ${orderId} + AND pcpedc.numcar = pccarreg.numcar + and pcpedc.numtransvenda = pcnfsaid.numtransvenda + AND nvl(pcnfsaid.codemitente, decode(pcpedc.numcar,0,-1,pccarreg.codfuncfat)) = pcempr.matricula(+) + AND pcpedc.dtfat IS NOT NULL + UNION ALL + SELECT pcpedc.numped AS "orderId", + 'Entrega' AS "status", + pcnfsaid.dtcanhoto AS "statusDate", + CASE WHEN PCNFSAID.NUMCAR > 0 THEN + pcnfsaid.codfunccanhoto || '-' || pcempr.nome + ELSE '' END "userName" + ,NULL as "comments" + FROM pcpedc, pcnfsaid, pcempr, pccarreg + WHERE pcpedc.numped = ${orderId} + AND pcpedc.numtransvenda = pcnfsaid.numtransvenda + AND pcnfsaid.numcar = pccarreg.numcar (+) + AND pcnfsaid.codfunccanhoto = pcempr.matricula(+) + AND pcnfsaid.dtcanhoto IS NOT NULL + UNION ALL + SELECT pcpedc.numped AS "orderId", + 'Transf entre carregamento' AS "status", + pclogtransfnfcarreg.dttransf AS "statusDate", + pclogtransfnfcarreg.codfunctransf || '-' || pcempr.nome "userName", + 'ORIG: '||pclogtransfnfcarreg.numcaranterior || ' -> + DEST.: ' ||pclogtransfnfcarreg.numcaratual as "comments" + FROM pclogtransfnfcarreg, pcpedc, pcempr + WHERE pclogtransfnfcarreg.numnota = pcpedc.numnota (+) + AND pcpedc.numped = ${orderId} + AND pclogtransfnfcarreg.codfunctransf = pcempr.matricula(+) + ORDER BY 3`; + + const statusOrder = await queryRunner.manager.query(sql); + if ( statusOrder.length > 0 ) { + return statusOrder; + } else { + return null; + } + } catch(e) { + console.log(e); + } finally { + await queryRunner.release(); + await dataSource.destroy(); + } + } + + + async createInvoiceCheck(invoice: any) { + const dataSource = new DataSource(typeOrmConfig); + await dataSource.initialize(); + const queryRunner = dataSource.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + // TO_DATE('YYYY-MM-DDTHH24:MI:SS.000Z','${invoice.startDate}'), + // TO_DATE('YYYY-MM-DDTHH24:MI:SS.000Z','${invoice.endDate}'), + try { + const sqlSequence = 'SELECT ESSCONFERENCIANF.NEXTVAL as "id" FROM DUAL'; + const dbSequence = await queryRunner.manager.query(sqlSequence); + + const checkId = dbSequence[0].id; + + + const sql = `INSERT INTO ESTCONFERENCIANF ( ID, NUMTRANSVENDA, CODFILIAL, NUMNOTA, DTINICIO, DTFIM, CODFUNCCONF ) + VALUES ( ${checkId}, ${invoice.transactionId}, ${invoice.storeId}, ${invoice.invoiceId}, + TO_DATE(SUBSTR(REPLACE(REPLACE('${invoice.startDate}', 'T', ' '), 'Z', ''),1,18), 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE(SUBSTR(REPLACE(REPLACE('${invoice.endDate}', 'T', ' '), 'Z', ''),1,18), 'YYYY-MM-DD HH24:MI:SS'), + ${invoice.userId} )`; + await queryRunner.manager.query(sql); + + for ( const item of invoice.itens ) { + const sqlItem = `INSERT INTO ESTCONFERENCIANFITENS ( IDCONF, NUMTRANSVENDA, CODPROD, NUMSEQ, QT, DTCONF ) + VALUES ( ${checkId}, ${invoice.transactionId}, ${item.productId}, ${item.seq}, ${item.qt}, + TO_DATE(SUBSTR(REPLACE(REPLACE('${item.confDate}', 'T', ' '), 'Z', ''),1,18), 'YYYY-MM-DD HH24:MI:SS') )`; + await queryRunner.manager.query(sqlItem); + } + await queryRunner.commitTransaction(); + + return { message: 'Conferência salva com sucesso!' } + + } catch(erro) { + await queryRunner.rollbackTransaction(); + console.log(erro); + throw new HttpException(erro.message, HttpStatus.BAD_REQUEST); + } + finally { + await queryRunner.release(); + await dataSource.destroy(); + } + } + + +} \ No newline at end of file diff --git a/src/orders/repositories/invoice.repository.ts b/src/orders/repositories/invoice.repository.ts deleted file mode 100644 index ee08c1d..0000000 --- a/src/orders/repositories/invoice.repository.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { DataSource } from 'typeorm'; -import { InjectDataSource } from '@nestjs/typeorm'; - -@Injectable() -export class InvoiceRepository { - constructor( - @InjectDataSource() private readonly dataSource: DataSource, - ) {} - - async findInvoiceByChave(chavenfe: string) { - const queryRunner = this.dataSource.createQueryRunner(); - await queryRunner.connect(); - try { - const sql = ` - SELECT - pcnfsaid.codfilial AS "storeId", - pcnfsaid.dtsaida AS "invoiceDate", - pcnfsaid.numped AS "orderId", - pcnfsaid.numnota AS "invoiceId", - pcnfsaid.numtransvenda AS "transactionId", - pcnfsaid.codcli AS "customerId", - pcclient.cliente AS "customer", - pcnfsaid.codusur AS "sellerId", - pcusuari.nome AS "sellerName", - ( - SELECT SUM(pcmov.qt) - FROM pcmov - WHERE pcmov.numtransvenda = pcnfsaid.numtransvenda - ) AS "itensQt", - NULL AS "itens" - FROM pcnfsaid, pcclient, pcusuari - WHERE - pcnfsaid.codcli = pcclient.codcli - AND pcnfsaid.codusur = pcusuari.codusur - AND pcnfsaid.chavenfe = :chavenfe - `; - return await queryRunner.manager.query(sql, [chavenfe]); - } finally { - await queryRunner.release(); - } - } - - async findInvoiceItems(transactionId: number) { - const queryRunner = this.dataSource.createQueryRunner(); - await queryRunner.connect(); - try { - const sql = ` - SELECT - pcmov.codprod AS "productId", - pcprodut.descricao AS "productName", - pcprodut.embalagem AS "package", - pcmov.qt AS "qt", - pcprodut.codauxiliar AS "ean", - pcprodut.multiplo AS "multiple", - pcprodut.tipoproduto AS "productType", - REPLACE( - CASE - WHEN INSTR(PCPRODUT.URLIMAGEM, ';') > 0 THEN - SUBSTR(PCPRODUT.URLIMAGEM, 1, INSTR(PCPRODUT.URLIMAGEM, ';') - 1) - WHEN PCPRODUT.URLIMAGEM IS NOT NULL THEN - PCPRODUT.URLIMAGEM - ELSE NULL - END, - '167.249.211.178:8001', - '10.1.1.191' - ) AS "image" - FROM pcmov, pcprodut - WHERE - pcmov.codprod = pcprodut.codprod - AND pcmov.numtransvenda = :transactionId - `; - return await queryRunner.manager.query(sql, [transactionId]); - } finally { - await queryRunner.release(); - } - } -} diff --git a/src/orders/repositories/orders.repository.ts b/src/orders/repositories/orders.repository.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/shared/ResultModel.ts b/src/shared/ResultModel.ts new file mode 100644 index 0000000..52b3103 --- /dev/null +++ b/src/shared/ResultModel.ts @@ -0,0 +1,17 @@ +export class ResultModel { + constructor( + public success: boolean, + public message?: string, + public data?: T, + public error?: any + ) {} + + static success(data?: T, message?: string): ResultModel { + return new ResultModel(true, message, data); + } + + static failure(message: string, error?: any): ResultModel { + return new ResultModel(false, message, undefined, error); + } + } + \ No newline at end of file