From b98b219e523799299bf0f87ec8ab3a13758c6525 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 28 Mar 2025 17:03:25 -0300 Subject: [PATCH] Ajuste conexao oracle & postgres --- .env | 14 + package-lock.json | 262 ++-- package.json | 4 +- src/app.module.ts | 38 +- src/auth/auth/auth.controller.ts | 10 +- src/auth/auth/auth.service.ts | 2 +- src/auth/users/dto/auth-request.dto.ts | 4 + .../users/models/change-password.model.ts | 6 + src/auth/users/models/reset-password.model.ts | 5 + src/auth/users/models/user.model.ts | 10 + src/auth/users/users.module.ts | 2 +- src/auth/users/users.service.spec.ts | 18 - src/auth/users/users.service.ts | 17 +- src/core/configs/typeorm.config.ts | 36 +- src/core/configs/typeorm.oracle.config.ts | 14 + src/core/configs/typeorm.postgres.config.ts | 15 + src/core/services/base.controller.ts | 101 -- src/core/services/base.module.ts | 14 - src/core/services/base.service.ts | 331 ----- src/data-consult/data-consult.controller.ts | 7 +- src/data-consult/data-consult.module.ts | 6 +- src/data-consult/data-consult.repository.ts | 39 +- src/data-consult/data-consult.service.ts | 100 +- src/logistic/logistic.service.ts | 17 +- src/main.ts | 2 +- src/orders-payment/orders-payment.service.ts | 12 +- src/orders/orders.service.ts | 1202 +++++++++-------- src/products/products.service.ts | 11 +- 28 files changed, 916 insertions(+), 1383 deletions(-) create mode 100644 .env create mode 100644 src/auth/users/dto/auth-request.dto.ts create mode 100644 src/auth/users/models/change-password.model.ts create mode 100644 src/auth/users/models/reset-password.model.ts create mode 100644 src/auth/users/models/user.model.ts delete mode 100644 src/auth/users/users.service.spec.ts create mode 100644 src/core/configs/typeorm.oracle.config.ts create mode 100644 src/core/configs/typeorm.postgres.config.ts delete mode 100644 src/core/services/base.controller.ts delete mode 100644 src/core/services/base.module.ts delete mode 100644 src/core/services/base.service.ts diff --git a/.env b/.env new file mode 100644 index 0000000..cdb4b67 --- /dev/null +++ b/.env @@ -0,0 +1,14 @@ +ORACLE_HOST=10.1.1.241 +ORACLE_CONNECT_STRING= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.241)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = WINT))) +ORACLE_PORT=1521 +ORACLE_SERVICE=WINT +ORACLE_USER=SEVEN +ORACLE_PASSWORD=USR54SEV + +POSTGRES_HOST=10.1.1.222 +POSTGRES_PORT=5432 +POSTGRES_USER=ti +POSTGRES_PASSWORD=ti +POSTGRES_DB=ksdb + + diff --git a/package-lock.json b/package-lock.json index 98335e4..1e490e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,8 +61,8 @@ "prettier": "^2.1.2", "supertest": "^6.0.0", "ts-jest": "^26.4.3", - "ts-loader": "^8.0.8", - "ts-node": "^9.0.0", + "ts-loader": "^9.5.2", + "ts-node": "^10.9.2", "tsconfig-paths": "^3.9.0", "typescript": "^5.8.2" } @@ -780,6 +780,30 @@ "node": ">=0.1.90" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@inquirer/checkbox": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.4.tgz", @@ -1571,6 +1595,7 @@ "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-11.0.5.tgz", "integrity": "sha512-ab/d8Ple+dMSQ4pC7RSNjhntpT8gFQQE8y/F/ilaplp7zPGpuxbayRtYbsA/wc1UkJHORDckrqFc8Jh8mrTq2A==", "dev": true, + "license": "MIT", "dependencies": { "@angular-devkit/core": "19.1.8", "@angular-devkit/schematics": "19.1.8", @@ -2411,6 +2436,34 @@ "node": ">= 6" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -3455,15 +3508,6 @@ } ] }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -4799,15 +4843,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -4847,18 +4882,6 @@ "node": ">=6" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -7832,32 +7855,6 @@ "node": ">=6.11.5" } }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -8047,55 +8044,6 @@ "node": ">= 4.0.0" } }, - "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/merge-descriptors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", @@ -9118,12 +9066,6 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, "node_modules/psl": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", @@ -10803,15 +10745,6 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -11157,63 +11090,91 @@ } }, "node_modules/ts-loader": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.4.0.tgz", - "integrity": "sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", + "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", - "semver": "^7.3.4" + "semver": "^7.3.4", + "source-map": "^0.7.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" }, "peerDependencies": { "typescript": "*", - "webpack": "*" + "webpack": "^5.0.0" } }, - "node_modules/ts-loader/node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "source-map-support": "^0.5.17", + "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "bin": { "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, - "engines": { - "node": ">=10.0.0" - }, "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/tsconfig-paths": { @@ -11783,6 +11744,13 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, "node_modules/v8-to-istanbul": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", diff --git a/package.json b/package.json index 00b25be..ca0caf1 100644 --- a/package.json +++ b/package.json @@ -72,8 +72,8 @@ "prettier": "^2.1.2", "supertest": "^6.0.0", "ts-jest": "^26.4.3", - "ts-loader": "^8.0.8", - "ts-node": "^9.0.0", + "ts-loader": "^9.5.2", + "ts-node": "^10.9.2", "tsconfig-paths": "^3.9.0", "typescript": "^5.8.2" }, diff --git a/src/app.module.ts b/src/app.module.ts index 3dd880b..9d25960 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,13 +1,10 @@ -import { BaseModule } from './core/services/base.module'; -import { BaseService } from './core/services/base.service'; +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'; -/* eslint-disable @typescript-eslint/no-unused-vars */ -/* eslint-disable prettier/prettier */ - -import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { typeOrmConfig, typeOrmPgConfig } from './core/configs/typeorm.config'; import { ProductsModule } from './products/products.module'; import { AuthModule } from './auth/auth/auth.module'; import { DataConsultModule } from './data-consult/data-consult.module'; @@ -18,13 +15,22 @@ 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 { CacheModule } from './core/configs/cache/redis.module'; import { LogisticService } from './logistic/logistic.service'; import { LoggerModule } from './Log/logger.module'; @Module({ imports: [ - BaseModule, + ConfigModule.forRoot({ isGlobal: true }), // necessário para ConfigService + TypeOrmModule.forRootAsync({ + name: 'oracle', + inject: [ConfigService], + useFactory: createOracleConfig, + }), + TypeOrmModule.forRootAsync({ + name: 'postgres', + inject: [ConfigService], + useFactory: createPostgresConfig, + }), LogisticModule, OrdersPaymentModule, HttpModule, @@ -36,14 +42,8 @@ import { LoggerModule } from './Log/logger.module'; ProductsModule, AuthModule, OrdersModule, - TypeOrmModule.forRoot(typeOrmConfig), - TypeOrmModule.forRoot(typeOrmPgConfig), - CacheModule, - ], - controllers: [ - OcorrencesController, LogisticController,], - providers: [ - BaseService, LogisticService,], + controllers: [OcorrencesController, LogisticController], + providers: [ LogisticService], }) -export class AppModule { } +export class AppModule {} diff --git a/src/auth/auth/auth.controller.ts b/src/auth/auth/auth.controller.ts index 25ce48b..d2b73d0 100644 --- a/src/auth/auth/auth.controller.ts +++ b/src/auth/auth/auth.controller.ts @@ -9,10 +9,10 @@ import { } from '@nestjs/common'; import { AuthService } from './auth.service'; import { UsersService } from '../users/users.service'; -import { UserModel } from '../../core/models/user.model'; -import { ResultModel } from '../../core/models/result.model'; -import { ResetPasswordModel } from '../../core/models/reset-password.model'; -import { ChangePasswordModel } from '../../core/models/change-password.model'; +import { UserModel } from 'src/core/models/user.model'; +import { ResultModel } from 'src/core/models/result.model'; +import { ResetPasswordModel } from 'src/core/models/reset-password.model'; +import { ChangePasswordModel } from 'src/core/models/change-password.model'; @Controller('api/v1/auth') export class AuthController { @@ -69,4 +69,4 @@ export class AuthController { } -} +} \ No newline at end of file diff --git a/src/auth/auth/auth.service.ts b/src/auth/auth/auth.service.ts index 8dc8a3d..89cbd12 100644 --- a/src/auth/auth/auth.service.ts +++ b/src/auth/auth/auth.service.ts @@ -29,4 +29,4 @@ export class AuthService { //return await this.accountService.findOneByUsername(payload.username); return payload; } -} +} \ No newline at end of file diff --git a/src/auth/users/dto/auth-request.dto.ts b/src/auth/users/dto/auth-request.dto.ts new file mode 100644 index 0000000..1c569bb --- /dev/null +++ b/src/auth/users/dto/auth-request.dto.ts @@ -0,0 +1,4 @@ +export class AuthRequestDto { + userName: string; + password: string; +} \ No newline at end of file diff --git a/src/auth/users/models/change-password.model.ts b/src/auth/users/models/change-password.model.ts new file mode 100644 index 0000000..f7b0462 --- /dev/null +++ b/src/auth/users/models/change-password.model.ts @@ -0,0 +1,6 @@ +export class ChangePasswordModel { + id: string; + currentPassword: string; + newPassword: string; + } + \ No newline at end of file diff --git a/src/auth/users/models/reset-password.model.ts b/src/auth/users/models/reset-password.model.ts new file mode 100644 index 0000000..d311934 --- /dev/null +++ b/src/auth/users/models/reset-password.model.ts @@ -0,0 +1,5 @@ +export class ResetPasswordModel { + document: string; + email: string; + } + \ No newline at end of file diff --git a/src/auth/users/models/user.model.ts b/src/auth/users/models/user.model.ts new file mode 100644 index 0000000..518efd7 --- /dev/null +++ b/src/auth/users/models/user.model.ts @@ -0,0 +1,10 @@ +export interface UserModel { + id: string; + name: string; + sellerId: string; + storeId: string; + email: string; + username: string; + dataDesligamento: Date | null; + situacao: string; +} diff --git a/src/auth/users/users.module.ts b/src/auth/users/users.module.ts index 5f64c24..d66312e 100644 --- a/src/auth/users/users.module.ts +++ b/src/auth/users/users.module.ts @@ -7,4 +7,4 @@ import { UsersService } from './users.service'; providers: [UsersService], exports: [UsersService], }) -export class UsersModule {} +export class UsersModule {} \ No newline at end of file diff --git a/src/auth/users/users.service.spec.ts b/src/auth/users/users.service.spec.ts deleted file mode 100644 index 62815ba..0000000 --- a/src/auth/users/users.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { UsersService } from './users.service'; - -describe('UsersService', () => { - let service: UsersService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [UsersService], - }).compile(); - - service = module.get(UsersService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/auth/users/users.service.ts b/src/auth/users/users.service.ts index 1c4bf3b..a3ab163 100644 --- a/src/auth/users/users.service.ts +++ b/src/auth/users/users.service.ts @@ -1,17 +1,16 @@ -/* eslint-disable prettier/prettier */ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { DataSource } from 'typeorm'; import md5 = require('md5'); import { Guid } from "guid-typescript"; -import { typeOrmConfig } from '../../core/configs/typeorm.config'; -import { UserModel } from '../../core/models/user.model'; - +import { createOracleConfig } from '../../core/configs/typeorm.oracle.config'; +import { ConfigService } from '@nestjs/config'; @Injectable() export class UsersService { + constructor(private readonly configService: ConfigService) {} + async authenticate(user: any): Promise { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createOracleConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -51,7 +50,7 @@ export class UsersService { } async resetPassword(user: any): Promise { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createOracleConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -105,7 +104,7 @@ export class UsersService { async changePassword(user: any): Promise { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createOracleConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -149,4 +148,4 @@ export class UsersService { } } -} +} \ No newline at end of file diff --git a/src/core/configs/typeorm.config.ts b/src/core/configs/typeorm.config.ts index 941d138..7b5cda3 100644 --- a/src/core/configs/typeorm.config.ts +++ b/src/core/configs/typeorm.config.ts @@ -1,22 +1,16 @@ -/* eslint-disable prettier/prettier */ -import { DataSourceOptions } from 'typeorm/data-source'; +import { registerAs } from '@nestjs/config'; -export const typeOrmConfig: DataSourceOptions = { - type: 'oracle', - connectString: '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.241)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = WINT)))', - username: 'SEVEN', - password: 'USR54SEV', - synchronize: false, - logging: false, - entities: [__dirname + '/../**/*.entity.{js,ts}'], -}; - -export const typeOrmPgConfig: DataSourceOptions = { - type: 'postgres', - host: '10.1.1.222', - port: 5432, - username: 'ti', - password: 'ti', - database: 'ksdb', - synchronize: true, -} +export const databaseConfig = registerAs('database', () => ({ + oracle: { + connectString: `(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ${process.env.ORACLE_HOST})(PORT = ${process.env.ORACLE_PORT})))(CONNECT_DATA = (SERVICE_NAME = ${process.env.ORACLE_SERVICE})))`, + username: process.env.ORACLE_USER, + password: process.env.ORACLE_PASSWORD, + }, + postgres: { + host: process.env.POSTGRES_HOST, + port: parseInt(process.env.POSTGRES_PORT || '5432', 10), + username: process.env.POSTGRES_USER, + password: process.env.POSTGRES_PASSWORD, + database: process.env.POSTGRES_DB, + }, +})); diff --git a/src/core/configs/typeorm.oracle.config.ts b/src/core/configs/typeorm.oracle.config.ts new file mode 100644 index 0000000..846beb6 --- /dev/null +++ b/src/core/configs/typeorm.oracle.config.ts @@ -0,0 +1,14 @@ +import { DataSourceOptions } from 'typeorm'; +import { ConfigService } from '@nestjs/config'; + +export function createOracleConfig(config: ConfigService): DataSourceOptions { + return { + type: 'oracle', + connectString: config.get('ORACLE_CONNECT_STRING'), + username: config.get('ORACLE_USER'), + password: config.get('ORACLE_PASSWORD'), + synchronize: false, + logging: false, + entities: [__dirname + '/../**/*.entity.{ts,js}'], + }; +} diff --git a/src/core/configs/typeorm.postgres.config.ts b/src/core/configs/typeorm.postgres.config.ts new file mode 100644 index 0000000..6dd2e97 --- /dev/null +++ b/src/core/configs/typeorm.postgres.config.ts @@ -0,0 +1,15 @@ +import { DataSourceOptions } from 'typeorm'; +import { ConfigService } from '@nestjs/config'; + +export function createPostgresConfig(config: ConfigService): DataSourceOptions { + return { + type: 'postgres', + host: config.get('POSTGRES_HOST'), + port: config.get('POSTGRES_PORT'), + username: config.get('POSTGRES_USER'), + password: config.get('POSTGRES_PASSWORD'), + database: config.get('POSTGRES_DB'), + synchronize: true, + entities: [__dirname + '/../**/*.entity.{ts,js}'], + }; +} diff --git a/src/core/services/base.controller.ts b/src/core/services/base.controller.ts deleted file mode 100644 index 8f56fdf..0000000 --- a/src/core/services/base.controller.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { DropAction } from './../../../node_modules/aws-sdk/clients/mailmanager.d'; -/* -https://docs.nestjs.com/controllers#controllers -*/ - -import { - Body, - Controller, - Get, - HttpException, - HttpStatus, - Post, - Query, - Req, - UseInterceptors, - UploadedFile, -} from '@nestjs/common'; -import { BaseService } from './base.service'; -import { FileInterceptor } from '@nestjs/platform-express'; -import { diskStorage } from 'multer'; -import { extname } from 'path'; -import * as fs from 'fs'; - -@Controller('api/v1/base') -export class BaseController { - constructor(public readonly baseService: BaseService) {} - // @UseGuards(JwtAuthGuard) - @Get('execute-view') - /* @ApiOperation({ - summary: 'Executa uma view com ou sem parâmetros', - }) - @ApiResponse({ - status: 200, - description: 'Dados retornados com sucesso.', - }) - @ApiResponse({ - status: 400, - description: 'O nome da view é obrigatório.', - }) - @ApiResponse({ - status: 500, - description: 'Erro ao executar a view.', - })*/ - async executeView( - @Query('viewName') viewName: string, - @Query() params: Record, - ) { - if (!viewName) { - throw new HttpException( - 'O nome da view é obrigatório.', - HttpStatus.BAD_REQUEST, - ); - } - try { - return await this.baseService.executeView(viewName, params); - } catch (error) { - throw new HttpException( - `Erro ao executar a view: ${error.message}`, - HttpStatus.INTERNAL_SERVER_ERROR, - ); - } - } - - @Post('send-image') - @UseInterceptors( - FileInterceptor('file', { - storage: diskStorage({ - // Pasta onde os arquivos serão salvos; certifique-se que essa pasta exista ou crie-a automaticamente - destination: './uploads', - filename: (req, file, callback) => { - // Gera um nome único para o arquivo - const uniqueSuffix = - Date.now() + '-' + Math.round(Math.random() * 1e9); - const fileExtName = extname(file.originalname); - callback(null, `${file.fieldname}-${uniqueSuffix}${fileExtName}`); - }, - }), - // Opcional: definir limites (ex.: tamanho máximo do arquivo) - limits: { fileSize: 5 * 1024 * 1024 }, // 5MB - }), - ) - async sendImage( - @UploadedFile() file: Express.Multer.File, - @Body('licensePlate') licensePlate: string, - ) { - if (!file) { - throw new HttpException('Nenhum arquivo enviado', HttpStatus.BAD_REQUEST); - } - - // Aqui você pode processar o arquivo (ex.: enviar para o S3) ou armazená-lo no disco mesmo. - // Neste exemplo, retornamos a URL do arquivo salvo localmente. - this.baseService.sendImages('./uploads/' + file.filename); - fs.unlink('./uploads/' + file.filename, () => {}); - return { - success: true, - message: 'Upload realizado com sucesso', - url: `https://jur-saidaretornoveiculo.s3.sa-east-1.amazonaws.com/${file.filename}`, - licensePlate, - }; - } -} diff --git a/src/core/services/base.module.ts b/src/core/services/base.module.ts deleted file mode 100644 index dd37e97..0000000 --- a/src/core/services/base.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { BaseController } from './base.controller'; -/* -https://docs.nestjs.com/modules -*/ - -import { Module } from '@nestjs/common'; -import { BaseService } from './base.service'; - -@Module({ - imports: [], - controllers: [BaseController], - providers: [BaseService], -}) -export class BaseModule {} diff --git a/src/core/services/base.service.ts b/src/core/services/base.service.ts deleted file mode 100644 index afdf30b..0000000 --- a/src/core/services/base.service.ts +++ /dev/null @@ -1,331 +0,0 @@ -import { - Inject, - Injectable, - InternalServerErrorException, -} from '@nestjs/common'; -import { DataSource } from 'typeorm'; -import { typeOrmConfig } from '../configs/typeorm.config'; -import { S3 } from 'aws-sdk'; -import * as fs from 'fs'; - -@Injectable() -export class BaseService { - constructor() {} - - async findAll(table: string) { - const dataSource = new DataSource(typeOrmConfig); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - const [rows] = await queryRunner.query(`SELECT * FROM ${table}`); - return rows; - } catch (error) { - this.handleDatabaseError( - error, - `Erro ao buscar todos os registros da tabela ${table}`, - ); - } finally { - queryRunner.release(); - dataSource.destroy(); - } - } - - async findOne(table: string, id: any) { - const dataSource = new DataSource(typeOrmConfig); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - const [rows] = await queryRunner.query( - `SELECT * FROM ${table} WHERE id = '${id}'`, - ); - return rows[0]; - } catch (error) { - this.handleDatabaseError( - error, - `Erro ao buscar o registro com ID ${id} na tabela ${table}`, - ); - } finally { - queryRunner.release(); - dataSource.destroy(); - } - } - - async create(table: string, data: any) { - const dataSource = new DataSource(typeOrmConfig); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - const columns = Object.keys(data) - .map((key) => `${key}`) - .join(', '); - const values = Object.values(data); - const placeholders = values.map(() => '?').join(', '); - - const query = `INSERT INTO ${table} (${columns}) VALUES (${placeholders})`; - - const [result] = await queryRunner.query(query, values); - return result; - } catch (error) { - this.handleDatabaseError( - error, - `Erro ao criar um registro na tabela ${table}`, - ); - } finally { - queryRunner.release(); - dataSource.destroy(); - } - } - - async update(table: string, where: any, data: any) { - const dataSource = new DataSource(typeOrmConfig); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - const [result] = await queryRunner.query( - `UPDATE ${table} SET ${data} WHERE ${where}`, - ); - return result; - } catch (error) { - this.handleDatabaseError( - error, - `Erro ao atualizar o registro com ${where} na tabela ${table}`, - ); - } finally { - queryRunner.release(); - dataSource.destroy(); - } - } - - async delete(table: string, where: any) { - const dataSource = new DataSource(typeOrmConfig); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - const [result] = await queryRunner.query( - `DELETE FROM ${table} WHERE ${where}`, - ); - return result; - } catch (error) { - this.handleDatabaseError( - error, - `Erro ao deletar o registro com ID ${where} na tabela ${table}`, - ); - } finally { - queryRunner.release(); - dataSource.destroy(); - } - } - - async query(queryString: string, params: any[]): Promise { - const dataSource = new DataSource(typeOrmConfig); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - const [rows] = await queryRunner.query(queryString, params); - return rows as any[]; - } catch (error) { - this.handleDatabaseError( - error, - `Erro ao executar a consulta SQL personalizada`, - ); - } finally { - queryRunner.release(); - dataSource.destroy(); - } - } - - async executeView(viewName: string, params: Record) { - const dataSource = new DataSource(typeOrmConfig); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - // Valida se o nome da view foi fornecido - if (!viewName) { - throw new Error('O nome da view é obrigatório.'); - } - - console.log(`Iniciando execução da view: ${viewName}`); - console.log('Parâmetros recebidos:', params); - - const conditions: string[] = []; - const values: any[] = []; - - // Remove o parâmetro viewName dos parâmetros antes de processar - const filteredParams = { ...params }; - delete filteredParams.viewName; - - // Adiciona as condições baseadas nos parâmetros fornecidos - if (filteredParams && Object.keys(filteredParams).length > 0) { - console.log('Adicionando condições para os parâmetros fornecidos...'); - for (const [key, value] of Object.entries(filteredParams)) { - // Verifica se a chave e o valor são válidos - if (value !== undefined && value !== null && value !== '') { - console.log(`Parâmetro válido: ${key} = '${value}'`); - conditions.push(`${key} = '${value}'`); // Adiciona aspas para evitar problemas de SQL injection - values.push(value); - } else { - console.warn(`Parâmetro ignorado: ${key} = '${value}'`); - } - } - } else { - console.log('Nenhum parâmetro válido foi fornecido.'); - } - - // Monta a cláusula WHERE somente se houver condições - const whereClause = - conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : ''; - const query = `SELECT * FROM ${viewName} ${whereClause}`; - - console.log(`Consulta SQL montada: ${query}`); - console.log(`{Valores para a consulta:, ${values}`); - - // Executa a consulta - const rows = await queryRunner.query(query); - - console.log( - `Consulta executada com sucesso.Linhas retornadas: ${JSON.stringify( - rows, - )}`, - ); - return rows; - } catch (error) { - console.error(`Erro ao executar a view ${viewName}: `, error.message); - this.handleDatabaseError( - error, - `Erro ao executar a view ${viewName} com parâmetros.`, - ); - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } - - async executeProcedure(procedureName: string, params: Record) { - const dataSource = new DataSource(typeOrmConfig); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - const placeholders = Object.keys(params) - .map(() => '?') - .join(', '); - const values = Object.values(params); - - const query = `EXECUTE IMMEDIATE ${procedureName}(${placeholders})`; - - // Log da query e dos valores - console.log('Query executada:', query); - console.log('Valores:', values); - - const [result] = await queryRunner.query(query, values); - - // Verifica e converte campos que contenham JSON strings para objetos - const parsedResult = Array.isArray(result) - ? result.map((row) => { - const parsedRow = { ...row }; - for (const [key, value] of Object.entries(parsedRow)) { - try { - // Tenta converter strings JSON para objetos - if ( - typeof value === 'string' && - value.trim().startsWith('{') && - value.trim().endsWith('}') - ) { - parsedRow[key] = JSON.parse(value); - } - } catch (error) { - // Ignora se a conversão falhar - console.warn( - `Campo ${key} não é um JSON válido.Mantendo como string.`, - ); - } - } - return parsedRow; - }) - : result; - - // Retorna os valores e o resultado - return { - message: 'Procedure executada com sucesso.', - executedQuery: query, - values: values, - result: parsedResult, - }; - } catch (error) { - this.handleDatabaseError( - error, - `Erro ao executar a procedure ${procedureName} com parâmetros.`, - ); - } - } - - private handleDatabaseError(error: any, message: string): never { - console.error(message, error); // Log detalhado do erro - throw new InternalServerErrorException({ - message, - sqlMessage: error.sqlMessage || error.message, - sqlState: error.sqlState, - }); - } - - async sendImages(file: string) { - // for (const file of files) { - // const file = 'C:\\Temp\\brasil_2.jpg' - if (file.endsWith('.jpg')) { - const fileName = file; //directoryImages + '\\' + file; - fs.readFile(fileName, (err, data) => { - if (err) throw err; - if (err) { - console.log(`WRITE ERROR: ${err}`); - } else { - this.uploadS3( - data, - 'jur-saidaretornoveiculo', - file.replace('./uploads/', ''), - ); - } - }); - } - //} - } - - async uploadS3(file, bucket, name) { - const s3 = this.getS3(); - const params = { - Bucket: bucket, - Key: String(name), - Body: file, - }; - return new Promise((resolve, reject) => { - s3.upload(params, (err, data) => { - if (err) { - console.log(JSON.stringify(err)); - reject(err.message); - } - resolve(data); - }); - }); - } - - getS3() { - return new S3({ - accessKeyId: 'AKIAVHJOO6W765ZT2PNI', //process.env.AWS_ACCESS_KEY_ID, - secretAccessKey: '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', // process.env.AWS_SECRET_ACCESS_KEY, - }); - } -} diff --git a/src/data-consult/data-consult.controller.ts b/src/data-consult/data-consult.controller.ts index 668c060..2e9f790 100644 --- a/src/data-consult/data-consult.controller.ts +++ b/src/data-consult/data-consult.controller.ts @@ -34,10 +34,9 @@ export class DataConsultController { } @Get('products/:filter') - @ApiOperation({ summary: 'Filtra produtos pelo parâmetro fornecido' }) - @ApiParam({ name: 'filter', description: 'Filtro de busca para produtos' }) + @ApiOperation({ summary: 'Busca produtos filtrados' }) + @ApiParam({ name: 'filter', description: 'Filtro de busca' }) async products(@Param('filter') filter: string) { return this.dataConsultService.products(filter); } - -} +} \ No newline at end of file diff --git a/src/data-consult/data-consult.module.ts b/src/data-consult/data-consult.module.ts index 7a2a73f..d8e65b8 100644 --- a/src/data-consult/data-consult.module.ts +++ b/src/data-consult/data-consult.module.ts @@ -2,15 +2,15 @@ import { Module } from '@nestjs/common'; import { DataConsultService } from './data-consult.service'; import { DataConsultController } from './data-consult.controller'; import { DataConsultRepository } from './data-consult.repository'; -import { CacheModule } from '../core/configs/cache/redis.module'; import { LoggerModule } from 'src/Log/logger.module'; +import { ConfigModule } from '@nestjs/config'; @Module({ - imports: [CacheModule,LoggerModule], + imports: [LoggerModule, ConfigModule], controllers: [DataConsultController], providers: [ DataConsultService, DataConsultRepository, - ], + ], }) export class DataConsultModule {} diff --git a/src/data-consult/data-consult.repository.ts b/src/data-consult/data-consult.repository.ts index d1571dd..fb7661f 100644 --- a/src/data-consult/data-consult.repository.ts +++ b/src/data-consult/data-consult.repository.ts @@ -1,18 +1,19 @@ import { Injectable } from '@nestjs/common'; import { DataSource } from 'typeorm'; -import { typeOrmConfig } from '../core/configs/typeorm.config'; +import { createOracleConfig } from '../core/configs/typeorm.oracle.config'; import { StoreDto } from './dto/store.dto'; import { SellerDto } from './dto/seller.dto'; import { BillingDto } from './dto/billing.dto'; import { CustomerDto } from './dto/customer.dto'; import { ProductDto } from './dto/product.dto'; +import { ConfigService } from '@nestjs/config'; @Injectable() export class DataConsultRepository { private readonly dataSource: DataSource; - constructor() { - this.dataSource = new DataSource(typeOrmConfig); + constructor(private readonly configService: ConfigService) { + this.dataSource = new DataSource(createOracleConfig(configService)); this.dataSource.initialize(); } @@ -63,56 +64,64 @@ export class DataConsultRepository { } async findCustomers(filter: string): Promise { + if (!filter || typeof filter !== 'string') return []; + + const cleanedNumeric = filter.replace(/[^\d]/g, ''); + const likeFilter = filter.toUpperCase().replace('@', '%') + '%'; + const queries = [ + // Busca por código (apenas números) { sql: ` SELECT PCCLIENT.CODCLI as "id", PCCLIENT.CODCLI || ' - ' || PCCLIENT.CLIENTE || ' ( ' || REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') || ' )' as "name" FROM PCCLIENT - WHERE PCCLIENT.CODCLI = REGEXP_REPLACE(?, '[^0-9]', '') + WHERE PCCLIENT.CODCLI = :1 ORDER BY PCCLIENT.CLIENTE `, - params: [filter], + params: [cleanedNumeric], }, + // Busca por CNPJ/CPF limpo { sql: ` SELECT PCCLIENT.CODCLI as "id", PCCLIENT.CODCLI || ' - ' || PCCLIENT.CLIENTE || ' ( ' || REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') || ' )' as "name" FROM PCCLIENT - WHERE REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') = REGEXP_REPLACE(?, '[^0-9]', '') + WHERE REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') = :1 ORDER BY PCCLIENT.CLIENTE `, - params: [filter], + params: [cleanedNumeric], }, + // Busca por nome do cliente { sql: ` SELECT PCCLIENT.CODCLI as "id", PCCLIENT.CODCLI || ' - ' || PCCLIENT.CLIENTE || ' ( ' || REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') || ' )' as "name" FROM PCCLIENT - WHERE PCCLIENT.CLIENTE LIKE ? + WHERE UPPER(PCCLIENT.CLIENTE) LIKE :1 ORDER BY PCCLIENT.CLIENTE `, - params: [filter.toUpperCase().replace('@', '%') + '%'], + params: [likeFilter], }, ]; - + for (const { sql, params } of queries) { const result = await this.executeQuery(sql, params); if (result.length > 0) { return result; } } - + return []; } + async findProducts(filter: string): Promise { - const cleanFilter = filter.replace(/[^\d]/g, ''); + const cleanedFilter = filter.replace(/[^\d]/g, ''); // apenas números const likeFilter = filter + '%'; - const codAux = filter.replace(/[^\d]/g, ''); const queries = [ { @@ -124,7 +133,7 @@ export class DataConsultRepository { WHERE PCPRODUT.CODPROD = ? ORDER BY PCPRODUT.DESCRICAO `, - params: [cleanFilter], + params: [cleanedFilter], }, { sql: ` @@ -135,7 +144,7 @@ export class DataConsultRepository { WHERE PCPRODUT.CODAUXILIAR = ? ORDER BY PCPRODUT.DESCRICAO `, - params: [codAux], + params: [cleanedFilter], }, { sql: ` diff --git a/src/data-consult/data-consult.service.ts b/src/data-consult/data-consult.service.ts index 473b8b9..396164d 100644 --- a/src/data-consult/data-consult.service.ts +++ b/src/data-consult/data-consult.service.ts @@ -1,6 +1,4 @@ -import { Inject, Injectable } from '@nestjs/common'; -import { IRedisClient } from '../core/configs/cache/IRedisClient'; -import { RedisClientToken } from '../core/configs/cache/redis-client.adapter.provider'; +import { Injectable, HttpException, HttpStatus, Inject } from '@nestjs/common'; import { DataConsultRepository } from './data-consult.repository'; import { StoreDto } from './dto/store.dto'; import { SellerDto } from './dto/seller.dto'; @@ -9,119 +7,73 @@ import { CustomerDto } from './dto/customer.dto'; import { ProductDto } from './dto/product.dto'; import { ILogger } from '../Log/ILogger'; -const DEFAULT_CACHE_TTL = 100; - @Injectable() export class DataConsultService { constructor( private readonly repository: DataConsultRepository, - @Inject(RedisClientToken) - private readonly redisClient: IRedisClient, @Inject('LoggerService') private readonly logger: ILogger ) {} /** - * Método genérico para lidar com lógica de cache - * @param cacheKey - A chave a ser usada para cache - * @param fetchFn - Função para buscar dados se não estiverem no cache - * @param ttl - Tempo de vida em segundos para o cache - * @returns Os dados em cache ou recentemente buscados - */ - private async getCachedData( - cacheKey: string, - fetchFn: () => Promise, - ttl: number = DEFAULT_CACHE_TTL - ): Promise { - try { - this.logger.log(`Tentando obter dados em cache para a chave: ${cacheKey}`); - const cached = await this.redisClient.get(cacheKey); - - if (cached) { - this.logger.log(`Cache encontrado para a chave: ${cacheKey}`); - return cached; - } - - this.logger.log(`Cache não encontrado para a chave: ${cacheKey}, buscando na origem`); - const result = await fetchFn(); - - try { - await this.redisClient.set(cacheKey, result, ttl); - this.logger.log(`Dados armazenados em cache com sucesso para a chave: ${cacheKey}`); - } catch (cacheError) { - this.logger.warn(`Falha ao armazenar dados em cache para a chave: ${cacheKey}`); - this.logger.error('Detalhes do erro de cache:', cacheError instanceof Error ? cacheError.stack : ''); - } - - return result; - } catch (error) { - this.logger.error( - `Erro no método getCachedData para a chave ${cacheKey}:`, - error instanceof Error ? error.stack : '' - ); - return fetchFn(); - } - } - - /** - * Obter todas as lojas com cache + * Obter todas as lojas * @returns Array de StoreDto */ async stores(): Promise { this.logger.log('Buscando todas as lojas'); - return this.getCachedData( - 'data-consult:stores', - () => this.repository.findStores() - ); + return this.repository.findStores(); } /** - * Obter todos os vendedores com cache + * Obter todos os vendedores * @returns Array de SellerDto */ async sellers(): Promise { this.logger.log('Buscando todos os vendedores'); - return this.getCachedData( - 'data-consult:sellers', - () => this.repository.findSellers() - ); + return this.repository.findSellers(); } /** - * Obter todos os faturamentos com cache + * Obter todos os faturamentos * @returns Array de BillingDto */ async billings(): Promise { this.logger.log('Buscando todos os faturamentos'); - return this.getCachedData( - 'data-consult:billings', - () => this.repository.findBillings() - ); + return this.repository.findBillings(); } /** - * Obter clientes filtrados por termo de pesquisa com cache + * Obter clientes filtrados por termo de pesquisa * @param filter - Termo de pesquisa para filtrar clientes * @returns Array de CustomerDto */ async customers(filter: string): Promise { this.logger.log(`Buscando clientes com filtro: ${filter}`); - return this.getCachedData( - `data-consult:customers:${filter}`, - () => this.repository.findCustomers(filter) - ); + return this.repository.findCustomers(filter); } /** - * Obter produtos filtrados por termo de pesquisa com cache + * Obter produtos filtrados por termo de pesquisa * @param filter - Termo de pesquisa para filtrar produtos * @returns Array de ProductDto */ async products(filter: string): Promise { this.logger.log(`Buscando produtos com filtro: ${filter}`); - return this.getCachedData( - `data-consult:products:${filter}`, - () => this.repository.findProducts(filter) - ); + + try { + const result = await this.repository.findProducts(filter); + this.logger.log(`Produtos encontrados: ${result.length}`); + return result; + } catch (error) { + this.logger.error( + `Erro ao buscar produtos com filtro "${filter}"`, + error instanceof Error ? error.stack : '' + ); + + throw new HttpException( + 'Erro ao buscar produtos. Tente novamente mais tarde.', + HttpStatus.INTERNAL_SERVER_ERROR + ); + } } } diff --git a/src/logistic/logistic.service.ts b/src/logistic/logistic.service.ts index 47d03f4..8b958a0 100644 --- a/src/logistic/logistic.service.ts +++ b/src/logistic/logistic.service.ts @@ -1,14 +1,17 @@ import { Get, HttpException, HttpStatus, Injectable, Query, UseGuards } from '@nestjs/common'; -import { typeOrmConfig, typeOrmPgConfig } from '../core/configs/typeorm.config'; +import { createOracleConfig } from '../core/configs/typeorm.oracle.config'; +import { createPostgresConfig } from '../core/configs/typeorm.postgres.config'; import { CarOutDelivery } from '../core/models/car-out-delivery.model'; import { DataSource } from 'typeorm'; import { CarInDelivery } from '../core/models/car-in-delivery.model'; +import { ConfigService } from '@nestjs/config'; @Injectable() export class LogisticService { + constructor(private readonly configService: ConfigService) {} async getExpedicao() { - const dataSource = new DataSource(typeOrmPgConfig); + const dataSource = new DataSource(createPostgresConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -95,7 +98,7 @@ export class LogisticService { } async getDeliveries(placa: string) { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createPostgresConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -139,7 +142,7 @@ export class LogisticService { } async getStatusCar(placa: string) { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createPostgresConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -163,7 +166,7 @@ export class LogisticService { } async getEmployee() { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createPostgresConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -186,7 +189,7 @@ export class LogisticService { async createCarOut(data: CarOutDelivery) { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createPostgresConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -261,7 +264,7 @@ export class LogisticService { async createCarIn(data: CarInDelivery) { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createPostgresConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); diff --git a/src/main.ts b/src/main.ts index 71bb96c..9fd2296 100644 --- a/src/main.ts +++ b/src/main.ts @@ -23,6 +23,6 @@ async function bootstrap() { const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup('docs', app, document); - await app.listen(9002); + await app.listen(9009); } bootstrap(); diff --git a/src/orders-payment/orders-payment.service.ts b/src/orders-payment/orders-payment.service.ts index 0a4be40..c78f343 100644 --- a/src/orders-payment/orders-payment.service.ts +++ b/src/orders-payment/orders-payment.service.ts @@ -6,14 +6,16 @@ https://docs.nestjs.com/providers#services */ import { Injectable } from '@nestjs/common'; -import { typeOrmConfig } from '../core/configs/typeorm.config'; +import { createOracleConfig } from '../core/configs/typeorm.oracle.config'; import { DataSource } from 'typeorm'; +import { ConfigService } from '@nestjs/config'; @Injectable() export class OrdersPaymentService { + constructor(private readonly configService: ConfigService) {} async findOrders(storeId: string, orderId: number) { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createOracleConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -58,7 +60,7 @@ export class OrdersPaymentService { } async findPayments(orderId: number) { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createOracleConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -90,7 +92,7 @@ export class OrdersPaymentService { } async createPayment(payment: any) { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createOracleConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -116,7 +118,7 @@ export class OrdersPaymentService { async createInvoice(data: any) { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createOracleConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); diff --git a/src/orders/orders.service.ts b/src/orders/orders.service.ts index 8c65f07..f041dfb 100644 --- a/src/orders/orders.service.ts +++ b/src/orders/orders.service.ts @@ -5,644 +5,646 @@ https://docs.nestjs.com/providers#services */ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; -import { typeOrmConfig } from '../core/configs/typeorm.config'; +import { createOracleConfig } from '../core/configs/typeorm.oracle.config'; import { DataSource } from 'typeorm'; +import { ConfigService } from '@nestjs/config'; @Injectable() -export class OrdersService { +export class OrdersService { + constructor(private readonly configService: ConfigService) {} - async findOrders(query) { - const dataSource = new DataSource(typeOrmConfig); - await dataSource.initialize(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - try { + async findOrders(query) { + const dataSource = new DataSource(createOracleConfig(this.configService)); + 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(); - } - } + return orders; + } 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 { + 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 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); + 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); - } + 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 = ` + 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]; + invoice[0].itens = [...itens]; - return invoice[0]; - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } + 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}`; + 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); + const itens = await queryRunner.manager.query(sql); - return itens; - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } + 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}`; + 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); + const itens = await queryRunner.manager.query(sql); - return itens; - } finally { - await queryRunner.release(); - await dataSource.destroy(); - } - } + 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}`; + 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(); - } - - } + 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} )`; + 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(); - } - } + 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} + 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.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`; + 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(); - } + 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); } + finally { + await queryRunner.release(); + await dataSource.destroy(); + } + } } diff --git a/src/products/products.service.ts b/src/products/products.service.ts index 3480aec..af95ef0 100644 --- a/src/products/products.service.ts +++ b/src/products/products.service.ts @@ -6,15 +6,16 @@ https://docs.nestjs.com/providers#services */ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; -import { typeOrmConfig } from '../core/configs/typeorm.config'; +import { createOracleConfig } from '../core/configs/typeorm.oracle.config'; import { ExposedProduct } from '../core/models/exposed-product.model'; import { DataSource } from 'typeorm'; +import { ConfigService } from '@nestjs/config'; @Injectable() export class ProductsService { - + constructor(private readonly configService: ConfigService) {} async productsValidation(storeId: string, filtro: string): Promise { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createOracleConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -76,7 +77,7 @@ export class ProductsService { } async exposedProduct(product: ExposedProduct) { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createOracleConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); @@ -97,7 +98,7 @@ export class ProductsService { } async getProductsEcommerce() { - const dataSource = new DataSource(typeOrmConfig); + const dataSource = new DataSource(createOracleConfig(this.configService)); await dataSource.initialize(); const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect();