File

src/partnership/partnership.service.ts

Index

Methods

Constructor

constructor(partnershipRepository: Repository<Partnership>, dataSource: DataSource)
Parameters :
Name Type Optional
partnershipRepository Repository<Partnership> No
dataSource DataSource No

Methods

Async calculatePartnership
calculatePartnership(body: PartnershipBodyArray)
Parameters :
Name Type Optional
body PartnershipBodyArray No
Returns : unknown
formatReturnPartnership
formatReturnPartnership(queryBuilder)
Parameters :
Name Optional
queryBuilder No
Returns : { destination: {}; }
Async getPartnershipId
getPartnershipId(id: number)
Parameters :
Name Type Optional
id number No
Returns : unknown
Async postPartnership
postPartnership(partnership: PartnershipDto)
Parameters :
Name Type Optional
partnership PartnershipDto No
Returns : unknown
Async putPartnership
putPartnership(id: number, partnership: PartnershipDto)
Parameters :
Name Type Optional
id number No
partnership PartnershipDto No
Returns : any
import { Injectable } from '@nestjs/common';
import { DataSource, Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { PartnershipBodyArray, PartnershipDto } from './dto/partnership.dto';
import { Partnership } from '../entities/partnership';

@Injectable()
export class PartnershipService {
  constructor(
    @InjectRepository(Partnership)
    private partnershipRepository: Repository<Partnership>,

    private dataSource: DataSource,
  ) { }

  async postPartnership(partnership: PartnershipDto) {
    return await this.partnershipRepository.save(partnership);
  }

  formatReturnPartnership(queryBuilder) {
    let destination = [];
    queryBuilder.forEach((element) => {
      destination = [...destination, ...element.destination.split(';')];
    });
    destination = [...new Set(destination)];
    if (!destination?.length)
      destination = ["ALGAR"]
    return { destination };
  }
  async calculatePartnership(body: PartnershipBodyArray) {
    if (body.sender) {
      const queryBuilderSender: { destination: string }[] = await this
        .dataSource.query(`
        with list as (
          select distinct
                 destination
            from sender where sender = ${body.sender}
             and destination is not null)
        select distinct regexp_split_to_table(destination,',') as destination
          from list`);
      if (queryBuilderSender.length)
        return this.formatReturnPartnership(queryBuilderSender);
    }

    const sPartnership = JSON.stringify(body.partnership);
    const queryBuilder = await this.dataSource.query(`
    WITH source AS (
      SELECT
        *
      from
      json_to_recordset(
        '${sPartnership}'
        ) AS x(fab varchar(20),dis  varchar(20))
      )
      , list as (
        select
          distinct
          c.data_destinations as destination
          from clients as c
          inner join cnpjs_client as cc on c.id = cc.client_id
          inner join source as bc on cc.cnpj = bc.fab where c.data_destinations is not null
          union all
          select p.data_destinations as destination
          from partnership as p
          inner join cnpjs_distributor cd on p.distributor_id = p.distributor_id
          inner join cnpjs_client as ccp on p.client_id = ccp.client_id
          inner join source as b on ccp.cnpj  = b.fab
          and cd.cnpj = b.dis
          where p.data_destinations is not null)
      select distinct regexp_split_to_table(destination,',') as destination
        from list
    `);

    return this.formatReturnPartnership(queryBuilder);
  }

  async getPartnershipId(id: number) {
    return await this.partnershipRepository.findOne({
      where: { id },
      relations: ['category'],
    });
  }
  async putPartnership(id: number, partnership: PartnershipDto) {
    await this.partnershipRepository.update(id, partnership);
  }
}

results matching ""

    No results matching ""