-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #437 from RJ-SMTR/hotfix/427-sincronismo
(prod) fix: update TransacaoView with value = 0
- Loading branch information
Showing
8 changed files
with
290 additions
and
166 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,152 @@ | ||
import { BadRequestException, Controller, Get, HttpCode, HttpStatus, ParseArrayPipe, Query, UseGuards } from '@nestjs/common'; | ||
import { AuthGuard } from '@nestjs/passport'; | ||
import { ApiBearerAuth, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; | ||
import { Roles } from 'src/roles/roles.decorator'; | ||
import { RoleEnum } from 'src/roles/roles.enum'; | ||
import { RolesGuard } from 'src/roles/roles.guard'; | ||
import { ApiDescription } from 'src/utils/api-param/description-api-param'; | ||
import { CustomLogger } from 'src/utils/custom-logger'; | ||
import { ParseDatePipe } from 'src/utils/pipes/parse-date.pipe'; | ||
import { ParseListPipe } from 'src/utils/pipes/parse-list.pipe'; | ||
import { ParseNumberPipe } from 'src/utils/pipes/parse-number.pipe'; | ||
import { CnabService } from './cnab.service'; | ||
|
||
@ApiTags('Manutenção') | ||
@Controller({ | ||
path: 'manutencao/cnab', | ||
version: '1', | ||
}) | ||
export class CnabManutencaoController { | ||
private logger = new CustomLogger(CnabManutencaoController.name, { timestamp: true }); | ||
|
||
constructor(private readonly cnabService: CnabService) {} | ||
|
||
@Get('generateRemessa') | ||
@HttpCode(HttpStatus.OK) | ||
@UseGuards(AuthGuard('jwt'), RolesGuard) | ||
@Roles(RoleEnum.master) | ||
@ApiOperation({ description: 'Feito para manutenção pelos admins.\n\nExecuta a geração e envio de remessa - que normalmente é feita via cronjob' }) | ||
@ApiQuery({ name: 'dataOrdemInicial', description: ApiDescription({ _: 'Data da Ordem de Pagamento Inicial - salvar transações', example: '2024-07-15' }), required: true, type: String }) | ||
@ApiQuery({ name: 'dataOrdemFinal', description: ApiDescription({ _: 'Data da Ordem de Pagamento Final - salvar transações', example: '2024-07-16' }), required: true, type: String }) | ||
@ApiQuery({ name: 'diasAnterioresOrdem', description: ApiDescription({ _: 'Procurar também por dias Anteriores a dataOrdemInicial - salvar transações', default: 0 }), required: false, type: Number, example: 7 }) | ||
@ApiQuery({ name: 'consorcio', description: 'Nome do consorcio - salvar transações', required: true, type: String, example: 'Todos / Van / Empresa /Nome Consorcio' }) | ||
@ApiQuery({ name: 'dt_pagamento', description: ApiDescription({ _: 'Data Pagamento', default: 'O dia de hoje' }), required: false, type: String }) | ||
@ApiQuery({ name: 'isConference', description: 'Conferencia - Se o remessa será gerado numa tabela de teste.', required: true, type: Boolean, example: true }) | ||
@ApiQuery({ name: 'isCancelamento', description: 'Cancelamento', required: true, type: Boolean, example: false }) | ||
@ApiQuery({ name: 'nsaInicial', description: ApiDescription({ default: 'O NSA atual' }), required: false, type: Number }) | ||
@ApiQuery({ name: 'nsaFinal', description: ApiDescription({ default: 'nsaInicial' }), required: false, type: Number }) | ||
@ApiQuery({ name: 'dataCancelamento', description: ApiDescription({ _: 'Data de vencimento da transação a ser cancelada (DetalheA).', 'Required if': 'isCancelamento = true' }), required: false, type: String, example: '2024-07-16' }) | ||
@ApiBearerAuth() | ||
async getGenerateRemessa( | ||
@Query('dataOrdemInicial', new ParseDatePipe({ transform: true })) _dataOrdemInicial: any, // Date | ||
@Query('dataOrdemFinal', new ParseDatePipe({ transform: true })) _dataOrdemFinal: any, // Date | ||
@Query('diasAnterioresOrdem', new ParseNumberPipe({ min: 0, defaultValue: 0 })) diasAnteriores: number, | ||
@Query('consorcio') consorcio: string, | ||
@Query('dt_pagamento', new ParseDatePipe({ transform: true, optional: true })) _dataPgto: any, // Date | undefined | ||
@Query('isConference') isConference: boolean, | ||
@Query('isCancelamento') isCancelamento: boolean, | ||
@Query('nsaInicial', new ParseNumberPipe({ min: 1, optional: true })) nsaInicial: number | undefined, | ||
@Query('nsaFinal', new ParseNumberPipe({ min: 1, optional: true })) nsaFinal: number | undefined, | ||
@Query('dataCancelamento', new ParseDatePipe({ transform: true, optional: true })) _dataCancelamento: any, // Date | undefined | ||
) { | ||
const dataOrdemInicial = _dataOrdemInicial as Date; | ||
const dataOrdemFinal = _dataOrdemFinal as Date; | ||
const dataPgto = _dataOrdemFinal as Date | undefined; | ||
const dataCancelamento = _dataCancelamento as Date | undefined; | ||
|
||
if (isCancelamento && !dataCancelamento) { | ||
throw new BadRequestException('dataCancelamento é obrigatório se isCancelamento = true'); | ||
} | ||
|
||
return await this.cnabService.getGenerateRemessa({ | ||
dataOrdemInicial, | ||
dataOrdemFinal, | ||
diasAnteriores, | ||
consorcio, | ||
dataPgto, | ||
isConference, | ||
isCancelamento, | ||
nsaInicial, | ||
nsaFinal, | ||
dataCancelamento, | ||
}); | ||
} | ||
|
||
@Get('updateRetorno') | ||
@HttpCode(HttpStatus.OK) | ||
@UseGuards(AuthGuard('jwt'), RolesGuard) | ||
@Roles(RoleEnum.master) | ||
@ApiOperation({ description: 'Feito para manutenção pelos admins.\n\nExecuta a leitura do retorno - que normalmente é feita via cronjob' }) | ||
@ApiBearerAuth() | ||
@ApiQuery({ name: 'folder', description: ApiDescription({ _: 'Pasta para ler os retornos', default: '`/retorno`' }), required: false, type: String }) | ||
@ApiQuery({ name: 'maxItems', description: ApiDescription({ _: 'Número máximo de itens para ler', min: 1 }), required: false, type: Number }) | ||
async getUpdateRetorno( | ||
@Query('folder') folder: string | undefined, // | ||
@Query('maxItems', new ParseNumberPipe({ min: 1, optional: true })) maxItems: number | undefined, | ||
) { | ||
return await this.cnabService.updateRetorno(folder, maxItems); | ||
} | ||
|
||
@Get('syncTransacaoViewOrdemPgto') | ||
@HttpCode(HttpStatus.OK) | ||
@UseGuards(AuthGuard('jwt'), RolesGuard) | ||
@Roles(RoleEnum.master) | ||
@ApiOperation({ description: 'Feito para manutenção pelos admins.\n\nExecuta o sincronismo de TransacaoView com as OrdensPagamento (ItemTransacaoAgrupado) - que normalmente é feia via cronjob' }) | ||
@ApiQuery({ name: 'dataOrdemInicial', type: Date, required: false, description: 'Data da Ordem de Pagamento Inicial' }) | ||
@ApiQuery({ name: 'dataOrdemFinal', type: Date, required: false, description: 'Data da Ordem de Pagamento Final' }) | ||
@ApiQuery({ name: 'nomeFavorecido', type: String, required: false, description: 'Lista de nomes dos favorecidos' }) | ||
@ApiBearerAuth() | ||
async getSyncTransacaoViewOrdemPgto( | ||
@Query('dataOrdemInicial', new ParseDatePipe({ transform: true, optional: true })) dataOrdemInicial: Date | undefined, // | ||
@Query('dataOrdemFinal', new ParseDatePipe({ transform: true, optional: true })) dataOrdemFinal: Date | undefined, | ||
@Query('nomeFavorecido', new ParseListPipe({ transform: true, optional: true })) nomeFavorecido: string[] | undefined, | ||
) { | ||
const dataOrdem_between = dataOrdemInicial && dataOrdemFinal && ([dataOrdemInicial, dataOrdemFinal] as [Date, Date]); | ||
return await this.cnabService.syncTransacaoViewOrdemPgto({ dataOrdem_between, nomeFavorecido }); | ||
} | ||
|
||
@Get('updateTransacaoViewBigquery') | ||
@HttpCode(HttpStatus.OK) | ||
@UseGuards(AuthGuard('jwt'), RolesGuard) | ||
@Roles(RoleEnum.master) | ||
@ApiOperation({ description: 'Atualiza TransacaoView do Bigquery' }) | ||
@ApiBearerAuth() | ||
@ApiQuery({ name: 'dataOrdemInicial', type: Date, required: true, description: 'Data da Ordem de Pagamento Inicial' }) | ||
@ApiQuery({ name: 'dataOrdemFinal', type: Date, required: true, description: 'Data da Ordem de Pagamento Final' }) | ||
@ApiQuery({ name: 'consorcio', type: String, required: false, description: ApiDescription({ _: 'Nome do consorcio - salvar transações', default: 'Todos' }), example: 'Todos / Van / Empresa /Nome Consorcio' }) | ||
@ApiQuery({ name: 'idTransacao', type: String, required: false, description: 'Lista de idTransacao para atualizar' }) | ||
async getUpdateTransacaoViewBigquery( | ||
@Query('dataOrdemInicial', new ParseDatePipe({ transform: true })) dataOrdemInicial: any, // | ||
@Query('dataOrdemFinal', new ParseDatePipe({ transform: true })) dataOrdemFinal: any, | ||
@Query('consorcio') consorcio: string | undefined, | ||
@Query('idTransacao', new ParseArrayPipe({ items: String, separator: ',', optional: true })) idTransacao: string[], // | ||
) { | ||
const _dataOrdemInicial: Date = dataOrdemInicial; | ||
const _dataOrdemFinal: Date = dataOrdemFinal; | ||
const _consorcio = consorcio || 'Todos'; | ||
return await this.cnabService.updateTransacaoViewBigquery(_dataOrdemInicial, _dataOrdemFinal, 0, _consorcio, idTransacao); | ||
} | ||
|
||
@Get('deduplicateTransacaoView') | ||
@HttpCode(HttpStatus.OK) | ||
@UseGuards(AuthGuard('jwt'), RolesGuard) | ||
@Roles(RoleEnum.master) | ||
@ApiOperation({ description: 'Feito para manutenção pelos admins.\n\nRemove duplicatas de TransacaoView' }) | ||
@ApiBearerAuth() | ||
async getDeduplicateTransacaoView() { | ||
return await this.cnabService.deduplicateTransacaoView(); | ||
} | ||
|
||
@Get('updateTransacaoViewBigqueryValues') | ||
@HttpCode(HttpStatus.OK) | ||
@UseGuards(AuthGuard('jwt'), RolesGuard) | ||
@Roles(RoleEnum.master) | ||
@ApiOperation({ description: 'Feito para manutenção pelos admins.\n\nAtualiza os valores de TransacaoView existentes a a partir do Bigquery.' }) | ||
@ApiBearerAuth() | ||
@ApiQuery({ name: 'diasAnteriores', type: Number, required: false, description: 'Atualizar apenas os itens até N dias atrás' }) | ||
async getUpdateTransacaoViewBigqueryValues( | ||
@Query('diasAnteriores', new ParseNumberPipe({ optional: true })) diasAnteriores: number | undefined, // | ||
) { | ||
return await this.cnabService.updateTransacaoViewBigqueryValues(diasAnteriores); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.