197 lines
7.7 KiB
TypeScript
197 lines
7.7 KiB
TypeScript
import { UserModel } from '../../domain/models/user.model';
|
|
import { HttpException, HttpStatus, Injectable } from "@nestjs/common";
|
|
import { User } from 'src/domain/entity/tables/estusuario.enity';
|
|
import { Connection, getConnection } from 'typeorm';
|
|
import md5 = require('md5');
|
|
import { CreateUserModel } from 'src/domain/models/create-user.model';
|
|
import { Pcempr } from '../../domain/entity/tables/pcempr.entity';
|
|
import { connectionOptions } from 'src/configs/typeorm.config';
|
|
|
|
|
|
@Injectable()
|
|
export class UserService {
|
|
|
|
async create(data: CreateUserModel): Promise<User> {
|
|
const connection = getConnection();
|
|
const queryRunner = connection.createQueryRunner();
|
|
await queryRunner.connect();
|
|
|
|
try {
|
|
const user = await queryRunner.manager
|
|
.getRepository(User)
|
|
.createQueryBuilder('estusuario')
|
|
.where("\"estusuario\".email = :email", { email: data.email })
|
|
.getOne();
|
|
if (user != null) {
|
|
throw new HttpException("Já existe um usuário cadastrado no sistema com este email", HttpStatus.BAD_REQUEST);
|
|
}
|
|
} catch (err) {
|
|
throw err;
|
|
} finally {
|
|
await queryRunner.release();
|
|
}
|
|
|
|
const newUser = new User();
|
|
newUser.username = data.userName;
|
|
newUser.password = md5(data.password).toUpperCase();
|
|
newUser.email = data.email;
|
|
newUser.role = data.application;
|
|
newUser.blocked = "N";
|
|
newUser.registration = data.registration;
|
|
|
|
await getConnection()
|
|
.createQueryBuilder()
|
|
.insert()
|
|
.into(User)
|
|
.values(newUser)
|
|
.execute();
|
|
|
|
return newUser;
|
|
|
|
}
|
|
|
|
async findAll() {
|
|
const sqlUsers = `SELECT PCEMPR.MATRICULA as "userId"
|
|
,PCEMPR.NOME||' ('||PCEMPR.MATRICULA||')' as "name"
|
|
,PCEMPR.USUARIOBD as "userBD"
|
|
,PCEMPR.CODFILIAL as "storeId"
|
|
,PCEMPR.FUNCAO as "function"
|
|
,PCSETOR.DESCRICAO as "sector"
|
|
FROM PCEMPR, PCSETOR
|
|
WHERE PCEMPR.CODSETOR = PCSETOR.CODSETOR
|
|
AND PCEMPR.DTDEMISSAO IS NULL
|
|
ORDER BY PCEMPR.NOME`;
|
|
const connection = getConnection();
|
|
const queryRunner = connection.createQueryRunner();
|
|
await queryRunner.connect();
|
|
try {
|
|
return await queryRunner.query(sqlUsers);
|
|
} finally {
|
|
await queryRunner.release();
|
|
}
|
|
}
|
|
|
|
async authenticate(user: UserModel): Promise<any> {
|
|
const connection = new Connection(connectionOptions);
|
|
await connection.connect();
|
|
const queryRunner = connection.createQueryRunner();
|
|
await queryRunner.connect();
|
|
try {
|
|
|
|
const sql = 'SELECT PCEMPR.matricula as \"id\" ' +
|
|
' ,PCEMPR.usuariobd as \"userName\" ' +
|
|
' ,PCEMPR.codfilial as \"codigoFilial\" ' +
|
|
' ,PCFILIAL.fantasia as \"nomeFilial\" ' +
|
|
' ,PCEMPR.codusur as \"seller\" ' +
|
|
' ,NVL(PCEMPR.percdesc,0) as \"discountPercent\" ' +
|
|
' ,NVL(PCEMPR.codsetor,0) as \"sectorId\" ' +
|
|
' ,NVL(PCPARAMFILIAL.valor,0) as \"sectorManagerId\" ' +
|
|
' ,( SELECT PCUSUARI.CODSUPERVISOR FROM PCUSUARI WHERE PCUSUARI.CODUSUR = PCEMPR.CODUSUR ) as \"supervisorId\" ' +
|
|
' ,( SELECT NVL(P.valor,0) FROM PCPARAMFILIAL P WHERE P.CODFILIAL = \'99\' AND ' +
|
|
' P.NOME = \'CON_PRAZOENTREGA\' ) as \"deliveryTime\" ' +
|
|
' FROM PCEMPR, PCFILIAL, PCPARAMFILIAL ' +
|
|
' WHERE PCEMPR.CODFILIAL = PCFILIAL.CODIGO (+)' +
|
|
' AND PCPARAMFILIAL.CODFILIAL = \'99\' ' +
|
|
' AND PCPARAMFILIAL.NOME = \'CON_CODSETORGERENTELOJA\' ' +
|
|
' AND PCEMPR.EMAIL = :username AND PCEMPR.SENHABD = CRYPT(:password, USUARIOBD)';
|
|
|
|
const users = await queryRunner.manager
|
|
.query(sql, [user.email, user.password]);
|
|
|
|
if (users.length == 0) {
|
|
return null;
|
|
}
|
|
|
|
// const sqlDiasUteis = 'SELECT ( mv_prox_diautil( (TRUNC(SYSDATE) + :1) + COUNT(1), :2 ) - TRUNC(SYSDATE) ) as "days" ' +
|
|
// ' FROM MVDIASUTEIS ' +
|
|
// ' WHERE MVDIASUTEIS.CODFILIAL = :3 ' +
|
|
// ` AND MVDIASUTEIS.diaentrega = 'N' ` +
|
|
// ` AND MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + :4 `;
|
|
|
|
// const sqlDiasUteis = `SELECT CASE WHEN mv_prox_diautil(TRUNC(SYSDATE), :1) > TRUNC(SYSDATE) THEN
|
|
// ( ( mv_prox_diautil((mv_prox_diautil(TRUNC(SYSDATE), :2) + :3) + COUNT(1), :4 ) - (mv_prox_diautil(TRUNC(SYSDATE), :5)) ) - 1 )
|
|
// ELSE ( mv_prox_diautil((mv_prox_diautil(TRUNC(SYSDATE), :6) + :7) + COUNT(1), :8 ) - (mv_prox_diautil(TRUNC(SYSDATE), :9)) ) END as "days"
|
|
// FROM MVDIASUTEIS
|
|
// WHERE MVDIASUTEIS.CODFILIAL = :10
|
|
// AND MVDIASUTEIS.diaentrega = 'N'
|
|
// AND MVDIASUTEIS.data BETWEEN mv_prox_diautil(TRUNC(SYSDATE), :11) AND mv_prox_diautil(TRUNC(SYSDATE), :12) + :13`;
|
|
|
|
// const deliveryDays = await queryRunner.manager
|
|
// .query(sqlDiasUteis, ['6',
|
|
// '6', Number.parseInt(users[0].deliveryTime), '6', '6',
|
|
// '6', Number.parseInt(users[0].deliveryTime), '6', '6',
|
|
// '6',
|
|
// '6', '6', Number.parseInt(users[0].deliveryTime)
|
|
// ]);
|
|
|
|
const sqlDiasEntrega = `SELECT ( MAX(MVDIASUTEIS.DATA) - TRUNC(SYSDATE) ) as "days"
|
|
FROM MVDIASUTEIS
|
|
WHERE MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE)
|
|
AND TRUNC(SYSDATE) + :dias`;
|
|
|
|
const sqlDiasSemEntrega = `SELECT GREATEST(COUNT(1) - 1,0) as "daysNoDelivery"
|
|
FROM MVDIASUTEIS
|
|
WHERE MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE)
|
|
AND TRUNC(SYSDATE) + :dias
|
|
AND MVDIASUTEIS.DIAENTREGA = 'N'`;
|
|
|
|
const deliveryDays2 = await queryRunner.manager
|
|
.query(sqlDiasEntrega, [Number.parseInt(users[0].deliveryTime)]);
|
|
|
|
const noDeliveryDays = await queryRunner.manager
|
|
.query(sqlDiasSemEntrega, [Number.parseInt(users[0].deliveryTime)]);
|
|
|
|
const days = Number.parseInt(deliveryDays2[0].days) +
|
|
( noDeliveryDays.length > 0 ? Number.parseInt(noDeliveryDays[0].daysNoDelivery) : 0 );
|
|
|
|
const userDb = users[0];
|
|
console.log(userDb);
|
|
if (!isNaN(days)) {
|
|
userDb.deliveryTime = days; // deliveryDays[0].days;
|
|
}
|
|
console.log(days);
|
|
console.log(userDb);
|
|
return userDb;
|
|
|
|
} finally {
|
|
await queryRunner.release();
|
|
await connection.close();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
async discountUser(userId: number): Promise<any> {
|
|
const connection = getConnection();
|
|
const queryRunner = connection.createQueryRunner();
|
|
await queryRunner.connect();
|
|
try {
|
|
return await queryRunner.manager
|
|
.getRepository(Pcempr)
|
|
.createQueryBuilder('pcempr')
|
|
.select("NVL(\"pcempr\".percdesc,0) as \"discountUser\"")
|
|
.where("MATRICULA = :userId", { userId })
|
|
.getRawOne(); //...authUser,
|
|
} finally {
|
|
await queryRunner.release();
|
|
}
|
|
}
|
|
|
|
async update(email: string, newPassword: string) {
|
|
const connection = getConnection();
|
|
const queryRunner = connection.createQueryRunner();
|
|
await queryRunner.connect();
|
|
try {
|
|
return await queryRunner.manager
|
|
.createQueryBuilder()
|
|
.update(User)
|
|
.set({ password: newPassword })
|
|
.where("EMAIL = :email", { email })
|
|
.execute();
|
|
|
|
} finally {
|
|
await queryRunner.release();
|
|
}
|
|
}
|
|
|
|
} |