commit
This commit is contained in:
commit
47e7f75720
|
|
@ -0,0 +1,24 @@
|
||||||
|
module.exports = {
|
||||||
|
parser: '@typescript-eslint/parser',
|
||||||
|
parserOptions: {
|
||||||
|
project: 'tsconfig.json',
|
||||||
|
sourceType: 'module',
|
||||||
|
},
|
||||||
|
plugins: ['@typescript-eslint/eslint-plugin'],
|
||||||
|
extends: [
|
||||||
|
'plugin:@typescript-eslint/eslint-recommended',
|
||||||
|
'plugin:@typescript-eslint/recommended',
|
||||||
|
'prettier',
|
||||||
|
'prettier/@typescript-eslint',
|
||||||
|
],
|
||||||
|
root: true,
|
||||||
|
env: {
|
||||||
|
node: true,
|
||||||
|
jest: true,
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
'@typescript-eslint/interface-name-prefix': 'off',
|
||||||
|
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||||
|
'@typescript-eslint/no-explicit-any': 'off',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
# compiled output
|
||||||
|
/dist
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Tests
|
||||||
|
/coverage
|
||||||
|
/.nyc_output
|
||||||
|
|
||||||
|
# IDEs and editors
|
||||||
|
/.idea
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
.c9/
|
||||||
|
*.launch
|
||||||
|
.settings/
|
||||||
|
*.sublime-workspace
|
||||||
|
|
||||||
|
# IDE - VSCode
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"singleQuote": true,
|
||||||
|
"trailingComma": "all"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,75 @@
|
||||||
|
<p align="center">
|
||||||
|
<a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo_text.svg" width="320" alt="Nest Logo" /></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
[travis-image]: https://api.travis-ci.org/nestjs/nest.svg?branch=master
|
||||||
|
[travis-url]: https://travis-ci.org/nestjs/nest
|
||||||
|
[linux-image]: https://img.shields.io/travis/nestjs/nest/master.svg?label=linux
|
||||||
|
[linux-url]: https://travis-ci.org/nestjs/nest
|
||||||
|
|
||||||
|
<p align="center">A progressive <a href="http://nodejs.org" target="blank">Node.js</a> framework for building efficient and scalable server-side applications, heavily inspired by <a href="https://angular.io" target="blank">Angular</a>.</p>
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://www.npmjs.com/~nestjscore"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a>
|
||||||
|
<a href="https://www.npmjs.com/~nestjscore"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a>
|
||||||
|
<a href="https://www.npmjs.com/~nestjscore"><img src="https://img.shields.io/npm/dm/@nestjs/core.svg" alt="NPM Downloads" /></a>
|
||||||
|
<a href="https://travis-ci.org/nestjs/nest"><img src="https://api.travis-ci.org/nestjs/nest.svg?branch=master" alt="Travis" /></a>
|
||||||
|
<a href="https://travis-ci.org/nestjs/nest"><img src="https://img.shields.io/travis/nestjs/nest/master.svg?label=linux" alt="Linux" /></a>
|
||||||
|
<a href="https://coveralls.io/github/nestjs/nest?branch=master"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#5" alt="Coverage" /></a>
|
||||||
|
<a href="https://gitter.im/nestjs/nestjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=body_badge"><img src="https://badges.gitter.im/nestjs/nestjs.svg" alt="Gitter" /></a>
|
||||||
|
<a href="https://opencollective.com/nest#backer"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
|
||||||
|
<a href="https://opencollective.com/nest#sponsor"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>
|
||||||
|
<a href="https://paypal.me/kamilmysliwiec"><img src="https://img.shields.io/badge/Donate-PayPal-dc3d53.svg"/></a>
|
||||||
|
<a href="https://twitter.com/nestframework"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow"></a>
|
||||||
|
</p>
|
||||||
|
<!--[](https://opencollective.com/nest#backer)
|
||||||
|
[](https://opencollective.com/nest#sponsor)-->
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running the app
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# development
|
||||||
|
$ npm run start
|
||||||
|
|
||||||
|
# watch mode
|
||||||
|
$ npm run start:dev
|
||||||
|
|
||||||
|
# production mode
|
||||||
|
$ npm run start:prod
|
||||||
|
```
|
||||||
|
|
||||||
|
## Test
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# unit tests
|
||||||
|
$ npm run test
|
||||||
|
|
||||||
|
# e2e tests
|
||||||
|
$ npm run test:e2e
|
||||||
|
|
||||||
|
# test coverage
|
||||||
|
$ npm run test:cov
|
||||||
|
```
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
|
||||||
|
|
||||||
|
## Stay in touch
|
||||||
|
|
||||||
|
- Author - [Kamil Myśliwiec](https://kamilmysliwiec.com)
|
||||||
|
- Website - [https://nestjs.com](https://nestjs.com/)
|
||||||
|
- Twitter - [@nestframework](https://twitter.com/nestframework)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Nest is [MIT licensed](LICENSE).
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
CERTIFICADO PARA DESENVOLVIMENTO
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEFTCCAv2gAwIBAgIUbexM37zIhdxNpGtug6DDveiB1OIwDQYJKoZIhvcNAQEL
|
||||||
|
BQAwgagxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBDbG91ZGZsYXJlLCBJbmMuMRswGQYD
|
||||||
|
VQQLExJ3d3cuY2xvdWRmbGFyZS5jb20xNDAyBgNVBAMTK01hbmFnZWQgQ0EgNjIz
|
||||||
|
Y2ExZTBlOTBmOTExODYyMzNiZWY5YjgyNzQ1MDMwHhcNMjMwMTE5MjIwNjAwWhcN
|
||||||
|
MzMwMTE2MjIwNjAwWjAiMQswCQYDVQQGEwJVUzETMBEGA1UEAxMKQ2xvdWRmbGFy
|
||||||
|
ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALu92p81Ko0xqfHyBiOA
|
||||||
|
iGsL1H2TeBZOtgKAmCe8VN2n46qW28DCafEQazNBxt7foshXDhTVG5v3YHxejI/4
|
||||||
|
08vNwRmLKt70v7DmvVKQeSNULElqfQsnxdraSET4ifAQmKJwOCCCReDcczDKM5Vw
|
||||||
|
+7UHkhe6XsW3vksjPwXKjFKahuqh7ElcygF6BPn+5Dt7hTxO/46KToR38kwZhM4V
|
||||||
|
PY36/VO3TbVjYon/2zFFZN2CwHQgTTN0n/0T3vx43ro2xb5JpwmLH/2eXLumrhPt
|
||||||
|
UBfdlG5wtvdMtbHqA3cHJ1V6KlO5RoQ9+KxRF+vVnznJ9ezxV62yJ3APx0SFl2Ol
|
||||||
|
LksCAwEAAaOBuzCBuDATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAA
|
||||||
|
MB0GA1UdDgQWBBTwH+TXvR3mDFGcrPUuLqtSFY07dzAfBgNVHSMEGDAWgBTtBVpV
|
||||||
|
QSpTHII2bTGykCpX4D47YDBTBgNVHR8ETDBKMEigRqBEhkJodHRwOi8vY3JsLmNs
|
||||||
|
b3VkZmxhcmUuY29tLzVjMGQwODU4LTdkZTItNDI3Yi04ZjBkLWI3ZDEwNzBmYzJi
|
||||||
|
OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAJvkt9PbJp00sFSXKUgrSIDfT2F0f0Ki
|
||||||
|
3xonEOETCJUf6WeoWggC9XFISnHt+T9yPUEffCpvd+uFc253rzEhkmUN78ZuWddc
|
||||||
|
2MTrkFybLL77g0xN6pdreq1o3KWCTUzF90b7sqPbgGsoR/QRuJw/UJlsw0ZzJCKB
|
||||||
|
UF0RGm5SYRtNefRETtxE/Zg1xK9dmvryXznSiVyzrLu+rWUmwtKuBXp8u0VPb4i5
|
||||||
|
S1pfILuOccJSkbQV2qBEYb4MOS3jUb73/LWwZXJqVF+yLGrWxjrMmg1FAe3X9mdb
|
||||||
|
XEbe8Def0xGNh87vqpi3aYTGJeOlgRMwJtseKkAWeg8k1v9Zbg5bDyk=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC7vdqfNSqNManx
|
||||||
|
8gYjgIhrC9R9k3gWTrYCgJgnvFTdp+OqltvAwmnxEGszQcbe36LIVw4U1Rub92B8
|
||||||
|
XoyP+NPLzcEZiyre9L+w5r1SkHkjVCxJan0LJ8Xa2khE+InwEJiicDgggkXg3HMw
|
||||||
|
yjOVcPu1B5IXul7Ft75LIz8FyoxSmobqoexJXMoBegT5/uQ7e4U8Tv+Oik6Ed/JM
|
||||||
|
GYTOFT2N+v1Tt021Y2KJ/9sxRWTdgsB0IE0zdJ/9E978eN66NsW+SacJix/9nly7
|
||||||
|
pq4T7VAX3ZRucLb3TLWx6gN3BydVeipTuUaEPfisURfr1Z85yfXs8VetsidwD8dE
|
||||||
|
hZdjpS5LAgMBAAECggEADx6lIrlHagOb6i5RrD5Hvkc/n7VmsHU6V00/88NJGmjQ
|
||||||
|
/wYTQJznp1BpMcGUYJKmK3hHXAolpRPxI1MCAv5JIFq7uHDqzPXtEjQi/yk/eEbp
|
||||||
|
Iih/VYyodI2r0FIr2becc0iSXJvhQNDAPieqq9hjjRrE+0A5Lbc0jhySkMbVMjm4
|
||||||
|
KDWhvWO67BpiFRQXMKMM+VpJ7v63Z3XTAbEE00p+799I3S2EEfZo3pAaMlJ0QQev
|
||||||
|
6tN+Gsvqmxe5764r7Y6zMEEtJrcMMx/OBIrdaDB77/AtCuWZZUvyU9kRg0LMvRDQ
|
||||||
|
+gSCcoum4XnlzbQI8ldUNkdddzXhAKXqH5599IzY4QKBgQD0/g629+EQjKSgFxb0
|
||||||
|
1HpMm4pYNU6fyVFIoZ36kcyz0X6XlxI8ZJil8iB0jgjGSX2ujvC3ChpF242XKnC3
|
||||||
|
iTBZOCl9YcCwmV9kSvjeOn5OCEShkHXnZ413kt7lld4K/kI03Pd2QbWhkpqrr92g
|
||||||
|
aM2Q+HEXRTxQwyoaHdkCmEaaMwKBgQDELUnftYXMSKHf6qh63MJIa6T3m43T4D6y
|
||||||
|
nTEDk1S/8ez8dmTJ8bPNha9xYoB++qfM/uvUt3di0AXkIGhnCO5UhFygZYaVUBGE
|
||||||
|
HNKUbiZYFczlhnLj/IXuGdWZpM6zYuGGKDTwBt5pq8Q7jm6aTKff+nBa3OZbEEjH
|
||||||
|
jzecssmziQKBgCoiM1emQ8+70Ggz8F/E1w+rxFwtNstmLROHsAqy3niic9oQQjOe
|
||||||
|
vV30yT4iW0H2y6WksaNZGnGfM7emteHqtyTw8rm8gQ4eIni2KBzYBHbZFyyOEqjs
|
||||||
|
dzj0Sl9Dqf9MAQjkY66z2E/kTbNvOHdo7sma4KA26QuetPPu5C59D89fAoGAZ6F0
|
||||||
|
8NQ3Rd7ohBy1u5F6oD8c+iAWH+LJvBkFl1nw3ySxh/wS6grgbKU+NKtQLcPDeKsB
|
||||||
|
cXEpg+1X71afUC6Ll+ID/EclfSK63gtLwlUdtFJv1p/beUwgg9Lp3ywMdP67G9+J
|
||||||
|
d3Jpc3DlTIDFNIVh+ROW3qjqlxhXGfQx8HkRy+ECgYAhvnnhd4P5hGZz4bq8/K7f
|
||||||
|
7ZcA1n+KSbqVlGwnyQengo4ITDdzrmDg+A5ThJhyBMo0KOCzgDQEyCrZ2BKJgRCs
|
||||||
|
AUSjfnqp68PSt4x7QEHnqwOVZi9CdriGYEv9ytelGIBXYrkoWCCHnCdp5SfeQLbV
|
||||||
|
kGEVeKv7JveS3C6gDNo9uA==
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC7vdqfNSqNManx
|
||||||
|
8gYjgIhrC9R9k3gWTrYCgJgnvFTdp+OqltvAwmnxEGszQcbe36LIVw4U1Rub92B8
|
||||||
|
XoyP+NPLzcEZiyre9L+w5r1SkHkjVCxJan0LJ8Xa2khE+InwEJiicDgggkXg3HMw
|
||||||
|
yjOVcPu1B5IXul7Ft75LIz8FyoxSmobqoexJXMoBegT5/uQ7e4U8Tv+Oik6Ed/JM
|
||||||
|
GYTOFT2N+v1Tt021Y2KJ/9sxRWTdgsB0IE0zdJ/9E978eN66NsW+SacJix/9nly7
|
||||||
|
pq4T7VAX3ZRucLb3TLWx6gN3BydVeipTuUaEPfisURfr1Z85yfXs8VetsidwD8dE
|
||||||
|
hZdjpS5LAgMBAAECggEADx6lIrlHagOb6i5RrD5Hvkc/n7VmsHU6V00/88NJGmjQ
|
||||||
|
/wYTQJznp1BpMcGUYJKmK3hHXAolpRPxI1MCAv5JIFq7uHDqzPXtEjQi/yk/eEbp
|
||||||
|
Iih/VYyodI2r0FIr2becc0iSXJvhQNDAPieqq9hjjRrE+0A5Lbc0jhySkMbVMjm4
|
||||||
|
KDWhvWO67BpiFRQXMKMM+VpJ7v63Z3XTAbEE00p+799I3S2EEfZo3pAaMlJ0QQev
|
||||||
|
6tN+Gsvqmxe5764r7Y6zMEEtJrcMMx/OBIrdaDB77/AtCuWZZUvyU9kRg0LMvRDQ
|
||||||
|
+gSCcoum4XnlzbQI8ldUNkdddzXhAKXqH5599IzY4QKBgQD0/g629+EQjKSgFxb0
|
||||||
|
1HpMm4pYNU6fyVFIoZ36kcyz0X6XlxI8ZJil8iB0jgjGSX2ujvC3ChpF242XKnC3
|
||||||
|
iTBZOCl9YcCwmV9kSvjeOn5OCEShkHXnZ413kt7lld4K/kI03Pd2QbWhkpqrr92g
|
||||||
|
aM2Q+HEXRTxQwyoaHdkCmEaaMwKBgQDELUnftYXMSKHf6qh63MJIa6T3m43T4D6y
|
||||||
|
nTEDk1S/8ez8dmTJ8bPNha9xYoB++qfM/uvUt3di0AXkIGhnCO5UhFygZYaVUBGE
|
||||||
|
HNKUbiZYFczlhnLj/IXuGdWZpM6zYuGGKDTwBt5pq8Q7jm6aTKff+nBa3OZbEEjH
|
||||||
|
jzecssmziQKBgCoiM1emQ8+70Ggz8F/E1w+rxFwtNstmLROHsAqy3niic9oQQjOe
|
||||||
|
vV30yT4iW0H2y6WksaNZGnGfM7emteHqtyTw8rm8gQ4eIni2KBzYBHbZFyyOEqjs
|
||||||
|
dzj0Sl9Dqf9MAQjkY66z2E/kTbNvOHdo7sma4KA26QuetPPu5C59D89fAoGAZ6F0
|
||||||
|
8NQ3Rd7ohBy1u5F6oD8c+iAWH+LJvBkFl1nw3ySxh/wS6grgbKU+NKtQLcPDeKsB
|
||||||
|
cXEpg+1X71afUC6Ll+ID/EclfSK63gtLwlUdtFJv1p/beUwgg9Lp3ywMdP67G9+J
|
||||||
|
d3Jpc3DlTIDFNIVh+ROW3qjqlxhXGfQx8HkRy+ECgYAhvnnhd4P5hGZz4bq8/K7f
|
||||||
|
7ZcA1n+KSbqVlGwnyQengo4ITDdzrmDg+A5ThJhyBMo0KOCzgDQEyCrZ2BKJgRCs
|
||||||
|
AUSjfnqp68PSt4x7QEHnqwOVZi9CdriGYEv9ytelGIBXYrkoWCCHnCdp5SfeQLbV
|
||||||
|
kGEVeKv7JveS3C6gDNo9uA==
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEFTCCAv2gAwIBAgIUbexM37zIhdxNpGtug6DDveiB1OIwDQYJKoZIhvcNAQEL
|
||||||
|
BQAwgagxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBDbG91ZGZsYXJlLCBJbmMuMRswGQYD
|
||||||
|
VQQLExJ3d3cuY2xvdWRmbGFyZS5jb20xNDAyBgNVBAMTK01hbmFnZWQgQ0EgNjIz
|
||||||
|
Y2ExZTBlOTBmOTExODYyMzNiZWY5YjgyNzQ1MDMwHhcNMjMwMTE5MjIwNjAwWhcN
|
||||||
|
MzMwMTE2MjIwNjAwWjAiMQswCQYDVQQGEwJVUzETMBEGA1UEAxMKQ2xvdWRmbGFy
|
||||||
|
ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALu92p81Ko0xqfHyBiOA
|
||||||
|
iGsL1H2TeBZOtgKAmCe8VN2n46qW28DCafEQazNBxt7foshXDhTVG5v3YHxejI/4
|
||||||
|
08vNwRmLKt70v7DmvVKQeSNULElqfQsnxdraSET4ifAQmKJwOCCCReDcczDKM5Vw
|
||||||
|
+7UHkhe6XsW3vksjPwXKjFKahuqh7ElcygF6BPn+5Dt7hTxO/46KToR38kwZhM4V
|
||||||
|
PY36/VO3TbVjYon/2zFFZN2CwHQgTTN0n/0T3vx43ro2xb5JpwmLH/2eXLumrhPt
|
||||||
|
UBfdlG5wtvdMtbHqA3cHJ1V6KlO5RoQ9+KxRF+vVnznJ9ezxV62yJ3APx0SFl2Ol
|
||||||
|
LksCAwEAAaOBuzCBuDATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAA
|
||||||
|
MB0GA1UdDgQWBBTwH+TXvR3mDFGcrPUuLqtSFY07dzAfBgNVHSMEGDAWgBTtBVpV
|
||||||
|
QSpTHII2bTGykCpX4D47YDBTBgNVHR8ETDBKMEigRqBEhkJodHRwOi8vY3JsLmNs
|
||||||
|
b3VkZmxhcmUuY29tLzVjMGQwODU4LTdkZTItNDI3Yi04ZjBkLWI3ZDEwNzBmYzJi
|
||||||
|
OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAJvkt9PbJp00sFSXKUgrSIDfT2F0f0Ki
|
||||||
|
3xonEOETCJUf6WeoWggC9XFISnHt+T9yPUEffCpvd+uFc253rzEhkmUN78ZuWddc
|
||||||
|
2MTrkFybLL77g0xN6pdreq1o3KWCTUzF90b7sqPbgGsoR/QRuJw/UJlsw0ZzJCKB
|
||||||
|
UF0RGm5SYRtNefRETtxE/Zg1xK9dmvryXznSiVyzrLu+rWUmwtKuBXp8u0VPb4i5
|
||||||
|
S1pfILuOccJSkbQV2qBEYb4MOS3jUb73/LWwZXJqVF+yLGrWxjrMmg1FAe3X9mdb
|
||||||
|
XEbe8Def0xGNh87vqpi3aYTGJeOlgRMwJtseKkAWeg8k1v9Zbg5bDyk=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"collection": "@nestjs/schematics",
|
||||||
|
"sourceRoot": "src",
|
||||||
|
"compilerOptions": {
|
||||||
|
"plugins": [
|
||||||
|
{
|
||||||
|
"name": "@nestjs/swagger",
|
||||||
|
"options": {
|
||||||
|
"classValidatorShim": false,
|
||||||
|
"introspectComments": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,92 @@
|
||||||
|
{
|
||||||
|
"name": "venda_web",
|
||||||
|
"version": "2023.5.1",
|
||||||
|
"description": "",
|
||||||
|
"author": "",
|
||||||
|
"private": true,
|
||||||
|
"license": "JURUNENSE HOME CENTER",
|
||||||
|
"scripts": {
|
||||||
|
"prebuild": "rimraf dist",
|
||||||
|
"build": "nest build",
|
||||||
|
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
||||||
|
"start": "nest start",
|
||||||
|
"start:dev": "nest start --watch",
|
||||||
|
"start:debug": "nest start --debug --watch",
|
||||||
|
"start:prod": "node dist/main",
|
||||||
|
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
|
||||||
|
"test": "jest",
|
||||||
|
"test:watch": "jest --watch",
|
||||||
|
"test:cov": "jest --coverage",
|
||||||
|
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
|
||||||
|
"test:e2e": "jest --config ./test/jest-e2e.json"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@nestjs/common": "^7.0.0",
|
||||||
|
"@nestjs/config": "^0.5.0",
|
||||||
|
"@nestjs/core": "^7.0.0",
|
||||||
|
"@nestjs/jwt": "^7.1.0",
|
||||||
|
"@nestjs/passport": "^7.1.0",
|
||||||
|
"@nestjs/platform-express": "^7.0.0",
|
||||||
|
"@nestjs/swagger": "^4.8.2",
|
||||||
|
"@nestjs/typeorm": "^7.1.0",
|
||||||
|
"cache-manager": "^3.4.0",
|
||||||
|
"compression": "^1.7.4",
|
||||||
|
"crc": "^4.3.2",
|
||||||
|
"fs": "0.0.1-security",
|
||||||
|
"guid-typescript": "^1.0.9",
|
||||||
|
"md5": "^2.3.0",
|
||||||
|
"md5-typescript": "^1.0.5",
|
||||||
|
"mindee": "^3.7.3",
|
||||||
|
"node-geocoder": "^4.2.0",
|
||||||
|
"odata-v4-typeorm": "^0.1.1",
|
||||||
|
"oracledb": "^4.2.0",
|
||||||
|
"passport": "^0.4.1",
|
||||||
|
"passport-http-bearer": "^1.0.1",
|
||||||
|
"passport-jwt": "^4.0.0",
|
||||||
|
"pdf-lib": "^1.17.1",
|
||||||
|
"reflect-metadata": "^0.1.13",
|
||||||
|
"rimraf": "^3.0.2",
|
||||||
|
"rxjs": "^7.8.0",
|
||||||
|
"stimulsoft-reports-js": "^2021.1.1",
|
||||||
|
"swagger-ui-express": "^4.6.3",
|
||||||
|
"typeorm": "^0.2.25",
|
||||||
|
"uuid": "^8.3.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@nestjs/cli": "^7.0.0",
|
||||||
|
"@nestjs/schematics": "^7.0.0",
|
||||||
|
"@nestjs/testing": "^7.0.0",
|
||||||
|
"@types/express": "^4.17.3",
|
||||||
|
"@types/jest": "25.1.4",
|
||||||
|
"@types/md5": "^2.3.0",
|
||||||
|
"@types/node": "^13.13.12",
|
||||||
|
"@types/supertest": "^2.0.8",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^2.23.0",
|
||||||
|
"@typescript-eslint/parser": "^2.23.0",
|
||||||
|
"eslint": "^6.8.0",
|
||||||
|
"eslint-config-prettier": "^6.10.0",
|
||||||
|
"eslint-plugin-import": "^2.20.1",
|
||||||
|
"jest": "^25.1.0",
|
||||||
|
"prettier": "^1.19.1",
|
||||||
|
"supertest": "^4.0.2",
|
||||||
|
"ts-jest": "25.2.1",
|
||||||
|
"ts-loader": "^6.2.1",
|
||||||
|
"ts-node": "^8.6.2",
|
||||||
|
"tsconfig-paths": "^3.9.0",
|
||||||
|
"typescript": "^3.7.4"
|
||||||
|
},
|
||||||
|
"jest": {
|
||||||
|
"moduleFileExtensions": [
|
||||||
|
"js",
|
||||||
|
"json",
|
||||||
|
"ts"
|
||||||
|
],
|
||||||
|
"rootDir": "src",
|
||||||
|
"testRegex": ".spec.ts$",
|
||||||
|
"transform": {
|
||||||
|
"^.+\\.(t|j)s$": "ts-jest"
|
||||||
|
},
|
||||||
|
"coverageDirectory": "../coverage",
|
||||||
|
"testEnvironment": "node"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
select '@Column({ name: '''||column_name||''' })'||CHR(13)||
|
||||||
|
LOWER(column_name)||': '||
|
||||||
|
case when user_tab_columns.data_type = 'NUMBER' then 'number;'
|
||||||
|
when user_tab_columns.data_type = 'DATE' then 'Date;'
|
||||||
|
else 'string;' END ||CHR(13)
|
||||||
|
FROM USER_TAB_COLUMNS
|
||||||
|
WHERE TABLE_NAME = 'PCPEDITEMP'
|
||||||
|
order by user_tab_columns.column_id;
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
CREATE TABLE ESTPROTOCOLOENTREGA (
|
||||||
|
NUMPED NUMBER(10),
|
||||||
|
NUMNOTA NUMBER(10),
|
||||||
|
DTENTREGA DATE,
|
||||||
|
CPFRECEBEDOR VARCHAR2(20),
|
||||||
|
NOMERECEBEDOR VARCHAR2(100),
|
||||||
|
URL_IMAGEMPROTOCOLO VARCHAR2(200),
|
||||||
|
CONSTRAINT ESTPROTOCOLOENTREGA_PK PRIMARY KEY ( NUMPED ) );
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
CREATE TABLE ESTSHOPPING (
|
||||||
|
ID VARCHAR2(100),
|
||||||
|
IDCART VARCHAR2(100),
|
||||||
|
CODPROD NUMBER(6),
|
||||||
|
QT NUMBER(22,6),
|
||||||
|
PVENDA NUMBER(22,6),
|
||||||
|
DTINCLUSAO DATE,
|
||||||
|
DTCANCEL DATE,
|
||||||
|
CODFUNC NUMBER(10),
|
||||||
|
CONSTRAINT ESTSHOPPING_PK PRIMARY KEY ( ID )
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE ESTSHOPPING ADD DATAVENDA DATE;
|
||||||
|
ALTER TABLE ESTSHOPPING ADD NUMPED NUMBER(10);
|
||||||
|
ALTER TABLE ESTSHOPPING ADD NOMEECOMMERCE VARCHAR2(200);
|
||||||
|
ALTER TABLE ESTSHOPPING ADD URLIMAGEM VARCHAR2(200);
|
||||||
|
ALTER TABLE ESTSHOPPING ADD TIPOPRODUTO VARCHAR2(1);
|
||||||
|
|
||||||
|
ALTER TABLE ESTSHOPPING ADD CODFILIALRETIRA VARCHAR2(2);
|
||||||
|
ALTER TABLE ESTSHOPPING ADD TIPOENTREGA VARCHAR2(2);
|
||||||
|
ALTER TABLE ESTSHOPPING ADD CODUSUR NUMBER(6);
|
||||||
|
|
||||||
|
--ALTER TABLE ESTSHOPPING ADD CODPLPAG NUMBER(4);
|
||||||
|
--ALTER TABLE ESTSHOPPING ADD CODCOB VARCHAR2(4);
|
||||||
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
CREATE TABLE estusuario
|
||||||
|
(idusuario NUMBER(10,0) ,
|
||||||
|
nome VARCHAR2(100 BYTE) NOT NULL,
|
||||||
|
email VARCHAR2(100 BYTE) NOT NULL,
|
||||||
|
senha VARCHAR2(100 BYTE) NOT NULL,
|
||||||
|
tipo VARCHAR2(20 BYTE) NOT NULL,
|
||||||
|
matricula NUMBER(8,0),
|
||||||
|
bloqueado CHAR(1 BYTE) DEFAULT 'N');
|
||||||
|
|
||||||
|
CREATE SEQUENCE ESSUSUARIO;
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
CREATE TABLE ESTVENDA (
|
||||||
|
ID VARCHAR2(100),
|
||||||
|
IDSHOPPING VARCHAR2(100),
|
||||||
|
CODCLI NUMBER(6),
|
||||||
|
CODUSUR NUMBER(6),
|
||||||
|
CODENDCLI NUMBER(10),
|
||||||
|
CODPLPAG NUMBER(6),
|
||||||
|
CODCOB VARCHAR2(4),
|
||||||
|
VLFRETE NUMBER(22,6),
|
||||||
|
OBSERVACAO1 VARCHAR2(80),
|
||||||
|
OBSERVACAO2 VARCHAR2(80),
|
||||||
|
OBSERVACAO3 VARCHAR2(80),
|
||||||
|
OBSERVACAOENTREGA1 VARCHAR2(80),
|
||||||
|
OBSERVACAOENTREGA2 VARCHAR2(80),
|
||||||
|
OBSERVACAOENTREGA3 VARCHAR2(80),
|
||||||
|
CONSTRAINT PK_OBSERVACAOENTREGA PRIMARY KEY (ID));
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"js/ts.implicitProjectConfig.experimentalDecorators": true
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
https://docs.nestjs.com/controllers#controllers
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Body, Controller, Get, Param, Post } from '@nestjs/common';
|
||||||
|
import { AccessControlService } from './access-control.service';
|
||||||
|
import { ApiExcludeEndpoint } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@Controller('api/v1/access-control')
|
||||||
|
export class AccessControlController {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private readonly accessControlService: AccessControlService
|
||||||
|
){}
|
||||||
|
|
||||||
|
@Get('modules/:id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getModules(@Param('id') id: number) {
|
||||||
|
return this.accessControlService.getAccessModule(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('permissionUser/:id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getPermissionsUser(@Param('id') id: number) {
|
||||||
|
return this.accessControlService.getPermissionsUser(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('pages/:userId/:moduleId')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getPagesUser(@Param('userId') userId: number, @Param('moduleId') moduleId: number) {
|
||||||
|
return this.accessControlService.getPagesUser(moduleId, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('actions/:userId/:moduleId')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getActionUser(@Param('userId') userId: number, @Param('moduleId') moduleId: number
|
||||||
|
) {
|
||||||
|
return this.accessControlService.getActionsUser(moduleId, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('permissionUser/:id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async updatePermission(@Param('id') userId: number, @Body() data
|
||||||
|
) {
|
||||||
|
return this.accessControlService.updatePermissionUser(userId, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
import { AccessControlService } from './access-control.service';
|
||||||
|
import { AccessControlController } from './access-control.controller';
|
||||||
|
/*
|
||||||
|
https://docs.nestjs.com/modules
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [],
|
||||||
|
controllers: [
|
||||||
|
AccessControlController,],
|
||||||
|
providers: [
|
||||||
|
AccessControlService,],
|
||||||
|
})
|
||||||
|
export class AccessControlModule { }
|
||||||
|
|
@ -0,0 +1,261 @@
|
||||||
|
/*
|
||||||
|
https://docs.nestjs.com/providers#services
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { connectionOptions } from 'src/configs/typeorm.config';
|
||||||
|
import { Connection } from 'typeorm';
|
||||||
|
import { IndexActions } from '../../domain/models/index-action.model';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class AccessControlService {
|
||||||
|
|
||||||
|
async getAccessModule(id: number) {
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
|
||||||
|
const sql = 'SELECT ESTACESSOMODULO.CODMODULO as "moduleId" ' +
|
||||||
|
' ,ESTACESSOMODULO.CODUSUARIO as "userId" ' +
|
||||||
|
` ,NVL(ESTACESSOMODULO.ACESSO, 'S') as "access" ` +
|
||||||
|
' FROM ESTACESSOMODULO ' +
|
||||||
|
' WHERE ESTACESSOMODULO.CODUSUARIO = :1';
|
||||||
|
|
||||||
|
const modules = await queryRunner
|
||||||
|
.query(sql, [id]);
|
||||||
|
|
||||||
|
return modules;
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async getPagesUser(moduleId: number, userId: number) {
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
|
||||||
|
const sql = 'SELECT ESTACESSOATIVIDADE.CODMODULO as "moduleId" ' +
|
||||||
|
' ,ESTACESSOATIVIDADE.CODPROCESSO as "processId" ' +
|
||||||
|
' ,ESTACESSOATIVIDADE.CODATIVIDADE as "pageId" ' +
|
||||||
|
' ,ESTACESSOATIVIDADE.codusuario as "userId" ' +
|
||||||
|
' ,ESTACESSOATIVIDADE.ACESSO as "access" ' +
|
||||||
|
' FROM ESTACESSOATIVIDADE ' +
|
||||||
|
' WHERE ESTACESSOATIVIDADE.CODMODULO = :CODMODULO ' +
|
||||||
|
' AND ESTACESSOATIVIDADE.CODUSUARIO = :CODUSUARIO ';
|
||||||
|
|
||||||
|
const pages = await queryRunner
|
||||||
|
.query(sql, [moduleId, userId]);
|
||||||
|
|
||||||
|
return pages;
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async getActionsUser(moduleId: number, userId: number) {
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
|
||||||
|
const sql = `SELECT ESTACESSOATIVIDADEACAO.CODMODULO as "moduleId"
|
||||||
|
,ESTACESSOATIVIDADEACAO.CODPROCESSO as "processId"
|
||||||
|
,ESTACESSOATIVIDADEACAO.CODATIVIDADE as "pageId"
|
||||||
|
,ESTACESSOATIVIDADEACAO.CODACAO as "actionId"
|
||||||
|
,ESTACESSOATIVIDADEACAO.codusuario as "userId"
|
||||||
|
,ESTACESSOATIVIDADEACAO.ACESSO as "access"
|
||||||
|
FROM ESTACESSOATIVIDADEACAO
|
||||||
|
WHERE ESTACESSOATIVIDADEACAO.CODMODULO = :CODMODULO
|
||||||
|
AND ESTACESSOATIVIDADEACAO.CODUSUARIO = :CODUSUARIO`;
|
||||||
|
|
||||||
|
const actions = await queryRunner
|
||||||
|
.query(sql, [moduleId, userId]);
|
||||||
|
|
||||||
|
return actions;
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async getPermissionsUser(userId: number) {
|
||||||
|
const sqlModules = `SELECT ESTMODULO.codmodulo as "id"
|
||||||
|
,ESTMODULO.descricao as "text"
|
||||||
|
,${userId} as "userId"
|
||||||
|
,NVL(( SELECT ESTACESSOMODULO.ACESSO
|
||||||
|
FROM ESTACESSOMODULO
|
||||||
|
WHERE ESTACESSOMODULO.CODMODULO = ESTMODULO.CODMODULO
|
||||||
|
AND ESTACESSOMODULO.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
|
||||||
|
FROM ESTMODULO`;
|
||||||
|
|
||||||
|
const sqlAtividade = `SELECT ESTATIVIDADE.codmodulo as "moduloId"
|
||||||
|
,ESTATIVIDADE.CODPROCESSO as "processId"
|
||||||
|
,ESTATIVIDADE.CODATIVIDADE as "id"
|
||||||
|
,ESTATIVIDADE.descricao as "text"
|
||||||
|
,NVL(( SELECT ESTACESSOATIVIDADE.ACESSO
|
||||||
|
FROM ESTACESSOATIVIDADE
|
||||||
|
WHERE ESTACESSOATIVIDADE.CODMODULO = ESTATIVIDADE.CODMODULO
|
||||||
|
AND ESTACESSOATIVIDADE.CODPROCESSO = ESTATIVIDADE.codprocesso
|
||||||
|
AND ESTACESSOATIVIDADE.CODATIVIDADE = ESTATIVIDADE.CODATIVIDADE
|
||||||
|
AND ESTACESSOATIVIDADE.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
|
||||||
|
FROM ESTATIVIDADE`;
|
||||||
|
|
||||||
|
const sqlAction = `SELECT estatividadeacao.codmodulo as "moduloId"
|
||||||
|
,estatividadeacao.CODPROCESSO as "processId"
|
||||||
|
,estatividadeacao.CODATIVIDADE as "atividadeId"
|
||||||
|
,estatividadeacao.CODACAO as "Id"
|
||||||
|
,estatividadeacao.descricao as "text"
|
||||||
|
,NVL(( SELECT ESTACESSOATIVIDADEACAO.ACESSO
|
||||||
|
FROM ESTACESSOATIVIDADEACAO
|
||||||
|
WHERE ESTACESSOATIVIDADEACAO.CODMODULO = estatividadeacao.CODMODULO
|
||||||
|
AND ESTACESSOATIVIDADEACAO.CODPROCESSO = estatividadeacao.codprocesso
|
||||||
|
AND ESTACESSOATIVIDADEACAO.CODATIVIDADE = estatividadeacao.CODATIVIDADE
|
||||||
|
AND ESTACESSOATIVIDADEACAO.CODACAO = estatividadeacao.CODACAO
|
||||||
|
AND ESTACESSOATIVIDADEACAO.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
|
||||||
|
FROM estatividadeacao`;
|
||||||
|
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
|
||||||
|
const modules = await queryRunner.query(sqlModules);
|
||||||
|
const atividades = await queryRunner.query(sqlAtividade);
|
||||||
|
const actions = await queryRunner.query(sqlAction);
|
||||||
|
|
||||||
|
console.log("acoes:" + JSON.stringify(actions));
|
||||||
|
console.log("atividaes:" + JSON.stringify(atividades));
|
||||||
|
|
||||||
|
const arrayAtividade = [];
|
||||||
|
atividades.map((atividade) => {
|
||||||
|
const data = {
|
||||||
|
...atividade, items: [...actions.filter((a) => a.moduloId == atividade.moduloId
|
||||||
|
&& a.processId == atividade.processId &&
|
||||||
|
a.atividadeId == atividade.id)]
|
||||||
|
}
|
||||||
|
arrayAtividade.push(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("atividade acao: " + JSON.stringify(arrayAtividade));
|
||||||
|
|
||||||
|
const arrayModules = [];
|
||||||
|
modules.map((module) => {
|
||||||
|
const data = {
|
||||||
|
...module, items: [...arrayAtividade.filter((a) => a.moduloId == module.id)]
|
||||||
|
}
|
||||||
|
arrayModules.push(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
return arrayModules;
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async updatePermissionUser(userId: number, data: any) {
|
||||||
|
console.log(JSON.stringify(data));
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
await queryRunner.startTransaction();
|
||||||
|
try {
|
||||||
|
const sqlDeletePermissionUser = `BEGIN
|
||||||
|
DELETE FROM ESTACESSOMODULO WHERE CODUSUARIO = ${userId};
|
||||||
|
DELETE FROM ESTACESSOATIVIDADE WHERE CODUSUARIO = ${userId};
|
||||||
|
DELETE FROM ESTACESSOATIVIDADEACAO WHERE CODUSUARIO = ${userId};
|
||||||
|
END;
|
||||||
|
`;
|
||||||
|
await queryRunner.query(sqlDeletePermissionUser);
|
||||||
|
|
||||||
|
for (const action of data.actions) {
|
||||||
|
const sqlCreatePermissionAction = `BEGIN
|
||||||
|
UPDATE ESTACESSOATIVIDADEACAO SET
|
||||||
|
ACESSO = 'S'
|
||||||
|
WHERE CODMODULO = ${action.moduloId} AND CODPROCESSO = ${action.processId}
|
||||||
|
AND CODATIVIDADE = ${action.atividadeId} AND CODACAO = ${action.Id} AND CODUSUARIO = ${userId};
|
||||||
|
|
||||||
|
IF SQL%ROWCOUNT = 0 THEN
|
||||||
|
INSERT INTO ESTACESSOATIVIDADEACAO ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODACAO, CODUSUARIO, ACESSO )
|
||||||
|
VALUES ( ${action.moduloId}, ${action.processId}, ${action.atividadeId}, ${action.Id}, ${userId},'S');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
UPDATE ESTACESSOATIVIDADE SET
|
||||||
|
ACESSO = 'S'
|
||||||
|
WHERE CODMODULO = ${action.moduloId} AND CODPROCESSO = ${action.processId}
|
||||||
|
AND CODATIVIDADE = ${action.atividadeId} AND CODUSUARIO = ${userId};
|
||||||
|
|
||||||
|
IF SQL%ROWCOUNT = 0 THEN
|
||||||
|
INSERT INTO ESTACESSOATIVIDADE ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODUSUARIO, ACESSO )
|
||||||
|
VALUES ( ${action.moduloId}, ${action.processId}, ${action.atividadeId}, ${userId},'S');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
UPDATE ESTACESSOMODULO SET
|
||||||
|
ACESSO = 'S'
|
||||||
|
WHERE CODMODULO = ${action.moduloId} AND CODUSUARIO = ${userId};
|
||||||
|
|
||||||
|
IF SQL%ROWCOUNT = 0 THEN
|
||||||
|
INSERT INTO ESTACESSOMODULO ( CODMODULO, CODUSUARIO, ACESSO )
|
||||||
|
VALUES ( ${action.moduloId}, ${userId}, 'S');
|
||||||
|
END IF;
|
||||||
|
END; `
|
||||||
|
await queryRunner.query(sqlCreatePermissionAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const atividade of data.atividades) {
|
||||||
|
const sqlCreatePermissionAtividade = `BEGIN
|
||||||
|
UPDATE ESTACESSOATIVIDADE SET
|
||||||
|
ACESSO = 'S'
|
||||||
|
WHERE CODMODULO = ${atividade.moduloId} AND CODPROCESSO = ${atividade.processId}
|
||||||
|
AND CODATIVIDADE = ${atividade.id} AND CODUSUARIO = ${userId};
|
||||||
|
|
||||||
|
IF SQL%ROWCOUNT = 0 THEN
|
||||||
|
INSERT INTO ESTACESSOATIVIDADE ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODUSUARIO, ACESSO )
|
||||||
|
VALUES ( ${atividade.moduloId}, ${atividade.processId}, ${atividade.id}, ${userId},'S');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
UPDATE ESTACESSOMODULO SET
|
||||||
|
ACESSO = 'S'
|
||||||
|
WHERE CODMODULO = ${atividade.moduloId} AND CODUSUARIO = ${userId};
|
||||||
|
|
||||||
|
IF SQL%ROWCOUNT = 0 THEN
|
||||||
|
INSERT INTO ESTACESSOMODULO ( CODMODULO, CODUSUARIO, ACESSO )
|
||||||
|
VALUES ( ${atividade.moduloId}, ${userId},'S');
|
||||||
|
END IF;
|
||||||
|
END; `;
|
||||||
|
await queryRunner.query(sqlCreatePermissionAtividade);
|
||||||
|
}
|
||||||
|
|
||||||
|
await queryRunner.commitTransaction();
|
||||||
|
} catch (err) {
|
||||||
|
await queryRunner.rollbackTransaction();
|
||||||
|
console.log(err);
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [],
|
||||||
|
controllers: [],
|
||||||
|
providers: [],
|
||||||
|
|
||||||
|
})
|
||||||
|
export class AuthModule { }
|
||||||
|
|
@ -0,0 +1,132 @@
|
||||||
|
import { ResultModel } from '../../domain/models/result.model';
|
||||||
|
import { UserModel } from '../../domain/models/user.model';
|
||||||
|
import { RoleInterceptor } from '../interceptors/role.interceptor';
|
||||||
|
import { JwtAuthGuard } from '../guards/auth.guard';
|
||||||
|
|
||||||
|
import { AuthService } from '../services/auth.service';
|
||||||
|
import { UserService } from '../services/user.service';
|
||||||
|
import { Body, Controller, Get, HttpException, HttpStatus, Param, Post, Req, UseGuards, UseInterceptors } from "@nestjs/common";
|
||||||
|
import { Guid } from 'guid-typescript';
|
||||||
|
import { ResetPasswordModel } from 'src/domain/models/reset-password.model';
|
||||||
|
import { ChangePasswordModel } from 'src/domain/models/change-password.model';
|
||||||
|
import { CreateUserModel } from 'src/domain/models/create-user.model';
|
||||||
|
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@ApiTags('Autenticação')
|
||||||
|
@Controller('api/v1/auth')
|
||||||
|
export class UserController {
|
||||||
|
constructor(private authService: AuthService,
|
||||||
|
private userService: UserService) { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Realiza a autenticação do usuário para acesso a vendaweb.
|
||||||
|
* @@example { email: "exemplo@exemplo.com", password: "123456"}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@Get('users')
|
||||||
|
async getUsers() {
|
||||||
|
return this.userService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('login')
|
||||||
|
async login(@Body() model: UserModel): Promise<any> {
|
||||||
|
const userDb = await this.userService.authenticate(model);
|
||||||
|
if (!userDb)
|
||||||
|
throw new HttpException(new ResultModel(false, 'Usuário ou senha inválidos.', null, null), HttpStatus.UNAUTHORIZED);
|
||||||
|
if (userDb.blocked == "S")
|
||||||
|
throw new HttpException(new ResultModel(false, 'Usuário inativo.', null, null), HttpStatus.UNAUTHORIZED);
|
||||||
|
if (model.application == "SALE" && userDb.seller == 0)
|
||||||
|
throw new HttpException(new ResultModel(false, 'Usuário sem vendedor informado .', null, null), HttpStatus.UNAUTHORIZED);
|
||||||
|
if (model.application == "SALE" && (userDb.codigoFilial == null || userDb.codigoFilial == ''))
|
||||||
|
throw new HttpException(new ResultModel(false, 'Usuário sem filial informada.', null, null), HttpStatus.UNAUTHORIZED);
|
||||||
|
|
||||||
|
const token = await this.authService.createToken(userDb.username, userDb.email, '', [userDb.sectorId, userDb.sectorManagerId]);
|
||||||
|
|
||||||
|
return new ResultModel(true, null, {
|
||||||
|
"id": userDb.id, "username": userDb.userName, "email": userDb.email,
|
||||||
|
"store": userDb.codigoFilial, "name": userDb.nomeFilial, "seller": userDb.seller,
|
||||||
|
"deliveryTime": userDb.deliveryTime, "supervisorId": userDb.supervisorId, "token": token
|
||||||
|
}, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('create')
|
||||||
|
async createUser(@Body() model: CreateUserModel): Promise<any> {
|
||||||
|
const result = await this.userService.create(model);
|
||||||
|
console.log(result);
|
||||||
|
return result;
|
||||||
|
/*if (!userDb)
|
||||||
|
throw new HttpException(new ResultModel(false, 'Usuário ou senha inválidos.', null, null), HttpStatus.UNAUTHORIZED);
|
||||||
|
if (userDb.blocked == "S")
|
||||||
|
throw new HttpException(new ResultModel(false, 'Usuário inativo.', null, null), HttpStatus.UNAUTHORIZED);
|
||||||
|
const token = await this.authService.createToken(userDb.username, userDb.email, '', [userDb.role, model.application]);
|
||||||
|
|
||||||
|
return new ResultModel(true, null, {"username": userDb.username, "email": userDb.email, "token": token}, null);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('reset-password')
|
||||||
|
async resetPassword(@Body() model: ResetPasswordModel): Promise<any> {
|
||||||
|
try {
|
||||||
|
//TODO: Enviar email com a senha
|
||||||
|
const password = Guid.create.toString().substring(0, 8).replace('-', '');
|
||||||
|
await this.userService.update(model.email, password);
|
||||||
|
return new ResultModel(true, 'Uma nova senha foi enviada para seu e-mail.', null, null);
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível restaurar sua senha', null, null), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('change-password')
|
||||||
|
@UseGuards(JwtAuthGuard)
|
||||||
|
async changePassword(@Req() request, @Body() model: ChangePasswordModel): Promise<any> {
|
||||||
|
try {
|
||||||
|
//TODO: Encriptar senha
|
||||||
|
//TODO: Validar usuario
|
||||||
|
await this.userService.update(request.user.email, model.newPassword);
|
||||||
|
return new ResultModel(true, 'Sua senha foi alterada com sucesso', null, null);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível alterar sua senha', null, null), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('discount-user/:id')
|
||||||
|
async discountAuthorization(@Param('id') id: number): Promise<any> {
|
||||||
|
const user = await this.userService.discountUser(id);
|
||||||
|
console.log(user);
|
||||||
|
return new ResultModel(true, null, user, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('refresh')
|
||||||
|
@UseGuards(JwtAuthGuard)
|
||||||
|
async refreshToken(@Req() request): Promise<any> {
|
||||||
|
const token = await this.authService.createToken(request.user.username, request.user.email, request.user.image, request.user.roles);
|
||||||
|
return new ResultModel(true, null, token, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('authenticate')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async authenticate(@Body() model: UserModel): Promise<any> {
|
||||||
|
const userDb = await this.userService.authenticate(model);
|
||||||
|
console.log(userDb);
|
||||||
|
if (!userDb)
|
||||||
|
throw new HttpException(new ResultModel(false, 'Usuário ou senha inválidos.', null, null), HttpStatus.UNAUTHORIZED);
|
||||||
|
if (userDb.blocked == "S")
|
||||||
|
throw new HttpException(new ResultModel(false, 'Usuário inativo.', null, null), HttpStatus.UNAUTHORIZED);
|
||||||
|
|
||||||
|
return new ResultModel(true, null, {
|
||||||
|
"id": userDb.id, "username": userDb.userName, "email": userDb.email,
|
||||||
|
"store": userDb.codigoFilial, "seller": userDb.seller, "discountPercent": userDb.discountPercent,
|
||||||
|
"sectorId": userDb.sectorId, "sectorManagerId": userDb.sectorManagerId
|
||||||
|
}, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Get('')
|
||||||
|
@UseGuards(JwtAuthGuard)
|
||||||
|
@UseInterceptors(new RoleInterceptor(['admin']))
|
||||||
|
findAll() {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
import { AuthGuard } from '@nestjs/passport';
|
||||||
|
import { ExecutionContext, Injectable, UnauthorizedException } from "@nestjs/common";
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class JwtAuthGuard extends AuthGuard() {
|
||||||
|
canActivate(context: ExecutionContext) {
|
||||||
|
return super.canActivate(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
handleRequest(err: any, user: any, info: any) {
|
||||||
|
if (err || !user) {
|
||||||
|
throw err || new UnauthorizedException();
|
||||||
|
}
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
import { HttpStatus } from '@nestjs/common';
|
||||||
|
import { ResultModel } from './../../domain/models/result.model';
|
||||||
|
import { HttpException } from '@nestjs/common';
|
||||||
|
import { JwtPayload } from './../interfaces/jwt-payload.interface';
|
||||||
|
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class RoleInterceptor implements NestInterceptor {
|
||||||
|
|
||||||
|
constructor(private roles: string[]){}
|
||||||
|
|
||||||
|
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
|
||||||
|
const payload: JwtPayload = context.switchToHttp().getRequest().user;
|
||||||
|
console.log(payload);
|
||||||
|
|
||||||
|
let hasRole = false;
|
||||||
|
payload.roles.forEach((role) => {
|
||||||
|
if (this.roles.includes(role))
|
||||||
|
hasRole = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!hasRole) {
|
||||||
|
throw new HttpException(
|
||||||
|
new ResultModel(false, 'Acesso não autorizado', null, null),
|
||||||
|
HttpStatus.FORBIDDEN
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return next
|
||||||
|
.handle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
export interface JwtPayload {
|
||||||
|
username: string;
|
||||||
|
email: string;
|
||||||
|
image: string;
|
||||||
|
sectorId: string;
|
||||||
|
sectorManagerId: string;
|
||||||
|
roles: string[];
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { JwtPayload } from './../interfaces/jwt-payload.interface';
|
||||||
|
import { JwtService, JwtSignOptions } from "@nestjs/jwt";
|
||||||
|
import { UserService } from './user.service';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class AuthService {
|
||||||
|
constructor(
|
||||||
|
private readonly accountService: UserService,
|
||||||
|
private readonly jwtService: JwtService,
|
||||||
|
){}
|
||||||
|
|
||||||
|
async createToken(username: string, email: string, image: string, roles: string[]) {
|
||||||
|
const user: JwtPayload = { username: username, email: email, image: image, sectorId: roles[0], sectorManagerId: roles[1], roles: [], }
|
||||||
|
const options: JwtSignOptions = {expiresIn: "1h"};
|
||||||
|
return this.jwtService.sign(user, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
async validateUser(payload: JwtPayload): Promise<any> {
|
||||||
|
//return await this.accountService.findOneByUsername(payload.username);
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,197 @@
|
||||||
|
import { UserModel } from '../../domain/models/user.model';
|
||||||
|
import { HttpException, HttpStatus, Injectable } from "@nestjs/common";
|
||||||
|
import { User } from 'src/domain/entity/tables/estusuario.enity';
|
||||||
|
import { Connection, getConnection } from 'typeorm';
|
||||||
|
import md5 = require('md5');
|
||||||
|
import { CreateUserModel } from 'src/domain/models/create-user.model';
|
||||||
|
import { Pcempr } from '../../domain/entity/tables/pcempr.entity';
|
||||||
|
import { connectionOptions } from 'src/configs/typeorm.config';
|
||||||
|
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class UserService {
|
||||||
|
|
||||||
|
async create(data: CreateUserModel): Promise<User> {
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
|
||||||
|
try {
|
||||||
|
const user = await queryRunner.manager
|
||||||
|
.getRepository(User)
|
||||||
|
.createQueryBuilder('estusuario')
|
||||||
|
.where("\"estusuario\".email = :email", { email: data.email })
|
||||||
|
.getOne();
|
||||||
|
if (user != null) {
|
||||||
|
throw new HttpException("Já existe um usuário cadastrado no sistema com este email", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
throw err;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
const newUser = new User();
|
||||||
|
newUser.username = data.userName;
|
||||||
|
newUser.password = md5(data.password).toUpperCase();
|
||||||
|
newUser.email = data.email;
|
||||||
|
newUser.role = data.application;
|
||||||
|
newUser.blocked = "N";
|
||||||
|
newUser.registration = data.registration;
|
||||||
|
|
||||||
|
await getConnection()
|
||||||
|
.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into(User)
|
||||||
|
.values(newUser)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
return newUser;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async findAll() {
|
||||||
|
const sqlUsers = `SELECT PCEMPR.MATRICULA as "userId"
|
||||||
|
,PCEMPR.NOME||' ('||PCEMPR.MATRICULA||')' as "name"
|
||||||
|
,PCEMPR.USUARIOBD as "userBD"
|
||||||
|
,PCEMPR.CODFILIAL as "storeId"
|
||||||
|
,PCEMPR.FUNCAO as "function"
|
||||||
|
,PCSETOR.DESCRICAO as "sector"
|
||||||
|
FROM PCEMPR, PCSETOR
|
||||||
|
WHERE PCEMPR.CODSETOR = PCSETOR.CODSETOR
|
||||||
|
AND PCEMPR.DTDEMISSAO IS NULL
|
||||||
|
ORDER BY PCEMPR.NOME`;
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
return await queryRunner.query(sqlUsers);
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async authenticate(user: UserModel): Promise<any> {
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
|
||||||
|
const sql = 'SELECT PCEMPR.matricula as \"id\" ' +
|
||||||
|
' ,PCEMPR.usuariobd as \"userName\" ' +
|
||||||
|
' ,PCEMPR.codfilial as \"codigoFilial\" ' +
|
||||||
|
' ,PCFILIAL.fantasia as \"nomeFilial\" ' +
|
||||||
|
' ,PCEMPR.codusur as \"seller\" ' +
|
||||||
|
' ,NVL(PCEMPR.percdesc,0) as \"discountPercent\" ' +
|
||||||
|
' ,NVL(PCEMPR.codsetor,0) as \"sectorId\" ' +
|
||||||
|
' ,NVL(PCPARAMFILIAL.valor,0) as \"sectorManagerId\" ' +
|
||||||
|
' ,( SELECT PCUSUARI.CODSUPERVISOR FROM PCUSUARI WHERE PCUSUARI.CODUSUR = PCEMPR.CODUSUR ) as \"supervisorId\" ' +
|
||||||
|
' ,( SELECT NVL(P.valor,0) FROM PCPARAMFILIAL P WHERE P.CODFILIAL = \'99\' AND ' +
|
||||||
|
' P.NOME = \'CON_PRAZOENTREGA\' ) as \"deliveryTime\" ' +
|
||||||
|
' FROM PCEMPR, PCFILIAL, PCPARAMFILIAL ' +
|
||||||
|
' WHERE PCEMPR.CODFILIAL = PCFILIAL.CODIGO (+)' +
|
||||||
|
' AND PCPARAMFILIAL.CODFILIAL = \'99\' ' +
|
||||||
|
' AND PCPARAMFILIAL.NOME = \'CON_CODSETORGERENTELOJA\' ' +
|
||||||
|
' AND PCEMPR.EMAIL = :username AND PCEMPR.SENHABD = CRYPT(:password, USUARIOBD)';
|
||||||
|
|
||||||
|
const users = await queryRunner.manager
|
||||||
|
.query(sql, [user.email, user.password]);
|
||||||
|
|
||||||
|
if (users.length == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// const sqlDiasUteis = 'SELECT ( mv_prox_diautil( (TRUNC(SYSDATE) + :1) + COUNT(1), :2 ) - TRUNC(SYSDATE) ) as "days" ' +
|
||||||
|
// ' FROM MVDIASUTEIS ' +
|
||||||
|
// ' WHERE MVDIASUTEIS.CODFILIAL = :3 ' +
|
||||||
|
// ` AND MVDIASUTEIS.diaentrega = 'N' ` +
|
||||||
|
// ` AND MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + :4 `;
|
||||||
|
|
||||||
|
// const sqlDiasUteis = `SELECT CASE WHEN mv_prox_diautil(TRUNC(SYSDATE), :1) > TRUNC(SYSDATE) THEN
|
||||||
|
// ( ( mv_prox_diautil((mv_prox_diautil(TRUNC(SYSDATE), :2) + :3) + COUNT(1), :4 ) - (mv_prox_diautil(TRUNC(SYSDATE), :5)) ) - 1 )
|
||||||
|
// ELSE ( mv_prox_diautil((mv_prox_diautil(TRUNC(SYSDATE), :6) + :7) + COUNT(1), :8 ) - (mv_prox_diautil(TRUNC(SYSDATE), :9)) ) END as "days"
|
||||||
|
// FROM MVDIASUTEIS
|
||||||
|
// WHERE MVDIASUTEIS.CODFILIAL = :10
|
||||||
|
// AND MVDIASUTEIS.diaentrega = 'N'
|
||||||
|
// AND MVDIASUTEIS.data BETWEEN mv_prox_diautil(TRUNC(SYSDATE), :11) AND mv_prox_diautil(TRUNC(SYSDATE), :12) + :13`;
|
||||||
|
|
||||||
|
// const deliveryDays = await queryRunner.manager
|
||||||
|
// .query(sqlDiasUteis, ['6',
|
||||||
|
// '6', Number.parseInt(users[0].deliveryTime), '6', '6',
|
||||||
|
// '6', Number.parseInt(users[0].deliveryTime), '6', '6',
|
||||||
|
// '6',
|
||||||
|
// '6', '6', Number.parseInt(users[0].deliveryTime)
|
||||||
|
// ]);
|
||||||
|
|
||||||
|
const sqlDiasEntrega = `SELECT ( MAX(MVDIASUTEIS.DATA) - TRUNC(SYSDATE) ) as "days"
|
||||||
|
FROM MVDIASUTEIS
|
||||||
|
WHERE MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE)
|
||||||
|
AND TRUNC(SYSDATE) + :dias`;
|
||||||
|
|
||||||
|
const sqlDiasSemEntrega = `SELECT GREATEST(COUNT(1) - 1,0) as "daysNoDelivery"
|
||||||
|
FROM MVDIASUTEIS
|
||||||
|
WHERE MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE)
|
||||||
|
AND TRUNC(SYSDATE) + :dias
|
||||||
|
AND MVDIASUTEIS.DIAENTREGA = 'N'`;
|
||||||
|
|
||||||
|
const deliveryDays2 = await queryRunner.manager
|
||||||
|
.query(sqlDiasEntrega, [Number.parseInt(users[0].deliveryTime)]);
|
||||||
|
|
||||||
|
const noDeliveryDays = await queryRunner.manager
|
||||||
|
.query(sqlDiasSemEntrega, [Number.parseInt(users[0].deliveryTime)]);
|
||||||
|
|
||||||
|
const days = Number.parseInt(deliveryDays2[0].days) +
|
||||||
|
( noDeliveryDays.length > 0 ? Number.parseInt(noDeliveryDays[0].daysNoDelivery) : 0 );
|
||||||
|
|
||||||
|
const userDb = users[0];
|
||||||
|
console.log(userDb);
|
||||||
|
if (!isNaN(days)) {
|
||||||
|
userDb.deliveryTime = days; // deliveryDays[0].days;
|
||||||
|
}
|
||||||
|
console.log(days);
|
||||||
|
console.log(userDb);
|
||||||
|
return userDb;
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async discountUser(userId: number): Promise<any> {
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
return await queryRunner.manager
|
||||||
|
.getRepository(Pcempr)
|
||||||
|
.createQueryBuilder('pcempr')
|
||||||
|
.select("NVL(\"pcempr\".percdesc,0) as \"discountUser\"")
|
||||||
|
.where("MATRICULA = :userId", { userId })
|
||||||
|
.getRawOne(); //...authUser,
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async update(email: string, newPassword: string) {
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
return await queryRunner.manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.update(User)
|
||||||
|
.set({ password: newPassword })
|
||||||
|
.where("EMAIL = :email", { email })
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
import { JwtPayload } from './../interfaces/jwt-payload.interface';
|
||||||
|
import { Injectable, UnauthorizedException } from "@nestjs/common";
|
||||||
|
import { PassportStrategy } from "@nestjs/passport";
|
||||||
|
import { AuthService } from "../services/auth.service";
|
||||||
|
import { ExtractJwt, Strategy } from 'passport-jwt';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class JwtStrategy extends PassportStrategy(Strategy) {
|
||||||
|
constructor(private readonly authService: AuthService){
|
||||||
|
super({
|
||||||
|
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
|
||||||
|
secretOrKeyProvider: '4557C0D7-DFB0-40DA-BF83-91A75103F7A9', //secretOrKey
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async validate(payload: JwtPayload) {
|
||||||
|
const user = await this.authService.validateUser(payload);
|
||||||
|
if (!user) {
|
||||||
|
throw new UnauthorizedException();
|
||||||
|
}
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { ResultModel } from './../domain/models/result.model';
|
||||||
|
import { Contract } from './../contracts/contract';
|
||||||
|
import { CallHandler, ExecutionContext, HttpException, HttpStatus, NestInterceptor } from "@nestjs/common";
|
||||||
|
import { Observable } from "rxjs";
|
||||||
|
|
||||||
|
export class ValidadorInterceptor implements NestInterceptor {
|
||||||
|
constructor(public contract: Contract){}
|
||||||
|
|
||||||
|
intercept(context: ExecutionContext, next: CallHandler<any>): Observable<any> {
|
||||||
|
const body = context.switchToHttp().getRequest().body;
|
||||||
|
const valid = this.contract.validade(body);
|
||||||
|
|
||||||
|
if (!valid) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Ops, algo saiu errado!', null, this.contract.errors), HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
return next.handle();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { AppController } from './app.controller';
|
||||||
|
import { AppService } from './app.service';
|
||||||
|
|
||||||
|
describe('AppController', () => {
|
||||||
|
let appController: AppController;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const app: TestingModule = await Test.createTestingModule({
|
||||||
|
controllers: [AppController],
|
||||||
|
providers: [AppService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
appController = app.get<AppController>(AppController);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('root', () => {
|
||||||
|
it('should return "Hello World!"', () => {
|
||||||
|
expect(appController.getHello()).toBe('Hello World!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { Controller, Get } from '@nestjs/common';
|
||||||
|
import { AppService } from './app.service';
|
||||||
|
import { ApiExcludeEndpoint } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@Controller()
|
||||||
|
export class AppController {
|
||||||
|
constructor(private readonly appService: AppService) {}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
getHello(): string {
|
||||||
|
return this.appService.getHello();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,101 @@
|
||||||
|
import { DashboardModule } from './sales/dashboard/dashboard.module';
|
||||||
|
import { MindeeModule } from './payment/mindee.module';
|
||||||
|
import { GoogleModule } from './google/google.module';
|
||||||
|
import { CepModule } from './sales/cep/cep.module';
|
||||||
|
import { AccessControlModule } from './Auth/access-control/access-control.module';
|
||||||
|
import { TintometricoModule } from './sales/tintometrico/tintometrico.module';
|
||||||
|
import { PartnerRangeModule } from './partner-range/partner-range.module';
|
||||||
|
import { SellerModule } from './seller/seller.module';
|
||||||
|
import { PartnerCategoryModule } from './partner-category/partner-category.module';
|
||||||
|
import { PartnerModule } from './partner/partner.module';
|
||||||
|
import { PreOrderModule } from './sales/pre-order/pre-order.module';
|
||||||
|
import { OrderModule } from './sales/order/order.module';
|
||||||
|
import { MessagesModule } from './backoffice/messages/messages.module';
|
||||||
|
import { CustomerModule } from './sales/customer/customer.module';
|
||||||
|
import { AddressCustomerModule } from './sales/address-customer/address-customer.module';
|
||||||
|
import { ProductService } from './backoffice/product/product.service';
|
||||||
|
import { ProductController } from './backoffice/product/product.controller';
|
||||||
|
import { BackofficeModule } from './backoffice/backoffice.module';
|
||||||
|
import { ShoppingModule } from './sales/shopping/shopping.module';
|
||||||
|
import { ListsModule } from './backoffice/lists/lists.module';
|
||||||
|
import { SalesModule } from './sales/sales/sales.module';
|
||||||
|
import { DeliveryModule } from './delivery/delivery.module';
|
||||||
|
import { ReportsController } from './schedules/report/report.controller';
|
||||||
|
import { ReportService } from './schedules/report/report.service';
|
||||||
|
import { ProductTypeModule } from './backoffice/product-type/product-type.module';
|
||||||
|
import { CestModule } from './backoffice/cest/cest.module';
|
||||||
|
import { NcmModule } from './backoffice/ncm/ncm.module';
|
||||||
|
import { CategoryModule } from './backoffice/category/category.module';
|
||||||
|
import { SectionModule } from './backoffice/section/section.module';
|
||||||
|
import { DepartmentModule } from './backoffice/department/department.module';
|
||||||
|
import { AuthModule } from './Auth/auth.module';
|
||||||
|
import { MeasureProductModule } from './backoffice/measureproduct/measureproduct.module';
|
||||||
|
import { HttpModule, MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
|
||||||
|
import { AppController } from './app.controller';
|
||||||
|
import { AppService } from './app.service';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
import { typeOrmConfig } from './configs/typeorm.config';
|
||||||
|
import { Connection } from 'typeorm';
|
||||||
|
import { DictionaryModule } from './backoffice/dictionary/dictionary.module';
|
||||||
|
import { ConfigModule } from '@nestjs/config/dist/config.module';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [
|
||||||
|
DashboardModule,
|
||||||
|
MindeeModule,
|
||||||
|
GoogleModule,
|
||||||
|
CepModule,
|
||||||
|
AccessControlModule,
|
||||||
|
TintometricoModule,
|
||||||
|
PartnerRangeModule,
|
||||||
|
SellerModule,
|
||||||
|
PartnerCategoryModule,
|
||||||
|
PartnerModule,
|
||||||
|
PreOrderModule,
|
||||||
|
OrderModule,
|
||||||
|
MessagesModule,
|
||||||
|
CustomerModule,
|
||||||
|
TypeOrmModule.forRoot(typeOrmConfig),
|
||||||
|
ConfigModule.forRoot({ envFilePath: ['.env', '.env.development.local', '.env.development'], isGlobal: true }),
|
||||||
|
AuthModule,
|
||||||
|
DictionaryModule,
|
||||||
|
MeasureProductModule,
|
||||||
|
DepartmentModule,
|
||||||
|
SectionModule,
|
||||||
|
CategoryModule,
|
||||||
|
NcmModule,
|
||||||
|
CestModule,
|
||||||
|
ProductTypeModule,
|
||||||
|
SalesModule,
|
||||||
|
ListsModule,
|
||||||
|
AddressCustomerModule,
|
||||||
|
BackofficeModule,
|
||||||
|
ShoppingModule,
|
||||||
|
ListsModule,
|
||||||
|
SalesModule,
|
||||||
|
DeliveryModule,
|
||||||
|
ProductTypeModule,
|
||||||
|
CestModule,
|
||||||
|
NcmModule,
|
||||||
|
CategoryModule,
|
||||||
|
DepartmentModule,
|
||||||
|
HttpModule,
|
||||||
|
PartnerCategoryModule,
|
||||||
|
SellerModule
|
||||||
|
],
|
||||||
|
controllers: [
|
||||||
|
ProductController,
|
||||||
|
ReportsController,
|
||||||
|
AppController],
|
||||||
|
providers: [
|
||||||
|
ProductService,
|
||||||
|
ReportService, AppService],
|
||||||
|
})
|
||||||
|
export class AppModule implements NestModule {
|
||||||
|
|
||||||
|
constructor(private connection: Connection) { }
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
|
||||||
|
configure(consumer: MiddlewareConsumer) { }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class AppService {
|
||||||
|
getHello(): string {
|
||||||
|
return 'Hello World!';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { ProductController } from './product/product.controller';
|
||||||
|
import { ProductService } from './product/product.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [],
|
||||||
|
controllers: [ProductController],
|
||||||
|
providers: [ProductService],
|
||||||
|
})
|
||||||
|
export class BackofficeModule {}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
import { CategoryService } from './category.service';
|
||||||
|
import { Controller, Get, HttpException, HttpStatus, Param } from '@nestjs/common';
|
||||||
|
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
|
||||||
|
import { ResultModel } from 'src/domain/models/result.model';
|
||||||
|
|
||||||
|
@ApiTags('BackOffice')
|
||||||
|
@Controller('v1/category')
|
||||||
|
export class CategoryController {
|
||||||
|
|
||||||
|
constructor(private readonly categoryService: CategoryService){}
|
||||||
|
|
||||||
|
@Get(':idSecion')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getSection(@Param('idSecion') idSection: number) {
|
||||||
|
try {
|
||||||
|
const result = await this.categoryService.find(idSection);
|
||||||
|
return new ResultModel(true, null, result, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de departamentos', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Pccategoria } from '../../domain/entity/tables/pccategoria.entity';
|
||||||
|
import { CategoryService } from './category.service';
|
||||||
|
import { CategoryController } from './category.controller';
|
||||||
|
import { CacheModule, Module } from '@nestjs/common';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [CacheModule.register(),
|
||||||
|
TypeOrmModule.forFeature([Pccategoria])],
|
||||||
|
controllers: [
|
||||||
|
CategoryController,],
|
||||||
|
providers: [
|
||||||
|
CategoryService,],
|
||||||
|
})
|
||||||
|
export class CategoryModule { }
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { Pccategoria } from '../../domain/entity/tables/pccategoria.entity';
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class CategoryService {
|
||||||
|
constructor(@InjectRepository(Pccategoria)
|
||||||
|
private categoryRespository: Repository<Pccategoria>) { }
|
||||||
|
|
||||||
|
async find(idSecion: number): Promise<Pccategoria[]> {
|
||||||
|
return await this.categoryRespository
|
||||||
|
.createQueryBuilder('pccategoria')
|
||||||
|
.select('"pccategoria".codcategoria', 'codigoCategoria')
|
||||||
|
.addSelect('concat(concat("pccategoria".codcategoria, \'-\'),"pccategoria".categoria)', 'descricaoCategoria')
|
||||||
|
//.addSelect('concat(concat("pccategoria".codcategoria, \'-\'),"pccategoria".categoria)', 'descricaoCategoria')
|
||||||
|
.where("codsec = :codsec", { codsec: idSecion })
|
||||||
|
.getRawMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
|
||||||
|
import { ResultModel } from './../../domain/models/result.model';
|
||||||
|
import { CestService } from './cest.service';
|
||||||
|
import { Controller, Get, HttpException, HttpStatus, Param, Req } from '@nestjs/common';
|
||||||
|
|
||||||
|
@ApiTags('BackOffice')
|
||||||
|
@Controller('v1/cest')
|
||||||
|
export class CestController {
|
||||||
|
constructor(private readonly cestService: CestService){}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getAll(@Req() req) {
|
||||||
|
try {
|
||||||
|
if (req.query['query'])
|
||||||
|
{
|
||||||
|
const result = await this.cestService.findByDescription(req.query['query']);
|
||||||
|
return new ResultModel(true, null, result, []);
|
||||||
|
}
|
||||||
|
return new ResultModel(false, 'Para pesquisar os Cest é necessário informar pelo menos 3 caracteres.', null, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de dicionários', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get(':ncm')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async GetbyNcm(@Param('ncm') ncm: string) {
|
||||||
|
try {
|
||||||
|
const result = await this.cestService.findByNcm(ncm);
|
||||||
|
return new ResultModel(true, null, result, null);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de CESTs', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Pccest } from '../../domain/entity/tables/pccest.entity';
|
||||||
|
import { CestController } from './cest.controller';
|
||||||
|
import { CestService } from './cest.service';
|
||||||
|
import { CacheModule, Module } from '@nestjs/common';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [CacheModule.register(),
|
||||||
|
TypeOrmModule.forFeature([Pccest])],
|
||||||
|
controllers: [
|
||||||
|
CestController,],
|
||||||
|
providers: [
|
||||||
|
CestService,],
|
||||||
|
})
|
||||||
|
export class CestModule { }
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
import { Pccest } from '../../domain/entity/tables/pccest.entity';
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class CestService {
|
||||||
|
constructor(@InjectRepository(Pccest)
|
||||||
|
private cestRepository: Repository<Pccest>) { }
|
||||||
|
|
||||||
|
async find(): Promise<Pccest[]> {
|
||||||
|
return await this.cestRepository
|
||||||
|
.createQueryBuilder('pccest')
|
||||||
|
.getMany()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async findByDescription(descricaoCest: string): Promise<Pccest[]> {
|
||||||
|
|
||||||
|
return await this.cestRepository
|
||||||
|
.createQueryBuilder('pccest')
|
||||||
|
.select('"pccest".codigo', 'codigo')
|
||||||
|
.addSelect('concat(concat(\"pccest\".codcest, \'-\'), substr(\"pccest\".descricaocest,1,80))', 'descricaoCest')
|
||||||
|
.andWhere("concat(concat(\"pccest\".codcest, \'-\'), substr(\"pccest\".descricaocest,1,80)) like '%'||UPPER(:descricaoCest)||'%'", {descricaoCest})
|
||||||
|
.getRawMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
async findByNcm(codigoNcm: string): Promise<Pccest[]> {
|
||||||
|
return await this.cestRepository
|
||||||
|
.createQueryBuilder('pccest')
|
||||||
|
.where('ncm = :codigoncm', { codigoncm: codigoNcm })
|
||||||
|
.getMany()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
import { DepartmentService } from './department.service';
|
||||||
|
import { CacheInterceptor, Controller, Get, HttpException, HttpStatus, UseInterceptors } from '@nestjs/common';
|
||||||
|
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
|
||||||
|
import { ResultModel } from 'src/domain/models/result.model';
|
||||||
|
|
||||||
|
@ApiTags('BackOffice')
|
||||||
|
@Controller('api/v1/department')
|
||||||
|
export class DepartmentController {
|
||||||
|
|
||||||
|
constructor(private readonly departmentService: DepartmentService){}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
@UseInterceptors(CacheInterceptor)
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getAll() {
|
||||||
|
try {
|
||||||
|
const departments = await this.departmentService.findAll();
|
||||||
|
return new ResultModel(true, null, departments, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de departamentos', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('all')
|
||||||
|
@UseInterceptors(CacheInterceptor)
|
||||||
|
async get() {
|
||||||
|
try {
|
||||||
|
const departments = await this.departmentService.findDepartments();
|
||||||
|
return new ResultModel(true, null, departments, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de departamentos', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { Pcdepto } from '../../domain/entity/tables/pcdepto.entity';
|
||||||
|
import { DepartmentService } from './department.service';
|
||||||
|
import { DepartmentController } from './department.controller';
|
||||||
|
import { CacheModule, Module } from '@nestjs/common';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [ CacheModule.register(),
|
||||||
|
TypeOrmModule.forFeature([Pcdepto])],
|
||||||
|
controllers: [DepartmentController,],
|
||||||
|
providers: [DepartmentService,],
|
||||||
|
|
||||||
|
})
|
||||||
|
export class DepartmentModule { }
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
import { Pcdepto } from 'src/domain/entity/tables/pcdepto.entity';
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { getConnection, Repository } from 'typeorm';
|
||||||
|
import { Esvdepartamento } from 'src/domain/entity/views/esvdepartamento.entity';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class DepartmentService {
|
||||||
|
constructor( @InjectRepository(Pcdepto)
|
||||||
|
private departmentRepository: Repository<Pcdepto>){}
|
||||||
|
|
||||||
|
async findAll(): Promise<Pcdepto[]> {
|
||||||
|
return await this.departmentRepository
|
||||||
|
.createQueryBuilder('pcdepto')
|
||||||
|
.leftJoinAndSelect("pcdepto.secoes", "secoes")
|
||||||
|
.leftJoinAndSelect("pcsecao.categoria", "categoria")
|
||||||
|
.select('"pcdepto".codepto', 'codigoDepartamento')
|
||||||
|
.addSelect('concat(concat("pcdepto".codepto, \' - \'),"pcdepto".descricao)', 'descricaoDepartamento')
|
||||||
|
// .addSelect('concat(concat(concat("pcdepto".descricao, \' (\'),"pcdepto".codepto),\')\')', 'descricaoDepartamento')
|
||||||
|
.where('codepto <> 9999')
|
||||||
|
.getRawMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
async findDepartments() {
|
||||||
|
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const departments = await queryRunner.manager
|
||||||
|
.getRepository(Esvdepartamento)
|
||||||
|
.createQueryBuilder('esvdepartamento')
|
||||||
|
.innerJoinAndSelect('esvdepartamento.secoes', 'secoes')
|
||||||
|
.innerJoinAndSelect('secoes.categorias', 'itens')
|
||||||
|
.where('\"esvdepartamento\".codepto <> 9999')
|
||||||
|
.orderBy("\"esvdepartamento\".DESCRICAO")
|
||||||
|
.getMany();
|
||||||
|
return departments;
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
import { ResultModel } from '../../domain/models/result.model';
|
||||||
|
import { CreateDictionaryContract } from '../../contracts/dictionary.contract';
|
||||||
|
import { ValidadorInterceptor } from '../../Interceptors/validador.interceptor';
|
||||||
|
import { DictionaryModel } from '../../domain/models/dictionary.model';
|
||||||
|
import { DictionaryService } from './dictionary.service';
|
||||||
|
import { Controller, Get, Param, Put, Body, Post, Delete, UseInterceptors, HttpException, HttpStatus, CacheInterceptor, Req } from "@nestjs/common";
|
||||||
|
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@ApiTags('BackOffice')
|
||||||
|
@Controller('v1/dictionary')
|
||||||
|
export class DictionaryController {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private readonly dictionaryService: DictionaryService
|
||||||
|
){}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
@UseInterceptors(CacheInterceptor)
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getAll(@Req() req) {
|
||||||
|
try {
|
||||||
|
if (req.query['query'])
|
||||||
|
{
|
||||||
|
const result = await this.dictionaryService.findByDescription(req.query['query']);
|
||||||
|
return new ResultModel(true, null, result, []);
|
||||||
|
}
|
||||||
|
const dictionaries = await this.dictionaryService.findAll();
|
||||||
|
return new ResultModel(true, null, dictionaries, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de dicionários', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get(':id')
|
||||||
|
async get(@Param('id') id: number) {
|
||||||
|
try {
|
||||||
|
const dictionary = await this.dictionaryService.find(id);
|
||||||
|
return new ResultModel(true, null, dictionary, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar dicionário.', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Put(':id')
|
||||||
|
async put(@Param('id') id: number, @Body() dados: DictionaryModel) {
|
||||||
|
try {
|
||||||
|
await this.dictionaryService.update(id, dados);
|
||||||
|
return new ResultModel(true, null, dados, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível atualizar dicionário.', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post()
|
||||||
|
@UseInterceptors(new ValidadorInterceptor(new CreateDictionaryContract()))
|
||||||
|
async post(@Body() dados: DictionaryModel) {
|
||||||
|
return await this.dictionaryService.create(dados);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Delete(':id')
|
||||||
|
async delete(@Param('id') id: number) {
|
||||||
|
return await this.dictionaryService.delete(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
import { User } from '../../domain/entity/tables/estusuario.enity';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
import { DictionaryController } from './dictionary.controller';
|
||||||
|
import { CacheModule, Module } from "@nestjs/common";
|
||||||
|
import { DictionaryService } from './dictionary.service';
|
||||||
|
import { EstAbreviatura } from 'src/domain/entity/tables/estabreviatura.entity';
|
||||||
|
import { PassportModule } from '@nestjs/passport';
|
||||||
|
import { JwtModule } from '@nestjs/jwt';
|
||||||
|
|
||||||
|
import { JwtStrategy } from '../../Auth/strategies/jwt-strategy';
|
||||||
|
import { AuthService } from '../../Auth/services/auth.service';
|
||||||
|
import { UserController } from 'src/Auth/controllers/user.controller';
|
||||||
|
import { UserService } from 'src/Auth/services/user.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [CacheModule.register(),
|
||||||
|
PassportModule.register({
|
||||||
|
defaultStrategy: 'jwt'
|
||||||
|
}),
|
||||||
|
JwtModule.register({
|
||||||
|
secretOrPrivateKey: '4557C0D7-DFB0-40DA-BF83-91A75103F7A9',
|
||||||
|
signOptions: {
|
||||||
|
expiresIn: 3600,
|
||||||
|
}
|
||||||
|
}),TypeOrmModule.forFeature([EstAbreviatura, User])],
|
||||||
|
controllers: [UserController, DictionaryController],
|
||||||
|
providers: [DictionaryService, UserService, AuthService, JwtStrategy],
|
||||||
|
})
|
||||||
|
|
||||||
|
export class DictionaryModule {}
|
||||||
|
|
@ -0,0 +1,84 @@
|
||||||
|
import { ResultModel } from '../../domain/models/result.model';
|
||||||
|
import { DictionaryModel } from '../../domain/models/dictionary.model';
|
||||||
|
import { EstAbreviatura } from 'src/domain/entity/tables/estabreviatura.entity';
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { Repository, getConnection } from 'typeorm';
|
||||||
|
import { NumberUtils } from 'src/utils/number.utils';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class DictionaryService {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
@InjectRepository(EstAbreviatura)
|
||||||
|
private dictionaryRepository: Repository<EstAbreviatura>
|
||||||
|
) { }
|
||||||
|
|
||||||
|
async findAll(): Promise<EstAbreviatura[]> {
|
||||||
|
return await this.dictionaryRepository.find();
|
||||||
|
}
|
||||||
|
|
||||||
|
async findByDescription(description: string): Promise<EstAbreviatura[]> {
|
||||||
|
return await this.dictionaryRepository
|
||||||
|
.createQueryBuilder("estabreviatura")
|
||||||
|
.where("PALAVRA LIKE UPPER(:description)||'%'", { description }
|
||||||
|
).getMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
async find(id: number): Promise<EstAbreviatura> {
|
||||||
|
return await this.dictionaryRepository.createQueryBuilder("estabreviatura").where(
|
||||||
|
"ID = :id", { id: id }
|
||||||
|
).getOne();
|
||||||
|
}
|
||||||
|
|
||||||
|
async update(id: number, dados: DictionaryModel) {
|
||||||
|
|
||||||
|
return await this.dictionaryRepository
|
||||||
|
.createQueryBuilder()
|
||||||
|
.update(EstAbreviatura)
|
||||||
|
.set({ abreviatura: dados.nick, palavra: dados.word })
|
||||||
|
.where("ID = :id", { id })
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async delete(id: number) {
|
||||||
|
|
||||||
|
return await getConnection()
|
||||||
|
.createQueryBuilder()
|
||||||
|
.delete()
|
||||||
|
.from(EstAbreviatura)
|
||||||
|
.where("ID = :id", { id })
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async create(dados: DictionaryModel) {
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
const id = NumberUtils.getNewId(9999, 1);
|
||||||
|
const newDictionary = new EstAbreviatura();
|
||||||
|
|
||||||
|
newDictionary.id = id;
|
||||||
|
newDictionary.abreviatura = dados.nick;
|
||||||
|
newDictionary.palavra = dados.word;
|
||||||
|
|
||||||
|
await getConnection()
|
||||||
|
.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into(EstAbreviatura)
|
||||||
|
.values(newDictionary)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
return newDictionary;
|
||||||
|
|
||||||
|
} catch ( erro ) {
|
||||||
|
return new ResultModel(true, "Ops! Houve um erro ao criar o Dicionário.", null, erro);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,97 @@
|
||||||
|
import { Controller, Get, Param } from '@nestjs/common';
|
||||||
|
import { ListsService } from './lists.service';
|
||||||
|
import { ApiParam, ApiTags } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@ApiTags('BackOffice')
|
||||||
|
@Controller('api/v1/lists')
|
||||||
|
export class ListsController {
|
||||||
|
|
||||||
|
constructor(private readonly listsServices: ListsService) { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consulta todas filiais cadastradas
|
||||||
|
*/
|
||||||
|
@Get('store')
|
||||||
|
async getAll() {
|
||||||
|
return this.listsServices.GetStoreAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consulta filiais autorizadas para o usuário
|
||||||
|
*/
|
||||||
|
@Get('store/user/:id')
|
||||||
|
async getByUser(@Param('id') id: number) {
|
||||||
|
return this.listsServices.GetStoreByUser(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consulta tabela de checkouts da filial informada
|
||||||
|
*/
|
||||||
|
@Get('checkout/:store')
|
||||||
|
@ApiParam({name: 'Código da filial',})
|
||||||
|
async getCheckout(@Param('store') idStore: string) {
|
||||||
|
return this.listsServices.GetCheckout(idStore);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consulta lista de funcionários para a filial informada nos parâmetros
|
||||||
|
*/
|
||||||
|
@Get('user/:store')
|
||||||
|
async getUser(@Param('store') idStore: string) {
|
||||||
|
return this.listsServices.GetUser(idStore);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consulta tabela de plano de pagamento para pedido de venda
|
||||||
|
*/
|
||||||
|
@Get('paymentplan/:billindid')
|
||||||
|
async getPaymentPlan(@Param('billindid') billingId: string) {
|
||||||
|
return this.listsServices.GetPaymentPlan(billingId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consulta tabela de cobrança para pedido de venda
|
||||||
|
*/
|
||||||
|
@Get('billing/:customerid')
|
||||||
|
async getBillingByCustomer(@Param('customerid') customerId: number) {
|
||||||
|
return this.listsServices.GetBilling(customerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consulta cadastro de parceiros
|
||||||
|
*/
|
||||||
|
@Get('partners')
|
||||||
|
async getPartners() {
|
||||||
|
return this.listsServices.GetPartners();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consulta praças para o cadastro de cliente / endereços
|
||||||
|
*/
|
||||||
|
@Get('places')
|
||||||
|
async getPlaces() {
|
||||||
|
return this.listsServices.GetPlaces();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consulta praças para o cadastro de cliente / endereços para retira em loja (CODPRINCIPAL = 1004)
|
||||||
|
*/
|
||||||
|
@Get('store-places')
|
||||||
|
async getStorePlaces() {
|
||||||
|
return this.listsServices.GetStorePlaces();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consulta ramos de atividade do cliente
|
||||||
|
*/
|
||||||
|
@Get('ramo')
|
||||||
|
async getRamo() {
|
||||||
|
return this.listsServices.GetRamo();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('supervisores')
|
||||||
|
async getSupervisores() {
|
||||||
|
return this.listsServices.getSupervisores();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
import { ListsService } from './lists.service';
|
||||||
|
import { ListsController } from './lists.controller';
|
||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [],
|
||||||
|
controllers: [
|
||||||
|
ListsController,],
|
||||||
|
providers: [
|
||||||
|
ListsService,],
|
||||||
|
})
|
||||||
|
export class ListsModule { }
|
||||||
|
|
@ -0,0 +1,302 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { Checkout } from 'src/domain/entity/tables/pccaixa.entity';
|
||||||
|
import { Connection } from 'typeorm';
|
||||||
|
import { Store } from '../../domain/entity/tables/pcfilial.entity';
|
||||||
|
import { Pcempr } from '../../domain/entity/tables/pcempr.entity';
|
||||||
|
import { connectionOptions } from 'src/configs/typeorm.config';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class ListsService {
|
||||||
|
|
||||||
|
async GetStoreAll(): Promise<Store[]> {
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const sql = `SELECT PCFILIAL.CODIGO as "id", ` +
|
||||||
|
` PCFILIAL.RAZAOSOCIAL as "name", ` +
|
||||||
|
` PCFILIAL.CODIGO|| ' - '|| PCFILIAL.FANTASIA as "shortName" ` +
|
||||||
|
` FROM PCFILIAL ` +
|
||||||
|
` WHERE PCFILIAL.CODIGO <> '99' ` +
|
||||||
|
` ORDER BY PCFILIAL.CODIGO `;
|
||||||
|
const stores = await queryRunner.query(sql);
|
||||||
|
return stores as Store[];
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetStoreByUser(idUser: number): Promise<Store[]> {
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
const sql = `SELECT PCFILIAL.CODIGO as "id", ` +
|
||||||
|
` PCFILIAL.RAZAOSOCIAL as "name", ` +
|
||||||
|
` PCFILIAL.CODIGO|| ' - '|| PCFILIAL.FANTASIA as "shortName" ` +
|
||||||
|
` FROM PCFILIAL `;
|
||||||
|
const whereByUser = " WHERE PCFILIAL.CODIGO <> '99' AND " +
|
||||||
|
" ((PCFILIAL.CODIGO IN ( SELECT PCLIB.CODIGOA FROM PCLIB WHERE PCLIB.CODTABELA = 1 AND PCLIB.CODFUNC = :iduser )) OR " +
|
||||||
|
" (EXISTS(SELECT PCLIB.CODIGOA FROM PCLIB WHERE PCLIB.CODTABELA = 1 AND PCLIB.CODFUNC = :iduser AND PCLIB.CODIGOA = '99')) ) ";
|
||||||
|
|
||||||
|
const orderBy = ` ORDER BY PCFILIAL.CODIGO`
|
||||||
|
try {
|
||||||
|
const stores = await queryRunner.query(sql + whereByUser + orderBy, [idUser]);
|
||||||
|
return stores as Store[];
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetCheckout(idStore: string): Promise<Checkout[]> {
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const checkouts = await queryRunner.manager
|
||||||
|
.getRepository(Checkout)
|
||||||
|
.createQueryBuilder('pccaixa')
|
||||||
|
.where("\"pccaixa\".CODFILIAL = :idStore", {idStore: idStore})
|
||||||
|
.orderBy("\"pccaixa\".NUMCAIXA")
|
||||||
|
.getMany();
|
||||||
|
return checkouts;
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetUser(idStore: string): Promise<Pcempr[]> {
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const checkouts = await queryRunner.manager
|
||||||
|
.getRepository(Pcempr)
|
||||||
|
.createQueryBuilder('pcempr')
|
||||||
|
.select("\"pcempr\".matricula as \"id\", \"pcempr\".nome as \"name\", \"pcempr\".email as \"email\", \"pcempr\".usuariobd as \"smallName\"")
|
||||||
|
.where("\"pcempr\".CODFILIAL = :idStore", {idStore: idStore})
|
||||||
|
.orderBy("\"pcempr\".NOME")
|
||||||
|
.getRawMany();
|
||||||
|
return checkouts;
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetPaymentPlan(billingId: string){
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const sql = ' SELECT PCPLPAG.CODPLPAG as "codplpag", PCPLPAG.DESCRICAO as "descricao", ' +
|
||||||
|
' NVL(PCPLPAG.NUMDIAS,0) as "numdias" ' +
|
||||||
|
' FROM PCPLPAG ' +
|
||||||
|
' WHERE EXISTS(SELECT PCCOBPLPAG.CODCOB FROM PCCOBPLPAG ' +
|
||||||
|
' WHERE PCCOBPLPAG.CODPLPAG = PCPLPAG.CODPLPAG ' +
|
||||||
|
' AND PCCOBPLPAG.CODCOB = :CODCOB ) '
|
||||||
|
' ORDER BY PCPAG.DESCRICAO ';
|
||||||
|
const paymentPlans = await queryRunner.query(sql, [billingId]);
|
||||||
|
return paymentPlans;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetBilling(clienteId: number){
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const sql = ' SELECT PCCOB.CODCOB as "codcob", PCCOB.CODCOB ||\' - \'||PCCOB.COBRANCA as "cobranca" ' +
|
||||||
|
' FROM PCCOB ' +
|
||||||
|
' WHERE NVL(PCCOB.enviacobrancafv, \'N\') = \'S\' ' +
|
||||||
|
' AND ( ( NOT EXISTS(SELECT PCCOBCLI.CODCOB FROM PCCOBCLI WHERE PCCOBCLI.CODCLI = :CODCLI ) AND ' +
|
||||||
|
' ( PCCOB.NIVELVENDA <= ( SELECT C.NIVELVENDA FROM PCCLIENT, PCCOB C ' +
|
||||||
|
' WHERE PCCLIENT.CODCLI = :CODCLI AND PCCLIENT.CODCOB = C.CODCOB ) ) ) OR ' +
|
||||||
|
' EXISTS(SELECT PCCOBCLI.CODCOB FROM PCCOBCLI WHERE PCCOBCLI.CODCLI = :CODCLI AND PCCOBCLI.CODCOB = PCCOB.CODCOB ) ) ' +
|
||||||
|
' ORDER BY PCCOB.CODCOB';
|
||||||
|
const billings = await queryRunner.query(sql, [clienteId]);
|
||||||
|
return billings;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetPartners(){
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const sql = ' SELECT ESTPARCEIRO.ID as "id" ' +
|
||||||
|
' ,REGEXP_REPLACE(ESTPARCEIRO.CPF, \'[^0-9]\',\'\') || \' - \' ||ESTPARCEIRO.NOME as "name" ' +
|
||||||
|
' FROM ESTPARCEIRO ' +
|
||||||
|
' WHERE 1 = 1 ';
|
||||||
|
const partners = await queryRunner.manager
|
||||||
|
.query(sql);
|
||||||
|
return partners;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetPreCustomer(idCart: string){
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const sql = ' select CPF as "document" '+
|
||||||
|
' ,NOME as "name" ' +
|
||||||
|
' ,TELEFONE as "phone" ' +
|
||||||
|
' ,IDCART as "idCart" ' +
|
||||||
|
' from estvendaprecliente ' +
|
||||||
|
' where IDCART = :idcart ';
|
||||||
|
console.log(idCart);
|
||||||
|
const preCustomer = await queryRunner
|
||||||
|
.query(sql, [idCart]);
|
||||||
|
console.log(JSON.stringify(preCustomer));
|
||||||
|
return preCustomer[0];
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetPlaces(){
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const sql = ' SELECT PCPRACA.CODPRACA as "id" ' +
|
||||||
|
' ,PCPRACA.PRACA as "name" ' +
|
||||||
|
' FROM PCPRACA ' +
|
||||||
|
' WHERE 1 = 1';
|
||||||
|
const places = await queryRunner.manager
|
||||||
|
.query(sql);
|
||||||
|
return places;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetStorePlaces(){
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const sql = ' SELECT PCPRACA.CODPRACA as "id" ' +
|
||||||
|
' ,PCPRACA.PRACA as "name" ' +
|
||||||
|
' FROM PCPRACA ' +
|
||||||
|
' WHERE PCPRACA.CODPRACAPRINCIPAL = 1004';
|
||||||
|
const places = await queryRunner.manager
|
||||||
|
.query(sql);
|
||||||
|
return places;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetRamo(){
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const sql = ' SELECT PCATIVI.CODATIV as "id" ' +
|
||||||
|
' ,PCATIVI.RAMO as "name" ' +
|
||||||
|
' FROM PCATIVI ' +
|
||||||
|
' WHERE 1 = 1 ' +
|
||||||
|
' ORDER BY PCATIVI.RAMO';
|
||||||
|
const ramos = await queryRunner.manager
|
||||||
|
.query(sql);
|
||||||
|
return ramos;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetStates(state: string){
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const sql = ' SELECT PCESTADO.ESTADO as "name" FROM PCESTADO' +
|
||||||
|
' WHERE PCESTADO.UF = :1';
|
||||||
|
const states = await queryRunner.manager
|
||||||
|
.query(sql, [state]);
|
||||||
|
return states[0].name;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getSupervisores(){
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const sql = `SELECT PCSUPERV.CODSUPERVISOR as "supervisorId"
|
||||||
|
,PCSUPERV.NOME as "name"
|
||||||
|
FROM PCSUPERV
|
||||||
|
WHERE PCSUPERV.dtdemissao IS NULL`;
|
||||||
|
const supervisores = await queryRunner.manager
|
||||||
|
.query(sql);
|
||||||
|
return supervisores;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
import { MeasureProductModel } from '../../domain/models/measureproduct.model';
|
||||||
|
import { Controller, Get, Param, Put, Body, Post, Delete, HttpException, HttpStatus, Req } from "@nestjs/common";
|
||||||
|
import { MeasureProductService } from './measureproduct.service';
|
||||||
|
import { ResultModel } from 'src/domain/models/result.model';
|
||||||
|
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@ApiTags('BackOffice')
|
||||||
|
@Controller('v1/measure')
|
||||||
|
export class MeasureProductController {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private measureProductService: MeasureProductService
|
||||||
|
){}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getAll(@Req() req) {
|
||||||
|
try {
|
||||||
|
if (req.query['query'] || req.query['query'] !== '')
|
||||||
|
{
|
||||||
|
const result = await this.measureProductService.findByDescription(req.query['query']);
|
||||||
|
return new ResultModel(true, null, result, []);
|
||||||
|
}
|
||||||
|
const result = await this.measureProductService.findAll();
|
||||||
|
return new ResultModel(true, null, result, []);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de medidas de produto.', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get(':id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async get(@Param('id') id) {
|
||||||
|
try {
|
||||||
|
const result =await this.measureProductService.find(id);
|
||||||
|
return new ResultModel(true, null, result, []);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de medidas de produto.', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Put(':id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async put(@Param('id') id: number, @Body() body: MeasureProductModel) {
|
||||||
|
return await this.measureProductService.update(id, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post()
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async post(@Body() body: MeasureProductModel) {
|
||||||
|
return await this.measureProductService.create(body);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Delete(':id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async delete(@Param('id') id: number) {
|
||||||
|
return await this.measureProductService.delete(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
import { Module } from "@nestjs/common";
|
||||||
|
|
||||||
|
import { PassportModule } from '@nestjs/passport';
|
||||||
|
import { JwtModule } from '@nestjs/jwt';
|
||||||
|
|
||||||
|
import { MeasureProductController } from './measureproduct.controller';
|
||||||
|
import { MeasureProductService } from './measureproduct.service';
|
||||||
|
import { Estmedidaproduto } from 'src/domain/entity/tables/estmedidaproduto.entity';
|
||||||
|
import { AuthService } from 'src/Auth/services/auth.service';
|
||||||
|
import { JwtStrategy } from 'src/Auth/strategies/jwt-strategy';
|
||||||
|
import { UserService } from 'src/Auth/services/user.service';
|
||||||
|
import { User } from 'src/domain/entity/tables/estusuario.enity';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [PassportModule.register({
|
||||||
|
defaultStrategy: 'jwt'
|
||||||
|
}),
|
||||||
|
JwtModule.register({
|
||||||
|
secretOrPrivateKey: '4557C0D7-DFB0-40DA-BF83-91A75103F7A9',
|
||||||
|
signOptions: {
|
||||||
|
expiresIn: 3600,
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
TypeOrmModule.forFeature([Estmedidaproduto, User])],
|
||||||
|
controllers: [MeasureProductController],
|
||||||
|
providers: [MeasureProductService, UserService, AuthService, JwtStrategy],
|
||||||
|
})
|
||||||
|
|
||||||
|
export class MeasureProductModule {}
|
||||||
|
|
@ -0,0 +1,85 @@
|
||||||
|
import { NumberUtils } from '../../utils/number.utils';
|
||||||
|
import { MeasureProductModel } from '../../domain/models/measureproduct.model';
|
||||||
|
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { Estmedidaproduto } from 'src/domain/entity/tables/estmedidaproduto.entity';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class MeasureProductService {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
@InjectRepository(Estmedidaproduto)
|
||||||
|
private measureProductRepository: Repository<Estmedidaproduto>
|
||||||
|
) { }
|
||||||
|
|
||||||
|
async findAll(): Promise<Estmedidaproduto[]> {
|
||||||
|
return await this.measureProductRepository.find();
|
||||||
|
}
|
||||||
|
|
||||||
|
async findByDescription(description: string): Promise<Estmedidaproduto[]> {
|
||||||
|
return await this.measureProductRepository.createQueryBuilder("ESTMEDIDAPRODUTO").where(
|
||||||
|
"DESCRICAO LIKE :description||'%'", { description }
|
||||||
|
).getMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
async find(id: number): Promise<Estmedidaproduto> {
|
||||||
|
return await this.measureProductRepository.createQueryBuilder("ESTMEDIDAPRODUTO").where(
|
||||||
|
"IDMEDIDAPRODUTO = :IDMEDIDAPRODUTO", { IDMEDIDAPRODUTO: id }
|
||||||
|
).getOne();
|
||||||
|
}
|
||||||
|
|
||||||
|
async update(id: number, dados: MeasureProductModel): Promise<boolean> {
|
||||||
|
await this.measureProductRepository
|
||||||
|
.createQueryBuilder()
|
||||||
|
.update('Estmedidaproduto')
|
||||||
|
.set({ descricao: dados.descricao, abreviatura: dados.abreviatura, quantidade: dados.quantidade, nivel: dados.nivel })
|
||||||
|
.where("IDMEDIDAPRODUTO = :IDMEDIDAPRODUTO", { IDMEDIDAPRODUTO: id })
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
return Promise.resolve(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async delete(id: number): Promise<boolean> {
|
||||||
|
|
||||||
|
await this.measureProductRepository
|
||||||
|
.createQueryBuilder()
|
||||||
|
.delete()
|
||||||
|
.from('Estmedidaproduto')
|
||||||
|
.where("IDMEDIDAPRODUTO = :IDMEDIDAPRODUTO", { IDMEDIDAPRODUTO: id })
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
return Promise.resolve(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async create(dados: MeasureProductModel) {
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
const id = NumberUtils.getNewId(999999, 1);
|
||||||
|
const newEstmedidaproduto = new Estmedidaproduto();
|
||||||
|
newEstmedidaproduto.idmedidaproduto = id;
|
||||||
|
newEstmedidaproduto.abreviatura = dados.abreviatura;
|
||||||
|
newEstmedidaproduto.descricao = dados.descricao;
|
||||||
|
newEstmedidaproduto.nivel = dados.nivel;
|
||||||
|
newEstmedidaproduto.quantidade = dados.quantidade;
|
||||||
|
await this.measureProductRepository
|
||||||
|
.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into('Estmedidaproduto')
|
||||||
|
.values(newEstmedidaproduto)
|
||||||
|
.execute();
|
||||||
|
return Promise.resolve(true);
|
||||||
|
} catch( error ) {
|
||||||
|
console.log(error);
|
||||||
|
return Promise.resolve(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
/*
|
||||||
|
https://docs.nestjs.com/modules
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { HttpModule, Module } from '@nestjs/common';
|
||||||
|
import { WhatsappController } from './whatsapp/whatsapp.controller';
|
||||||
|
import { WhatsappService } from './whatsapp/whatsapp.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [HttpModule],
|
||||||
|
controllers: [WhatsappController],
|
||||||
|
providers: [WhatsappService,
|
||||||
|
],
|
||||||
|
})
|
||||||
|
export class MessagesModule {}
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
https://docs.nestjs.com/controllers#controllers
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Body, Controller, HttpException, HttpStatus, Post } from '@nestjs/common';
|
||||||
|
import { IndexActions } from 'src/domain/models/index-action.model';
|
||||||
|
import { ResultModel } from 'src/domain/models/result.model';
|
||||||
|
import { MessageWhatsApp } from '../../../domain/models/message-whatsapp.model';
|
||||||
|
import { WhatsappService } from './whatsapp.service';
|
||||||
|
import { ApiExcludeEndpoint } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@Controller('api/v1/message/whatsapp')
|
||||||
|
export class WhatsappController {
|
||||||
|
|
||||||
|
constructor(private readonly whatsappService: WhatsappService){}
|
||||||
|
|
||||||
|
@Post('send')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async sendMessage(@Body() message: MessageWhatsApp){
|
||||||
|
try{
|
||||||
|
const result = await this.whatsappService.sendMessage(message);
|
||||||
|
console.log(result);
|
||||||
|
return result;
|
||||||
|
} catch(err){
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível enviar mensagem para o clientes.', {}, err),
|
||||||
|
HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('action')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async createActionIndex(@Body() action: IndexActions){
|
||||||
|
try{
|
||||||
|
const result = await this.whatsappService.createActionIndex(action);
|
||||||
|
console.log(result);
|
||||||
|
return result;
|
||||||
|
} catch(err){
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível criar pesquisa no INDEX para este cliente.', {}, err),
|
||||||
|
HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
import { HttpException, HttpService, HttpStatus, Injectable } from '@nestjs/common';
|
||||||
|
import { IndexActions, } from 'src/domain/models/index-action.model';
|
||||||
|
import { MessageWhatsApp } from '../../../domain/models/message-whatsapp.model';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class WhatsappService {
|
||||||
|
|
||||||
|
constructor(private readonly httpService: HttpService) {}
|
||||||
|
|
||||||
|
async sendMessage(message: MessageWhatsApp ) {
|
||||||
|
|
||||||
|
// var fs = require('fs');
|
||||||
|
//'Key ' + 'emFwanVydTppY0NtdXlFc3NvYmpqTkVLSFEwbw=='
|
||||||
|
|
||||||
|
const url = `https://takebroadcast.cs.blip.ai/api/v1/Notification`;
|
||||||
|
try {
|
||||||
|
const response = await this.httpService
|
||||||
|
.post(url,
|
||||||
|
JSON.stringify(message),
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
'accept': 'application/json',
|
||||||
|
'content-type': 'application/json',
|
||||||
|
'accesskey': 'aWNDbXV5RXNzb2Jqak5FS0hRMG8=',
|
||||||
|
'identifier': 'zapjuru'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.toPromise();
|
||||||
|
return response.data;
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
throw new HttpException(e.message, HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async createActionIndex(action: IndexActions) {
|
||||||
|
const url = `https://indecx.com/v2/actions/185E2H/invites`;
|
||||||
|
try {
|
||||||
|
const response = await this.httpService
|
||||||
|
.post(url,
|
||||||
|
JSON.stringify(action),
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
'accept': 'application/json',
|
||||||
|
'content-type': 'application/json',
|
||||||
|
'company-key': '$2b$10$rlMclOiWPwGgKavwPDFvCOYlDWujMi.h7BGizTxHPVjkn62VCgreO',
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.toPromise();
|
||||||
|
return response.data;
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
throw new HttpException(e.message, HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
import { NcmService } from './ncm.service';
|
||||||
|
import { Controller, Get, HttpException, HttpStatus, Param, Req } from '@nestjs/common';
|
||||||
|
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
|
||||||
|
import { ResultModel } from 'src/domain/models/result.model';
|
||||||
|
|
||||||
|
@ApiTags('BackOffice')
|
||||||
|
@Controller('v1/ncm')
|
||||||
|
export class NcmController {
|
||||||
|
|
||||||
|
constructor(private readonly ncmService: NcmService ){}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getAll(@Req() req) {
|
||||||
|
try {
|
||||||
|
if (req.query['query'])
|
||||||
|
{
|
||||||
|
const result = await this.ncmService.findByDescription(req.query['query']);
|
||||||
|
return new ResultModel(true, null, result, []);
|
||||||
|
}
|
||||||
|
return new ResultModel(false, 'Para pesquisar os NCMs é necessário informar pelo menos 3 caracteres.', null, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de dicionários', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Get()
|
||||||
|
async findAll() {
|
||||||
|
try {
|
||||||
|
const ncms = await this.ncmService.findAll();
|
||||||
|
return new ResultModel(true, null, ncms, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de NCMs', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
@Get(":ncm")
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async findByNcm(@Param("ncm") ncm: string, @Req() req) {
|
||||||
|
console.log(req.query);
|
||||||
|
try {
|
||||||
|
const result = await this.ncmService.find(ncm);
|
||||||
|
return new ResultModel(true, null, result, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de NCMs', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Pcncm } from '../../domain/entity/tables/pcncm.entity';
|
||||||
|
import { NcmController } from './ncm.controller';
|
||||||
|
import { NcmService } from './ncm.service';
|
||||||
|
import { CacheModule, Module } from '@nestjs/common';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [CacheModule.register(),
|
||||||
|
TypeOrmModule.forFeature([Pcncm])],
|
||||||
|
controllers: [
|
||||||
|
NcmController,],
|
||||||
|
providers: [
|
||||||
|
NcmService,],
|
||||||
|
})
|
||||||
|
export class NcmModule { }
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
import { Pcncm } from '../../domain/entity/tables/pcncm.entity';
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class NcmService {
|
||||||
|
constructor(@InjectRepository(Pcncm)
|
||||||
|
private ncmRepository: Repository<Pcncm>){}
|
||||||
|
|
||||||
|
async findAll(): Promise<Pcncm[]> {
|
||||||
|
return await this.ncmRepository
|
||||||
|
.createQueryBuilder('pcncm')
|
||||||
|
.select('"pcncm".codncmex', 'codigoNcmEx')
|
||||||
|
.addSelect('concat(concat("pcncm".codncmex, \' - \'),SUBSTR("pcncm".descricao,1,100))', 'descricaoNcm')
|
||||||
|
.where('dtexclusao is null')
|
||||||
|
.getRawMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
async findByDescription(description: string): Promise<Pcncm[]> {
|
||||||
|
|
||||||
|
return await this.ncmRepository
|
||||||
|
.createQueryBuilder('pcncm')
|
||||||
|
.select('"pcncm".codncmex', 'codigoNcmEx')
|
||||||
|
.addSelect('concat(concat("pcncm".codncmex, \' - \'),SUBSTR("pcncm".descricao,1,100))', 'descricaoNcm')
|
||||||
|
.where('dtexclusao is null')
|
||||||
|
.andWhere("descricao like UPPER(:description)||'%'", {description})
|
||||||
|
.getRawMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
async find(ncm: string): Promise<Pcncm[]> {
|
||||||
|
return await this.ncmRepository
|
||||||
|
.createQueryBuilder('pcncm')
|
||||||
|
.where("dtexclusao is null and codncm like :ncm||'%'", { ncm })
|
||||||
|
.getRawMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
import { ProductTypeModel } from './../../domain/models/product-type.model';
|
||||||
|
import { Body, Delete, Param, Post } from '@nestjs/common';
|
||||||
|
import { ResultModel } from './../../domain/models/result.model';
|
||||||
|
import { ProductTypeService } from './product-type.service';
|
||||||
|
import { CacheInterceptor, Controller, Get, HttpException, HttpStatus, Put, Req, UseInterceptors } from '@nestjs/common';
|
||||||
|
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@ApiTags('BackOffice')
|
||||||
|
@Controller('v1/product-type')
|
||||||
|
export class ProductTypeController {
|
||||||
|
|
||||||
|
constructor( private readonly productTypeService: ProductTypeService){}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
@UseInterceptors(CacheInterceptor)
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getAll(@Req() req) {
|
||||||
|
try {
|
||||||
|
if (req.query['query'])
|
||||||
|
{
|
||||||
|
const result = await this.productTypeService.findByType(req.query['query']);
|
||||||
|
return new ResultModel(true, null, result, []);
|
||||||
|
}
|
||||||
|
const typeProducts = await this.productTypeService.findAll();
|
||||||
|
return new ResultModel(true, null, typeProducts, []);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de tipos de produto.', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get(':id')
|
||||||
|
@UseInterceptors(CacheInterceptor)
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getOne(@Param('id') id: number ) {
|
||||||
|
try {
|
||||||
|
const data = await this.productTypeService.findById(id);
|
||||||
|
console.log(data);
|
||||||
|
return new ResultModel(true, null, data, []);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar tipo de produto.', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Put(':id')
|
||||||
|
async update(@Param('id') id: number, @Body() dados: ProductTypeModel) {
|
||||||
|
try {
|
||||||
|
await this.productTypeService.update(id, dados);
|
||||||
|
return new ResultModel(true, null, dados, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível atualizar tipo do produto.', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post()
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
//TODO: @UseInterceptors(new ValidadorInterceptor(new CreateDictionaryContract()))
|
||||||
|
async post(@Body() dados: ProductTypeModel) {
|
||||||
|
try {
|
||||||
|
const newProductType = await await this.productTypeService.create(dados);
|
||||||
|
return new ResultModel(true, null, newProductType, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível incluir tipo do produto.', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Delete(':id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async delete(@Param('id') id: number) {
|
||||||
|
try {
|
||||||
|
const result = await this.productTypeService.delete(id);
|
||||||
|
return new ResultModel(true, 'Tipo do produto excluído com sucesso!', null, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível excluir tipo do produto.', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Esttipoproduto } from '../../domain/entity/tables/esttipoproduto.entity';
|
||||||
|
import { ProductTypeController } from './product-type.controller';
|
||||||
|
import { ProductTypeService } from './product-type.service';
|
||||||
|
import { CacheModule, Module } from '@nestjs/common';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [CacheModule.register(),
|
||||||
|
TypeOrmModule.forFeature([Esttipoproduto])],
|
||||||
|
controllers: [
|
||||||
|
ProductTypeController,],
|
||||||
|
providers: [
|
||||||
|
ProductTypeService,],
|
||||||
|
})
|
||||||
|
export class ProductTypeModule { }
|
||||||
|
|
@ -0,0 +1,165 @@
|
||||||
|
import { ProductTypeModel } from './../../domain/models/product-type.model';
|
||||||
|
import { Esttipoproduto } from '../../domain/entity/tables/esttipoproduto.entity';
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { getConnection, Repository } from 'typeorm';
|
||||||
|
import { NumberUtils } from 'src/utils/number.utils';
|
||||||
|
import { ResultModel } from 'src/domain/models/result.model';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class ProductTypeService {
|
||||||
|
constructor(
|
||||||
|
@InjectRepository(Esttipoproduto)
|
||||||
|
private productTypeRepository: Repository<Esttipoproduto>
|
||||||
|
) { }
|
||||||
|
|
||||||
|
async findAll(): Promise<Esttipoproduto[]> {
|
||||||
|
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
|
||||||
|
return await queryRunner.manager
|
||||||
|
.getRepository(Esttipoproduto)
|
||||||
|
.createQueryBuilder('esttipoproduto')
|
||||||
|
.select(['"esttipoproduto".idtipoproduto as "id"'
|
||||||
|
, '"esttipoproduto".tipoproduto as "tipoProduto"'
|
||||||
|
, '"esttipoproduto".siglaproduto as "siglaProduto"'
|
||||||
|
, '"esttipoproduto".ncm as "ncm"'
|
||||||
|
, '"esttipoproduto".codepto as "codigoDepartamento"'
|
||||||
|
, '"esttipoproduto".codsec as "codigoSecao"'
|
||||||
|
, '"esttipoproduto".codcategoria as "codigoCategoria"'
|
||||||
|
, '"esttipoproduto".cest as "codigoCest"'
|
||||||
|
, 'concat(concat("departamento".codepto, \'-\'),"departamento".descricao) as "departamentoDescricao"'
|
||||||
|
, 'concat(concat("secao".codsec, \'-\'),"secao".descricao) as "secaoDescricao"'
|
||||||
|
, 'concat(concat("categoria".codcategoria, \'-\'),"categoria".categoria) as "categoriaDescricao"'
|
||||||
|
, '"registrocest".descricaocest as "cestDescricao"'])
|
||||||
|
.innerJoin("esttipoproduto.departamento", "departamento")
|
||||||
|
.innerJoin("esttipoproduto.secao", "secao")
|
||||||
|
.innerJoin("esttipoproduto.categoria", "categoria", '"esttipoproduto".codsec = "categoria".codsec')
|
||||||
|
.innerJoin("esttipoproduto.registrocest", "registrocest")
|
||||||
|
.getRawMany();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async findByType(description: string): Promise<Esttipoproduto[]> {
|
||||||
|
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
|
||||||
|
const descriptionType = description + '%';
|
||||||
|
|
||||||
|
return await queryRunner.manager
|
||||||
|
.getRepository(Esttipoproduto)
|
||||||
|
.createQueryBuilder('esttipoproduto')
|
||||||
|
.select(['"esttipoproduto".idtipoproduto as "id"'
|
||||||
|
, '"esttipoproduto".tipoproduto as "tipoProduto"'
|
||||||
|
, '"esttipoproduto".siglaproduto as "siglaProduto"'
|
||||||
|
, '"esttipoproduto".ncm as "ncm"'
|
||||||
|
, '"esttipoproduto".codepto as "codigoDepartamento"'
|
||||||
|
, '"esttipoproduto".codsec as "codigoSecao"'
|
||||||
|
, '"esttipoproduto".codcategoria as "codigoCategoria"'
|
||||||
|
, '"esttipoproduto".cest as "codigoCest"'
|
||||||
|
, 'concat(concat("departamento".codepto, \'-\'),"departamento".descricao) as "departamentoDescricao"'
|
||||||
|
, 'concat(concat("secao".codsec, \'-\'),"secao".descricao) as "secaoDescricao"'
|
||||||
|
, 'concat(concat("categoria".codcategoria, \'-\'),"categoria".categoria) as "categoriaDescricao"'
|
||||||
|
, '"registrocest".descricaocest as "cestDescricao"'])
|
||||||
|
.innerJoin("esttipoproduto.departamento", "departamento")
|
||||||
|
.innerJoin("esttipoproduto.secao", "secao")
|
||||||
|
.innerJoin("esttipoproduto.categoria", "categoria", '"esttipoproduto".codsec = "categoria".codsec')
|
||||||
|
.innerJoin("esttipoproduto.registrocest", "registrocest")
|
||||||
|
.where('"esttipoproduto".tipoproduto like :type', { type: descriptionType })
|
||||||
|
.getRawMany();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async findById(id: number): Promise<Esttipoproduto> {
|
||||||
|
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
try{
|
||||||
|
return await queryRunner.manager
|
||||||
|
.getRepository(Esttipoproduto)
|
||||||
|
.createQueryBuilder('esttipoproduto')
|
||||||
|
.select(['"esttipoproduto".idtipoproduto as "id"'
|
||||||
|
, '"esttipoproduto".tipoproduto as "tipoProduto"'
|
||||||
|
, '"esttipoproduto".siglaproduto as "siglaProduto"'
|
||||||
|
, '"esttipoproduto".ncm as "ncm"'
|
||||||
|
, '"esttipoproduto".codepto as "codigoDepartamento"'
|
||||||
|
, '"esttipoproduto".codsec as "codigoSecao"'
|
||||||
|
, '"esttipoproduto".codcategoria as "codigoCategoria"'
|
||||||
|
, '"esttipoproduto".cest as "codigoCest"'
|
||||||
|
, 'concat(concat("departamento".codepto, \'-\'),"departamento".descricao) as "departamentoDescricao"'
|
||||||
|
, 'concat(concat("secao".codsec, \'-\'),"secao".descricao) as "secaoDescricao"'
|
||||||
|
, 'concat(concat("categoria".codcategoria, \'-\'),"categoria".categoria) as "categoriaDescricao"'
|
||||||
|
, 'concat(concat(\"registrocest\".codcest, \'-\'), substr(\"registrocest\".descricaocest,1,80)) as "cestDescricao"'
|
||||||
|
, 'concat(concat("registroNcm".codncmex, \' - \'),SUBSTR("registroNcm".descricao,1,100)) as "ncmDescricao"'])
|
||||||
|
.innerJoin("esttipoproduto.departamento", "departamento")
|
||||||
|
.innerJoin("esttipoproduto.secao", "secao")
|
||||||
|
.innerJoin("esttipoproduto.categoria", "categoria", '"esttipoproduto".codsec = "categoria".codsec')
|
||||||
|
.innerJoin("esttipoproduto.registrocest", "registrocest")
|
||||||
|
.innerJoin("esttipoproduto.registroNcm", "registroNcm")
|
||||||
|
.where('"esttipoproduto".idtipoproduto = :id', { id })
|
||||||
|
.getRawOne();
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async update(id: number, dados: ProductTypeModel) {
|
||||||
|
|
||||||
|
return await this.productTypeRepository
|
||||||
|
.createQueryBuilder()
|
||||||
|
.update(Esttipoproduto)
|
||||||
|
.set({ tipoProduto: dados.type, ncm: dados.ncm, codigoDepartamento: dados.idDepartment, codigoSecao: dados.idSection,
|
||||||
|
codigoCategoria: dados.idCategory, sigla: dados.sigla, cest: dados.idCest })
|
||||||
|
.where("ID = :id", { id })
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async delete(id: number) {
|
||||||
|
|
||||||
|
return await getConnection()
|
||||||
|
.createQueryBuilder()
|
||||||
|
.delete()
|
||||||
|
.from(Esttipoproduto)
|
||||||
|
.where("ID = :id", { id })
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async create(dados: ProductTypeModel) {
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
const id = NumberUtils.getNewId(9999, 1);
|
||||||
|
const newProductType = new Esttipoproduto();
|
||||||
|
|
||||||
|
newProductType.idTipoProduto = id;
|
||||||
|
newProductType.tipoProduto = dados.type;
|
||||||
|
newProductType.ncm = dados.ncm;
|
||||||
|
newProductType.sigla = dados.sigla;
|
||||||
|
newProductType.codigoDepartamento = dados.idDepartment;
|
||||||
|
newProductType.codigoSecao = dados.idSection;
|
||||||
|
newProductType.codigoCategoria = dados.idCategory;
|
||||||
|
newProductType.cest = dados.idCest;
|
||||||
|
|
||||||
|
await getConnection()
|
||||||
|
.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into(Esttipoproduto)
|
||||||
|
.values(newProductType)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
return newProductType;
|
||||||
|
|
||||||
|
} catch ( erro ) {
|
||||||
|
console.log(erro);
|
||||||
|
return new ResultModel(true, "Ops! Houve um erro ao criar o Dicionário.", null, erro);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
import { Body, Controller, Get, HttpException, HttpStatus, Param, Post } from '@nestjs/common';
|
||||||
|
import { ProductService } from './product.service';
|
||||||
|
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@ApiTags('BackOffice')
|
||||||
|
@Controller('api/v1/product')
|
||||||
|
export class ProductController {
|
||||||
|
|
||||||
|
constructor (private readonly productService: ProductService){}
|
||||||
|
|
||||||
|
@Get(':id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
getProduct(@Param('id') id: number){
|
||||||
|
try {
|
||||||
|
return this.productService.getProduct(id);
|
||||||
|
}
|
||||||
|
catch(error){
|
||||||
|
throw new HttpException(error.message, HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('exposeded')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
createExposedProduct(@Body() data: any){
|
||||||
|
try {
|
||||||
|
return this.productService.createExposededProduct(data);
|
||||||
|
}
|
||||||
|
catch(error){
|
||||||
|
throw new HttpException(error.message, HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { connectionOptions } from 'src/configs/typeorm.config';
|
||||||
|
import { Product } from 'src/domain/entity/tables/pcprodut.entity';
|
||||||
|
import { Connection, getConnection } from 'typeorm';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class ProductService {
|
||||||
|
|
||||||
|
async getProduct(id: number) {
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const product = await queryRunner.manager
|
||||||
|
.getRepository(Product)
|
||||||
|
.createQueryBuilder('pcprodut')
|
||||||
|
.innerJoinAndSelect('pcprodut.brand', 'brand')
|
||||||
|
.where("\"pcprodut\".codprod = :id", { id: id })
|
||||||
|
.getOne();
|
||||||
|
return product;
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async createExposededProduct(data: any) {
|
||||||
|
const connection = new Connection(connectionOptions);
|
||||||
|
await connection.connect();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
await queryRunner.startTransaction();
|
||||||
|
try {
|
||||||
|
const sqlInsert = `INSERT INTO ESTPRODUTOEXPOSICAO ( CODFILIAL, DATA, CODAUXILIAR )
|
||||||
|
VALUES ( '4', TRUNC(SYSDATE), ${data.codigoean})`;
|
||||||
|
await queryRunner.query(sqlInsert);
|
||||||
|
await queryRunner.commitTransaction();
|
||||||
|
} catch (err) {
|
||||||
|
await queryRunner.commitTransaction();
|
||||||
|
console.log(err);
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
await connection.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
import { SectionService } from './section.service';
|
||||||
|
import { CacheInterceptor, Controller, Get, HttpException, HttpStatus, Param, UseInterceptors } from '@nestjs/common';
|
||||||
|
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
|
||||||
|
import { ResultModel } from 'src/domain/models/result.model';
|
||||||
|
|
||||||
|
@ApiTags('BackOffice')
|
||||||
|
@Controller('v1/section')
|
||||||
|
export class SectionController {
|
||||||
|
|
||||||
|
constructor(private readonly sectionService: SectionService){}
|
||||||
|
|
||||||
|
@Get(':idDepartment')
|
||||||
|
@UseInterceptors(CacheInterceptor)
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getAll(@Param('idDepartment') idDepartment: number) {
|
||||||
|
try {
|
||||||
|
const sections = await this.sectionService.find(idDepartment);
|
||||||
|
return new ResultModel(true, null, sections, []);
|
||||||
|
} catch (error) {
|
||||||
|
throw new HttpException(new ResultModel(false, 'Não foi possível consultar lista de seções', {}, error), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { CacheModule, Module } from '@nestjs/common';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
import { Pcsecao } from 'src/domain/entity/tables/pcsecao.entity';
|
||||||
|
import { SectionController } from './section.controller';
|
||||||
|
import { SectionService } from './section.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [ CacheModule.register(),
|
||||||
|
TypeOrmModule.forFeature([Pcsecao])],
|
||||||
|
controllers: [SectionController,],
|
||||||
|
providers: [SectionService,],
|
||||||
|
|
||||||
|
})
|
||||||
|
export class SectionModule { }
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { Pcsecao } from 'src/domain/entity/tables/pcsecao.entity';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class SectionService {
|
||||||
|
constructor( @InjectRepository(Pcsecao)
|
||||||
|
private sectionRepository: Repository<Pcsecao>){}
|
||||||
|
|
||||||
|
async find(idDepartment: number): Promise<Pcsecao[]> {
|
||||||
|
return await this.sectionRepository
|
||||||
|
.createQueryBuilder('pcsecao')
|
||||||
|
.select('"pcsecao".codsec', 'codigoSecao')
|
||||||
|
.addSelect('concat(concat("pcsecao".codsec, \'-\'),"pcsecao".descricao)', 'descricaoSecao')
|
||||||
|
//.addSelect('concat(concat(concat("pcsecao".descricao, \' (\'),"pcsecao".codsec),\')\')', 'descricaoSecao')
|
||||||
|
.where("codepto = :codepto", {codepto: idDepartment})
|
||||||
|
.getRawMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
|
||||||
|
import { ConnectionOptions } from 'typeorm';
|
||||||
|
|
||||||
|
export const typeOrmConfig: TypeOrmModuleOptions = {
|
||||||
|
type: "oracle",
|
||||||
|
// host: "192.168.100.40",
|
||||||
|
// username: "LIVIA",
|
||||||
|
// password: "LIVIA",
|
||||||
|
host: "10.1.1.241",
|
||||||
|
username: "SEVEN",
|
||||||
|
password: "USR54SEV",
|
||||||
|
// username: "API",
|
||||||
|
// password: "E05H5KIEQV3YKDJR",
|
||||||
|
port: 1521,
|
||||||
|
sid: "WINT",
|
||||||
|
synchronize: false,
|
||||||
|
logging: false,
|
||||||
|
entities: [__dirname + '/../**/*.entity.{js,ts}'],
|
||||||
|
autoLoadEntities: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const connectionOptions: ConnectionOptions = {
|
||||||
|
type: "oracle",
|
||||||
|
host: "10.1.1.241",
|
||||||
|
username: "SEVEN",
|
||||||
|
password: "USR54SEV",
|
||||||
|
port: 1521,
|
||||||
|
sid: "WINT",
|
||||||
|
synchronize: false,
|
||||||
|
logging: false,
|
||||||
|
entities: [__dirname + '/../**/*.entity.{js,ts}'],
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
export interface Contract {
|
||||||
|
errors: any[],
|
||||||
|
validade(model: any): boolean,
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { Flunt } from 'src/utils/flunt';
|
||||||
|
import { DictionaryModel } from './../domain/models/dictionary.model';
|
||||||
|
import { Contract } from './contract';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class CreateDictionaryContract implements Contract {
|
||||||
|
|
||||||
|
errors: any[];
|
||||||
|
|
||||||
|
validade(model: DictionaryModel): boolean {
|
||||||
|
const flunt = new Flunt();
|
||||||
|
flunt.isRequired(model.nick, "Informe a abreviatura do dicionário.");
|
||||||
|
flunt.hasMinLen(model.word, 5, "Nome do dicionário deve conter no mínimo 5 caracteres.");
|
||||||
|
this.errors = flunt.errors;
|
||||||
|
return flunt.errors.length == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { ShippingController } from './services/shipping.controller';
|
||||||
|
import { ShippingService } from './services/shipping.service';
|
||||||
|
import { OrdersController } from './orders/orders.controller';
|
||||||
|
import { OrdersService } from './orders/orders.service';
|
||||||
|
import { DeliveryOrderController } from './order/delivery-order.controller';
|
||||||
|
import { DeliveryOrderService } from './order/delivery-order.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [],
|
||||||
|
controllers: [ShippingController, OrdersController,
|
||||||
|
DeliveryOrderController],
|
||||||
|
providers: [ShippingService, OrdersService, DeliveryOrderService],
|
||||||
|
})
|
||||||
|
export class DeliveryModule {}
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
https://docs.nestjs.com/controllers#controllers
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Body, Controller, Get, Param, Post } from '@nestjs/common';
|
||||||
|
import { DeliveryOrderModel } from 'src/domain/models/delivery-order.model';
|
||||||
|
import { ImageOrderModel } from 'src/domain/models/image-order.model';
|
||||||
|
import { PaymentModel } from 'src/domain/models/payment.model';
|
||||||
|
import { DeliveryOrderService } from './delivery-order.service';
|
||||||
|
import { ApiExcludeEndpoint } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@Controller('api/v1/deliveryorder')
|
||||||
|
export class DeliveryOrderController {
|
||||||
|
|
||||||
|
constructor(private readonly deliveryOrderSevive: DeliveryOrderService){}
|
||||||
|
|
||||||
|
@Get('protocolo/:shipmentId/:customerId')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getdeliveryByCustomer(@Param("shipmentId") shipmentId: number, @Param("customerId") customerId: number) {
|
||||||
|
return await this.deliveryOrderSevive.getDataDelivery(shipmentId, customerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('protocolo')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async createOrReplaceDeliveryByCustomer(@Body() data: DeliveryOrderModel) {
|
||||||
|
return await this.deliveryOrderSevive.createOrReplaceDeliveryOrder(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('images/:shipmentId/:orderId')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getImagesOrder(@Param("shipmentId") shipmentId: number, @Param("orderId") orderId: number) {
|
||||||
|
return await this.deliveryOrderSevive.getImageOrder(shipmentId, orderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('image')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async crateImageOrder(@Body() data: ImageOrderModel) {
|
||||||
|
return await this.deliveryOrderSevive.createImageOrder(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
@Post('payment')
|
||||||
|
async createPayment(@Body() data: PaymentModel) {
|
||||||
|
return await this.deliveryOrderSevive.createPayment(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,227 @@
|
||||||
|
/*
|
||||||
|
https://docs.nestjs.com/providers#services
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { Estprotocoloentrega } from 'src/domain/entity/tables/estprotocolo.entity';
|
||||||
|
import { DeliveryOrderModel } from 'src/domain/models/delivery-order.model';
|
||||||
|
import { ImageOrderModel } from 'src/domain/models/image-order.model';
|
||||||
|
import { PaymentModel } from 'src/domain/models/payment.model';
|
||||||
|
import { ResultModel } from 'src/domain/models/result.model';
|
||||||
|
import { getConnection } from 'typeorm';
|
||||||
|
import { Estimagemnota } from '../../domain/entity/tables/estimagemnota.entity';
|
||||||
|
import { Estpagamento } from '../../domain/entity/tables/estpagamento.entity';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class DeliveryOrderService {
|
||||||
|
|
||||||
|
async getDataDelivery(shipmentId: number, customerId: number): Promise<any> {
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const result = await queryRunner.manager
|
||||||
|
.getRepository(Estprotocoloentrega)
|
||||||
|
.createQueryBuilder('estprotocoloentrega')
|
||||||
|
.where('numcar = :numcar and codcli = :codcli', { numcar: shipmentId, codcli: customerId})
|
||||||
|
.getOne();
|
||||||
|
|
||||||
|
return result; //new ResultModel(true, 'Registro localizado com sucesso!', result, {});
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
return new ResultModel(false,
|
||||||
|
'Erro ao atualizar dados de entrega.',
|
||||||
|
null,
|
||||||
|
error);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async createOrReplaceDeliveryOrder(data: DeliveryOrderModel): Promise<any> {
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
await queryRunner.startTransaction();
|
||||||
|
console.log(data);
|
||||||
|
try {
|
||||||
|
const updateDelivery = await queryRunner.manager
|
||||||
|
.getRepository(Estprotocoloentrega)
|
||||||
|
.createQueryBuilder('estprotocoloentrega')
|
||||||
|
.where('numcar = :numcar and codcli = :codcli',
|
||||||
|
{ numcar: data.numeroCarregamento, codcli: data.codigoCliente})
|
||||||
|
.getOne();
|
||||||
|
if ( updateDelivery ) {
|
||||||
|
await queryRunner.manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.update(Estprotocoloentrega)
|
||||||
|
.set({
|
||||||
|
dataEntrega: data.dataEntrega,
|
||||||
|
cpfRecebedor: data.cpfRecebedor,
|
||||||
|
nomeRecebedor: data.nomeRecebedor,
|
||||||
|
urlImagemProtocolo: data.urlImagemProtocolo,
|
||||||
|
latitude: data.latitude,
|
||||||
|
longitude: data.longitude,
|
||||||
|
})
|
||||||
|
.where('numcar = :numcar and codcli = :codcli', { numcar: data.numeroCarregamento, codcli: data.codigoCliente})
|
||||||
|
.execute()
|
||||||
|
} else {
|
||||||
|
await queryRunner.manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into(Estprotocoloentrega)
|
||||||
|
.values(data)
|
||||||
|
.execute()
|
||||||
|
}
|
||||||
|
|
||||||
|
await queryRunner.commitTransaction();
|
||||||
|
return new ResultModel(true, 'Registro atualizado com sucesso!', data, {});
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
await queryRunner.rollbackTransaction();
|
||||||
|
console.log(error);
|
||||||
|
return new ResultModel(false,
|
||||||
|
'Erro ao atualizar dados de entrega.',
|
||||||
|
null,
|
||||||
|
error);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async getImageOrder(shipmentId: number, orderId: number): Promise<any> {
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const result = await queryRunner.manager
|
||||||
|
.getRepository(Estimagemnota)
|
||||||
|
.createQueryBuilder('estimagemnota')
|
||||||
|
.select(["numnota as \"numeroNota\"", "numped as \"numeroPedido\", numcar as \"numeroCarregamento\""])
|
||||||
|
.addSelect(["tipo as \"tipo\", data as \"data\", url as \"url\", latitude as \"latitude\", longitude as \"longitude\" "])
|
||||||
|
.where('numcar = :numcar and numped = :numped ', { numcar: shipmentId, numped: orderId})
|
||||||
|
.getRawMany();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
return new ResultModel(false,
|
||||||
|
'Erro ao atualizar imagens da nota fiscal.',
|
||||||
|
null,
|
||||||
|
error);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async createImageOrder(dataImage: ImageOrderModel): Promise<any> {
|
||||||
|
console.log(dataImage);
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
await queryRunner.startTransaction();
|
||||||
|
try {
|
||||||
|
//const dateDelivery = '2022-04-14T17:52:00';
|
||||||
|
//dataImage.data = dateDelivery;
|
||||||
|
//console.log(dataImage);
|
||||||
|
await queryRunner.manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into(Estimagemnota)
|
||||||
|
.values(dataImage)
|
||||||
|
.execute()
|
||||||
|
|
||||||
|
await queryRunner.commitTransaction();
|
||||||
|
return new ResultModel(true, 'Imagens incluídas com sucesso!', dataImage, {});
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
await queryRunner.rollbackTransaction();
|
||||||
|
console.log(error);
|
||||||
|
return new ResultModel(false,
|
||||||
|
'Erro ao incluir imagens da nota fiscal.',
|
||||||
|
null,
|
||||||
|
error);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async createPayment(payment: PaymentModel): Promise<any> {
|
||||||
|
console.log(payment);
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
await queryRunner.startTransaction();
|
||||||
|
try {
|
||||||
|
let cobranca = 'PAGV';
|
||||||
|
switch (payment.formaPagto){
|
||||||
|
case 'credit_card_parcelado':
|
||||||
|
cobranca = 'PAGP';
|
||||||
|
break;
|
||||||
|
case 'debit_card':
|
||||||
|
cobranca = 'PAGD';
|
||||||
|
break;
|
||||||
|
case 'credit_card':
|
||||||
|
cobranca = 'PAGV';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cobranca = 'DH';
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
await queryRunner.manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into(Estpagamento)
|
||||||
|
.values({
|
||||||
|
orderId: payment.orderId,
|
||||||
|
dataPagamento: payment.dataPagamento,
|
||||||
|
codigoAutorizacao: payment.idTransacao,
|
||||||
|
codigoResposta: '00',
|
||||||
|
dataRequisicao: payment.dataPagamento,
|
||||||
|
dataServidor: payment.dataPagamento,
|
||||||
|
estAcquirer: 'pagseguro',
|
||||||
|
idTransacao: payment.codigoAutorizacao,
|
||||||
|
nsu: payment.nsu,
|
||||||
|
parcelas: payment.parcelas,
|
||||||
|
valor: payment.valor / 100,
|
||||||
|
nomeBandeira: 'pagseguro',
|
||||||
|
formaPagto: payment.formaPagto,
|
||||||
|
codigoFuncionario: null,
|
||||||
|
cobranca: cobranca
|
||||||
|
})
|
||||||
|
.execute()
|
||||||
|
|
||||||
|
await queryRunner.commitTransaction();
|
||||||
|
return new ResultModel(true, 'Pagamento incluído com sucesso!', {}, {});
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
await queryRunner.rollbackTransaction();
|
||||||
|
console.log(error);
|
||||||
|
return new ResultModel(false,
|
||||||
|
'Erro ao pagamento para carrgamento / cliente.',
|
||||||
|
null,
|
||||||
|
error);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { Controller, Get, Param } from '@nestjs/common';
|
||||||
|
import { OrdersService } from './orders.service';
|
||||||
|
import { ApiExcludeEndpoint } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@Controller('api/v1/orders')
|
||||||
|
export class OrdersController {
|
||||||
|
|
||||||
|
constructor(private ordersService: OrdersService){}
|
||||||
|
|
||||||
|
@Get('customer/:id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getdeliveryByCustomer(@Param("id") id: number) {
|
||||||
|
return await this.ordersService.GetOrdersByCustomer(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('payments/:id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getPayments(@Param("id") id: number) {
|
||||||
|
return await this.ordersService.GetPayments(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { Pcpedc } from 'src/domain/entity/tables/pcpedc.entity';
|
||||||
|
import { Pcpedi } from 'src/domain/entity/tables/pcpedi.entity';
|
||||||
|
import { ResultModel } from 'src/domain/models/result.model';
|
||||||
|
import { getConnection } from 'typeorm';
|
||||||
|
import { Estpagamento } from '../../domain/entity/tables/estpagamento.entity';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class OrdersService {
|
||||||
|
|
||||||
|
async GetOrdersByCustomer(id: number): Promise<any> {
|
||||||
|
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
|
||||||
|
await queryRunner.connect();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
const user = { matricula: 154969 }; //await this.GetUser(queryRunner); 2854
|
||||||
|
|
||||||
|
if (user == null) {
|
||||||
|
return new ResultModel(false, 'Não foi possível localizar notas para este usuário',
|
||||||
|
null,
|
||||||
|
'Não foi localizado motorista para este usuário.');
|
||||||
|
}
|
||||||
|
|
||||||
|
const orders = await queryRunner.manager
|
||||||
|
.getRepository(Pcpedc)
|
||||||
|
.createQueryBuilder('pcpedc')
|
||||||
|
.innerJoinAndSelect('pcpedc.pcclient', 'pcclient')
|
||||||
|
.innerJoinAndSelect('pcpedc.pccarreg', 'pccarreg',
|
||||||
|
'pccarreg.codmotorista = :matricula ', //AND pccarreg.dtfecha is null',
|
||||||
|
{ matricula: user.matricula })
|
||||||
|
.leftJoinAndSelect('pcpedc.pcclientendent', 'pcclientendent')
|
||||||
|
.innerJoinAndSelect("pcpedc.pcplpag", "pcplpag")
|
||||||
|
.select(['pcpedc.numcar as "numeroCarga"',
|
||||||
|
'NVL(pcpedc.numnota, pcpedc.numcupom) as "numeroNota"',
|
||||||
|
'pcpedc.dtfat as "dataEmissao"',
|
||||||
|
'pcpedc.numped as "numeroPedido"',
|
||||||
|
'TRUNC(pcpedc.vlatend * 100) as "valorNota"',
|
||||||
|
'pcpedc.codcli as "codigoCliente"',
|
||||||
|
'pcclient.cliente as "nomeCliente"',
|
||||||
|
'NVL(pcclientendent.enderent, pcclient.enderent) as "endereco"',
|
||||||
|
'NVL(pcclientendent.numeroent, pcclient.numeroent) as "numero"',
|
||||||
|
'NVL(pcclientendent.bairroent, pcclient.bairroent) as "bairro"',
|
||||||
|
'NVL(pcclientendent.complementoent, pcclient.complementoent) as "complemento"',
|
||||||
|
'NVL(pcclientendent.municent, pcclient.municent) as "cidade"',
|
||||||
|
'NVL(pcclientendent.estent, pcclient.estent) as "estado"',
|
||||||
|
'NVL(pcclientendent.cepent, pcclient.cepent) as "cep"',
|
||||||
|
'pcclient.pontorefer as "pontoReferencia"',
|
||||||
|
'pcpedc.codendentcli as "codigoEnderecoEntrega"',
|
||||||
|
'pcclientendent.telent as "telefoneEntrega"',
|
||||||
|
'pcclient.telent as "telefoneCliente"',
|
||||||
|
'pcclient.telcelent as "celularCliente"',
|
||||||
|
'pcplpag.descricao as "planoPagamento"',
|
||||||
|
'NVL(\"pcplpag\".NUMPARCELAS,0) as "numeroParcelas"',
|
||||||
|
'NVL((select sum(trunc(pccrecli.valor*100)) from pccrecli where pccrecli.numtransvendadesc = \"pcpedc\".numtransvenda),0) as "valorCreditos"',
|
||||||
|
'NVL((select sum(trunc(pcestcom.vldevolucao*100)) from pcestcom where pcestcom.numtransvenda = \"pcpedc\".numtransvenda),0) as "valorDevolucoes"',
|
||||||
|
'NVL((select sum(trunc(estpagamento.valor*100)) from estpagamento where estpagamento.numorca = \"pcpedc\".numped),0) as "valorRecebimentos"',
|
||||||
|
'NVL((select count(1) from estimagemnota where estimagemnota.numped = \"pcpedc\".numped and estimagemnota.tipo = \'P\'),0) as "notaComImagens"',
|
||||||
|
'NVL((select count(1) from estimagemnota where estimagemnota.numped = \"pcpedc\".numped and estimagemnota.tipo = \'C\'),0) as "notaComProtocolo"',
|
||||||
|
'NVL((select count(1) from estprotocoloentrega where estprotocoloentrega.numcar = \"pcpedc\".numcar and estprotocoloentrega.codcli = pcpedc.codcli),0) as "notaComDadosRecebedor"',
|
||||||
|
])
|
||||||
|
.addSelect(subQuery => {
|
||||||
|
return subQuery
|
||||||
|
.select('count(distinct item.codfilialretira)', 'lojas')
|
||||||
|
.from(Pcpedi, 'item')
|
||||||
|
.where('item.numped = pcpedc.numped and item.codfilialretira <> pcpedc.codfilial')
|
||||||
|
}, 'lojas')
|
||||||
|
.where("pcpedc.posicao = 'F'")
|
||||||
|
.andWhere("pcpedc.codcli = :codcli", { codcli: id })
|
||||||
|
.getRawMany();
|
||||||
|
return orders;
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
return new ResultModel(false,
|
||||||
|
'Erro ao consultar notas fiscais.',
|
||||||
|
null,
|
||||||
|
error);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetPayments(id: number) {
|
||||||
|
// const user = await this.GetUser(queryRunner);
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
try {
|
||||||
|
const payments = await queryRunner.manager
|
||||||
|
.getRepository(Estpagamento)
|
||||||
|
.createQueryBuilder('estpagamento')
|
||||||
|
.select(['\"estpagamento\".numorca as "orderId"',
|
||||||
|
'TRUNC(\"estpagamento\".valor * 100) as "valor"',
|
||||||
|
'\"estpagamento\".nsu as "nsu"',
|
||||||
|
'\"estpagamento\".dtpagamento as "dataPagamento"',
|
||||||
|
'\"estpagamento\".codautorizacao as "codigoAutorizacao"',
|
||||||
|
'\"estpagamento\".idtransacao as "idTransacao"',
|
||||||
|
'\"estpagamento\".parcelas as "parcelas"',
|
||||||
|
'\"estpagamento\".formapagto as "formaPagto"',
|
||||||
|
])
|
||||||
|
.innerJoin('estpagamento.pedido', 'pcpedc')
|
||||||
|
.innerJoin('pcpedc.pcclient', 'pcclient')
|
||||||
|
//.innerJoin('pcpedc.pccarreg', 'pccarreg',
|
||||||
|
// 'pccarreg.codmotorista1 = :matricula ', //AND pccarreg.dtfecha is null',
|
||||||
|
// { matricula: user.matricula })
|
||||||
|
.where('\"pcpedc\".codcli = :id', { id })
|
||||||
|
.getRawMany()
|
||||||
|
return payments;
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
return new ResultModel(false,
|
||||||
|
'Erro ao consultar pagamentos.',
|
||||||
|
null,
|
||||||
|
error);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
import { Controller, Get, Param } from '@nestjs/common';
|
||||||
|
import { ShippingService } from './shipping.service';
|
||||||
|
import { ApiExcludeEndpoint } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
@Controller('api/v1/shipping')
|
||||||
|
export class ShippingController {
|
||||||
|
|
||||||
|
constructor(private shippingService: ShippingService){}
|
||||||
|
|
||||||
|
@Get('customer')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getdeliveryByCustomer() {
|
||||||
|
return await this.shippingService.GetShippingsByCustomer();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('collect/shop')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getCollectbyShop() {
|
||||||
|
return await this.shippingService.GetCollectByShop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('collect/customer/:id')
|
||||||
|
@ApiExcludeEndpoint()
|
||||||
|
async getCollectbyCustomer(@Param('id') id: string) {
|
||||||
|
return await this.shippingService.GetCollectByCustomer(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,161 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { Esventregasporcliente } from 'src/domain/entity/views/esventregasporcliente.entity';
|
||||||
|
import { Connection, getConnection } from 'typeorm';
|
||||||
|
import { ResultModel } from '../../domain/models/result.model';
|
||||||
|
import { Esvretiralojascliente } from '../../domain/entity/views/esventregaslojascliente.entity';
|
||||||
|
import { EsvRetiraLojas } from '../../domain/entity/views/esvretiralojas.entity';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class ShippingService {
|
||||||
|
constructor(private connection: Connection) { }
|
||||||
|
|
||||||
|
async GetShippingsByCustomer(): Promise<any> {
|
||||||
|
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
|
||||||
|
await queryRunner.connect();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
/*const user = await this.GetUser(queryRunner);
|
||||||
|
|
||||||
|
if (user == null) {
|
||||||
|
return new ResultModel(false, 'Não foi possível localizar entregas para este usuário',
|
||||||
|
null,
|
||||||
|
'Não foi localizado motorista para este usuário.');
|
||||||
|
}*/
|
||||||
|
|
||||||
|
const deliveries = await queryRunner.manager
|
||||||
|
.getRepository(Esventregasporcliente)
|
||||||
|
.createQueryBuilder('ESVENTREGASPORCLIENTE')
|
||||||
|
.select(['cliente as "nomeCliente"'
|
||||||
|
, 'cgcent as "cnpj_cpf"'
|
||||||
|
, 'email as "email"'
|
||||||
|
, 'endereco as "endereco"'
|
||||||
|
, 'numero as "numero"'
|
||||||
|
, 'bairro as "bairro"'
|
||||||
|
, 'complemento as "complemento"'
|
||||||
|
, 'cidade as "cidade"'
|
||||||
|
, 'estado as "uf"'
|
||||||
|
, 'cep as "cep"'
|
||||||
|
, 'qtpedidos as "quantidadePedidos"'
|
||||||
|
, 'qtlojas as "quantidaeLojas"'
|
||||||
|
, 'entrega_concluida as "entregaConcluida"'
|
||||||
|
, 'telefone as "telefoneCliente"'
|
||||||
|
, 'celular as "celularCliente"'
|
||||||
|
, 'codcli as "codigoCliente"'])
|
||||||
|
.where("email = 'eduardoestevao.gyn@gmail.com'")
|
||||||
|
.getRawMany();
|
||||||
|
|
||||||
|
return deliveries;
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
return new ResultModel(false, 'Não foi possível consultar as entregas por cliente.',
|
||||||
|
null,
|
||||||
|
error);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async GetCollectByShop(): Promise<any> {
|
||||||
|
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
|
||||||
|
await queryRunner.connect();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
/*const user = await this.GetUser(queryRunner);
|
||||||
|
|
||||||
|
if (user == null) {
|
||||||
|
return new ResultModel(false, 'Não foi possível localizar entregas para este usuário',
|
||||||
|
null,
|
||||||
|
'Não foi localizado motorista para este usuário.');
|
||||||
|
}*/
|
||||||
|
|
||||||
|
const deliveries = await queryRunner.manager
|
||||||
|
.getRepository(EsvRetiraLojas)
|
||||||
|
.createQueryBuilder('ESVRETIRALOJAS')
|
||||||
|
.select(['codigo as "codigoLoja"'
|
||||||
|
, 'razaosocial as "razaoSocial"'
|
||||||
|
, 'quantidadepedidos as "quantidadePedidos"'
|
||||||
|
])
|
||||||
|
.where("email = 'eduardoestevao.gyn@gmail.com'")
|
||||||
|
.getRawMany();
|
||||||
|
|
||||||
|
return deliveries;
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
return new ResultModel(false, 'Não foi possível consultar as coletas por loja.',
|
||||||
|
null,
|
||||||
|
error);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async GetCollectByCustomer(id: string): Promise<any> {
|
||||||
|
|
||||||
|
const connection = getConnection();
|
||||||
|
const queryRunner = connection.createQueryRunner();
|
||||||
|
|
||||||
|
await queryRunner.connect();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
/*const user = await this.GetUser(queryRunner);
|
||||||
|
|
||||||
|
if (user == null) {
|
||||||
|
return new ResultModel(false, 'Não foi possível localizar entregas para este usuário',
|
||||||
|
null,
|
||||||
|
'Não foi localizado motorista para este usuário.');
|
||||||
|
}*/
|
||||||
|
|
||||||
|
const deliveries = await queryRunner.manager
|
||||||
|
.getRepository(Esvretiralojascliente)
|
||||||
|
.createQueryBuilder('ESVRETIRALOJASCLIENTE')
|
||||||
|
.select([
|
||||||
|
'codfilial as "codigoFilial"'
|
||||||
|
,'numped as "numeroPedido"'
|
||||||
|
,'numnota as "numeroNota"'
|
||||||
|
,'dtfat as "dataFaturamento"'
|
||||||
|
,'datapedido as "dataPedido"'
|
||||||
|
,'codcli as "codigoCliente"'
|
||||||
|
,'cliente as "nomeCliente"'
|
||||||
|
,'codfilialretira as "codigoLoja"'
|
||||||
|
,'razaosocial as "nomeLoja"'
|
||||||
|
,'qtitens as "quantidadeItens"'
|
||||||
|
,'quantidade as "quantidade"'
|
||||||
|
])
|
||||||
|
.where("email = 'eduardoestevao.gyn@gmail.com'")
|
||||||
|
.andWhere("codfilial = :codfilial", {codfilial: id})
|
||||||
|
.getRawMany();
|
||||||
|
|
||||||
|
return deliveries;
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
return new ResultModel(false, 'Não foi possível consultar as coletas por cliente.',
|
||||||
|
null,
|
||||||
|
error);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
CREATE OR REPLACE VIEW ESVPRODUTOSVENDA
|
||||||
|
AS
|
||||||
|
SELECT ROWNUM SEQ, PCPRODUT.CODPROD, PCPRODUT.DESCRICAO, PCPRODUT.NOMEECOMMERCE, PCPRODUT.CODFAB,
|
||||||
|
PCPRODUT.CODAUXILIAR, CASE WHEN PCPRODUT.TIPOPRODUTO = 'S' THEN 'SHOWROOM'
|
||||||
|
WHEN PCPRODUT.TIPOPRODUTO = 'A' THEN 'AUTOSSERVICO'
|
||||||
|
ELSE 'NÃO DEFINIDO' END TIPOPRODUTO,
|
||||||
|
PCPRODUT.DADOSTECNICOS, PCPRODUT.INFORMACOESTECNICAS, PCPRODUT.URLIMAGEM,
|
||||||
|
PCPRODUT.ENVIAECOMMERCE, PCPRODUT.CODMARCA CODIGOMARCA, PCMARCA.MARCA NOMEMARCA,
|
||||||
|
PCPRODUT.CODEPTO CODIGODEPARTAMENTO, PCDEPTO.DESCRICAO NOMEDEPARTAMENTO,
|
||||||
|
PCPRODUT.CODSEC CODIGOSECAO, PCSECAO.DESCRICAO NOMESECAO,
|
||||||
|
PCPRODUT.CODCATEGORIA CODIGOCATEGORIA, PCCATEGORIA.CATEGORIA NOMECATEGORIA,
|
||||||
|
PCPRODUT.CODFORNEC, PCFORNEC.FORNECEDOR NOMEFORNECEDOR, PCPRODFILIAL.CLASSEESTOQUE,
|
||||||
|
PCPRODFILIAL.CLASSEVENDA, PCPRODFILIAL.CODFILIAL CODIGOFILIAL
|
||||||
|
FROM PCPRODUT, PCDEPTO, PCSECAO, PCCATEGORIA, PCMARCA, PCFORNEC, PCPRODFILIAL
|
||||||
|
WHERE PCPRODUT.DTEXCLUSAO IS NULL
|
||||||
|
AND NVL(PCPRODUT.OBS,'X') <> 'PV'
|
||||||
|
AND PCPRODUT.CODEPTO = PCDEPTO.CODEPTO
|
||||||
|
AND PCPRODUT.CODSEC = PCSECAO.CODSEC
|
||||||
|
AND PCPRODUT.CODPROD = PCPRODFILIAL.CODPROD
|
||||||
|
AND PCPRODUT.CODSEC = PCCATEGORIA.CODSEC (+)
|
||||||
|
AND PCPRODUT.CODCATEGORIA = PCCATEGORIA.CODCATEGORIA (+)
|
||||||
|
AND PCPRODUT.CODFORNEC = PCFORNEC.CODFORNEC (+)
|
||||||
|
AND PCPRODUT.CODMARCA = PCMARCA.CODMARCA (+) ;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE VIEW ESVPRECOVENDA
|
||||||
|
AS
|
||||||
|
SELECT PCTABPR.NUMREGIAO NUMEROREGIAO
|
||||||
|
,PCTABPR.CODPROD
|
||||||
|
,PCTABPR.PVENDA1 PRECOVENDA
|
||||||
|
,( SELECT PCPRECOPROM.PRECOFIXO
|
||||||
|
FROM PCPRECOPROM
|
||||||
|
WHERE PCPRECOPROM.NUMREGIAO = PCTABPR.NUMREGIAO
|
||||||
|
AND PCPRECOPROM.CODPROD = PCTABPR.CODPROD
|
||||||
|
AND TRUNC(SYSDATE) BETWEEN PCPRECOPROM.DTINICIOVIGENCIA AND PCPRECOPROM.DTFIMVIGENCIA ) PRECOOFERTA
|
||||||
|
FROM PCTABPR
|
||||||
|
WHERE PCTABPR.PVENDA > 0
|
||||||
|
AND NVL(PCTABPR.EXCLUIDO, 'N') = 'N';
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE VIEW ESVESTOQUEVENDA
|
||||||
|
AS
|
||||||
|
SELECT PCEST.CODFILIAL, PCEST.CODPROD,
|
||||||
|
( NVL(PCEST.QTESTGER,0) - NVL(PCEST.QTRESERV,0) - NVL(PCEST.QTBLOQUEADA,0) - NVL(PCEST.QTPENDENTE,0) ) QUANTIDADEESTOQUEDISPONIVEL,
|
||||||
|
( SELECT MIN(PCPEDIDO.dtprevent) FROM PCITEM, PCPEDIDO
|
||||||
|
WHERE PCITEM.NUMPED = PCPEDIDO.NUMPED
|
||||||
|
AND ( PCITEM.QTPEDIDA - NVL(PCITEM.QTENTREGUE,0) ) > 0
|
||||||
|
AND PCITEM.CODPROD = PCEST.CODPROD ) DATAPREVISAOENTREGA
|
||||||
|
FROM PCEST
|
||||||
|
WHERE PCEST.CODFILIAL <> '99';
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity("ESTABREVIATURA")
|
||||||
|
export class EstAbreviatura {
|
||||||
|
|
||||||
|
@PrimaryColumn({ name: 'ID' })
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({ name: 'ABREVIATURA' })
|
||||||
|
abreviatura: string;
|
||||||
|
|
||||||
|
@Column({ name: 'PALAVRA' })
|
||||||
|
palavra: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTAVISOESTOQUE')
|
||||||
|
export class Estavisoestoque {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: 'ID'})
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({name: 'DTINCLUSAO'})
|
||||||
|
createDate: Date;
|
||||||
|
|
||||||
|
@Column({name: 'CODUSUR'})
|
||||||
|
codusur: number;
|
||||||
|
|
||||||
|
@Column({name: 'CPFCNPJ'})
|
||||||
|
cpf: string;
|
||||||
|
|
||||||
|
@Column({name: 'NOME'})
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
@Column({name: 'CELULAR'})
|
||||||
|
cellPhone: string;
|
||||||
|
|
||||||
|
@Column({name: 'EMAIL'})
|
||||||
|
email: string;
|
||||||
|
|
||||||
|
@Column({name: 'CODPROD'})
|
||||||
|
codprod: number;
|
||||||
|
|
||||||
|
@Column({name: 'OBSERVACAO'})
|
||||||
|
obs: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTCATEGORIACLIENTE')
|
||||||
|
export class Estcategoriacliente {
|
||||||
|
@PrimaryColumn({name: 'ID'})
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({name: 'DESCRICAO'})
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTCATEGORIAPARCEIRO')
|
||||||
|
export class Estcategoriaparceiro {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: 'ID'})
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({name: 'TIPO'})
|
||||||
|
tipo: string;
|
||||||
|
|
||||||
|
@Column({name: 'DESCRICAO'})
|
||||||
|
descricao: string;
|
||||||
|
|
||||||
|
@Column({name: 'TIPOPAGTO'})
|
||||||
|
tipopagto: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTFAIXAPARCEIRO')
|
||||||
|
export class Estfaixaparceiro {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: 'ID'})
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({name: 'TIPO'})
|
||||||
|
tipo: string;
|
||||||
|
|
||||||
|
@Column({name: 'FAIXAINI'})
|
||||||
|
faixaIni: number;
|
||||||
|
|
||||||
|
@Column({name: 'FAIXAFIM'})
|
||||||
|
faixaFim: number;
|
||||||
|
|
||||||
|
@Column({name: 'PERCCOMISSAO'})
|
||||||
|
percComissao: number;
|
||||||
|
|
||||||
|
@Column({name: 'DTCADASTRO'})
|
||||||
|
dtCadastro: Date;
|
||||||
|
|
||||||
|
@Column({name: 'CODFUNCCAD'})
|
||||||
|
codfunccad: number;
|
||||||
|
|
||||||
|
@Column({name: 'DTALTERACAO'})
|
||||||
|
dtAlteracao: Date;
|
||||||
|
|
||||||
|
@Column({name: 'CODFUNCALT'})
|
||||||
|
codfuncalt: number;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from 'typeorm';
|
||||||
|
|
||||||
|
@Entity('ESTIMAGEMNOTA')
|
||||||
|
export class Estimagemnota {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: 'NUMPED'})
|
||||||
|
numeroPedido: number;
|
||||||
|
|
||||||
|
@Column({name: 'NUMNOTA'})
|
||||||
|
numeroNota: number;
|
||||||
|
|
||||||
|
@Column({name: 'NUMCAR'})
|
||||||
|
numeroCarregamento: number;
|
||||||
|
|
||||||
|
@Column({name: 'DATA'})
|
||||||
|
data: Date;
|
||||||
|
|
||||||
|
@Column({name: 'TIPO'})
|
||||||
|
tipo: string;
|
||||||
|
|
||||||
|
@Column({name: 'URL'})
|
||||||
|
url: string;
|
||||||
|
|
||||||
|
@Column({name: 'LATITUDE'})
|
||||||
|
latitude: number;
|
||||||
|
|
||||||
|
@Column({name: 'LONGITUDE'})
|
||||||
|
longitude: number;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
import { PrimaryColumn, Column, Entity } from "typeorm";
|
||||||
|
|
||||||
|
@Entity("ESTMEDIDAPRODUTO")
|
||||||
|
export class Estmedidaproduto {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: 'IDMEDIDAPRODUTO'})
|
||||||
|
idmedidaproduto: number;
|
||||||
|
|
||||||
|
@Column({name: 'DESCRICAO'})
|
||||||
|
descricao: string;
|
||||||
|
|
||||||
|
@Column({name: 'ABREVIATURA'})
|
||||||
|
abreviatura: string;
|
||||||
|
|
||||||
|
@Column({name: 'QUANTIDADE'})
|
||||||
|
quantidade: number;
|
||||||
|
|
||||||
|
@Column({name: 'NIVEL'})
|
||||||
|
nivel: number;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm";
|
||||||
|
import { Pcpedc } from "./pcpedc.entity";
|
||||||
|
|
||||||
|
@Entity('ESTPAGAMENTO')
|
||||||
|
export class Estpagamento {
|
||||||
|
@PrimaryColumn({ name: 'NUMORCA' })
|
||||||
|
orderId: number;
|
||||||
|
|
||||||
|
@PrimaryColumn({ name: 'DTPAGAMENTO' })
|
||||||
|
dataPagamento: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'CODAUTORIZACAO' })
|
||||||
|
codigoAutorizacao: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODRESPOSTA' })
|
||||||
|
codigoResposta: string;
|
||||||
|
|
||||||
|
@Column({ name: 'DTREQUISICAO' })
|
||||||
|
dataRequisicao: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DTSERVIDOR' })
|
||||||
|
dataServidor: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'ESTACQUIRER' })
|
||||||
|
estAcquirer: string;
|
||||||
|
|
||||||
|
@Column({ name: 'IDTRANSACAO' })
|
||||||
|
idTransacao: string;
|
||||||
|
|
||||||
|
@Column({ name: 'NSU' })
|
||||||
|
nsu: string;
|
||||||
|
|
||||||
|
@Column({ name: 'PARCELAS' })
|
||||||
|
parcelas: number;
|
||||||
|
|
||||||
|
@Column({ name: 'VALOR' })
|
||||||
|
valor: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NOMEBANDEIRA' })
|
||||||
|
nomeBandeira: string;
|
||||||
|
|
||||||
|
@Column({ name: 'FORMAPAGTO' })
|
||||||
|
formaPagto: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNC' })
|
||||||
|
codigoFuncionario: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODCOB' })
|
||||||
|
cobranca: string;
|
||||||
|
|
||||||
|
@ManyToOne(() => Pcpedc, pcpedc => pcpedc.pagamentos)
|
||||||
|
@JoinColumn({ name: 'NUMORCA' })
|
||||||
|
pedido: Pcpedc;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTPARCEIRO')
|
||||||
|
export class Estparceiro {
|
||||||
|
@PrimaryColumn({ name: 'ID'})
|
||||||
|
public id: number;
|
||||||
|
|
||||||
|
@Column({name: 'TIPO'})
|
||||||
|
public tipo: string;
|
||||||
|
|
||||||
|
@Column({name: 'CPF'})
|
||||||
|
public cpf: string;
|
||||||
|
|
||||||
|
@Column({name: 'NOME'})
|
||||||
|
public nome: string;
|
||||||
|
|
||||||
|
@Column({name: 'RG'})
|
||||||
|
public rg: string;
|
||||||
|
|
||||||
|
@Column({name: 'ORGAOEXP'})
|
||||||
|
public orgaoexp: string;
|
||||||
|
|
||||||
|
@Column({name: 'REGPROFISSIONAL'})
|
||||||
|
public regprofissional: string;
|
||||||
|
|
||||||
|
@Column({name: 'CEP'})
|
||||||
|
public cep: string;
|
||||||
|
|
||||||
|
@Column({name: 'CODIBGE'})
|
||||||
|
public codibge: string;
|
||||||
|
|
||||||
|
|
||||||
|
@Column({name: 'ENDERECO'})
|
||||||
|
public endereco: string;
|
||||||
|
|
||||||
|
@Column({name: 'NUMERO'})
|
||||||
|
public numero: string;
|
||||||
|
|
||||||
|
@Column({name: 'COMPLEMENTO'})
|
||||||
|
public complemento: string;
|
||||||
|
|
||||||
|
@Column({name: 'BAIRRO'})
|
||||||
|
public bairro: string;
|
||||||
|
|
||||||
|
@Column({name: 'CIDADE'})
|
||||||
|
public cidade: string;
|
||||||
|
|
||||||
|
@Column({name: 'ESTADO'})
|
||||||
|
public estado: string;
|
||||||
|
|
||||||
|
@Column({name: 'TELEFONE'})
|
||||||
|
public telefone: string;
|
||||||
|
|
||||||
|
@Column({name: 'EMAIL'})
|
||||||
|
public email: string;
|
||||||
|
|
||||||
|
@Column({name: 'CHAVEPIX'})
|
||||||
|
public chavepix: string;
|
||||||
|
|
||||||
|
@Column({name: 'BANCO'})
|
||||||
|
public banco: string;
|
||||||
|
|
||||||
|
@Column({name: 'AGENCIA'})
|
||||||
|
public agencia: string;
|
||||||
|
|
||||||
|
@Column({name: 'CONTA'})
|
||||||
|
public conta: string;
|
||||||
|
|
||||||
|
@Column({name: 'CODUSUR'})
|
||||||
|
public codusur: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODUSURPARCEIRO'})
|
||||||
|
public codusurparceiro: number;
|
||||||
|
|
||||||
|
@Column({name: 'COMPRADORPJ'})
|
||||||
|
public compradorPj: string;
|
||||||
|
|
||||||
|
@Column({name: 'CODCLI'})
|
||||||
|
public codcli: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODCATEGORIA'})
|
||||||
|
public codcategoria: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODPRACA'})
|
||||||
|
public codpraca: number;
|
||||||
|
|
||||||
|
@Column({name: 'OBSERVACAO'})
|
||||||
|
public observacao: string;
|
||||||
|
|
||||||
|
@Column({name: 'OBSERVACAO2'})
|
||||||
|
public observacao2: string;
|
||||||
|
|
||||||
|
@Column({name: 'PERCCOMISSAO'})
|
||||||
|
public perccomissao: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODFUNCCADASTRO'})
|
||||||
|
public codfunccadastro: number;
|
||||||
|
|
||||||
|
@Column({name: 'DTCADASTRO'})
|
||||||
|
public dtcadastro: Date;
|
||||||
|
|
||||||
|
@Column({name: 'CODFUNCALTERACAO'})
|
||||||
|
public codfuncalteracao: number;
|
||||||
|
|
||||||
|
@Column({name: 'DTALTERACAO'})
|
||||||
|
public dtalteracao: Date;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTPREVENDAC')
|
||||||
|
export class Shopping {
|
||||||
|
|
||||||
|
@PrimaryColumn({ name: 'ID' })
|
||||||
|
id: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFILIAL' })
|
||||||
|
store: string;
|
||||||
|
|
||||||
|
@Column({ name: 'DATA' })
|
||||||
|
data: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'CODUSUR' })
|
||||||
|
codusur: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODCLI' })
|
||||||
|
codcli: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODENDENTCLI' })
|
||||||
|
codendentcli: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODPLPAG' })
|
||||||
|
codplpag: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODCOB' })
|
||||||
|
codcob: string;
|
||||||
|
|
||||||
|
@Column({ name: 'VLPEDIDO' })
|
||||||
|
vlpedido: number;
|
||||||
|
|
||||||
|
@Column({ name: 'VLTABELA' })
|
||||||
|
vltabela: number;
|
||||||
|
|
||||||
|
@Column({ name: 'VLDESCONTO' })
|
||||||
|
vldesconto: number;
|
||||||
|
|
||||||
|
@Column({name: 'VLCUSTOFIN'})
|
||||||
|
vlcustofin: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCAUTOR' })
|
||||||
|
codfuncautor: number;
|
||||||
|
|
||||||
|
@Column({ name: 'VLTAXAENTREGA', type: "decimal", precision: 10, scale: 2, default: 0 })
|
||||||
|
vltaxaentrega: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMORCA' })
|
||||||
|
numorca: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMPED' })
|
||||||
|
numped: number;
|
||||||
|
|
||||||
|
@Column({ name: 'TOTPESO' })
|
||||||
|
totpeso: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFORNECFRETE' })
|
||||||
|
codfornecfrete: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODTABELAFRETE' })
|
||||||
|
codtabelafrete: number;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,117 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity("ESTPREVENDAI")
|
||||||
|
export class ShoppingItens {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: 'ID'})
|
||||||
|
id: string;
|
||||||
|
|
||||||
|
@Column({name: 'IDCART'})
|
||||||
|
idCart: string;
|
||||||
|
|
||||||
|
@Column({name: 'NUMSEQ'})
|
||||||
|
numSeq: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODPROD'})
|
||||||
|
idProduct: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODAUXILIAR'})
|
||||||
|
ean: number;
|
||||||
|
|
||||||
|
@Column({name: 'QT'})
|
||||||
|
quantity: number;
|
||||||
|
|
||||||
|
@Column({name: 'PTABELA'})
|
||||||
|
listPrice: number;
|
||||||
|
|
||||||
|
@Column({name: 'PERCDESC'})
|
||||||
|
discount: number;
|
||||||
|
|
||||||
|
@Column({name: 'VLDESCONTO'})
|
||||||
|
discountValue: number;
|
||||||
|
|
||||||
|
@Column({name: 'PVENDA'})
|
||||||
|
price: number;
|
||||||
|
|
||||||
|
@Column({name: 'VLCUSTOFIN'})
|
||||||
|
cost: number;
|
||||||
|
|
||||||
|
@Column({name: 'DTINCLUSAO', select: false})
|
||||||
|
createDate: Date;
|
||||||
|
|
||||||
|
@Column({name: 'CODFUNC', select: false})
|
||||||
|
idUser: Date;
|
||||||
|
|
||||||
|
@Column({name: 'DTCANCEL', select: false})
|
||||||
|
cancelDate: Date;
|
||||||
|
|
||||||
|
@Column({name: 'DATAVENDA', select: false})
|
||||||
|
orderDate: Date;
|
||||||
|
|
||||||
|
@Column({name: 'NUMPED', select: false})
|
||||||
|
orderId: number;
|
||||||
|
|
||||||
|
@Column({name: 'NOMEECOMMERCE'})
|
||||||
|
description: string;
|
||||||
|
|
||||||
|
@Column({name: 'URLIMAGEM'})
|
||||||
|
image: string;
|
||||||
|
|
||||||
|
@Column({name: 'TIPOPRODUTO'})
|
||||||
|
productType: string;
|
||||||
|
|
||||||
|
@Column({name: 'TIPOENTREGA'})
|
||||||
|
deliveryType: string;
|
||||||
|
|
||||||
|
@Column({name: 'CODFILIALRETIRA'})
|
||||||
|
stockStore: string;
|
||||||
|
|
||||||
|
@Column({name: 'CODUSUR'})
|
||||||
|
seller: number;
|
||||||
|
|
||||||
|
@Column({name: 'PRECOPROMOCAO'})
|
||||||
|
promotion: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODFUNCDESC'})
|
||||||
|
userDiscount: number;
|
||||||
|
|
||||||
|
@Column({name: 'MULTIPLO'})
|
||||||
|
mutiple: number;
|
||||||
|
|
||||||
|
@Column({name: 'DESCRICAOAUXILIAR'})
|
||||||
|
auxDescription: string;
|
||||||
|
|
||||||
|
@Column({name: 'DESCRICAO'})
|
||||||
|
smallDescription: string;
|
||||||
|
|
||||||
|
@Column({name: 'MARCA'})
|
||||||
|
brand: string;
|
||||||
|
|
||||||
|
@Column({name: 'PERCACRESCIMO'})
|
||||||
|
percentUpQuantity: number;
|
||||||
|
|
||||||
|
@Column({name: 'QTACRESCIMO'})
|
||||||
|
upQuantity: number;
|
||||||
|
|
||||||
|
@Column({name: 'BASETINTOMETRICO'})
|
||||||
|
base: string;
|
||||||
|
|
||||||
|
@Column({name: 'LETRATINTOMETRICO'})
|
||||||
|
letter: string;
|
||||||
|
|
||||||
|
@Column({name: 'LINHATINTOMETRICO'})
|
||||||
|
line: string;
|
||||||
|
|
||||||
|
@Column({name: 'CORTINTOMETRICO'})
|
||||||
|
color: string;
|
||||||
|
|
||||||
|
@Column({name: 'LITRAGEM'})
|
||||||
|
can: number;
|
||||||
|
|
||||||
|
@Column({name: 'AMBIENTE'})
|
||||||
|
environment: string;
|
||||||
|
|
||||||
|
@Column({name: 'PRODUTOCOMPREJUNTO'})
|
||||||
|
productTogether: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from 'typeorm';
|
||||||
|
|
||||||
|
@Entity("ESTPROTOCOLOENTREGA")
|
||||||
|
export class Estprotocoloentrega {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: 'NUMCAR'})
|
||||||
|
numeroCarregamento: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODCLI'})
|
||||||
|
codigoCliente: number;
|
||||||
|
|
||||||
|
@Column({name: 'DTENTREGA'})
|
||||||
|
dataEntrega: Date;
|
||||||
|
|
||||||
|
@Column({name: 'CPFRECEBEDOR'})
|
||||||
|
cpfRecebedor: string;
|
||||||
|
|
||||||
|
@Column({name: 'NOMERECEBEDOR'})
|
||||||
|
nomeRecebedor: string;
|
||||||
|
|
||||||
|
@Column({name: 'URL_IMAGEMPROTOCOLO'})
|
||||||
|
urlImagemProtocolo: string;
|
||||||
|
|
||||||
|
@Column({name: 'LATITUDE'})
|
||||||
|
latitude: number;
|
||||||
|
|
||||||
|
@Column({name: 'LONGITUDE'})
|
||||||
|
longitude: number;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTRUPTURA')
|
||||||
|
export class Estruptura {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: 'ID'})
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({name: 'DATA'})
|
||||||
|
date: Date;
|
||||||
|
|
||||||
|
@Column({name: 'CODFILIAL'})
|
||||||
|
store: string;
|
||||||
|
|
||||||
|
@Column({name: 'CODCLI'})
|
||||||
|
customerId: number;
|
||||||
|
|
||||||
|
@Column({name: 'CPF_CNPJ'})
|
||||||
|
document: string;
|
||||||
|
|
||||||
|
@Column({name: 'NOME'})
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
@Column({name: 'CELULAR'})
|
||||||
|
cellPhone: string;
|
||||||
|
|
||||||
|
@Column({name: 'EMAIL'})
|
||||||
|
email: string;
|
||||||
|
|
||||||
|
@Column({name: 'CODUSUR'})
|
||||||
|
sellerId: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODPROD'})
|
||||||
|
productId: number;
|
||||||
|
|
||||||
|
@Column({name: 'QT'})
|
||||||
|
quantity: number;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --Script criação tabela
|
||||||
|
CREATE TABLE ESTRUPTURA (
|
||||||
|
ID NUMBER(10),
|
||||||
|
DATA DATE,
|
||||||
|
CODFILIAL VARCHAR2(2),
|
||||||
|
CODCLI NUMBER(6),
|
||||||
|
CPF_CNPJ VARCHAR2(20),
|
||||||
|
NOME VARCHAR2(100),
|
||||||
|
CELULAR VARCHAR2(20),
|
||||||
|
EMAIL VARCHAR2(100),
|
||||||
|
CODUSUR NUMBER(6),
|
||||||
|
CODPROD NUMBER(6),
|
||||||
|
QT NUMBER(22,6) );
|
||||||
|
|
||||||
|
|
||||||
|
CREATE SEQUENCE ESSRUPTURA;
|
||||||
|
*/
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTSUBCATEGORIACLIENTE')
|
||||||
|
export class Estsubcategoriacliente {
|
||||||
|
@PrimaryColumn({name: 'ID'})
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({name: 'CATEGORIAID'})
|
||||||
|
categoryId: number;
|
||||||
|
|
||||||
|
@Column({name: 'DESCRICAO'})
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
import { Pccest } from './pccest.entity';
|
||||||
|
import { Pccategoria } from './pccategoria.entity';
|
||||||
|
import { Pcdepto } from 'src/domain/entity/tables/pcdepto.entity';
|
||||||
|
import { PrimaryColumn, Entity, Column, ManyToOne, JoinColumn } from "typeorm";
|
||||||
|
import { Pcncm } from './pcncm.entity';
|
||||||
|
import { Pcsecao } from './pcsecao.entity';
|
||||||
|
|
||||||
|
@Entity("ESTTIPOPRODUTO")
|
||||||
|
export class Esttipoproduto {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: 'IDTIPOPRODUTO'})
|
||||||
|
idTipoProduto: number;
|
||||||
|
|
||||||
|
@Column({name: 'NCM'})
|
||||||
|
ncm: string;
|
||||||
|
|
||||||
|
@ManyToOne(() => Pcncm, itemNcm => itemNcm.tiposProduto)
|
||||||
|
@JoinColumn({ name: 'NCM' })
|
||||||
|
registroNcm: Pcncm;
|
||||||
|
|
||||||
|
@Column({name: 'TIPOPRODUTO'})
|
||||||
|
tipoProduto: string;
|
||||||
|
|
||||||
|
@Column({name: 'SIGLAPRODUTO'})
|
||||||
|
sigla: string;
|
||||||
|
|
||||||
|
@Column({name: 'CODEPTO'})
|
||||||
|
codigoDepartamento: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODSEC'})
|
||||||
|
codigoSecao: number;
|
||||||
|
|
||||||
|
@Column({name: 'CODCATEGORIA'})
|
||||||
|
codigoCategoria: number;
|
||||||
|
|
||||||
|
@Column({name: 'CEST'})
|
||||||
|
cest: number;
|
||||||
|
|
||||||
|
@ManyToOne(() => Pcdepto, departamento => departamento.tiposProduto)
|
||||||
|
@JoinColumn({ name: 'CODEPTO' })
|
||||||
|
departamento: Pcdepto;
|
||||||
|
|
||||||
|
@ManyToOne(() => Pcsecao, secao => secao.tiposProduto)
|
||||||
|
@JoinColumn({ name: 'CODSEC' })
|
||||||
|
secao: Pcsecao;
|
||||||
|
|
||||||
|
@ManyToOne(() => Pccategoria, categoria => categoria.tiposProduto)
|
||||||
|
@JoinColumn({ name: 'CODCATEGORIA' })
|
||||||
|
categoria: Pccategoria;
|
||||||
|
|
||||||
|
@ManyToOne(() => Pccest, itemCest => itemCest.tiposProduto)
|
||||||
|
@JoinColumn({ name: 'CEST' })
|
||||||
|
registrocest: Pccest;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTUSUARIO')
|
||||||
|
export class User {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: 'IDUSUARIO'})
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({name: 'NOME'})
|
||||||
|
username: string;
|
||||||
|
|
||||||
|
@Column({name: 'EMAIL'})
|
||||||
|
email: string;
|
||||||
|
|
||||||
|
@Column({name: 'SENHA', select: false})
|
||||||
|
password: string;
|
||||||
|
|
||||||
|
@Column({name: 'TIPO'})
|
||||||
|
role: string;
|
||||||
|
|
||||||
|
@Column({name: 'BLOQUEADO'})
|
||||||
|
blocked: string;
|
||||||
|
|
||||||
|
@Column({name: 'MATRICULA'})
|
||||||
|
registration: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTVENDA')
|
||||||
|
export class Sale {
|
||||||
|
@PrimaryColumn({ name: 'ID' })
|
||||||
|
id: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODCLI' })
|
||||||
|
codcli: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODUSUR' })
|
||||||
|
codusur: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODENDCLI' })
|
||||||
|
codendcli: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODPLPAG' })
|
||||||
|
codplpag: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODCOB' })
|
||||||
|
codcob: string;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSERVACAO1' })
|
||||||
|
observacao1: string;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSERVACAO2' })
|
||||||
|
observacao2: string;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSERVACAO3' })
|
||||||
|
observacao3: string;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSERVACAOENTREGA1' })
|
||||||
|
observacaoentrega1: string;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSERVACAOENTREGA2' })
|
||||||
|
observacaoentrega2: string;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSERVACAOENTREGA3' })
|
||||||
|
observacaoentrega3: string;
|
||||||
|
|
||||||
|
@Column({ name: 'VLFRETE' })
|
||||||
|
vlfrete: number;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('ESTVENDAPRECLIENTE')
|
||||||
|
export class Estvendaprecliente {
|
||||||
|
|
||||||
|
@PrimaryColumn({ name: 'ID'})
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({ name: 'IDCART'})
|
||||||
|
idcart: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CPF'})
|
||||||
|
cpf: string;
|
||||||
|
|
||||||
|
@Column({ name: 'NOME'})
|
||||||
|
nome: string;
|
||||||
|
|
||||||
|
@Column({ name: 'TELEFONE'})
|
||||||
|
telefone: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODUSUR'})
|
||||||
|
codusur: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DTCADASTRO'})
|
||||||
|
dtcadastro: Date;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity("PCCAIXA")
|
||||||
|
export class Checkout {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: "NUMCAIXA"})
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({name: "DESCRICAO"})
|
||||||
|
description: string;
|
||||||
|
|
||||||
|
@Column({name: "NUMSERIEEQUIP"})
|
||||||
|
serialNumber: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,421 @@
|
||||||
|
import { Pcpedc } from './pcpedc.entity';
|
||||||
|
import { Pcempr } from './pcempr.entity';
|
||||||
|
import { Entity, Column, PrimaryColumn, OneToMany, OneToOne, JoinColumn } from "typeorm";
|
||||||
|
import { Pcnfsaid } from "./pcnfsaid.entity";
|
||||||
|
|
||||||
|
@Entity('PCCARREG')
|
||||||
|
export class Pccarreg {
|
||||||
|
|
||||||
|
@PrimaryColumn({ name: 'NUMCAR' })
|
||||||
|
numcar: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DTSAIDA' })
|
||||||
|
dtsaida: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'CODMOTORISTA' })
|
||||||
|
codmotorista: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODVEICULO' })
|
||||||
|
codveiculo: number;
|
||||||
|
|
||||||
|
@Column({ name: 'TOTPESO' })
|
||||||
|
totpeso: number;
|
||||||
|
|
||||||
|
@Column({ name: 'TOTVOLUME' })
|
||||||
|
totvolume: number;
|
||||||
|
|
||||||
|
@Column({ name: 'VLTOTAL' })
|
||||||
|
vltotal: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DTFECHA' })
|
||||||
|
dtfecha: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DESTINO' })
|
||||||
|
destino: string;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMNOTAS' })
|
||||||
|
numnotas: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODCAIXA' })
|
||||||
|
codcaixa: number;
|
||||||
|
|
||||||
|
@Column({ name: 'PERCOM' })
|
||||||
|
percom: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMENT' })
|
||||||
|
nument: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMCID' })
|
||||||
|
numcid: number;
|
||||||
|
|
||||||
|
@Column({ name: 'PREVCHEG' })
|
||||||
|
prevcheg: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DTRETORNO' })
|
||||||
|
dtretorno: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'CODCONF' })
|
||||||
|
codconf: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DT_CANCEL' })
|
||||||
|
dt_cancel: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DATAMON' })
|
||||||
|
datamon: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCMON' })
|
||||||
|
codfuncmon: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DATAMAPA' })
|
||||||
|
datamapa: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCMAPA' })
|
||||||
|
codfuncmapa: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMVIASMAPA' })
|
||||||
|
numviasmapa: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DTCAIXA' })
|
||||||
|
dtcaixa: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DTFAT' })
|
||||||
|
dtfat: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCFAT' })
|
||||||
|
codfuncfat: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCCANCEL' })
|
||||||
|
codfunccancel: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DATACONF' })
|
||||||
|
dataconf: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'QTITENS' })
|
||||||
|
qtitens: number;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSFATUR' })
|
||||||
|
obsfatur: string;
|
||||||
|
|
||||||
|
@Column({ name: 'TIPOCARGA' })
|
||||||
|
tipocarga: string;
|
||||||
|
|
||||||
|
@Column({ name: 'KMINICIAL' })
|
||||||
|
kminicial: number;
|
||||||
|
|
||||||
|
@Column({ name: 'KMFINAL' })
|
||||||
|
kmfinal: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DTSAIDAVEICULO' })
|
||||||
|
dtsaidaveiculo: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'CODROTAPRINC' })
|
||||||
|
codrotaprinc: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMDIARIAS' })
|
||||||
|
numdiarias: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCAJUD' })
|
||||||
|
codfuncajud: number;
|
||||||
|
|
||||||
|
@Column({ name: 'PAGCOMMOTMIN' })
|
||||||
|
pagcommotmin: string;
|
||||||
|
|
||||||
|
@Column({ name: 'VLVALERETENCAO' })
|
||||||
|
vlvaleretencao: number;
|
||||||
|
|
||||||
|
@Column({ name: 'HORAFECHA' })
|
||||||
|
horafecha: number;
|
||||||
|
|
||||||
|
@Column({ name: 'MINUTOFECHA' })
|
||||||
|
minutofecha: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMCAROL' })
|
||||||
|
numcarol: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CONHECFRETE' })
|
||||||
|
conhecfrete: string;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMCAROPERLOG' })
|
||||||
|
numcaroperlog: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DTFECHACOMISSMOT' })
|
||||||
|
dtfechacomissmot: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'QTCOMBUSTIVEL' })
|
||||||
|
qtcombustivel: number;
|
||||||
|
|
||||||
|
@Column({ name: 'BALCAOBAIXADO' })
|
||||||
|
balcaobaixado: string;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSDESTINO' })
|
||||||
|
obsdestino: string;
|
||||||
|
|
||||||
|
@Column({ name: 'VLFRETE' })
|
||||||
|
vlfrete: number;
|
||||||
|
|
||||||
|
@Column({ name: 'ABASTECIDO' })
|
||||||
|
abastecido: string;
|
||||||
|
|
||||||
|
@Column({ name: 'MAPAGERADOWMS' })
|
||||||
|
mapageradowms: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CONHECGERADO' })
|
||||||
|
conhecgerado: string;
|
||||||
|
|
||||||
|
@Column({ name: 'MAPAGERADOWMSPAL' })
|
||||||
|
mapageradowmspal: string;
|
||||||
|
|
||||||
|
@Column({ name: 'VLCOMBUSTIVEL' })
|
||||||
|
vlcombustivel: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMCARWMS' })
|
||||||
|
numcarwms: number;
|
||||||
|
|
||||||
|
@Column({ name: 'QTCAIXAS' })
|
||||||
|
qtcaixas: number;
|
||||||
|
|
||||||
|
@Column({ name: 'HORAMON' })
|
||||||
|
horamon: number;
|
||||||
|
|
||||||
|
@Column({ name: 'MINUTOMON' })
|
||||||
|
minutomon: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DTINICIOCHECKOUT' })
|
||||||
|
dtiniciocheckout: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DTFIMCHECKOUT' })
|
||||||
|
dtfimcheckout: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DATAHORAMAPA' })
|
||||||
|
datahoramapa: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMCARBROKER' })
|
||||||
|
numcarbroker: number;
|
||||||
|
|
||||||
|
@Column({ name: 'PERCOMTERC' })
|
||||||
|
percomterc: number;
|
||||||
|
|
||||||
|
@Column({ name: 'PERCOMAJUD' })
|
||||||
|
percomajud: number;
|
||||||
|
|
||||||
|
@Column({ name: 'TIPOCOMISSAO' })
|
||||||
|
tipocomissao: string;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMLANCDIARIA' })
|
||||||
|
numlancdiaria: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CARGASECUNDARIA' })
|
||||||
|
cargasecundaria: string;
|
||||||
|
|
||||||
|
@Column({ name: 'LACRE' })
|
||||||
|
lacre: string;
|
||||||
|
|
||||||
|
@Column({ name: 'VLDIARIA' })
|
||||||
|
vldiaria: number;
|
||||||
|
|
||||||
|
@Column({ name: 'VLDESPAJUDANTE' })
|
||||||
|
vldespajudante: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DATACONFFIM' })
|
||||||
|
dataconffim: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DTINICIALPEND' })
|
||||||
|
dtinicialpend: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DTFINALPEND' })
|
||||||
|
dtfinalpend: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'FROTA_PESO' })
|
||||||
|
frota_peso: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODMOTTRANSBORDO' })
|
||||||
|
codmottransbordo: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODAJUDTRANSBORDO' })
|
||||||
|
codajudtransbordo: number;
|
||||||
|
|
||||||
|
@Column({ name: 'LANCTOCPAGARFECHCOMISS414' })
|
||||||
|
lanctocpagarfechcomiss414: string;
|
||||||
|
|
||||||
|
@Column({ name: 'DTFECHACOMMOTTRANSB' })
|
||||||
|
dtfechacommottransb: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DTFECHACOMAJUDTRANSB' })
|
||||||
|
dtfechacomajudtransb: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'DTFECHACOMAJUD' })
|
||||||
|
dtfechacomajud: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCMAPACARAGRUPADO' })
|
||||||
|
codfuncmapacaragrupado: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DATAHORAMAPACARAGRUPADO' })
|
||||||
|
datahoramapacaragrupado: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMCARAGRUPADO' })
|
||||||
|
numcaragrupado: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMVIASCARAGRUPADO' })
|
||||||
|
numviascaragrupado: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODMOTORISTACARAGRUPADO' })
|
||||||
|
codmotoristacaragrupado: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODVEICULCARAGRUPADO' })
|
||||||
|
codveiculcaragrupado: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DATACARAGRUPADO' })
|
||||||
|
datacaragrupado: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'TRANSFERENCIA' })
|
||||||
|
transferencia: string;
|
||||||
|
|
||||||
|
@Column({ name: 'SEGURADA' })
|
||||||
|
segurada: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFILIALSAIDA' })
|
||||||
|
codfilialsaida: string;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSDESTINOAGRUP' })
|
||||||
|
obsdestinoagrup: string;
|
||||||
|
|
||||||
|
@Column({ name: 'DESTINOAGRUP' })
|
||||||
|
destinoagrup: string;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSACERTO' })
|
||||||
|
obsacerto: string;
|
||||||
|
|
||||||
|
@Column({ name: 'VLFIXO' })
|
||||||
|
vlfixo: number;
|
||||||
|
|
||||||
|
@Column({ name: 'VLPED' })
|
||||||
|
vlped: number;
|
||||||
|
|
||||||
|
@Column({ name: 'PERGRIS' })
|
||||||
|
pergris: number;
|
||||||
|
|
||||||
|
@Column({ name: 'VALORKG' })
|
||||||
|
valorkg: number;
|
||||||
|
|
||||||
|
@Column({ name: 'LANCARDESPDESCFINAUTOMATIC' })
|
||||||
|
lancardespdescfinautomatic: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCCONF' })
|
||||||
|
codfuncconf: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCSAIDACAR' })
|
||||||
|
codfuncsaidacar: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCRETORNOCAR' })
|
||||||
|
codfuncretornocar: number;
|
||||||
|
|
||||||
|
@Column({ name: 'SEGUNDOMON' })
|
||||||
|
segundomon: number;
|
||||||
|
|
||||||
|
@Column({ name: 'SEGUNDOSFECHA' })
|
||||||
|
segundosfecha: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMONUCARGA' })
|
||||||
|
numonucarga: string;
|
||||||
|
|
||||||
|
@Column({ name: 'NOMEAPROPRIADOCARGA' })
|
||||||
|
nomeapropriadocarga: string;
|
||||||
|
|
||||||
|
@Column({ name: 'DIVISAOCARGA' })
|
||||||
|
divisaocarga: string;
|
||||||
|
|
||||||
|
@Column({ name: 'GRUPOEMBCARGA' })
|
||||||
|
grupoembcarga: string;
|
||||||
|
|
||||||
|
@Column({ name: 'QTDTOTALPRODCARGA' })
|
||||||
|
qtdtotalprodcarga: string;
|
||||||
|
|
||||||
|
@Column({ name: 'PONTOFUGORCARGA' })
|
||||||
|
pontofugorcarga: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODVEICULO1' })
|
||||||
|
codveiculo1: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODVEICULO2' })
|
||||||
|
codveiculo2: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCAJUD2' })
|
||||||
|
codfuncajud2: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCAJUD3' })
|
||||||
|
codfuncajud3: number;
|
||||||
|
|
||||||
|
@Column({ name: 'GEOVOLUMETOTAL' })
|
||||||
|
geovolumetotal: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DTEXPORTACAO' })
|
||||||
|
dtexportacao: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSEXPORTACAO' })
|
||||||
|
obsexportacao: string;
|
||||||
|
|
||||||
|
@Column({ name: 'IDINTEGRACAOMYFROTA' })
|
||||||
|
idintegracaomyfrota: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODTIPOVEICULO' })
|
||||||
|
codtipoveiculo: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODPERFILVEICULO' })
|
||||||
|
codperfilveiculo: number;
|
||||||
|
|
||||||
|
@Column({ name: 'TIPOCALCULOCOMISSAOFRETISTA' })
|
||||||
|
tipocalculocomissaofretista: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNTIPOCALCCOMISSAOFRETISTA' })
|
||||||
|
codfuntipocalccomissaofretista: number;
|
||||||
|
|
||||||
|
@Column({ name: 'LIBERA_RETAGUARDA' })
|
||||||
|
libera_retaguarda: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCLIBEROURET' })
|
||||||
|
codfuncliberouret: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DATALIBEROURET' })
|
||||||
|
dataliberouret: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMCARMANIFCONCLUIDOFV' })
|
||||||
|
numcarmanifconcluidofv: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODFUNCFECHA' })
|
||||||
|
codfuncfecha: number;
|
||||||
|
|
||||||
|
@Column({ name: 'OBSFRETE' })
|
||||||
|
obsfrete: string;
|
||||||
|
|
||||||
|
@Column({ name: 'LANCIMPPRIMPARC' })
|
||||||
|
lancimpprimparc: string;
|
||||||
|
|
||||||
|
@Column({ name: 'NUMONDA' })
|
||||||
|
numonda: number;
|
||||||
|
|
||||||
|
@Column({ name: 'ORDEMSEP' })
|
||||||
|
ordemsep: number;
|
||||||
|
|
||||||
|
@Column({ name: 'ORDEMCONF' })
|
||||||
|
ordemconf: number;
|
||||||
|
|
||||||
|
@Column({ name: 'IDSOFITVIEW' })
|
||||||
|
idsofitview: string;
|
||||||
|
|
||||||
|
@Column({ name: 'ULTIMASITUACAOCFAT' })
|
||||||
|
ultimasituacaocfat: string;
|
||||||
|
|
||||||
|
@Column({ name: 'DATAULTIMASITUACAOCFAT' })
|
||||||
|
dataultimasituacaocfat: Date;
|
||||||
|
|
||||||
|
@OneToMany(type => Pcnfsaid, notas => notas.pccarreg)
|
||||||
|
notas: Pcnfsaid[];
|
||||||
|
|
||||||
|
@OneToMany(type => Pcpedc, pedidos => pedidos.pccarreg)
|
||||||
|
pedidos: Pcnfsaid[];
|
||||||
|
|
||||||
|
@OneToOne(type => Pcempr)
|
||||||
|
@JoinColumn({ name: 'CODMOTORISTA' })
|
||||||
|
motorista: Pcempr;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryColumn } from "typeorm";
|
||||||
|
import { Esttipoproduto } from './esttipoproduto.entity';
|
||||||
|
import { Pcsecao } from './pcsecao.entity';
|
||||||
|
|
||||||
|
@Entity("PCCATEGORIA")
|
||||||
|
export class Pccategoria {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: "CODSEC"})
|
||||||
|
codigoSecao: number;
|
||||||
|
|
||||||
|
@PrimaryColumn({name: "CODCATEGORIA"})
|
||||||
|
codigoCategoria: number;
|
||||||
|
|
||||||
|
@Column({name: "CATEGORIA"})
|
||||||
|
descricao: string;
|
||||||
|
|
||||||
|
@ManyToOne(() => Pcsecao, secao => secao.categorias)
|
||||||
|
@JoinColumn({name: 'CODSEC'})
|
||||||
|
secao: Pcsecao;
|
||||||
|
|
||||||
|
@OneToMany(() => Esttipoproduto, tipoProduto => tipoProduto.categoria)
|
||||||
|
tiposProduto: Esttipoproduto[];
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { Column, Entity, OneToMany, PrimaryColumn } from "typeorm";
|
||||||
|
import { Esttipoproduto } from "./esttipoproduto.entity";
|
||||||
|
|
||||||
|
@Entity("PCCEST")
|
||||||
|
export class Pccest {
|
||||||
|
|
||||||
|
@PrimaryColumn({name: "CODIGO"})
|
||||||
|
codigo: number;
|
||||||
|
|
||||||
|
@Column({name: "CODCEST"})
|
||||||
|
codigoCest: string;
|
||||||
|
|
||||||
|
@Column({name: "DESCRICAOCEST"})
|
||||||
|
descricao: string;
|
||||||
|
|
||||||
|
@Column({name: "NCM"})
|
||||||
|
codigoNcm: string;
|
||||||
|
|
||||||
|
@OneToMany(() => Esttipoproduto, tipoProduto => tipoProduto.registrocest)
|
||||||
|
tiposProduto: Esttipoproduto[];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
|
@Entity('PCCIDADE')
|
||||||
|
export class Pccidade {
|
||||||
|
@PrimaryColumn({ name: 'CODCIDADE' })
|
||||||
|
codcidade: number;
|
||||||
|
|
||||||
|
@Column({ name: 'NOMECIDADE' })
|
||||||
|
nomecidade: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODIBGE' })
|
||||||
|
codibge: number;
|
||||||
|
|
||||||
|
@Column({ name: 'UF' })
|
||||||
|
uf: string;
|
||||||
|
|
||||||
|
@Column({ name: 'POPULACAO' })
|
||||||
|
populacao: number;
|
||||||
|
|
||||||
|
@Column({ name: 'CODMUNESTADUAL' })
|
||||||
|
codmunestadual: number;
|
||||||
|
|
||||||
|
@Column({ name: 'UTILIZAFRETETRANSP' })
|
||||||
|
utilizafretetransp: string;
|
||||||
|
|
||||||
|
@Column({ name: 'CODMUNSIAFI' })
|
||||||
|
codmunsiafi: number;
|
||||||
|
|
||||||
|
@Column({ name: 'DTMXSALTER' })
|
||||||
|
dtmxsalter: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'LATITUDE' })
|
||||||
|
latitude: string;
|
||||||
|
|
||||||
|
@Column({ name: 'LONGITUDE' })
|
||||||
|
longitude: string;
|
||||||
|
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue