From 47e7f75720581641242167259c8d126a22cabcf3 Mon Sep 17 00:00:00 2001 From: Felipe Batista Date: Mon, 27 Jan 2025 17:44:27 -0300 Subject: [PATCH] commit --- .eslintrc.js | 24 + .gitignore | 35 + .prettierrc | 4 + README.md | 75 + certificado/Chaves_Certificado_digital.txt | 55 + certificado/appsoluti.key | 28 + certificado/appsoluti.pem | 24 + certificado/certificado_JURU.pfx | Bin 0 -> 9268 bytes nest-cli.json | 15 + package-lock.json | 10534 ++++++++++++++++ package.json | 92 + scripts/create_entity.sql | 8 + scripts/estprotocoloentrega.sql | 8 + scripts/estshopping.sql | 25 + scripts/estusuario.sql | 10 + scripts/estvenda.sql | 16 + src/.vscode/settings.json | 3 + .../access-control.controller.ts | 48 + .../access-control/access-control.module.ts | 16 + .../access-control/access-control.service.ts | 261 + src/Auth/auth.module.ts | 10 + src/Auth/controllers/user.controller.ts | 132 + src/Auth/guards/auth.guard.ts | 17 + src/Auth/interceptors/role.interceptor.ts | 32 + src/Auth/interfaces/jwt-payload.interface.ts | 8 + src/Auth/services/auth.service.ts | 24 + src/Auth/services/user.service.ts | 197 + src/Auth/strategies/jwt-strategy.ts | 24 + src/Interceptors/validador.interceptor.ts | 22 + src/app.controller.spec.ts | 22 + src/app.controller.ts | 14 + src/app.module.ts | 101 + src/app.service.ts | 8 + src/backoffice/backoffice.module.ts | 10 + .../category/category.controller.ts | 24 + src/backoffice/category/category.module.ts | 15 + src/backoffice/category/category.service.ts | 22 + src/backoffice/cest/cest.controller.ts | 38 + src/backoffice/cest/cest.module.ts | 15 + src/backoffice/cest/cest.service.ts | 35 + .../department/department.controller.ts | 35 + .../department/department.module.ts | 14 + .../department/department.service.ts | 47 + .../dictionary/dictionary.controller.ts | 64 + .../dictionary/dictionary.module.ts | 30 + .../dictionary/dictionary.service.ts | 84 + src/backoffice/lists/lists.controller.ts | 97 + src/backoffice/lists/lists.module.ts | 12 + src/backoffice/lists/lists.service.ts | 302 + .../measureproduct.controller.ts | 61 + .../measureproduct/measureproduct.module.ts | 30 + .../measureproduct/measureproduct.service.ts | 85 + src/backoffice/messages/messages.module.ts | 15 + .../messages/whatsapp/whatsapp.controller.ts | 42 + .../messages/whatsapp/whatsapp.service.ts | 58 + src/backoffice/ncm/ncm.controller.ts | 52 + src/backoffice/ncm/ncm.module.ts | 15 + src/backoffice/ncm/ncm.service.ts | 39 + .../product-type/product-type.controller.ts | 81 + .../product-type/product-type.module.ts | 15 + .../product-type/product-type.service.ts | 165 + src/backoffice/product/product.controller.ts | 34 + src/backoffice/product/product.service.ts | 48 + src/backoffice/section/section.controller.ts | 24 + src/backoffice/section/section.module.ts | 14 + src/backoffice/section/section.service.ts | 22 + src/configs/typeorm.config.ts | 32 + src/contracts/contract.ts | 4 + src/contracts/dictionary.contract.ts | 19 + src/delivery/delivery.module.ts | 15 + .../order/delivery-order.controller.ts | 47 + src/delivery/order/delivery-order.service.ts | 227 + src/delivery/orders/orders.controller.ts | 22 + src/delivery/orders/orders.service.ts | 127 + src/delivery/services/shipping.controller.ts | 29 + src/delivery/services/shipping.service.ts | 161 + .../entity/Scripts/Criacao_Views_Sales.sql | 50 + .../entity/tables/estabreviatura.entity.ts | 15 + .../entity/tables/estavisoestoque.entity.ts | 33 + .../tables/estcategoriacliente.entity.ts | 10 + .../tables/estcategoriaparceiro.entity.ts | 18 + .../entity/tables/estfaixaparceiro.entity.ts | 33 + .../entity/tables/estimagemnota.entity.ts | 30 + .../entity/tables/estmedidaproduto.entity.ts | 21 + .../entity/tables/estpagamento.entity.ts | 56 + .../entity/tables/estparceiro.entity.ts | 108 + .../entity/tables/estprevendac.entity.ts | 63 + .../entity/tables/estprevendai.entity.ts | 117 + .../entity/tables/estprotocolo.entity.ts | 30 + src/domain/entity/tables/estruptura.entity.ts | 58 + .../tables/estsubcategoriacliente.entity.ts | 14 + .../entity/tables/esttipoproduto.entity.ts | 56 + src/domain/entity/tables/estusuario.enity.ts | 27 + src/domain/entity/tables/estvenda.entity.ts | 44 + .../tables/estvendaprecliente.entity.ts | 27 + src/domain/entity/tables/pccaixa.entity.ts | 15 + src/domain/entity/tables/pccarreg.entity.ts | 421 + .../entity/tables/pccategoria.entity.ts | 25 + src/domain/entity/tables/pccest.entity.ts | 22 + src/domain/entity/tables/pccidade.entity.ts | 38 + src/domain/entity/tables/pcclient.entity.ts | 1646 +++ .../entity/tables/pcclientendent.entity.ts | 82 + src/domain/entity/tables/pccob.entity.ts | 269 + src/domain/entity/tables/pcconsum.entity.ts | 9 + src/domain/entity/tables/pcdepto.entity.ts | 24 + src/domain/entity/tables/pcempr.entity.ts | 559 + src/domain/entity/tables/pcfilial.entity.ts | 15 + src/domain/entity/tables/pcmarca.entity.ts | 15 + src/domain/entity/tables/pcncm.entity.ts | 22 + src/domain/entity/tables/pcnfsaid.entity.ts | 1910 +++ .../entity/tables/pcorcavendac.entity.ts | 232 + .../entity/tables/pcorcavendai.entity.ts | 95 + src/domain/entity/tables/pcpedc.entity.ts | 1538 +++ src/domain/entity/tables/pcpedctemp.entity.ts | 473 + src/domain/entity/tables/pcpedi.entity.ts | 62 + src/domain/entity/tables/pcpeditemp.entity.ts | 170 + src/domain/entity/tables/pcplpag.entity.ts | 211 + src/domain/entity/tables/pcpraca.entity.ts | 10 + src/domain/entity/tables/pcprodut.entity.ts | 30 + src/domain/entity/tables/pcsecao.entity.ts | 31 + src/domain/entity/tables/pctabtrib.entity.ts | 17 + src/domain/entity/tables/pcusuari.entity.ts | 19 + .../entity/views/esvanalisevendarca.entity.ts | 53 + .../entity/views/esvcategoria.entity.ts | 28 + .../entity/views/esvdepartamento.entity.ts | 20 + .../views/esventregaslojascliente.entity.ts | 46 + .../views/esventregasporcliente.entity.ts | 52 + .../entity/views/esvestoquevenda.entity.ts | 32 + .../views/esvorcamento_pedido.entity.ts | 39 + .../views/esvparcelamentovenda.entity.ts | 23 + .../entity/views/esvprecovenda.entity.ts | 25 + .../views/esvprodutospromocao.entity.ts | 84 + .../entity/views/esvprodutosvenda.entity.ts | 100 + .../entity/views/esvretiralojas.entity.ts | 19 + src/domain/entity/views/esvsecao.entity.ts | 30 + .../entity/views/esvsituacaopedido.entity.ts | 20 + src/domain/models/address.model.ts | 27 + .../calculate-price-tintometrico.model.ts | 11 + src/domain/models/cart-itens.model.ts | 12 + src/domain/models/cart.model.ts | 31 + src/domain/models/cep.model.ts | 12 + src/domain/models/change-password.model.ts | 4 + .../models/create-payment-partner.model.ts | 7 + src/domain/models/create-user.model.ts | 7 + src/domain/models/customer.model.ts | 60 + src/domain/models/delivery-order.model.ts | 12 + src/domain/models/dictionary.model.ts | 9 + src/domain/models/filter-product.model.ts | 15 + src/domain/models/geolocation-cep.model.ts | 10 + src/domain/models/google-geocode.model.ts | 29 + src/domain/models/image-order.model.ts | 12 + src/domain/models/index-action.model.ts | 16 + src/domain/models/log-order.model.ts | 7 + src/domain/models/measureproduct.model.ts | 14 + src/domain/models/message-whatsapp.model.ts | 20 + src/domain/models/notify.model.ts | 11 + src/domain/models/order-discount.model.ts | 6 + src/domain/models/order-taxdelivery.model.ts | 6 + src/domain/models/partner-category.model.ts | 11 + src/domain/models/partner-range.model.ts | 10 + src/domain/models/partner.model.ts | 36 + src/domain/models/payment.model.ts | 18 + src/domain/models/product-type.model.ts | 14 + src/domain/models/reset-password.model.ts | 3 + src/domain/models/result.model.ts | 8 + src/domain/models/rupture.model.ts | 10 + src/domain/models/shopping-item.model.ts | 33 + src/domain/models/user.model.ts | 10 + src/domain/models/via-cep.model.ts | 12 + .../Faturamento_Filial_Rca_Fornecedor.mrt | 1888 +++ .../reports_model/faturamentoFornecedor.mrt | 606 + .../reports_model/faturamentoFornecedor1.mrt | 598 + src/domain/repository/tables.respository.ts | 19 + src/google/google.module.ts | 20 + src/google/google.service.ts | 36 + src/main.ts | 24 + .../partner-category.controller.ts | 68 + .../partner-category.module.ts | 17 + .../partner-category.service.ts | 148 + src/partner-range/partner-range.controller.ts | 61 + src/partner-range/partner-range.module.ts | 16 + src/partner-range/partner-range.service.ts | 146 + src/partner/partner.controller.ts | 96 + src/partner/partner.module.ts | 19 + src/partner/partner.service.ts | 557 + src/payment/mindee.controller.ts | 19 + src/payment/mindee.module.ts | 16 + src/payment/mindee.service.ts | 123 + src/process.env | 3 + .../address-customer.controller.ts | 69 + .../address-customer.module.ts | 12 + .../address-customer.service.ts | 360 + src/sales/cep/cep.controller.ts | 43 + src/sales/cep/cep.module.ts | 27 + src/sales/cep/cep.service.ts | 88 + src/sales/customer/customer.controller.ts | 109 + src/sales/customer/customer.module.ts | 12 + src/sales/customer/customer.service.ts | 663 + src/sales/dashboard/dashboard.controller.ts | 44 + src/sales/dashboard/dashboard.module.ts | 16 + src/sales/dashboard/dashboard.service.ts | 705 ++ src/sales/order/order.controller.ts | 154 + src/sales/order/order.module.ts | 30 + src/sales/order/order.service.ts | 1177 ++ src/sales/payment/pix/payment-pix.module.ts | 15 + .../pix/santander/models/auth-token.model.ts | 11 + .../pix/santander/models/cob-pix.model.ts | 72 + .../pix/santander/models/create-cob.model.ts | 50 + .../santander/models/order-payment.model.ts | 5 + .../pix/santander/pix-santander.controller.ts | 22 + .../pix/santander/pix-santander.service.ts | 159 + src/sales/pre-order/pre-order.controller.ts | 95 + src/sales/pre-order/pre-order.module.ts | 23 + src/sales/pre-order/pre-order.service.ts | 506 + src/sales/sales/sales.controller.ts | 283 + src/sales/sales/sales.module.ts | 11 + src/sales/sales/sales.service.ts | 1665 +++ src/sales/shopping/shopping.controller.ts | 168 + src/sales/shopping/shopping.module.ts | 17 + src/sales/shopping/shopping.service.ts | 717 ++ .../tintometrico/tintometrico.controller.ts | 41 + src/sales/tintometrico/tintometrico.module.ts | 16 + .../tintometrico/tintometrico.service.ts | 58 + src/schedules/report/report.controller.ts | 22 + src/schedules/report/report.service.ts | 50 + src/seller/seller.controller.ts | 22 + src/seller/seller.module.ts | 16 + src/seller/seller.service.ts | 31 + src/services/custom-logger.service.ts | 21 + src/shared/services/shared.service.ts | 167 + .../services/tools/datetime.function.ts | 10 + src/shared/shared.module.ts | 15 + src/utils/flunt.ts | 27 + src/utils/number.utils.ts | 6 + test/app.e2e-spec.ts | 24 + test/jest-e2e.json | 9 + tsconfig.build.json | 4 + tsconfig.json | 15 + 238 files changed, 36425 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 README.md create mode 100644 certificado/Chaves_Certificado_digital.txt create mode 100644 certificado/appsoluti.key create mode 100644 certificado/appsoluti.pem create mode 100644 certificado/certificado_JURU.pfx create mode 100644 nest-cli.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 scripts/create_entity.sql create mode 100644 scripts/estprotocoloentrega.sql create mode 100644 scripts/estshopping.sql create mode 100644 scripts/estusuario.sql create mode 100644 scripts/estvenda.sql create mode 100644 src/.vscode/settings.json create mode 100644 src/Auth/access-control/access-control.controller.ts create mode 100644 src/Auth/access-control/access-control.module.ts create mode 100644 src/Auth/access-control/access-control.service.ts create mode 100644 src/Auth/auth.module.ts create mode 100644 src/Auth/controllers/user.controller.ts create mode 100644 src/Auth/guards/auth.guard.ts create mode 100644 src/Auth/interceptors/role.interceptor.ts create mode 100644 src/Auth/interfaces/jwt-payload.interface.ts create mode 100644 src/Auth/services/auth.service.ts create mode 100644 src/Auth/services/user.service.ts create mode 100644 src/Auth/strategies/jwt-strategy.ts create mode 100644 src/Interceptors/validador.interceptor.ts create mode 100644 src/app.controller.spec.ts create mode 100644 src/app.controller.ts create mode 100644 src/app.module.ts create mode 100644 src/app.service.ts create mode 100644 src/backoffice/backoffice.module.ts create mode 100644 src/backoffice/category/category.controller.ts create mode 100644 src/backoffice/category/category.module.ts create mode 100644 src/backoffice/category/category.service.ts create mode 100644 src/backoffice/cest/cest.controller.ts create mode 100644 src/backoffice/cest/cest.module.ts create mode 100644 src/backoffice/cest/cest.service.ts create mode 100644 src/backoffice/department/department.controller.ts create mode 100644 src/backoffice/department/department.module.ts create mode 100644 src/backoffice/department/department.service.ts create mode 100644 src/backoffice/dictionary/dictionary.controller.ts create mode 100644 src/backoffice/dictionary/dictionary.module.ts create mode 100644 src/backoffice/dictionary/dictionary.service.ts create mode 100644 src/backoffice/lists/lists.controller.ts create mode 100644 src/backoffice/lists/lists.module.ts create mode 100644 src/backoffice/lists/lists.service.ts create mode 100644 src/backoffice/measureproduct/measureproduct.controller.ts create mode 100644 src/backoffice/measureproduct/measureproduct.module.ts create mode 100644 src/backoffice/measureproduct/measureproduct.service.ts create mode 100644 src/backoffice/messages/messages.module.ts create mode 100644 src/backoffice/messages/whatsapp/whatsapp.controller.ts create mode 100644 src/backoffice/messages/whatsapp/whatsapp.service.ts create mode 100644 src/backoffice/ncm/ncm.controller.ts create mode 100644 src/backoffice/ncm/ncm.module.ts create mode 100644 src/backoffice/ncm/ncm.service.ts create mode 100644 src/backoffice/product-type/product-type.controller.ts create mode 100644 src/backoffice/product-type/product-type.module.ts create mode 100644 src/backoffice/product-type/product-type.service.ts create mode 100644 src/backoffice/product/product.controller.ts create mode 100644 src/backoffice/product/product.service.ts create mode 100644 src/backoffice/section/section.controller.ts create mode 100644 src/backoffice/section/section.module.ts create mode 100644 src/backoffice/section/section.service.ts create mode 100644 src/configs/typeorm.config.ts create mode 100644 src/contracts/contract.ts create mode 100644 src/contracts/dictionary.contract.ts create mode 100644 src/delivery/delivery.module.ts create mode 100644 src/delivery/order/delivery-order.controller.ts create mode 100644 src/delivery/order/delivery-order.service.ts create mode 100644 src/delivery/orders/orders.controller.ts create mode 100644 src/delivery/orders/orders.service.ts create mode 100644 src/delivery/services/shipping.controller.ts create mode 100644 src/delivery/services/shipping.service.ts create mode 100644 src/domain/entity/Scripts/Criacao_Views_Sales.sql create mode 100644 src/domain/entity/tables/estabreviatura.entity.ts create mode 100644 src/domain/entity/tables/estavisoestoque.entity.ts create mode 100644 src/domain/entity/tables/estcategoriacliente.entity.ts create mode 100644 src/domain/entity/tables/estcategoriaparceiro.entity.ts create mode 100644 src/domain/entity/tables/estfaixaparceiro.entity.ts create mode 100644 src/domain/entity/tables/estimagemnota.entity.ts create mode 100644 src/domain/entity/tables/estmedidaproduto.entity.ts create mode 100644 src/domain/entity/tables/estpagamento.entity.ts create mode 100644 src/domain/entity/tables/estparceiro.entity.ts create mode 100644 src/domain/entity/tables/estprevendac.entity.ts create mode 100644 src/domain/entity/tables/estprevendai.entity.ts create mode 100644 src/domain/entity/tables/estprotocolo.entity.ts create mode 100644 src/domain/entity/tables/estruptura.entity.ts create mode 100644 src/domain/entity/tables/estsubcategoriacliente.entity.ts create mode 100644 src/domain/entity/tables/esttipoproduto.entity.ts create mode 100644 src/domain/entity/tables/estusuario.enity.ts create mode 100644 src/domain/entity/tables/estvenda.entity.ts create mode 100644 src/domain/entity/tables/estvendaprecliente.entity.ts create mode 100644 src/domain/entity/tables/pccaixa.entity.ts create mode 100644 src/domain/entity/tables/pccarreg.entity.ts create mode 100644 src/domain/entity/tables/pccategoria.entity.ts create mode 100644 src/domain/entity/tables/pccest.entity.ts create mode 100644 src/domain/entity/tables/pccidade.entity.ts create mode 100644 src/domain/entity/tables/pcclient.entity.ts create mode 100644 src/domain/entity/tables/pcclientendent.entity.ts create mode 100644 src/domain/entity/tables/pccob.entity.ts create mode 100644 src/domain/entity/tables/pcconsum.entity.ts create mode 100644 src/domain/entity/tables/pcdepto.entity.ts create mode 100644 src/domain/entity/tables/pcempr.entity.ts create mode 100644 src/domain/entity/tables/pcfilial.entity.ts create mode 100644 src/domain/entity/tables/pcmarca.entity.ts create mode 100644 src/domain/entity/tables/pcncm.entity.ts create mode 100644 src/domain/entity/tables/pcnfsaid.entity.ts create mode 100644 src/domain/entity/tables/pcorcavendac.entity.ts create mode 100644 src/domain/entity/tables/pcorcavendai.entity.ts create mode 100644 src/domain/entity/tables/pcpedc.entity.ts create mode 100644 src/domain/entity/tables/pcpedctemp.entity.ts create mode 100644 src/domain/entity/tables/pcpedi.entity.ts create mode 100644 src/domain/entity/tables/pcpeditemp.entity.ts create mode 100644 src/domain/entity/tables/pcplpag.entity.ts create mode 100644 src/domain/entity/tables/pcpraca.entity.ts create mode 100644 src/domain/entity/tables/pcprodut.entity.ts create mode 100644 src/domain/entity/tables/pcsecao.entity.ts create mode 100644 src/domain/entity/tables/pctabtrib.entity.ts create mode 100644 src/domain/entity/tables/pcusuari.entity.ts create mode 100644 src/domain/entity/views/esvanalisevendarca.entity.ts create mode 100644 src/domain/entity/views/esvcategoria.entity.ts create mode 100644 src/domain/entity/views/esvdepartamento.entity.ts create mode 100644 src/domain/entity/views/esventregaslojascliente.entity.ts create mode 100644 src/domain/entity/views/esventregasporcliente.entity.ts create mode 100644 src/domain/entity/views/esvestoquevenda.entity.ts create mode 100644 src/domain/entity/views/esvorcamento_pedido.entity.ts create mode 100644 src/domain/entity/views/esvparcelamentovenda.entity.ts create mode 100644 src/domain/entity/views/esvprecovenda.entity.ts create mode 100644 src/domain/entity/views/esvprodutospromocao.entity.ts create mode 100644 src/domain/entity/views/esvprodutosvenda.entity.ts create mode 100644 src/domain/entity/views/esvretiralojas.entity.ts create mode 100644 src/domain/entity/views/esvsecao.entity.ts create mode 100644 src/domain/entity/views/esvsituacaopedido.entity.ts create mode 100644 src/domain/models/address.model.ts create mode 100644 src/domain/models/calculate-price-tintometrico.model.ts create mode 100644 src/domain/models/cart-itens.model.ts create mode 100644 src/domain/models/cart.model.ts create mode 100644 src/domain/models/cep.model.ts create mode 100644 src/domain/models/change-password.model.ts create mode 100644 src/domain/models/create-payment-partner.model.ts create mode 100644 src/domain/models/create-user.model.ts create mode 100644 src/domain/models/customer.model.ts create mode 100644 src/domain/models/delivery-order.model.ts create mode 100644 src/domain/models/dictionary.model.ts create mode 100644 src/domain/models/filter-product.model.ts create mode 100644 src/domain/models/geolocation-cep.model.ts create mode 100644 src/domain/models/google-geocode.model.ts create mode 100644 src/domain/models/image-order.model.ts create mode 100644 src/domain/models/index-action.model.ts create mode 100644 src/domain/models/log-order.model.ts create mode 100644 src/domain/models/measureproduct.model.ts create mode 100644 src/domain/models/message-whatsapp.model.ts create mode 100644 src/domain/models/notify.model.ts create mode 100644 src/domain/models/order-discount.model.ts create mode 100644 src/domain/models/order-taxdelivery.model.ts create mode 100644 src/domain/models/partner-category.model.ts create mode 100644 src/domain/models/partner-range.model.ts create mode 100644 src/domain/models/partner.model.ts create mode 100644 src/domain/models/payment.model.ts create mode 100644 src/domain/models/product-type.model.ts create mode 100644 src/domain/models/reset-password.model.ts create mode 100644 src/domain/models/result.model.ts create mode 100644 src/domain/models/rupture.model.ts create mode 100644 src/domain/models/shopping-item.model.ts create mode 100644 src/domain/models/user.model.ts create mode 100644 src/domain/models/via-cep.model.ts create mode 100644 src/domain/reports_model/Faturamento_Filial_Rca_Fornecedor.mrt create mode 100644 src/domain/reports_model/faturamentoFornecedor.mrt create mode 100644 src/domain/reports_model/faturamentoFornecedor1.mrt create mode 100644 src/domain/repository/tables.respository.ts create mode 100644 src/google/google.module.ts create mode 100644 src/google/google.service.ts create mode 100644 src/main.ts create mode 100644 src/partner-category/partner-category.controller.ts create mode 100644 src/partner-category/partner-category.module.ts create mode 100644 src/partner-category/partner-category.service.ts create mode 100644 src/partner-range/partner-range.controller.ts create mode 100644 src/partner-range/partner-range.module.ts create mode 100644 src/partner-range/partner-range.service.ts create mode 100644 src/partner/partner.controller.ts create mode 100644 src/partner/partner.module.ts create mode 100644 src/partner/partner.service.ts create mode 100644 src/payment/mindee.controller.ts create mode 100644 src/payment/mindee.module.ts create mode 100644 src/payment/mindee.service.ts create mode 100644 src/process.env create mode 100644 src/sales/address-customer/address-customer.controller.ts create mode 100644 src/sales/address-customer/address-customer.module.ts create mode 100644 src/sales/address-customer/address-customer.service.ts create mode 100644 src/sales/cep/cep.controller.ts create mode 100644 src/sales/cep/cep.module.ts create mode 100644 src/sales/cep/cep.service.ts create mode 100644 src/sales/customer/customer.controller.ts create mode 100644 src/sales/customer/customer.module.ts create mode 100644 src/sales/customer/customer.service.ts create mode 100644 src/sales/dashboard/dashboard.controller.ts create mode 100644 src/sales/dashboard/dashboard.module.ts create mode 100644 src/sales/dashboard/dashboard.service.ts create mode 100644 src/sales/order/order.controller.ts create mode 100644 src/sales/order/order.module.ts create mode 100644 src/sales/order/order.service.ts create mode 100644 src/sales/payment/pix/payment-pix.module.ts create mode 100644 src/sales/payment/pix/santander/models/auth-token.model.ts create mode 100644 src/sales/payment/pix/santander/models/cob-pix.model.ts create mode 100644 src/sales/payment/pix/santander/models/create-cob.model.ts create mode 100644 src/sales/payment/pix/santander/models/order-payment.model.ts create mode 100644 src/sales/payment/pix/santander/pix-santander.controller.ts create mode 100644 src/sales/payment/pix/santander/pix-santander.service.ts create mode 100644 src/sales/pre-order/pre-order.controller.ts create mode 100644 src/sales/pre-order/pre-order.module.ts create mode 100644 src/sales/pre-order/pre-order.service.ts create mode 100644 src/sales/sales/sales.controller.ts create mode 100644 src/sales/sales/sales.module.ts create mode 100644 src/sales/sales/sales.service.ts create mode 100644 src/sales/shopping/shopping.controller.ts create mode 100644 src/sales/shopping/shopping.module.ts create mode 100644 src/sales/shopping/shopping.service.ts create mode 100644 src/sales/tintometrico/tintometrico.controller.ts create mode 100644 src/sales/tintometrico/tintometrico.module.ts create mode 100644 src/sales/tintometrico/tintometrico.service.ts create mode 100644 src/schedules/report/report.controller.ts create mode 100644 src/schedules/report/report.service.ts create mode 100644 src/seller/seller.controller.ts create mode 100644 src/seller/seller.module.ts create mode 100644 src/seller/seller.service.ts create mode 100644 src/services/custom-logger.service.ts create mode 100644 src/shared/services/shared.service.ts create mode 100644 src/shared/services/tools/datetime.function.ts create mode 100644 src/shared/shared.module.ts create mode 100644 src/utils/flunt.ts create mode 100644 src/utils/number.utils.ts create mode 100644 test/app.e2e-spec.ts create mode 100644 test/jest-e2e.json create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..0ae17ca --- /dev/null +++ b/.eslintrc.js @@ -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', + }, +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62da189 --- /dev/null +++ b/.gitignore @@ -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 + diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..dcb7279 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a59ef92 --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +

+ Nest Logo +

+ +[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 + +

A progressive Node.js framework for building efficient and scalable server-side applications, heavily inspired by Angular.

+

+NPM Version +Package License +NPM Downloads +Travis +Linux +Coverage +Gitter +Backers on Open Collective +Sponsors on Open Collective + + +

+ + +## 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). diff --git a/certificado/Chaves_Certificado_digital.txt b/certificado/Chaves_Certificado_digital.txt new file mode 100644 index 0000000..6537a48 --- /dev/null +++ b/certificado/Chaves_Certificado_digital.txt @@ -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----- diff --git a/certificado/appsoluti.key b/certificado/appsoluti.key new file mode 100644 index 0000000..e71ed1e --- /dev/null +++ b/certificado/appsoluti.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----- \ No newline at end of file diff --git a/certificado/appsoluti.pem b/certificado/appsoluti.pem new file mode 100644 index 0000000..0524c9f --- /dev/null +++ b/certificado/appsoluti.pem @@ -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----- \ No newline at end of file diff --git a/certificado/certificado_JURU.pfx b/certificado/certificado_JURU.pfx new file mode 100644 index 0000000000000000000000000000000000000000..a5e115a28152d3e05542685124fda69f25cd8818 GIT binary patch literal 9268 zcmY*;V{|1zv+apBvCWBX+qP|cCbn(c)+7_#wr!l)PVRhnz5DKaU8|~h?dtuv`p0JU z2L%CR^oN9@4wVdjh6jNH$@d2jBwb+)Bwb((#J~UF0c3t4{^37r7Ze2W?^^rc2?!%4 zB<%mu{{Vqx!~sX6F>}huEokI3(@*f@=G7QoMKwzR1qBEA2jb`FEhg$+Z0K~e*jAI$ znDw-^$3ocay_p~UJ(}^QHZk+u>(VcM{1~R&6y$TwE7*Y8 zLE-83ER_{{zb@7Lj4=q`W=%(fiCFQXnB+SQP=ATSa2OL4e!;0_a z3I@9uC&K&X?(c;;9;%*W7+BEVY-`ypb*sw zMD<3Dqnb3zvcs0z;6+ljNa6W?J8c+OJ{z+cR397%Uqu0v{;Bi)f!C=x(77VuqXSt~ zadb5Y&+j4Vy|7L1^p1TVZ_whB&yA2%wVsrz64?|$M5(Mv7(WAUvl^Q7?8*hzeU+J% z3}CVim!)}@Aqk8OsZW#6InCzco5Y3TzGeYhe2$_zJ3G-$`ltdjTl%o~w-9yF9;s}& zi)d*XNDL?MPGqN{=r7jJ5$D}x^1Wnc_hB5x_UR8yNg<=e!wqISg0JnlOjQKhHBfv& zA`fRRG1|lA!~>$~fiAn3j-7BxUpRpDpazhk)t+QiVX@GkTX0@<^zpqaV+<}uvyuT5 z7)LvmzB`eJ!xRZNAgzAR$q>KN-C@OyXGx8Gi4(Ui1-mIG-LDgTGJyI9T#umUW(6Mr zpcgf$d6}@zFWFEWv_?5@o5rnJ3Qi_Bo>M*Q-&_1Ji3|a8n7L$y$T*@7yQqQI@}$fJi!BEOzpMoKL(?7)Gtl6}ul0S}8C z@JK!yIytu^!cNP=!XHc^zDfWB#m*wZRiYMiuDex#7bs$;jAm%4nJPx09ARrw79Zmb8C9r%0 zQlD0{U4crFu{qYZ_*_n2n`pcn5U|>JQQv1^>{IQl$p?mp$%-!QFDIQZh@*^K_(wq` zDY%}FJPtm2XVNUIZLo|EK%;qUDoy#~k$X2zQ|M^`Fq%>Dm`gJqhug!u@B0xIacV`P z2>T~AAOPB$)Zil-k`bAIE~Bc842*wpQBL$$w)i&b2|c9#jqf^2H9bzhq0h*JYS@?{ zs9s!jNB^!D9pN`?^#+wy7g05%+TLq=swb!$x><6ho;j~6snMNaToCOZ#}O*3fW?iv zo7UEATW3k~YC#M0CN@si5rsQCwC5eioV!1(lGq2~@U0bEZbc#9 zuBEepBXZV}(7Lc2=EUxImk#~1?=6plsnPzl7|uy7nG76>UeIVw6^e?FmEZY4D;zy~ z9$mf?u(S3oyOJ9Rv)NUtm*=vitRAOAzI=UZ-y2!@Y&gSrKe10nZGUXtI1Erb&eR+A zTr;!*HC9B>cgpAcmqOXBbn6H$bHL_v{(2OkfTt;LHaxBEM5R!xgUiNUt(dPDA}J?a}Gv7{1Z1OXt`VYe~RE z)zT@M%xHVaGCqva>XKx9Xg`Di92wed0o9*@v=KpATk!Q< zXx`%MQX4wU@0eu8q8}ZWUBMh32)AWg^1kNUR}o2;qa3yd4+b~j#3RbvKiUy#9a_rw z^po8sP$gkyiY*D)>*-@5Fi@-0!wX^GlmPZB(L{{S{J1xWfD`30%N5b!70tr{Jsa(z zC9&foM!0LbAepAc;&_gvnTxArv(1VsvPz=cQWh8Ce_!uPl@s$Rur^RCe?5OMqK*Q6 z(kpz?1@q;I%}lOUiG$wM0neP`k-HS}-tiuKtBXr6F4z zFze1!gZg8Gz-~0(FiV_&=&p@Vb0|k`B}Wrj;-w; z6ux-~(|Mmn-Ab%OOk{ zFOZ7`LrGaGSsMAW+V~sZS{#PcUvmzdK{i219p(3;jh_nEa$sbsIEYZpn`u`7N9%D` zdj!T?O?(5_yy0!#)qn(bhd9D64Rjo+$QN4+X%4<-cD{oaDhFl=^vaJFMbEWTmcuqj zw}DY<_Bt5#+F`81+1Zf;y1?#lIh8I+|1NZf`v`@_o1%&AGov3HMYKk)aGBYkij0nq zJI!HDnz7Oci2(nWYAaUdZJgNT&OZW`(O6zzDyT2Fl|T3#VNRYGRfRbXDNO1IS?v)& z+M2Xs_CcDulvt1n=iCx* z+X&cU)dqhUXVGHP!=%MS!CrGoT-!1U?n4uBo&B5bm(Y9wwe#Y+XjA`jSiiAb5(`{l z6u;LjD?geE$wEHijV%%kBf~|PW>OSkv>lIP?QvMvLl+sZ1|2IrX*>Zp=*to`u@U;3 zSu0`%EgG+V9)9w)nP~=+C#CM-9_!0peRp*_!szr$zT`6^LoO^#b!BatUVV_ zYb^nR1Ldx8G0~H&m_9T69vdEN5R`l9AP}&iYEC+>=_+;X89Zj9j6a~AorOB;bc(qS&w$?G2VE}zv@j=~U#W&Cnch0% z3?bn~UXS*Sv{DZH`i=qxV{3`UVAaZ@O|WH>14(`!sbY7kg9znY1=cE3QHNSZvuo5s`-QvRDWNUEJXn!dSDW2R`Iq40HQiF*VNt zAU(H2o}$xrLnoaSp|q9shXg@IG$RpJ!Bp*P)cca7D-x!fQ$cCY)rh)^wwe)3w@sI3 zEVVWbe1#91g)p%?;syG%j&1NqOs8z~xItcZFn{pDK(ZidtsAF@l$v(LpBVhaDMlN+ z*6jCWKYab#CyGAz@S9yS#|u&EjG>dDDwcQg)^~@fqEFp%gG)td2stoZCI?eoYrTut zhVQrb>YYUtg8rFn_URd8v?0^GMR?vARMYw`usT<|SEDz&8Mjk$jBj&zcnOy|0+{hf zWz=@c*!>yw2D|zp^i1xQaPxumEMlZq*fU}QISBIT>-?(xG)1uQ5ab_d+zV$Ls%7Ug z&z~D~_BLKd?f$1-1+3&GJ8|1n&oM{ILm;T|3EYE(*W=ZjU{Bb;*3Bj~O>FkJmqNc# zQ9`A(Z7e{hiWYSKs0zcRGr{sx-!Zw~G}OvCG_M|3t>h^XWE9kDs$W65?7sWL!GRxD zv7m$yytGmS+>4c;MnMNalvipmEpwfGv$#j*;mXAeEJ;3lNf}5=MZWZX+&zC|Sxf&a zO1Ju*Y<@jG{M56gCxb68d%Jg=!;}#?BIV_trErC7hyt#ZDJpLhJsjogeT(t~;%B;2 zZIkFviGrLH1MVc6m$d+5+YKf(&-jxhW!GcmXMSVGs!@qzID3P`+9rn#=A zU5~U&+O_`JCHQKIZ|VZuX9`{?H|Lo9b3{o?IK8u^!U8hqDd?f5`XktF34V*^uWiG= z+j=R6y#*0g$U-k82!=qZ>hbpK_*(6cN)Ou*xfaavw_=CPug&@f^LQ1}7|HtcjL zf&y<0E#{QNN)~Xnmk7qHV;Q2q;BCM4EWLcERn%r!r`aJklMsFMYwrL2A&Zll3N@E7 ze2J+z8gUXM*2-fb&B2|LUoY(dvbAsI{cvBHG~8-neThH7V_!Lo5Q<(-S`75x$!nn} zdN=DmbVi!5MN2mVR;wN3Os&S^@~LkWG~Wk-nK-YQgSI>>RDT>cTEjR1ta1LTyEVt^ zC7mSlAf#6Xhzm3$`nM0)<@Z-e@J#Hk2KZ%tJjrDd3|#f1R*O%BbZeFrFum>Lg85)y zqd6;&qhJ8ycFT0v8@smh>p=dPY-p6#EdO{Y5HX6D<9p1{H~lj?7cl7nd=Ii!>M^iX z@__0xZc{qaU0`%RV~vlP^18B~Y=5)9ziJ`LdD;MKOT5y)PByQ9-OTv^JxNfoFQgx7 zX0EP`K}_BSP(3^NQb`!Blc<(*Q4j7trA|| z$vrGPo(4@$dSp_vM$kVF%qbG{^$Xsi=ny zDW#_Ff{#Z5dV+8fgw3;uK35lVk07z?0Yzo)aCmweSbOljl@3I@X7RvgqJ_6YWR7|o zP!BiG+BTI7enVe^DeQ#ZN8$XxpJDsJ2hNvGQa7|u(dPpdqF9i$G)ku`*q!X&o7RS*0HI~>tJ6>?*9J|l}2UBJA-%&-Eh|(!$ z*34p -@m-C|!#{tjo(>JmEH9_}$`JFAr3y=HvFC|iq#AzRk4epMYwld7!qZ}k< z$Ov7CCa_ElsRLj_r$?vVaDB?}IvJ*+d31DBP7N+48FY2DWcuYq(KZxjx|dOEQv5l3 zJ(boE(hXcBPdf*;w5lVwP#*|aC3L9vbp@jP1LdXAVKmopAbr8mj?sAGf;9e+-m=qU zs*x2k?7R?vemKw6>3Zgssj>2A^+eMu234Urf@#tdr>Aitf?p7>5cxdiN(kvJ+a17^ zLv>f^Xil6GFma+vA!RNi6_^L_jbX~{gSVEZ+J`0Ng?-vf;--O!Bpy1bo7MCW2Z`Y{ zUmjKMd`}nlyo06|B50%MLy5OWZaO%Bq)A)aY=?BVscYkFuc3>%;7V9ccgJqzTj_9A z@GrJwcp%Z*oKKJO)!OeMZ3jY>O@-KxeKkp{g9broT9Tv09W&i2C2BqdQ$;zi4nO}A zK9wu-L9o6Nx>Q#7gA8*S*e3i?#!i=NiMB+rD%VNs;x`=RHE?RWesHc@!4;3YCiZ)| zgQ37&IJY*{|IPNT!bEgoD0>Q~7z)chAuH|f)h^)MATm+a7huB1?@9P>IjWD=w|ia_ zU&P2}twM2o3A~2ImXRewGQa9cwU_MrgE$R5`U?&8c-XP!Fh3~m|B)@@Z^=G=vz^7SZ z7mDL*xq%gQ*h4%(^=h#9EW?Vc1jMvyIy|G**1r>w4!`5%k z1Gsro=*yO>5|@|xv-~#nsEY0*=vX3SAZ=O5fk=j=7^HN$C@@JK&v@K;D&ztoUA+Ax zARuBT38O;0TvSd{ISgY7o?yrP-j+Z_g}Pg@{x>lsjG|lL<_20SI|riL!24`?lPVK6 zNcQIx74(#51o*KF47+7cQ0c612KsgrFIZ;ORiXLW2#HVtmdL9?IgQ|{!RZ+tBe9{< zfwf(6yOhCWIzjFV-JWz5toNp0AFJhSLakDgp|98}M!@0#Wk%wqf1=Fn0)l_}9a8-m z=hoWW%1J85W1!>3r__CR{gg-4SSk+wWVF$tj6`Ph_?#Yp?yB_cff&#|5+;`DIpb(B ziT0XRfTc8|dwu_oxali$q6^Psk%W~$;g(2pTVKL%s(;5~yMK%vraG-^iwy-~lf<#E zb>xbz0hL`Skgl*oSDv~}gXhZa3}XgMT$1Xlm4tdnrcyPvlkAHV^9Bc%uCSd*zG0-- zL*-eFveL#mML!a~7@&ZYbo#XC%$<j?bO5pxX-4(3}=~T_dAbzz<*Qm+tU)gCig+hrv z^>8Ti(EhmV+sp{k^72{*Q|w`{2Mt<`R-0hX5dU1f@6In|gGp`E39&O}9vc$@AbW$Q zb6ezqg|{=4Jl%s{ivw_92PsizTXdvHmyqE3eUn zfJ+N%}xDSqTwOh?n}?WP_kk0oH<0a6NVMU~OfOAimE&9s3*y6f(J@U6q)qPDS@4 z6E2ANEzTkWe1Zxm$xtFd4l0rnv$XM%_BCdBBqA&+G`&vn57Y6zHU#`Mnp(*Fwy!<| zmmB78Udz$yn98rxnwapk#ZqQ7Pf6|A##^sGjZ1NI#};p+s~%goG)COurUE-Tth$qx zy(GAn9f7Z^g%pHClUV3IbVY%@?y+!gsWDTaU4hyGl+7Jy25*F@xZ%Pj*;CLaIG(yyLXG*HQaaV zh(_4FL9!~8p%!*|DIc$9b8NZe1PlxtY{uQ;xl`n>^+YmdS(_j*ollq(hLAn2hUAo2 zP~t+U{`nd0d=}RG;yhn_eSMLPY9d>#$k=oHE2))AQ&e*hE2rA@If&Rv zixw#7LuR8TR<* zIbvvHQm+izqKSF{Bm{^!98NUhb|T7`R9?emVSMBAYf1PSROQ(sC>{^zucIGBnf$-9 zABNV*!`R+;`Atxa( zv+kmV7`0-Bb6QoAEVi85!bs(|qY%Hq#B>1q_l3%yPi)DAPdrhI6zj*0odYoO+)xRh zb!rMW+-*RF|6ny$7PjH}dKrD~i-7dY43`fkx z%iR9**V^YR&Tdv@iL_9-z@<=8myS%>wIJ5V#wXKpGfuxSMPoX;?$Pf>rzy|YnmU!9 zo3@vIn(XD0K3bNm4mxJ4!F11L+atlH4Q5Wc2U25&pG=FkWcT$aTUeU*QM<)|*)w?f zC2~Rx91JWIlu$rtrfKNJj{(&ehL}RwYl+@#r>C-LBv`5Z#W))qv4`ft<>v|!#)vLG%H4A@VVyvfAEDng_a8>pA zVL;d9GY+W`J+Y0s+k>t`yCj{j&!m4lwZ}>a^lRDC*RzY6$M^<(kH`;*+8A#kcDG+_ z`l^A(Up}A>>?RA$i;e7xXz!x4qbk($9HOZv6^1onVXMchGX_Ge{y*k!ejvmccp${k zKf3QB&x{`CJjz+nGzfEOPy_Hip3fKtzfdT22;Edg0rGXHUa z!2`iZ38;qW5~E9KV9gj8(;cht&Wr+fer0}F7cwRCK*2CCN5FeZd$t3g)Q)r98TOnk@)T`i2Q`g z_M*%8Rd4>4siVTIVG_4uEnMo5v?w6H+}e2-m^dTfd0L}=Qq+0=NBhqxQ+yjRdU%A} zR`Tmn^?nEgRfO6vGRlBF4`}1g5Xu(`U{7zZ#H9Y(rG$^_WT+Wm7u6%72KRYrkzE;^ z;5sB@+pcdeJMC5vOR_<>*OW7hA!=e)3Sr@)phw&iI>D$|46kEDw0QUADB?JM11}1G zic6eu62mhUtiwWO)FSEiO7|`1e(G6k7ptI7^Dg$uTtyhxU86UY=U` zElf75bsK9w53xOo2Pg5N!F!Vnz3QDWHSu~t4^YWc!{wx(T^CP}nUXj7weP69{wjVv zT3eJeB~|+C9SNe%2NFYe9n?S+r1a|l*eW)?*605H%YXN!%Ukk{_QkW=uh@zdvHmG; zp)><2PiWh&{Xpa`5Nn6}r(4j*3>U|ac&m}h_iW`W4H{jLG#+l)x9(Lb^vW_!3y8~qG4IF;*{gZP`Ji^4{K9nLo^ZUIil!;Jjbt< zeaZ+Eg!{1|GI8AHDLk(3)sApx>T2IUci(;bc&mBX6fe9614(AUFj-UZE(9l5P%k0m zw1xv9mBDzh-JVhA9bB*c47f)cEwCxnmQ48~yuc;285vzL{=66B@>V?A^K~=}M-fZ@ zcr_Z0^zU;-t$8Wskr6%!;wryO(1mN7=i>RxoC&hC7l)nF7q$UXKgGu6RZ*>GX1D;| z(2xFvj2rS7PBT5vhghp(e|^^*nerk*uR4Uyocg|eI#A*5L`E5LAsRUTAj#alDFZDKGe*zW9y}2tDd%BA&T6KcirwK zuukHS7^d+y6eeDrpP3V*`_p zQx6iuYr8XYD7??{7k?a(A#=e-5R*C5T(BcicVoE>0GCzC>U#g2(0(rW=wx-qP05d> z7S>7%rnjH#qBFu>8O@bEk2 zBSy~2`%A?=ElDL9&hfr#ko Y^E5-%`b>lB!c-1ujCS*X7B~R#UrdF>1poj5 literal 0 HcmV?d00001 diff --git a/nest-cli.json b/nest-cli.json new file mode 100644 index 0000000..b897cac --- /dev/null +++ b/nest-cli.json @@ -0,0 +1,15 @@ +{ + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "plugins": [ + { + "name": "@nestjs/swagger", + "options": { + "classValidatorShim": false, + "introspectComments": true + } + } + ] + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..074b46d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10534 @@ +{ + "name": "venda_web", + "version": "2023.5.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/core": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.3.tgz", + "integrity": "sha512-gJRiBj0gWDR2VtIvLvwwc/GM2MZvg1xw69ZbBJ1VuUgDqPBHdC8q3UMW3B82wdhxK+RBYa7ZOJxtIVggaHkm9g==", + "dev": true, + "requires": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.0.3.tgz", + "integrity": "sha512-VZnqgnnfyzyMluIDvGp+ZlDU2P9BnjrhacBOdqBS/jNQ7oxyE0AWrUApGXcejOJ13Z7pEf31E64P3bImcjwP+A==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.0.3", + "ora": "5.1.0", + "rxjs": "6.6.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/schematics-cli": { + "version": "0.1100.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-0.1100.3.tgz", + "integrity": "sha512-dECFHCDTgWfSHosfKTeQoyTgUUqgJaftxg4DxA23sMsQtDb1U8ZsIIPpH+L4QhCDT2zlhv51ynd5RUgu28h2DQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.0.3", + "@angular-devkit/schematics": "11.0.3", + "@schematics/schematics": "0.1100.3", + "ansi-colors": "4.1.1", + "inquirer": "7.3.3", + "minimist": "1.2.5", + "symbol-observable": "2.0.3" + } + }, + "@azure/ms-rest-azure-env": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-azure-env/-/ms-rest-azure-env-1.1.2.tgz", + "integrity": "sha512-l7z0DPCi2Hp88w12JhDTtx5d0Y3+vhfE7JKJb9O7sEz71Cwp053N8piTtTnnk/tUor9oZHgEKi/p3tQQmLPjvA==" + }, + "@azure/ms-rest-js": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.11.0.tgz", + "integrity": "sha512-trr1yW795X8GbdXk3UP8rJB4xN2KzW5vANTBFlp0Ys9nZcvyk8fdBkZWdUqsudnJUu3YKe4w4j0oRoqqR29x5Q==", + "requires": { + "axios": "^0.21.1", + "form-data": "^2.3.2", + "tough-cookie": "^2.4.3", + "tslib": "^1.9.2", + "tunnel": "0.0.6", + "uuid": "^3.2.1", + "xml2js": "^0.4.19" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "@azure/ms-rest-nodeauth": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-nodeauth/-/ms-rest-nodeauth-2.0.2.tgz", + "integrity": "sha512-KmNNICOxt3EwViAJI3iu2VH8t8BQg5J2rSAyO4IUYLF9ZwlyYsP419pdvl4NBUhluAP2cgN7dfD2V6E6NOMZlQ==", + "requires": { + "@azure/ms-rest-azure-env": "^1.1.2", + "@azure/ms-rest-js": "^1.8.7", + "adal-node": "^0.1.28" + } + }, + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/core": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.13.tgz", + "integrity": "sha512-BQKE9kXkPlXHPeqissfxo0lySWJcYdEP0hdtJOH/iJfDdhOCcgtNCjftCJg3qqauB4h+lz2N6ixM++b9DN1Tcw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.13", + "@babel/helper-module-transforms": "^7.12.13", + "@babel/helpers": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@babel/types": "^7.12.13", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.12.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.15.tgz", + "integrity": "sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.13.tgz", + "integrity": "sha512-B+7nN0gIL8FZ8SvMcF+EPyB21KnCcZHQZFczCxbiNGV/O0rsrSBlWGLzmtBJ3GMjSVMIm4lpFhR+VdVBuIsUcQ==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", + "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz", + "integrity": "sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13", + "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@babel/types": "^7.12.13", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz", + "integrity": "sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz", + "integrity": "sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", + "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.13.tgz", + "integrity": "sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.12.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.15.tgz", + "integrity": "sha512-AQBOU2Z9kWwSZMd6lNjCX0GUgFonL1wAM1db8L8PMk9UDaGsRCArBkU4Sc+UCM3AE4hjbXx+h58Lb3QT4oRmrA==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/runtime": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz", + "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz", + "integrity": "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true + }, + "@jest/console": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", + "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-message-util": "^25.5.0", + "jest-util": "^25.5.0", + "slash": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@jest/core": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz", + "integrity": "sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==", + "dev": true, + "requires": { + "@jest/console": "^25.5.0", + "@jest/reporters": "^25.5.1", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^25.5.0", + "jest-config": "^25.5.4", + "jest-haste-map": "^25.5.1", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-resolve-dependencies": "^25.5.4", + "jest-runner": "^25.5.4", + "jest-runtime": "^25.5.4", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "jest-watcher": "^25.5.0", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "realpath-native": "^2.0.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@jest/environment": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", + "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0" + } + }, + "@jest/fake-timers": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", + "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "lolex": "^5.0.0" + } + }, + "@jest/globals": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", + "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", + "dev": true, + "requires": { + "@jest/environment": "^25.5.0", + "@jest/types": "^25.5.0", + "expect": "^25.5.0" + } + }, + "@jest/reporters": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz", + "integrity": "sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^25.5.1", + "jest-resolve": "^25.5.1", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "node-notifier": "^6.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^3.1.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^4.1.3" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", + "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", + "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", + "dev": true, + "requires": { + "@jest/console": "^25.5.0", + "@jest/types": "^25.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", + "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", + "dev": true, + "requires": { + "@jest/test-result": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-runner": "^25.5.4", + "jest-runtime": "^25.5.4" + } + }, + "@jest/transform": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", + "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^25.5.0", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^3.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-regex-util": "^25.2.6", + "jest-util": "^25.5.0", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@jimp/bmp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz", + "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz", + "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/custom": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz", + "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.16.1" + } + }, + "@jimp/gif": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz", + "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz", + "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "jpeg-js": "0.4.2" + } + }, + "@jimp/plugin-blit": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz", + "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-blur": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz", + "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-circle": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz", + "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-color": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz", + "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz", + "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-cover": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz", + "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-crop": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz", + "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-displace": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz", + "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-dither": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz", + "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz", + "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-flip": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz", + "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz", + "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-invert": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz", + "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-mask": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz", + "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-normalize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz", + "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-print": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz", + "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz", + "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-rotate": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz", + "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-scale": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz", + "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-shadow": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz", + "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-threshold": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz", + "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugins": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz", + "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.16.1", + "@jimp/plugin-blur": "^0.16.1", + "@jimp/plugin-circle": "^0.16.1", + "@jimp/plugin-color": "^0.16.1", + "@jimp/plugin-contain": "^0.16.1", + "@jimp/plugin-cover": "^0.16.1", + "@jimp/plugin-crop": "^0.16.1", + "@jimp/plugin-displace": "^0.16.1", + "@jimp/plugin-dither": "^0.16.1", + "@jimp/plugin-fisheye": "^0.16.1", + "@jimp/plugin-flip": "^0.16.1", + "@jimp/plugin-gaussian": "^0.16.1", + "@jimp/plugin-invert": "^0.16.1", + "@jimp/plugin-mask": "^0.16.1", + "@jimp/plugin-normalize": "^0.16.1", + "@jimp/plugin-print": "^0.16.1", + "@jimp/plugin-resize": "^0.16.1", + "@jimp/plugin-rotate": "^0.16.1", + "@jimp/plugin-scale": "^0.16.1", + "@jimp/plugin-shadow": "^0.16.1", + "@jimp/plugin-threshold": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz", + "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz", + "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz", + "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.16.1", + "@jimp/gif": "^0.16.1", + "@jimp/jpeg": "^0.16.1", + "@jimp/png": "^0.16.1", + "@jimp/tiff": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz", + "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==", + "requires": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "@nestjs/cli": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-7.5.4.tgz", + "integrity": "sha512-qKdniSA7NXO/5HqSxGaalMS7roIJXeT4yXTadBQ47Qv68DHh/0jfCcTzH6hqCuyRV7DV2k0bxob+rq4peMaZBw==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.0.3", + "@angular-devkit/schematics": "11.0.3", + "@angular-devkit/schematics-cli": "0.1100.3", + "@nestjs/schematics": "^7.1.0", + "@types/webpack": "4.41.25", + "chalk": "3.0.0", + "chokidar": "3.4.3", + "cli-table3": "0.5.1", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "6.0.5", + "inquirer": "7.3.3", + "node-emoji": "1.10.0", + "ora": "5.1.0", + "os-name": "4.0.0", + "rimraf": "3.0.2", + "shelljs": "0.8.4", + "tree-kill": "1.2.2", + "tsconfig-paths": "3.9.0", + "tsconfig-paths-webpack-plugin": "3.3.0", + "typescript": "4.0.5", + "webpack": "5.9.0", + "webpack-node-externals": "2.5.2" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "typescript": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", + "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", + "dev": true + } + } + }, + "@nestjs/common": { + "version": "7.6.11", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-7.6.11.tgz", + "integrity": "sha512-DPBqoORDJC9xO/c83ZXNdUk9rIOLZ1Joqt8hYVtGROMIt7+s4zdbiUOWbNLPhUwluIVczYt4bFjhoU6HWoePgA==", + "requires": { + "axios": "0.21.1", + "iterare": "1.2.1", + "tslib": "2.1.0", + "uuid": "8.3.2" + }, + "dependencies": { + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + } + } + }, + "@nestjs/config": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-0.5.0.tgz", + "integrity": "sha512-8vgakV722qNt3YBHbvhfwcNRLlwOv37pr5/1RUn5mYMmUh7JKobVNqHgTRWEuJK4BK3dCrhnjxPMPvHOCaA4LQ==", + "requires": { + "dotenv": "8.2.0", + "dotenv-expand": "5.1.0", + "lodash.get": "4.4.2", + "lodash.set": "4.3.2", + "uuid": "8.1.0" + }, + "dependencies": { + "uuid": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.1.0.tgz", + "integrity": "sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg==" + } + } + }, + "@nestjs/core": { + "version": "7.6.11", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-7.6.11.tgz", + "integrity": "sha512-Knjzy755Er2Nainv/kNqnfQVz8JnCFmqOZbMOZ4IYHzUcfM+Qt/w5rAQQRwRjmpqbyCte4FcVVbv0cU2jBOb/Q==", + "requires": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.0.7", + "iterare": "1.2.1", + "object-hash": "2.1.1", + "path-to-regexp": "3.2.0", + "tslib": "2.1.0", + "uuid": "8.3.2" + } + }, + "@nestjs/jwt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-7.2.0.tgz", + "integrity": "sha512-uOTqYmWNpu+oS/MrdYjrWXtKGV4HkCYmAEVEFPP/KfiP/7K6fNy+boLllE6cnqESAXh9u0CLa1noAAavs+LHEQ==", + "requires": { + "@types/jsonwebtoken": "8.5.0", + "jsonwebtoken": "8.5.1" + } + }, + "@nestjs/mapped-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-0.4.1.tgz", + "integrity": "sha512-JXrw2LMangSU3vnaXWXVX47GRG1FbbNh4aVBbidDjxT3zlghsoNQY6qyWtT001MCl8lJGo8I6i6+DurBRRxl/Q==" + }, + "@nestjs/passport": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-7.1.5.tgz", + "integrity": "sha512-Hu9hPxTdBZA0C4GrWTsSflzwsJ99oAk9jqAwpcszdFNqfjMjkPGuCM9QsVZbBP2bE8fxrVrPsNOILS6puY8e/A==" + }, + "@nestjs/platform-express": { + "version": "7.6.11", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-7.6.11.tgz", + "integrity": "sha512-YNlkhoNfu9QswnIQ0Syzzbxy7CKR3kp4+t8SDX4Pz5ZvJ/5NDQzUHTEg3QUoh8L4IG2/nXHC/gUICQP/fuovJw==", + "requires": { + "body-parser": "1.19.0", + "cors": "2.8.5", + "express": "4.17.1", + "multer": "1.4.2", + "tslib": "2.1.0" + } + }, + "@nestjs/schematics": { + "version": "7.2.7", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-7.2.7.tgz", + "integrity": "sha512-71XqMPf7s2P1Q6PVMDLbSLphVWgGDK2CgURVYyreuIWXVSoi9pcPIeO5k0Qb5n5jELlKwdrf66g05U2I6TIxzg==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.1.0", + "@angular-devkit/schematics": "11.1.0", + "fs-extra": "9.1.0", + "pluralize": "8.0.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.1.0.tgz", + "integrity": "sha512-O2oIcqpQKGvYJH88d/NCgLYZGc9laA1eo2d1s0FH1Udu4c2L+bAsviQqtTKNmzyaqODHrlkt+eKx7uakdwWtnQ==", + "dev": true, + "requires": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@angular-devkit/schematics": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.1.0.tgz", + "integrity": "sha512-6qfR5w1jyk8MC+5Tfimz+Czsq3WlsVoB57dpxSZfhGGsv1Vxc8Q41y5f3BrAyEqHYjcH7NtaoLQoJjtra5KaAg==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.1.0", + "ora": "5.2.0", + "rxjs": "6.6.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "bl": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.4.tgz", + "integrity": "sha512-7tdr4EpSd7jJ6tuQ21vu2ke8w7pNEstzj1O8wwq6sNNzO3UDi5MA8Gny/gquCj7r2C6fHudg8tKRGyjRgmvNxQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ora": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.2.0.tgz", + "integrity": "sha512-+wG2v8TUU8EgzPHun1k/n45pXquQ9fHnbXVetl9rRgO6kjZszGGbraF3XPTIdgeA+s1lbRjSEftAnyT0w8ZMvQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@nestjs/swagger": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-4.8.2.tgz", + "integrity": "sha512-RSUwcVxrzXF7/b/IZ5lXnYHJ6jIGS9wWRTJKIt1kIaCNWT+0wRfTlAyhQkzs2g35/PTXJEcdIwwY7mBO/bwHzw==", + "requires": { + "@nestjs/mapped-types": "0.4.1", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + } + } + }, + "@nestjs/testing": { + "version": "7.6.11", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-7.6.11.tgz", + "integrity": "sha512-wSJcXo5dO5lf2PTYTw1gfT9C0aZhFJd9VfN4dsZYS8nRqDhwT0V3VF7FP6Rrjk2QCtw0PNprI3gozmNvx+oDfA==", + "dev": true, + "requires": { + "optional": "0.1.4", + "tslib": "2.1.0" + } + }, + "@nestjs/typeorm": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-7.1.5.tgz", + "integrity": "sha512-utE1FkYM/gyCXUqw3zKYYS0YZ3DfkAnzsCx4T48cNnSDTCeWS+u3yt0FMDFjwSiQSaLrzpiSff/FaxJQvRlYow==", + "requires": { + "uuid": "8.3.1" + }, + "dependencies": { + "uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" + } + } + }, + "@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + } + }, + "@pdf-lib/standard-fonts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz", + "integrity": "sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==", + "requires": { + "pako": "^1.0.6" + } + }, + "@pdf-lib/upng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pdf-lib/upng/-/upng-1.0.1.tgz", + "integrity": "sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==", + "requires": { + "pako": "^1.0.10" + } + }, + "@schematics/schematics": { + "version": "0.1100.3", + "resolved": "https://registry.npmjs.org/@schematics/schematics/-/schematics-0.1100.3.tgz", + "integrity": "sha512-tzjKnjD90FQ4LgRN9ALT2qCqgJYZrAKoy1embFJRuGKA8vv1hTG4JonVDqQEUoNwTc9r/Ok2Z1eenAI9TSUd1A==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.0.3", + "@angular-devkit/schematics": "11.0.3" + } + }, + "@sinonjs/commons": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", + "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sqltools/formatter": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.2.tgz", + "integrity": "sha512-/5O7Fq6Vnv8L6ucmPjaWbVG1XkP4FO+w5glqfkIsq3Xw4oyNAdJddbnYodNDAfjVUvo/rrSCTom4kAND7T1o5Q==" + }, + "@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", + "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz", + "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", + "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", + "dev": true + }, + "@types/eslint": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz", + "integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "@types/estree": { + "version": "0.0.45", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", + "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", + "dev": true + }, + "@types/express": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", + "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz", + "integrity": "sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", + "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "25.1.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.1.4.tgz", + "integrity": "sha512-QDDY2uNAhCV7TMCITrxz+MRk1EizcsevzfeS6LykIlq2V1E5oO4wXG8V2ZEd9w7Snxeeagk46YbMgZ8ESHx3sw==", + "dev": true, + "requires": { + "jest-diff": "^25.1.0", + "pretty-format": "^25.1.0" + } + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/jsonwebtoken": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz", + "integrity": "sha512-9bVao7LvyorRGZCw0VmH/dr7Og+NdjYSsKAxB43OQoComFbBgsEpoR9JW6+qSq/ogwVBg8GI2MfAlk4SYI4OLg==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "14.14.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz", + "integrity": "sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ==" + } + } + }, + "@types/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-556YJ7ejzxIqSSxzyGGpctuZOarNZJt/zlEkhmmDc1f/slOEANHuwu2ZX7YaZ40rMiWoxt8GvAhoDpW1cmSy6A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/node": { + "version": "13.13.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.41.tgz", + "integrity": "sha512-qLT9IvHiXJfdrje9VmsLzun7cQ65obsBTmtU3EOnCSLFOoSHx1hpiRHoBnpdbyFqnzqdUUIv81JcEJQCB8un9g==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", + "dev": true + }, + "@types/qs": { + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", + "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "dev": true + }, + "@types/readable-stream": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.9.tgz", + "integrity": "sha512-sqsgQqFT7HmQz/V5jH1O0fvQQnXAJO46Gg9LRO/JPfjmVmGUlcx831TZZO3Y3HtWhIkzf3kTsNT0Z0kzIhIvZw==", + "requires": { + "@types/node": "*", + "safe-buffer": "*" + }, + "dependencies": { + "@types/node": { + "version": "14.14.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz", + "integrity": "sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ==" + } + } + }, + "@types/serve-static": { + "version": "1.13.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", + "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/superagent": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz", + "integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==", + "dev": true, + "requires": { + "@types/cookiejar": "*", + "@types/node": "*" + } + }, + "@types/supertest": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.10.tgz", + "integrity": "sha512-Xt8TbEyZTnD5Xulw95GLMOkmjGICrOQyJ2jqgkSjAUR3mm7pAIzSR0NFBaMcwlzVvlpCjNwbATcWWwjNiZiFrQ==", + "dev": true, + "requires": { + "@types/superagent": "*" + } + }, + "@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", + "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.12.0.tgz", + "integrity": "sha512-sYAF+CF9XZ5cvEBkI7RtrG9g2GtMBkviTnBxYYyq+8BWvO4QtXfwwR6a2LFwCi4evMKZfpv6U43ViYvv17Wz3Q==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/webpack": { + "version": "4.41.25", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz", + "integrity": "sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ==", + "dev": true, + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/webpack-sources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz", + "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", + "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz", + "integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, + "adal-node": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/adal-node/-/adal-node-0.1.28.tgz", + "integrity": "sha1-RoxLs+u9lrEnBmn0ucuk4AZepIU=", + "requires": { + "@types/node": "^8.0.47", + "async": ">=0.6.0", + "date-utils": "*", + "jws": "3.x.x", + "request": ">= 2.52.0", + "underscore": ">= 1.3.1", + "uuid": "^3.1.0", + "xmldom": ">= 0.1.x", + "xpath.js": "~1.1.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-root-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", + "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==" + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-includes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", + "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "get-intrinsic": "^1.0.1", + "is-string": "^1.0.5" + } + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "babel-jest": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", + "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", + "dev": true, + "requires": { + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", + "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", + "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", + "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^25.5.0", + "babel-preset-current-node-syntax": "^0.1.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.1.tgz", + "integrity": "sha512-jrCW5ZhfQ/Vt07WX1Ngs+yn9BDqPL/gw28S7s9H6QK/gupnizNzJAss5akW20ISgOrbLTlXOOCTJeNUQqruAWQ==", + "requires": { + "readable-stream": "^3.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-manager": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.4.0.tgz", + "integrity": "sha512-+WtL5sKHGngtnzTHNFA6+gC0wjpAAUmwmprXOSeaCBOkohM8Nh7GvV8fC90NFrDh7m3i87AshGd39/yYbWNtWA==", + "requires": { + "async": "^3.2.0", + "lodash": "^4.17.20", + "lru-cache": "6.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001185", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz", + "integrity": "sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-highlight": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.10.tgz", + "integrity": "sha512-CcPFD3JwdQ2oSzy+AMG6j3LRTkNjM82kzcSKzoVw6cLanDCJNlsLjeqVTOTfOfucnWv5F0rmBemVf1m9JiIasw==", + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.0.0", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + } + }, + "cli-spinners": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", + "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", + "dev": true + }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "optional": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "crc": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", + "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "date-utils": { + "version": "1.2.21", + "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz", + "integrity": "sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.657", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.657.tgz", + "integrity": "sha512-/9ROOyvEflEbaZFUeGofD+Tqs/WynbSTbNgNF+/TJJxH1ePD/e6VjZlDJpW3FFFd3nj5l3Hd8ki2vRwy+gyRFw==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true + }, + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expect": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", + "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "figlet": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", + "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.0.5.tgz", + "integrity": "sha512-2jIHv2RhXzSxWtvRQX/ZtOxd5joo+FQYzn+sJ/hyLqApKGgvjMEMF951GnvuSNPheGsqiVzIDjvSZo1qRtry1Q==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", + "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.1.tgz", + "integrity": "sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gifwrap": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.2.tgz", + "integrity": "sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==", + "requires": { + "image-q": "^1.1.1", + "omggif": "^1.0.10" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.5.tgz", + "integrity": "sha512-kBBSQbz2K0Nyn+31j/w36fUfxkBW9/gfwRWdUY1ULReH3iokVJgddZAFcD1D0xlgTmFxJCbUkUclAlc6/IDJkw==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, + "guid-typescript": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", + "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "highlight.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.6.0.tgz", + "integrity": "sha512-8mlRcn5vk/r4+QcqerapwBYTe+iPL5ih6xrNylxrnBdHQiijDETfXX7VIxC3UiCRiINBJfANBAsPzAvRQj8RpQ==" + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-basic": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-2.5.1.tgz", + "integrity": "sha1-jORHvbW2xXf4pj4/p4BW7Eu02/s=", + "requires": { + "caseless": "~0.11.0", + "concat-stream": "^1.4.6", + "http-response-object": "^1.0.0" + }, + "dependencies": { + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" + } + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-response-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-1.1.0.tgz", + "integrity": "sha1-p8TnWq6C87tJBOT0P2FWc7TVGMM=" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "image-q": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz", + "integrity": "sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true, + "optional": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==" + }, + "jest": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz", + "integrity": "sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==", + "dev": true, + "requires": { + "@jest/core": "^25.5.4", + "import-local": "^3.0.2", + "jest-cli": "^25.5.4" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "jest-cli": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz", + "integrity": "sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==", + "dev": true, + "requires": { + "@jest/core": "^25.5.4", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^25.5.4", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "prompts": "^2.0.1", + "realpath-native": "^2.0.0", + "yargs": "^15.3.1" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-changed-files": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", + "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "execa": "^3.2.0", + "throat": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + } + } + }, + "jest-config": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", + "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^25.5.4", + "@jest/types": "^25.5.0", + "babel-jest": "^25.5.1", + "chalk": "^3.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^25.5.0", + "jest-environment-node": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-jasmine2": "^25.5.4", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "micromatch": "^4.0.2", + "pretty-format": "^25.5.0", + "realpath-native": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-diff": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", + "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-docblock": { + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", + "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", + "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-get-type": "^25.2.6", + "jest-util": "^25.5.0", + "pretty-format": "^25.5.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", + "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", + "dev": true, + "requires": { + "@jest/environment": "^25.5.0", + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "jsdom": "^15.2.1" + } + }, + "jest-environment-node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", + "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", + "dev": true, + "requires": { + "@jest/environment": "^25.5.0", + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "jest-get-type": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", + "dev": true + }, + "jest-haste-map": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", + "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "@types/graceful-fs": "^4.1.2", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-serializer": "^25.5.0", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7", + "which": "^2.0.2" + }, + "dependencies": { + "jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + } + } + }, + "jest-jasmine2": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", + "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^25.5.0", + "@jest/source-map": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "co": "^4.6.0", + "expect": "^25.5.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^25.5.0", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-runtime": "^25.5.4", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "pretty-format": "^25.5.0", + "throat": "^5.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-leak-detector": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", + "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", + "dev": true, + "requires": { + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + } + }, + "jest-matcher-utils": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", + "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-mock": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", + "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true + }, + "jest-regex-util": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "dev": true + }, + "jest-resolve": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", + "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "browser-resolve": "^1.11.3", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.1", + "read-pkg-up": "^7.0.1", + "realpath-native": "^2.0.0", + "resolve": "^1.17.0", + "slash": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "jest-resolve-dependencies": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", + "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-snapshot": "^25.5.1" + } + }, + "jest-runner": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", + "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", + "dev": true, + "requires": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-docblock": "^25.3.0", + "jest-haste-map": "^25.5.1", + "jest-jasmine2": "^25.5.4", + "jest-leak-detector": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "jest-runtime": "^25.5.4", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + } + } + }, + "jest-runtime": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", + "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", + "dev": true, + "requires": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/globals": "^25.5.2", + "@jest/source-map": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-haste-map": "^25.5.1", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.3.1" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", + "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4" + } + }, + "jest-snapshot": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", + "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/prettier": "^1.19.0", + "chalk": "^3.0.0", + "expect": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "make-dir": "^3.0.0", + "natural-compare": "^1.4.0", + "pretty-format": "^25.5.0", + "semver": "^6.3.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-validate": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", + "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "jest-get-type": "^25.2.6", + "leven": "^3.1.0", + "pretty-format": "^25.5.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-watcher": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", + "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", + "dev": true, + "requires": { + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "jest-util": "^25.5.0", + "string-length": "^3.1.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "jimp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", + "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.16.1", + "@jimp/plugins": "^0.16.1", + "@jimp/types": "^0.16.1", + "regenerator-runtime": "^0.13.3" + } + }, + "jpeg-js": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz", + "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbi": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.1.4.tgz", + "integrity": "sha512-52QRRFSsi9impURE8ZUbzAMCLjPm4THO7H2fcuIvaaeFTbSysvkodbQQXIVsNgq/ypDbq6dJiuGKL0vZ/i9hUg==" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + } + } + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "lolex": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", + "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "macos-release": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz", + "integrity": "sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg==", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "md5-typescript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/md5-typescript/-/md5-typescript-1.0.5.tgz", + "integrity": "sha1-aMCyTf+OXTFi5Jj6mJO2O+cuA48=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memfs": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.0.tgz", + "integrity": "sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A==", + "dev": true, + "requires": { + "fs-monkey": "1.0.1" + } + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" + }, + "mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "requires": { + "mime-db": "1.45.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "mindee": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/mindee/-/mindee-3.7.3.tgz", + "integrity": "sha512-Y4UTkzkTQZKRKBjXAVnErRe1rkJrHbrcT04XlidL4GnY1Enm3BSgAXnnhYY8Q2Q1+thDRvKzl4ExAY8yeGmVxA==", + "requires": { + "commander": "~9.4.1", + "file-type": "~16.5.4", + "form-data": "~3.0.1", + "mrz": "~3.2.1", + "pdf-lib": "~1.17.1" + }, + "dependencies": { + "commander": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==" + }, + "file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "requires": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mrz": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/mrz/-/mrz-3.2.1.tgz", + "integrity": "sha512-PgsFFqXke1lXHUoyzb2mQ12wqppv2nPLQbLTOQsKS21D0ysTn49QW9pghb+upKEk/XHL2JhVd95hS+dg1PoOVg==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "mssql": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-6.3.1.tgz", + "integrity": "sha512-ammxrhbdDpcBWhiZLiy6miiU7ELt9qFbGvwmPbiufn+tBHAYUFR/AgwE4/v4jzPzbatowscmhFx1U61L91uVzQ==", + "requires": { + "debug": "^4.3.1", + "tarn": "^1.1.5", + "tedious": "^6.7.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "mysql": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", + "requires": { + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-duplexpair": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", + "integrity": "sha1-eJkHjmS/PIo9cyYBs9QP8F21j6A=" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "dev": true, + "requires": { + "lodash.toarray": "^4.4.0" + } + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-firebird": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/node-firebird/-/node-firebird-0.8.10.tgz", + "integrity": "sha512-0nf75Vu2Z6ohzaJTQT45+lS7YNhaxF6f2PqlSnx1jJLondfdkgmB3dUVyiq27mmX8j54ii5f6QNdTH6wT4ReOQ==", + "requires": { + "long": "^4.0.0" + } + }, + "node-geocoder": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-geocoder/-/node-geocoder-4.2.0.tgz", + "integrity": "sha512-ZvUiOHWHLVGlrYPvazXj+VQ9oK+EOMinh/5vWoBwOQiV0eCU7GPtEWrMRNnKvmBVOzZHb1eFe9uoKMFeyygMVA==", + "requires": { + "bluebird": "^3.5.2", + "node-fetch": "^2.6.0" + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==" + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz", + "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==", + "dev": true, + "optional": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.1.1", + "semver": "^6.3.0", + "shellwords": "^0.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "optional": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "optional": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-releases": { + "version": "1.1.70", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", + "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz", + "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==" + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "odata-v4-literal": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/odata-v4-literal/-/odata-v4-literal-0.1.1.tgz", + "integrity": "sha512-xX9IrLywUmFI6In/AgT0Yy0DpBgW/Y7N9Q3iSfbqOjVyE2z8PvWflx9kgPBiCGmpZFw4dG2TKGlVRd2jgD8+vg==" + }, + "odata-v4-parser": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/odata-v4-parser/-/odata-v4-parser-0.1.29.tgz", + "integrity": "sha512-7ZsqxcMbGAqKSBme0+lul7g9K52RadGYU3WvYwDdduJNfnduSL59w4OEskvEzWHZMcPRqPnD9XtuO7Rpl+B3jA==" + }, + "odata-v4-sql": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/odata-v4-sql/-/odata-v4-sql-0.1.2.tgz", + "integrity": "sha512-Y3S2N2C+W5pRlXsnuZBhGZ+ZlbkBxjjzwi8I6MKRmjpqil1BOs0YIUQWYCp70WmP/psp//hOJHpBRc8iFgomTg==", + "requires": { + "odata-v4-literal": "^0.1.0", + "odata-v4-parser": "0.1.13" + }, + "dependencies": { + "odata-v4-parser": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/odata-v4-parser/-/odata-v4-parser-0.1.13.tgz", + "integrity": "sha1-S1z+8Dgcw5wcoNU8C7yCXMZVtJI=" + } + } + }, + "odata-v4-typeorm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/odata-v4-typeorm/-/odata-v4-typeorm-0.1.1.tgz", + "integrity": "sha512-PaPJaWzhN421UGu1qNAwhNlrPhMwlTHzby1ShtcPpoiKN0nvEoZnAezZRkHa8aHcbkzIJleLVn769jODcFa/XA==", + "requires": { + "odata-v4-parser": "^0.1.29", + "odata-v4-sql": "^0.1.2" + } + }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optional": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", + "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", + "dev": true + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.1.0.tgz", + "integrity": "sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.4.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "oracledb": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/oracledb/-/oracledb-4.2.0.tgz", + "integrity": "sha512-07ZylNcUB9wknsiRa7dNqDWgGK3loP8eNWuoCjsiCOZ19PA1g8QLu+0gah7ty82VXl/MOQYFCMl5OpjD9Aqjcw==" + }, + "os-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.0.tgz", + "integrity": "sha512-caABzDdJMbtykt7GmSogEat3faTKQhmZf0BS5l/pZGmP0vPWQjXWqOhbLyK+b6j2/DQPmEvYdzLXJXXLJNVDNg==", + "dev": true, + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parent-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", + "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=" + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "passport": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } + }, + "passport-http-bearer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/passport-http-bearer/-/passport-http-bearer-1.0.1.tgz", + "integrity": "sha1-FHRp6jZp4qhMYWfvmdu3fh8AmKg=", + "requires": { + "passport-strategy": "1.x.x" + } + }, + "passport-jwt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.0.tgz", + "integrity": "sha512-BwC0n2GP/1hMVjR4QpnvqA61TxenUMlmfNjYNgK0ZAs0HK4SOQkHcSv4L328blNTLtHq7DbmvyNJiH+bn6C5Mg==", + "requires": { + "jsonwebtoken": "^8.2.0", + "passport-strategy": "^1.0.0" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, + "pdf-lib": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", + "integrity": "sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==", + "requires": { + "@pdf-lib/standard-fonts": "^1.0.0", + "@pdf-lib/upng": "^1.0.1", + "pako": "^1.0.11", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pg": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.5.1.tgz", + "integrity": "sha512-9wm3yX9lCfjvA98ybCyw2pADUivyNWT/yIP4ZcDVpMN0og70BUWYEGXPCTAQdGTAqnytfRADb7NERrY1qxhIqw==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.4.0", + "pg-pool": "^3.2.2", + "pg-protocol": "^1.4.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + } + }, + "pg-connection-string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.4.0.tgz", + "integrity": "sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.2.2.tgz", + "integrity": "sha512-ORJoFxAlmmros8igi608iVEbQNNZlp89diFVx6yV5v+ehmpMY9sK6QgpmgoXbmkNaBAx8cOOZh9g80kJv1ooyA==" + }, + "pg-protocol": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.4.0.tgz", + "integrity": "sha512-El+aXWcwG/8wuFICMQjM5ZSAm6OWiJicFdNYo+VY3QP+8vI4SvLIWVe51PppTzMhikUJR+PsyIFKqfdXPz/yxA==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", + "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", + "requires": { + "split2": "^3.1.1" + } + }, + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "requires": { + "pngjs": "^3.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true + }, + "pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "requires": { + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "realpath-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", + "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", + "dev": true + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "dev": true, + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "requires": { + "xmlchars": "^2.1.1" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "requires": { + "readable-stream": "^3.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.4.tgz", + "integrity": "sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stimulsoft-reports-js": { + "version": "2021.1.2", + "resolved": "https://registry.npmjs.org/stimulsoft-reports-js/-/stimulsoft-reports-js-2021.1.2.tgz", + "integrity": "sha512-VS7zceQptHiZ3LB+SPo73MePflLxR7JPRYEVVeBLsuexv3Fj2YGY1p7+HcLK7QXcZjE0j6/AJalBv/aZTcBSRA==", + "requires": { + "jimp": "^0.16.1", + "mssql": "^6.2.1", + "mysql": "^2.15.0", + "node-firebird": "^0.8.4", + "node-machine-id": "^1.1.12", + "pg": "^8.3.3", + "sync-request": "^3.0.1", + "xmldoc": "^1.1.0" + } + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "requires": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + } + }, + "superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "dev": true, + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "supertest": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", + "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", + "dev": true, + "requires": { + "methods": "^1.1.2", + "superagent": "^3.8.3" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "swagger-ui-dist": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.7.2.tgz", + "integrity": "sha512-mVZc9QVQ6pTCV5crli3+Ng+DoMPwdtMHK8QLk2oX8Mtamp4D/hV+uYdC3lV0JZrDgpNEcjs0RrWTqMwwosuLPQ==" + }, + "swagger-ui-express": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz", + "integrity": "sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw==", + "requires": { + "swagger-ui-dist": ">=4.11.0" + } + }, + "symbol-observable": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", + "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "sync-request": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-3.0.1.tgz", + "integrity": "sha1-yqEjWq+Im6UBB2oYNMQ2gwqC+3M=", + "requires": { + "concat-stream": "^1.4.7", + "http-response-object": "^1.0.1", + "then-request": "^2.0.1" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tarn": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-1.1.5.tgz", + "integrity": "sha512-PMtJ3HCLAZeedWjJPgGnCvcphbCOMbtZpjKgLq3qM5Qq9aQud+XHrL0WlrlgnTyS8U+jrjGbEXprFcQrxPy52g==" + }, + "tedious": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-6.7.0.tgz", + "integrity": "sha512-8qr7+sB0h4SZVQBRWUgHmYuOEflAOl2eihvxk0fVNvpvGJV4V5UC/YmSvebyfgyfwWcPO22/AnSbYVZZqf9wuQ==", + "requires": { + "@azure/ms-rest-nodeauth": "2.0.2", + "@types/node": "^12.12.17", + "@types/readable-stream": "^2.3.5", + "bl": "^3.0.0", + "depd": "^2.0.0", + "iconv-lite": "^0.5.0", + "jsbi": "^3.1.1", + "native-duplexpair": "^1.0.0", + "punycode": "^2.1.0", + "readable-stream": "^3.4.0", + "sprintf-js": "^1.1.2" + }, + "dependencies": { + "@types/node": { + "version": "12.19.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.16.tgz", + "integrity": "sha512-7xHmXm/QJ7cbK2laF+YYD7gb5MggHIIQwqyjin3bpEGiSuvScMQ5JZZXPvRipi1MwckTQbJZROMns/JxdnIL1Q==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "iconv-lite": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", + "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", + "dev": true, + "requires": { + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.5.1" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "then-request": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-2.2.0.tgz", + "integrity": "sha1-ZnizL6DKIY/laZgbvYhxtZQGDYE=", + "requires": { + "caseless": "~0.11.0", + "concat-stream": "^1.4.7", + "http-basic": "^2.5.1", + "http-response-object": "^1.1.0", + "promise": "^7.1.1", + "qs": "^6.1.0" + }, + "dependencies": { + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" + } + } + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "requires": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "ts-jest": { + "version": "25.2.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-25.2.1.tgz", + "integrity": "sha512-TnntkEEjuXq/Gxpw7xToarmHbAafgCaAzOpnajnFC6jI7oo1trMzAHA04eWpc3MhV6+yvhE8uUBAmN+teRJh0A==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "^16.1.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "yargs-parser": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", + "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "ts-loader": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.2.tgz", + "integrity": "sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ts-node": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", + "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "tsconfig-paths-webpack-plugin": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.3.0.tgz", + "integrity": "sha512-MpQeZpwPY4gYASCUjY4yt2Zj8yv86O8f++3Ai4o0yI0fUC6G1syvnL9VuY71PBgimRYDQU47f12BEmJq9wRaSw==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "tsconfig-paths": "^3.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + }, + "tsutils": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", + "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typeorm": { + "version": "0.2.30", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.30.tgz", + "integrity": "sha512-qpr8AO3Phi6ZF7qMHOrRdNisVt8jE1KfmW0ooLFcXscA87aJ12aBPyB9cJfxGNjNwd7B3WIK9ZlBveWiqd74QA==", + "requires": { + "@sqltools/formatter": "1.2.2", + "app-root-path": "^3.0.0", + "buffer": "^5.5.0", + "chalk": "^4.1.0", + "cli-highlight": "^2.1.10", + "debug": "^4.1.1", + "dotenv": "^8.2.0", + "glob": "^7.1.6", + "js-yaml": "^3.14.0", + "mkdirp": "^1.0.4", + "reflect-metadata": "^0.1.13", + "sha.js": "^2.4.11", + "tslib": "^1.13.0", + "xml2js": "^0.4.23", + "yargonaut": "^1.1.2", + "yargs": "^16.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "typescript": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "dev": true + }, + "underscore": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz", + "integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "requires": { + "pako": "^1.0.5" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "v8-to-istanbul": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", + "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "watchpack": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.9.0.tgz", + "integrity": "sha512-YnnqIV/uAS5ZrNpctSv378qV7HmbJ74DL+XfvMxzbX1bV9e7eeT6eEWU4wuUw33CNr/HspBh7R/xQlVjTEyAeA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.45", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.3.1", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "pkg-dir": "^4.2.0", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.0.3", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + }, + "dependencies": { + "enhanced-resolve": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", + "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true + } + } + }, + "webpack-node-externals": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-2.5.2.tgz", + "integrity": "sha512-aHdl/y2N7PW2Sx7K+r3AxpJO+aDMcYzMQd60Qxefq3+EwhewSbTBqNumOsCE1JsCUNoyfGj5465N0sSf6hc/5w==", + "dev": true + }, + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "requires": { + "execa": "^4.0.2" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", + "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", + "dev": true + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "xmldoc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", + "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", + "requires": { + "sax": "^1.2.1" + } + }, + "xmldom": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz", + "integrity": "sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA==" + }, + "xpath.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", + "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true + }, + "yargonaut": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz", + "integrity": "sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==", + "requires": { + "chalk": "^1.1.1", + "figlet": "^1.1.1", + "parent-require": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8068068 --- /dev/null +++ b/package.json @@ -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" + } +} diff --git a/scripts/create_entity.sql b/scripts/create_entity.sql new file mode 100644 index 0000000..508a5e4 --- /dev/null +++ b/scripts/create_entity.sql @@ -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; diff --git a/scripts/estprotocoloentrega.sql b/scripts/estprotocoloentrega.sql new file mode 100644 index 0000000..1c72c91 --- /dev/null +++ b/scripts/estprotocoloentrega.sql @@ -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 ) ); diff --git a/scripts/estshopping.sql b/scripts/estshopping.sql new file mode 100644 index 0000000..5fb3f7a --- /dev/null +++ b/scripts/estshopping.sql @@ -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); + diff --git a/scripts/estusuario.sql b/scripts/estusuario.sql new file mode 100644 index 0000000..5a56de4 --- /dev/null +++ b/scripts/estusuario.sql @@ -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; \ No newline at end of file diff --git a/scripts/estvenda.sql b/scripts/estvenda.sql new file mode 100644 index 0000000..3620600 --- /dev/null +++ b/scripts/estvenda.sql @@ -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)); diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json new file mode 100644 index 0000000..14d441b --- /dev/null +++ b/src/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "js/ts.implicitProjectConfig.experimentalDecorators": true +} \ No newline at end of file diff --git a/src/Auth/access-control/access-control.controller.ts b/src/Auth/access-control/access-control.controller.ts new file mode 100644 index 0000000..a85dcb0 --- /dev/null +++ b/src/Auth/access-control/access-control.controller.ts @@ -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); + } + + } diff --git a/src/Auth/access-control/access-control.module.ts b/src/Auth/access-control/access-control.module.ts new file mode 100644 index 0000000..c98f63d --- /dev/null +++ b/src/Auth/access-control/access-control.module.ts @@ -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 { } diff --git a/src/Auth/access-control/access-control.service.ts b/src/Auth/access-control/access-control.service.ts new file mode 100644 index 0000000..9b35a42 --- /dev/null +++ b/src/Auth/access-control/access-control.service.ts @@ -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(); + } + + + } + + +} diff --git a/src/Auth/auth.module.ts b/src/Auth/auth.module.ts new file mode 100644 index 0000000..fcad22d --- /dev/null +++ b/src/Auth/auth.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; + + +@Module({ + imports: [], + controllers: [], + providers: [], + +}) +export class AuthModule { } diff --git a/src/Auth/controllers/user.controller.ts b/src/Auth/controllers/user.controller.ts new file mode 100644 index 0000000..4a98902 --- /dev/null +++ b/src/Auth/controllers/user.controller.ts @@ -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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 []; + } + +} \ No newline at end of file diff --git a/src/Auth/guards/auth.guard.ts b/src/Auth/guards/auth.guard.ts new file mode 100644 index 0000000..fd6b9be --- /dev/null +++ b/src/Auth/guards/auth.guard.ts @@ -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; + } + +} \ No newline at end of file diff --git a/src/Auth/interceptors/role.interceptor.ts b/src/Auth/interceptors/role.interceptor.ts new file mode 100644 index 0000000..94e09de --- /dev/null +++ b/src/Auth/interceptors/role.interceptor.ts @@ -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 { + 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(); + } +} diff --git a/src/Auth/interfaces/jwt-payload.interface.ts b/src/Auth/interfaces/jwt-payload.interface.ts new file mode 100644 index 0000000..f24b6a5 --- /dev/null +++ b/src/Auth/interfaces/jwt-payload.interface.ts @@ -0,0 +1,8 @@ +export interface JwtPayload { + username: string; + email: string; + image: string; + sectorId: string; + sectorManagerId: string; + roles: string[]; +} \ No newline at end of file diff --git a/src/Auth/services/auth.service.ts b/src/Auth/services/auth.service.ts new file mode 100644 index 0000000..a47781a --- /dev/null +++ b/src/Auth/services/auth.service.ts @@ -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 { + //return await this.accountService.findOneByUsername(payload.username); + return payload; + } + +} \ No newline at end of file diff --git a/src/Auth/services/user.service.ts b/src/Auth/services/user.service.ts new file mode 100644 index 0000000..aebd728 --- /dev/null +++ b/src/Auth/services/user.service.ts @@ -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 { + 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 { + 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 { + 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(); + } + } + +} \ No newline at end of file diff --git a/src/Auth/strategies/jwt-strategy.ts b/src/Auth/strategies/jwt-strategy.ts new file mode 100644 index 0000000..7fafc87 --- /dev/null +++ b/src/Auth/strategies/jwt-strategy.ts @@ -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; + } + +} \ No newline at end of file diff --git a/src/Interceptors/validador.interceptor.ts b/src/Interceptors/validador.interceptor.ts new file mode 100644 index 0000000..f2ef51a --- /dev/null +++ b/src/Interceptors/validador.interceptor.ts @@ -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): Observable { + 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(); + } + + + +} \ No newline at end of file diff --git a/src/app.controller.spec.ts b/src/app.controller.spec.ts new file mode 100644 index 0000000..d22f389 --- /dev/null +++ b/src/app.controller.spec.ts @@ -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); + }); + + describe('root', () => { + it('should return "Hello World!"', () => { + expect(appController.getHello()).toBe('Hello World!'); + }); + }); +}); diff --git a/src/app.controller.ts b/src/app.controller.ts new file mode 100644 index 0000000..18d5bf7 --- /dev/null +++ b/src/app.controller.ts @@ -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(); + } +} diff --git a/src/app.module.ts b/src/app.module.ts new file mode 100644 index 0000000..458bfb9 --- /dev/null +++ b/src/app.module.ts @@ -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) { } + +} diff --git a/src/app.service.ts b/src/app.service.ts new file mode 100644 index 0000000..927d7cc --- /dev/null +++ b/src/app.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AppService { + getHello(): string { + return 'Hello World!'; + } +} diff --git a/src/backoffice/backoffice.module.ts b/src/backoffice/backoffice.module.ts new file mode 100644 index 0000000..addb456 --- /dev/null +++ b/src/backoffice/backoffice.module.ts @@ -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 {} diff --git a/src/backoffice/category/category.controller.ts b/src/backoffice/category/category.controller.ts new file mode 100644 index 0000000..818af87 --- /dev/null +++ b/src/backoffice/category/category.controller.ts @@ -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); + } + + } + + } diff --git a/src/backoffice/category/category.module.ts b/src/backoffice/category/category.module.ts new file mode 100644 index 0000000..0f7296c --- /dev/null +++ b/src/backoffice/category/category.module.ts @@ -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 { } diff --git a/src/backoffice/category/category.service.ts b/src/backoffice/category/category.service.ts new file mode 100644 index 0000000..8565746 --- /dev/null +++ b/src/backoffice/category/category.service.ts @@ -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) { } + + async find(idSecion: number): Promise { + 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(); + } + + +} diff --git a/src/backoffice/cest/cest.controller.ts b/src/backoffice/cest/cest.controller.ts new file mode 100644 index 0000000..64302e2 --- /dev/null +++ b/src/backoffice/cest/cest.controller.ts @@ -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); + } + + } + + } diff --git a/src/backoffice/cest/cest.module.ts b/src/backoffice/cest/cest.module.ts new file mode 100644 index 0000000..f7db29b --- /dev/null +++ b/src/backoffice/cest/cest.module.ts @@ -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 { } diff --git a/src/backoffice/cest/cest.service.ts b/src/backoffice/cest/cest.service.ts new file mode 100644 index 0000000..a4548c6 --- /dev/null +++ b/src/backoffice/cest/cest.service.ts @@ -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) { } + + async find(): Promise { + return await this.cestRepository + .createQueryBuilder('pccest') + .getMany() + } + + + async findByDescription(descricaoCest: string): Promise { + + 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 { + return await this.cestRepository + .createQueryBuilder('pccest') + .where('ncm = :codigoncm', { codigoncm: codigoNcm }) + .getMany() + } + +} diff --git a/src/backoffice/department/department.controller.ts b/src/backoffice/department/department.controller.ts new file mode 100644 index 0000000..1ba5293 --- /dev/null +++ b/src/backoffice/department/department.controller.ts @@ -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); + } + } + +} diff --git a/src/backoffice/department/department.module.ts b/src/backoffice/department/department.module.ts new file mode 100644 index 0000000..f6a2a7b --- /dev/null +++ b/src/backoffice/department/department.module.ts @@ -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 { } diff --git a/src/backoffice/department/department.service.ts b/src/backoffice/department/department.service.ts new file mode 100644 index 0000000..44d4c03 --- /dev/null +++ b/src/backoffice/department/department.service.ts @@ -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){} + + async findAll(): Promise { + 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(); + } + } + + } \ No newline at end of file diff --git a/src/backoffice/dictionary/dictionary.controller.ts b/src/backoffice/dictionary/dictionary.controller.ts new file mode 100644 index 0000000..ceaceb1 --- /dev/null +++ b/src/backoffice/dictionary/dictionary.controller.ts @@ -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); + } +} \ No newline at end of file diff --git a/src/backoffice/dictionary/dictionary.module.ts b/src/backoffice/dictionary/dictionary.module.ts new file mode 100644 index 0000000..633e449 --- /dev/null +++ b/src/backoffice/dictionary/dictionary.module.ts @@ -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 {} \ No newline at end of file diff --git a/src/backoffice/dictionary/dictionary.service.ts b/src/backoffice/dictionary/dictionary.service.ts new file mode 100644 index 0000000..e7e4253 --- /dev/null +++ b/src/backoffice/dictionary/dictionary.service.ts @@ -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 + ) { } + + async findAll(): Promise { + return await this.dictionaryRepository.find(); + } + + async findByDescription(description: string): Promise { + return await this.dictionaryRepository + .createQueryBuilder("estabreviatura") + .where("PALAVRA LIKE UPPER(:description)||'%'", { description } + ).getMany(); + } + + async find(id: number): Promise { + 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); + } + + } + + + +} \ No newline at end of file diff --git a/src/backoffice/lists/lists.controller.ts b/src/backoffice/lists/lists.controller.ts new file mode 100644 index 0000000..63637f3 --- /dev/null +++ b/src/backoffice/lists/lists.controller.ts @@ -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(); + } + +} diff --git a/src/backoffice/lists/lists.module.ts b/src/backoffice/lists/lists.module.ts new file mode 100644 index 0000000..a72c9c7 --- /dev/null +++ b/src/backoffice/lists/lists.module.ts @@ -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 { } diff --git a/src/backoffice/lists/lists.service.ts b/src/backoffice/lists/lists.service.ts new file mode 100644 index 0000000..ae07182 --- /dev/null +++ b/src/backoffice/lists/lists.service.ts @@ -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 { + 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 { + 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 { + 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 { + 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(); + } + } + + } diff --git a/src/backoffice/measureproduct/measureproduct.controller.ts b/src/backoffice/measureproduct/measureproduct.controller.ts new file mode 100644 index 0000000..54dda8d --- /dev/null +++ b/src/backoffice/measureproduct/measureproduct.controller.ts @@ -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); + } +} \ No newline at end of file diff --git a/src/backoffice/measureproduct/measureproduct.module.ts b/src/backoffice/measureproduct/measureproduct.module.ts new file mode 100644 index 0000000..5561280 --- /dev/null +++ b/src/backoffice/measureproduct/measureproduct.module.ts @@ -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 {} \ No newline at end of file diff --git a/src/backoffice/measureproduct/measureproduct.service.ts b/src/backoffice/measureproduct/measureproduct.service.ts new file mode 100644 index 0000000..666acac --- /dev/null +++ b/src/backoffice/measureproduct/measureproduct.service.ts @@ -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 + ) { } + + async findAll(): Promise { + return await this.measureProductRepository.find(); + } + + async findByDescription(description: string): Promise { + return await this.measureProductRepository.createQueryBuilder("ESTMEDIDAPRODUTO").where( + "DESCRICAO LIKE :description||'%'", { description } + ).getMany(); + } + + async find(id: number): Promise { + return await this.measureProductRepository.createQueryBuilder("ESTMEDIDAPRODUTO").where( + "IDMEDIDAPRODUTO = :IDMEDIDAPRODUTO", { IDMEDIDAPRODUTO: id } + ).getOne(); + } + + async update(id: number, dados: MeasureProductModel): Promise { + 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 { + + 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); + } + + } + + + +} \ No newline at end of file diff --git a/src/backoffice/messages/messages.module.ts b/src/backoffice/messages/messages.module.ts new file mode 100644 index 0000000..7f4efa5 --- /dev/null +++ b/src/backoffice/messages/messages.module.ts @@ -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 {} diff --git a/src/backoffice/messages/whatsapp/whatsapp.controller.ts b/src/backoffice/messages/whatsapp/whatsapp.controller.ts new file mode 100644 index 0000000..481bd2d --- /dev/null +++ b/src/backoffice/messages/whatsapp/whatsapp.controller.ts @@ -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); + } + } + } diff --git a/src/backoffice/messages/whatsapp/whatsapp.service.ts b/src/backoffice/messages/whatsapp/whatsapp.service.ts new file mode 100644 index 0000000..ff2dec9 --- /dev/null +++ b/src/backoffice/messages/whatsapp/whatsapp.service.ts @@ -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); + } + } + + } diff --git a/src/backoffice/ncm/ncm.controller.ts b/src/backoffice/ncm/ncm.controller.ts new file mode 100644 index 0000000..6a73685 --- /dev/null +++ b/src/backoffice/ncm/ncm.controller.ts @@ -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); + } + + } + + } diff --git a/src/backoffice/ncm/ncm.module.ts b/src/backoffice/ncm/ncm.module.ts new file mode 100644 index 0000000..fdf4f2e --- /dev/null +++ b/src/backoffice/ncm/ncm.module.ts @@ -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 { } diff --git a/src/backoffice/ncm/ncm.service.ts b/src/backoffice/ncm/ncm.service.ts new file mode 100644 index 0000000..f543fc0 --- /dev/null +++ b/src/backoffice/ncm/ncm.service.ts @@ -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){} + + async findAll(): Promise { + 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 { + + 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 { + return await this.ncmRepository + .createQueryBuilder('pcncm') + .where("dtexclusao is null and codncm like :ncm||'%'", { ncm }) + .getRawMany(); + } + + +} diff --git a/src/backoffice/product-type/product-type.controller.ts b/src/backoffice/product-type/product-type.controller.ts new file mode 100644 index 0000000..30e2722 --- /dev/null +++ b/src/backoffice/product-type/product-type.controller.ts @@ -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); + } + + } + + +} diff --git a/src/backoffice/product-type/product-type.module.ts b/src/backoffice/product-type/product-type.module.ts new file mode 100644 index 0000000..fbac449 --- /dev/null +++ b/src/backoffice/product-type/product-type.module.ts @@ -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 { } diff --git a/src/backoffice/product-type/product-type.service.ts b/src/backoffice/product-type/product-type.service.ts new file mode 100644 index 0000000..5b035a4 --- /dev/null +++ b/src/backoffice/product-type/product-type.service.ts @@ -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 + ) { } + + async findAll(): Promise { + + 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 { + + 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 { + + 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); + } + + } + +} diff --git a/src/backoffice/product/product.controller.ts b/src/backoffice/product/product.controller.ts new file mode 100644 index 0000000..3768c92 --- /dev/null +++ b/src/backoffice/product/product.controller.ts @@ -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); + } + } + } + + diff --git a/src/backoffice/product/product.service.ts b/src/backoffice/product/product.service.ts new file mode 100644 index 0000000..127f7cd --- /dev/null +++ b/src/backoffice/product/product.service.ts @@ -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(); + } + } +} diff --git a/src/backoffice/section/section.controller.ts b/src/backoffice/section/section.controller.ts new file mode 100644 index 0000000..d3675b8 --- /dev/null +++ b/src/backoffice/section/section.controller.ts @@ -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); + } + } + +} diff --git a/src/backoffice/section/section.module.ts b/src/backoffice/section/section.module.ts new file mode 100644 index 0000000..c33d6bc --- /dev/null +++ b/src/backoffice/section/section.module.ts @@ -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 { } diff --git a/src/backoffice/section/section.service.ts b/src/backoffice/section/section.service.ts new file mode 100644 index 0000000..343a255 --- /dev/null +++ b/src/backoffice/section/section.service.ts @@ -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){} + + async find(idDepartment: number): Promise { + 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(); + } + + } + diff --git a/src/configs/typeorm.config.ts b/src/configs/typeorm.config.ts new file mode 100644 index 0000000..74fa0cf --- /dev/null +++ b/src/configs/typeorm.config.ts @@ -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}'], +} \ No newline at end of file diff --git a/src/contracts/contract.ts b/src/contracts/contract.ts new file mode 100644 index 0000000..9d5a52c --- /dev/null +++ b/src/contracts/contract.ts @@ -0,0 +1,4 @@ +export interface Contract { + errors: any[], + validade(model: any): boolean, +} \ No newline at end of file diff --git a/src/contracts/dictionary.contract.ts b/src/contracts/dictionary.contract.ts new file mode 100644 index 0000000..a71afab --- /dev/null +++ b/src/contracts/dictionary.contract.ts @@ -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; + } + +} \ No newline at end of file diff --git a/src/delivery/delivery.module.ts b/src/delivery/delivery.module.ts new file mode 100644 index 0000000..c5017a1 --- /dev/null +++ b/src/delivery/delivery.module.ts @@ -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 {} diff --git a/src/delivery/order/delivery-order.controller.ts b/src/delivery/order/delivery-order.controller.ts new file mode 100644 index 0000000..f3db4c6 --- /dev/null +++ b/src/delivery/order/delivery-order.controller.ts @@ -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); + } + + } diff --git a/src/delivery/order/delivery-order.service.ts b/src/delivery/order/delivery-order.service.ts new file mode 100644 index 0000000..40ac053 --- /dev/null +++ b/src/delivery/order/delivery-order.service.ts @@ -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 { + 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 { + 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 { + 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 { + 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 { + 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(); + } + + + } + + + +} diff --git a/src/delivery/orders/orders.controller.ts b/src/delivery/orders/orders.controller.ts new file mode 100644 index 0000000..c4a9588 --- /dev/null +++ b/src/delivery/orders/orders.controller.ts @@ -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); + } + + } diff --git a/src/delivery/orders/orders.service.ts b/src/delivery/orders/orders.service.ts new file mode 100644 index 0000000..12772d6 --- /dev/null +++ b/src/delivery/orders/orders.service.ts @@ -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 { + + 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(); + } + } +} diff --git a/src/delivery/services/shipping.controller.ts b/src/delivery/services/shipping.controller.ts new file mode 100644 index 0000000..390c625 --- /dev/null +++ b/src/delivery/services/shipping.controller.ts @@ -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); + } + + + } diff --git a/src/delivery/services/shipping.service.ts b/src/delivery/services/shipping.service.ts new file mode 100644 index 0000000..63d01aa --- /dev/null +++ b/src/delivery/services/shipping.service.ts @@ -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 { + + 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 { + + 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 { + + 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(); + } + + + } + +} diff --git a/src/domain/entity/Scripts/Criacao_Views_Sales.sql b/src/domain/entity/Scripts/Criacao_Views_Sales.sql new file mode 100644 index 0000000..cb5df05 --- /dev/null +++ b/src/domain/entity/Scripts/Criacao_Views_Sales.sql @@ -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'; diff --git a/src/domain/entity/tables/estabreviatura.entity.ts b/src/domain/entity/tables/estabreviatura.entity.ts new file mode 100644 index 0000000..aca50f6 --- /dev/null +++ b/src/domain/entity/tables/estabreviatura.entity.ts @@ -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; + +} diff --git a/src/domain/entity/tables/estavisoestoque.entity.ts b/src/domain/entity/tables/estavisoestoque.entity.ts new file mode 100644 index 0000000..d6b6e21 --- /dev/null +++ b/src/domain/entity/tables/estavisoestoque.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estcategoriacliente.entity.ts b/src/domain/entity/tables/estcategoriacliente.entity.ts new file mode 100644 index 0000000..489effd --- /dev/null +++ b/src/domain/entity/tables/estcategoriacliente.entity.ts @@ -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; +} \ No newline at end of file diff --git a/src/domain/entity/tables/estcategoriaparceiro.entity.ts b/src/domain/entity/tables/estcategoriaparceiro.entity.ts new file mode 100644 index 0000000..8ade6a5 --- /dev/null +++ b/src/domain/entity/tables/estcategoriaparceiro.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estfaixaparceiro.entity.ts b/src/domain/entity/tables/estfaixaparceiro.entity.ts new file mode 100644 index 0000000..a02e13b --- /dev/null +++ b/src/domain/entity/tables/estfaixaparceiro.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estimagemnota.entity.ts b/src/domain/entity/tables/estimagemnota.entity.ts new file mode 100644 index 0000000..1fa929f --- /dev/null +++ b/src/domain/entity/tables/estimagemnota.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estmedidaproduto.entity.ts b/src/domain/entity/tables/estmedidaproduto.entity.ts new file mode 100644 index 0000000..815ed87 --- /dev/null +++ b/src/domain/entity/tables/estmedidaproduto.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estpagamento.entity.ts b/src/domain/entity/tables/estpagamento.entity.ts new file mode 100644 index 0000000..4a77baf --- /dev/null +++ b/src/domain/entity/tables/estpagamento.entity.ts @@ -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; + +} + diff --git a/src/domain/entity/tables/estparceiro.entity.ts b/src/domain/entity/tables/estparceiro.entity.ts new file mode 100644 index 0000000..aa86b40 --- /dev/null +++ b/src/domain/entity/tables/estparceiro.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estprevendac.entity.ts b/src/domain/entity/tables/estprevendac.entity.ts new file mode 100644 index 0000000..6127968 --- /dev/null +++ b/src/domain/entity/tables/estprevendac.entity.ts @@ -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; + +} diff --git a/src/domain/entity/tables/estprevendai.entity.ts b/src/domain/entity/tables/estprevendai.entity.ts new file mode 100644 index 0000000..13839d7 --- /dev/null +++ b/src/domain/entity/tables/estprevendai.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estprotocolo.entity.ts b/src/domain/entity/tables/estprotocolo.entity.ts new file mode 100644 index 0000000..e9704de --- /dev/null +++ b/src/domain/entity/tables/estprotocolo.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estruptura.entity.ts b/src/domain/entity/tables/estruptura.entity.ts new file mode 100644 index 0000000..911c2ce --- /dev/null +++ b/src/domain/entity/tables/estruptura.entity.ts @@ -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; +*/ \ No newline at end of file diff --git a/src/domain/entity/tables/estsubcategoriacliente.entity.ts b/src/domain/entity/tables/estsubcategoriacliente.entity.ts new file mode 100644 index 0000000..9fba876 --- /dev/null +++ b/src/domain/entity/tables/estsubcategoriacliente.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/esttipoproduto.entity.ts b/src/domain/entity/tables/esttipoproduto.entity.ts new file mode 100644 index 0000000..6879af0 --- /dev/null +++ b/src/domain/entity/tables/esttipoproduto.entity.ts @@ -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; + + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estusuario.enity.ts b/src/domain/entity/tables/estusuario.enity.ts new file mode 100644 index 0000000..e1f63e6 --- /dev/null +++ b/src/domain/entity/tables/estusuario.enity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estvenda.entity.ts b/src/domain/entity/tables/estvenda.entity.ts new file mode 100644 index 0000000..56f5242 --- /dev/null +++ b/src/domain/entity/tables/estvenda.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/estvendaprecliente.entity.ts b/src/domain/entity/tables/estvendaprecliente.entity.ts new file mode 100644 index 0000000..f493a5a --- /dev/null +++ b/src/domain/entity/tables/estvendaprecliente.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pccaixa.entity.ts b/src/domain/entity/tables/pccaixa.entity.ts new file mode 100644 index 0000000..52f3010 --- /dev/null +++ b/src/domain/entity/tables/pccaixa.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pccarreg.entity.ts b/src/domain/entity/tables/pccarreg.entity.ts new file mode 100644 index 0000000..335d6e1 --- /dev/null +++ b/src/domain/entity/tables/pccarreg.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pccategoria.entity.ts b/src/domain/entity/tables/pccategoria.entity.ts new file mode 100644 index 0000000..366e49a --- /dev/null +++ b/src/domain/entity/tables/pccategoria.entity.ts @@ -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[]; + + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pccest.entity.ts b/src/domain/entity/tables/pccest.entity.ts new file mode 100644 index 0000000..7145bf1 --- /dev/null +++ b/src/domain/entity/tables/pccest.entity.ts @@ -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[]; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pccidade.entity.ts b/src/domain/entity/tables/pccidade.entity.ts new file mode 100644 index 0000000..ae555a1 --- /dev/null +++ b/src/domain/entity/tables/pccidade.entity.ts @@ -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; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcclient.entity.ts b/src/domain/entity/tables/pcclient.entity.ts new file mode 100644 index 0000000..24f53d8 --- /dev/null +++ b/src/domain/entity/tables/pcclient.entity.ts @@ -0,0 +1,1646 @@ +import { Pcpedc } from './pcpedc.entity'; +import { Entity, PrimaryColumn, Column, OneToMany } from "typeorm"; +import { Pcnfsaid } from "./pcnfsaid.entity"; + +@Entity('PCCLIENT') +export class Pcclient { + + @PrimaryColumn({ name: 'CODCLI' }) + codcli: number; + + @Column({ name: 'CLIENTE' }) + cliente: string; + + @Column({ name: 'ENDERCOB' }) + endercob: string; + + @Column({ name: 'BAIRROCOB' }) + bairrocob: string; + + @Column({ name: 'TELCOB' }) + telcob: string; + + @Column({ name: 'MUNICCOB' }) + municcob: string; + + @Column({ name: 'ESTCOB' }) + estcob: string; + + @Column({ name: 'CEPCOB' }) + cepcob: string; + + @Column({ name: 'ENDERENT' }) + enderent: string; + + @Column({ name: 'BAIRROENT' }) + bairroent: string; + + @Column({ name: 'TELENT' }) + telent: string; + + @Column({ name: 'MUNICENT' }) + municent: string; + + @Column({ name: 'ESTENT' }) + estent: string; + + @Column({ name: 'CEPENT' }) + cepent: string; + + @Column({ name: 'CGCENT' }) + cgcent: string; + + @Column({ name: 'IEENT' }) + ieent: string; + + @Column({ name: 'DTULTCOMP' }) + dtultcomp: Date; + + @Column({ name: 'CODATV1' }) + codatv1: number; + + @Column({ name: 'BLOQUEIO' }) + bloqueio: string; + + @Column({ name: 'CODUSUR1' }) + codusur1: number; + + @Column({ name: 'CODUSUR2' }) + codusur2: number; + + @Column({ name: 'FAXCLI' }) + faxcli: string; + + @Column({ name: 'LIMCRED' }) + limcred: number; + + @Column({ name: 'OBS' }) + obs: string; + + @Column({ name: 'DTPRIMCOMPRA' }) + dtprimcompra: Date; + + @Column({ name: 'CODCLIPRINC' }) + codcliprinc: number; + + @Column({ name: 'CODCOB' }) + codcob: string; + + @Column({ name: 'DTREGLIM' }) + dtreglim: Date; + + @Column({ name: 'DTVENCLIMCRED' }) + dtvenclimcred: Date; + + @Column({ name: 'DTBLOQ' }) + dtbloq: Date; + + @Column({ name: 'DTCADASTRO' }) + dtcadastro: Date; + + @Column({ name: 'CODPRACA' }) + codpraca: number; + + @Column({ name: 'FANTASIA' }) + fantasia: string; + + @Column({ name: 'EMITEDUP' }) + emitedup: string; + + @Column({ name: 'OBS2' }) + obs2: string; + + @Column({ name: 'VIP' }) + vip: string; + + @Column({ name: 'PONTOREFER' }) + pontorefer: string; + + @Column({ name: 'HORARIORECEB' }) + horarioreceb: string; + + @Column({ name: 'PREDIOPROPRIO' }) + predioproprio: string; + + @Column({ name: 'INICIOATIV' }) + inicioativ: Date; + + @Column({ name: 'DTULTALTER' }) + dtultalter: Date; + + @Column({ name: 'TIPOULTALTER' }) + tipoultalter: string; + + @Column({ name: 'OBSCREDITO' }) + obscredito: string; + + @Column({ name: 'TIPOFJ' }) + tipofj: string; + + @Column({ name: 'ISENTAJUROS' }) + isentajuros: string; + + @Column({ name: 'TELENT1' }) + telent1: string; + + @Column({ name: 'EMAIL' }) + email: string; + + @Column({ name: 'SENHA_WEB' }) + senha_web: string; + + @Column({ name: 'DTEXCLUSAO' }) + dtexclusao: Date; + + @Column({ name: 'FREQVISITA' }) + freqvisita: number; + + @Column({ name: 'CODPLPAG' }) + codplpag: number; + + @Column({ name: 'PRAZOADICIONAL' }) + prazoadicional: number; + + @Column({ name: 'OBS3' }) + obs3: string; + + @Column({ name: 'OBS4' }) + obs4: string; + + @Column({ name: 'PERDESC' }) + perdesc: number; + + @Column({ name: 'NUMSEQ' }) + numseq: number; + + @Column({ name: 'PLPAGNEG' }) + plpagneg: string; + + @Column({ name: 'PAISENT' }) + paisent: string; + + @Column({ name: 'CAIXAPOSTAL' }) + caixapostal: number; + + @Column({ name: 'CEPCXPOSTAL' }) + cepcxpostal: number; + + @Column({ name: 'REGJUNTACOMERCIAL' }) + regjuntacomercial: string; + + @Column({ name: 'MICROEMPRESA' }) + microempresa: string; + + @Column({ name: 'DDDINTERNACIONAL' }) + dddinternacional: number; + + @Column({ name: 'CLASSEVENDA' }) + classevenda: string; + + @Column({ name: 'CLASSEMC' }) + classemc: string; + + @Column({ name: 'ENDERCOM' }) + endercom: string; + + @Column({ name: 'BAIRROCOM' }) + bairrocom: string; + + @Column({ name: 'MUNICCOM' }) + municcom: string; + + @Column({ name: 'ESTCOM' }) + estcom: string; + + @Column({ name: 'CEPCOM' }) + cepcom: string; + + @Column({ name: 'TELCOM' }) + telcom: string; + + @Column({ name: 'FAXCOM' }) + faxcom: string; + + @Column({ name: 'SULFRAMA' }) + sulframa: string; + + @Column({ name: 'CODBARRA' }) + codbarra: number; + + @Column({ name: 'ICMSANTECIP' }) + icmsantecip: string; + + @Column({ name: 'CACEX' }) + cacex: string; + + @Column({ name: 'OBSENTREGA1' }) + obsentrega1: string; + + @Column({ name: 'OBSENTREGA2' }) + obsentrega2: string; + + @Column({ name: 'OBSENTREGA3' }) + obsentrega3: string; + + @Column({ name: 'PERDESC2' }) + perdesc2: number; + + @Column({ name: 'PERDESC3' }) + perdesc3: number; + + @Column({ name: 'PERDESC4' }) + perdesc4: number; + + @Column({ name: 'PERDESC5' }) + perdesc5: number; + + @Column({ name: 'PERDESCFIN' }) + perdescfin: number; + + @Column({ name: 'ISENTOICMS' }) + isentoicms: string; + + @Column({ name: 'PERDESCISENTOICMS' }) + perdescisentoicms: number; + + @Column({ name: 'CODNILSEN' }) + codnilsen: string; + + @Column({ name: 'IMENT' }) + iment: string; + + @Column({ name: 'CODFILIALNF' }) + codfilialnf: string; + + @Column({ name: 'ISENTOTXBOLETO' }) + isentotxboleto: string; + + @Column({ name: 'NUMTRANSVENDADESC' }) + numtransvendadesc: number; + + @Column({ name: 'CONDVENDA1' }) + condvenda1: string; + + @Column({ name: 'CONDVENDA2' }) + condvenda2: string; + + @Column({ name: 'CONDVENDA3' }) + condvenda3: string; + + @Column({ name: 'CONDVENDA4' }) + condvenda4: string; + + @Column({ name: 'CONDVENDA5' }) + condvenda5: string; + + @Column({ name: 'CONDVENDA6' }) + condvenda6: string; + + @Column({ name: 'DTCAPITALSOCIAL' }) + dtcapitalsocial: Date; + + @Column({ name: 'CAPITALSOCIAL' }) + capitalsocial: number; + + @Column({ name: 'NUMBANCO1' }) + numbanco1: number; + + @Column({ name: 'NUMAGENCIA1' }) + numagencia1: number; + + @Column({ name: 'NUMCCORRENTE1' }) + numccorrente1: string; + + @Column({ name: 'NUMBANCO2' }) + numbanco2: number; + + @Column({ name: 'NUMAGENCIA2' }) + numagencia2: number; + + @Column({ name: 'NUMCCORRENTE2' }) + numccorrente2: string; + + @Column({ name: 'DTULTVISITA' }) + dtultvisita: Date; + + @Column({ name: 'CODFUNCCADASTRO' }) + codfunccadastro: number; + + @Column({ name: 'EMPFIXA' }) + empfixa: string; + + @Column({ name: 'LIMITEAUTORI' }) + limiteautori: string; + + @Column({ name: 'PERCOMCLI' }) + percomcli: number; + + @Column({ name: 'NUMSEQROTARCA' }) + numseqrotarca: number; + + @Column({ name: 'DIASEMANA' }) + diasemana: string; + + @Column({ name: 'PERBASEVEND' }) + perbasevend: number; + + @Column({ name: 'RG' }) + rg: string; + + @Column({ name: 'ORGAORG' }) + orgaorg: string; + + @Column({ name: 'DESCPRODUTO' }) + descproduto: string; + + @Column({ name: 'CODFUNCCAD' }) + codfunccad: number; + + @Column({ name: 'CODFUNCULTALTER' }) + codfuncultalter: number; + + @Column({ name: 'VLESTOQUE' }) + vlestoque: number; + + @Column({ name: 'VLMEDIACOMPRAMESFORNEC' }) + vlmediacompramesfornec: number; + + @Column({ name: 'OBS5' }) + obs5: string; + + @Column({ name: 'DTULTCONSULTASERASA' }) + dtultconsultaserasa: Date; + + @Column({ name: 'DTULTCONSULTASCI' }) + dtultconsultasci: Date; + + @Column({ name: 'CONSUMIDORFINAL' }) + consumidorfinal: string; + + @Column({ name: 'CODCANAL' }) + codcanal: number; + + @Column({ name: 'CLASSECOMERCIAL' }) + classecomercial: string; + + @Column({ name: 'EMITENTECH' }) + emitentech: string; + + @Column({ name: 'EMITENTECH2' }) + emitentech2: string; + + @Column({ name: 'VALORALUGUEL' }) + valoraluguel: number; + + @Column({ name: 'EMPRESA' }) + empresa: string; + + @Column({ name: 'ENDEREMPR' }) + enderempr: string; + + @Column({ name: 'MUNICEMPR' }) + municempr: string; + + @Column({ name: 'ESTEMPR' }) + estempr: string; + + @Column({ name: 'TELEMPR' }) + telempr: string; + + @Column({ name: 'CARGO' }) + cargo: string; + + @Column({ name: 'DTADMISSAO' }) + dtadmissao: Date; + + @Column({ name: 'RENDAMENSAL' }) + rendamensal: number; + + @Column({ name: 'NOMECONJUGE' }) + nomeconjuge: string; + + @Column({ name: 'CPFCONJUGE' }) + cpfconjuge: string; + + @Column({ name: 'EMPRESACONJUGE' }) + empresaconjuge: string; + + @Column({ name: 'ENDERCONJUGE' }) + enderconjuge: string; + + @Column({ name: 'MUNICCONJUGE' }) + municconjuge: string; + + @Column({ name: 'ESTCONJUGE' }) + estconjuge: string; + + @Column({ name: 'TELCONJUGE' }) + telconjuge: string; + + @Column({ name: 'CARGOCONJUGE' }) + cargoconjuge: string; + + @Column({ name: 'DTADMISSAOCONJUGE' }) + dtadmissaoconjuge: Date; + + @Column({ name: 'RENDAMENSALCONJUGE' }) + rendamensalconjuge: number; + + @Column({ name: 'VLOUTRASRENDAS' }) + vloutrasrendas: number; + + @Column({ name: 'CLIENTEELETRO' }) + clienteeletro: string; + + @Column({ name: 'GERENCIAMENTO' }) + gerenciamento: string; + + @Column({ name: 'CALCULAST' }) + calculast: string; + + @Column({ name: 'DTULTCONTATOCOB' }) + dtultcontatocob: Date; + + @Column({ name: 'CODFUNCULTCONTATOCOB' }) + codfuncultcontatocob: number; + + @Column({ name: 'DTPROXCONTATOCOB' }) + dtproxcontatocob: Date; + + @Column({ name: 'ACEITACHTERCEIROS' }) + aceitachterceiros: string; + + @Column({ name: 'CLIENTEFONTEST' }) + clientefontest: string; + + @Column({ name: 'RATINGSCI' }) + ratingsci: string; + + @Column({ name: 'OBSTESOURARIA' }) + obstesouraria: string; + + @Column({ name: 'OBSCALLCENTER' }) + obscallcenter: string; + + @Column({ name: 'OBSRECEPCAO' }) + obsrecepcao: string; + + @Column({ name: 'LISTAPLPAG' }) + listaplpag: string; + + @Column({ name: 'TELCELENT' }) + telcelent: string; + + @Column({ name: 'JURUNENSEWHATSAPP' }) + celularwhatsapp: string; + + @Column({ name: 'NUMCONCESSAO' }) + numconcessao: string; + + @Column({ name: 'ULTCODPLPAG' }) + ultcodplpag: number; + + @Column({ name: 'NUMREGIAOCLI' }) + numregiaocli: number; + + @Column({ name: 'EANENTREGA' }) + eanentrega: number; + + @Column({ name: 'EANCOBRANCA' }) + eancobranca: number; + + @Column({ name: 'QTCHECKOUT' }) + qtcheckout: number; + + @Column({ name: 'FREQDIAVISITA' }) + freqdiavisita: number; + + @Column({ name: 'SITE' }) + site: string; + + @Column({ name: 'CONDVENDA7' }) + condvenda7: string; + + @Column({ name: 'CONDVENDA8' }) + condvenda8: string; + + @Column({ name: 'CONDVENDA9' }) + condvenda9: string; + + @Column({ name: 'CONDVENDA10' }) + condvenda10: string; + + @Column({ name: 'CONDVENDA11' }) + condvenda11: string; + + @Column({ name: 'CONDVENDA12' }) + condvenda12: string; + + @Column({ name: 'CONDVENDA13' }) + condvenda13: string; + + @Column({ name: 'CONDVENDA14' }) + condvenda14: string; + + @Column({ name: 'PERCBONIFIC' }) + percbonific: number; + + @Column({ name: 'CODSUFRAMA' }) + codsuframa: string; + + @Column({ name: 'CODPLPAG2' }) + codplpag2: number; + + @Column({ name: 'TIPOCUSTOTRANSF' }) + tipocustotransf: string; + + @Column({ name: 'PERACRESTRANSF' }) + peracrestransf: number; + + @Column({ name: 'ANALISECRED' }) + analisecred: string; + + @Column({ name: 'PLPAGNEG2' }) + plpagneg2: string; + + @Column({ name: 'CODFUNCULTALTERCLIESP' }) + codfuncultaltercliesp: number; + + @Column({ name: 'DTULTALTERCLIESP' }) + dtultaltercliesp: Date; + + @Column({ name: 'DESTACAFRETE' }) + destacafrete: string; + + @Column({ name: 'PERCBASEVENDQT' }) + percbasevendqt: number; + + @Column({ name: 'CODFILIALESTOQUE' }) + codfilialestoque: string; + + @Column({ name: 'TIPOCONVERSAOTV4' }) + tipoconversaotv4: string; + + @Column({ name: 'APLICADESCNF' }) + aplicadescnf: string; + + @Column({ name: 'CODBARRACOB' }) + codbarracob: number; + + @Column({ name: 'CODBARRAENT' }) + codbarraent: number; + + @Column({ name: 'PRAZOADICIONAL2' }) + prazoadicional2: number; + + @Column({ name: 'PRAZOADICIONAL3' }) + prazoadicional3: number; + + @Column({ name: 'PRAZOADICIONAL4' }) + prazoadicional4: number; + + @Column({ name: 'PRAZOADICIONAL5' }) + prazoadicional5: number; + + @Column({ name: 'PRAZOADICIONAL6' }) + prazoadicional6: number; + + @Column({ name: 'PRAZOADICIONAL7' }) + prazoadicional7: number; + + @Column({ name: 'DTABERTCC1' }) + dtabertcc1: Date; + + @Column({ name: 'DTABERTCC2' }) + dtabertcc2: Date; + + @Column({ name: 'CONDVENDA20' }) + condvenda20: string; + + @Column({ name: 'USAVLMINVENDABK' }) + usavlminvendabk: string; + + @Column({ name: 'UTILIZAIESIMPLIFICADA' }) + utilizaiesimplificada: string; + + @Column({ name: 'CLIENTEMONITORADO' }) + clientemonitorado: string; + + @Column({ name: 'NUMALVARA' }) + numalvara: string; + + @Column({ name: 'DTVENCALVARA' }) + dtvencalvara: Date; + + @Column({ name: 'TIPOEMPRESA' }) + tipoempresa: string; + + @Column({ name: 'CGCENTREGA' }) + cgcentrega: string; + + @Column({ name: 'DTENQUADRAMENTOMICROEMPRESA' }) + dtenquadramentomicroempresa: Date; + + @Column({ name: 'ALIQICMS1' }) + aliqicms1: number; + + @Column({ name: 'CODCLIPALM' }) + codclipalm: number; + + @Column({ name: 'CODUSUR3' }) + codusur3: number; + + @Column({ name: 'PARAIBASIM' }) + paraibasim: string; + + @Column({ name: 'CODMUNICIPIO' }) + codmunicipio: number; + + @Column({ name: 'INCLUINOARQSCI' }) + incluinoarqsci: string; + + @Column({ name: 'DTNASC' }) + dtnasc: Date; + + @Column({ name: 'FILIACAOPAI' }) + filiacaopai: string; + + @Column({ name: 'FILIACAOMAE' }) + filiacaomae: string; + + @Column({ name: 'SEXO' }) + sexo: string; + + @Column({ name: 'DTNASCCONJ' }) + dtnascconj: Date; + + @Column({ name: 'FILIACAOPAICONJ' }) + filiacaopaiconj: string; + + @Column({ name: 'FILIACAOMAECONJ' }) + filiacaomaeconj: string; + + @Column({ name: 'RGCONJ' }) + rgconj: string; + + @Column({ name: 'ORGAORGCONJ' }) + orgaorgconj: string; + + @Column({ name: 'OBSGERENCIAL1' }) + obsgerencial1: string; + + @Column({ name: 'OBSGERENCIAL2' }) + obsgerencial2: string; + + @Column({ name: 'OBSGERENCIAL3' }) + obsgerencial3: string; + + @Column({ name: 'OBSERVACAO' }) + observacao: string; + + @Column({ name: 'TIPOCLIMED' }) + tipoclimed: string; + + @Column({ name: 'ISENTOIPI' }) + isentoipi: string; + + @Column({ name: 'CONDVENDA98' }) + condvenda98: string; + + @Column({ name: 'CONDVENDA99' }) + condvenda99: string; + + @Column({ name: 'HORAPROXCONTATO' }) + horaproxcontato: number; + + @Column({ name: 'MINUTOPROXCONTATO' }) + minutoproxcontato: number; + + @Column({ name: 'ACEITAVENDAFRACAO' }) + aceitavendafracao: string; + + @Column({ name: 'CODPLPAGPADRAO' }) + codplpagpadrao: number; + + @Column({ name: 'EMITEDAE' }) + emitedae: string; + + @Column({ name: 'EXPORTARDADOSIMS' }) + exportardadosims: string; + + @Column({ name: 'CONTRIBUINTE' }) + contribuinte: string; + + @Column({ name: 'ORIGEMPRECO' }) + origempreco: string; + + @Column({ name: 'DTVENCSUFRAMA' }) + dtvencsuframa: Date; + + @Column({ name: 'COMPLEMENTOENT' }) + complementoent: string; + + @Column({ name: 'RESSARCIMENTOST' }) + ressarcimentost: string; + + @Column({ name: 'NUMALVARAFUNC' }) + numalvarafunc: string; + + @Column({ name: 'DTVENCALVARAFUNC' }) + dtvencalvarafunc: Date; + + @Column({ name: 'DTULTCOMPNESTLE' }) + dtultcompnestle: Date; + + @Column({ name: 'DIRETORIOCLIENTE' }) + diretoriocliente: string; + + @Column({ name: 'PRAZOVALIDADE' }) + prazovalidade: number; + + @Column({ name: 'DTVENCPRAZOADICIONAL' }) + dtvencprazoadicional: Date; + + @Column({ name: 'RATINGSCI1' }) + ratingsci1: string; + + @Column({ name: 'RATINGSCI2' }) + ratingsci2: string; + + @Column({ name: 'CLIENTEDAN' }) + clientedan: string; + + @Column({ name: 'MEDDTLIBTRIBUT' }) + meddtlibtribut: Date; + + @Column({ name: 'MEDCODFUNCLIBTRIBUT' }) + medcodfunclibtribut: number; + + @Column({ name: 'REPASSE' }) + repasse: string; + + @Column({ name: 'DTULTCONSULTASINTEGRA' }) + dtultconsultasintegra: Date; + + @Column({ name: 'IEST' }) + iest: string; + + @Column({ name: 'CODSTATUSCOB' }) + codstatuscob: number; + + @Column({ name: 'NUMTARE' }) + numtare: string; + + @Column({ name: 'USACROSS' }) + usacross: string; + + @Column({ name: 'VALIDAMAXVENDAPF' }) + validamaxvendapf: string; + + @Column({ name: 'DIGAGENCIA2' }) + digagencia2: string; + + @Column({ name: 'ROTEIROMASTERFOODS' }) + roteiromasterfoods: string; + + @Column({ name: 'CODCIDADE' }) + codcidade: number; + + @Column({ name: 'CODCONDICAOVENDA' }) + codcondicaovenda: number; + + @Column({ name: 'ORGAOPUB' }) + orgaopub: string; + + @Column({ name: 'NUMSEQATU' }) + numseqatu: number; + + @Column({ name: 'PRAZOMAXVALIDADE' }) + prazomaxvalidade: number; + + @Column({ name: 'UFRG' }) + ufrg: string; + + @Column({ name: 'VALIDARMULTIPLOVENDA' }) + validarmultiplovenda: string; + + @Column({ name: 'CLIENTPROTESTO' }) + clientprotesto: string; + + @Column({ name: 'ACEITATROCANEGATIVA' }) + aceitatrocanegativa: string; + + @Column({ name: 'USABKCNPJCODCLIPRINC' }) + usabkcnpjcodcliprinc: string; + + @Column({ name: 'MOTIVOEXCLUSAO' }) + motivoexclusao: string; + + @Column({ name: 'VALIDARCAMPANHABRINDE' }) + validarcampanhabrinde: string; + + @Column({ name: 'CODFUNCLANCPOTENCIALLIMCRED' }) + codfunclancpotenciallimcred: number; + + @Column({ name: 'VLPOTENCIALLIMCRED' }) + vlpotenciallimcred: number; + + @Column({ name: 'DTLANCPOTENCIALLIMCRED' }) + dtlancpotenciallimcred: Date; + + @Column({ name: 'RFC' }) + rfc: string; + + @Column({ name: 'IVA' }) + iva: number; + + @Column({ name: 'IEPS' }) + ieps: number; + + @Column({ name: 'EDOENT' }) + edoent: string; + + @Column({ name: 'EDOCOB' }) + edocob: string; + + @Column({ name: 'EDOCOM' }) + edocom: string; + + @Column({ name: 'SIGLADEC' }) + sigladec: string; + + @Column({ name: 'TIPODESCISENCAO' }) + tipodescisencao: string; + + @Column({ name: 'QTESTRELA' }) + qtestrela: number; + + @Column({ name: 'GRUPORAMOATIVI' }) + gruporamoativi: string; + + @Column({ name: 'DTCLASSIFICAESTRELA' }) + dtclassificaestrela: Date; + + @Column({ name: 'DTCLASSIFICAGRUPO' }) + dtclassificagrupo: Date; + + @Column({ name: 'INSCESTADUAL' }) + inscestadual: string; + + @Column({ name: 'CLIENTE2' }) + cliente2: string; + + @Column({ name: 'MUNICENT2' }) + municent2: string; + + @Column({ name: 'MUNICCOB2' }) + municcob2: string; + + @Column({ name: 'MUNICCOM2' }) + municcom2: string; + + @Column({ name: 'DTDESBLOQUEIO' }) + dtdesbloqueio: Date; + + @Column({ name: 'CODFORNECFRETE' }) + codfornecfrete: number; + + @Column({ name: 'CODPRACACOB' }) + codpracacob: number; + + @Column({ name: 'USAIVAFONTEDIFERENCIADO' }) + usaivafontediferenciado: string; + + @Column({ name: 'IVAFONTE' }) + ivafonte: number; + + @Column({ name: 'SUPRIMIDO' }) + suprimido: string; + + @Column({ name: 'CGEENTAUX' }) + cgeentaux: string; + + @Column({ name: 'ENVIADADOSSERASA' }) + enviadadosserasa: string; + + @Column({ name: 'BLOQUEIOSEFAZ' }) + bloqueiosefaz: string; + + @Column({ name: 'DTVALIDASEFAZ' }) + dtvalidasefaz: Date; + + @Column({ name: 'ISENTODIFALIQUOTAS' }) + isentodifaliquotas: string; + + @Column({ name: 'FRETEDESPACHO' }) + fretedespacho: string; + + @Column({ name: 'OBSSUFRAMA' }) + obssuframa: string; + + @Column({ name: 'CODCNAE' }) + codcnae: string; + + @Column({ name: 'TIPODOCUMENTO' }) + tipodocumento: string; + + @Column({ name: 'DTIMPORTINTEGRACAO' }) + dtimportintegracao: Date; + + @Column({ name: 'TIPOCUSTOTRANSF_FILIAIS' }) + tipocustotransf_filiais: string; + + @Column({ name: 'ORGAOPUBFEDERAL' }) + orgaopubfederal: string; + + @Column({ name: 'CODHIST' }) + codhist: number; + + @Column({ name: 'CODCOBTV1' }) + codcobtv1: string; + + @Column({ name: 'CODCOBTV3' }) + codcobtv3: string; + + @Column({ name: 'VLFRETE' }) + vlfrete: number; + + @Column({ name: 'VLMAXCOBFRETE' }) + vlmaxcobfrete: number; + + @Column({ name: 'CODREDE' }) + codrede: number; + + @Column({ name: 'ATUALIZASALDOCCDESCFIN' }) + atualizasaldoccdescfin: string; + + @Column({ name: 'OBS_ADIC' }) + obs_adic: string; + + @Column({ name: 'LIMCREDCPF' }) + limcredcpf: number; + + @Column({ name: 'BLOQUEIODEFINITIVO' }) + bloqueiodefinitivo: string; + + @Column({ name: 'COMPLEMENTOCOB' }) + complementocob: string; + + @Column({ name: 'NUMEROENT' }) + numeroent: string; + + @Column({ name: 'NUMEROCOB' }) + numerocob: string; + + @Column({ name: 'COMPLEMENTOCOM' }) + complementocom: string; + + @Column({ name: 'NUMEROCOM' }) + numerocom: string; + + @Column({ name: 'DTVALIDADECONV' }) + dtvalidadeconv: Date; + + @Column({ name: 'BLOQUEIODATACHEQ' }) + bloqueiodatacheq: string; + + @Column({ name: 'PERMITEALTERCOBRANCACR' }) + permitealtercobrancacr: string; + + @Column({ name: 'DTULTALTERSRVPRC' }) + dtultaltersrvprc: Date; + + @Column({ name: 'USACRECLIFAT' }) + usacreclifat: string; + + @Column({ name: 'PERCOMFILIALBROKER' }) + percomfilialbroker: number; + + @Column({ name: 'PERFRETEBROKER' }) + perfretebroker: number; + + @Column({ name: 'BLOQVENDAPF' }) + bloqvendapf: string; + + @Column({ name: 'AREALOJAM2' }) + arealojam2: number; + + @Column({ name: 'CODCLIWEB' }) + codcliweb: number; + + @Column({ name: 'SACADOELETRONICO' }) + sacadoeletronico: string; + + @Column({ name: 'NUMREGISTROIMUNE' }) + numregistroimune: string; + + @Column({ name: 'INVESTIMENTO' }) + investimento: string; + + @Column({ name: 'FOCO' }) + foco: string; + + @Column({ name: 'FOTOGRAFIASUCESSO' }) + fotografiasucesso: string; + + @Column({ name: 'PDVINVESTIMENTO' }) + pdvinvestimento: string; + + @Column({ name: 'CONTAGEMESTOQUE' }) + contagemestoque: string; + + @Column({ name: 'PARTICIPAFUNCEP' }) + participafuncep: string; + + @Column({ name: 'CODPROFISSIONAL' }) + codprofissional: number; + + @Column({ name: 'ATENDEDOMINGO' }) + atendedomingo: string; + + @Column({ name: 'ATENDESEGUNDA' }) + atendesegunda: string; + + @Column({ name: 'ATENDETERCA' }) + atendeterca: string; + + @Column({ name: 'ATENDEQUARTA' }) + atendequarta: string; + + @Column({ name: 'ATENDEQUINTA' }) + atendequinta: string; + + @Column({ name: 'ATENDESEXTA' }) + atendesexta: string; + + @Column({ name: 'ATENDESABADO' }) + atendesabado: string; + + @Column({ name: 'EMITEPVENDANFSEMDESC' }) + emitepvendanfsemdesc: string; + + @Column({ name: 'LONGITUDE' }) + longitude: number; + + @Column({ name: 'LATITUDE' }) + latitude: number; + + @Column({ name: 'DATACOLETA' }) + datacoleta: Date; + + @Column({ name: 'STATUSCONSULTASINTEGRA' }) + statusconsultasintegra: string; + + @Column({ name: 'DATACONSULTASINTEGRA' }) + dataconsultasintegra: Date; + + @Column({ name: 'PERMINVALIDADE' }) + perminvalidade: number; + + @Column({ name: 'CODCLIINT' }) + codcliint: number; + + @Column({ name: 'GERARCREDITODEVCLI' }) + gerarcreditodevcli: string; + + @Column({ name: 'RETENCAOISS' }) + retencaoiss: string; + + @Column({ name: 'HORACADASTRO' }) + horacadastro: Date; + + @Column({ name: 'ANVISA' }) + anvisa: string; + + @Column({ name: 'SUS' }) + sus: string; + + @Column({ name: 'TIPOCUSTOTRANSF_FILIALVIRTUAL' }) + tipocustotransf_filialvirtual: string; + + @Column({ name: 'PERCTOLVALIDADEPRODWMS' }) + perctolvalidadeprodwms: number; + + @Column({ name: 'PRAZOMEDIOPLPAG' }) + prazomedioplpag: number; + + @Column({ name: 'UTILIZAPRAZOMEDIOPLPAG' }) + utilizaprazomedioplpag: string; + + @Column({ name: 'NUMALVARASUS' }) + numalvarasus: string; + + @Column({ name: 'DTVENCALVARASUS' }) + dtvencalvarasus: Date; + + @Column({ name: 'ZONA' }) + zona: number; + + @Column({ name: 'BLOQUEIOSEFAZPED' }) + bloqueiosefazped: string; + + @Column({ name: 'IMPORTADOCRM' }) + importadocrm: string; + + @Column({ name: 'SIMPLESNACIONAL' }) + simplesnacional: string; + + @Column({ name: 'CNPJCISP' }) + cnpjcisp: string; + + @Column({ name: 'OBSENTREGA4' }) + obsentrega4: string; + + @Column({ name: 'CODBAIRROENT' }) + codbairroent: number; + + @Column({ name: 'CODBAIRROCOM' }) + codbairrocom: number; + + @Column({ name: 'CODBAIRROCOB' }) + codbairrocob: number; + + @Column({ name: 'NUMCARTAOFIDELIDADE' }) + numcartaofidelidade: string; + + @Column({ name: 'ENVIOPDFNFE' }) + enviopdfnfe: string; + + @Column({ name: 'AGREGARVALORSTDESCFIN' }) + agregarvalorstdescfin: string; + + @Column({ name: 'GERATITULOST' }) + geratitulost: string; + + @Column({ name: 'PRAZOVENCST' }) + prazovencst: number; + + @Column({ name: 'DTVENCALVARAANVISA' }) + dtvencalvaraanvisa: Date; + + @Column({ name: 'DTVENCCRF' }) + dtvenccrf: Date; + + @Column({ name: 'NUMALVARAANVISA' }) + numalvaraanvisa: string; + + @Column({ name: 'NUMCRF' }) + numcrf: string; + + @Column({ name: 'ACEITASIMILAR' }) + aceitasimilar: string; + + @Column({ name: 'TIPOTRATAMENTODESCFIN' }) + tipotratamentodescfin: string; + + @Column({ name: 'QTDDIASAPLICDESCFIN' }) + qtddiasaplicdescfin: number; + + @Column({ name: 'VLMINIMOST' }) + vlminimost: number; + + @Column({ name: 'ENVIONFEEMAILCOM' }) + envionfeemailcom: string; + + @Column({ name: 'PISCOFINSCUMULATIVO' }) + piscofinscumulativo: string; + + @Column({ name: 'DTINIVISTORIA' }) + dtinivistoria: Date; + + @Column({ name: 'PERIODVISTORIA' }) + periodvistoria: number; + + @Column({ name: 'DTPROXVISTORIA' }) + dtproxvistoria: Date; + + @Column({ name: 'CODPLPAGETICO' }) + codplpagetico: number; + + @Column({ name: 'CODPLPAGGENERICO' }) + codplpaggenerico: number; + + @Column({ name: 'UTILIZAPLPAGMEDICAMENTO' }) + utilizaplpagmedicamento: string; + + @Column({ name: 'PRECOUTILIZADONFE' }) + precoutilizadonfe: string; + + @Column({ name: 'NUMCRM' }) + numcrm: string; + + @Column({ name: 'DIRETORIOCONTRATO' }) + diretoriocontrato: string; + + @Column({ name: 'TIPOATIVCLI' }) + tipoativcli: string; + + @Column({ name: 'CODPAIS' }) + codpais: number; + + @Column({ name: 'USADESCFINSEPARADODESCCOM' }) + usadescfinseparadodesccom: string; + + @Column({ name: 'UTILIZAPEDCLINFE' }) + utilizapedclinfe: string; + + @Column({ name: 'CODCONTAB' }) + codcontab: string; + + @Column({ name: 'USADESCONTOICMS' }) + usadescontoicms: string; + + @Column({ name: 'CODGLN' }) + codgln: number; + + @Column({ name: 'ISENCAOSUFRAMA' }) + isencaosuframa: string; + + @Column({ name: 'REGISTROIBAMA' }) + registroibama: string; + + @Column({ name: 'DTVALIDADEIBAMA' }) + dtvalidadeibama: Date; + + @Column({ name: 'GEOTIPOEMBALAGEM' }) + geotipoembalagem: string; + + @Column({ name: 'GEOTIPOPRECOST' }) + geotipoprecost: string; + + @Column({ name: 'SENHACONVECF' }) + senhaconvecf: string; + + @Column({ name: 'BLOQREMCOB' }) + bloqremcob: string; + + @Column({ name: 'CLIATACADO' }) + cliatacado: string; + + @Column({ name: 'NUMALVARARETINOICO' }) + numalvararetinoico: string; + + @Column({ name: 'DTVENCALVARARETINOICO' }) + dtvencalvararetinoico: Date; + + @Column({ name: 'USAVENDAEXPORTACAO' }) + usavendaexportacao: string; + + @Column({ name: 'NOMEFARMACEUTICO' }) + nomefarmaceutico: string; + + @Column({ name: 'NUMALVARAESPEC' }) + numalvaraespec: string; + + @Column({ name: 'IDINTEGRACAOMYFROTA' }) + idintegracaomyfrota: string; + + @Column({ name: 'CODPLPAGAGRUPAUTOMATIC' }) + codplpagagrupautomatic: number; + + @Column({ name: 'PERIODICIDADEAGRUP' }) + periodicidadeagrup: number; + + @Column({ name: 'DTULTAGRUPAMENTO' }) + dtultagrupamento: Date; + + @Column({ name: 'TIPOVENDA' }) + tipovenda: string; + + @Column({ name: 'TAXABOLETONF' }) + taxaboletonf: string; + + @Column({ name: 'TURNOENTREGA' }) + turnoentrega: string; + + @Column({ name: 'PERDESMAXPONDERADO' }) + perdesmaxponderado: number; + + @Column({ name: 'EMPRESACONVENIADA' }) + empresaconveniada: string; + + @Column({ name: 'DIAFECHACONVENIO' }) + diafechaconvenio: number; + + @Column({ name: 'QTDIASCARENCIACONV' }) + qtdiascarenciaconv: number; + + @Column({ name: 'APLICREDBASEICMSTRANSP' }) + aplicredbaseicmstransp: string; + + @Column({ name: 'DTPROXDESDAGENDADO' }) + dtproxdesdagendado: Date; + + @Column({ name: 'UTILIZACALCULOSTMT' }) + utilizacalculostmt: string; + + @Column({ name: 'TPCOMUNICADOSERASA' }) + tpcomunicadoserasa: string; + + @Column({ name: 'SERASAGERENCIE' }) + serasagerencie: string; + + @Column({ name: 'DTSERASAGERENCIE' }) + dtserasagerencie: Date; + + @Column({ name: 'PRAZOSERASAGERENCIE' }) + prazoserasagerencie: number; + + @Column({ name: 'DESCONSVALIDASEFAZ' }) + desconsvalidasefaz: string; + + @Column({ name: 'USADEBCREDRCA' }) + usadebcredrca: string; + + @Column({ name: 'ORGAOPUBMUNICIPAL' }) + orgaopubmunicipal: string; + + @Column({ name: 'CODCIDADECOM' }) + codcidadecom: number; + + @Column({ name: 'CODPROMOCAOMED' }) + codpromocaomed: number; + + @Column({ name: 'DTULTALTER1203' }) + dtultalter1203: Date; + + @Column({ name: 'CODFUNCULTALTER1203' }) + codfuncultalter1203: number; + + @Column({ name: 'CLICRM' }) + clicrm: string; + + @Column({ name: 'RECEBERBOLETOPOREMAIL' }) + receberboletoporemail: string; + + @Column({ name: 'DIAFATURAR' }) + diafaturar: number; + + @Column({ name: 'NILPLPAGSOBREPOEPLPAGDISTRIB' }) + nilplpagsobrepoeplpagdistrib: string; + + @Column({ name: 'PARTICIPAFARMACIAPOPULAR' }) + participafarmaciapopular: string; + + @Column({ name: 'TV10USACUSTOPRODUTO' }) + tv10usacustoproduto: string; + + @Column({ name: 'USASEGURO' }) + usaseguro: string; + + @Column({ name: 'TIPOSEGURO' }) + tiposeguro: string; + + @Column({ name: 'USAREGIMEESPISENSTFONTE' }) + usaregimeespisenstfonte: string; + + @Column({ name: 'PERMITEAGRUPAMENTO' }) + permiteagrupamento: string; + + @Column({ name: 'EMAILCOB' }) + emailcob: string; + + @Column({ name: 'NOTIFICACAOTGI' }) + notificacaotgi: string; + + @Column({ name: 'CODFUNCANALISECRED' }) + codfuncanalisecred: number; + + @Column({ name: 'VALPESOVARMAPAWMS' }) + valpesovarmapawms: string; + + @Column({ name: 'BLOQUEIOINATIVIDADE' }) + bloqueioinatividade: string; + + @Column({ name: 'UTILIZATXDIFENTREGA' }) + utilizatxdifentrega: string; + + @Column({ name: 'ISENTOTXENTREGA' }) + isentotxentrega: string; + + @Column({ name: 'RIOLOG' }) + riolog: string; + + @Column({ name: 'VENDALOCESTRANG' }) + vendalocestrang: string; + + @Column({ name: 'IDENTIFICESTRANG' }) + identificestrang: string; + + @Column({ name: 'VALIDARLIMBONIFIC' }) + validarlimbonific: string; + + @Column({ name: 'TIPOCUSTOMANIF' }) + tipocustomanif: string; + + @Column({ name: 'DIALIMITFATU' }) + dialimitfatu: number; + + @Column({ name: 'CODCNES' }) + codcnes: string; + + @Column({ name: 'NUMDIASPROTESTO' }) + numdiasprotesto: number; + + @Column({ name: 'TIPODIAUTILROTA' }) + tipodiautilrota: string; + + @Column({ name: 'LIMITECREDSUPPLI' }) + limitecredsuppli: number; + + @Column({ name: 'USACMVDIFERENCIADO' }) + usacmvdiferenciado: string; + + @Column({ name: 'SITUACAOECOMMERCEUNILEVER' }) + situacaoecommerceunilever: string; + + @Column({ name: 'PAGCHEQUEMORADIA' }) + pagchequemoradia: string; + + @Column({ name: 'USATDE' }) + usatde: string; + + @Column({ name: 'CODROTAINSERVIVEL' }) + codrotainservivel: number; + + @Column({ name: 'PRAZOENTREGACARCACA' }) + prazoentregacarcaca: number; + + @Column({ name: 'CODUSURECOMMERCE' }) + codusurecommerce: number; + + @Column({ name: 'PROXNUMSEQEND' }) + proxnumseqend: number; + + @Column({ name: 'QTDIASVENCLIMCRED' }) + qtdiasvenclimcred: number; + + @Column({ name: 'COZINHAINDUSTRIAL' }) + cozinhaindustrial: string; + + @Column({ name: 'AUX_QTDIASVENCLIMCRED' }) + aux_qtdiasvenclimcred: number; + + @Column({ name: 'ACIONAMENTOCLIENTE' }) + acionamentocliente: string; + + @Column({ name: 'DTALTDADOSBANCARIOS' }) + dtaltdadosbancarios: Date; + + @Column({ name: 'DTULTALTERCLASSE' }) + dtultalterclasse: Date; + + @Column({ name: 'MELDTABERTCC1' }) + meldtabertcc1: Date; + + @Column({ name: 'MELDTABERTCC2' }) + meldtabertcc2: Date; + + @Column({ name: 'MELDTABERTCC3' }) + meldtabertcc3: Date; + + @Column({ name: 'DTSYNCPATHFIND' }) + dtsyncpathfind: Date; + + @Column({ name: 'ACEITAPEDMONTPATHFIND' }) + aceitapedmontpathfind: string; + + @Column({ name: 'ACEITAINSERIRPRODUTOAUT' }) + aceitainserirprodutoaut: string; + + @Column({ name: 'TV1OBRIGATORIOTV5' }) + tv1obrigatoriotv5: string; + + @Column({ name: 'TIPODOCUMENTOENTREGAFUTURA' }) + tipodocumentoentregafutura: string; + + @Column({ name: 'CRF' }) + crf: string; + + @Column({ name: 'DIGAGENCIA1' }) + digagencia1: string; + + @Column({ name: 'EMAILNFE' }) + emailnfe: string; + + @Column({ name: 'INCIDENCIACPRB' }) + incidenciacprb: string; + + @Column({ name: 'CODCLASSE_DMS' }) + codclasse_dms: string; + + @Column({ name: 'CLIEXCLUSIVO_DMS' }) + cliexclusivo_dms: string; + + @Column({ name: 'CODGRUPO_DMS' }) + codgrupo_dms: string; + + @Column({ name: 'CODCANAL_DMS' }) + codcanal_dms: string; + + @Column({ name: 'CODSEGMENTACAO_DMS' }) + codsegmentacao_dms: string; + + @Column({ name: 'CODTIPONEGOCIO_DMS' }) + codtiponegocio_dms: string; + + @Column({ name: 'ENVIARCADINTEGRA_DMS' }) + enviarcadintegra_dms: string; + + @Column({ name: 'CODHOLDIN_DMS' }) + codholdin_dms: string; + + @Column({ name: 'CODBANDEIRA_DMS' }) + codbandeira_dms: string; + + @Column({ name: 'FREQVISITA_DMS' }) + freqvisita_dms: string; + + @Column({ name: 'CODTIPOVENDA_DMS' }) + codtipovenda_dms: string; + + @Column({ name: 'PERCREDICMS' }) + percredicms: number; + + @Column({ name: 'CLIMEIOPTANTESN' }) + climeioptantesn: string; + + @Column({ name: 'TELENTFACULTATIVO' }) + telentfacultativo: string; + + @Column({ name: 'TELCOMFACULTATIVO' }) + telcomfacultativo: string; + + @Column({ name: 'DTINCLUSAO' }) + dtinclusao: Date; + + @Column({ name: 'MOTIVOBLOQ' }) + motivobloq: string; + + @Column({ name: 'PERCFRETEAUTON' }) + percfreteauton: number; + + @Column({ name: 'USAREGIMEESPISENREDICMS' }) + usaregimeespisenredicms: string; + + @Column({ name: 'POSSUIBENFFISCAL' }) + possuibenffiscal: string; + + @Column({ name: 'CHECKINAPP' }) + checkinapp: Date; + + @Column({ name: 'IDSOFITVIEW' }) + idsofitview: string; + + @Column({ name: 'DTULTALTERSOFITVIEW' }) + dtultaltersofitview: Date; + + @Column({ name: 'DTEXCLUSAOSOFITVIEW' }) + dtexclusaosofitview: Date; + + @Column({ name: 'RAZAORECEBEDORENDENT' }) + razaorecebedorendent: string; + + @Column({ name: 'CEPRECEBEDORENDENT' }) + ceprecebedorendent: number; + + @Column({ name: 'IERECEBEDORENDENT' }) + ierecebedorendent: number; + + @Column({ name: 'FONERECEBEDORENDENT' }) + fonerecebedorendent: number; + + @Column({ name: 'CODPAISRECEBEDORENDENT' }) + codpaisrecebedorendent: number; + + @Column({ name: 'EMAILRECEBEDORENDENT' }) + emailrecebedorendent: string; + + @Column({ name: 'QTDIASAVENCERPRODUTO' }) + qtdiasavencerproduto: number; + + @Column({ name: 'CODCONDCOMERCIAL' }) + codcondcomercial: string; + + @Column({ name: 'MEIOCOMUNICACAO' }) + meiocomunicacao: string; + + @Column({ name: 'CODGRUPOCOMERCIALMED' }) + codgrupocomercialmed: number; + + @Column({ name: 'CODCAMINHOENTREGAMED' }) + codcaminhoentregamed: number; + + @Column({ name: 'CODCATEGORIA' }) + codcategoria: number; + + @Column({ name: 'CODSUBCATEGORIA' }) + codsubcategoria: number; + + @OneToMany(() => Pcnfsaid, notas => notas.pcclient) + notas: Pcnfsaid[]; + + @OneToMany(() => Pcpedc, pedidos => pedidos.pcclient) + pedidos: Pcpedc[]; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcclientendent.entity.ts b/src/domain/entity/tables/pcclientendent.entity.ts new file mode 100644 index 0000000..a1e4b5b --- /dev/null +++ b/src/domain/entity/tables/pcclientendent.entity.ts @@ -0,0 +1,82 @@ +import { Pcpedc } from './pcpedc.entity'; +import { Entity, Column, PrimaryColumn, OneToMany } from "typeorm"; + +@Entity('PCCLIENTENDENT') +export class Pcclientendent { + + @PrimaryColumn({name: 'CODCLI'}) + codcli: number; + + @PrimaryColumn({name: 'CODENDENTCLI'}) + codendentcli: number; + + @Column({name: 'BAIRROENT'}) + bairroent: string; + + @Column({name: 'MUNICENT'}) + municent: string; + + @Column({name: 'ESTENT'}) + estent: string; + + @Column({name: 'CEPENT'}) + cepent: string; + + @Column({name: 'ENDERENT'}) + enderent: string; + + @Column({name: 'COMPLEMENTOENT'}) + complementoent: string; + + @Column({name: 'NUMEROENT'}) + numeroent: string; + + @Column({name: 'CODMUNICIPIO'}) + codmunicipio: number; + + @Column({name: 'CODCIDADE'}) + codcidade: number; + + @Column({name: 'PONTOREFER'}) + pontorefer: string; + + @Column({name: 'LONGITUDE'}) + longitude: string; + + @Column({name: 'LATITUDE'}) + latitude: string; + + @Column({name: 'OBSERVACAO'}) + observacao: string; + + @Column({name: 'FONERECEBEDOR'}) + fonerecebedor: number; + + @Column({name: 'TELENT'}) + telent: string; + + @Column({name: 'CODPRACAENT'}) + codpracaent: number; + + @Column({name: 'EMAILRECEBEDOR'}) + emailRecebedor: string; + + @Column({name: 'RAZAORECEBEDOR'}) + razaorecebedor: string; + + @Column({name: 'NUMREGIAO'}) + numregiao: number; + + @Column({name: 'FANTASIA'}) + fantasia: string; + + @Column({name: 'CEPRECEBEDOR'}) + ceprecebedor: string; + + @Column({name: 'CODPAISRECEBEDOR'}) + codpaisrecebedor: number; + + @OneToMany(() => Pcpedc, pedidos => pedidos.pcclientendent) + pedidos: Pcpedc[]; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pccob.entity.ts b/src/domain/entity/tables/pccob.entity.ts new file mode 100644 index 0000000..670ed23 --- /dev/null +++ b/src/domain/entity/tables/pccob.entity.ts @@ -0,0 +1,269 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('PCCOB') +export class Pccob { + @PrimaryColumn({ name: 'CODCOB' }) + codcob: string; + + @Column({ name: 'COBRANCA' }) + cobranca: string; + + @Column({ name: 'PAGCOMISSAO' }) + pagcomissao: string; + + @Column({ name: 'TXJUROS' }) + txjuros: number; + + @Column({ name: 'CODMOEDA' }) + codmoeda: string; + + @Column({ name: 'BAIXACXBANCO' }) + baixacxbanco: string; + + @Column({ name: 'NIVELVENDA' }) + nivelvenda: number; + + @Column({ name: 'FLUXOCX' }) + fluxocx: string; + + @Column({ name: 'COLUNAFLUXOCX' }) + colunafluxocx: number; + + @Column({ name: 'NUMDIASVENCFLUXOCX' }) + numdiasvencfluxocx: number; + + @Column({ name: 'BLOQAUTOMATICO' }) + bloqautomatico: string; + + @Column({ name: 'NUMDIASBLOQAUTOMATIC' }) + numdiasbloqautomatic: number; + + @Column({ name: 'EXIBIRCXMOT' }) + exibircxmot: string; + + @Column({ name: 'EXIBIRBK' }) + exibirbk: string; + + @Column({ name: 'PERCACRESVENDA' }) + percacresvenda: number; + + @Column({ name: 'PRAZOMAXIMOVENDA' }) + prazomaximovenda: number; + + @Column({ name: 'LETRACOB' }) + letracob: string; + + @Column({ name: 'BOLETO' }) + boleto: string; + + @Column({ name: 'CUSTODIA' }) + custodia: string; + + @Column({ name: 'PERMITEALTCOBDESD' }) + permitealtcobdesd: string; + + @Column({ name: 'PERCOM' }) + percom: number; + + @Column({ name: 'VLTARIFA' }) + vltarifa: number; + + @Column({ name: 'CODECF' }) + codecf: string; + + @Column({ name: 'CARTAO' }) + cartao: string; + + @Column({ name: 'OBSNF' }) + obsnf: string; + + @Column({ name: 'NUMDIASLIBERACAOCREDITO' }) + numdiasliberacaocredito: number; + + @Column({ name: 'CODCLICC' }) + codclicc: number; + + @Column({ name: 'PRAZOCC' }) + prazocc: number; + + @Column({ name: 'PERCTXADMINCC' }) + perctxadmincc: number; + + @Column({ name: 'CODCONTACC' }) + codcontacc: number; + + @Column({ name: 'CODCOBCC' }) + codcobcc: string; + + @Column({ name: 'ENVIACOBRANCAFV' }) + enviacobrancafv: string; + + @Column({ name: 'VALIDALIMCREDECF' }) + validalimcredecf: string; + + @Column({ name: 'DIASCARENCIA' }) + diascarencia: number; + + @Column({ name: 'ACERTOAUTOCXMOT' }) + acertoautocxmot: string; + + @Column({ name: 'CODPARAPROTESTO' }) + codparaprotesto: string; + + @Column({ name: 'ENVIOPARAPROTESTO' }) + envioparaprotesto: string; + + @Column({ name: 'NUMDIASPROTESTO' }) + numdiasprotesto: string; + + @Column({ name: 'NUMBANCO' }) + numbanco: number; + + @Column({ name: 'PERMITEDESCDEVCLI' }) + permitedescdevcli: string; + + @Column({ name: 'PERCOMMOT' }) + percommot: number; + + @Column({ name: 'COBRANCABROKER' }) + cobrancabroker: string; + + @Column({ name: 'VLMINPEDIDO' }) + vlminpedido: number; + + @Column({ name: 'DEPOSITOBANCARIO' }) + depositobancario: string; + + @Column({ name: 'TIPOCOMISSAO' }) + tipocomissao: string; + + @Column({ name: 'CODBANCOTARIFA' }) + codbancotarifa: number; + + @Column({ name: 'CODFILIAL' }) + codfilial: string; + + @Column({ name: 'EXPORTARECF' }) + exportarecf: string; + + @Column({ name: 'CODBANCO' }) + codbanco: number; + + @Column({ name: 'SOMATARIFABANCDUPLIC' }) + somatarifabancduplic: string; + + @Column({ name: 'SOMATARIFABANCNF' }) + somatarifabancnf: string; + + @Column({ name: 'CODOPERADORACARTAO' }) + codoperadoracartao: string; + + @Column({ name: 'TIPOOPERACAOTEF' }) + tipooperacaotef: string; + + @Column({ name: 'TIPOPAGTOECF' }) + tipopagtoecf: string; + + @Column({ name: 'NUMMAXPARCELAS' }) + nummaxparcelas: number; + + @Column({ name: 'CODPARANAOPROTESTO' }) + codparanaoprotesto: string; + + @Column({ name: 'PERMITEBAIXAMANUAL' }) + permitebaixamanual: string; + + @Column({ name: 'NUMVIASCPADICIONAL' }) + numviascpadicional: string; + + @Column({ name: 'CODBANDEIRA' }) + codbandeira: number; + + @Column({ name: 'SELECIONACLIENTEECF' }) + selecionaclienteecf: string; + + @Column({ name: 'AUTENTICARACERTOCX402' }) + autenticaracertocx402: string; + + @Column({ name: 'UTILIZACHDESC' }) + utilizachdesc: string; + + @Column({ name: 'CODCOBCHDESC' }) + codcobchdesc: string; + + @Column({ name: 'CODCOBDEVCHDESC' }) + codcobdevchdesc: string; + + @Column({ name: 'PERMITECONTRAVALE' }) + permitecontravale: string; + + @Column({ name: 'COBRANCAEMTRANSITO' }) + cobrancaemtransito: string; + + @Column({ name: 'CALCJUROSCOBRANCA' }) + calcjuroscobranca: string; + + @Column({ name: 'CODIGOBANDEIRA' }) + codigobandeira: string; + + @Column({ name: 'CONVENIO' }) + convenio: string; + + @Column({ name: 'RECARGACELULAR' }) + recargacelular: string; + + @Column({ name: 'CODREDE' }) + codrede: number; + + @Column({ name: 'TXPRIMEIRAPARCELA' }) + txprimeiraparcela: string; + + @Column({ name: 'NAOVALIDAPRAZOMEDIO' }) + naovalidaprazomedio: string; + + @Column({ name: 'CHEQUE' }) + cheque: string; + + @Column({ name: 'FLEXIVEL' }) + flexivel: string; + + @Column({ name: 'CODCOBSEFAZ' }) + codcobsefaz: string; + + @Column({ name: 'CODBANDEIRAOPERADORACARTAO' }) + codbandeiraoperadoracartao: string; + + @Column({ name: 'BANDEIRACARTAO' }) + bandeiracartao: number; + + @Column({ name: 'PERCMULTA' }) + percmulta: number; + + @Column({ name: 'COBSUPPLIERCARD' }) + cobsuppliercard: string; + + @Column({ name: 'INDPAG' }) + indpag: number; + + @Column({ name: 'DTMXSALTER' }) + dtmxsalter: Date; + + @Column({ name: 'MXDIASINAD' }) + mxdiasinad: number; + + @Column({ name: 'MXINAD' }) + mxinad: string; + + @Column({ name: 'CODOUTRO' }) + codoutro: string; + + @Column({ name: 'CARTEIRADIGITAL' }) + carteiradigital: string; + + @Column({ name: 'NOMECARTEIRADIGITAL' }) + nomecarteiradigital: string; + + @Column({ name: 'DESCRICAOFORMAPAGTO' }) + descricaoformapagto: string; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcconsum.entity.ts b/src/domain/entity/tables/pcconsum.entity.ts new file mode 100644 index 0000000..d442924 --- /dev/null +++ b/src/domain/entity/tables/pcconsum.entity.ts @@ -0,0 +1,9 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('PCCONSUM') +export class Pcconsum { + @PrimaryColumn({name: 'CODCLIPC'}) + codclipc: number; + @Column({name: 'PROXNUMCLI'}) + proxnumcli: number; +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcdepto.entity.ts b/src/domain/entity/tables/pcdepto.entity.ts new file mode 100644 index 0000000..1195c59 --- /dev/null +++ b/src/domain/entity/tables/pcdepto.entity.ts @@ -0,0 +1,24 @@ +import { Column, Entity, OneToMany, PrimaryColumn } from "typeorm"; +import { Esttipoproduto } from './esttipoproduto.entity'; +import { Pcsecao } from './pcsecao.entity'; + + +@Entity("PCDEPTO") +export class Pcdepto { + + @PrimaryColumn({name: "CODEPTO"}) + codigoDepartamento: number; + + @Column({name: "DESCRICAO"}) + descricaoDepartamento: string; + + @Column({name: "TITULOECOMMERCE"}) + tituloEcommerce: string; + + @OneToMany(() => Pcsecao, secao => secao.departamento) + secao: Pcsecao[]; + + @OneToMany(() => Esttipoproduto, tipoProduto => tipoProduto.departamento) + tiposProduto: Esttipoproduto[]; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcempr.entity.ts b/src/domain/entity/tables/pcempr.entity.ts new file mode 100644 index 0000000..15af018 --- /dev/null +++ b/src/domain/entity/tables/pcempr.entity.ts @@ -0,0 +1,559 @@ +import { Entity, Column, PrimaryColumn } from "typeorm"; + +@Entity('PCEMPR') +export class Pcempr { + + @PrimaryColumn({name: 'MATRICULA'}) + matricula: number; + + @Column({name: 'NOME'}) + nome: string; + + @Column({name: 'DT_EXCLUSAO'}) + dt_exclusao: Date; + + @Column({name: 'NOME_GUERRA'}) + nome_guerra: string; + + @Column({name: 'ADMISSAO'}) + admissao: Date; + + @Column({name: 'ENDERECO'}) + endereco: string; + + @Column({name: 'BAIRRO'}) + bairro: string; + + @Column({name: 'CIDADE'}) + cidade: string; + + @Column({name: 'ESTADO'}) + estado: string; + + @Column({name: 'FONE'}) + fone: string; + + @Column({name: 'CODSETOR'}) + codsetor: number; + + @Column({name: 'USUARIOBD'}) + usuariobd: string; + + @Column({name: 'SENHABD'}) + senhabd: string; + + @Column({name: 'SITUACAO'}) + situacao: string; + + @Column({name: 'CPF'}) + cpf: string; + + @Column({name: 'TIPOVENDA'}) + tipovenda: string; + + @Column({name: 'CODFILIAL'}) + codfilial: string; + + @Column({name: 'CODUSUR'}) + codusur: number; + + @Column({name: 'CELULAR'}) + celular: string; + + @Column({name: 'NUMBANCO'}) + numbanco: number; + + @Column({name: 'NUMAGENCIA'}) + numagencia: number; + + @Column({name: 'NUMCCORRENTE'}) + numccorrente: string; + + @Column({name: 'NUMCENTRALPA'}) + numcentralpa: number; + + @Column({name: 'NUMCENTRALTEL'}) + numcentraltel: string; + + @Column({name: 'PERMITEALTJUROSBX'}) + permitealtjurosbx: string; + + @Column({name: 'VLAUMENTOLIMCRED'}) + vlaumentolimcred: number; + + @Column({name: 'TIPO'}) + tipo: string; + + @Column({name: 'RG'}) + rg: string; + + @Column({name: 'CTPS'}) + ctps: string; + + @Column({name: 'PIS'}) + pis: string; + + @Column({name: 'FUNCAO'}) + funcao: string; + + @Column({name: 'EMAIL'}) + email: string; + + @Column({name: 'FATORCOMISSAO'}) + fatorcomissao: number; + + @Column({name: 'DTEXPIRASENHA'}) + dtexpirasenha: Date; + + @Column({name: 'VLCOMISSTON'}) + vlcomisston: number; + + @Column({name: 'VLCOMISSENT'}) + vlcomissent: number; + + @Column({name: 'VLLIMCREDCOMPRA'}) + vllimcredcompra: number; + + @Column({name: 'DTINICIOLIMCREDCOMPRA'}) + dtiniciolimcredcompra: Date; + + @Column({name: 'DTFIMLIMCREDCOMPRA'}) + dtfimlimcredcompra: Date; + + @Column({name: 'CODCONFERENTE'}) + codconferente: number; + + @Column({name: 'CODFUNCAO'}) + codfuncao: number; + + @Column({name: 'SERIECTPS'}) + seriectps: string; + + @Column({name: 'GERACCCARD'}) + geracccard: string; + + @Column({name: 'MATRICULACCCARD'}) + matriculacccard: number; + + @Column({name: 'VLSALCARTEIRA'}) + vlsalcarteira: number; + + @Column({name: 'VLSALARIO'}) + vlsalario: number; + + @Column({name: 'RESCISAO'}) + rescisao: Date; + + @Column({name: 'NUMFILHOS'}) + numfilhos: number; + + @Column({name: 'COMPLEMENTO'}) + complemento: string; + + @Column({name: 'OBSERVACAO'}) + observacao: string; + + @Column({name: 'PERCVT'}) + percvt: number; + + @Column({name: 'VLPLANOSAUDE'}) + vlplanosaude: number; + + @Column({name: 'VLSALFAMILIA'}) + vlsalfamilia: number; + + @Column({name: 'PERCINSS'}) + percinss: number; + + @Column({name: 'VLPENSAOALIMENTICIA'}) + vlpensaoalimenticia: number; + + @Column({name: 'VLADICIONAL'}) + vladicional: number; + + @Column({name: 'VLVALES'}) + vlvales: number; + + @Column({name: 'VLMAXLIBPEDIDO'}) + vlmaxlibpedido: number; + + @Column({name: 'CNH'}) + cnh: string; + + @Column({name: 'UFCNH'}) + ufcnh: string; + + @Column({name: 'TIPOENVIO'}) + tipoenvio: string; + + @Column({name: 'CODFORNEC'}) + codfornec: number; + + @Column({name: 'PERCOMMOT'}) + percommot: number; + + @Column({name: 'VLFRETEENTREGA'}) + vlfreteentrega: number; + + @Column({name: 'CODVEICULO'}) + codveiculo: number; + + @Column({name: 'PERMITEALTDESCBX'}) + permitealtdescbx: string; + + @Column({name: 'REFERENCIAPESSOAL'}) + referenciapessoal: string; + + @Column({name: 'DDDTEL'}) + dddtel: number; + + @Column({name: 'NOMEPAI'}) + nomepai: string; + + @Column({name: 'NOMEMAE'}) + nomemae: string; + + @Column({name: 'CATEGORIACNH'}) + categoriacnh: string; + + @Column({name: 'TIPOMOTORISTA'}) + tipomotorista: string; + + @Column({name: 'SEXO'}) + sexo: string; + + @Column({name: 'DTNASC'}) + dtnasc: Date; + + @Column({name: 'DTVALIDADECNH'}) + dtvalidadecnh: Date; + + @Column({name: 'ORGAOEMISSORRG'}) + orgaoemissorrg: string; + + @Column({name: 'NACIONALIDADE'}) + nacionalidade: string; + + @Column({name: 'ESTADOCIVIL'}) + estadocivil: string; + + @Column({name: 'PROFISSAO'}) + profissao: string; + + @Column({name: 'USUARIOLOGADO'}) + usuariologado: string; + + @Column({name: 'NUMDVAGENCIA'}) + numdvagencia: string; + + @Column({name: 'NUMCONEXOES'}) + numconexoes: number; + + @Column({name: 'NUMCONEXOESATUAL'}) + numconexoesatual: number; + + @Column({name: 'GRUPOEMAIL'}) + grupoemail: string; + + @Column({name: 'NOMEEMAIL'}) + nomeemail: string; + + @Column({name: 'PERCMINJUROSMORA'}) + percminjurosmora: number; + + @Column({name: 'PERCMAXJUROSMORA'}) + percmaxjurosmora: number; + + @Column({name: 'CODIDIOMA'}) + codidioma: string; + + @Column({name: 'RECMENSFORCAVENDA'}) + recmensforcavenda: string; + + @Column({name: 'PERCEXCLIMCRED'}) + percexclimcred: number; + + @Column({name: 'ENVIAFV'}) + enviafv: string; + + @Column({name: 'PERCREDUZCOMISRCA'}) + percreduzcomisrca: number; + + @Column({name: 'VLSALDOLIMALTCREDITO'}) + vlsaldolimaltcredito: number; + + @Column({name: 'DTINICIO'}) + dtinicio: Date; + + @Column({name: 'TIPOATENDE'}) + tipoatende: string; + + @Column({name: 'GRUPOOS'}) + grupoos: number; + + @Column({name: 'OBSINATIVO'}) + obsinativo: string; + + @Column({name: 'IPRF'}) + iprf: string; + + @Column({name: 'CODBARRA'}) + codbarra: string; + + @Column({name: 'MAXTEMPOSECAOOCIOSA'}) + maxtemposecaoociosa: number; + + @Column({name: 'USARATEIOCOMISSAOOPERADOR'}) + usarateiocomissaooperador: string; + + @Column({name: 'CODIGOPERFIL'}) + codigoperfil: number; + + @Column({name: 'NUMCAIXABALCAO'}) + numcaixabalcao: number; + + @Column({name: 'VENDAASSISTIDA'}) + vendaassistida: string; + + @Column({name: 'NUMDIASPAGTORETROATIVO'}) + numdiaspagtoretroativo: number; + + @Column({name: 'PERMITEPERSONCAD'}) + permitepersoncad: string; + + @Column({name: 'NUMIDENTIFICADORECF'}) + numidentificadorecf: string; + + @Column({name: 'OBS'}) + obs: string; + + @Column({name: 'NUMDIASMAXPRORROG'}) + numdiasmaxprorrog: number; + + @Column({name: 'AREAATUACAO'}) + areaatuacao: string; + + @Column({name: 'NUMINSS'}) + numinss: string; + + @Column({name: 'USABIOMETRIAMENU'}) + usabiometriamenu: string; + + @Column({name: 'PERCDESC'}) + percdesc: number; + + @Column({name: 'NUMDVCONTA'}) + numdvconta: string; + + @Column({name: 'TIPOCOMISSAO'}) + tipocomissao: string; + + @Column({name: 'COMISSAOFIXA'}) + comissaofixa: number; + + @Column({name: 'TIPOAGENTECOB'}) + tipoagentecob: string; + + @Column({name: 'DIASCOB'}) + diascob: number; + + @Column({name: 'LIMITEDESCONTO561'}) + limitedesconto561: number; + + @Column({name: 'USAAVISOAUTOMENU'}) + usaavisoautomenu: string; + + @Column({name: 'PERCMAXDESCTITULO'}) + percmaxdesctitulo: number; + + @Column({name: 'RESPLIBCADASTRO'}) + resplibcadastro: string; + + @Column({name: 'USATABELACLIENTE'}) + usatabelacliente: string; + + @Column({name: 'VLMAXLIMCREDCLI'}) + vlmaxlimcredcli: number; + + @Column({name: 'CODPERFIL'}) + codperfil: number; + + @Column({name: 'USUARIOLOGADORF'}) + usuariologadorf: string; + + @Column({name: 'CONCEDERABATIMENTO'}) + concederabatimento: string; + + @Column({name: 'CODIGOCENTROCUSTO'}) + codigocentrocusto: string; + + @Column({name: 'ORGAOEMISSORCNH'}) + orgaoemissorcnh: string; + + @Column({name: 'QTDEPENDENTES'}) + qtdependentes: number; + + @Column({name: 'IDINTEGRACAOMYFROTA'}) + idintegracaomyfrota: string; + + @Column({name: 'CODCIDADE'}) + codcidade: number; + + @Column({name: 'VLLIMMAXPEDCOMPRA'}) + vllimmaxpedcompra: number; + + @Column({name: 'DTDEMISSAO'}) + dtdemissao: Date; + + @Column({name: 'CHAPA_RM'}) + chapa_rm: string; + + @Column({name: 'RAMAL'}) + ramal: number; + + @Column({name: 'AUTOCHEQUEBLOQVENDA'}) + autochequebloqvenda: string; + + @Column({name: 'SENHAHASH'}) + senhahash: string; + + @Column({name: 'MOTIVOINATIVACAO'}) + motivoinativacao: string; + + @Column({name: 'VLRLIMAPROVARSOLICITACAO'}) + vlrlimaprovarsolicitacao: number; + + @Column({name: 'DTINTEGRACAOMLOG'}) + dtintegracaomlog: Date; + + @Column({name: 'FIID'}) + fiid: string; + + @Column({name: 'AREAATUACAO_COMPRA'}) + areaatuacao_compra: string; + + @Column({name: 'AREAATUACAO_VENDAS'}) + areaatuacao_vendas: string; + + @Column({name: 'AREAATUACAO_FINANCEIRO'}) + areaatuacao_financeiro: string; + + @Column({name: 'AREAATUACAO_LOGISTICA'}) + areaatuacao_logistica: string; + + @Column({name: 'AREAATUACAO_EXPEDICAO'}) + areaatuacao_expedicao: string; + + @Column({name: 'AREAATUACAO_RH'}) + areaatuacao_rh: string; + + @Column({name: 'AREAATUACAO_FISCAL'}) + areaatuacao_fiscal: string; + + @Column({name: 'AREAATUACAO_CONTABIL'}) + areaatuacao_contabil: string; + + @Column({name: 'AREAATUACAO_OUTROS'}) + areaatuacao_outros: string; + + @Column({name: 'TIPOCARGO'}) + tipocargo: string; + + @Column({name: 'CEP'}) + cep: string; + + @Column({name: 'PERDESCMAXITEM'}) + perdescmaxitem: number; + + @Column({name: 'PERDESCMAXRODAPE'}) + perdescmaxrodape: number; + + @Column({name: 'LIM_REDUCAOCREDITO'}) + lim_reducaocredito: number; + + @Column({name: 'LIM_AUMENTOCREDITO'}) + lim_aumentocredito: number; + + @Column({name: 'PERIODO_ALTERACAOCREDITO'}) + periodo_alteracaocredito: number; + + @Column({name: 'DIGITALPOLEGAR'}) + digitalpolegar: string; + + @Column({name: 'DIGITALINDICADOR'}) + digitalindicador: string; + + @Column({name: 'DIGITALMEDIO'}) + digitalmedio: string; + + @Column({name: 'DIGITALANELAR'}) + digitalanelar: string; + + @Column({name: 'DIGITALMINIMO'}) + digitalminimo: string; + + @Column({name: 'DEDOPRIORITARIO'}) + dedoprioritario: string; + + @Column({name: 'SITUACAO_CCW'}) + situacao_ccw: string; + + @Column({name: 'USERMYAUDIT'}) + usermyaudit: string; + + @Column({name: 'SENHAMYAUDIT'}) + senhamyaudit: string; + + @Column({name: 'USERMYBI'}) + usermybi: string; + + @Column({name: 'SENHAMYBI'}) + senhamybi: string; + + @Column({name: 'USERGOGEO'}) + usergogeo: string; + + @Column({name: 'SENHAGOGEO'}) + senhagogeo: string; + + @Column({name: 'IDFORNECENTREGA'}) + idfornecentrega: number; + + @Column({name: 'EMITIRPEDIDO'}) + emitirpedido: string; + + @Column({name: 'EMITIRORCAMENTO'}) + emitirorcamento: string; + + @Column({name: 'PERSONALEMBRETE'}) + personalembrete: Date; + + @Column({name: 'CODFORNEC2'}) + codfornec2: number; + + @Column({name: 'IDSOFITVIEW'}) + idsofitview: string; + + @Column({name: 'DTULTALTERSOFITVIEW'}) + dtultaltersofitview: string; + + @Column({name: 'DTEXCLUSAOSOFITVIEW'}) + dtexclusaosofitview: string; + + @Column({name: 'VOIPMUNDOIPTOKEN'}) + voipmundoiptoken: string; + + @Column({name: 'VOIPMUNDOIPKEY'}) + voipmundoipkey: string; + + @Column({name: 'TELEFONERAMAL'}) + telefoneramal: string; + + @Column({name: 'VOIPMUNDOIDCHAMADA'}) + voipmundoidchamada: string; + + @Column({name: 'HASHSENHAWINTHOR'}) + hashsenhawinthor: string; + + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcfilial.entity.ts b/src/domain/entity/tables/pcfilial.entity.ts new file mode 100644 index 0000000..0e665ef --- /dev/null +++ b/src/domain/entity/tables/pcfilial.entity.ts @@ -0,0 +1,15 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity("PCFILIAL") +export class Store { + + @PrimaryColumn({name: "CODIGO"}) + id: string; + + @Column({name: "RAZAOSOCIAL"}) + name: string; + + @Column({name: "FANTASIA"}) + shortName: string; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcmarca.entity.ts b/src/domain/entity/tables/pcmarca.entity.ts new file mode 100644 index 0000000..7685e92 --- /dev/null +++ b/src/domain/entity/tables/pcmarca.entity.ts @@ -0,0 +1,15 @@ +import { Column, Entity, OneToMany, PrimaryColumn } from "typeorm"; +import { Product } from "./pcprodut.entity"; + +@Entity('PCMARCA') +export class Brand { + @PrimaryColumn({name: 'CODMARCA'}) + id: number; + + @Column({name: "MARCA"}) + description: string; + + @OneToMany(() => Product, product => product.brand) + products: Product[]; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcncm.entity.ts b/src/domain/entity/tables/pcncm.entity.ts new file mode 100644 index 0000000..fc518f3 --- /dev/null +++ b/src/domain/entity/tables/pcncm.entity.ts @@ -0,0 +1,22 @@ +import { Column, Entity, OneToMany, PrimaryColumn } from "typeorm"; +import { Esttipoproduto } from "./esttipoproduto.entity"; + +@Entity("PCNCM") +export class Pcncm { + + @PrimaryColumn({name: "CODNCMEX"}) + codigoNcmEX: string; + + @Column({name: "CODNCM"}) + codigoNcm: string; + + @Column({name: "DESCRICAO"}) + descricaoNcm: string; + + @Column({name: "DTEXCLUSAO"}) + DataExclusao: Date; + + @OneToMany(() => Esttipoproduto, tipoProduto => tipoProduto.registroNcm) + tiposProduto: Esttipoproduto[]; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcnfsaid.entity.ts b/src/domain/entity/tables/pcnfsaid.entity.ts new file mode 100644 index 0000000..1644116 --- /dev/null +++ b/src/domain/entity/tables/pcnfsaid.entity.ts @@ -0,0 +1,1910 @@ +import { Pccarreg } from './pccarreg.entity'; +import { Entity, PrimaryColumn, Column, ManyToOne, JoinColumn, OneToOne, ManyToMany } from "typeorm"; +import { Pcclient } from "./pcclient.entity"; +import { Pcpedc } from "./pcpedc.entity"; +import { Pcclientendent } from './pcclientendent.entity'; + +@Entity('PCNFSAID') +export class Pcnfsaid { + + @PrimaryColumn({ name: 'NUMTRANSVENDA' }) + numtransvenda: number; + + @Column({ name: 'CODPROFISSIONAL' }) + codprofissional: number; + + @Column({ name: 'NUMTRANSENTORIGTV10' }) + numtransentorigtv10: number; + + @Column({ name: 'REDUZICMSDOCTE' }) + reduzicmsdocte: string; + + @Column({ name: 'VLJUROSPARCELAMENTO' }) + vljurosparcelamento: number; + + @Column({ name: 'PCT_ESTOQUE_CANCELAMENTO' }) + pct_estoque_cancelamento: string; + + @Column({ name: 'PCT_CUSTO_CANCELAMENTO' }) + pct_custo_cancelamento: string; + + @Column({ name: 'NFBRINDE' }) + nfbrinde: string; + + @Column({ name: 'NUMCIOT' }) + numciot: string; + + @Column({ name: 'NFBRINDEZERADA' }) + nfbrindezerada: string; + + @Column({ name: 'QTPALETE' }) + qtpalete: number; + + @Column({ name: 'TOTPESOPALETE' }) + totpesopalete: number; + + @Column({ name: 'TIPOIMPRESSAO' }) + tipoimpressao: string; + + @Column({ name: 'CODIGONUMERICOCHAVE' }) + codigonumericochave: string; + + @Column({ name: 'CODFISCALFRETE' }) + codfiscalfrete: number; + + @Column({ name: 'PERCICMFRETE' }) + percicmfrete: number; + + @Column({ name: 'CODFISCALOUTRASDESP' }) + codfiscaloutrasdesp: number; + + @Column({ name: 'ALIQICMOUTRASDESP' }) + aliqicmoutrasdesp: number; + + @Column({ name: 'ATACADISTA' }) + atacadista: string; + + @Column({ name: 'VLINSS' }) + vlinss: number; + + @Column({ name: 'NUMCARANTERIOR' }) + numcaranterior: number; + + @Column({ name: 'CODUSUR4' }) + codusur4: number; + + @Column({ name: 'COMISSAO4' }) + comissao4: number; + + @Column({ name: 'PROTOCOLONFECAN' }) + protocolonfecan: string; + + @Column({ name: 'PROTOCOLONFEAUTO' }) + protocolonfeauto: string; + + @Column({ name: 'COMISSAOMOT' }) + comissaomot: number; + + @Column({ name: 'DTPAGCOMISSAOPROF' }) + dtpagcomissaoprof: Date; + + @Column({ name: 'CONTRIBUINTE' }) + contribuinte: string; + + @Column({ name: 'DTCANCELWMS' }) + dtcancelwms: Date; + + @Column({ name: 'VLCOFINS' }) + vlcofins: number; + + @Column({ name: 'CODFISCALNF' }) + codfiscalnf: number; + + @Column({ name: 'DTLANCTO' }) + dtlancto: Date; + + @Column({ name: 'RECARGA' }) + recarga: string; + + @Column({ name: 'DTFECHACCRCA' }) + dtfechaccrca: Date; + + @Column({ name: 'NUMCONTRATO' }) + numcontrato: number; + + @Column({ name: 'DTHORAAUTORIZACAOSEFAZ' }) + dthoraautorizacaosefaz: Date; + + @Column({ name: 'RECIBONFE' }) + recibonfe: string; + + @Column({ name: 'LOTEDPEC' }) + lotedpec: string; + + @Column({ name: 'RECIBODPEC' }) + recibodpec: string; + + @Column({ name: 'AMBIENTE' }) + ambiente: string; + + @Column({ name: 'PROTOCOLOCANCELAMENTO' }) + protocolocancelamento: string; + + @Column({ name: 'DTHORACANCELAMENTOSEFAZ' }) + dthoracancelamentosefaz: Date; + + @Column({ name: 'DTFECHA' }) + dtfecha: Date; + + @Column({ name: 'VLDESPDENTRONF' }) + vldespdentronf: number; + + @Column({ name: 'DTHORARECIBODPEC' }) + dthorarecibodpec: Date; + + @Column({ name: 'NUMTRANSVENDACONHEC' }) + numtransvendaconhec: number; + + @Column({ name: 'OBSNFE' }) + obsnfe: string; + + @Column({ name: 'TOTDIFALIQUOTAS' }) + totdifaliquotas: number; + + @Column({ name: 'TOTPESOLIQ' }) + totpesoliq: number; + + @Column({ name: 'TOTPESOAGRUPADO' }) + totpesoagrupado: number; + + @Column({ name: 'TOTPESOLIQAGRUPADO' }) + totpesoliqagrupado: number; + + @Column({ name: 'TOTVOLUMEAGRUPADO' }) + totvolumeagrupado: number; + + @Column({ name: 'VENDATRIANGULAR' }) + vendatriangular: string; + + @Column({ name: 'SITUACAOCTE' }) + situacaocte: number; + + @Column({ name: 'RECIBOCTE' }) + recibocte: string; + + @Column({ name: 'PROTOCOLOCTE' }) + protocolocte: string; + + @Column({ name: 'CHAVECTE' }) + chavecte: string; + + @Column({ name: 'NUMLOTECTE' }) + numlotecte: string; + + @Column({ name: 'DTA_HORAENVIOSEFAZ' }) + dta_horaenviosefaz: Date; + + @Column({ name: 'AMBIENTECTE' }) + ambientecte: string; + + @Column({ name: 'AMBIENTENFE' }) + ambientenfe: string; + + @Column({ name: 'NUMSEQENTREGA' }) + numseqentrega: number; + + @Column({ name: 'HORAEMISSAO' }) + horaemissao: string; + + @Column({ name: 'CONTADORCUPOMFISCAL' }) + contadorcupomfiscal: number; + + @Column({ name: 'CODPRODPREDOMINANTE' }) + codprodpredominante: number; + + @Column({ name: 'DTLIBERACAOENTREGA' }) + dtliberacaoentrega: Date; + + @Column({ name: 'CODFUNCLIBERACAOENTREGA' }) + codfuncliberacaoentrega: number; + + @Column({ name: 'VLFRETERETIDO' }) + vlfreteretido: number; + + @Column({ name: 'VLSTFRETERETIDO' }) + vlstfreteretido: number; + + @Column({ name: 'PERCFRETERETIDO' }) + percfreteretido: number; + + @Column({ name: 'PERCSTFRETERETIDO' }) + percstfreteretido: number; + + @Column({ name: 'PRAZO1' }) + prazo1: number; + + @Column({ name: 'PRAZO2' }) + prazo2: number; + + @Column({ name: 'PRAZO3' }) + prazo3: number; + + @Column({ name: 'PRAZO4' }) + prazo4: number; + + @Column({ name: 'PRAZO5' }) + prazo5: number; + + @Column({ name: 'PRAZO6' }) + prazo6: number; + + @Column({ name: 'PRAZO7' }) + prazo7: number; + + @Column({ name: 'PRAZO8' }) + prazo8: number; + + @Column({ name: 'PRAZO9' }) + prazo9: number; + + @Column({ name: 'PRAZO10' }) + prazo10: number; + + @Column({ name: 'PRAZO11' }) + prazo11: number; + + @Column({ name: 'PRAZO12' }) + prazo12: number; + + @Column({ name: 'CUSTOBONIFICACAO' }) + custobonificacao: string; + + @Column({ name: 'CODFORNECBONIFIC' }) + codfornecbonific: number; + + @Column({ name: 'CODBNF' }) + codbnf: number; + + @Column({ name: 'TOTPESOBRUTO' }) + totpesobruto: number; + + @Column({ name: 'DTSAIDANF' }) + dtsaidanf: Date; + + @Column({ name: 'JUSTIFICATIVACONTIGENCIA' }) + justificativacontigencia: string; + + @Column({ name: 'DTAHORAENTRADACONTIGENCIA' }) + dtahoraentradacontigencia: Date; + + @Column({ name: 'CONFERIDO' }) + conferido: string; + + @Column({ name: 'CONSUMIUNUMNFE' }) + consumiunumnfe: string; + + @Column({ name: 'DTHORACTE' }) + dthoracte: Date; + + @Column({ name: 'TENTATIVAENVIOCTE' }) + tentativaenviocte: number; + + @Column({ name: 'PROTOCOLOCANCELAMENTOCTE' }) + protocolocancelamentocte: string; + + @Column({ name: 'CODFORNECREDESPACHO' }) + codfornecredespacho: number; + + @Column({ name: 'EMAILFRETE' }) + emailfrete: string; + + @Column({ name: 'EMAILFRETEREDESPACHO' }) + emailfreteredespacho: string; + + @Column({ name: 'OBSEXP' }) + obsexp: string; + + @Column({ name: 'CONTAORDEM' }) + contaordem: string; + + @Column({ name: 'DATAEMPENHO' }) + dataempenho: Date; + + @Column({ name: 'CODUNIDADEEXECUTORA' }) + codunidadeexecutora: string; + + @Column({ name: 'VLDESCICMS' }) + vldescicms: number; + + @Column({ name: 'VLTOTALSEMDESCICMS'}) + vltotalsemdescicms: number; + + @Column({ name: 'NUMEMPENHO' }) + numempenho: string; + + @Column({ name: 'MENSAGEMPISCOFINS' }) + mensagempiscofins: string; + + @Column({ name: 'VALORST' }) + valorst: number; + + @Column({ name: 'OBSPISCOFINS' }) + obspiscofins: string; + + @Column({ name: 'VLBASEPISCOFINS' }) + vlbasepiscofins: number; + + @Column({ name: 'PERPIS' }) + perpis: number; + + @Column({ name: 'PERCOFINS' }) + percofins: number; + + @Column({ name: 'CODSITTRIBPISCOFINS' }) + codsittribpiscofins: number; + + @Column({ name: 'SITDOC' }) + sitdoc: string; + + @Column({ name: 'FINALIDADENFE' }) + finalidadenfe: string; + + @Column({ name: 'SERIEORIGINAL' }) + serieoriginal: string; + + @Column({ name: 'DTEXPORTACAOWMS' }) + dtexportacaowms: Date; + + @Column({ name: 'DTIMPORTACAOWMS' }) + dtimportacaowms: Date; + + @Column({ name: 'NFATUALWMS' }) + nfatualwms: string; + + @Column({ name: 'EMAILDEST' }) + emaildest: string; + + @Column({ name: 'TELEFONE' }) + telefone: string; + + @Column({ name: 'NUMENDERECO' }) + numendereco: string; + + @Column({ name: 'NUMTRANSENTORIGEM' }) + numtransentorigem: number; + + @Column({ name: 'FORNECENTREGA' }) + fornecentrega: string; + + @Column({ name: 'UFPLACAVEIC' }) + ufplacaveic: string; + + @Column({ name: 'DESPESASRATEADA' }) + despesasrateada: string; + + @Column({ name: 'PISRETIDO' }) + pisretido: string; + + @Column({ name: 'INSSRETIDO' }) + inssretido: string; + + @Column({ name: 'IRRRETIDO' }) + irrretido: string; + + @Column({ name: 'NUMTRANSENTDEST' }) + numtransentdest: number; + + @Column({ name: 'UTILIZAIPICALCICMS' }) + utilizaipicalcicms: string; + + @Column({ name: 'BCSTGNRE' }) + bcstgnre: number; + + @Column({ name: 'VLBONIFIC' }) + vlbonific: number; + + @Column({ name: 'VLIR' }) + vlir: number; + + @Column({ name: 'PERCFRETE' }) + percfrete: number; + + @Column({ name: 'NUMREGIAOFRETE' }) + numregiaofrete: number; + + @Column({ name: 'CODCONDICAOVENDA' }) + codcondicaovenda: number; + + @Column({ name: 'TOTVLDESCFIN' }) + totvldescfin: number; + + @Column({ name: 'TOTVLDESCCOM' }) + totvldesccom: number; + + @Column({ name: 'TOTVLBONIFIC' }) + totvlbonific: number; + + @Column({ name: 'TOTVLDESCFLEX' }) + totvldescflex: number; + + @Column({ name: 'TOTVLREDCOMISS' }) + totvlredcomiss: number; + + @Column({ name: 'NUMVIASPU' }) + numviaspu: number; + + @Column({ name: 'NUMORCA' }) + numorca: number; + + @Column({ name: 'COMISSAOSUP' }) + comissaosup: number; + + @Column({ name: 'DTEMISSAONFFORNEC' }) + dtemissaonffornec: Date; + + @Column({ name: 'TOTVLREDCOMISSSUP' }) + totvlredcomisssup: number; + + @Column({ name: 'BROKER' }) + broker: string; + + @Column({ name: 'PERBASEREDOUTRASDESP' }) + perbaseredoutrasdesp: number; + + @Column({ name: 'TIPOFRETE' }) + tipofrete: string; + + @Column({ name: 'NUMCONTRATOAD' }) + numcontratoad: number; + + @Column({ name: 'DTCONTRATOAD' }) + dtcontratoad: Date; + + @Column({ name: 'NUMREGIAO' }) + numregiao: number; + + @Column({ name: 'VLPIS' }) + vlpis: number; + + @Column({ name: 'PERDESCFIN' }) + perdescfin: number; + + @Column({ name: 'CODCLIRECEBEDOR' }) + codclirecebedor: number; + + @Column({ name: 'NUMCAIXAFISCAL' }) + numcaixafiscal: number; + + @Column({ name: 'DTHORACHEGADA' }) + dthorachegada: Date; + + @Column({ name: 'DTHORASAIDA' }) + dthorasaida: Date; + + @Column({ name: 'KMFINALENTREGA' }) + kmfinalentrega: number; + + @Column({ name: 'GERACAORAZAOAUXILIAR' }) + geracaorazaoauxiliar: string; + + @Column({ name: 'APRESENTOUCUPOMPROMOCAO' }) + apresentoucupompromocao: string; + + @Column({ name: 'NSU' }) + nsu: number; + + @Column({ name: 'DTNSU' }) + dtnsu: Date; + + @Column({ name: 'NUMORCAFILIAL' }) + numorcafilial: number; + + @Column({ name: 'NUMPREVENDA' }) + numprevenda: number; + + @Column({ name: 'GERACP' }) + geracp: string; + + @Column({ name: 'DTEXPORTACAOSERVINT' }) + dtexportacaoservint: Date; + + @Column({ name: 'EXPORTADOSERVINT' }) + exportadoservint: string; + + @Column({ name: 'IMPORTADOSERVPRINC' }) + importadoservprinc: string; + + @Column({ name: 'DTIMPORTACAOSERVPRINC' }) + dtimportacaoservprinc: Date; + + @Column({ name: 'NUMTRANSVENDAECF' }) + numtransvendaecf: number; + + @Column({ name: 'CHAVENFE' }) + chavenfe: string; + + @Column({ name: 'SITUACAONFE' }) + situacaonfe: number; + + @Column({ name: 'PROTOCOLONFE' }) + protocolonfe: string; + + @Column({ name: 'DTHORANFE' }) + dthoranfe: Date; + + @Column({ name: 'IEENT' }) + ieent: string; + + @Column({ name: 'DTPGTOCAMPANHA' }) + dtpgtocampanha: Date; + + @Column({ name: 'NUMECF' }) + numecf: number; + + @Column({ name: 'RESERVARITENSTV7' }) + reservaritenstv7: string; + + @Column({ name: 'VLVERBACMVCLI' }) + vlverbacmvcli: number; + + @Column({ name: 'VENDAASSISTIDA' }) + vendaassistida: string; + + @Column({ name: 'CODEMITENTEPEDIDO' }) + codemitentepedido: number; + + @Column({ name: 'PERCCOMPROFISSIONAL' }) + perccomprofissional: number; + + @Column({ name: 'TIPOEMISSAO' }) + tipoemissao: string; + + @Column({ name: 'ENVIADA' }) + enviada: string; + + @Column({ name: 'NUMLOTENFE' }) + numlotenfe: string; + + @Column({ name: 'AUTENTPGTOGNRE' }) + autentpgtognre: string; + + @Column({ name: 'BANCOPGTOGNRE' }) + bancopgtognre: string; + + @Column({ name: 'AGENCIAPGTOGNRE' }) + agenciapgtognre: string; + + @Column({ name: 'USAINTEGRACAOWMS' }) + usaintegracaowms: string; + + @Column({ name: 'ENVIADANFE' }) + enviadanfe: string; + + @Column({ name: 'CLIENTE' }) + cliente: string; + + @Column({ name: 'CGC' }) + cgc: string; + + @Column({ name: 'IE' }) + ie: string; + + @Column({ name: 'TIPOFJ' }) + tipofj: string; + + @Column({ name: 'CONSUMIDORFINAL' }) + consumidorfinal: string; + + @Column({ name: 'CODATV1' }) + codatv1: number; + + @Column({ name: 'CODPAIS' }) + codpais: number; + + @Column({ name: 'DESCPAIS' }) + descpais: string; + + @Column({ name: 'CGCFILIAL' }) + cgcfilial: string; + + @Column({ name: 'IEFILIAL' }) + iefilial: string; + + @Column({ name: 'UFFILIAL' }) + uffilial: string; + + @Column({ name: 'AGREGARSTPRODSINTEGRA' }) + agregarstprodsintegra: string; + + @Column({ name: 'TIPOALIQOUTRASDESP' }) + tipoaliqoutrasdesp: string; + + @Column({ name: 'IESUBSTTRIBUT' }) + iesubsttribut: string; + + @Column({ name: 'UFCODIGO' }) + ufcodigo: string; + + @Column({ name: 'HISTORICO' }) + historico: string; + + @Column({ name: 'SUBSERIE' }) + subserie: string; + + @Column({ name: 'ESPECIEVOLUME' }) + especievolume: string; + + @Column({ name: 'MARCARVOLUME' }) + marcarvolume: string; + + @Column({ name: 'TENTATIVAENVIONFE' }) + tentativaenvionfe: number; + + @Column({ name: 'UFDEST' }) + ufdest: string; + + @Column({ name: 'CODEXPORTADOR' }) + codexportador: number; + + @Column({ name: 'UFDESEMBARACO' }) + ufdesembaraco: string; + + @Column({ name: 'LOCALDESEMBARACO' }) + localdesembaraco: string; + + @Column({ name: 'CODREMETENTEFRETE' }) + codremetentefrete: number; + + @Column({ name: 'CODDESTINATARIOFRETE' }) + coddestinatariofrete: number; + + @Column({ name: 'CODVEICULO' }) + codveiculo: number; + + @Column({ name: 'CODMOTORISTA' }) + codmotorista: number; + + @Column({ name: 'CODPRACADESTFRETE' }) + codpracadestfrete: number; + + @Column({ name: 'OBSCONHECFRETE' }) + obsconhecfrete: string; + + @Column({ name: 'VLSECCAT' }) + vlseccat: number; + + @Column({ name: 'VLDESPACHO' }) + vldespacho: number; + + @Column({ name: 'VLLTR' }) + vlltr: number; + + @Column({ name: 'VLPEDAGIO' }) + vlpedagio: number; + + @Column({ name: 'VLSEGURO' }) + vlseguro: number; + + @Column({ name: 'ALIQUOTA' }) + aliquota: number; + + @Column({ name: 'CODCONSIGNATARIOFRETE' }) + codconsignatariofrete: number; + + @Column({ name: 'NUMOP' }) + numop: number; + + @Column({ name: 'CLIENTEFONTEST' }) + clientefontest: string; + + @Column({ name: 'ORGAOPUB' }) + orgaopub: string; + + @Column({ name: 'TRANSPORTADORA' }) + transportadora: string; + + @Column({ name: 'CODCLIFILIAL' }) + codclifilial: number; + + @Column({ name: 'CGCFRETE' }) + cgcfrete: string; + + @Column({ name: 'IEFRETE' }) + iefrete: string; + + @Column({ name: 'UFFRETE' }) + uffrete: string; + + @Column({ name: 'VLPAUTAFRETE' }) + vlpautafrete: number; + + @Column({ name: 'COBRANCA' }) + cobranca: string; + + @Column({ name: 'ENDERECO' }) + endereco: string; + + @Column({ name: 'BAIRRO' }) + bairro: string; + + @Column({ name: 'MUNICIPIO' }) + municipio: string; + + @Column({ name: 'CEP' }) + cep: string; + + @Column({ name: 'SULFRAMA' }) + sulframa: string; + + @Column({ name: 'CODMUNICIPIO' }) + codmunicipio: number; + + @Column({ name: 'PLACAVEIC' }) + placaveic: string; + + @Column({ name: 'CODCONTCLI' }) + codcontcli: number; + + @Column({ name: 'CODIBGE' }) + codibge: number; + + @Column({ name: 'TIPOEMPRESA' }) + tipoempresa: string; + + @Column({ name: 'VLTOTALNFCOMPOEMCTE' }) + vltotalnfcompoemcte: number; + + @Column({ name: 'DEDUZIRDESONERORGAOPUB' }) + deduzirdesonerorgaopub: string; + + @Column({ name: 'TIPOCONTACORRENTE' }) + tipocontacorrente: string; + + @Column({ name: 'NUMEROPROCESSO' }) + numeroprocesso: string; + + @Column({ name: 'TIPOPROCESSO' }) + tipoprocesso: string; + + @Column({ name: 'CODIGOINDICATIVOSUSPENSAO' }) + codigoindicativosuspensao: string; + + @Column({ name: 'CODPROMOCAOMED' }) + codpromocaomed: number; + + @Column({ name: 'CODPLPAGETICO' }) + codplpagetico: number; + + @Column({ name: 'CODPLPAGGENERICO' }) + codplpaggenerico: number; + + @Column({ name: 'VLPUNITMED' }) + vlpunitmed: number; + + @Column({ name: 'MATERIALDECONSTRUCAO' }) + materialdeconstrucao: string; + + @Column({ name: 'DEDUZIRICMSBASEPISCOFINS' }) + deduziricmsbasepiscofins: string; + + @Column({ name: 'CODMUNINICTE' }) + codmuninicte: number; + + @Column({ name: 'CODMUNFIMCTE' }) + codmunfimcte: number; + + @Column({ name: 'VLCREDICMSPRESUMIDO' }) + vlcredicmspresumido: number; + + @Column({ name: 'DATACONSOLIDACAOPREFAT' }) + dataconsolidacaoprefat: Date; + + @Column({ name: 'VERSAOLAYOUTNFE' }) + versaolayoutnfe: string; + + @Column({ name: 'OBSNFEFISCO' }) + obsnfefisco: string; + + @Column({ name: 'PCT_ESTOQUE' }) + pct_estoque: string; + + @Column({ name: 'PCT_CUSTO' }) + pct_custo: string; + + @Column({ name: 'CODDEVEDORCTE' }) + coddevedorcte: number; + + @Column({ name: 'VLSERVICOFRETEAUTON' }) + vlservicofreteauton: number; + + @Column({ name: 'VLBASEFRETEAUTON' }) + vlbasefreteauton: number; + + @Column({ name: 'ALIQICMFRETEAUTON' }) + aliqicmfreteauton: number; + + @Column({ name: 'VLICMFRETEAUTON' }) + vlicmfreteauton: number; + + @Column({ name: 'CODFISCALFRETEAUTON' }) + codfiscalfreteauton: number; + + @Column({ name: 'CODMUNICIPFATGERADOR' }) + codmunicipfatgerador: number; + + @Column({ name: 'NUMNOTAPREF' }) + numnotapref: number; + + @Column({ name: 'STBCR' }) + stbcr: number; + + @Column({ name: 'SOMAREPASSEOUTRASDESPNF' }) + somarepasseoutrasdespnf: string; + + @Column({ name: 'NFIPIEMITIDA' }) + nfipiemitida: string; + + @Column({ name: 'APROVEITASTDEVFORNEC' }) + aproveitastdevfornec: string; + + @Column({ name: 'INDICADORDESCONTO' }) + indicadordesconto: string; + + @Column({ name: 'INDICADORACRESCIMO' }) + indicadoracrescimo: string; + + @Column({ name: 'CODCOORDENADOR' }) + codcoordenador: number; + + @Column({ name: 'CODGERENTENACIONAL' }) + codgerentenacional: number; + + @Column({ name: 'CODDIRETOR' }) + coddiretor: number; + + @Column({ name: 'CODGERENTEREGIONAL' }) + codgerenteregional: number; + + @Column({ name: 'USASRVTERCEIROS' }) + usasrvterceiros: string; + + @Column({ name: 'ENVIADASEMRESPOSTA' }) + enviadasemresposta: string; + + @Column({ name: 'PEDIDOAVARIA' }) + pedidoavaria: string; + + @Column({ name: 'NUMTRANSENTCROSSDOCK' }) + numtransentcrossdock: number; + + @Column({ name: 'IDSOFITVIEW' }) + idsofitview: string; + + @Column({ name: 'DTEXCLUSAOSOFITVIEW' }) + dtexclusaosofitview: string; + + @Column({ name: 'QRCODE' }) + qrcode: string; + + @Column({ name: 'ESPECIE' }) + especie: string; + + @Column({ name: 'SERIE' }) + serie: string; + + @Column({ name: 'NUMNOTA' }) + numnota: number; + + @Column({ name: 'DTSAIDA' }) + dtsaida: Date; + + @Column({ name: 'VLTOTAL' }) + vltotal: number; + + @Column({ name: 'CODCONT' }) + codcont: string; + + @Column({ name: 'CODFISCAL' }) + codfiscal: number; + + @Column({ name: 'CODCLI' }) + codcli: number; + + @Column({ name: 'CAIXA' }) + caixa: number; + + @Column({ name: 'CODUSUR' }) + codusur: number; + + @Column({ name: 'DTENTREGA' }) + dtentrega: Date; + + @Column({ name: 'COMISSAO' }) + comissao: number; + + @Column({ name: 'VLTOTGER' }) + vltotger: number; + + @Column({ name: 'VLTABELA' }) + vltabela: number; + + @Column({ name: 'CODFILIAL' }) + codfilial: string; + + @Column({ name: 'VLDESCONTO' }) + vldesconto: number; + + @Column({ name: 'TIPOVENDA' }) + tipovenda: string; + + @Column({ name: 'OBS' }) + obs: string; + + @Column({ name: 'VLCUSTOREAL' }) + vlcustoreal: number; + + @Column({ name: 'VLCUSTOFIN' }) + vlcustofin: number; + + @Column({ name: 'VLFRETE' }) + vlfrete: number; + + @Column({ name: 'VLOUTRASDESP' }) + vloutrasdesp: number; + + @Column({ name: 'TOTPESO' }) + totpeso: number; + + @Column({ name: 'TOTVOLUME' }) + totvolume: number; + + @Column({ name: 'CODPRACA' }) + codpraca: number; + + @Column({ name: 'NUMITENS' }) + numitens: number; + + @Column({ name: 'CODEMITENTE' }) + codemitente: number; + + @Column({ name: 'DTCANCEL' }) + dtcancel: Date; + + @Column({ name: 'NUMCAR' }) + numcar: number; + + @Column({ name: 'CODCOB' }) + codcob: string; + + @Column({ name: 'NUMPED' }) + numped: number; + + @Column({ name: 'STRIBUT' }) + stribut: number; + + @Column({ name: 'ICMSRETIDO' }) + icmsretido: number; + + @Column({ name: 'BCST' }) + bcst: number; + + @Column({ name: 'CODDEVOL' }) + coddevol: number; + + @Column({ name: 'NFFORNEC' }) + nffornec: number; + + @Column({ name: 'CODFORNEC' }) + codfornec: number; + + @Column({ name: 'CODDOC' }) + coddoc: string; + + @Column({ name: 'CODPLPAG' }) + codplpag: number; + + @Column({ name: 'CODFUNCCANCEL' }) + codfunccancel: number; + + @Column({ name: 'NUMTAB' }) + numtab: number; + + @Column({ name: 'NUMSEQ' }) + numseq: number; + + @Column({ name: 'CODSUPERVISOR' }) + codsupervisor: number; + + @Column({ name: 'CONDVENDA' }) + condvenda: number; + + @Column({ name: 'VLDEVOLUCAO' }) + vldevolucao: number; + + @Column({ name: 'VLBASEIPI' }) + vlbaseipi: number; + + @Column({ name: 'VLIPI' }) + vlipi: number; + + @Column({ name: 'VLICMSANTECIPADO' }) + vlicmsantecipado: number; + + @Column({ name: 'CODEPTO' }) + codepto: number; + + @Column({ name: 'VLTOTALNF' }) + vltotalnf: number; + + @Column({ name: 'CODFILIALNF' }) + codfilialnf: string; + + @Column({ name: 'UF' }) + uf: string; + + @Column({ name: 'VLBASE' }) + vlbase: number; + + @Column({ name: 'VLICMS' }) + vlicms: number; + + @Column({ name: 'VLISENTAS' }) + vlisentas: number; + + @Column({ name: 'VLOUTRAS' }) + vloutras: number; + + @Column({ name: 'NUMIDF' }) + numidf: string; + + @Column({ name: 'NUMFORMULARIO' }) + numformulario: number; + + @Column({ name: 'VLCUSTOREP' }) + vlcustorep: number; + + @Column({ name: 'VLCUSTOCONT' }) + vlcustocont: number; + + @Column({ name: 'DTDEVOL' }) + dtdevol: Date; + + @Column({ name: 'NUMSELONF' }) + numselonf: number; + + @Column({ name: 'NUMSEQMONTAGEM' }) + numseqmontagem: number; + + @Column({ name: 'NUMVOLUME' }) + numvolume: number; + + @Column({ name: 'NUMCUPOM' }) + numcupom: number; + + @Column({ name: 'VLRECEBIDODIN' }) + vlrecebidodin: number; + + @Column({ name: 'VLRECEBIDOCH' }) + vlrecebidoch: number; + + @Column({ name: 'VLRECEBIDOBOLETO' }) + vlrecebidoboleto: number; + + @Column({ name: 'VLTROCO' }) + vltroco: number; + + @Column({ name: 'CODFUNCLIBENT' }) + codfunclibent: number; + + @Column({ name: 'DTLIBENT' }) + dtlibent: Date; + + @Column({ name: 'VLDESCPROM' }) + vldescprom: number; + + @Column({ name: 'NUMVIAS' }) + numvias: number; + + @Column({ name: 'CODCONTRATO' }) + codcontrato: number; + + @Column({ name: 'FRETEDESPACHO' }) + fretedespacho: string; + + @Column({ name: 'FRETEREDESPACHO' }) + freteredespacho: string; + + @Column({ name: 'CODFORNECFRETE' }) + codfornecfrete: number; + + @Column({ name: 'VLRECEBIDOCARTAO' }) + vlrecebidocartao: number; + + @Column({ name: 'NUMTRANSVENDAORIGEM' }) + numtransvendaorigem: number; + + @Column({ name: 'CODFUNCLANC' }) + codfunclanc: number; + + @Column({ name: 'DTCANHOTO' }) + dtcanhoto: Date; + + @Column({ name: 'NUMTRANSVENDADESTINO' }) + numtransvendadestino: number; + + @Column({ name: 'CNPJCISP' }) + cnpjcisp: string; + + @Column({ name: 'CODUSUR3' }) + codusur3: number; + + @Column({ name: 'CODUSUR2' }) + codusur2: number; + + @Column({ name: 'VLISS' }) + vliss: number; + + @Column({ name: 'CODSUPERVISOR2' }) + codsupervisor2: number; + + @Column({ name: 'CODSUPERVISOR3' }) + codsupervisor3: number; + + @Column({ name: 'COMISSAO2' }) + comissao2: number; + + @Column({ name: 'COMISSAO3' }) + comissao3: number; + + @Column({ name: 'HORALANC' }) + horalanc: string; + + @Column({ name: 'MINUTOLANC' }) + minutolanc: string; + + @Column({ name: 'ROTINALANC' }) + rotinalanc: string; + + @Column({ name: 'EQUIPLANC' }) + equiplanc: string; + + @Column({ name: 'FUNCLANC' }) + funclanc: string; + + @Column({ name: 'VLFRETENF' }) + vlfretenf: number; + + @Column({ name: 'NUMLANCCP' }) + numlanccp: number; + + @Column({ name: 'PRAZOMEDIO' }) + prazomedio: number; + + @Column({ name: 'PRAZOADICIONAL' }) + prazoadicional: number; + + @Column({ name: 'DTWMS' }) + dtwms: Date; + + @Column({ name: 'PRAZOPONDERADO' }) + prazoponderado: string; + + @Column({ name: 'NUMNFTRANSF' }) + numnftransf: number; + + @Column({ name: 'SERIEECF' }) + serieecf: string; + + @Column({ name: 'NUMSERIEEQUIP' }) + numserieequip: string; + + @Column({ name: 'LIVEXPORTACAO' }) + livexportacao: string; + + @Column({ name: 'TIPODEVOL' }) + tipodevol: string; + + @Column({ name: 'ICMSRETIDOGNRE' }) + icmsretidognre: number; + + @Column({ name: 'VLBASEGNRE' }) + vlbasegnre: number; + + @Column({ name: 'CODCLINF' }) + codclinf: number; + + @Column({ name: 'CODRECEBFRETECTEREF' }) + codrecebfretecteref: number; + + @Column({ name: 'TIPOSERVICOCTE' }) + tiposervicocte: string; + + @Column({ name: 'TIPOSUBCONTRATACAOCTE' }) + tiposubcontratacaocte: string; + + @Column({ name: 'TIPOPRESENCAADQUIRINTE' }) + tipopresencaadquirinte: string; + + @Column({ name: 'DOCEMISSAO' }) + docemissao: string; + + @Column({ name: 'VLGRIS' }) + vlgris: number; + + @Column({ name: 'VLDESPPEDAGIO' }) + vldesppedagio: number; + + @Column({ name: 'VLTAS' }) + vltas: number; + + @Column({ name: 'SELO' }) + selo: string; + + @Column({ name: 'NUMREMESSA' }) + numremessa: number; + + @Column({ name: 'TIPOMOVGARANTIA' }) + tipomovgarantia: number; + + @Column({ name: 'FORMULARIO' }) + formulario: number; + + @Column({ name: 'NUMNOTAMANIF' }) + numnotamanif: number; + + @Column({ name: 'ORIGEMFRETE' }) + origemfrete: string; + + @Column({ name: 'NUMCIRURGIA' }) + numcirurgia: number; + + @Column({ name: 'UTILIZAEXPDIVERSOS' }) + utilizaexpdiversos: string; + + @Column({ name: 'SITUACAONFEEPEC' }) + situacaonfeepec: number; + + @Column({ name: 'PROTOCOLONFEEPEC' }) + protocolonfeepec: string; + + @Column({ name: 'DATAHORAREGISTROEPEC' }) + datahoraregistroepec: Date; + + @Column({ name: 'NUMFECHAMENTOMOVCX' }) + numfechamentomovcx: number; + + @Column({ name: 'DTMOVIMENTOCX' }) + dtmovimentocx: Date; + + @Column({ name: 'IDENTIFICARCLIENTENFCE' }) + identificarclientenfce: string; + + @Column({ name: 'MD5LISTAARQ' }) + md5listaarq: string; + + @Column({ name: 'VENDANFSERIED' }) + vendanfseried: string; + + @Column({ name: 'NUMTRANSENTORIGCONSIG' }) + numtransentorigconsig: number; + + @Column({ name: 'NUMSERIESAT' }) + numseriesat: string; + + @Column({ name: 'CHAVESAT' }) + chavesat: string; + + @Column({ name: 'SITUACAOSAT' }) + situacaosat: string; + + @Column({ name: 'QRCODENFCE' }) + qrcodenfce: string; + + @Column({ name: 'EMISSNUMAUTOMATICO' }) + emissnumautomatico: string; + + @Column({ name: 'DATAHORAEMISSAOSAT' }) + datahoraemissaosat: Date; + + @Column({ name: 'QRCODESAT' }) + qrcodesat: string; + + @Column({ name: 'NUMSESSAOSAT' }) + numsessaosat: number; + + @Column({ name: 'CODSEFAZSAT' }) + codsefazsat: number; + + @Column({ name: 'CODSTATUSSAT' }) + codstatussat: number; + + @Column({ name: 'VLDESCFIN' }) + vldescfin: number; + + @Column({ name: 'PERDESCFINTOT' }) + perdescfintot: number; + + @Column({ name: 'HORAENTREGA' }) + horaentrega: number; + + @Column({ name: 'MINUTOENTREGA' }) + minutoentrega: number; + + @Column({ name: 'HORASAIDA' }) + horasaida: number; + + @Column({ name: 'MINUTOSAIDA' }) + minutosaida: number; + + @Column({ name: 'DTPAGCOMISSAO' }) + dtpagcomissao: Date; + + @Column({ name: 'VLBOLETO' }) + vlboleto: number; + + @Column({ name: 'NUMTRANSENTNFESTORNADA' }) + numtransentnfestornada: number; + + @Column({ name: 'NOTADUPLIQUESVC' }) + notadupliquesvc: string; + + @Column({ name: 'TIPOINSCPRESTSERV' }) + tipoinscprestserv: number; + + @Column({ name: 'INDICPRESTSERV' }) + indicprestserv: number; + + @Column({ name: 'NUMTRANSENTDEPENDENTE' }) + numtransentdependente: number; + + @Column({ name: 'NUMTRANSVENDADEPENDENTE' }) + numtransvendadependente: number; + + @Column({ name: 'ROTINACAD' }) + rotinacad: string; + + @Column({ name: 'NOMEARQUIVODOTZ' }) + nomearquivodotz: string; + + @Column({ name: 'NOMEARQUIVODOTZESTORNO' }) + nomearquivodotzestorno: string; + + @Column({ name: 'PONTOSDOTZ' }) + pontosdotz: number; + + @Column({ name: 'VLBASERETENCAO' }) + vlbaseretencao: number; + + @Column({ name: 'CODRETENCAOCPRB' }) + codretencaocprb: number; + + @Column({ name: 'NUMCOLETA' }) + numcoleta: string; + + @Column({ name: 'NUMCOLETA_AUX' }) + numcoleta_aux: string; + + @Column({ name: 'DTINTEGRACAOMLOG' }) + dtintegracaomlog: Date; + + @Column({ name: 'NUMVIASGNRE' }) + numviasgnre: number; + + @Column({ name: 'QTDEREPROCNFE' }) + qtdereprocnfe: number; + + @Column({ name: 'CTEREGIMEESPECIAL' }) + cteregimeespecial: string; + + @Column({ name: 'NFDEVENTFUTURA' }) + nfdeventfutura: string; + + @Column({ name: 'UIDREGISTRO' }) + uidregistro: number; + + @Column({ name: 'IDPARCEIRO' }) + idparceiro: string; + + @Column({ name: 'ASSINATURA' }) + assinatura: string; + + @Column({ name: 'IMPRIMIUDACTEJUNTODANFE' }) + imprimiudactejuntodanfe: string; + + @Column({ name: 'TRANSFDEP' }) + transfdep: string; + + @Column({ name: 'TIPOTRANSFENTREDEPOSITO' }) + tipotransfentredeposito: string; + + @Column({ name: 'DTPAGCOMISSAOOP' }) + dtpagcomissaoop: Date; + + @Column({ name: 'NUMNOTAVINCULADA' }) + numnotavinculada: number; + + @Column({ name: 'TIPODOCARRECGNRE' }) + tipodocarrecgnre: string; + + @Column({ name: 'UFBENEFICIARIA' }) + ufbeneficiaria: string; + + @Column({ name: 'NUMDOCARREC' }) + numdocarrec: string; + + @Column({ name: 'CODAUTENTICACAO' }) + codautenticacao: string; + + @Column({ name: 'VLDOCARRECADACAO' }) + vldocarrecadacao: number; + + @Column({ name: 'DTVENCARREC' }) + dtvencarrec: Date; + + @Column({ name: 'DTPAGARREC' }) + dtpagarrec: Date; + + @Column({ name: 'VLOPERACAOFRETE' }) + vloperacaofrete: number; + + @Column({ name: 'VLBASESTFRETE' }) + vlbasestfrete: number; + + @Column({ name: 'VLICMSSTFRETE' }) + vlicmsstfrete: number; + + @Column({ name: 'CTEGLOBALIZADO' }) + cteglobalizado: string; + + @Column({ name: 'TOMADORCTE' }) + tomadorcte: number; + + @Column({ name: 'VLCSLL' }) + vlcsll: number; + + @Column({ name: 'CNPJSEGURADORA' }) + cnpjseguradora: string; + + @Column({ name: 'INFGLOBALIZADO' }) + infglobalizado: string; + + @Column({ name: 'QTDEREPROCCTE' }) + qtdereproccte: number; + + @Column({ name: 'PERCENTUALSTFRETE' }) + percentualstfrete: number; + + @Column({ name: 'CODEDITAL' }) + codedital: number; + + @Column({ name: 'FIL_MONTARKITAUTOMATICAMENTE' }) + fil_montarkitautomaticamente: string; + + @Column({ name: 'BKP_COMISSAO' }) + bkp_comissao: number; + + @Column({ name: 'NUMNOTAORIGEM' }) + numnotaorigem: number; + + @Column({ name: 'PAGCHEQUEMORADIA' }) + pagchequemoradia: string; + + @Column({ name: 'USAMULTUNIDITEM' }) + usamultuniditem: string; + + @Column({ name: 'CONDFINANC' }) + condfinanc: string; + + @Column({ name: 'PLANOSUPPLI' }) + planosuppli: number; + + @Column({ name: 'TIPOREMESSA' }) + tiporemessa: string; + + @Column({ name: 'CODTRANSPAUTONOMO' }) + codtranspautonomo: number; + + @Column({ name: 'VLTRANSPAUTONOMO' }) + vltranspautonomo: number; + + @Column({ name: 'TRANSPAUTONOMO' }) + transpautonomo: string; + + @Column({ name: 'GERARCPTRANSPAUNOTOMO' }) + gerarcptranspaunotomo: string; + + @Column({ name: 'CODFORNECTRANSPAUTONOMO' }) + codfornectranspautonomo: number; + + @Column({ name: 'CODRASTREIO' }) + codrastreio: string; + + @Column({ name: 'VLTOTALFCPST' }) + vltotalfcpst: number; + + @Column({ name: 'VLTOTALFCPICMS' }) + vltotalfcpicms: number; + + @Column({ name: 'CODCOBSEFAZ' }) + codcobsefaz: string; + + @Column({ name: 'DIGITOVERIFICADORNFSE' }) + digitoverificadornfse: string; + + @Column({ name: 'LINKNFSE' }) + linknfse: string; + + @Column({ name: 'PROTOCOLONFSE' }) + protocolonfse: string; + + @Column({ name: 'SERIERPS' }) + serierps: string; + + @Column({ name: 'NUMERORPS' }) + numerorps: number; + + @Column({ name: 'SITUACAONFSE' }) + situacaonfse: number; + + @Column({ name: 'NUMNOTANFSE' }) + numnotanfse: number; + + @Column({ name: 'MD5PAF' }) + md5paf: string; + + @Column({ name: 'VLFRETEOUTRASDESP' }) + vlfreteoutrasdesp: number; + + @Column({ name: 'NUMOS' }) + numos: number; + + @Column({ name: 'WMSCODFUNCIGNORA' }) + wmscodfuncignora: number; + + @Column({ name: 'WMSIGNORADO' }) + wmsignorado: string; + + @Column({ name: 'MOTORISTAVEICULO' }) + motoristaveiculo: string; + + @Column({ name: 'CONSUMIUNUMCTE' }) + consumiunumcte: string; + + @Column({ name: 'DTFAT' }) + dtfat: Date; + + @Column({ name: 'CODGERENTE' }) + codgerente: number; + + @Column({ name: 'NUMPEDCLI' }) + numpedcli: string; + + @Column({ name: 'DTDENEGADA' }) + dtdenegada: Date; + + @Column({ name: 'ENTREGA' }) + entrega: string; + + @Column({ name: 'TAXAENTREGA' }) + taxaentrega: number; + + @Column({ name: 'UFPLACAVEI' }) + ufplacavei: string; + + @Column({ name: 'NORMAREGESPECIAL' }) + normaregespecial: string; + + @Column({ name: 'TIPOEMISSAOCTE' }) + tipoemissaocte: string; + + @Column({ name: 'DTEMISSAODECLARACAO' }) + dtemissaodeclaracao: Date; + + @Column({ name: 'COFINSRETIDO' }) + cofinsretido: string; + + @Column({ name: 'CSLLRETIDO' }) + csllretido: string; + + @Column({ name: 'GERARBCRNFE' }) + gerarbcrnfe: string; + + @Column({ name: 'NUMCARGAEDI' }) + numcargaedi: number; + + @Column({ name: 'DEPOSITOFECHADO' }) + depositofechado: string; + + @Column({ name: 'OBSNFCARREG' }) + obsnfcarreg: string; + + @Column({ name: 'PROTOCOLO' }) + protocolo: string; + + @Column({ name: 'CODVEICULO1' }) + codveiculo1: number; + + @Column({ name: 'CODVEICULO2' }) + codveiculo2: number; + + @Column({ name: 'NUMLISTA' }) + numlista: number; + + @Column({ name: 'VLDESCABATIMENTO' }) + vldescabatimento: number; + + @Column({ name: 'DEVSIMBOLICA' }) + devsimbolica: string; + + @Column({ name: 'VLIPIOUTRAS' }) + vlipioutras: number; + + @Column({ name: 'GERANFVENDA' }) + geranfvenda: string; + + @Column({ name: 'ENVIADOEMAILCANCELADO' }) + enviadoemailcancelado: string; + + @Column({ name: 'NUMCONTRATOCARRETEIRO' }) + numcontratocarreteiro: string; + + @Column({ name: 'MOTESTORNONFE' }) + motestornonfe: string; + + @Column({ name: 'NATOPERNFE' }) + natopernfe: string; + + @Column({ name: 'VENDAEXPORTACAO' }) + vendaexportacao: string; + + @Column({ name: 'IDINTEGRACAOMYFROTA' }) + idintegracaomyfrota: string; + + @Column({ name: 'NUMTRANSVENDATV13' }) + numtransvendatv13: number; + + @Column({ name: 'SITUACAONFEORIG' }) + situacaonfeorig: number; + + @Column({ name: 'CODMEDICOPRESCRIT' }) + codmedicoprescrit: number; + + @Column({ name: 'NUMPEDVANXML' }) + numpedvanxml: string; + + @Column({ name: 'CNPJFORNEC' }) + cnpjfornec: string; + + @Column({ name: 'NUMCOMPROVANTE' }) + numcomprovante: number; + + @Column({ name: 'CNPJRESPONSAVEL' }) + cnpjresponsavel: string; + + @Column({ name: 'INUTILIZADA' }) + inutilizada: string; + + @Column({ name: 'AGREGASTVLMERC' }) + agregastvlmerc: string; + + @Column({ name: 'RESPSEGURO' }) + respseguro: number; + + @Column({ name: 'NOMESEGURADORA' }) + nomeseguradora: string; + + @Column({ name: 'NUMEROAPOLICE' }) + numeroapolice: string; + + @Column({ name: 'NUMEROAVERBACAO' }) + numeroaverbacao: string; + + @Column({ name: 'SIMPLESNACIONAL' }) + simplesnacional: string; + + @Column({ name: 'VLRAVERBACAO' }) + vlraverbacao: number; + + @Column({ name: 'VLTRIBUTOS' }) + vltributos: number; + + @Column({ name: 'CARTAODOTZ' }) + cartaodotz: string; + + @Column({ name: 'CNPJCOLETA' }) + cnpjcoleta: string; + + @Column({ name: 'RAZAOSOCIALCOLETA' }) + razaosocialcoleta: string; + + @Column({ name: 'LOGRADOUROCOLETA' }) + logradourocoleta: string; + + @Column({ name: 'NUMEROCOLETA' }) + numerocoleta: string; + + @Column({ name: 'COMPLEMENTOCOLETA' }) + complementocoleta: string; + + @Column({ name: 'BAIRROCOLETA' }) + bairrocoleta: string; + + @Column({ name: 'CODCIDADECOLETA' }) + codcidadecoleta: number; + + @Column({ name: 'CNPJFORNECPEDAGIO' }) + cnpjfornecpedagio: string; + + @Column({ name: 'NUMVALEPEDAGIO' }) + numvalepedagio: string; + + @Column({ name: 'CPNJRESPONSAVELPEDAGIO' }) + cpnjresponsavelpedagio: string; + + @Column({ name: 'VALORPEDAGIO' }) + valorpedagio: number; + + @Column({ name: 'NUMTRANSCTEANUL' }) + numtranscteanul: number; + + @Column({ name: 'NUMTRANSCTESUBS' }) + numtransctesubs: number; + + @Column({ name: 'CHAVECTEREF' }) + chavecteref: string; + + @Column({ name: 'CNPJCPFCTEREF' }) + cnpjcpfcteref: string; + + @Column({ name: 'IECTEREF' }) + iecteref: string; + + @Column({ name: 'RAZAOSOCIALCTEREF' }) + razaosocialcteref: string; + + @Column({ name: 'TIPODOCCTEREF' }) + tipodoccteref: string; + + @Column({ name: 'SERIEDOCCTEREF' }) + seriedoccteref: string; + + @Column({ name: 'SUBSERIEDOCCTEREF' }) + subseriedoccteref: string; + + @Column({ name: 'NUMDOCCTEREF' }) + numdoccteref: string; + + @Column({ name: 'DTEMISSAOCTEREF' }) + dtemissaocteref: Date; + + @Column({ name: 'ORGAOPUBFEDERAL' }) + orgaopubfederal: string; + + @Column({ name: 'ORGAOPUBMUNICIPAL' }) + orgaopubmunicipal: string; + + @Column({ name: 'NSUSOCIOTORCEDOR' }) + nsusociotorcedor: string; + + @Column({ name: 'CNPJCPFEMITENTESUB' }) + cnpjcpfemitentesub: string; + + @Column({ name: 'MODELODOCSUB' }) + modelodocsub: string; + + @Column({ name: 'SERIEDOCSUB' }) + seriedocsub: string; + + @Column({ name: 'SUBSERIEDOCSUB' }) + subseriedocsub: string; + + @Column({ name: 'NUMERODOCSUB' }) + numerodocsub: number; + + @Column({ name: 'VALORDOCSUB' }) + valordocsub: number; + + @Column({ name: 'DTEMISSAODOCSUB' }) + dtemissaodocsub: Date; + + @Column({ name: 'CHAVECTETOMADORSUB' }) + chavectetomadorsub: string; + + @Column({ name: 'CHAVECTEANULACAO' }) + chavecteanulacao: string; + + @Column({ name: 'CHAVECTESUBSTITUICAO' }) + chavectesubstituicao: string; + + @Column({ name: 'CHAVENFETOMADORSUB' }) + chavenfetomadorsub: string; + + @Column({ name: 'TIPODOCUMENTOSUB' }) + tipodocumentosub: string; + + @Column({ name: 'UFCTEREF' }) + ufcteref: string; + + @Column({ name: 'VERSAOROTINA' }) + versaorotina: string; + + @Column({ name: 'VLDESCSOCIOTORCEDOR' }) + vldescsociotorcedor: number; + + @Column({ name: 'IDTIPOPRESENCA' }) + idtipopresenca: string; + + @Column({ name: 'ROTINACADCTE' }) + rotinacadcte: string; + + @Column({ name: 'NUMREGEXP' }) + numregexp: number; + + @Column({ name: 'NUMCHAVEEXP' }) + numchaveexp: string; + + @Column({ name: 'NUMDRAWBACK' }) + numdrawback: number; + + @Column({ name: 'VLSUBTOTAL' }) + vlsubtotal: number; + + @Column({ name: 'IDLOCALDESTMERC' }) + idlocaldestmerc: string; + + @Column({ name: 'CODPRODNFAJUSTE' }) + codprodnfajuste: string; + + @Column({ name: 'DESCRICAOPRODNFAJUSTE' }) + descricaoprodnfajuste: string; + + @Column({ name: 'NCMNFAJUSTE' }) + ncmnfajuste: string; + + @Column({ name: 'UNIDADENFAJUSTE' }) + unidadenfajuste: string; + + @Column({ name: 'VLTOTBRUTOPRODAJUSTE' }) + vltotbrutoprodajuste: number; + + @Column({ name: 'OBSNFAJUSTE' }) + obsnfajuste: string; + + @Column({ name: 'CODFORNECFRETECTEREF' }) + codfornecfretecteref: number; + + @Column({ name: 'DTPAGDOTZ' }) + dtpagdotz: Date; + + @Column({ name: 'VLBONIFICACERTO' }) + vlbonificacerto: number; + + @Column({ name: 'CTECODTRANSPSUBCONTRATANTE' }) + ctecodtranspsubcontratante: number; + + @Column({ name: 'CTECODVEICULOSUBCONTRATANTE' }) + ctecodveiculosubcontratante: number; + + @Column({ name: 'CTECODTOMADORSERVICO' }) + ctecodtomadorservico: number; + + @Column({ name: 'CTECODTRANSPSUBCONTRATADO' }) + ctecodtranspsubcontratado: number; + + @Column({ name: 'CTESUBCONTRATADOCHAVECTEREF' }) + ctesubcontratadochavecteref: string; + + @ManyToOne(type => Pcclient, pcclient => pcclient.notas) + @JoinColumn({ name: 'CODCLI' }) + pcclient: Pcclient; + + @OneToOne(type => Pcpedc) + @JoinColumn({name: 'NUMPED'}) + pcpedc: Pcpedc; + + @ManyToOne(type => Pccarreg, pccarreg => pccarreg.notas) + @JoinColumn({ name: 'NUMCAR' }) + pccarreg: Pccarreg; + + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcorcavendac.entity.ts b/src/domain/entity/tables/pcorcavendac.entity.ts new file mode 100644 index 0000000..af8a795 --- /dev/null +++ b/src/domain/entity/tables/pcorcavendac.entity.ts @@ -0,0 +1,232 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('PCORCAVENDAC') +export class Pcorcavendac { + + @PrimaryColumn({ name: 'NUMORCA' }) + numorca: number; + + @Column({ name: 'DATA' }) + data: Date; + + @Column({ name: 'VLTOTAL' }) + vltotal: number; + + @Column({ name: 'CODCLI' }) + codcli: number; + + @Column({ name: 'CODUSUR' }) + codusur: number; + + @Column({ name: 'CODUSUR3' }) + codusur3: number; + + @Column({ name: 'DTENTREGA' }) + dtentrega: Date; + + @Column({ name: 'VLTABELA' }) + vltabela: number; + + @Column({ name: 'CODFILIAL' }) + codfilial: string; + + @Column({ name: 'VLDESCONTO' }) + vldesconto: number; + + @Column({ name: 'TIPOVENDA' }) + tipovenda: string; + + @Column({ name: 'VLCUSTOREAL' }) + vlcustoreal: number; + + @Column({ name: 'VLCUSTOFIN' }) + vlcustofin: number; + + @Column({ name: 'VLFRETE' }) + vlfrete: number; + + @Column({ name: 'VLOUTRASDESP' }) + vloutrasdesp: number; + + @Column({ name: 'TOTPESO' }) + totpeso: number; + + @Column({ name: 'TOTVOLUME' }) + totvolume: number; + + @Column({ name: 'CODPRACA' }) + codpraca: number; + + @Column({ name: 'NUMITENS' }) + numitens: number; + + @Column({ name: 'CODEMITENTE' }) + codemitente: number; + + @Column({ name: 'CODENDENT' }) + codendent: number; + + @Column({ name: 'POSICAO' }) + posicao: string; + + @Column({ name: 'VLATEND' }) + vlatend: number; + + @Column({ name: 'OPERACAO' }) + operacao: string; + + @Column({ name: 'NUMCAR' }) + numcar: number; + + @Column({ name: 'CODCOB' }) + codcob: string; + + @Column({ name: 'HORA' }) + hora: number; + + @Column({ name: 'MINUTO' }) + minuto: number; + + @Column({ name: 'CODSUPERVISOR' }) + codsupervisor: number; + + @Column({ name: 'CONDVENDA' }) + condvenda: number; + + @Column({ name: 'PERCVENDA' }) + percvenda: number; + + @Column({ name: 'TIPOPRIORIDADEENTREGA' }) + tipoprioridadeentrega: string; + + @Column({ name: 'OBS1' }) + obs1: string; + + @Column({ name: 'OBS2' }) + obs2: string; + + @Column({ name: 'PERDESC' }) + perdesc: number; + + @Column({ name: 'CODPLPAG' }) + codplpag: number; + + @Column({ name: 'NUMPEDRCA' }) + numpedrca: number; + + @Column({ name: 'FRETEDESPACHO' }) + fretedespacho: string; + + @Column({ name: 'TIPOCARGA' }) + tipocarga: string; + + @Column({ name: 'PRAZO1' }) + prazo1: number; + + @Column({ name: 'PRAZO2' }) + prazo2: number; + + @Column({ name: 'PRAZO3' }) + prazo3: number; + + @Column({ name: 'PRAZO4' }) + prazo4: number; + + @Column({ name: 'PRAZO5' }) + prazo5: number; + + @Column({ name: 'PRAZO6' }) + prazo6: number; + + @Column({ name: 'PRAZO7' }) + prazo7: number; + + @Column({ name: 'PRAZO8' }) + prazo8: number; + + @Column({ name: 'PRAZO9' }) + prazo9: number; + + @Column({ name: 'PRAZO10' }) + prazo10: number; + + @Column({ name: 'PRAZO11' }) + prazo11: number; + + @Column({ name: 'PRAZO12' }) + prazo12: number; + + @Column({ name: 'PRAZOMEDIO' }) + prazomedio: number; + + @Column({ name: 'OBSENTREGA1' }) + obsentrega1: string; + + @Column({ name: 'OBSENTREGA2' }) + obsentrega2: string; + + @Column({ name: 'OBSENTREGA3' }) + obsentrega3: string; + + @Column({ name: 'TIPOEMBALAGEM' }) + tipoembalagem: string; + + @Column({ name: 'CLIENTE' }) + cliente: string; + + @Column({ name: 'CNPJ' }) + cnpj: string; + + @Column({ name: 'ENDERECO' }) + endereco: string; + + @Column({ name: 'BAIRRO' }) + bairro: string; + + @Column({ name: 'UF' }) + uf: string; + + @Column({ name: 'TELEFONE' }) + telefone: string; + + @Column({ name: 'IE' }) + ie: string; + + @Column({ name: 'CODATV1' }) + codatv1: number; + + @Column({ name: 'CIDADE' }) + cidade: string; + + @Column({ name: 'ORCAMENTOUTILIZADO' }) + orcamentoUtilizado: string; + + @Column({ name: 'CODFILIALNF' }) + codfilialUf: string; + + @Column({ name: 'DTVALIDADE' }) + dtvalidade: Date; + + @Column({ name: 'VLCUSTOCONT' }) + vlcustocont: number; + + @Column({ name: 'VLCUSTOREP' }) + vlcustorep: number; + + @Column({ name: 'ORIGEMPED' }) + origemPed: string; + + @Column({ name: 'NUMNOTA' }) + numnota: number; + + @Column({ name: 'PERDESCFIN' }) + perdescfin: number; + + @Column({ name: 'NUMREGIAO' }) + numregiao: number; + + @Column({ name: 'CODCLIRECEBEDOR' }) + codclirecebedor: number; + + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcorcavendai.entity.ts b/src/domain/entity/tables/pcorcavendai.entity.ts new file mode 100644 index 0000000..bb358be --- /dev/null +++ b/src/domain/entity/tables/pcorcavendai.entity.ts @@ -0,0 +1,95 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity("PCORCAVENDAI") +export class Pcorcavendai { + @PrimaryColumn({name: 'NUMORCA'}) + numorca: number; + + @PrimaryColumn({name: 'CODPROD'}) + codprod: number; + + @PrimaryColumn({name: 'NUMSEQ'}) + numseq: number; + + @Column({name: 'DATA'}) + data: Date; + + @Column({name: 'CODCLI'}) + codcli: number; + + @Column({name: 'CODUSUR'}) + codusur: number; + + @Column({name: 'QT'}) + qt: number; + + @Column({name: 'PVENDA'}) + pvenda: number; + + @Column({name: 'PTABELA'}) + ptabela: number; + + @Column({name: 'NUMCAR'}) + numcar: number; + + @Column({name: 'POSICAO'}) + posicao: string; + + @Column({name: 'ST'}) + st: number; + + @Column({name: 'VLCUSTOFIN'}) + vlcustofin: number; + + @Column({name: 'VLCUSTOREAL'}) + vlcustoreal: number; + + @Column({name: 'PERCOM'}) + percom: number; + + @Column({name: 'PERDESC'}) + perdesc: number; + + @Column({name: 'PVENDABASE'}) + pvendabase: number; + + @Column({name: 'CODST'}) + codst: number; + + @Column({name: 'CUSTOFINEST'}) + custofinest: number; + + @Column({name: 'CODAUXILIAR'}) + codauxiliar: number; + + @Column({name: 'CODFILIALRETIRA'}) + codfilialretira: string; + + @Column({name: 'PORIGINAL'}) + poriginal: number; + + @Column({name: 'VLCUSTOCONT'}) + vlcustocont: number; + + @Column({name: 'VLCUSTOREP'}) + vlcustorep: number; + + @Column({name: 'PBASERCA'}) + pbaserca: number; + + @Column({name: 'PVENDA1'}) + pvenda1: number; + + @Column({name: 'TIPOENTREGA'}) + tipoentrega: string; + + @Column({name: 'COMPLEMENTO'}) + complemento: string; + + @Column({name: 'AMBIENTE'}) + ambiente: string; + + @Column({name: 'RETIRAPOSTERIOR_IMEDIATA'}) + rp_imediata: string; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcpedc.entity.ts b/src/domain/entity/tables/pcpedc.entity.ts new file mode 100644 index 0000000..eed5888 --- /dev/null +++ b/src/domain/entity/tables/pcpedc.entity.ts @@ -0,0 +1,1538 @@ +import { Pcclientendent } from './pcclientendent.entity'; +import { Entity, Column, PrimaryColumn, OneToMany, JoinColumn, OneToOne, ManyToOne } from "typeorm"; +import { Pcpedi } from "./pcpedi.entity"; +import { Pcclient } from './pcclient.entity'; +import { Pccarreg } from './pccarreg.entity'; +import { Pcplpag } from './pcplpag.entity'; +import { Estpagamento } from './estpagamento.entity'; + +@Entity('PCPEDC') +export class Pcpedc { + + @PrimaryColumn({ name: 'NUMPED' }) + numped: number; + + @Column({ name: 'DATA' }) + data: Date; + + @Column({ name: 'VLTOTAL' }) + vltotal: number; + + @Column({ name: 'CODCLI' }) + codcli: number; + + @Column({ name: 'CODUSUR' }) + codusur: number; + + @Column({ name: 'DTENTREGA' }) + dtentrega: Date; + + @Column({ name: 'VLTABELA' }) + vltabela: number; + + @Column({ name: 'CODFILIAL' }) + codfilial: string; + + @Column({ name: 'VLDESCONTO' }) + vldesconto: number; + + @Column({ name: 'TIPOVENDA' }) + tipovenda: string; + + @Column({ name: 'OBS' }) + obs: string; + + @Column({ name: 'VLCUSTOREAL' }) + vlcustoreal: number; + + @Column({ name: 'VLCUSTOFIN' }) + vlcustofin: number; + + @Column({ name: 'VLFRETE' }) + vlfrete: number; + + @Column({ name: 'VLOUTRASDESP' }) + vloutrasdesp: number; + + @Column({ name: 'TOTPESO' }) + totpeso: number; + + @Column({ name: 'TOTVOLUME' }) + totvolume: number; + + @Column({ name: 'CODPRACA' }) + codpraca: number; + + @Column({ name: 'NUMITENS' }) + numitens: number; + + @Column({ name: 'CODEMITENTE' }) + codemitente: number; + + @Column({ name: 'DTCANCEL' }) + dtcancel: Date; + + @Column({ name: 'POSICAO' }) + posicao: string; + + @Column({ name: 'VLATEND' }) + vlatend: number; + + @Column({ name: 'OPERACAO' }) + operacao: string; + + @Column({ name: 'NUMCAR' }) + numcar: number; + + @Column({ name: 'CODCOB' }) + codcob: string; + + @Column({ name: 'HORA' }) + hora: number; + + @Column({ name: 'MINUTO' }) + minuto: number; + + @Column({ name: 'NUMSEQENTREGA' }) + numseqentrega: number; + + @Column({ name: 'CUSTOENTREGA' }) + custoentrega: number; + + @Column({ name: 'CODSUPERVISOR' }) + codsupervisor: number; + + @Column({ name: 'CAMPANHA' }) + campanha: string; + + @Column({ name: 'NUMPEDCLI' }) + numpedcli: string; + + @Column({ name: 'CONDVENDA' }) + condvenda: number; + + @Column({ name: 'PERCVENDA' }) + percvenda: number; + + @Column({ name: 'OBS1' }) + obs1: string; + + @Column({ name: 'OBS2' }) + obs2: string; + + @Column({ name: 'PERDESC' }) + perdesc: number; + + @Column({ name: 'NEGOCIADO' }) + negociado: string; + + @Column({ name: 'CODPLPAG' }) + codplpag: number; + + @Column({ name: 'CODFUNCCANCEL' }) + codfunccancel: number; + + @Column({ name: 'NUMTRANSVENDA' }) + numtransvenda: number; + + @Column({ name: 'MONTANDO' }) + montando: string; + + @Column({ name: 'NUMPEDRCA' }) + numpedrca: number; + + @Column({ name: 'FRETEDESPACHO' }) + fretedespacho: string; + + @Column({ name: 'FRETEREDESPACHO' }) + freteredespacho: string; + + @Column({ name: 'CODFORNECFRETE' }) + codfornecfrete: number; + + @Column({ name: 'TIPOCARGA' }) + tipocarga: string; + + @Column({ name: 'PRAZO1' }) + prazo1: number; + + @Column({ name: 'PRAZO2' }) + prazo2: number; + + @Column({ name: 'PRAZO3' }) + prazo3: number; + + @Column({ name: 'PRAZO4' }) + prazo4: number; + + @Column({ name: 'PRAZO5' }) + prazo5: number; + + @Column({ name: 'PRAZO6' }) + prazo6: number; + + @Column({ name: 'PRAZO7' }) + prazo7: number; + + @Column({ name: 'PRAZO8' }) + prazo8: number; + + @Column({ name: 'PRAZO9' }) + prazo9: number; + + @Column({ name: 'PRAZO10' }) + prazo10: number; + + @Column({ name: 'PRAZO11' }) + prazo11: number; + + @Column({ name: 'PRAZO12' }) + prazo12: number; + + @Column({ name: 'PRAZOMEDIO' }) + prazomedio: number; + + @Column({ name: 'OBSENTREGA1' }) + obsentrega1: string; + + @Column({ name: 'OBSENTREGA2' }) + obsentrega2: string; + + @Column({ name: 'OBSENTREGA3' }) + obsentrega3: string; + + @Column({ name: 'CODEPTO' }) + codepto: number; + + @Column({ name: 'TIPOEMBALAGEM' }) + tipoembalagem: string; + + @Column({ name: 'DTLIBERA' }) + dtlibera: Date; + + @Column({ name: 'CODMOTORISTA' }) + codmotorista: number; + + @Column({ name: 'CODFILIALNF' }) + codfilialnf: string; + + @Column({ name: 'DTNFTRANSF' }) + dtnftransf: Date; + + @Column({ name: 'NUMNFTRANSF' }) + numnftransf: number; + + @Column({ name: 'NUMCUPOM' }) + numcupom: number; + + @Column({ name: 'SERIEECF' }) + serieecf: string; + + @Column({ name: 'CODMOTBLOQUEIO' }) + codmotbloqueio: number; + + @Column({ name: 'CODMOTCANCEL' }) + codmotcancel: number; + + @Column({ name: 'TIPOOPER' }) + tipooper: string; + + @Column({ name: 'CODDISTRIB' }) + coddistrib: string; + + @Column({ name: 'NUMVIASMAPASEP' }) + numviasmapasep: number; + + @Column({ name: 'NUMVOLUME' }) + numvolume: number; + + @Column({ name: 'NUMSEQENTR' }) + numseqentr: number; + + @Column({ name: 'CODFUNCCX' }) + codfunccx: number; + + @Column({ name: 'NUMCAIXA' }) + numcaixa: number; + + @Column({ name: 'NUMNOTA' }) + numnota: number; + + @Column({ name: 'VLCUSTOREP' }) + vlcustorep: number; + + @Column({ name: 'VLCUSTOCONT' }) + vlcustocont: number; + + @Column({ name: 'VLDESCNEG' }) + vldescneg: number; + + @Column({ name: 'PERCDESCCANAL' }) + percdesccanal: number; + + @Column({ name: 'PERCDESCABC' }) + percdescabc: number; + + @Column({ name: 'PERCDESCCLI' }) + percdesccli: number; + + @Column({ name: 'PERCDESCNEG' }) + percdescneg: number; + + @Column({ name: 'NUMNOTAMANIF' }) + numnotamanif: number; + + @Column({ name: 'SERIEMANIF' }) + seriemanif: string; + + @Column({ name: 'ORIGEMPED' }) + origemped: string; + + @Column({ name: 'CODFORNECVDIRETO' }) + codfornecvdireto: number; + + @Column({ name: 'CODFUNCEXPARQOL' }) + codfuncexparqol: number; + + @Column({ name: 'DATAEXPARQOL' }) + dataexparqol: Date; + + @Column({ name: 'NUMSEQMONTAGEM' }) + numseqmontagem: number; + + @Column({ name: 'EXPORTADO' }) + exportado: string; + + @Column({ name: 'ESPECIEMANIF' }) + especiemanif: string; + + @Column({ name: 'EANENTREGA' }) + eanentrega: number; + + @Column({ name: 'EANCOBRANCA' }) + eancobranca: number; + + @Column({ name: 'CODFUNCCONF' }) + codfuncconf: number; + + @Column({ name: 'CODCONTRATO' }) + codcontrato: number; + + @Column({ name: 'NUMPEDENTFUT' }) + numpedentfut: number; + + @Column({ name: 'DTFAT' }) + dtfat: Date; + + @Column({ name: 'CODFUNCLIBERA' }) + codfunclibera: number; + + @Column({ name: 'NUMVIASPEDIDO' }) + numviaspedido: number; + + @Column({ name: 'HORAFAT' }) + horafat: number; + + @Column({ name: 'MINUTOFAT' }) + minutofat: number; + + @Column({ name: 'NUMPEDTV3' }) + numpedtv3: number; + + @Column({ name: 'NUMPEDORIGEM' }) + numpedorigem: number; + + @Column({ name: 'CODFUNCEMBALADOR' }) + codfuncembalador: number; + + @Column({ name: 'NUMNOTACONSIG' }) + numnotaconsig: number; + + @Column({ name: 'PEDIDOEMBALADO' }) + pedidoembalado: string; + + @Column({ name: 'NUMSERIEEQUIP' }) + numserieequip: string; + + @Column({ name: 'NUMORCA' }) + numorca: number; + + @Column({ name: 'NUMCARMANIF' }) + numcarmanif: number; + + @Column({ name: 'CODUSUR2' }) + codusur2: number; + + @Column({ name: 'CODUSUR3' }) + codusur3: number; + + @Column({ name: 'HORAINICIALSEP' }) + horainicialsep: number; + + @Column({ name: 'MINUTOINICIALSEP' }) + minutoinicialsep: number; + + @Column({ name: 'HORAFINALSEP' }) + horafinalsep: number; + + @Column({ name: 'MINUTOFINALSEP' }) + minutofinalsep: number; + + @Column({ name: 'CODSUPERVISOR2' }) + codsupervisor2: number; + + @Column({ name: 'CODSUPERVISOR3' }) + codsupervisor3: number; + + @Column({ name: 'CODCLICONSIGNACAO' }) + codcliconsignacao: number; + + @Column({ name: 'BAIXAESTCLI' }) + baixaestcli: string; + + @Column({ name: 'PRAZOADICIONAL' }) + prazoadicional: number; + + @Column({ name: 'HORALIBERA' }) + horalibera: number; + + @Column({ name: 'MINUTOLIBERA' }) + minutolibera: number; + + @Column({ name: 'CODFUNCCALCFRETE' }) + codfunccalcfrete: number; + + @Column({ name: 'DTCALCFRETE' }) + dtcalcfrete: Date; + + @Column({ name: 'VLFRETENF' }) + vlfretenf: number; + + @Column({ name: 'NUMTRANSWMS' }) + numtranswms: number; + + @Column({ name: 'NUMEMPENHO' }) + numempenho: string; + + @Column({ name: 'NUMPROCESSO' }) + numprocesso: string; + + @Column({ name: 'NUMFONTERECURSO' }) + numfonterecurso: string; + + @Column({ name: 'DTVENC1' }) + dtvenc1: Date; + + @Column({ name: 'DTVENC2' }) + dtvenc2: Date; + + @Column({ name: 'DTVENC3' }) + dtvenc3: Date; + + @Column({ name: 'DTWMS' }) + dtwms: Date; + + @Column({ name: 'PRAZOPONDERADO' }) + prazoponderado: string; + + @Column({ name: 'TIPOCFOPTV4' }) + tipocfoptv4: string; + + @Column({ name: 'DTEMISSAOMAPA' }) + dtemissaomapa: Date; + + @Column({ name: 'HORAEMISSAOMAPA' }) + horaemissaomapa: number; + + @Column({ name: 'MINUTOEMISSAOMAPA' }) + minutoemissaomapa: number; + + @Column({ name: 'DATAPROTOCOLO' }) + dataprotocolo: Date; + + @Column({ name: 'HORAPROTOCOLO' }) + horaprotocolo: number; + + @Column({ name: 'MINUTOPROTOCOLO' }) + minutoprotocolo: number; + + @Column({ name: 'CODFUNCPROTOCOLO' }) + codfuncprotocolo: number; + + @Column({ name: 'DTVALIDADE' }) + dtvalidade: Date; + + @Column({ name: 'CODCLINF' }) + codclinf: number; + + @Column({ name: 'OBSFRETENF1' }) + obsfretenf1: string; + + @Column({ name: 'OBSFRETENF2' }) + obsfretenf2: string; + + @Column({ name: 'OBSFRETENF3' }) + obsfretenf3: string; + + @Column({ name: 'ALIQICMSFRETENF' }) + aliqicmsfretenf: number; + + @Column({ name: 'BASEICMSFRETENF' }) + baseicmsfretenf: number; + + @Column({ name: 'VLICMSFRETENF' }) + vlicmsfretenf: number; + + @Column({ name: 'DTINICIALCHECKOUT' }) + dtinicialcheckout: Date; + + @Column({ name: 'DTFINALCHECKOUT' }) + dtfinalcheckout: Date; + + @Column({ name: 'CODFUNCEMISSAOMAPA' }) + codfuncemissaomapa: number; + + @Column({ name: 'NUMPEDVALE' }) + numpedvale: number; + + @Column({ name: 'VLBONIFIC' }) + vlbonific: number; + + @Column({ name: 'NUMORDEMCARGA' }) + numordemcarga: number; + + @Column({ name: 'NUMCARAUX' }) + numcaraux: number; + + @Column({ name: 'DTABERTURAPEDPALM' }) + dtaberturapedpalm: Date; + + @Column({ name: 'DTFECHAMENTOPEDPALM' }) + dtfechamentopedpalm: Date; + + @Column({ name: 'DATAPEDCLI' }) + datapedcli: Date; + + @Column({ name: 'NUMNOTATRANSFDEP' }) + numnotatransfdep: number; + + @Column({ name: 'CODCONDICAOVENDA' }) + codcondicaovenda: number; + + @Column({ name: 'TOTVLDESCFIN' }) + totvldescfin: number; + + @Column({ name: 'TOTVLDESCCOM' }) + totvldesccom: number; + + @Column({ name: 'TOTVLBONIFIC' }) + totvlbonific: number; + + @Column({ name: 'TOTVLDESCFLEX' }) + totvldescflex: number; + + @Column({ name: 'TOTVLREDCOMISS' }) + totvlredcomiss: number; + + @Column({ name: 'IMPORTACUPOM' }) + importacupom: number; + + @Column({ name: 'EANCOMPRADOR' }) + eancomprador: number; + + @Column({ name: 'EANLOCALENTREGA' }) + eanlocalentrega: number; + + @Column({ name: 'DTAGENDAENTREGA' }) + dtagendaentrega: Date; + + @Column({ name: 'NUMPEDBNF' }) + numpedbnf: number; + + @Column({ name: 'NUMPEDECF' }) + numpedecf: number; + + @Column({ name: 'TOTVLREDCOMISSSUP' }) + totvlredcomisssup: number; + + @Column({ name: 'CONFERINDOPEDIDO' }) + conferindopedido: string; + + @Column({ name: 'CODATENDIMENTO' }) + codatendimento: number; + + @Column({ name: 'TRIBUTAPORREGIAOFILIAL' }) + tributaporregiaofilial: string; + + @Column({ name: 'CODCLIRECEBEDOR' }) + codclirecebedor: number; + + @Column({ name: 'NUMCAIXAFISCAL' }) + numcaixafiscal: number; + + @Column({ name: 'MOTIVOPOSICAO' }) + motivoposicao: string; + + @Column({ name: 'PRONTAENTREGA' }) + prontaentrega: string; + + @Column({ name: 'IMPORTADO' }) + importado: string; + + @Column({ name: 'DTEXPORTADO' }) + dtexportado: Date; + + @Column({ name: 'DTIMPORTADO' }) + dtimportado: Date; + + @Column({ name: 'NUMCARFAB' }) + numcarfab: number; + + @Column({ name: 'NUMTABELA' }) + numtabela: string; + + @Column({ name: 'CODESTABELECIMENTO' }) + codestabelecimento: string; + + @Column({ name: 'BROKER' }) + broker: string; + + @Column({ name: 'RESTRICAOTRANSP' }) + restricaotransp: string; + + @Column({ name: 'NUMSEQROTA' }) + numseqrota: number; + + @Column({ name: 'NUMPREVENDA' }) + numprevenda: number; + + @Column({ name: 'CODPROFISSIONAL' }) + codprofissional: number; + + @Column({ name: 'NUMORCAFILIAL' }) + numorcafilial: number; + + @Column({ name: 'TIPOFORMULARIONF' }) + tipoformularionf: string; + + @Column({ name: 'NUMPEDWEB' }) + numpedweb: number; + + @Column({ name: 'NUMREGIAO' }) + numregiao: number; + + @Column({ name: 'CONCILIAIMPORTACAO' }) + conciliaimportacao: string; + + @Column({ name: 'PAGTOANTECIPADO' }) + pagtoantecipado: string; + + @Column({ name: 'PERDESCFIN' }) + perdescfin: number; + + @Column({ name: 'GERACP' }) + geracp: string; + + @Column({ name: 'IMPORTADOSERVPRINC' }) + importadoservprinc: string; + + @Column({ name: 'DTIMPORTACAOSERVPRINC' }) + dtimportacaoservprinc: Date; + + @Column({ name: 'DTEXPORTACAOSERVINT' }) + dtexportacaoservint: Date; + + @Column({ name: 'EXPORTADOSERVINT' }) + exportadoservint: string; + + @Column({ name: 'NOMEARQUIVOFV' }) + nomearquivofv: string; + + @Column({ name: 'CODVEICULO' }) + codveiculo: string; + + @Column({ name: 'NUMECF' }) + numecf: number; + + @Column({ name: 'RESERVARITENSTV7' }) + reservaritenstv7: string; + + @Column({ name: 'VENDAASSISTIDA' }) + vendaassistida: string; + + @Column({ name: 'PERCCOMPROFISSIONAL' }) + perccomprofissional: number; + + @Column({ name: 'DTINICIALSEP' }) + dtinicialsep: Date; + + @Column({ name: 'DTFINALSEP' }) + dtfinalsep: Date; + + @Column({ name: 'TIPORETIRADA' }) + tiporetirada: string; + + @Column({ name: 'USACFOPVENDANATV10' }) + usacfopvendanatv10: string; + + @Column({ name: 'GERARDADOSNFPAULISTA' }) + gerardadosnfpaulista: string; + + @Column({ name: 'CODMOTIVO' }) + codmotivo: number; + + @Column({ name: 'BLOQUEIOEDICAO' }) + bloqueioedicao: string; + + @Column({ name: 'DTEXPORTACAO' }) + dtexportacao: Date; + + @Column({ name: 'NUMSEQENVIO' }) + numseqenvio: number; + + @Column({ name: 'NUMSEQRETORNO1' }) + numseqretorno1: number; + + @Column({ name: 'NUMSEQRETORNO2' }) + numseqretorno2: number; + + @Column({ name: 'USAINTEGRACAOWMS' }) + usaintegracaowms: string; + + @Column({ name: 'CODFUNCEXPINTWMS' }) + codfuncexpintwms: number; + + @Column({ name: 'CODFUNCIMPINTWMS' }) + codfuncimpintwms: number; + + @Column({ name: 'DTIMPORTACAO' }) + dtimportacao: Date; + + @Column({ name: 'CODFORNECREDESPACHO' }) + codfornecredespacho: number; + + @Column({ name: 'NUMLOTEINTWMS' }) + numloteintwms: number; + + @Column({ name: 'RESTRICAOTRANSPORTE' }) + restricaotransporte: string; + + @Column({ name: 'DTCHEGADACLIENTE' }) + dtchegadacliente: Date; + + @Column({ name: 'VENDAASSISTIVA' }) + vendaassistiva: string; + + @Column({ name: 'DTINICIALPEND' }) + dtinicialpend: Date; + + @Column({ name: 'DTFINALPEND' }) + dtfinalpend: Date; + + @Column({ name: 'TOTPESOLIQ' }) + totpesoliq: number; + + @Column({ name: 'NUMORCAPRINC' }) + numorcaprinc: number; + + @Column({ name: 'CODENDENT' }) + codendent: number; + + @Column({ name: 'NUMSEQCORREIO' }) + numseqcorreio: number; + + @Column({ name: 'NUMCONTRATOCORREIO' }) + numcontratocorreio: number; + + @Column({ name: 'VERSAOROTINA' }) + versaorotina: string; + + @Column({ name: 'PEDDUPLICADO' }) + pedduplicado: string; + + @Column({ name: 'TIPOPRIORIDADEENTREGA' }) + tipoprioridadeentrega: string; + + @Column({ name: 'TOTPESOLIQAGRUPADO' }) + totpesoliqagrupado: number; + + @Column({ name: 'TOTPESOAGRUPADO' }) + totpesoagrupado: number; + + @Column({ name: 'TOTVOLUMEAGRUPADO' }) + totvolumeagrupado: number; + + @Column({ name: 'NUMPEDORIGEMFRETE' }) + numpedorigemfrete: number; + + @Column({ name: 'LOCALIZACAOPEDIDO' }) + localizacaopedido: string; + + @Column({ name: 'SUBSERIE' }) + subserie: string; + + @Column({ name: 'PERCFRETE' }) + percfrete: number; + + @Column({ name: 'BRINDE' }) + brinde: string; + + @Column({ name: 'USACREDRCA' }) + usacredrca: string; + + @Column({ name: 'USADEBCREDRCA' }) + usadebcredrca: string; + + @Column({ name: 'BONIFICALTDEBCREDRCA' }) + bonificaltdebcredrca: string; + + @Column({ name: 'TROCAALTDEBCREDRCA' }) + trocaaltdebcredrca: string; + + @Column({ name: 'BROKERALTDEBCREDRCA' }) + brokeraltdebcredrca: string; + + @Column({ name: 'CRMALTDEBCREDRCA' }) + crmaltdebcredrca: string; + + @Column({ name: 'NUMCARANTERIOR' }) + numcaranterior: number; + + @Column({ name: 'CODPRACADESTINO' }) + codpracadestino: number; + + @Column({ name: 'GERARCONTROLEDEENTREGA' }) + gerarcontroledeentrega: string; + + @Column({ name: 'CODUSUR4' }) + codusur4: number; + + @Column({ name: 'TIPOMOVCCRCA' }) + tipomovccrca: string; + + @Column({ name: 'NUMVOLUMEAGRUPADO' }) + numvolumeagrupado: number; + + @Column({ name: 'ESPECIEVOLUME' }) + especievolume: string; + + @Column({ name: 'MARCAVOLUME' }) + marcavolume: string; + + @Column({ name: 'CODIGOSAZONALIDADE' }) + codigosazonalidade: number; + + @Column({ name: 'ROTINA' }) + rotina: string; + + @Column({ name: 'CODTRANSP' }) + codtransp: number; + + @Column({ name: 'DTCONFGARANTIA' }) + dtconfgarantia: Date; + + @Column({ name: 'CODFUNCCONFGARANTIA' }) + codfuncconfgarantia: number; + + @Column({ name: 'CODAUTORIZACAOTEF' }) + codautorizacaotef: number; + + @Column({ name: 'NSUTEF' }) + nsutef: string; + + @Column({ name: 'CODADMCARTAO' }) + codadmcartao: string; + + @Column({ name: 'RECARGA' }) + recarga: string; + + @Column({ name: 'PROTOCOLONFP' }) + protocolonfp: string; + + @Column({ name: 'NUMPEDTV1' }) + numpedtv1: number; + + @Column({ name: 'NUMPESO' }) + numpeso: number; + + @Column({ name: 'CODFUNCSEP' }) + codfuncsep: number; + + @Column({ name: 'USASALDOCONTACORRENTEDESCFIN' }) + usasaldocontacorrentedescfin: string; + + @Column({ name: 'BLOQUEIOSALDOCCDESCFIN' }) + bloqueiosaldoccdescfin: string; + + @Column({ name: 'INTEGRADORA' }) + integradora: number; + + @Column({ name: 'VALORDESCFIN' }) + valordescfin: number; + + @Column({ name: 'NUMVIASETIQUETA' }) + numviasetiqueta: number; + + @Column({ name: 'VENDATRIANGULAR' }) + vendatriangular: string; + + @Column({ name: 'CODVISITA' }) + codvisita: number; + + @Column({ name: 'TIPODOCUMENTO' }) + tipodocumento: string; + + @Column({ name: 'CODMOTIVO2' }) + codmotivo2: number; + + @Column({ name: 'BLOQFINANCEIRO' }) + bloqfinanceiro: string; + + @Column({ name: 'BLOQCOMERCIAL' }) + bloqcomercial: string; + + @Column({ name: 'VLENTRADA' }) + vlentrada: number; + + @Column({ name: 'VLFRETERETIDO' }) + vlfreteretido: number; + + @Column({ name: 'VLSTFRETERETIDO' }) + vlstfreteretido: number; + + @Column({ name: 'PERCFRETERETIDO' }) + percfreteretido: number; + + @Column({ name: 'PERCSTFRETERETIDO' }) + percstfreteretido: number; + + @Column({ name: 'PRAZOMEDIOPLPAG' }) + prazomedioplpag: number; + + @Column({ name: 'DTLIBERA2' }) + dtlibera2: Date; + + @Column({ name: 'CODFUNCLIBERA2' }) + codfunclibera2: number; + + @Column({ name: 'CUSTOBONIFICACAO' }) + custobonificacao: string; + + @Column({ name: 'CODFORNECBONIFIC' }) + codfornecbonific: number; + + @Column({ name: 'CODBNF' }) + codbnf: number; + + @Column({ name: 'UFDESEMBARACO' }) + ufdesembaraco: string; + + @Column({ name: 'LOCALDESEMBARACO' }) + localdesembaraco: string; + + @Column({ name: 'OBSENTREGA4' }) + obsentrega4: string; + + @Column({ name: 'PERCSALDORESERVARCA' }) + percsaldoreservarca: number; + + @Column({ name: 'PLACAVEICULO' }) + placaveiculo: string; + + @Column({ name: 'SOFTNUMLANC' }) + softnumlanc: string; + + @Column({ name: 'CFOPBNFDEGUSTA' }) + cfopbnfdegusta: number; + + @Column({ name: 'CONTAORDEM' }) + contaordem: string; + + @Column({ name: 'LOG' }) + log: string; + + @Column({ name: 'LOG1' }) + log1: string; + + @Column({ name: 'LOG2' }) + log2: string; + + @Column({ name: 'LOG3' }) + log3: string; + + @Column({ name: 'LOG4' }) + log4: string; + + @Column({ name: 'CODPOSTAGEM' }) + codpostagem: string; + + @Column({ name: 'DATAEMPENHO' }) + dataempenho: Date; + + @Column({ name: 'CODUNIDADEEXECUTORA' }) + codunidadeexecutora: string; + + @Column({ name: 'NUMTRANSACAOTRANSF' }) + numtransacaotransf: number; + + @Column({ name: 'NUMCCF' }) + numccf: number; + + @Column({ name: 'DTLIMITEFAT' }) + dtlimitefat: Date; + + @Column({ name: 'GEONUMLICITACAO' }) + geonumlicitacao: string; + + @Column({ name: 'DTEXPORTACAOWMS' }) + dtexportacaowms: Date; + + @Column({ name: 'DTIMPORTACAOWMS' }) + dtimportacaowms: Date; + + @Column({ name: 'CODFUNCLIBDESC' }) + codfunclibdesc: number; + + @Column({ name: 'PERDESCLIB' }) + perdesclib: number; + + @Column({ name: 'ROTINALANC' }) + rotinalanc: string; + + @Column({ name: 'ROTINALANCULTALT' }) + rotinalancultalt: string; + + @Column({ name: 'RESERVAESTOQUETV7' }) + reservaestoquetv7: string; + + @Column({ name: 'FORNECENTREGA' }) + fornecentrega: string; + + @Column({ name: 'CODCLITV8' }) + codclitv8: number; + + @Column({ name: 'ALTAPOSMAPASEP' }) + altaposmapasep: string; + + @Column({ name: 'CODPLPAGETICO' }) + codplpagetico: number; + + @Column({ name: 'CODPLPAGGENERICO' }) + codplpaggenerico: number; + + @Column({ name: 'MOTORISTAVEICULO' }) + motoristaveiculo: string; + + @Column({ name: 'UFVEICULO' }) + ufveiculo: string; + + @Column({ name: 'DTINICIODIGITACAOPEDIDO' }) + dtiniciodigitacaopedido: Date; + + @Column({ name: 'DTFIMDIGITACAOPEDIDO' }) + dtfimdigitacaopedido: Date; + + @Column({ name: 'TIPOFV' }) + tipofv: string; + + @Column({ name: 'VLDESCABATIMENTO' }) + vldescabatimento: number; + + @Column({ name: 'CODAUTORIZACAOTEFWEB' }) + codautorizacaotefweb: string; + + @Column({ name: 'AGRUPAMENTO' }) + agrupamento: string; + + @Column({ name: 'NUMLISTA' }) + numlista: number; + + @Column({ name: 'DEVSIMBOLICA' }) + devsimbolica: string; + + @Column({ name: 'IDAGRUPAMENTO' }) + idagrupamento: string; + + @Column({ name: 'VENDAEXPORTACAO' }) + vendaexportacao: string; + + @Column({ name: 'PEDIDOAVARIA' }) + pedidoavaria: string; + + @Column({ name: 'TURNOENTREGA' }) + turnoentrega: string; + + @Column({ name: 'NUMTRANSVENDATV13' }) + numtransvendatv13: number; + + @Column({ name: 'PERDESCAVISTA' }) + perdescavista: number; + + @Column({ name: 'PLPAGAVISTA' }) + plpagavista: string; + + @Column({ name: 'NUMPEDVANXML' }) + numpedvanxml: string; + + @Column({ name: 'NUMPEDAGRUPADO' }) + numpedagrupado: number; + + @Column({ name: 'NUMVIASPEDAGRUPADO' }) + numviaspedagrupado: number; + + @Column({ name: 'CODENDENTCLI' }) + codendentcli: number; + + @Column({ name: 'TIPOEMISSAO' }) + tipoemissao: string; + + @Column({ name: 'CONTINGENCIATV14' }) + contingenciatv14: string; + + @Column({ name: 'CHAVENFE' }) + chavenfe: string; + + @Column({ name: 'NUMPEDTV14' }) + numpedtv14: number; + + @Column({ name: 'ENVIADOCOMPRA' }) + enviadocompra: string; + + @Column({ name: 'ENVIADOVENDA' }) + enviadovenda: string; + + @Column({ name: 'JUSTIFICATIVACONTIGENCIA' }) + justificativacontigencia: string; + + @Column({ name: 'DTAHORAENTRADACONTIGENCIA' }) + dtahoraentradacontigencia: Date; + + @Column({ name: 'VLTRIBUTOS' }) + vltributos: number; + + @Column({ name: 'CARTAODOTZ' }) + cartaodotz: string; + + @Column({ name: 'HORAEMISSAO' }) + horaemissao: string; + + @Column({ name: 'UTILIZAVENDAPOREMBALAGEM' }) + utilizavendaporembalagem: string; + + @Column({ name: 'CONSUMIUNUMNFE' }) + consumiunumnfe: string; + + @Column({ name: 'VLDESCONTOCUPOM' }) + vldescontocupom: number; + + @Column({ name: 'NSUSOCIOTORCEDOR' }) + nsusociotorcedor: string; + + @Column({ name: 'VLDESCSOCIOTORCEDOR' }) + vldescsociotorcedor: number; + + @Column({ name: 'IDTIPOPRESENCA' }) + idtipopresenca: string; + + @Column({ name: 'NUMREGEXP' }) + numregexp: number; + + @Column({ name: 'NUMCHAVEEXP' }) + numchaveexp: string; + + @Column({ name: 'NUMDRAWBACK' }) + numdrawback: number; + + @Column({ name: 'VLSUBTOTAL' }) + vlsubtotal: number; + + @Column({ name: 'CODCONTATO' }) + codcontato: number; + + @Column({ name: 'LIBERA_RETAGUARDA' }) + libera_retaguarda: string; + + @Column({ name: 'CODFUNCLIBEROURET' }) + codfuncliberouret: number; + + @Column({ name: 'DATALIBEROURET' }) + dataliberouret: Date; + + @Column({ name: 'CODMOEDAESTRANGEIRA' }) + codmoedaestrangeira: number; + + @Column({ name: 'VLRMOEDAESTRANGEIRA' }) + vlrmoedaestrangeira: number; + + @Column({ name: 'TAXACASOMOEDAREAL' }) + taxacasomoedareal: number; + + @Column({ name: 'AMBIENTENFCE' }) + ambientenfce: string; + + @Column({ name: 'VERSAOFATURAMENTO' }) + versaofaturamento: string; + + @Column({ name: 'DOCEMISSAO' }) + docemissao: string; + + @Column({ name: 'QRCODENFCE' }) + qrcodenfce: string; + + @Column({ name: 'CHAVENFCE' }) + chavenfce: string; + + @Column({ name: 'CODMOEDAESTRANGEIRAORIGINAL' }) + codmoedaestrangeiraoriginal: number; + + @Column({ name: 'PEDIDOPAGOECOMMERCE' }) + pedidopagoecommerce: string; + + @Column({ name: 'CODFRETE' }) + codfrete: number; + + @Column({ name: 'COLUNAFRETE' }) + colunafrete: number; + + @Column({ name: 'NUMFORMULARIO' }) + numformulario: number; + + @Column({ name: 'NUMSELO' }) + numselo: string; + + @Column({ name: 'NUMCIRURGIA' }) + numcirurgia: number; + + @Column({ name: 'NUMFECHAMENTOMOVCX' }) + numfechamentomovcx: number; + + @Column({ name: 'DTMOVIMENTOCX' }) + dtmovimentocx: Date; + + @Column({ name: 'CODBANCOCM' }) + codbancocm: number; + + @Column({ name: 'VENDANFSERIED' }) + vendanfseried: string; + + @Column({ name: 'EMITIRCUPOMFISCAL' }) + emitircupomfiscal: string; + + @Column({ name: 'NUMSERIESAT' }) + numseriesat: string; + + @Column({ name: 'DATAHORAEMISSAOSAT' }) + datahoraemissaosat: Date; + + @Column({ name: 'CHAVESAT' }) + chavesat: string; + + @Column({ name: 'QRCODESAT' }) + qrcodesat: string; + + @Column({ name: 'NUMSESSAOSAT' }) + numsessaosat: number; + + @Column({ name: 'CODSEFAZSAT' }) + codsefazsat: number; + + @Column({ name: 'CODRETORNOSAT' }) + codretornosat: number; + + @Column({ name: 'PROTOCOLONFCE' }) + protocolonfce: string; + + @Column({ name: 'MELDATAEMISSAOPED' }) + meldataemissaoped: Date; + + @Column({ name: 'VILDTSEPARACOMPLFIM' }) + vildtseparacomplfim: Date; + + @Column({ name: 'VILDTSEPARACOMPLINI' }) + vildtseparacomplini: Date; + + @Column({ name: 'COLETAFRETE' }) + coletafrete: string; + + @Column({ name: 'VLFRETETRANSP' }) + vlfretetransp: number; + + @Column({ name: 'VLFRETEEMPENTREGA' }) + vlfreteempentrega: number; + + @Column({ name: 'OBSNFCE' }) + obsnfce: string; + + @Column({ name: 'VLTOTALCOMTROCO' }) + vltotalcomtroco: number; + + @Column({ name: 'VENDALOCESTRANG' }) + vendalocestrang: string; + + @Column({ name: 'CODDISP' }) + coddisp: number; + + @Column({ name: 'TRANSPORTADORA' }) + transportadora: string; + + @Column({ name: 'CGCFRETE' }) + cgcfrete: string; + + @Column({ name: 'IEFRETE' }) + iefrete: string; + + @Column({ name: 'UFFRETE' }) + uffrete: string; + + @Column({ name: 'SITUACAOSAT' }) + situacaosat: string; + + @Column({ name: 'CODSTATUSSAT' }) + codstatussat: number; + + @Column({ name: 'USACREDRCATIPOBNF' }) + usacredrcatipobnf: string; + + @Column({ name: 'UIDREGISTRO' }) + uidregistro: number; + + @Column({ name: 'IDPARCEIRO' }) + idparceiro: string; + + @Column({ name: 'ASSINATURA' }) + assinatura: string; + + @Column({ name: 'NUMCOLETA' }) + numcoleta: string; + + @Column({ name: 'EXPORTACRM' }) + exportacrm: number; + + @Column({ name: 'VENDALOCALCLIEX' }) + vendalocalcliex: string; + + @Column({ name: 'MULTIPLICADORDUPLIC' }) + multiplicadorduplic: number; + + @Column({ name: 'COPIAIDENTICAPEDDUP' }) + copiaidenticapeddup: string; + + @Column({ name: 'DATAEXPEDICAO' }) + dataexpedicao: Date; + + @Column({ name: 'DATARETORNO' }) + dataretorno: Date; + + @Column({ name: 'DATASAIDA' }) + datasaida: Date; + + @Column({ name: 'TRIBVENDATRIANGULAR' }) + tribvendatriangular: string; + + @Column({ name: 'NUMOS' }) + numos: number; + + @Column({ name: 'VLOPERACAOFRETE' }) + vloperacaofrete: number; + + @Column({ name: 'VLBASESTFRETE' }) + vlbasestfrete: number; + + @Column({ name: 'VLICMSSTFRETE' }) + vlicmsstfrete: number; + + @Column({ name: 'PERCENTUALSTFRETE' }) + percentualstfrete: number; + + @Column({ name: 'CODEDITAL' }) + codedital: number; + + @Column({ name: 'PAGCHEQUEMORADIA' }) + pagchequemoradia: string; + + @Column({ name: 'QTPARCELAS' }) + qtparcelas: number; + + @Column({ name: 'NSU' }) + nsu: string; + + @Column({ name: 'CODAUTORIZACAO' }) + codautorizacao: number; + + @Column({ name: 'TIPOOPERACAOTEF' }) + tipooperacaotef: string; + + @Column({ name: 'CODBANDEIRATEF' }) + codbandeiratef: string; + + @Column({ name: 'VLTXENT' }) + vltxent: number; + + @Column({ name: 'CONDFINANC' }) + condfinanc: string; + + @Column({ name: 'PLANOSUPPLI' }) + planosuppli: number; + + @Column({ name: 'CODRASTREIO' }) + codrastreio: string; + + @Column({ name: 'NUMPRECAR' }) + numprecar: number; + + @Column({ name: 'CODBREX' }) + codbrex: number; + + @Column({ name: 'VLFRETEOUTRASDESP' }) + vlfreteoutrasdesp: number; + + @Column({ name: 'STATUSPEDIDOCIASHOP' }) + statuspedidociashop: string; + + @Column({ name: 'MENSAGEM' }) + mensagem: string; + + @Column({ name: 'ORDEMSEP' }) + ordemsep: number; + + @Column({ name: 'ORDEMCONF' }) + ordemconf: number; + + @Column({ name: 'PAGAMENTOAPROVADOCIASHOP' }) + pagamentoaprovadociashop: string; + + @Column({ name: 'DERRUBADACARGA' }) + derrubadacarga: string; + + @Column({ name: 'CODPLPAGANT' }) + codplpagant: number; + + @Column({ name: 'RECALPRECOALTPLPAG' }) + recalprecoaltplpag: string; + + @Column({ name: 'TIPOCONTACORRENTE' }) + tipocontacorrente: string; + + @Column({ name: 'CODGERENTE' }) + codgerente: number; + + @Column({ name: 'MATERIALDECONSTRUCAO' }) + materialdeconstrucao: string; + + @Column({ name: 'CODRASTREAMENTO' }) + codrastreamento: string; + + @Column({ name: 'URLRASTREAMENTO' }) + urlrastreamento: string; + + @Column({ name: 'DTFATCOMPLETA' }) + dtfatcompleta: Date; + + @Column({ name: 'NUMPEDMKTPLACE' }) + numpedmktplace: string; + + @Column({ name: 'ESC_DTENVIOINTERNIT' }) + esc_dtenviointernit: Date; + + @Column({ name: 'ESC_DTENVIOPROTHEUS' }) + esc_dtenvioprotheus: Date; + + @Column({ name: 'DATAEFETIVAENTREGACIASHOP' }) + dataefetivaentregaciashop: Date; + + @Column({ name: 'TIPOCALCVLATEND' }) + tipocalcvlatend: string; + + @Column({ name: 'USACORTECIASHOP' }) + usacorteciashop: string; + + @Column({ name: 'VLVERBACMV' }) + vlverbacmv: number; + + @Column({ name: 'VLVERBACMVCLI' }) + vlverbacmvcli: number; + + @Column({ name: 'SITUACAOPROCESSAMENTO' }) + situacaoprocessamento: string; + + @Column({ name: 'CODFUNCLIBERADTENTREGA' }) + codfuncliberadtentrega: number; + + @Column({ name: 'INDICADORDESCONTO' }) + indicadordesconto: string; + + @Column({ name: 'INDICADORACRESCIMO' }) + indicadoracrescimo: string; + + @Column({ name: 'CODPROMOCAOMED' }) + codpromocaomed: number; + + @Column({ name: 'PERMITEPRODSEMDISTRIBUICAO' }) + permiteprodsemdistribuicao: string; + + @Column({ name: 'SISTEMALEGADO' }) + sistemalegado: string; + + @Column({ name: 'IDREMESSAWEB' }) + idremessaweb: number; + + @Column({ name: 'NUMVIASMAPASEPRI' }) + numviasmapasepri: number; + + @Column({ name: 'ULTIMASITUACAOCFAT' }) + ultimasituacaocfat: string; + + @Column({ name: 'NUMTRANSENTCROSSDOCK' }) + numtransentcrossdock: number; + + @Column({ name: 'DATAULTIMASITUACAOCFAT' }) + dataultimasituacaocfat: Date; + + @Column({ name: 'NUMTRANSENTORIGCONSIG' }) + numtransentorigconsig: number; + + @Column({ name: 'NUMTRANSENTORIGTV10' }) + numtransentorigtv10: number; + + @Column({ name: 'VLJUROSPARCELAMENTO' }) + vljurosparcelamento: number; + + @Column({ name: 'DTENVIOSTATUSWEB' }) + dtenviostatusweb: Date; + + @Column({ name: 'CODSTATUSWEB' }) + codstatusweb: number; + + @Column({ name: 'QTPALETE' }) + qtpalete: number; + + @Column({ name: 'TOTPESOPALETE' }) + totpesopalete: number; + + @OneToMany(() => Pcpedi, itens => itens.pcpedc) + itens: Pcpedi[]; + + @ManyToOne(() => Pcclientendent, pcclientendent => pcclientendent.pedidos) + @JoinColumn([{ name: 'CODCLI' }, {name: 'CODCLIENDENT'}]) + pcclientendent: Pcclientendent; + + @ManyToOne(() => Pcclient, pcclient => pcclient.pedidos) + @JoinColumn({ name: 'CODCLI' }) + pcclient: Pcclient; + + @OneToOne(() => Pcpedc) + @JoinColumn({name: 'NUMPED'}) + pcpedc: Pcpedc; + + @ManyToOne(() => Pccarreg, pccarreg => pccarreg.pedidos) + @JoinColumn({ name: 'NUMCAR' }) + pccarreg: Pccarreg; + + @ManyToOne(() => Pcplpag, pcplpag => pcplpag.pedidos) + @JoinColumn({ name: 'CODPLPAG' }) + pcplpag: Pcplpag; + + @OneToMany(() => Estpagamento, pagamentos => pagamentos.pedido) + pagamentos: Estpagamento[]; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcpedctemp.entity.ts b/src/domain/entity/tables/pcpedctemp.entity.ts new file mode 100644 index 0000000..93d512f --- /dev/null +++ b/src/domain/entity/tables/pcpedctemp.entity.ts @@ -0,0 +1,473 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('PCPEDCTEMP') +export class Pcpedctemp { + @Column({ name: 'TIPOINTEGRACAO' }) + tipointegracao: string; + + @Column({ name: 'IMPORTADO' }) + importado: string; + + @Column({ name: 'OBSERVACAO_PC' }) + observacao_pc: string; + + @Column({ name: 'NUMPEDCLI' }) + numpedcli: string; + + @PrimaryColumn({ name: 'NUMPEDRCA' }) + numpedrca: number; + + @Column({ name: 'NUMPED' }) + numped: number; + + @Column({ name: 'CODCLI' }) + codcli: number; + + @Column({ name: 'CODUSUR' }) + codusur: number; + + @Column({ name: 'DATA' }) + data: Date; + + @Column({ name: 'DTENTREGA' }) + dtentrega: Date; + + @Column({ name: 'CODFILIAL' }) + codfilial: string; + + @Column({ name: 'CODFILIALNF' }) + codfilialnf: string; + + @Column({ name: 'VLFRETE' }) + vlfrete: number; + + @Column({ name: 'VLOUTRASDESP' }) + vloutrasdesp: number; + + @Column({ name: 'CODPRACA' }) + codpraca: number; + + @Column({ name: 'NUMITENS' }) + numitens: number; + + @Column({ name: 'CODEMITENTE' }) + codemitente: number; + + @Column({ name: 'CODCOB' }) + codcob: string; + + @Column({ name: 'HORA' }) + hora: number; + + @Column({ name: 'MINUTO' }) + minuto: number; + + @Column({ name: 'CODSUPERVISOR' }) + codsupervisor: number; + + @Column({ name: 'CONDVENDA' }) + condvenda: number; + + @Column({ name: 'PERCVENDA' }) + percvenda: number; + + @Column({ name: 'OBS1' }) + obs1: string; + + @Column({ name: 'OBS2' }) + obs2: string; + + @Column({ name: 'CODPLPAG' }) + codplpag: number; + + @Column({ name: 'FRETEDESPACHO' }) + fretedespacho: string; + + @Column({ name: 'FRETEREDESPACHO' }) + freteredespacho: string; + + @Column({ name: 'CODFORNECFRETE' }) + codfornecfrete: number; + + @Column({ name: 'PRAZO1' }) + prazo1: number; + + @Column({ name: 'PRAZO2' }) + prazo2: number; + + @Column({ name: 'PRAZO3' }) + prazo3: number; + + @Column({ name: 'PRAZO4' }) + prazo4: number; + + @Column({ name: 'PRAZO5' }) + prazo5: number; + + @Column({ name: 'PRAZO6' }) + prazo6: number; + + @Column({ name: 'PRAZO7' }) + prazo7: number; + + @Column({ name: 'PRAZO8' }) + prazo8: number; + + @Column({ name: 'PRAZO9' }) + prazo9: number; + + @Column({ name: 'PRAZO10' }) + prazo10: number; + + @Column({ name: 'PRAZO11' }) + prazo11: number; + + @Column({ name: 'PRAZO12' }) + prazo12: number; + + @Column({ name: 'PRAZOMEDIO' }) + prazomedio: number; + + @Column({ name: 'OBSENTREGA1' }) + obsentrega1: string; + + @Column({ name: 'OBSENTREGA2' }) + obsentrega2: string; + + @Column({ name: 'OBSENTREGA3' }) + obsentrega3: string; + + @Column({ name: 'NUMCUPOM' }) + numcupom: number; + + @Column({ name: 'SERIEECF' }) + serieecf: string; + + @Column({ name: 'CODDISTRIB' }) + coddistrib: string; + + @Column({ name: 'NUMVIASMAPASEP' }) + numviasmapasep: number; + + @Column({ name: 'CODFUNCCX' }) + codfunccx: number; + + @Column({ name: 'NUMCAIXA' }) + numcaixa: number; + + @Column({ name: 'NUMNOTAMANIF' }) + numnotamanif: number; + + @Column({ name: 'SERIEMANIF' }) + seriemanif: string; + + @Column({ name: 'ORIGEMPED' }) + origemped: string; + + @Column({ name: 'ESPECIEMANIF' }) + especiemanif: string; + + @Column({ name: 'EANENTREGA' }) + eanentrega: number; + + @Column({ name: 'EANCOBRANCA' }) + eancobranca: number; + + @Column({ name: 'CODCLINF' }) + codclinf: number; + + @Column({ name: 'CODUSUR2' }) + codusur2: number; + + @Column({ name: 'NUMPEDORIGEM' }) + numpedorigem: number; + + @Column({ name: 'NUMPEDENTFUT' }) + numpedentfut: number; + + @Column({ name: 'NUMNOTACONSIG' }) + numnotaconsig: number; + + @Column({ name: 'NUMSERIEEQUIP' }) + numserieequip: string; + + @Column({ name: 'NUMCARMANIF' }) + numcarmanif: number; + + @Column({ name: 'NUMORCA' }) + numorca: number; + + @Column({ name: 'CODUSUR3' }) + codusur3: number; + + @Column({ name: 'CODSUPERVISOR2' }) + codsupervisor2: number; + + @Column({ name: 'CODSUPERVISOR3' }) + codsupervisor3: number; + + @Column({ name: 'BAIXAESTCLI' }) + baixaestcli: string; + + @Column({ name: 'CODCLICONSIGNACAO' }) + codcliconsignacao: number; + + @Column({ name: 'OBSENTREGA4' }) + obsentrega4: string; + + @Column({ name: 'PRAZOADICIONAL' }) + prazoadicional: number; + + @Column({ name: 'VLFRETENF' }) + vlfretenf: number; + + @Column({ name: 'NUMEMPENHO' }) + numempenho: string; + + @Column({ name: 'NUMPROCESSO' }) + numprocesso: string; + + @Column({ name: 'NUMFONTERECURSO' }) + numfonterecurso: string; + + @Column({ name: 'BAIXAESTLOJA' }) + baixaestloja: string; + + @Column({ name: 'DTVENC1' }) + dtvenc1: Date; + + @Column({ name: 'DTVENC2' }) + dtvenc2: Date; + + @Column({ name: 'DTVENC3' }) + dtvenc3: Date; + + @Column({ name: 'PRAZOPONDERADO' }) + prazoponderado: string; + + @Column({ name: 'DTABERTURAPEDPALM' }) + dtaberturapedpalm: Date; + + @Column({ name: 'DTFECHAMENTOPEDPALM' }) + dtfechamentopedpalm: Date; + + @Column({ name: 'CODCONDICAOVENDA' }) + codcondicaovenda: number; + + @Column({ name: 'EANCOMPRADOR' }) + eancomprador: number; + + @Column({ name: 'EANLOCALENTREGA' }) + eanlocalentrega: number; + + @Column({ name: 'NUMPEDBNF' }) + numpedbnf: number; + + @Column({ name: 'DTAGENDAENTREGA' }) + dtagendaentrega: Date; + + @Column({ name: 'NUMPEDECF' }) + numpedecf: number; + + @Column({ name: 'CODATENDIMENTO' }) + codatendimento: number; + + @Column({ name: 'ARQUIVO' }) + arquivo: string; + + @Column({ name: 'LAYOUTXML' }) + layoutxml: string; + + @Column({ name: 'DTIMPORTACAO' }) + dtimportacao: Date; + + @Column({ name: 'CODNAOATENDIMENTO' }) + codnaoatendimento: number; + + @Column({ name: 'OBSINTEGRACAO1' }) + obsintegracao1: string; + + @Column({ name: 'OBSINTEGRACAO2' }) + obsintegracao2: string; + + @Column({ name: 'EXPORTADO' }) + exportado: string; + + @Column({ name: 'NUMPEDWEB' }) + numpedweb: number; + + @Column({ name: 'COBRANCATENDENCIA' }) + cobrancatendencia: number; + + @Column({ name: 'CODAUTORIZACAOTEF' }) + codautorizacaotef: number; + + @Column({ name: 'NSUTEF' }) + nsutef: string; + + @Column({ name: 'CODADMCARTAO' }) + codadmcartao: string; + + @Column({ name: 'TRANSACAO' }) + transacao: number; + + @Column({ name: 'VLDESCONTOFINANCEIRO' }) + vldescontofinanceiro: number; + + @Column({ name: 'INTEGRADORA' }) + integradora: number; + + @Column({ name: 'IDCOB' }) + idcob: number; + + @Column({ name: 'POSICAO' }) + posicao: string; + + @Column({ name: 'VALIDARNIVELVENDA' }) + validarnivelvenda: string; + + @Column({ name: 'VLTROCO' }) + vltroco: number; + + @Column({ name: 'CODTRANSP' }) + codtransp: number; + + @Column({ name: 'CODAUTORIZACAOTEFWEB' }) + codautorizacaotefweb: string; + + @Column({ name: 'VLDESCONTOCUPOM' }) + vldescontocupom: number; + + @Column({ name: 'NUMPEDTV1' }) + numpedtv1: number; + + @Column({ name: 'CODRETORNO' }) + codretorno: number; + + @Column({ name: 'AGRUPAMENTO' }) + agrupamento: string; + + @Column({ name: 'TURNOENTREGA' }) + turnoentrega: string; + + @Column({ name: 'VLENTRADA' }) + vlentrada: number; + + @Column({ name: 'CODENDENTCLI' }) + codendentcli: number; + + @Column({ name: 'CODCLIRECEBEDOR' }) + codclirecebedor: number; + + @Column({ name: 'NUMREGIAOBROKER' }) + numregiaobroker: number; + + @Column({ name: 'CODCLITV8' }) + codclitv8: number; + + @Column({ name: 'CODENDENT' }) + codendent: number; + + @Column({ name: 'PEDIDOPAGOECOMMERCE' }) + pedidopagoecommerce: string; + + @Column({ name: 'CODRETORNOS' }) + codretornos: string; + + @Column({ name: 'CUPOMDESCONTO' }) + cupomdesconto: string; + + @Column({ name: 'UIDREGISTRO' }) + uidregistro: number; + + @Column({ name: 'IDPARCEIRO' }) + idparceiro: string; + + @Column({ name: 'ASSINATURA' }) + assinatura: string; + + @Column({ name: 'DTHORA_NOTIFICA_SITE' }) + dthora_notifica_site: Date; + + @Column({ name: 'DTINCLUSAO' }) + dtinclusao: Date; + + @Column({ name: 'CODPLPAG2' }) + codplpag2: number; + + @Column({ name: 'CODCOB2' }) + codcob2: string; + + @Column({ name: 'NOME_CLIENTE' }) + nome_cliente: string; + + @Column({ name: 'OBSFRETE' }) + obsfrete: string; + + @Column({ name: 'CODFILIALPRINC' }) + codfilialprinc: string; + + @Column({ name: 'VLTOTAL' }) + vltotal: number; + + @Column({ name: 'SERVICOENTREGACODIGO' }) + servicoentregacodigo: number; + + @Column({ name: 'TRANSPORTADORAFRETE' }) + transportadorafrete: number; + + @Column({ name: 'PAGAMENTOAPROVADOCIASHOP' }) + pagamentoaprovadociashop: string; + + @Column({ name: 'ESC_VLOUTRASDESPWEB' }) + esc_vloutrasdespweb: number; + + @Column({ name: 'ESC_AJUSTARFINANCEIRO' }) + esc_ajustarfinanceiro: string; + + @Column({ name: 'ESC_OBTERNSU' }) + esc_obternsu: string; + + @Column({ name: 'ESCPRAZOENTREGA' }) + escprazoentrega: number; + + @Column({ name: 'NUMPEDMKTPLACE' }) + numpedmktplace: string; + + @Column({ name: 'ESC_CODTRANSPINTELIPOST' }) + esc_codtranspintelipost: number; + + @Column({ name: 'USACORTECIASHOP' }) + usacorteciashop: string; + + @Column({ name: 'ESC_VENDADELIVERY' }) + esc_vendadelivery: string; + + @Column({ name: 'ESC_VERSAOVENDADELIVERY' }) + esc_versaovendadelivery: string; + + @Column({ name: 'ESC_CODCOBORIG' }) + esc_codcoborig: string; + + @Column({ name: 'ESC_PEDIDOENCOMENDA' }) + esc_pedidoencomenda: string; + + @Column({ name: 'IDREMESSAWEB' }) + idremessaweb: number; + + @Column({ name: 'ESC_VENDASERVICO' }) + esc_vendaservico: string; + + @Column({ name: 'ESC_TIPODOCUMENTO' }) + esc_tipodocumento: string; + + @Column({ name: 'ESC_TIPOENTREGA' }) + esc_tipoentrega: string; + + @Column({ name: 'ESC_DESTINOCREDITO' }) + esc_destinocredito: string; + + @Column({ name: 'ESC_TIPOVENDA' }) + esc_tipovenda: string; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcpedi.entity.ts b/src/domain/entity/tables/pcpedi.entity.ts new file mode 100644 index 0000000..fb0db49 --- /dev/null +++ b/src/domain/entity/tables/pcpedi.entity.ts @@ -0,0 +1,62 @@ +import { Entity, Column, PrimaryColumn, ManyToOne, JoinColumn } from "typeorm"; +import { Pcpedc } from "./pcpedc.entity"; + +@Entity('PCPEDI') +export class Pcpedi { + + @PrimaryColumn({ name: 'NUMPED' }) + numped: number; + + @PrimaryColumn({ name: 'CODPROD' }) + codprod: number; + + @PrimaryColumn({ name: 'NUMSEQ' }) + numseq: number; + + @Column({ name: 'DATA' }) + data: Date; + + @Column({ name: 'CODCLI' }) + codcli: number; + + @Column({ name: 'CODUSUR' }) + codusur: number; + + @Column({ name: 'QT' }) + qt: number; + + @Column({ name: 'PVENDA' }) + pvenda: number; + + @Column({ name: 'PTABELA' }) + ptabela: number; + + @Column({ name: 'NUMCAR' }) + numcar: number; + + @Column({ name: 'POSICAO' }) + posicao: string; + + @Column({ name: 'ST' }) + st: number; + + @Column({ name: 'PERDESC' }) + perdesc: number; + + @Column({ name: 'TIPOPESO' }) + tipopeso: string; + + @Column({ name: 'CODFILIALRETIRA' }) + codfilialretira: string; + + @Column({ name: 'QTEMBALAGEM' }) + qtembalagem: number; + + @Column({ name: 'CODAUXILIAR' }) + codauxiliar: number; + + @ManyToOne(type => Pcpedc, pcpedc => pcpedc.itens) + @JoinColumn({ name: 'NUMPED' }) + pcpedc: Pcpedc; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcpeditemp.entity.ts b/src/domain/entity/tables/pcpeditemp.entity.ts new file mode 100644 index 0000000..83dfd1a --- /dev/null +++ b/src/domain/entity/tables/pcpeditemp.entity.ts @@ -0,0 +1,170 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('PCPEDITEMP') +export class Pcpeditemp { + +@Column({ name: 'TIPOINTEGRACAO' }) +tipointegracao: string; + +@Column({ name: 'OBSERVACAO_PC' }) +observacao_pc: string; + +@Column({ name: 'NUMPEDCLI' }) +numpedcli: string; + +@PrimaryColumn({ name: 'NUMPEDRCA' }) +numpedrca: number; + +@Column({ name: 'CODCLI' }) +codcli: number; + +@Column({ name: 'CODUSUR' }) +codusur: number; + +@Column({ name: 'DATA' }) +data: Date; + +@PrimaryColumn({ name: 'CODPROD' }) +codprod: number; + +@Column({ name: 'QT' }) +qt: number; + +@Column({ name: 'QT_FATURADA' }) +qt_faturada: number; + +@Column({ name: 'PVENDA' }) +pvenda: number; + +@Column({ name: 'PTABELA' }) +ptabela: number; + +@Column({ name: 'PERDESC' }) +perdesc: number; + +@PrimaryColumn({ name: 'NUMSEQ' }) +numseq: number; + +@Column({ name: 'CODAUXILIAR' }) +codauxiliar: number; + +@Column({ name: 'CODCERTIFIC' }) +codcertific: number; + +@Column({ name: 'CODFILIALRETIRA' }) +codfilialretira: string; + +@Column({ name: 'NUMLOTE' }) +numlote: string; + +@Column({ name: 'COMPLEMENTO' }) +complemento: string; + +@Column({ name: 'CODPLPAG' }) +codplpag: number; + +@Column({ name: 'CODPROMOCAO' }) +codpromocao: string; + +@Column({ name: 'PRAZOMEDIO' }) +prazomedio: number; + +@Column({ name: 'LOCALIZACAO' }) +localizacao: string; + +@Column({ name: 'PBONIFIC' }) +pbonific: number; + +@Column({ name: 'CODDEGUSTACAO' }) +coddegustacao: number; + +@Column({ name: 'PESOBRUTO' }) +pesobruto: number; + +@Column({ name: 'EANCODPROD' }) +eancodprod: number; + +@Column({ name: 'CODNAOATENDIMENTO' }) +codnaoatendimento: number; + +@Column({ name: 'OBSINTEGRACAO1' }) +obsintegracao1: string; + +@Column({ name: 'OBSINTEGRACAO2' }) +obsintegracao2: string; + +@Column({ name: 'NUMPEDWEB' }) +numpedweb: number; + +@Column({ name: 'TRANSACAO' }) +transacao: number; + +@Column({ name: 'IDVENDA' }) +idvenda: number; + +@Column({ name: 'INTEGRADORA' }) +integradora: number; + +@Column({ name: 'CODRETORNO' }) +codretorno: number; + +@Column({ name: 'COMISSAOATIM' }) +comissaoatim: number; + +@Column({ name: 'TIPOENTREGA' }) +tipoentrega: string; + +@Column({ name: 'CODRETORNOS' }) +codretornos: string; + +@Column({ name: 'DTINCLUSAO' }) +dtinclusao: Date; + +@Column({ name: 'CODPRODCESTA' }) +codprodcesta: number; + +@Column({ name: 'BONIFIC' }) +bonific: string; + +@Column({ name: 'DTIMP' }) +dtimp: Date; + +@Column({ name: 'PBASERCA' }) +pbaserca: number; + +@Column({ name: 'VLFRETE' }) +vlfrete: number; + +@Column({ name: 'FATORCONVERSAO' }) +fatorconversao: number; + +@Column({ name: 'IDKITPRODUTO' }) +idkitproduto: string; + +@Column({ name: 'MOVIMENTACONTACORRENTERCA' }) +movimentacontacorrenterca: string; + +@Column({ name: 'PORIGINAL' }) +poriginal: number; + +@Column({ name: 'ESC_EMBALAGEMPRESENTE' }) +esc_embalagempresente: string; + +@Column({ name: 'QTUNITEMB' }) +qtunitemb: number; + +@Column({ name: 'IDREMESSAWEB' }) +idremessaweb: number; + +@Column({ name: 'CODFILIAL' }) +codfilial: string; + +@Column({ name: 'CODCLIPARTILHA' }) +codclipartilha: number; + +@Column({name: 'RETIRAPOSTERIOR_IMEDIATA'}) +rp_imediata: string; + +} + + diff --git a/src/domain/entity/tables/pcplpag.entity.ts b/src/domain/entity/tables/pcplpag.entity.ts new file mode 100644 index 0000000..a725184 --- /dev/null +++ b/src/domain/entity/tables/pcplpag.entity.ts @@ -0,0 +1,211 @@ +import { Column, Entity, JoinColumn, OneToMany, OneToOne, PrimaryColumn } from "typeorm"; +import { Pcpedc } from "./pcpedc.entity"; + +@Entity('PCPLPAG') +export class Pcplpag { + @PrimaryColumn({ name: 'CODPLPAG' }) + codplpag: number; + + @Column({ name: 'DESCRICAO' }) + descricao: string; + + @Column({ name: 'NUMDIAS' }) + numdias: number; + + @Column({ name: 'TIPOPRAZO' }) + tipoprazo: string; + + @Column({ name: 'PRAZO1' }) + prazo1: number; + + @Column({ name: 'PRAZO2' }) + prazo2: number; + + @Column({ name: 'PRAZO3' }) + prazo3: number; + + @Column({ name: 'DTVENC1' }) + dtvenc1: Date; + + @Column({ name: 'DTVENC2' }) + dtvenc2: Date; + + @Column({ name: 'DTVENC3' }) + dtvenc3: Date; + + @Column({ name: 'NUMPR' }) + numpr: number; + + @Column({ name: 'TIPOVENDA' }) + tipovenda: string; + + @Column({ name: 'PERTXFIM' }) + pertxfim: number; + + @Column({ name: 'OBS' }) + obs: string; + + @Column({ name: 'OFERTA' }) + oferta: string; + + @Column({ name: 'PRAZO4' }) + prazo4: number; + + @Column({ name: 'PRAZO5' }) + prazo5: number; + + @Column({ name: 'PRAZO6' }) + prazo6: number; + + @Column({ name: 'PRAZO7' }) + prazo7: number; + + @Column({ name: 'PRAZO8' }) + prazo8: number; + + @Column({ name: 'PRAZO9' }) + prazo9: number; + + @Column({ name: 'PRAZO10' }) + prazo10: number; + + @Column({ name: 'PRAZO11' }) + prazo11: number; + + @Column({ name: 'PRAZO12' }) + prazo12: number; + + @Column({ name: 'VENDABK' }) + vendabk: string; + + @Column({ name: 'VLMINPEDIDO' }) + vlminpedido: number; + + @Column({ name: 'CODCOB' }) + codcob: string; + + @Column({ name: 'TIPOENTRADA' }) + tipoentrada: number; + + @Column({ name: 'NUMITENSMINIMO' }) + numitensminimo: number; + + @Column({ name: 'PERTXFIMPALM' }) + pertxfimpalm: number; + + @Column({ name: 'CODEQUIPE' }) + codequipe: number; + + @Column({ name: 'TIPORESTRICAO' }) + tiporestricao: string; + + @Column({ name: 'CODRESTRICAO' }) + codrestricao: number; + + @Column({ name: 'ENVIAPLANOFV' }) + enviaplanofv: string; + + @Column({ name: 'PRAZOPONDERADO' }) + prazoponderado: string; + + @Column({ name: 'USAPLPAGAUTOSERVICO' }) + usaplpagautoservico: string; + + @Column({ name: 'USADESCLINHAPROD' }) + usadesclinhaprod: string; + + @Column({ name: 'ENTRADA' }) + entrada: string; + + @Column({ name: 'FORMAPARCELAMENTO' }) + formaparcelamento: string; + + @Column({ name: 'NUMPARCELAS' }) + numparcelas: number; + + @Column({ name: 'NUMDIASCARENCIA' }) + numdiascarencia: number; + + @Column({ name: 'NUMDIASCARTAO' }) + numdiascartao: number; + + @Column({ name: 'CODFILIAL' }) + codfilial: string; + + @Column({ name: 'USAPRAZOADICIONALPCCLIENT' }) + usaprazoadicionalpcclient: string; + + @Column({ name: 'DESCRICAO2' }) + descricao2: string; + + @Column({ name: 'VLTXCARNE' }) + vltxcarne: number; + + @Column({ name: 'TXFATOR' }) + txfator: number; + + @Column({ name: 'USADESCFINANCEIRO' }) + usadescfinanceiro: string; + + @Column({ name: 'USAMULTIFILIAL' }) + usamultifilial: string; + + @Column({ name: 'NUMEROPARCELASDIAFIXO' }) + numeroparcelasdiafixo: number; + + @Column({ name: 'DIASCARENCIA' }) + diascarencia: number; + + @Column({ name: 'DIAFIXO' }) + diafixo: number; + + @Column({ name: 'STATUS' }) + status: string; + + @Column({ name: 'CODFUNC' }) + codfunc: number; + + @Column({ name: 'NUMDIASATRASOINI' }) + numdiasatrasoini: number; + + @Column({ name: 'NUMDIASATRASOFIM' }) + numdiasatrasofim: number; + + @Column({ name: 'DESCENTLIMCREDCLI' }) + descentlimcredcli: string; + + @Column({ name: 'VLMINPARCELA' }) + vlminparcela: number; + + @Column({ name: 'DIASMINPARCELA' }) + diasminparcela: number; + + @Column({ name: 'DIASMAXPARCELA' }) + diasmaxparcela: number; + + @Column({ name: 'NAOCOBRARTXBOLETO' }) + naocobrartxboleto: string; + + @Column({ name: 'USASUPPLICARD' }) + usasupplicard: string; + + @Column({ name: 'CONDFINANC' }) + condfinanc: string; + + @Column({ name: 'DTMXSALTER' }) + dtmxsalter: Date; + + @Column({ name: 'FATOR_CREDIARIO' }) + fator_crediario: number; + + @Column({ name: 'TIPOPLANO' }) + tipoplano: string; + + @Column({ name: 'CODSUPPLICARD' }) + codsupplicard: string; + + @OneToMany(() => Pcpedc, pcpedc => pcpedc.pcplpag) + @JoinColumn({ name: 'CODPLPAG' }) + pedidos: Pcpedc[]; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcpraca.entity.ts b/src/domain/entity/tables/pcpraca.entity.ts new file mode 100644 index 0000000..9c0e749 --- /dev/null +++ b/src/domain/entity/tables/pcpraca.entity.ts @@ -0,0 +1,10 @@ +import { Entity, PrimaryColumn } from "typeorm"; + +@Entity('PCPRACA') +export class Pcpraca { + @PrimaryColumn({name: 'CODPRACA'}) + codpraca: number; + + @PrimaryColumn({name: 'PRACA'}) + praca: string; +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcprodut.entity.ts b/src/domain/entity/tables/pcprodut.entity.ts new file mode 100644 index 0000000..27c379a --- /dev/null +++ b/src/domain/entity/tables/pcprodut.entity.ts @@ -0,0 +1,30 @@ +import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm"; +import { Brand } from "./pcmarca.entity"; + +@Entity('PCPRODUT') +export class Product { + @PrimaryColumn({name: 'CODPROD'}) + id: number; + @Column({name: 'DESCRICAO'}) + smallDescription: string; + @Column({name: 'PESOBRUTO'}) + peso: number; + @Column({name: 'PESOLIQ'}) + pesoLiquido: number; + @Column({name: 'ALTURAM3'}) + altura: number; + @Column({name: 'COMPRIMENTOM3'}) + comprimento: number; + @Column({name: 'LARGURAM3'}) + largura: number; + @Column({name: 'CODAUXILIAR'}) + ean: number; + @Column({name: 'CODMARCA', select: false}) + idBrand: number; + @ManyToOne(() => Brand, brand => brand.products) + @JoinColumn({ + name: "CODMARCA", + referencedColumnName: "id" + }) + brand: Brand; +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcsecao.entity.ts b/src/domain/entity/tables/pcsecao.entity.ts new file mode 100644 index 0000000..ab1b37f --- /dev/null +++ b/src/domain/entity/tables/pcsecao.entity.ts @@ -0,0 +1,31 @@ +import { Pcdepto } from './pcdepto.entity'; +import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryColumn } from "typeorm"; +import { Esttipoproduto } from './esttipoproduto.entity'; +import { Pccategoria } from './pccategoria.entity'; + +@Entity("PCSECAO") +export class Pcsecao { + + @PrimaryColumn({name: "CODSEC"}) + codigoSecao: number; + + @Column({name: "CODEPTO"}) + codigoDepartamento: number; + + @Column({name: "DESCRICAO"}) + descricaoSecao: string; + + @Column({name: "TITULOECOMMERCE"}) + nomeEcommerce: string; + + @ManyToOne(() => Pcdepto, departamento => departamento.secao) + @JoinColumn({ name: 'CODEPTO' }) + departamento: Pcdepto; + + @OneToMany(() => Pccategoria, categoria => categoria.secao) + categorias: Pccategoria[]; + + @OneToMany(() => Esttipoproduto, tipoProduto => tipoProduto.secao) + tiposProduto: Esttipoproduto[]; + +} \ No newline at end of file diff --git a/src/domain/entity/tables/pctabtrib.entity.ts b/src/domain/entity/tables/pctabtrib.entity.ts new file mode 100644 index 0000000..bbe83d6 --- /dev/null +++ b/src/domain/entity/tables/pctabtrib.entity.ts @@ -0,0 +1,17 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('PCTABTRIB') +export class Pctabtrib { + + @PrimaryColumn({name: 'CODPROD'}) + codprod: number; + + @PrimaryColumn({name: 'CODFILIALNF'}) + codfilialnf: string; + + @PrimaryColumn({name: 'UFDESTINO'}) + ufdestino: string; + + @Column({name: 'CODST'}) + codst: number; +} \ No newline at end of file diff --git a/src/domain/entity/tables/pcusuari.entity.ts b/src/domain/entity/tables/pcusuari.entity.ts new file mode 100644 index 0000000..1ca19ac --- /dev/null +++ b/src/domain/entity/tables/pcusuari.entity.ts @@ -0,0 +1,19 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('PCUSUARI') +export class Pcusuari { + @PrimaryColumn({name: 'CODUSUR'}) + codusur: number; + + @Column({name: 'NOME'}) + nome: string; + + @Column({name: 'CODSUPERVISOR'}) + codsupervisor: number; + + @Column({name: 'PROXNUMPEDWEB'}) + proxnumpedweb: number; + + @Column({name: 'PROXNUMPED'}) + proxnumped: number; +} \ No newline at end of file diff --git a/src/domain/entity/views/esvanalisevendarca.entity.ts b/src/domain/entity/views/esvanalisevendarca.entity.ts new file mode 100644 index 0000000..d3c36b1 --- /dev/null +++ b/src/domain/entity/views/esvanalisevendarca.entity.ts @@ -0,0 +1,53 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('ESVANALISEVENDARCA') +export class Esvanalisevendarca { + @PrimaryColumn({name: 'CODUSUR'}) + codigoVendedor: number; + + @Column({name: 'QTDE_ORCA_PENDENTES'}) + orcamentosPendentes: number; + + @Column({name: 'VLMETAMES'}) + valorMetaMes: number; + + @Column({name: 'VLVENDAMES'}) + valorVendaMes: number; + + @Column({name: 'VLCOMISSAO'}) + valorComissao: number; + + @Column({name: 'VLCOMISSAOMESANT'}) + valorComissaoMesAnt: number; + + @Column({name: 'VLMETAMESANT'}) + valorMetaMesAnt: number; + + @Column({name: 'VLVENDAMESANT'}) + valorVendaMesAnt: number; + + @Column({name: 'VLMETADIA'}) + valorMetaDia: number; + + @Column({name: 'VLVENDADIA'}) + valorVendaDia: number; + + @Column({name: 'VLMETADIAANT'}) + valorMetaDiaAnt: number; + + @Column({name: 'VLVENDADIAANT'}) + valorVendaDiaAnt: number; + + @Column({name: 'QTCLIENTES'}) + quantidadeClientes: number; + + @Column({name: 'QTCLIENTESMESANT'}) + quantidadeClientesMesAnt: number; + + @Column({name: 'QTNOTAS'}) + quantidadeNotas: number; + + @Column({name: 'QTNOTASMESANT'}) + quantidadeNotasMesAnt: number; + +} \ No newline at end of file diff --git a/src/domain/entity/views/esvcategoria.entity.ts b/src/domain/entity/views/esvcategoria.entity.ts new file mode 100644 index 0000000..a101906 --- /dev/null +++ b/src/domain/entity/views/esvcategoria.entity.ts @@ -0,0 +1,28 @@ +/* CODSEC, CODCATEGORIA, DESCRICAO, TITULOECOMMERCE, URL*/ + +import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm"; +import { Esvsecao } from "./esvsecao.entity"; + +@Entity("ESVCATEGORIA") +export class Esvcategoria { + + @PrimaryColumn({name: "CODSEC"}) + codigoSecao: number; + + @PrimaryColumn({name: "CODCATEGORIA"}) + codigoCategoria: number; + + @Column({name: "DESCRICAO"}) + descricaoCategoria: string; + + @Column({name: "TITULOECOMMERCE"}) + tituloEcommerce: string; + + @Column({name: "URL"}) + url: string; + + @ManyToOne(() => Esvsecao, secao => secao.categorias) + @JoinColumn({ name: 'CODSEC' }) + secao: Esvsecao; + + } \ No newline at end of file diff --git a/src/domain/entity/views/esvdepartamento.entity.ts b/src/domain/entity/views/esvdepartamento.entity.ts new file mode 100644 index 0000000..4bd89aa --- /dev/null +++ b/src/domain/entity/views/esvdepartamento.entity.ts @@ -0,0 +1,20 @@ +import { Column, Entity, OneToMany, PrimaryColumn } from "typeorm"; +import { Esvsecao } from './esvsecao.entity'; + +@Entity("ESVDEPARTAMENTO") +export class Esvdepartamento { + @PrimaryColumn({name: "CODEPTO"}) + codigoDepartamento: number; + + @Column({name: "DESCRICAO"}) + descricaoDepartamento: string; + + @Column({name: "TITULOECOMMERCE"}) + tituloEcommerce: string; + + @Column({name: "URL"}) + url: string; + + @OneToMany(() => Esvsecao, secao => secao.departamento) + secoes: Esvsecao[]; +} \ No newline at end of file diff --git a/src/domain/entity/views/esventregaslojascliente.entity.ts b/src/domain/entity/views/esventregaslojascliente.entity.ts new file mode 100644 index 0000000..67eb74c --- /dev/null +++ b/src/domain/entity/views/esventregaslojascliente.entity.ts @@ -0,0 +1,46 @@ +import { Entity, Column, PrimaryColumn } from "typeorm"; + + +@Entity("ESVRETIRALOJASCLIENTE") +export class Esvretiralojascliente { + + @PrimaryColumn({name: "NUMPED"}) + numped: number; + + @Column({name: "CODFILIAL"}) + codfilial: string; + + @Column({name: "NUMNOTA"}) + numnota: number; + + @Column({name: "DTFAT"}) + dtfat: Date; + + @Column({name: "DATAPEDIDO"}) + datapedido: Date; + + @Column({name: "CODCLI"}) + codcli: number; + + @Column({name: "CLIENTE"}) + cliente: string; + + @Column({name: "CODFILIALRETIRA"}) + codfilialretira: string; + + @Column({name: "RAZAOSOCIAL"}) + razaosocial: string; + + @Column({name: "MATRICULA"}) + matricula: number; + + @Column({name: "EMAIL"}) + email: string; + + @Column({name: "QTITENS"}) + qtitens: number; + + @Column({name: "QUANTIDADE"}) + quantidade: number; + +} \ No newline at end of file diff --git a/src/domain/entity/views/esventregasporcliente.entity.ts b/src/domain/entity/views/esventregasporcliente.entity.ts new file mode 100644 index 0000000..597003c --- /dev/null +++ b/src/domain/entity/views/esventregasporcliente.entity.ts @@ -0,0 +1,52 @@ +import { Entity, Column, PrimaryColumn } from "typeorm"; + +@Entity("ESVENTREGASPORCLIENTE") +export class Esventregasporcliente { + + @PrimaryColumn({ name:'RID'}) + rid: string; + + @Column({ name:'CODCLI'}) + codigoCliente: number; + + @Column({ name:'CLIENTE'}) + nomeCliente: string; + + @Column({ name:'CGCENT'}) + cnpj_cpf: string; + + @Column({ name:'EMAIL'}) + email: string; + + @Column({ name:'CODENDERECO'}) + codigoEndereco: number; + + @Column({ name:'ENDERECO'}) + endereco: string; + + @Column({ name:'NUMERO'}) + numero: string; + + @Column({ name:'BAIRRO'}) + bairro: string; + + @Column({ name:'COMPLEMENTO'}) + complemento: string; + + @Column({ name:'CIDADE'}) + cidade: string; + + @Column({ name:'ESTADO'}) + estado: string; + + @Column({ name:'CEP'}) + cep: string; + + @Column({ name:'QTPEDIDOS'}) + quantidadePedidos: number; + + @Column({ name:'QTLOJAS'}) + quantidadelojas: number; + + +} \ No newline at end of file diff --git a/src/domain/entity/views/esvestoquevenda.entity.ts b/src/domain/entity/views/esvestoquevenda.entity.ts new file mode 100644 index 0000000..c481a5b --- /dev/null +++ b/src/domain/entity/views/esvestoquevenda.entity.ts @@ -0,0 +1,32 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + + +@Entity('ESVESTOQUEVENDA') +export class Stock { + @PrimaryColumn({name: 'CODFILIAL'}) + store: number; + + @PrimaryColumn({name: 'CODPROD'}) + idProduct: number; + + @PrimaryColumn({name: 'PERTENCE'}) + work: boolean; + + @Column({name: 'QUANTIDADEESTOQUEDISPONIVEL'}) + quantity: number; + + @Column({name: 'QUANTIDADEBLOQUEADA'}) + blocked: number; + + @Column({name: 'QUANTIDADEAVARIA'}) + breakdown: number; + + @Column({name: 'QUANTIDADETRANSITO'}) + transfer: number; + + /* @ManyToOne(type => SalesProduct, product => product.stock) + @JoinColumn({ name: 'CODPROD' }) + product: SalesProduct;*/ + + +} \ No newline at end of file diff --git a/src/domain/entity/views/esvorcamento_pedido.entity.ts b/src/domain/entity/views/esvorcamento_pedido.entity.ts new file mode 100644 index 0000000..f0debc4 --- /dev/null +++ b/src/domain/entity/views/esvorcamento_pedido.entity.ts @@ -0,0 +1,39 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('ESVORCAMENTOPEDIDO') +export class EsvOrcamentoPedido { + + @PrimaryColumn({name: 'TIPO'}) + tipo: string; + + @Column({name: 'NUMERO'}) + numero: number; + + @Column({name: 'CODFILIAL'}) + codfilial: string; + + @Column({name: 'DATA'}) + data: Date; + + @Column({name: 'CODUSUR'}) + codusur: number; + + @Column({name: 'NOME'}) + nome: string; + + @Column({name: 'CODCLI'}) + codcli: number; + + @Column({name: 'CLIENTE'}) + cliente: number; + + @Column({name: 'POSICAO'}) + posicao: string; + + @Column({name: 'VLTOTAL'}) + vltotal: number; + + @Column({name: 'VLFRETE'}) + vlfrete: number; + +} \ No newline at end of file diff --git a/src/domain/entity/views/esvparcelamentovenda.entity.ts b/src/domain/entity/views/esvparcelamentovenda.entity.ts new file mode 100644 index 0000000..30bbc26 --- /dev/null +++ b/src/domain/entity/views/esvparcelamentovenda.entity.ts @@ -0,0 +1,23 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('ESVPARCELAMENTOVENDA') +export class Esvparcelamentovenda { + @PrimaryColumn({name: 'CODFILIAL'}) + store: string; + + @PrimaryColumn({name: 'CODPROD'}) + productId: number; + + @Column({name: 'NUMREGIAO'}) + priceTable: number; + + @Column({name: 'PARCELAS'}) + installments: number; + + @Column({name: 'PRECOVENDA'}) + salePrice: number; + + @Column({name: 'VALORPARCELA'}) + installmentValue: number; + +} \ No newline at end of file diff --git a/src/domain/entity/views/esvprecovenda.entity.ts b/src/domain/entity/views/esvprecovenda.entity.ts new file mode 100644 index 0000000..41bb354 --- /dev/null +++ b/src/domain/entity/views/esvprecovenda.entity.ts @@ -0,0 +1,25 @@ +import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm"; +import { SalesProduct } from "./esvprodutosvenda.entity"; + +@Entity('ESVPRECOVENDA') +export class Price { + @PrimaryColumn({name: 'NUMEROREGIAO'}) + priceTable: number; + + @PrimaryColumn({name: 'CODPROD'}) + idProduct: number; + + @Column({name: 'PRECOVENDA'}) + listPrice: number; + + @Column({name: 'PRECOOFERTA'}) + salePrice: number; + + @Column({name: 'PERCDESCONTO'}) + percentOff: number; + + /*@ManyToOne(type => SalesProduct, product => product.price) + @JoinColumn({ name: 'CODPROD' }) + product: SalesProduct;*/ + +} \ No newline at end of file diff --git a/src/domain/entity/views/esvprodutospromocao.entity.ts b/src/domain/entity/views/esvprodutospromocao.entity.ts new file mode 100644 index 0000000..30ee792 --- /dev/null +++ b/src/domain/entity/views/esvprodutospromocao.entity.ts @@ -0,0 +1,84 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('ESVPRODUTOSPROMOCAO') +export class SalesPromotion { + + @PrimaryColumn({name: 'CODPROD'}) + idProduct: number; + + @Column({name: 'SEQ'}) + seq: number; + + @Column({name: 'DESCRICAO'}) + smallDescription: string; + + @Column({name: 'NOMEECOMMERCE'}) + title: string; + + @Column({name: 'CODFAB'}) + idProvider: string; + + @Column({name: 'CODAUXILIAR'}) + ean: string; + + @Column({name: 'TIPOPRODUTO'}) + typeProduct: string; + + @Column({name: 'DADOSTECNICOS'}) + technicalData: string; + + @Column({name: 'INFORMACOESTECNICAS'}) + description: string; + + @Column({name: 'URLIMAGEM'}) + urlImage: string; + + @Column({name: 'NOMEMARCA'}) + brand: string; + + @Column({name: 'NOMEDEPARTAMENTO'}) + department: string; + + @Column({name: 'NOMESECAO'}) + section: string; + + @Column({name: 'NOMECATEGORIA'}) + category: string; + + @Column({name: 'NOMEFORNECEDOR'}) + supplier: string; + + @Column({name: 'CODIGOFILIAL'}) + store: string; + + @Column({name: 'CLASSEVENDA'}) + saleAbc: string; + + @Column({name: 'CLASSEESTOQUE'}) + stockAbc: string; + + @Column({name: 'FORALINHA'}) + outLine: string; + + @Column({name: 'PRECOVENDA'}) + listPrice: number; + + @Column({name: 'PRECOPROMOCIONAL'}) + salePrice: number; + + @Column({name: 'PERCENTUALDESCONTO'}) + offPercent: number; + + @Column({name: 'QTESTOQUE_DISPONIVEL'}) + stock: number; + + @Column({name: 'QTCAIXAS'}) + boxStock: number; + + @Column({name: 'MULTIPLO'}) + mutiple: number; + + @Column({name: 'UNIDADE'}) + unity: number; + +} \ No newline at end of file diff --git a/src/domain/entity/views/esvprodutosvenda.entity.ts b/src/domain/entity/views/esvprodutosvenda.entity.ts new file mode 100644 index 0000000..125f0ac --- /dev/null +++ b/src/domain/entity/views/esvprodutosvenda.entity.ts @@ -0,0 +1,100 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('ESVLISTAPRODUTOS') +export class SalesProduct { + + @PrimaryColumn({name: 'CODPROD'}) + idProduct: number; + + @Column({name: 'SEQ'}) + seq: number; + + @Column({name: 'DESCRICAO'}) + smallDescription: string; + + @Column({name: 'NOMEECOMMERCE'}) + title: string; + + @Column({name: 'CODFAB'}) + idProvider: string; + + @Column({name: 'CODAUXILIAR'}) + ean: string; + + @Column({name: 'TIPOPRODUTO'}) + productType: string; + + @Column({name: 'DADOSTECNICOS'}) + technicalData: string; + + @Column({name: 'INFORMACOESTECNICAS'}) + description: string; + + @Column({name: 'URLIMAGEM'}) + urlImage: string; + + @Column({name: 'NOMEMARCA'}) + brand: string; + + @Column({name: 'NOMEDEPARTAMENTO'}) + department: string; + + @Column({name: 'NOMESECAO'}) + section: string; + + @Column({name: 'NOMECATEGORIA'}) + category: string; + + @Column({name: 'NOMEFORNECEDOR'}) + supplier: string; + + @Column({name: 'CODIGOFILIAL'}) + store: string; + + @Column({name: 'CLASSEVENDA'}) + saleAbc: string; + + @Column({name: 'CLASSEESTOQUE'}) + stockAbc: string; + + @Column({name: 'FORALINHA'}) + outLine: string; + + @Column({name: 'PRECOVENDA'}) + listPrice: number; + + @Column({name: 'PRECOPROMOCIONAL'}) + salePrice: number; + + @Column({name: 'PRECOPROMOCIONAL_AVISTA'}) + salePromotion_cash: number; + + @Column({name: 'PERCENTUALDESCONTO'}) + offPercent: number; + + @Column({name: 'QTESTOQUE_DISPONIVEL'}) + stock: number; + + @Column({name: 'QTCAIXAS'}) + boxStock: number; + + @Column({name: 'MULTIPLO'}) + mutiple: number; + + @Column({name: 'UNIDADE'}) + unity: number; + + @Column({name: 'URLDEPARTAMENTO'}) + urlDepartment: string; + + @Column({name: 'URLSECAO'}) + urlSection: string; + + @Column({name: 'PRODUTO_OPORTUNIDADE'}) + opportunity: string; + + @Column({name: 'PRODUTO_EM_CAMPANHA'}) + campaign: string; + + images: string[]; +} \ No newline at end of file diff --git a/src/domain/entity/views/esvretiralojas.entity.ts b/src/domain/entity/views/esvretiralojas.entity.ts new file mode 100644 index 0000000..ffb75df --- /dev/null +++ b/src/domain/entity/views/esvretiralojas.entity.ts @@ -0,0 +1,19 @@ +import { Entity, PrimaryColumn, Column } from "typeorm"; + +@Entity("ESVRETIRALOJAS") +export class EsvRetiraLojas { + @PrimaryColumn({name: "CODIGO"}) + codigoLoja: string; + + @Column({name:"RAZAOSOCIAL"}) + razaoSocial: string; + + @Column({name:"EMAIL"}) + email: string; + + @Column({name:"MATRICULA"}) + matricula: number; + + @Column({name:"QUANTIDADEPEDIDOS"}) + quantidadePedidos: number; +} \ No newline at end of file diff --git a/src/domain/entity/views/esvsecao.entity.ts b/src/domain/entity/views/esvsecao.entity.ts new file mode 100644 index 0000000..8e82f9e --- /dev/null +++ b/src/domain/entity/views/esvsecao.entity.ts @@ -0,0 +1,30 @@ +import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryColumn } from "typeorm"; +import { Esvcategoria } from "./esvcategoria.entity"; +import { Esvdepartamento } from "./esvdepartamento.entity"; + +@Entity("ESVSECAO") +export class Esvsecao { + + @PrimaryColumn({name: "CODSEC"}) + codigoSecao: number; + + @Column({name: "CODEPTO"}) + codigoDepartamento: number; + + @Column({name: "DESCRICAO"}) + descricaoSecao: string; + + @Column({name: "TITULOECOMMERCE"}) + tituloEcommerce: string; + + @Column({name: "URL"}) + url: string; + + @ManyToOne(() => Esvdepartamento, departamento => departamento.secoes) + @JoinColumn({ name: 'CODEPTO' }) + departamento: Esvdepartamento; + + @OneToMany(() => Esvcategoria, categoria => categoria.secao) + categorias: Esvcategoria[]; + + } \ No newline at end of file diff --git a/src/domain/entity/views/esvsituacaopedido.entity.ts b/src/domain/entity/views/esvsituacaopedido.entity.ts new file mode 100644 index 0000000..338c3c0 --- /dev/null +++ b/src/domain/entity/views/esvsituacaopedido.entity.ts @@ -0,0 +1,20 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity('ESVSITUACAOPEDIDO') +export class Esvsituacaopedido { + @PrimaryColumn({name: 'NUMPED'}) + orderNumber: number; + + @Column({name: 'DATA'}) + createDate: Date; + + @Column({name: 'CODCLI'}) + customerId: number; + + @Column({name: 'DTENTREGA'}) + deliveryDate: Date; + + @Column({name: 'STATUS'}) + orderStatus: String; + +} \ No newline at end of file diff --git a/src/domain/models/address.model.ts b/src/domain/models/address.model.ts new file mode 100644 index 0000000..f6af54d --- /dev/null +++ b/src/domain/models/address.model.ts @@ -0,0 +1,27 @@ +export class Address { + idCustomer: number; + idAddress: number; + neighbourhood: string; + city: string; + state: string; + zipCode: string; + street: string; + complement: string; + numberAddress: string; + cityCode: number; + referencePoint: string; + note: string; + phone: number; + cellPhone: string; + ibgeCode: string; + placeId: number; + razaorecebedor: string; + fantasia: string; + ceprecebedor: string; + numregiao:number; + codpaisrecebedor: number; + emailRecebedor: string; + latitude: number; + longitude: number; + +} \ No newline at end of file diff --git a/src/domain/models/calculate-price-tintometrico.model.ts b/src/domain/models/calculate-price-tintometrico.model.ts new file mode 100644 index 0000000..164d766 --- /dev/null +++ b/src/domain/models/calculate-price-tintometrico.model.ts @@ -0,0 +1,11 @@ +export class CalculatePriceTintometrico { + constructor( + public storeId: string, + public productId: number, + public letter: string, + public line: string, + public can: number, + public color: string, + public price: number, + ){} +} \ No newline at end of file diff --git a/src/domain/models/cart-itens.model.ts b/src/domain/models/cart-itens.model.ts new file mode 100644 index 0000000..62776ef --- /dev/null +++ b/src/domain/models/cart-itens.model.ts @@ -0,0 +1,12 @@ +export class CartItensModel { + constructor( + public idProduct: number, + public ean: number, + public idStock: string, + public deliveryMethod: string, + public quantity: number, + public listPrice: number, + public salePrice: number, + public descriptionAux: string, + public environment: string) { } +} \ No newline at end of file diff --git a/src/domain/models/cart.model.ts b/src/domain/models/cart.model.ts new file mode 100644 index 0000000..0a8d628 --- /dev/null +++ b/src/domain/models/cart.model.ts @@ -0,0 +1,31 @@ +import { CartItensModel } from "./cart-itens.model"; + +export class Cart { + constructor( + public id: string, + public idCustomer: number, + public idAddress: number, + public saleStore: string, + public userId: number, + public idSeller: number, + public idProfessional: number, + public idPaymentPlan: number, + public idBilling: string, + public shippingValue: number, + public scheduleDelivery: boolean, + public shippingDate: Date, + public shippingPriority: string, + public idStorePlace: number, + public notation1: string, + public notation2: string, + public deliveryNote1: string, + public deliveryNote2: string, + public deliveryNote3: string, + public itens: CartItensModel[], + public preCustomerDocument: string, + public preCustomerName: string, + public preCustomerPhone: string, + public carrierId: number, + ) { } +} + \ No newline at end of file diff --git a/src/domain/models/cep.model.ts b/src/domain/models/cep.model.ts new file mode 100644 index 0000000..6d0964a --- /dev/null +++ b/src/domain/models/cep.model.ts @@ -0,0 +1,12 @@ +export interface Cep { + bairro: string; + codigo_ibge: string; + nome: string; + uf: string; + tipo: string; + complemento: string; + cep: string; + cidade: string; + logradouro: string; + status: string; +} diff --git a/src/domain/models/change-password.model.ts b/src/domain/models/change-password.model.ts new file mode 100644 index 0000000..f387732 --- /dev/null +++ b/src/domain/models/change-password.model.ts @@ -0,0 +1,4 @@ +export class ChangePasswordModel { + constructor(public password: string, + public newPassword: string,){} +} \ No newline at end of file diff --git a/src/domain/models/create-payment-partner.model.ts b/src/domain/models/create-payment-partner.model.ts new file mode 100644 index 0000000..6b50e22 --- /dev/null +++ b/src/domain/models/create-payment-partner.model.ts @@ -0,0 +1,7 @@ +export class CreatePaymentPartner { + public partnerId: number; + public month: string; + public year: string; + public dueDate: Date; + public userId: number; +} \ No newline at end of file diff --git a/src/domain/models/create-user.model.ts b/src/domain/models/create-user.model.ts new file mode 100644 index 0000000..b83a1f7 --- /dev/null +++ b/src/domain/models/create-user.model.ts @@ -0,0 +1,7 @@ +export class CreateUserModel { + constructor(public email: string, + public userName: string, + public password: string, + public registration: string, + public application: string) {} + } \ No newline at end of file diff --git a/src/domain/models/customer.model.ts b/src/domain/models/customer.model.ts new file mode 100644 index 0000000..1d5c544 --- /dev/null +++ b/src/domain/models/customer.model.ts @@ -0,0 +1,60 @@ +export class Customer { + constructor( + public customerId: number, + public company: string, + public name: string, + public cpfCnpj: string, + public gender: string, + public numberState: string, + public email: string, + public zipCode: string, + public address: string, + public addressNumber: string, + public complement: string, + public neighborhood: string, + public city: string, + public state: string, + public allowMessage: boolean, + public cellPhone: string, + public category: Category, + public subCategory: SubCategory, + public place: Place, + public sellerId: number, + public ibgeCode: string, + public birthdate: Date, + public ramo: Ramo, + public communicate?: string, + public idUser?: number, + public latitude?: number, + public longitude?: number, + ){} +} + +export class Category { + constructor( + public id: number, + public name: string, + ){} +} + +export class SubCategory { + constructor( + public id: number, + public categoryId: number, + public name: string, + ){} +} + +export class Place { + constructor( + public id: number, + public name: string, + ){} +} + +export class Ramo { + constructor( + public id: number, + public name: string, + ){} +} diff --git a/src/domain/models/delivery-order.model.ts b/src/domain/models/delivery-order.model.ts new file mode 100644 index 0000000..2dc7e53 --- /dev/null +++ b/src/domain/models/delivery-order.model.ts @@ -0,0 +1,12 @@ +export class DeliveryOrderModel { + constructor( + public numeroCarregamento: number, + public codigoCliente: number, + public dataEntrega: string, + public cpfRecebedor: string, + public nomeRecebedor: string, + public urlImagemProtocolo: string, + public latitude: number, + public longitude: number, + ){} +} \ No newline at end of file diff --git a/src/domain/models/dictionary.model.ts b/src/domain/models/dictionary.model.ts new file mode 100644 index 0000000..35c2619 --- /dev/null +++ b/src/domain/models/dictionary.model.ts @@ -0,0 +1,9 @@ +export class DictionaryModel { + + constructor( + public id: number, + public nick: string, + public word: string, + ) { + } +} \ No newline at end of file diff --git a/src/domain/models/filter-product.model.ts b/src/domain/models/filter-product.model.ts new file mode 100644 index 0000000..f3cb4e1 --- /dev/null +++ b/src/domain/models/filter-product.model.ts @@ -0,0 +1,15 @@ +export class FilterProduct { + brands: string[] = []; + urlCategory?: string; + text?: string; + promotion?: boolean; + campaign?: boolean; + offers?: boolean; + oportunity?: boolean; + markdown?: boolean; + onlyWithStock?: boolean; + storeStock?: string; + orderBy?: string; + percentOffMin?: number; + percentOffMax?: number; +} \ No newline at end of file diff --git a/src/domain/models/geolocation-cep.model.ts b/src/domain/models/geolocation-cep.model.ts new file mode 100644 index 0000000..bf34b57 --- /dev/null +++ b/src/domain/models/geolocation-cep.model.ts @@ -0,0 +1,10 @@ +export interface Location { + lat: number; + lon: number; +} + +export interface GeolocationCep { + postal_code: string; + location: Location; + status: boolean; +} \ No newline at end of file diff --git a/src/domain/models/google-geocode.model.ts b/src/domain/models/google-geocode.model.ts new file mode 100644 index 0000000..7bab7b5 --- /dev/null +++ b/src/domain/models/google-geocode.model.ts @@ -0,0 +1,29 @@ +export interface Extra { + googlePlaceId: string; + confidence: number; + premise?: any; + subpremise?: any; + neighborhood: string; + establishment?: any; +} + +export interface AdministrativeLevels { + level2long: string; + level2short: string; + level1long: string; + level1short: string; +} + +export interface GoogleGeocode { + formattedAddress: string; + latitude: number; + longitude: number; + extra: Extra; + administrativeLevels: AdministrativeLevels; + streetNumber: string; + streetName: string; + country: string; + countryCode: string; + zipcode: string; + provider: string; +} \ No newline at end of file diff --git a/src/domain/models/image-order.model.ts b/src/domain/models/image-order.model.ts new file mode 100644 index 0000000..013460e --- /dev/null +++ b/src/domain/models/image-order.model.ts @@ -0,0 +1,12 @@ +export class ImageOrderModel { + constructor( + public numeroPedido: number, + public numeroNota: number, + public numeroCarregamento: number, + public data: string, + public tipo: string, + public url: string, + public latitude: number, + public longitude: number, + ){} +} \ No newline at end of file diff --git a/src/domain/models/index-action.model.ts b/src/domain/models/index-action.model.ts new file mode 100644 index 0000000..c427a99 --- /dev/null +++ b/src/domain/models/index-action.model.ts @@ -0,0 +1,16 @@ +export interface IndexCustomer { +     nome: string; +     email: string; +     telefone: string; +     inviteId: string; +     shortUrl: string; +     created_at: Date; +     actionId: string; +     status: string; + } + + export interface IndexActions { +     customers: IndexCustomer[]; + } + + \ No newline at end of file diff --git a/src/domain/models/log-order.model.ts b/src/domain/models/log-order.model.ts new file mode 100644 index 0000000..fa72ee3 --- /dev/null +++ b/src/domain/models/log-order.model.ts @@ -0,0 +1,7 @@ +export class LogOrder { + idCart: string; + idUser: number; + action: string; + iduserAuth: number; + notation: string; +} \ No newline at end of file diff --git a/src/domain/models/measureproduct.model.ts b/src/domain/models/measureproduct.model.ts new file mode 100644 index 0000000..0603863 --- /dev/null +++ b/src/domain/models/measureproduct.model.ts @@ -0,0 +1,14 @@ +export class MeasureProductModel { + + constructor( + public idmedidaproduto: number, + public abreviatura: string, + public descricao: string, + public quantidade: number, + public nivel: number + ) { + + } + +} + diff --git a/src/domain/models/message-whatsapp.model.ts b/src/domain/models/message-whatsapp.model.ts new file mode 100644 index 0000000..d3a58ce --- /dev/null +++ b/src/domain/models/message-whatsapp.model.ts @@ -0,0 +1,20 @@ +export interface Params { + additionalProp1: string; + additionalProp2: string; + additionalProp3: string; + additionalProp4: string; + additionalProp5: string; + additionalProp6: string; +} + +export interface MessageWhatsApp { + telephone: string; + namespace: string; + template: string; + flow_id: string; + state_id: string; + params: Params; + trackOrigin: boolean; +} + + diff --git a/src/domain/models/notify.model.ts b/src/domain/models/notify.model.ts new file mode 100644 index 0000000..98edc9a --- /dev/null +++ b/src/domain/models/notify.model.ts @@ -0,0 +1,11 @@ +export class Notify { + constructor( + public idSeller: number, + public document: string, + public name: string, + public cellPhone: string, + public email: string, + public codprod: number, + public notification: string, + ){} +} \ No newline at end of file diff --git a/src/domain/models/order-discount.model.ts b/src/domain/models/order-discount.model.ts new file mode 100644 index 0000000..d5aee2f --- /dev/null +++ b/src/domain/models/order-discount.model.ts @@ -0,0 +1,6 @@ +export class OrderDiscount { + constructor( + public id: string, + public percentDiscount: number, + public idUserAuth: number){} +} \ No newline at end of file diff --git a/src/domain/models/order-taxdelivery.model.ts b/src/domain/models/order-taxdelivery.model.ts new file mode 100644 index 0000000..f0a7fed --- /dev/null +++ b/src/domain/models/order-taxdelivery.model.ts @@ -0,0 +1,6 @@ +export class OrderTaxDelivery { + id: number; + taxValue: number; + deliveryTaxId: number; + carrierId: number; +} \ No newline at end of file diff --git a/src/domain/models/partner-category.model.ts b/src/domain/models/partner-category.model.ts new file mode 100644 index 0000000..1a89133 --- /dev/null +++ b/src/domain/models/partner-category.model.ts @@ -0,0 +1,11 @@ +export class PartnerCategory { + constructor( + public id: number, + public partnerType: string, + public descriptionType: string, + public name: string, + public paymentType: string, + public descriptionPayment: string, + ){} + +} \ No newline at end of file diff --git a/src/domain/models/partner-range.model.ts b/src/domain/models/partner-range.model.ts new file mode 100644 index 0000000..d00638d --- /dev/null +++ b/src/domain/models/partner-range.model.ts @@ -0,0 +1,10 @@ +export class PartnerRange { + constructor( + public id: number, + public rangeIni: number, + public rangeFin: number, + public type: string, + public percentComiss: number, + public userId: number, + ){} +} \ No newline at end of file diff --git a/src/domain/models/partner.model.ts b/src/domain/models/partner.model.ts new file mode 100644 index 0000000..be28201 --- /dev/null +++ b/src/domain/models/partner.model.ts @@ -0,0 +1,36 @@ +import { Place } from "./customer.model"; + +export class Partner { + constructor( + public id: number, + public name: string, + public cpf: string, + public type: string, + public rg: string, + public professionalNumber: string, + public phone: string, + public email: string, + public pixKey: string, + public buyer: boolean, + public customerId: number, + public sellerId: number, + public bank: string, + public agencia: string, + public conta: string, + public zipCode: string, + public ibgeCode: string, + public address: string, + public number: string, + public complement: string, + public neighborhood: string, + public city: string, + public state: string, + public place: Place, + public placeId: number, + public categoryId: number, + public observer1: string, + public observer2: string, + public commission: number, + public userId: number, + ) { } +} \ No newline at end of file diff --git a/src/domain/models/payment.model.ts b/src/domain/models/payment.model.ts new file mode 100644 index 0000000..89df84c --- /dev/null +++ b/src/domain/models/payment.model.ts @@ -0,0 +1,18 @@ +export class PaymentModel { + constructor( + public orderId: number, + public codigoAutorizacao: string, + public codigoFuncionario: number, + public dataPagamento: string, + public dataServidor: string, + public dataRequisicao: string, + public codigoResposta: string, + public estAcquirer: string, + public formaPagto: string, + public idTransacao: string, + public nomeBandeira: string, + public nsu: string, + public parcelas: number, + public valor: number, + ){} +} \ No newline at end of file diff --git a/src/domain/models/product-type.model.ts b/src/domain/models/product-type.model.ts new file mode 100644 index 0000000..9114366 --- /dev/null +++ b/src/domain/models/product-type.model.ts @@ -0,0 +1,14 @@ +export class ProductTypeModel { + id: number; + ncm: string; + type: string; + sigla: string; + idDepartment: number; + idSection: number; + idCategory: number; + idCest: number; + department: string; + section: string; + category: string; + cest: string; +} \ No newline at end of file diff --git a/src/domain/models/reset-password.model.ts b/src/domain/models/reset-password.model.ts new file mode 100644 index 0000000..e9d2e7f --- /dev/null +++ b/src/domain/models/reset-password.model.ts @@ -0,0 +1,3 @@ +export class ResetPasswordModel { + constructor(public email: string,){} +} \ No newline at end of file diff --git a/src/domain/models/result.model.ts b/src/domain/models/result.model.ts new file mode 100644 index 0000000..0e83009 --- /dev/null +++ b/src/domain/models/result.model.ts @@ -0,0 +1,8 @@ +export class ResultModel { + constructor( + public success: boolean, + public message: string, + public data: any, + public errors: any, + ){} +} \ No newline at end of file diff --git a/src/domain/models/rupture.model.ts b/src/domain/models/rupture.model.ts new file mode 100644 index 0000000..1611028 --- /dev/null +++ b/src/domain/models/rupture.model.ts @@ -0,0 +1,10 @@ +export class Rupture { + document: string; + name: string; + cellPhone: string; + email: string; + store: string; + seller: string; + idProduct: number; + quantity: number; + } \ No newline at end of file diff --git a/src/domain/models/shopping-item.model.ts b/src/domain/models/shopping-item.model.ts new file mode 100644 index 0000000..e83ffdf --- /dev/null +++ b/src/domain/models/shopping-item.model.ts @@ -0,0 +1,33 @@ +export class ShoppingItem { + public id: string; + public invoiceStore: string; + public idProduct: number; + public ean: number; + public description: string; + public image: string; + public productType: string; + public quantity: number; + public listPrice: number; + public price: number; + public idCart: string; + public deliveryType: string; + public stockStore: string; + public seller: number; + public discount: number; + public discountValue: number; + public promotion: number; + public userDiscount: number; + public mutiple: number; + public auxDescription: string; + public smallDescription: string; + public brand: string; + public percentUpQuantity: number; + public upQuantity: number; + public base: string; + public letter: string + public line: string; + public color: string; + public can: number; + public environment: string; + public productTogether: string; +} \ No newline at end of file diff --git a/src/domain/models/user.model.ts b/src/domain/models/user.model.ts new file mode 100644 index 0000000..befe1ca --- /dev/null +++ b/src/domain/models/user.model.ts @@ -0,0 +1,10 @@ +import { ApiProperty } from "@nestjs/swagger"; + +export class UserModel { + @ApiProperty() + public email: string; + @ApiProperty() + public password: string; + @ApiProperty() + public application: string; +} \ No newline at end of file diff --git a/src/domain/models/via-cep.model.ts b/src/domain/models/via-cep.model.ts new file mode 100644 index 0000000..acba975 --- /dev/null +++ b/src/domain/models/via-cep.model.ts @@ -0,0 +1,12 @@ +export interface ViaCep { + cep: string; + logradouro: string; + complemento: string; + bairro: string; + localidade: string; + uf: string; + ibge: string; + gia: string; + ddd: string; + siafi: string; +} \ No newline at end of file diff --git a/src/domain/reports_model/Faturamento_Filial_Rca_Fornecedor.mrt b/src/domain/reports_model/Faturamento_Filial_Rca_Fornecedor.mrt new file mode 100644 index 0000000..77509ec --- /dev/null +++ b/src/domain/reports_model/Faturamento_Filial_Rca_Fornecedor.mrt @@ -0,0 +1,1888 @@ + + + + + + + winthor + 9HpDCe9oS+zzYaGBfJz2p8Qqu6HrCcKVR3q9yU3c9Q781rcC3XZCdc9h0MnxPfP7kBS1omJu08jyHDm9+twyKvRWjYzdbJLw/WzMBPGE9ufgKnHC1w2jcX8VbRhNxOsqwzDNoOt2Qk3yZ+jMS8xu6/XQ9QlbbJFFa3/oBHdJsefm8kNM5xExGU9hqHRzSWqLgCCRL81b8sjPbFUYchEqRo1UUwLrEdk= + 72f5ef03aa7a4a7291725cca262d22d7 + winthor + + + + + FaturamentoFornecedor + + ORIGINAL,CODFORNEC,CODFORNEC,CODFORNEC,System.Int32,_x0035_448895341174341b460117b8311daf4 + ORIGINAL,FORNECEDOR,FORNECEDOR,FORNECEDOR,System.String,d1654731b9344bb08da0a97fea28544a + ORIGINAL,MIX,MIX,MIX,System.Decimal,b12a7d8c0b4e47d69e7f81daf41c5250 + ORIGINAL,QTCLIPOS,QTCLIPOS,QTCLIPOS,System.Decimal,ee067f9da90d4a73bf0d45fc18ab165e + ORIGINAL,VLFATURAMENTO,VLFATURAMENTO,VLFATURAMENTO,System.Decimal,b2b047b5789f4534866ce48cc32bb824 + ORIGINAL,QTPEDIDOS,QTPEDIDOS,QTPEDIDOS,System.Decimal,_x0036_e112a797a6b41e497aac01cd964b720 + ORIGINAL,VLDEVOLUCAO,VLDEVOLUCAO,VLDEVOLUCAO,System.Decimal,ce6c0fd35d0b45198d9f68d336211027 + ORIGINAL,VLVENDALIQ,VLVENDALIQ,VLVENDALIQ,System.Decimal,_x0037_6c83a100cb246db882dc2f923302e4c + MIX_ATACADO,System.Decimal + QTPEDIDOS_ATACADO,System.Decimal + QTCLIPOS_ATACADO,System.Decimal + VLFATURAMENTO_ATACADO,System.Decimal + VLDEVOLUCAO_ATACADO,System.Decimal + VLVENDALIQ_ATACADO,System.Decimal + MIX_ECOMMERCE,System.Decimal + QTPEDIDOS_ECOMMERCE,System.Decimal + QTCLIPOS_ECOMMERCE,System.Decimal + VLFATURAMENTO_ECOMMERCE,System.Decimal + VLDEVOLUCAO_ECOMMERCE,System.Decimal + VLVENDALIQ_ECOMMERCE,System.Decimal + MIX_VAREJO,System.Decimal + QTPEDIDOS_VAREJO,System.Decimal + QTCLIPOS_VAREJO,System.Decimal + VLFATURAMENTO_VAREJO,System.Decimal + VLDEVOLUCAO_VAREJO,System.Decimal + VLVENDALIQ_VAREJO,System.Decimal + + 30 + + 8cc13efa35d44693810d295d49c3cf00 + FaturamentoFornecedor + winthor + + DATA_INICIO,DATA_INICIO,106,0,5d318106c6724467b60f0a354969df9f + DATA_FIM,DATA_FIM,106,0,1ccb45f2c08941f2be5f3678e4a9b2af + CODFORNEC,CODFORNEC,111,0,30386588e8ee42509b80b6b6208ede83 + + SELECT CODFORNEC, FORNECEDOR, + SUM(MIX) MIX, + SUM(QTPEDIDOS) QTPEDIDOS, + SUM(QTCLIPOS) QTCLIPOS, + SUM(VLFATURAMENTO) VLFATURAMENTO, + SUM(VLDEVOLUCAO) VLDEVOLUCAO, + ( SUM(VLFATURAMENTO) - SUM(VLDEVOLUCAO) ) VLVENDALIQ, + SUM(MIX_ATACADO) MIX_ATACADO, + SUM(QTPEDIDOS_ATACADO) QTPEDIDOS_ATACADO, + SUM(QTCLIPOS_ATACADO) QTCLIPOS_ATACADO, + SUM(VLFATURAMENTO_ATACADO) VLFATURAMENTO_ATACADO, + SUM(VLDEVOLUCAO_ATACADO) VLDEVOLUCAO_ATACADO, + ( SUM(VLFATURAMENTO_ATACADO) - SUM(VLDEVOLUCAO_ATACADO) ) VLVENDALIQ_ATACADO, + SUM(MIX_ECOMMERCE) MIX_ECOMMERCE, + SUM(QTPEDIDOS_ECOMMERCE) QTPEDIDOS_ECOMMERCE, + SUM(QTCLIPOS_ECOMMERCE) QTCLIPOS_ECOMMERCE, + SUM(VLFATURAMENTO_ECOMMERCE) VLFATURAMENTO_ECOMMERCE, + SUM(VLDEVOLUCAO_ECOMMERCE) VLDEVOLUCAO_ECOMMERCE, + ( SUM(VLFATURAMENTO_ECOMMERCE) - SUM(VLDEVOLUCAO_ECOMMERCE) ) VLVENDALIQ_ECOMMERCE, + SUM(MIX_VAREJO) MIX_VAREJO, + SUM(QTPEDIDOS_VAREJO) QTPEDIDOS_VAREJO, + SUM(QTCLIPOS_VAREJO) QTCLIPOS_VAREJO, + SUM(VLFATURAMENTO_VAREJO) VLFATURAMENTO_VAREJO, + SUM(VLDEVOLUCAO_VAREJO) VLDEVOLUCAO_VAREJO, + ( SUM(VLFATURAMENTO_VAREJO) - SUM(VLDEVOLUCAO_VAREJO) ) VLVENDALIQ_VAREJO + + +FROM ( +SELECT PCFORNEC.CODFORNEC, + PCFORNEC.FORNECEDOR, Count(DISTINCT PCMOV.CODPROD) MIX, + COUNT(DISTINCT PCMOV.NUMPED) QTPEDIDOS, + Count(DISTINCT PCMOV.CODCLI) QTCLIPOS, Sum(PCMOV.QT * PCMOV.PUNIT) + VLFATURAMENTO, + 0 VLDEVOLUCAO, + COUNT(DISTINCT CASE WHEN PCMOV.CODFILIAL = '02' THEN PCMOV.CODPROD ELSE NULL END ) MIX_ATACADO, + COUNT(DISTINCT CASE WHEN PCMOV.CODFILIAL = '02' THEN PCMOV.NUMPED ELSE NULL END ) QTPEDIDOS_ATACADO, + COUNT(DISTINCT CASE WHEN PCMOV.CODFILIAL = '02' THEN PCMOV.CODCLI ELSE NULL END ) QTCLIPOS_ATACADO, + SUM(CASE WHEN PCMOV.CODFILIAL = '02' THEN (PCMOV.QT * PCMOV.PUNIT) ELSE 0 END ) VLFATURAMENTO_ATACADO, + 0 VLDEVOLUCAO_ATACADO, + COUNT(DISTINCT CASE WHEN PCMOV.CODFILIAL = '70' THEN PCMOV.CODPROD ELSE NULL END ) MIX_ECOMMERCE, + COUNT(DISTINCT CASE WHEN PCMOV.CODFILIAL = '70' THEN PCMOV.NUMPED ELSE NULL END ) QTPEDIDOS_ECOMMERCE, + COUNT(DISTINCT CASE WHEN PCMOV.CODFILIAL = '70' THEN PCMOV.CODCLI ELSE NULL END ) QTCLIPOS_ECOMMERCE, + SUM(CASE WHEN PCMOV.CODFILIAL = '70' THEN (PCMOV.QT * PCMOV.PUNIT) ELSE 0 END ) VLFATURAMENTO_ECOMMERCE, + 0 VLDEVOLUCAO_ECOMMERCE, + COUNT(DISTINCT CASE WHEN PCMOV.CODFILIAL NOT IN ( '02', '70' ) THEN PCMOV.CODPROD ELSE NULL END ) MIX_VAREJO, + COUNT(DISTINCT CASE WHEN PCMOV.CODFILIAL NOT IN ( '02', '70' ) THEN PCMOV.NUMPED ELSE NULL END ) QTPEDIDOS_VAREJO, + COUNT(DISTINCT CASE WHEN PCMOV.CODFILIAL NOT IN ( '02', '70' ) THEN PCMOV.CODCLI ELSE NULL END ) QTCLIPOS_VAREJO, + SUM(CASE WHEN PCMOV.CODFILIAL NOT IN ( '02', '70' ) THEN (PCMOV.QT * PCMOV.PUNIT) ELSE 0 END ) VLFATURAMENTO_VAREJO, + 0 VLDEVOLUCAO_VAREJO +FROM PCMOV INNER JOIN + PCPRODUT ON PCMOV.CODPROD = PCPRODUT.CODPROD INNER JOIN + PCFORNEC ON PCPRODUT.CODFORNEC = PCFORNEC.CODFORNEC INNER JOIN + PCUSUARI ON PCMOV.CODUSUR = PCUSUARI.CODUSUR +WHERE PCMOV.DTMOV BETWEEN :DATA_INICIO AND :DATA_FIM +AND PCMOV.CODUSUR = + PCUSUARI.CODUSUR AND PCMOV.CODPROD = PCPRODUT.CODPROD AND PCPRODUT.CODFORNEC = + PCFORNEC.CODFORNEC AND PCMOV.CODOPER IN ('S') AND PCMOV.DTCANCEL IS NULL + AND PCFORNEC.CODFORNEC = :CODFORNEC +GROUP BY PCFORNEC.CODFORNEC, PCFORNEC.FORNECEDOR + +UNION ALL + +SELECT PCFORNEC.CODFORNEC, + PCFORNEC.FORNECEDOR, 0 MIX, + 0 QTPEDIDOS, + 0 QTCLIPOS, + 0 VLFATURAMENTO, + Sum(PCMOV.QT * PCMOV.PUNIT) VLDEVOLUCAO, + 0 MIX_ATACADO, + 0 QTPEDIDOS_ATACADO, + 0 QTCLIPOS_ATACADO, + 0 VLFATURAMENTO_ATACADO, + SUM(CASE WHEN PCMOV.CODFILIAL = '02' THEN (PCMOV.QT * PCMOV.PUNIT) ELSE 0 END ) VLDEVOLUCAO_ATACADO, + 0 MIX_ECOMMERCE, + 0 QTPEDIDOS_ECOMMERCE, + 0 QTCLIPOS_ECOMMERCE, + 0 VLFATURAMENTO_ECOMMERCE, + SUM(CASE WHEN PCMOV.CODFILIAL = '70' THEN (PCMOV.QT * PCMOV.PUNIT) ELSE 0 END ) VLDEVOLUCAO_ECOMMERCE, + 0 MIX_VAREJO, + 0 QTPEDIDOS_VAREJO, + 0 QTCLIPOS_VAREJO, + 0 VLFATURAMENTO_VAREJO, + SUM(CASE WHEN PCMOV.CODFILIAL NOT IN ( '02', '70' ) THEN (PCMOV.QT * PCMOV.PUNIT) ELSE 0 END ) VLDEVOLUCAO_VAREJO +FROM PCMOV INNER JOIN + PCPRODUT ON PCMOV.CODPROD = PCPRODUT.CODPROD INNER JOIN + PCFORNEC ON PCPRODUT.CODFORNEC = PCFORNEC.CODFORNEC INNER JOIN + PCUSUARI ON PCMOV.CODUSUR = PCUSUARI.CODUSUR +WHERE PCMOV.DTMOV BETWEEN :DATA_INICIO AND :DATA_FIM +AND PCMOV.CODUSUR = + PCUSUARI.CODUSUR AND PCMOV.CODPROD = PCPRODUT.CODPROD AND PCPRODUT.CODFORNEC = + PCFORNEC.CODFORNEC AND PCMOV.CODOPER IN ('ED') AND PCMOV.DTCANCEL IS NULL + AND PCFORNEC.CODFORNEC = :CODFORNEC +GROUP BY PCFORNEC.CODFORNEC, PCFORNEC.FORNECEDOR ) +GROUP BY CODFORNEC, FORNECEDOR + + + + Filial + + ORIGINAL,CODIGO,CODIGO,CODIGO,System.String,_x0038_501e664c45f4f3fb48a58192e90ec6c + ORIGINAL,NOME_FILIAL,NOME_FILIAL,NOME_FILIAL,System.String,d2d1bdcfa1f440049a53affab301395f + + 30 + + 6e8fceb130f547b585a70d610c8af5dc + Filial + winthor + + SELECT CODIGO, + CASE WHEN CODIGO = '01' THEN 'LOJA 01' + WHEN CODIGO = '02' THEN 'ATACADO' + WHEN CODIGO = '03' THEN 'LOJA 03' + WHEN CODIGO = '04' THEN 'LOJA 04' + WHEN CODIGO = '05' THEN 'LOJA 05' + WHEN CODIGO = '06' THEN 'LOJA 06' + WHEN CODIGO = '07' THEN 'LOJA 07' + WHEN CODIGO = '08' THEN 'LOJA 08' + WHEN CODIGO = '09' THEN 'LOJA 09' + WHEN CODIGO = '10' THEN 'LOJA 10' + WHEN CODIGO = '11' THEN 'LOJA 11' + WHEN CODIGO = '12' THEN 'LOJA 12' + WHEN CODIGO = '13' THEN 'LOJA 13' + WHEN CODIGO = '14' THEN 'LOJA 14' + WHEN CODIGO = '15' THEN 'LOJA 15' + WHEN CODIGO = '16' THEN 'LOJA 16' + WHEN CODIGO = '70' THEN 'E-COMMERCE' + ELSE 'NÃO CADASTRADA' END NOME_FILIAL + FROM PCFILIAL + WHERE CODIGO < 75 + + + RCA + + CODUSUR,System.Decimal + NOMERCA,System.String + CODSUPERVISOR,System.Int16 + NOMESUPERVISOR,System.String + + 30 + + b0b3b037225142e6807708b5f59f930a + RCA + winthor + + SELECT TRUNC(PCUSUARI.CODUSUR) CODUSUR + ,PCUSUARI.NOME NOMERCA + ,PCUSUARI.CODSUPERVISOR + ,PCSUPERV.NOME NOMESUPERVISOR + FROM PCUSUARI, PCSUPERV +WHERE PCUSUARI.CODSUPERVISOR = PCSUPERV.CODSUPERVISOR + + + Faturamento_Filial_RCA + + ORIGINAL,CODFORNEC,CODFORNEC,CODFORNEC,System.Int32,_x0032_c7ef2d3b3934866a2ccbf0e1adc8367 + ORIGINAL,FORNECEDOR,FORNECEDOR,FORNECEDOR,System.String,_x0036_43d0729a034484eaff0af4d6fe7745d + ORIGINAL,CODFILIAL,CODFILIAL,CODFILIAL,System.String,_x0032_791a837e8e442e8aa70e4147051f600 + ORIGINAL,MIX,MIX,MIX,System.Decimal,db0fda11c6504065961a404d6410d6f2 + ORIGINAL,QTPEDIDOS,QTPEDIDOS,QTPEDIDOS,System.Decimal,b306369069544ce499765ba65e7c91c1 + ORIGINAL,QTCLIPOS,QTCLIPOS,QTCLIPOS,System.Decimal,acff857c0cb4414d87e7758da033abcf + ORIGINAL,VLFATURAMENTO,VLFATURAMENTO,VLFATURAMENTO,System.Decimal,_x0032_002db55b75347e19629ec6a43cf534c + ORIGINAL,VLDEVOLUCAO,VLDEVOLUCAO,VLDEVOLUCAO,System.Decimal,_x0033_f05fa7970da4394997c4c8d7060de85 + ORIGINAL,VLVENDALIQ,VLVENDALIQ,VLVENDALIQ,System.Decimal,_x0036_41d4709bb9a4fe28528b178b5c6b8ee + ORIGINAL,CODUSUR,CODUSUR,CODUSUR,System.Decimal,_x0038_d04248415bc4e06a0ad5f92181b553e + ORIGINAL,CODPROD,CODPROD,CODPROD,System.Int32,_x0039_8c0f32a2de64e959c5dd5cffd5b536e + + 30 + + 50b0adea53924b3e86590fe16a118eae + Faturamento_Filial_RCA + winthor + + DATA_INICIO,DATA_INICIO,106,0,05662079c9f9469f9707078fa8c39137 + DATA_FIM,DATA_FIM,106,0,c1faa91abc1a42ada940c1cfbd068143 + CODFORNEC,CODFORNEC,107,0,7258ab34ab244f13b4fdef576d078503 + + SELECT CODFORNEC, FORNECEDOR, CODFILIAL, TRUNC(CODUSUR) CODUSUR, CODPROD, + SUM(MIX) MIX, + SUM(QTPEDIDOS) QTPEDIDOS, + SUM(QTCLIPOS) QTCLIPOS, + SUM(VLFATURAMENTO) VLFATURAMENTO, + SUM(VLDEVOLUCAO) VLDEVOLUCAO, + ( SUM(VLFATURAMENTO) - SUM(VLDEVOLUCAO) ) VLVENDALIQ +FROM ( +SELECT PCFORNEC.CODFORNEC, + PCFORNEC.FORNECEDOR, + PCMOV.CODFILIAL, + PCMOV.CODUSUR, + PCMOV.CODPROD, + Count(DISTINCT PCMOV.CODPROD) MIX, + COUNT(DISTINCT PCMOV.NUMPED) QTPEDIDOS, + Count(DISTINCT PCMOV.CODCLI) QTCLIPOS, Sum(PCMOV.QT * PCMOV.PUNIT) + VLFATURAMENTO, + 0 VLDEVOLUCAO + +FROM PCMOV INNER JOIN + PCPRODUT ON PCMOV.CODPROD = PCPRODUT.CODPROD INNER JOIN + PCFORNEC ON PCPRODUT.CODFORNEC = PCFORNEC.CODFORNEC INNER JOIN + PCUSUARI ON PCMOV.CODUSUR = PCUSUARI.CODUSUR +WHERE PCMOV.DTMOV BETWEEN :DATA_INICIO AND :DATA_FIM +AND PCMOV.CODUSUR = + PCUSUARI.CODUSUR AND PCMOV.CODPROD = PCPRODUT.CODPROD AND PCPRODUT.CODFORNEC = + PCFORNEC.CODFORNEC AND PCMOV.CODOPER IN ('S') AND PCMOV.DTCANCEL IS NULL + AND PCFORNEC.CODFORNEC = :CODFORNEC +GROUP BY PCFORNEC.CODFORNEC, PCFORNEC.FORNECEDOR, PCMOV.CODFILIAL, PCMOV.CODUSUR, PCMOV.CODPROD + +UNION ALL + +SELECT PCFORNEC.CODFORNEC, + PCFORNEC.FORNECEDOR, + PCMOV.CODFILIAL, + PCMOV.CODUSUR, + PCMOV.CODPROD, + 0 MIX, + 0 QTPEDIDOS, + 0 QTCLIPOS, 0 + VLFATURAMENTO, + Sum(PCMOV.QT * PCMOV.PUNIT) VLDEVOLUCAO + +FROM PCMOV INNER JOIN + PCPRODUT ON PCMOV.CODPROD = PCPRODUT.CODPROD INNER JOIN + PCFORNEC ON PCPRODUT.CODFORNEC = PCFORNEC.CODFORNEC INNER JOIN + PCUSUARI ON PCMOV.CODUSUR = PCUSUARI.CODUSUR +WHERE PCMOV.DTMOV BETWEEN :DATA_INICIO AND :DATA_FIM +AND PCMOV.CODUSUR = + PCUSUARI.CODUSUR AND PCMOV.CODPROD = PCPRODUT.CODPROD AND PCPRODUT.CODFORNEC = + PCFORNEC.CODFORNEC AND PCMOV.CODOPER IN ('ED') AND PCMOV.DTCANCEL IS NULL + AND PCFORNEC.CODFORNEC = :CODFORNEC +GROUP BY PCFORNEC.CODFORNEC, PCFORNEC.FORNECEDOR, PCMOV.CODFILIAL, PCMOV.CODUSUR, PCMOV.CODPROD ) +GROUP BY CODFORNEC, FORNECEDOR, CODFILIAL, CODUSUR, CODPROD + + + + Produtos + + ORIGINAL,CODPROD,CODPROD,CODPROD,System.Int32,bdcc4f304abe49b1978879852530531c + ORIGINAL,DESCRICAO,DESCRICAO,DESCRICAO,System.String,_x0030_52d3388e1364dfb83aa71ecf3d32afb + ORIGINAL,EMBALAGEM,EMBALAGEM,EMBALAGEM,System.String,ee5a8ca257f34c18adc7547004c0b827 + CODIGO_DESCRICAO,System.String + + 30 + + aeb6316524e4414baf0523a424064442 + Produtos + winthor + + SELECT PCPRODUT.CODPROD, PCPRODUT.DESCRICAO, PCPRODUT.EMBALAGEM, + PCPRODUT.CODPROD ||' - '||PCPRODUT.DESCRICAO CODIGO_DESCRICAO +FROM PCPRODUT + + + + + + Filial_Faturamento + + CODFILIAL + + + + c02e288a887a495b975eaca4e81036b1 + Filial_Faturamento + Relação + + CODIGO + + + + + RCA_Faturamento + + CODUSUR + + + + b49c7f52cee7415ca32bcfc13599058e + RCA_Faturamento + Relação2 + + CODUSUR + + + + + Produto_Faturamento + + CODPROD + + + + d0f696a80ec74c58a136886674fedd39 + Produto_Faturamento + Relação3 + + CODPROD + + + + + + + + ,CODFORNEC,CODFORNEC,Código_x0020_do_x0020_fornecedor,System.Int32,_x0031_0,False,False,True,False,,df7acb5f13f048c3a4173a1f23175076,True + ,DATA_INICIO,DATA_INICIO,Data_x0020_inicial_x0020_do_x0020_relatório,System.DateTime,_x0031__x002F_1_x002F_2021_x0020_7:23:33_x0020_AM,False,False,True,False,,_x0038_c3129b8fc1f45ae9c67d898b79f4608 + ,DATA_FIM,DATA_FIM,Data_x0020_final_x0020_do_x0020_relatório,System.DateTime,_x0031__x002F_23_x002F_2021_x0020_7:24:13_x0020_AM,False,False,True,False,,_x0039_17c1303d9084d4fa23dd3ecc56bbcbb,True + + + EngineV2 + + fa1367de86ac445aada0448f464c1ea5 + + + + None;Black;2;Solid;False;4;Black + Transparent + + + [209:72:65] + 0,0.4,27.7,1.6 + + + True + Transparent + True + 0,0,2.4,1.6 + + + 68, 114, 196 + iVBORw0KGgoAAAANSUhEUgAAAIAAAABXCAYAAADMBU1cAAAAAXNSR0IArs4c6QAAAARnQU1BAACx +jwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAABM7SURBVHhe7Vx5cBxVfv66e7pHlyXja8HGh2zr +tCTfGGOMlyXLhmSBFFUku6SylUrtUpWQbGpJKvlnkz9SqaSyf+TaYquyqewmcQKEqwyUORcbn4AX +Y/mQLVmSZRmxgMGyrWs0PX3k+73plkfySNYxOqyZz57u169fv379ft/veO91S/MJ5JC10IN9DlmK +HAGyHDkCZDlyBMhy5AiQ5cgRIMuRI0CWI0eALEeOAFmOHAGyHDkCZDlyBMhyzDgCOLLx1TaHKcCM +I8Bbjz0MdLQht0Q5NZhxBMjTomj7xv3QxsIAMRh2D/ok7XmyzWGUmHEEMHwfRj8lqo1BkD0daF1T +hdbySvh6LqwZC2Zcb/kUvB0hAfzRN80vLEKfEUftrv8cm+XIYeYRYDxImIWoPXMRbvWdZEOQmcOo +cHMQgH69n7venc/gyLpy7NlYR7PfBTfh0e87sFwPp6uX4MwTT/KJErDjvYwL4ti1/Q4cKVuFt+5Y +D/Rdgd0fV+GC4sjn53C2qhSNK5fjzXu2Mi+RneSRdwJnEvY+9ojfXHar73tBhuxtx29aPs/3n/4f +P+7bfj+zjlYt9Q+v2+A7QZn20tv9D77/h77v8vhKzD9bttj3r/b6CTnPTWvFbf7Lmzf6CZb96PHv ++SdqVvgxm+dY3nPj/uG6u6Rk1iGjFsARLWLsphRpQtrEZmlBkvtDW+qgWQXAt38XFkxEmL2hvgkL +er+EYfcybnAQMwHT0xk6OGi5YzXiBnW9uECVlc3K/Q2ovvwFdAYJF48fRZHtIM+g/XABl4Hj1uOH +pGTWIaME0NmZcdjsUbIgFOAY4etaMpBLIdD8rovklQ5XJohYtcFznpmPhO4h/tTPglLMk5GDG4Hh +GijwiwfqkJ27aA6tnQvd9nDP+0fh+SbOryxDQ105NLqHbEVmCaCZuFC5Cg1VyxmZ9YzLGtz75z8k +f5LNCq91jUISylHaa8sp5ulanL5fR3TzZiml4ArpdJ70DSRc7gMSamyI0d1NQ2AA/V3Ip61adfoc +VrQ24cqC+Wi/cyPQ0gBXGpxlyCgBQuRTU8+sLYejd41pOK9QVYt+nSHfewdpTQCbQuy8YyuK8uZS +QCYsqU8EywDQ9POBbYz8A5i+hwRJ0m3QCvkMBAm6OW507PvqnSQAXRThsZzyDXoB7tl/GPGEgX2P +fQdGQLxswqQ8sadFEHEMdFSso1qy/8fAAtcyUHfgOBr+4Lfx4aYaaC+/hO3//QzOe704s2IJ/D2v +4aPvfxet1eVY/torvBnr9qjbFKpHqVoUdt3ZDtiej9Pr10D75Yc4sL4cO954H73ytK6F+nUcFVzt +5HUuzf9VRNwEduw7OG63dTMjs18GURbNlUuDA4I+d3Xzr5RhpfEdHejmHWpnRLS07zI1nXlz5wuP +YMRpEy60Myigfy++NUlfxgE+E2drlqFizz44i0qVpjsSLHbx+vYmWpUaXlwE7KdVuWsDNNNDx092 +ov7Zf8f6b30HpX/0x6wjkow9sowEk0oAV9NReaZdTeqNul9DIQzai5DlMDBYwigmJU+Sex76BlY0 +nkJZ0yeDrxUw7TMdHioihRUIpKyABVIvyxZMPgEa21VwNmoLMArIZM57levgF7q4taePGTrKG6np +ZiDUHEaNm4sAYUu9BIeApgr4DboAMTGpWj4eiGUQ+qg6AlOgdkF6tuKmUhkRclyEYZgwuTdU67lh +eqIyUsIXYYt5ceLoJ5vFUTgTrXiG46YiQEvdCkQTyeFdpiFy7uPmaOlcnK4qRduqRcoqzHL530QE +6OlGXp+DM+WVVEufwhFVzSBcDwXdV1GcP4ehhMExRAGsrr6Mxi4zETOeAGKVxRafWFcOGxYuFBRx ++C5rgGqWP2Pw6U/8OSXBEeNJ0wTmWLxPcvJotmLGB4E+K9USFEIkqmIAmwKJehQOg79+iqetYhlM +2mrXMLD873+EvIe/HQYHN4D4eBd6P12KUcD6LRUJ2j1xWHteBh54CMhnnswOjlQde08FoNzLrKUp +7b2JDOvMHwVI6xIx4MxZwGItahq3GE75CkSYPFK3BsVOJ6JOBH2FOi4tLMc9v3g7ee1I6L2I+rs3 +IL/PR8XpdjhGBFpzEwwhm2ZT6BSiVwiUlSWnjdNAmqbZ8qaCsECIwgaZUR7nCKCQmWEgK73SiZYt +m9RqnqDTKsCWUxz3Cxm8HjSuqQrm8anVhoaKhg44FEYkzQyU1GDwstNrVnIfh21ZqD3epsq9/8AO +zD93LlmQdX257WvY+vOdwbHAUa4n4jv4YP1aLIhdheOIYyqEy/vZfEjNc2ElIvhVSR7W/fI05tA8 +uXx6Y4aS4uahajqIcN0iWLaFiBtBQiTrU12vdirhi2keCjULGLuIPMuh0FzUfnBSKe+o4EXwzqa1 +aKy9HV/p7uOxD03jTfSYIhzsCAxN5rHjWH7VwScblmF/zUb09HUFFcw83NwEkOZbOub+9Z8hbtqM +BSK0wi6Obt+kzsoy8HWgtOu37oAbc5HnFwF5/I0AZR5lw6oO3rERpVcvwyazEoaDT5dWYVXLJyht +/gyVTR+j+lwzypqacaJkAdsTh+e4mINLqP/NR5Tt8PmbabjJCZDEvN97Anb8Wufm94t2xtjh1z+e +48RR3NtNi2Fh5b79N1ynGDhnd2FxdyfLMwhlvNG+pByb9/yCJ1ICBGVKDDzwYT3mfvdxEtJCPt3B +so+bEfniCv1tZkcumcCsIIC8IjT3wW8FBzw0TLx257X3BFKx+8Fvwjapi5F+uIsWjSj8EBLDnNq8 +Wb2RpFOIEm/ct/cdSLg3KLZhORkB5HG78C/+ihmeWqZ22Munt6+nS0pjkaYZs4IAYqGX/uu/JA8I +CT6reqlxwXEqas83UBN1XCgppfBurJFSt4QWlgwXA1yOmDckju/ZiJGIAnmdLeo66r4zDbOCAKJ1 +IpAek0M5drfpeYjJiyI9VwL/zTT/2//3v/BdxuPMu+/IXl54Y41Ugu79kqPCa10Vu23JiN5cXI+m +W+gsLlHtkSvjwjWScqZhVhAgxPr3j7D3LaZ05DseTmzeQLMbS75HyCi9/W/+Ev0RHZesuSQEDfgo +XwFr/Icfs+w1na+576scZQQHw0AmsOYvvZ1aL0eeihtib76lzs0kZJYAGvVCfgHk4cV/ThnLihYi +ZsonouJ3qYVxm2PwfPWaGPr6aJYNFNgm7qw/mWzUKBvW/vYbapwfYs7cW9IOMUOIYaHBV9rvBQXl +jeV9P/03lZ5JyKhsfPGq7rUqxSAnNWCq4KH2rQ+CNP22qeHo1+9V6SNbNkCnVbCLbDYsvelXY/o0 +KKitUMFcCDvOIV6QTgefZDETQGf7x+zha3W6bnIiayYhowQQtehm8BMiZujK304VJPjD4hUUTgQJ +PaI+GSu5cI4SAxbJWi9R8c4xkZBKjxbbf/RjeIlr8X79y6+T6sNHAZq4Fs1GSW9PkDNBjMS2CSKj +BNC0BOp+9nxwBOQl+ml6O5UpnApItC5oml8CUXRXExtk49DdteQmXQA54M0r4X6MK3y3cGDHoWMI +/dKndC3DjyDEAoCDxAInAyuJ4W1HijongMxaAJiIb79bpcTnedTIkzIeZxQmzzHpxoD3FOV+6EA9 +eqK2ErjOoHBe/2W2xUHZ63uQ0AwKLzk8G4r0yyKsU4vCN6wBd7aUmi1fJ12HgTw2Qk+wfLJ7J+IG +JYaCHseFp/6RieTLsfLLlDPJMAHEveroKF3DoNuCSQnkxakNztXg7CSDhJP+kgm3BIoVCaXTInGN +QSHdwspViNLPj20+Llln+ZHjKg4QlyYB5v4HvyZVUxCB2RFIkmXk39maFbBpkiYaAykB+VHMi5g4 +tWYRtH4hlmSm3HcCyCgBXGqZwd69981XEbN0jrLYWK0HbZtroF3qHNxZkwnPwdoT9RRW8vFkBPdF +XrH6eHTMEIHLvjAfvYbJQ12N6Ze1tACXLtLtpDwTwwR5h/DsyiVkYBz+ui3Qx78MqqDcJ4ey+U/8 +CQr6LbSsLUWM95B3ojKBjBJAzaxRCxM0sXUnWnF1/hL4cRNOwkPH5jXoWL0Eh+WrnN0vAa1ngHON +QBv36X6tDN5aW1WHjxnUdt80aY28geHb3R+dlE8Gxw52trIYlGRN03lcKSpWdcbpLpq2rseZqmVo +Xr0M9VWlaKhegbPVy2BFNZSfake8txtuwlGuaFgE/JFX3NRrbr7smTlgOeT584VbiOv5cOnSzmyU +j18yg4wSIITJ9jtscdm+d1HW9jHOVVSqz7JkEmZh35doevJP0fQb96Ppga+j8dfvV7+m4BceN/7a +DqB0ITtj7IFUsjN1lL7yEizNRGdhMdsTms7xQy7fRCJVH2+iRSiBE7GQ55rkvIsix0EhXU2EzV11 +vJ2dUIi+rm728MhDYfmc/dNn/wvtlaU4z19LWSUOb6ojMa5/7i9KDJK4B7d0Mbj+jHVnAJl9IeQG +kFtpCaqDfI7dzyGSQZYoPy0nAy7K614yHl8QpaYVKebLwNISi8fOUnCZoxfcmL7yZBcvIrFoAUwZ +Io4AH3Focd5NJhJVhugYK5C2DNVgITitQCTBRtE3J4VFY8176HIfllfPqv74AAtLHS7rpgKE9Tus +5O271+KBgyfVsceieuwS2taUobcwikIvH35vH1a+ux/OqnI183iotgILEn1qMSrhGag6Szekhj7j +twdTRgCZGpV/Ohur+nO4u4aEYEmRuRRT064afapaf5P+ZYf7QhR1ODzUdaxPyHWjsuSWHfHovJJE +SZAQltxPmjOEO6ralPaHJn4gL7yXHKvCye8ZRPZySrr84toV+Mq+9zjEXMycAHRZPiu5/JN/Ruc/ +PSWMYB+wFYw8E36CgylaHFoaWVV0+Ctr/FSRQWnJODHk0SYPsmAjMULYNyqR7qealGyWPJfitsqP +Xisiw7hkYmSE9Y2mLG9ksWx4DyV8QZoeUtWFBfkLk9cSASQt13MvtYWntFPHIFYcBfOTGSFk+ppP +Pe97P8Dq0y0UskXX5VHbySJaJJnYEisjH7IajAWMnivji2tSkObxcphMiBM79+jDFDRT0YBkKRDt +9jmCEnex6uR5GrD0cxaC137nt1hPaDHHh1lDAC91OEYM59mGlptqyASSL+NSiTFEs4cgXNoWyZiW +hurGc0jYHAuxaMqCpEJhJ+OoMHYaJ2YFAZ599ln09Ayed5eFnaEkeP755wet608H5BsHP7TbEhze +ABJfVLd1oJvDzyIGfqkk6F+9inUEgfE4kfHesG0br776Kvbv3x/kXMPx48eVEIZqYSwWU/lD4TDg +2b17t9rv3btXlUm3oiZf8STkff4UvPDCC4oYqUhnFaQtUnboObmP5Le1tQU5SUi55557Lm17WRsL +BMnh4HXRr/dT9rEgY2QoeXOz7lgDlhw+gjwSWJaaI1EL9/7Hz3lygiLkA2UUTz/9dJAaHkPLsDOD +1GCwo30KSJ2XfZiXip07d/okiE+BqX0qwmtChPWlor9f/uqg75O4ah+C5AlSg0GyXldHCLl7wk7W +Nxzee/z31d8wVH8LMT74njeC+puHAt7DcdgG9bgDueNCxi1AJJJ+TJqqoZZlDbICjzzyiLIcb7zx +RpCT1LSCggJlysOfQK6TcyGkjGEYyrTLfixokencAOpbwABicaSu8F6pbc3Ly1NtEeswFAaNU+TT +T1SgN1xsVrjvHfV2kIoBYsMUGgYDPWtG2T72h3rc9P09WmScAI8++iieeeYZZdZTIR384osv4sCB +A9i+ffsgX9zQ0KA6edu2bUGOuEeGQ2n8teSFZBAIeXbt2oU9e/YEOcNj6LXLly/HK6+8gsbGRhw8 +eDDITd67vLwchw4dUm1ObUc8Hh8gyFD4HLJ9+Ld/p74fkBW8dN4gSp2TP4YtM4B9h18PcqcPUzoT +OOvBnjzy5BMo2f06Kl56GX5NbXJySOb3SSKhTEv5YkRcE71R5mlFqGtoVpdOF3IEyCDUl8y9l9G6 +dgMStACVTR1JUx8YENdNoK1ypZrIkehd/phlZfOFtJZuqjB9d56VYHea85GI2NR2E+2VyyhoCp5n +JC4wXt1FS8CEJu8J6DDpx2XJemIDuYkhR4AMQqIL34rDcEw1Xo8xlmioXgrDjqv1jJM//IGa0JEI +ceArISM23DuqU4IcATIJClezo/h8fokSquZ7arGmuWYx2lctpqzTdPeho5TC9DEgFwNMBtijLRVL +OIS02MMjG/hLhXOw5dgpWo/p0cWcBZgEOPEYPl98O3tXlvxGxvyuyxT+9bObU4UcASYBESsf2949 +pIaAOl2AnvJRyVDIq2vqJZhpQo4AkwE11xTB6mMfwclzrlvFS4Xm9comOJp65AgwGQgEHi+8DWcL +8hHRh9dwDXncTJ8YcgSYRMgs/TePtOCS/N2gYSAre7l5gFkK6VwxBptOtyBhRoI5gMGIaDaJcv0b +wFOFHAEmEakviZY2NOFitBBD/4hl88JKjgGmLwjMzQNMNb7oQNO9d0F3XXyWx9HCsVPUQsYB04Qc +AaYTYc9LEDBNRiBHgCxHLgbIcuQIkOXIESDLkSNAliNHgCxHjgBZjhwBshw5AmQ1gP8H0uX7Koik +l3QAAAAASUVORK5CYII= + 0,0,0,0 + Image1 + + + True + + + Transparent + 2.4,0,13.8,0.8 + + + Arial,22,Bold + 0,0,0,0 + Text1 + + + Resumo do Faturamento + White + Expression + + + Transparent + 2.4,1,3.2,0.6 + + + Arial,16 + 0,0,0,0 + Text2 + + + Fornecedor: + [255:255:255] + Expression + + + Transparent + 5.8,1,2.6,0.6 + + + Arial,16,Bold + 0,0,0,0 + Text5 + + + {FaturamentoFornecedor.CODFORNEC} + [255:255:255] + DataColumn + + + Transparent + 8.6,1,10.2,0.6 + + + Arial,16,Bold + 0,0,0,0 + Text6 + + + {FaturamentoFornecedor.FORNECEDOR} + [255:255:255] + DataColumn + + + Transparent + 25.4,0,2.2,0.4 + + + Arial,7 + Right + 0,0,0,0 + Text18 + + + Página: {PageNofMThrough} + [255:255:255] + Expression + + + Transparent + 23.2,0.4,4.4,0.4 + + + Arial,7 + Right + 0,0,0,0 + Text19 + + + Data de emissão: {Time} + [255:255:255] + Expression + + + + + PageHeaderBand1 + + + + + Transparent + 0,2.8,27.7,0.8 + + + + PageHeaderBand2 + + + + + Transparent + + 0,4.4,27.7,6.4 + + + Transparent + 0.6,2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text8 + + + Qtde Pedidos: + Black + Expression + + + Transparent + 2.2,2.6,1.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text9 + + + Mix: + Black + Expression + + + Transparent + 4.8,2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text12 + + + {SumRunning(FaturamentoFornecedor.QTPEDIDOS)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + [191:191:191] + 0.2,0.6,6.4,0.8 + + + Arial,18,Bold + 0,0,0,0 + Text7 + + + Realizado + Black + Expression + + + Transparent + 3.6,3.8,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text3 + + + {SumRunning(FaturamentoFornecedor.VLFATURAMENTO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 0.6,3.2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text10 + + + Positivação: + Black + Expression + + + Transparent + 0.6,3.8,2.8,0.4 + + + Arial,12 + 0,0,0,0 + Text11 + + + Valor faturado: + Black + Expression + + + Transparent + 4.8,3.2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text14 + + + {SumRunning(FaturamentoFornecedor.QTCLIPOS)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 4.8,2.6,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text13 + + + {SumRunning(FaturamentoFornecedor.MIX)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 3.6,4.4,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text4 + + + {SumRunning(FaturamentoFornecedor.VLDEVOLUCAO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 0.2,4.4,3.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text15 + + + Valor devolução: + Black + Expression + + + Transparent + 3.6,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text16 + + + {SumRunning(FaturamentoFornecedor.VLVENDALIQ)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 0.6,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text17 + + + Valor líquido: + Black + Expression + + + Transparent + 7.4,2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text20 + + + Qtde Pedidos: + Black + Expression + + + Transparent + 9,2.6,1.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text21 + + + Mix: + Black + Expression + + + Transparent + 11.6,2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text22 + + + {SumRunning(FaturamentoFornecedor.QTPEDIDOS_ATACADO)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + [191:191:191] + 7,0.6,6.4,0.8 + + + Arial,18,Bold + 0,0,0,0 + Text23 + + + Atacado + Black + Expression + + + Transparent + 10.4,3.8,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text24 + + + {SumRunning(FaturamentoFornecedor.VLFATURAMENTO_ATACADO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 7.4,3.2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text25 + + + Positivação: + Black + Expression + + + Transparent + 7.4,3.8,2.8,0.4 + + + Arial,12 + 0,0,0,0 + Text26 + + + Valor faturado: + Black + Expression + + + Transparent + 11.6,3.2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text27 + + + {SumRunning(FaturamentoFornecedor.QTCLIPOS_ATACADO)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 11.6,2.6,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text28 + + + {SumRunning(FaturamentoFornecedor.MIX_ATACADO)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 7,4.4,3.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text29 + + + Valor devolução: + Black + Expression + + + Transparent + 10.4,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text30 + + + {SumRunning(FaturamentoFornecedor.VLVENDALIQ_ATACADO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 7.4,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text31 + + + Valor líquido: + Black + Expression + + + Transparent + 14.2,2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text32 + + + Qtde Pedidos: + Black + Expression + + + Transparent + 15.8,2.6,1.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text33 + + + Mix: + Black + Expression + + + Transparent + 18.4,2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text34 + + + {SumRunning(FaturamentoFornecedor.QTPEDIDOS_ECOMMERCE)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + [191:191:191] + 13.8,0.6,6.4,0.8 + + + Arial,18,Bold + 0,0,0,0 + Text35 + + + ECommerce + Black + Expression + + + Transparent + 17.2,3.8,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text36 + + + {SumRunning(FaturamentoFornecedor.VLFATURAMENTO_ECOMMERCE)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 14.2,3.2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text37 + + + Positivação: + Black + Expression + + + Transparent + 14.2,3.8,2.8,0.4 + + + Arial,12 + 0,0,0,0 + Text38 + + + Valor faturado: + Black + Expression + + + Transparent + 18.4,3.2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text39 + + + {SumRunning(FaturamentoFornecedor.QTCLIPOS_ECOMMERCE)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 18.4,2.6,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text40 + + + {SumRunning(FaturamentoFornecedor.MIX_ECOMMERCE)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 13.8,4.4,3.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text41 + + + Valor devolução: + Black + Expression + + + Transparent + 17.2,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text42 + + + {SumRunning(FaturamentoFornecedor.VLVENDALIQ_ECOMMERCE)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 14.2,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text43 + + + Valor líquido: + Black + Expression + + + Transparent + 21,2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text44 + + + Qtde Pedidos: + Black + Expression + + + Transparent + 22.6,2.6,1.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text45 + + + Mix: + Black + Expression + + + Transparent + 25.2,2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text46 + + + {SumRunning(FaturamentoFornecedor.QTPEDIDOS_VAREJO)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + [191:191:191] + 20.6,0.6,6.4,0.8 + + + Arial,18,Bold + 0,0,0,0 + Text47 + + + Varejo + Black + Expression + + + Transparent + 24,3.8,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text48 + + + {SumRunning(FaturamentoFornecedor.VLFATURAMENTO_VAREJO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 21,3.2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text49 + + + Positivação: + Black + Expression + + + Transparent + 21,3.8,2.8,0.4 + + + Arial,12 + 0,0,0,0 + Text50 + + + Valor faturado: + Black + Expression + + + Transparent + 25.2,3.2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text51 + + + {SumRunning(FaturamentoFornecedor.QTCLIPOS_VAREJO)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 25.2,2.6,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text52 + + + {SumRunning(FaturamentoFornecedor.MIX_VAREJO)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 20.6,4.4,3.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text53 + + + Valor devolução: + Black + Expression + + + Transparent + 24,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text54 + + + {SumRunning(FaturamentoFornecedor.VLVENDALIQ_VAREJO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 21,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text55 + + + Valor líquido: + Black + Expression + + + Transparent + 10.4,4.4,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text56 + + + {SumRunning(FaturamentoFornecedor.VLDEVOLUCAO_ATACADO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 17.2,4.4,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text57 + + + {SumRunning(FaturamentoFornecedor.VLDEVOLUCAO_ECOMMERCE)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 24,4.4,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text58 + + + {SumRunning(FaturamentoFornecedor.VLDEVOLUCAO_VAREJO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + 0.2,0.6,0,0 + + + StartPointPrimitive2 + + + bbcdcd3b63f64a5e9ffbabfe019d8d17 + + + 6.6,5.8,0,0 + + + EndPointPrimitive2 + + + bbcdcd3b63f64a5e9ffbabfe019d8d17 + + + 7,0.6,0,0 + + + StartPointPrimitive1 + + + 76c4973a12594763a1f8d42ac029192a + + + 13.4,5.8,0,0 + + + EndPointPrimitive1 + + + 76c4973a12594763a1f8d42ac029192a + + + 13.8,0.6,0,0 + + + StartPointPrimitive3 + + + 0603c2ea1d0d431fba606635a20376d0 + + + 20.2,5.8,0,0 + + + EndPointPrimitive3 + + + 0603c2ea1d0d431fba606635a20376d0 + + + 20.6,0.6,0,0 + + + StartPointPrimitive4 + + + 66f19039313e433ea321f84ca13dc125 + + + 27,5.8,0,0 + + + EndPointPrimitive4 + + + 66f19039313e433ea321f84ca13dc125 + + + + + FaturamentoFornecedor + + + DataBand1 + + + + + + Transparent + + True + 0,11.6,27.7,6.6 + + + Transparent + True + 0.2,0.4,27.2,6 + + + All;[155:155:155];1;Solid;False;4;Black + [242:242:242] + 4.05,0.65,1.4,2 + + + Arial,8 + 10b49194179e4276b998df63aed9fcf5 + 0,0,0,0 + CrossTab1_ColTotal1 + + + AllowMove, AllowResize, AllowSelect, AllowChange + Total + Black + + + All;[155:155:155];1;Solid;False;4;Black + [255:255:0] + 0,3.1,3.2,0.4 + + + Arial,8,Bold + 65daccb71c69494f8a2942042e258729 + 0,0,0,0 + CrossTab1_RowTotal1 + + + AllowMove, AllowResize, AllowSelect, AllowChange + Total + [10:18:255] + + + All;[155:155:155];1;Solid;False;4;Black + [242:242:242] + 0,0.65,3.2,2 + + Arial,10 + 32a06d2d8d574ed1a5d48d9c75782acb + 0,0,0,0 + CrossTab1_Row1_Title + + + AllowMove, AllowResize, AllowSelect, AllowChange + Produto + [105:105:105] + Expression + Row:CrossTab1_Row1 + + + All;[155:155:155];1;Solid;False;4;Black + [165:165:165] + 0,0,3.2,0.6 + + Arial,12,Bold + 1373bf675e5d44969d79bca82d5fb2df + 0,0,0,0 + CrossTab1_LeftTitle + + + AllowMove, AllowResize, AllowSelect, AllowChange + Faturamento + [255:255:255] + Expression + LeftTitle + + + All;[155:155:155];1;Solid;False;4;Black + [165:165:165] + 3.25,0,2.2,0.6 + + Arial,8 + 0497f88a6270440ca7d6dddcc98281d5 + 0,0,0,0 + CrossTab1_RightTitle + + + AllowMove, AllowResize, AllowSelect, AllowChange + Filial + [255:255:255] + Expression + RightTitle + + + CODIGO_DESCRICAO + All;[155:155:155];1;Solid;False;4;Black + White + 0,2.7,3.2,0.4 + + {Faturamento_Filial_RCA.Produto_Faturamento.CODIGO_DESCRICAO} + + Arial,8 + 474d1db4053f4539afb7424f7102215d + Left + 0,0,0,0 + CrossTab1_Row1 + + + AllowMove, AllowResize, AllowSelect, AllowChange + CODIGO_DESCRICAO + [105:105:105] + 65daccb71c69494f8a2942042e258729 + {Faturamento_Filial_RCA.Produto_Faturamento.CODIGO_DESCRICAO} + + + NOME_FILIAL + All;[155:155:155];1;Solid;False;4;Black + [242:242:242] + 3.25,0.65,0.8,2 + + {Faturamento_Filial_RCA.Filial_Faturamento.NOME_FILIAL} + + Arial,8 + 216d629069484d5eb7afc2f022bd38a1 + 0,0,0,0 + CrossTab1_Column1 + + + AllowMove, AllowResize, AllowSelect, AllowChange + NOME_FILIAL + [105:105:105] + ,,,,,Angle=90 + 10b49194179e4276b998df63aed9fcf5 + {Faturamento_Filial_RCA.Filial_Faturamento.NOME_FILIAL} + + + VLVENDALIQ + Adv[155:155:155];1;Solid;[155:155:155];1;Solid;[155:155:155];1;Solid;[155:155:155];1;Solid;False;4;Black + [255:255:255] + 3.25,2.7,0.8,0.4 + + + Arial,8 + 1466cdb03fa64fea9968d964f118495c + 0,0,0,0 + 2,0 + CrossTab1_Sum1 + + + AllowMove, AllowResize, AllowSelect, AllowChange + 0 + Black + + 2 + , + . + 1 + DecimalDigits + + {Faturamento_Filial_RCA.VLVENDALIQ} + + + + + Faturamento_Filial_RCA + + + + CrossTab1 + + + + + + + + Faturamento_Filial_RCA + + + DataBand2 + + + + + + 0.2,5,6.4,5.2 + Black + + + bbcdcd3b63f64a5e9ffbabfe019d8d17 + RectanglePrimitive2 + + + + + 7,5,6.4,5.2 + Black + + + 76c4973a12594763a1f8d42ac029192a + RectanglePrimitive1 + + + + + 13.8,5,6.4,5.2 + Black + + + 0603c2ea1d0d431fba606635a20376d0 + RectanglePrimitive3 + + + + + 20.6,5,6.4,5.2 + Black + + + 66f19039313e433ea321f84ca13dc125 + RectanglePrimitive4 + + + + + + + cf88027564f845da9d9b9d3d9abbd75f + 1,1,1,1 + Page1 + Landscape + 21 + 29.7 + + + + + System.Dll + System.Drawing.Dll + System.Windows.Forms.Dll + System.Data.Dll + System.Xml.Dll + Stimulsoft.Controls.Dll + Stimulsoft.Base.Dll + Stimulsoft.Report.Dll + + Report + 1/23/2021 6:40:06 PM + 1/12/2021 9:12:08 PM + C:\Desenvolvimento\NestJS\supplier\src\domain\reports_model\Faturamento_Filial_Rca_Fornecedor.mrt + 00af8d0080c940f39229bd80871d098d + Report + Centimeters + 2020.5.2.0 + + CSharp + + \ No newline at end of file diff --git a/src/domain/reports_model/faturamentoFornecedor.mrt b/src/domain/reports_model/faturamentoFornecedor.mrt new file mode 100644 index 0000000..898b715 --- /dev/null +++ b/src/domain/reports_model/faturamentoFornecedor.mrt @@ -0,0 +1,606 @@ + + + + + + + winthor + 9HpDCe9oS+zzYaGBfJz2p8Qqu6HrCcKVR3q9yU3c9Q781rcC3XZCdc9h0MnxPfP7kBS1omJu08jyHDm9+twyKvRWjYzdbJLw/WzMBPGE9ufgKnHC1w2jcX8VbRhNxOsqwzDNoOt2Qk3yZ+jMS8xu6/XQ9QlbbJFFa3/oBHdJsefm8kNM5xExGU9hqHRzSWqLgCCRL81b8sjPbFUYchEqRo1UUwLrEdk= + 72f5ef03aa7a4a7291725cca262d22d7 + winthor + + + + + FaturamentoFornecedor + + ORIGINAL,CODFORNEC,CODFORNEC,CODFORNEC,System.Int32,_x0035_448895341174341b460117b8311daf4 + ORIGINAL,FORNECEDOR,FORNECEDOR,FORNECEDOR,System.String,d1654731b9344bb08da0a97fea28544a + ORIGINAL,MIX,MIX,MIX,System.Decimal,b12a7d8c0b4e47d69e7f81daf41c5250 + ORIGINAL,QTCLIPOS,QTCLIPOS,QTCLIPOS,System.Decimal,ee067f9da90d4a73bf0d45fc18ab165e + ORIGINAL,VLFATURAMENTO,VLFATURAMENTO,VLFATURAMENTO,System.Decimal,b2b047b5789f4534866ce48cc32bb824 + ORIGINAL,QTPEDIDOS,QTPEDIDOS,QTPEDIDOS,System.Decimal,_x0036_e112a797a6b41e497aac01cd964b720 + ORIGINAL,VLDEVOLUCAO,VLDEVOLUCAO,VLDEVOLUCAO,System.Decimal,ce6c0fd35d0b45198d9f68d336211027 + ORIGINAL,VLVENDALIQ,VLVENDALIQ,VLVENDALIQ,System.Decimal,_x0037_6c83a100cb246db882dc2f923302e4c + + 30 + + 8cc13efa35d44693810d295d49c3cf00 + FaturamentoFornecedor + winthor + + DATA_INICIO,DATA_INICIO,106,0,5d318106c6724467b60f0a354969df9f + DATA_FIM,DATA_FIM,106,0,1ccb45f2c08941f2be5f3678e4a9b2af + CODFORNEC,CODFORNEC,111,0,30386588e8ee42509b80b6b6208ede83 + + SELECT CODFORNEC, FORNECEDOR, + SUM(MIX) MIX, + SUM(QTPEDIDOS) QTPEDIDOS, + SUM(QTCLIPOS) QTCLIPOS, + SUM(VLFATURAMENTO) VLFATURAMENTO, + SUM(VLDEVOLUCAO) VLDEVOLUCAO, + ( SUM(VLFATURAMENTO) - SUM(VLDEVOLUCAO) ) VLVENDALIQ +FROM ( +SELECT PCFORNEC.CODFORNEC, + PCFORNEC.FORNECEDOR, Count(DISTINCT PCMOV.CODPROD) MIX, + COUNT(DISTINCT PCMOV.NUMPED) QTPEDIDOS, + Count(DISTINCT PCMOV.CODCLI) QTCLIPOS, Sum(PCMOV.QT * PCMOV.PUNIT) + VLFATURAMENTO, + 0 VLDEVOLUCAO + +FROM PCMOV INNER JOIN + PCPRODUT ON PCMOV.CODPROD = PCPRODUT.CODPROD INNER JOIN + PCFORNEC ON PCPRODUT.CODFORNEC = PCFORNEC.CODFORNEC INNER JOIN + PCUSUARI ON PCMOV.CODUSUR = PCUSUARI.CODUSUR +WHERE PCMOV.DTMOV BETWEEN :DATA_INICIO AND :DATA_FIM +AND PCMOV.CODUSUR = + PCUSUARI.CODUSUR AND PCMOV.CODPROD = PCPRODUT.CODPROD AND PCPRODUT.CODFORNEC = + PCFORNEC.CODFORNEC AND PCMOV.CODOPER IN ('S') AND PCMOV.DTCANCEL IS NULL + AND PCFORNEC.CODFORNEC = :CODFORNEC +GROUP BY PCFORNEC.CODFORNEC, PCFORNEC.FORNECEDOR + +UNION ALL + +SELECT PCFORNEC.CODFORNEC, + PCFORNEC.FORNECEDOR, 0 MIX, + 0 QTPEDIDOS, + 0 QTCLIPOS, 0 + VLFATURAMENTO, + Sum(PCMOV.QT * PCMOV.PUNIT) VLDEVOLUCAO + +FROM PCMOV INNER JOIN + PCPRODUT ON PCMOV.CODPROD = PCPRODUT.CODPROD INNER JOIN + PCFORNEC ON PCPRODUT.CODFORNEC = PCFORNEC.CODFORNEC INNER JOIN + PCUSUARI ON PCMOV.CODUSUR = PCUSUARI.CODUSUR +WHERE PCMOV.DTMOV BETWEEN :DATA_INICIO AND :DATA_FIM +AND PCMOV.CODUSUR = + PCUSUARI.CODUSUR AND PCMOV.CODPROD = PCPRODUT.CODPROD AND PCPRODUT.CODFORNEC = + PCFORNEC.CODFORNEC AND PCMOV.CODOPER IN ('ED') AND PCMOV.DTCANCEL IS NULL + AND PCFORNEC.CODFORNEC = :CODFORNEC +GROUP BY PCFORNEC.CODFORNEC, PCFORNEC.FORNECEDOR ) +GROUP BY CODFORNEC, FORNECEDOR + + + + + + + + ,CODFORNEC,CODFORNEC,Código_x0020_do_x0020_fornecedor,System.Double,,False,False,True,False,,df7acb5f13f048c3a4173a1f23175076,True + ,DATA_INICIO,DATA_INICIO,Data_x0020_inicial_x0020_do_x0020_relatório,System.DateTime,_x0031__x002F_20_x002F_2021_x0020_7:23:33_x0020_AM,False,False,True,False,,_x0038_c3129b8fc1f45ae9c67d898b79f4608,True + ,DATA_FIM,DATA_FIM,Data_x0020_final_x0020_do_x0020_relatório,System.DateTime,_x0031__x002F_20_x002F_2021_x0020_7:24:13_x0020_AM,False,False,True,False,,_x0039_17c1303d9084d4fa23dd3ecc56bbcbb,True + + + EngineV2 + + fa1367de86ac445aada0448f464c1ea5 + + + + None;Black;2;Solid;False;4;Black + Transparent + + + [209:72:65] + 0,0.4,19,1.6 + + + True + Transparent + True + 0,0,2.4,1.6 + + + 68, 114, 196 + iVBORw0KGgoAAAANSUhEUgAAAIAAAABXCAYAAADMBU1cAAAAAXNSR0IArs4c6QAAAARnQU1BAACx +jwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAABM7SURBVHhe7Vx5cBxVfv66e7pHlyXja8HGh2zr +tCTfGGOMlyXLhmSBFFUku6SylUrtUpWQbGpJKvlnkz9SqaSyf+TaYquyqewmcQKEqwyUORcbn4AX +Y/mQLVmSZRmxgMGyrWs0PX3k+73plkfySNYxOqyZz57u169fv379ft/veO91S/MJ5JC10IN9DlmK +HAGyHDkCZDlyBMhy5AiQ5cgRIMuRI0CWI0eALEeOAFmOHAGyHDkCZDlyBMhyzDgCOLLx1TaHKcCM +I8Bbjz0MdLQht0Q5NZhxBMjTomj7xv3QxsIAMRh2D/ok7XmyzWGUmHEEMHwfRj8lqo1BkD0daF1T +hdbySvh6LqwZC2Zcb/kUvB0hAfzRN80vLEKfEUftrv8cm+XIYeYRYDxImIWoPXMRbvWdZEOQmcOo +cHMQgH69n7venc/gyLpy7NlYR7PfBTfh0e87sFwPp6uX4MwTT/KJErDjvYwL4ti1/Q4cKVuFt+5Y +D/Rdgd0fV+GC4sjn53C2qhSNK5fjzXu2Mi+RneSRdwJnEvY+9ojfXHar73tBhuxtx29aPs/3n/4f +P+7bfj+zjlYt9Q+v2+A7QZn20tv9D77/h77v8vhKzD9bttj3r/b6CTnPTWvFbf7Lmzf6CZb96PHv ++SdqVvgxm+dY3nPj/uG6u6Rk1iGjFsARLWLsphRpQtrEZmlBkvtDW+qgWQXAt38XFkxEmL2hvgkL +er+EYfcybnAQMwHT0xk6OGi5YzXiBnW9uECVlc3K/Q2ovvwFdAYJF48fRZHtIM+g/XABl4Hj1uOH +pGTWIaME0NmZcdjsUbIgFOAY4etaMpBLIdD8rovklQ5XJohYtcFznpmPhO4h/tTPglLMk5GDG4Hh +GijwiwfqkJ27aA6tnQvd9nDP+0fh+SbOryxDQ105NLqHbEVmCaCZuFC5Cg1VyxmZ9YzLGtz75z8k +f5LNCq91jUISylHaa8sp5ulanL5fR3TzZiml4ArpdJ70DSRc7gMSamyI0d1NQ2AA/V3Ip61adfoc +VrQ24cqC+Wi/cyPQ0gBXGpxlyCgBQuRTU8+sLYejd41pOK9QVYt+nSHfewdpTQCbQuy8YyuK8uZS +QCYsqU8EywDQ9POBbYz8A5i+hwRJ0m3QCvkMBAm6OW507PvqnSQAXRThsZzyDXoB7tl/GPGEgX2P +fQdGQLxswqQ8sadFEHEMdFSso1qy/8fAAtcyUHfgOBr+4Lfx4aYaaC+/hO3//QzOe704s2IJ/D2v +4aPvfxet1eVY/torvBnr9qjbFKpHqVoUdt3ZDtiej9Pr10D75Yc4sL4cO954H73ytK6F+nUcFVzt +5HUuzf9VRNwEduw7OG63dTMjs18GURbNlUuDA4I+d3Xzr5RhpfEdHejmHWpnRLS07zI1nXlz5wuP +YMRpEy60Myigfy++NUlfxgE+E2drlqFizz44i0qVpjsSLHbx+vYmWpUaXlwE7KdVuWsDNNNDx092 +ov7Zf8f6b30HpX/0x6wjkow9sowEk0oAV9NReaZdTeqNul9DIQzai5DlMDBYwigmJU+Sex76BlY0 +nkJZ0yeDrxUw7TMdHioihRUIpKyABVIvyxZMPgEa21VwNmoLMArIZM57levgF7q4taePGTrKG6np +ZiDUHEaNm4sAYUu9BIeApgr4DboAMTGpWj4eiGUQ+qg6AlOgdkF6tuKmUhkRclyEYZgwuTdU67lh +eqIyUsIXYYt5ceLoJ5vFUTgTrXiG46YiQEvdCkQTyeFdpiFy7uPmaOlcnK4qRduqRcoqzHL530QE +6OlGXp+DM+WVVEufwhFVzSBcDwXdV1GcP4ehhMExRAGsrr6Mxi4zETOeAGKVxRafWFcOGxYuFBRx ++C5rgGqWP2Pw6U/8OSXBEeNJ0wTmWLxPcvJotmLGB4E+K9USFEIkqmIAmwKJehQOg79+iqetYhlM +2mrXMLD873+EvIe/HQYHN4D4eBd6P12KUcD6LRUJ2j1xWHteBh54CMhnnswOjlQde08FoNzLrKUp +7b2JDOvMHwVI6xIx4MxZwGItahq3GE75CkSYPFK3BsVOJ6JOBH2FOi4tLMc9v3g7ee1I6L2I+rs3 +IL/PR8XpdjhGBFpzEwwhm2ZT6BSiVwiUlSWnjdNAmqbZ8qaCsECIwgaZUR7nCKCQmWEgK73SiZYt +m9RqnqDTKsCWUxz3Cxm8HjSuqQrm8anVhoaKhg44FEYkzQyU1GDwstNrVnIfh21ZqD3epsq9/8AO +zD93LlmQdX257WvY+vOdwbHAUa4n4jv4YP1aLIhdheOIYyqEy/vZfEjNc2ElIvhVSR7W/fI05tA8 +uXx6Y4aS4uahajqIcN0iWLaFiBtBQiTrU12vdirhi2keCjULGLuIPMuh0FzUfnBSKe+o4EXwzqa1 +aKy9HV/p7uOxD03jTfSYIhzsCAxN5rHjWH7VwScblmF/zUb09HUFFcw83NwEkOZbOub+9Z8hbtqM +BSK0wi6Obt+kzsoy8HWgtOu37oAbc5HnFwF5/I0AZR5lw6oO3rERpVcvwyazEoaDT5dWYVXLJyht +/gyVTR+j+lwzypqacaJkAdsTh+e4mINLqP/NR5Tt8PmbabjJCZDEvN97Anb8Wufm94t2xtjh1z+e +48RR3NtNi2Fh5b79N1ynGDhnd2FxdyfLMwhlvNG+pByb9/yCJ1ICBGVKDDzwYT3mfvdxEtJCPt3B +so+bEfniCv1tZkcumcCsIIC8IjT3wW8FBzw0TLx257X3BFKx+8Fvwjapi5F+uIsWjSj8EBLDnNq8 +Wb2RpFOIEm/ct/cdSLg3KLZhORkB5HG78C/+ihmeWqZ22Munt6+nS0pjkaYZs4IAYqGX/uu/JA8I +CT6reqlxwXEqas83UBN1XCgppfBurJFSt4QWlgwXA1yOmDckju/ZiJGIAnmdLeo66r4zDbOCAKJ1 +IpAek0M5drfpeYjJiyI9VwL/zTT/2//3v/BdxuPMu+/IXl54Y41Ugu79kqPCa10Vu23JiN5cXI+m +W+gsLlHtkSvjwjWScqZhVhAgxPr3j7D3LaZ05DseTmzeQLMbS75HyCi9/W/+Ev0RHZesuSQEDfgo +XwFr/Icfs+w1na+576scZQQHw0AmsOYvvZ1aL0eeihtib76lzs0kZJYAGvVCfgHk4cV/ThnLihYi +ZsonouJ3qYVxm2PwfPWaGPr6aJYNFNgm7qw/mWzUKBvW/vYbapwfYs7cW9IOMUOIYaHBV9rvBQXl +jeV9P/03lZ5JyKhsfPGq7rUqxSAnNWCq4KH2rQ+CNP22qeHo1+9V6SNbNkCnVbCLbDYsvelXY/o0 +KKitUMFcCDvOIV6QTgefZDETQGf7x+zha3W6bnIiayYhowQQtehm8BMiZujK304VJPjD4hUUTgQJ +PaI+GSu5cI4SAxbJWi9R8c4xkZBKjxbbf/RjeIlr8X79y6+T6sNHAZq4Fs1GSW9PkDNBjMS2CSKj +BNC0BOp+9nxwBOQl+ml6O5UpnApItC5oml8CUXRXExtk49DdteQmXQA54M0r4X6MK3y3cGDHoWMI +/dKndC3DjyDEAoCDxAInAyuJ4W1HijongMxaAJiIb79bpcTnedTIkzIeZxQmzzHpxoD3FOV+6EA9 +eqK2ErjOoHBe/2W2xUHZ63uQ0AwKLzk8G4r0yyKsU4vCN6wBd7aUmi1fJ12HgTw2Qk+wfLJ7J+IG +JYaCHseFp/6RieTLsfLLlDPJMAHEveroKF3DoNuCSQnkxakNztXg7CSDhJP+kgm3BIoVCaXTInGN +QSHdwspViNLPj20+Llln+ZHjKg4QlyYB5v4HvyZVUxCB2RFIkmXk39maFbBpkiYaAykB+VHMi5g4 +tWYRtH4hlmSm3HcCyCgBXGqZwd69981XEbN0jrLYWK0HbZtroF3qHNxZkwnPwdoT9RRW8vFkBPdF +XrH6eHTMEIHLvjAfvYbJQ12N6Ze1tACXLtLtpDwTwwR5h/DsyiVkYBz+ui3Qx78MqqDcJ4ey+U/8 +CQr6LbSsLUWM95B3ojKBjBJAzaxRCxM0sXUnWnF1/hL4cRNOwkPH5jXoWL0Eh+WrnN0vAa1ngHON +QBv36X6tDN5aW1WHjxnUdt80aY28geHb3R+dlE8Gxw52trIYlGRN03lcKSpWdcbpLpq2rseZqmVo +Xr0M9VWlaKhegbPVy2BFNZSfake8txtuwlGuaFgE/JFX3NRrbr7smTlgOeT584VbiOv5cOnSzmyU +j18yg4wSIITJ9jtscdm+d1HW9jHOVVSqz7JkEmZh35doevJP0fQb96Ppga+j8dfvV7+m4BceN/7a +DqB0ITtj7IFUsjN1lL7yEizNRGdhMdsTms7xQy7fRCJVH2+iRSiBE7GQ55rkvIsix0EhXU2EzV11 +vJ2dUIi+rm728MhDYfmc/dNn/wvtlaU4z19LWSUOb6ojMa5/7i9KDJK4B7d0Mbj+jHVnAJl9IeQG +kFtpCaqDfI7dzyGSQZYoPy0nAy7K614yHl8QpaYVKebLwNISi8fOUnCZoxfcmL7yZBcvIrFoAUwZ +Io4AH3Focd5NJhJVhugYK5C2DNVgITitQCTBRtE3J4VFY8176HIfllfPqv74AAtLHS7rpgKE9Tus +5O271+KBgyfVsceieuwS2taUobcwikIvH35vH1a+ux/OqnI183iotgILEn1qMSrhGag6Szekhj7j +twdTRgCZGpV/Ohur+nO4u4aEYEmRuRRT064afapaf5P+ZYf7QhR1ODzUdaxPyHWjsuSWHfHovJJE +SZAQltxPmjOEO6ralPaHJn4gL7yXHKvCye8ZRPZySrr84toV+Mq+9zjEXMycAHRZPiu5/JN/Ruc/ +PSWMYB+wFYw8E36CgylaHFoaWVV0+Ctr/FSRQWnJODHk0SYPsmAjMULYNyqR7qealGyWPJfitsqP +Xisiw7hkYmSE9Y2mLG9ksWx4DyV8QZoeUtWFBfkLk9cSASQt13MvtYWntFPHIFYcBfOTGSFk+ppP +Pe97P8Dq0y0UskXX5VHbySJaJJnYEisjH7IajAWMnivji2tSkObxcphMiBM79+jDFDRT0YBkKRDt +9jmCEnex6uR5GrD0cxaC137nt1hPaDHHh1lDAC91OEYM59mGlptqyASSL+NSiTFEs4cgXNoWyZiW +hurGc0jYHAuxaMqCpEJhJ+OoMHYaJ2YFAZ599ln09Ayed5eFnaEkeP755wet608H5BsHP7TbEhze +ABJfVLd1oJvDzyIGfqkk6F+9inUEgfE4kfHesG0br776Kvbv3x/kXMPx48eVEIZqYSwWU/lD4TDg +2b17t9rv3btXlUm3oiZf8STkff4UvPDCC4oYqUhnFaQtUnboObmP5Le1tQU5SUi55557Lm17WRsL +BMnh4HXRr/dT9rEgY2QoeXOz7lgDlhw+gjwSWJaaI1EL9/7Hz3lygiLkA2UUTz/9dJAaHkPLsDOD +1GCwo30KSJ2XfZiXip07d/okiE+BqX0qwmtChPWlor9f/uqg75O4ah+C5AlSg0GyXldHCLl7wk7W +Nxzee/z31d8wVH8LMT74njeC+puHAt7DcdgG9bgDueNCxi1AJJJ+TJqqoZZlDbICjzzyiLIcb7zx +RpCT1LSCggJlysOfQK6TcyGkjGEYyrTLfixokencAOpbwABicaSu8F6pbc3Ly1NtEeswFAaNU+TT +T1SgN1xsVrjvHfV2kIoBYsMUGgYDPWtG2T72h3rc9P09WmScAI8++iieeeYZZdZTIR384osv4sCB +A9i+ffsgX9zQ0KA6edu2bUGOuEeGQ2n8teSFZBAIeXbt2oU9e/YEOcNj6LXLly/HK6+8gsbGRhw8 +eDDITd67vLwchw4dUm1ObUc8Hh8gyFD4HLJ9+Ld/p74fkBW8dN4gSp2TP4YtM4B9h18PcqcPUzoT +OOvBnjzy5BMo2f06Kl56GX5NbXJySOb3SSKhTEv5YkRcE71R5mlFqGtoVpdOF3IEyCDUl8y9l9G6 +dgMStACVTR1JUx8YENdNoK1ypZrIkehd/phlZfOFtJZuqjB9d56VYHea85GI2NR2E+2VyyhoCp5n +JC4wXt1FS8CEJu8J6DDpx2XJemIDuYkhR4AMQqIL34rDcEw1Xo8xlmioXgrDjqv1jJM//IGa0JEI +ceArISM23DuqU4IcATIJClezo/h8fokSquZ7arGmuWYx2lctpqzTdPeho5TC9DEgFwNMBtijLRVL +OIS02MMjG/hLhXOw5dgpWo/p0cWcBZgEOPEYPl98O3tXlvxGxvyuyxT+9bObU4UcASYBESsf2949 +pIaAOl2AnvJRyVDIq2vqJZhpQo4AkwE11xTB6mMfwclzrlvFS4Xm9comOJp65AgwGQgEHi+8DWcL +8hHRh9dwDXncTJ8YcgSYRMgs/TePtOCS/N2gYSAre7l5gFkK6VwxBptOtyBhRoI5gMGIaDaJcv0b +wFOFHAEmEakviZY2NOFitBBD/4hl88JKjgGmLwjMzQNMNb7oQNO9d0F3XXyWx9HCsVPUQsYB04Qc +AaYTYc9LEDBNRiBHgCxHLgbIcuQIkOXIESDLkSNAliNHgCxHjgBZjhwBshw5AmQ1gP8H0uX7Koik +l3QAAAAASUVORK5CYII= + 0,0,0,0 + Image1 + + + True + + + Transparent + 2.4,0,13.8,0.8 + + + Arial,22,Bold + 0,0,0,0 + Text1 + + + Resumo do Faturamento + White + Expression + + + Transparent + 2.4,1,3.2,0.6 + + + Arial,16 + 0,0,0,0 + Text2 + + + Fornecedor: + [255:255:255] + Expression + + + Transparent + 5.8,1,2.6,0.6 + + + Arial,16,Bold + 0,0,0,0 + Text5 + + + {FaturamentoFornecedor.CODFORNEC} + [255:255:255] + DataColumn + + + Transparent + 8.6,1,10.2,0.6 + + + Arial,16,Bold + 0,0,0,0 + Text6 + + + {FaturamentoFornecedor.FORNECEDOR} + [255:255:255] + DataColumn + + + + + PageHeaderBand1 + + + + + Transparent + + 0,2.8,19,7.4 + + + Transparent + 1.2,2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text8 + + + Qtde Pedidos: + Black + Expression + + + Transparent + 2.8,2.6,1.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text9 + + + Mix: + Black + Expression + + + Transparent + 5.4,2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text12 + + + {SumRunning(FaturamentoFornecedor.QTPEDIDOS)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + [191:191:191] + 0.2,0.6,7,0.8 + + + Arial,18,Bold + 0,0,0,0 + Text7 + + + Realizado + Black + Expression + + + Transparent + 4.2,3.8,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text3 + + + {SumRunning(FaturamentoFornecedor.VLFATURAMENTO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 1.2,3.2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text10 + + + Positivação: + Black + Expression + + + Transparent + 1.2,3.8,2.8,0.4 + + + Arial,12 + 0,0,0,0 + Text11 + + + Valor faturado: + Black + Expression + + + Transparent + 5.4,3.2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text14 + + + {SumRunning(FaturamentoFornecedor.QTCLIPOS)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 5.4,2.6,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text13 + + + {SumRunning(FaturamentoFornecedor.MIX)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 4.2,4.4,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text4 + + + {SumRunning(FaturamentoFornecedor.VLDEVOLUCAO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 0.8,4.4,3.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text15 + + + Valor devolução: + Black + Expression + + + Transparent + 4.2,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text16 + + + {FaturamentoFornecedor.VLVENDALIQ} + Black + + 2 + , + . + 1 + NegativeInRed + + DataColumn + + + Transparent + 1.2,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text17 + + + Valor líquido: + Black + Expression + + + 0.2,0.6,0,0 + + + StartPointPrimitive2 + + + bbcdcd3b63f64a5e9ffbabfe019d8d17 + + + 7.2,5.8,0,0 + + + EndPointPrimitive2 + + + bbcdcd3b63f64a5e9ffbabfe019d8d17 + + + + + FaturamentoFornecedor + + + DataBand1 + + + + + + 0.2,3.4,7,5.2 + Black + + + bbcdcd3b63f64a5e9ffbabfe019d8d17 + RectanglePrimitive2 + + + + + + + cf88027564f845da9d9b9d3d9abbd75f + 1,1,1,1 + Page1 + 29.7 + 21 + + + + + System.Dll + System.Drawing.Dll + System.Windows.Forms.Dll + System.Data.Dll + System.Xml.Dll + Stimulsoft.Controls.Dll + Stimulsoft.Base.Dll + Stimulsoft.Report.Dll + + Report + 1/20/2021 8:24:10 AM + 1/12/2021 9:12:08 PM + C:\Desenvolvimento\NestJS\supplier\src\domain\reports_model\faturamentoFornecedor.mrt + d1776a374b1d49c9866dacaccdac5830 + Report + Centimeters + 2020.5.2.0 + + CSharp + + \ No newline at end of file diff --git a/src/domain/reports_model/faturamentoFornecedor1.mrt b/src/domain/reports_model/faturamentoFornecedor1.mrt new file mode 100644 index 0000000..15a72b4 --- /dev/null +++ b/src/domain/reports_model/faturamentoFornecedor1.mrt @@ -0,0 +1,598 @@ + + + + + + + winthor + 9HpDCe9oS+zzYaGBfJz2p8Qqu6HrCcKVR3q9yU3c9Q781rcC3XZCdc9h0MnxPfP7kBS1omJu08jyHDm9+twyKvRWjYzdbJLw/WzMBPGE9ufgKnHC1w2jcX8VbRhNxOsqwzDNoOt2Qk3yZ+jMS8xu6/XQ9QlbbJFFa3/oBHdJsefm8kNM5xExGU9hqHRzSWqLgCCRL81b8sjPbFUYchEqRo1UUwLrEdk= + 72f5ef03aa7a4a7291725cca262d22d7 + winthor + + + + + FaturamentoFornecedor + + ORIGINAL,CODFORNEC,CODFORNEC,CODFORNEC,System.Int32,_x0035_448895341174341b460117b8311daf4 + ORIGINAL,FORNECEDOR,FORNECEDOR,FORNECEDOR,System.String,d1654731b9344bb08da0a97fea28544a + ORIGINAL,MIX,MIX,MIX,System.Decimal,b12a7d8c0b4e47d69e7f81daf41c5250 + ORIGINAL,QTCLIPOS,QTCLIPOS,QTCLIPOS,System.Decimal,ee067f9da90d4a73bf0d45fc18ab165e + ORIGINAL,VLFATURAMENTO,VLFATURAMENTO,VLFATURAMENTO,System.Decimal,b2b047b5789f4534866ce48cc32bb824 + ORIGINAL,QTPEDIDOS,QTPEDIDOS,QTPEDIDOS,System.Decimal,_x0036_e112a797a6b41e497aac01cd964b720 + ORIGINAL,VLDEVOLUCAO,VLDEVOLUCAO,VLDEVOLUCAO,System.Decimal,ce6c0fd35d0b45198d9f68d336211027 + ORIGINAL,VLVENDALIQ,VLVENDALIQ,VLVENDALIQ,System.Decimal,_x0037_6c83a100cb246db882dc2f923302e4c + + 30 + + 8cc13efa35d44693810d295d49c3cf00 + FaturamentoFornecedor + winthor + + SELECT CODFORNEC, FORNECEDOR, + SUM(MIX) MIX, + SUM(QTPEDIDOS) QTPEDIDOS, + SUM(QTCLIPOS) QTCLIPOS, + SUM(VLFATURAMENTO) VLFATURAMENTO, + SUM(VLDEVOLUCAO) VLDEVOLUCAO, + ( SUM(VLFATURAMENTO) - SUM(VLDEVOLUCAO) ) VLVENDALIQ +FROM ( +SELECT PCFORNEC.CODFORNEC, + PCFORNEC.FORNECEDOR, Count(DISTINCT PCMOV.CODPROD) MIX, + COUNT(DISTINCT PCMOV.NUMPED) QTPEDIDOS, + Count(DISTINCT PCMOV.CODCLI) QTCLIPOS, Sum(PCMOV.QT * PCMOV.PUNIT) + VLFATURAMENTO, + 0 VLDEVOLUCAO + +FROM PCMOV INNER JOIN + PCPRODUT ON PCMOV.CODPROD = PCPRODUT.CODPROD INNER JOIN + PCFORNEC ON PCPRODUT.CODFORNEC = PCFORNEC.CODFORNEC INNER JOIN + PCUSUARI ON PCMOV.CODUSUR = PCUSUARI.CODUSUR +WHERE PCMOV.DTMOV BETWEEN {DATA_INICIO} AND {DATA_FIM} +AND PCMOV.CODUSUR = + PCUSUARI.CODUSUR AND PCMOV.CODPROD = PCPRODUT.CODPROD AND PCPRODUT.CODFORNEC = + PCFORNEC.CODFORNEC AND PCMOV.CODOPER IN ('S') AND PCMOV.DTCANCEL IS NULL + AND PCFORNEC.CODFORNEC = {CODFORNEC} +GROUP BY PCFORNEC.CODFORNEC, PCFORNEC.FORNECEDOR + +UNION ALL + +SELECT PCFORNEC.CODFORNEC, + PCFORNEC.FORNECEDOR, 0 MIX, + 0 QTPEDIDOS, + 0 QTCLIPOS, 0 + VLFATURAMENTO, + Sum(PCMOV.QT * PCMOV.PUNIT) VLDEVOLUCAO + +FROM PCMOV INNER JOIN + PCPRODUT ON PCMOV.CODPROD = PCPRODUT.CODPROD INNER JOIN + PCFORNEC ON PCPRODUT.CODFORNEC = PCFORNEC.CODFORNEC INNER JOIN + PCUSUARI ON PCMOV.CODUSUR = PCUSUARI.CODUSUR +WHERE PCMOV.DTMOV BETWEEN {DATA_INICIO} AND {DATA_FIM} +AND PCMOV.CODUSUR = + PCUSUARI.CODUSUR AND PCMOV.CODPROD = PCPRODUT.CODPROD AND PCPRODUT.CODFORNEC = + PCFORNEC.CODFORNEC AND PCMOV.CODOPER IN ('ED') AND PCMOV.DTCANCEL IS NULL + AND PCFORNEC.CODFORNEC = {CODFORNEC} +GROUP BY PCFORNEC.CODFORNEC, PCFORNEC.FORNECEDOR ) +GROUP BY CODFORNEC, FORNECEDOR + + + + + + + + + EngineV2 + + fa1367de86ac445aada0448f464c1ea5 + + + + None;Black;2;Solid;False;4;Black + Transparent + + + [209:72:65] + 0,0.4,19,1.6 + + + True + Transparent + True + 0,0,2.4,1.6 + + + 68, 114, 196 + iVBORw0KGgoAAAANSUhEUgAAAIAAAABXCAYAAADMBU1cAAAAAXNSR0IArs4c6QAAAARnQU1BAACx +jwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAABM7SURBVHhe7Vx5cBxVfv66e7pHlyXja8HGh2zr +tCTfGGOMlyXLhmSBFFUku6SylUrtUpWQbGpJKvlnkz9SqaSyf+TaYquyqewmcQKEqwyUORcbn4AX +Y/mQLVmSZRmxgMGyrWs0PX3k+73plkfySNYxOqyZz57u169fv379ft/veO91S/MJ5JC10IN9DlmK +HAGyHDkCZDlyBMhy5AiQ5cgRIMuRI0CWI0eALEeOAFmOHAGyHDkCZDlyBMhyzDgCOLLx1TaHKcCM +I8Bbjz0MdLQht0Q5NZhxBMjTomj7xv3QxsIAMRh2D/ok7XmyzWGUmHEEMHwfRj8lqo1BkD0daF1T +hdbySvh6LqwZC2Zcb/kUvB0hAfzRN80vLEKfEUftrv8cm+XIYeYRYDxImIWoPXMRbvWdZEOQmcOo +cHMQgH69n7venc/gyLpy7NlYR7PfBTfh0e87sFwPp6uX4MwTT/KJErDjvYwL4ti1/Q4cKVuFt+5Y +D/Rdgd0fV+GC4sjn53C2qhSNK5fjzXu2Mi+RneSRdwJnEvY+9ojfXHar73tBhuxtx29aPs/3n/4f +P+7bfj+zjlYt9Q+v2+A7QZn20tv9D77/h77v8vhKzD9bttj3r/b6CTnPTWvFbf7Lmzf6CZb96PHv ++SdqVvgxm+dY3nPj/uG6u6Rk1iGjFsARLWLsphRpQtrEZmlBkvtDW+qgWQXAt38XFkxEmL2hvgkL +er+EYfcybnAQMwHT0xk6OGi5YzXiBnW9uECVlc3K/Q2ovvwFdAYJF48fRZHtIM+g/XABl4Hj1uOH +pGTWIaME0NmZcdjsUbIgFOAY4etaMpBLIdD8rovklQ5XJohYtcFznpmPhO4h/tTPglLMk5GDG4Hh +GijwiwfqkJ27aA6tnQvd9nDP+0fh+SbOryxDQ105NLqHbEVmCaCZuFC5Cg1VyxmZ9YzLGtz75z8k +f5LNCq91jUISylHaa8sp5ulanL5fR3TzZiml4ArpdJ70DSRc7gMSamyI0d1NQ2AA/V3Ip61adfoc +VrQ24cqC+Wi/cyPQ0gBXGpxlyCgBQuRTU8+sLYejd41pOK9QVYt+nSHfewdpTQCbQuy8YyuK8uZS +QCYsqU8EywDQ9POBbYz8A5i+hwRJ0m3QCvkMBAm6OW507PvqnSQAXRThsZzyDXoB7tl/GPGEgX2P +fQdGQLxswqQ8sadFEHEMdFSso1qy/8fAAtcyUHfgOBr+4Lfx4aYaaC+/hO3//QzOe704s2IJ/D2v +4aPvfxet1eVY/torvBnr9qjbFKpHqVoUdt3ZDtiej9Pr10D75Yc4sL4cO954H73ytK6F+nUcFVzt +5HUuzf9VRNwEduw7OG63dTMjs18GURbNlUuDA4I+d3Xzr5RhpfEdHejmHWpnRLS07zI1nXlz5wuP +YMRpEy60Myigfy++NUlfxgE+E2drlqFizz44i0qVpjsSLHbx+vYmWpUaXlwE7KdVuWsDNNNDx092 +ov7Zf8f6b30HpX/0x6wjkow9sowEk0oAV9NReaZdTeqNul9DIQzai5DlMDBYwigmJU+Sex76BlY0 +nkJZ0yeDrxUw7TMdHioihRUIpKyABVIvyxZMPgEa21VwNmoLMArIZM57levgF7q4taePGTrKG6np +ZiDUHEaNm4sAYUu9BIeApgr4DboAMTGpWj4eiGUQ+qg6AlOgdkF6tuKmUhkRclyEYZgwuTdU67lh +eqIyUsIXYYt5ceLoJ5vFUTgTrXiG46YiQEvdCkQTyeFdpiFy7uPmaOlcnK4qRduqRcoqzHL530QE +6OlGXp+DM+WVVEufwhFVzSBcDwXdV1GcP4ehhMExRAGsrr6Mxi4zETOeAGKVxRafWFcOGxYuFBRx ++C5rgGqWP2Pw6U/8OSXBEeNJ0wTmWLxPcvJotmLGB4E+K9USFEIkqmIAmwKJehQOg79+iqetYhlM +2mrXMLD873+EvIe/HQYHN4D4eBd6P12KUcD6LRUJ2j1xWHteBh54CMhnnswOjlQde08FoNzLrKUp +7b2JDOvMHwVI6xIx4MxZwGItahq3GE75CkSYPFK3BsVOJ6JOBH2FOi4tLMc9v3g7ee1I6L2I+rs3 +IL/PR8XpdjhGBFpzEwwhm2ZT6BSiVwiUlSWnjdNAmqbZ8qaCsECIwgaZUR7nCKCQmWEgK73SiZYt +m9RqnqDTKsCWUxz3Cxm8HjSuqQrm8anVhoaKhg44FEYkzQyU1GDwstNrVnIfh21ZqD3epsq9/8AO +zD93LlmQdX257WvY+vOdwbHAUa4n4jv4YP1aLIhdheOIYyqEy/vZfEjNc2ElIvhVSR7W/fI05tA8 +uXx6Y4aS4uahajqIcN0iWLaFiBtBQiTrU12vdirhi2keCjULGLuIPMuh0FzUfnBSKe+o4EXwzqa1 +aKy9HV/p7uOxD03jTfSYIhzsCAxN5rHjWH7VwScblmF/zUb09HUFFcw83NwEkOZbOub+9Z8hbtqM +BSK0wi6Obt+kzsoy8HWgtOu37oAbc5HnFwF5/I0AZR5lw6oO3rERpVcvwyazEoaDT5dWYVXLJyht +/gyVTR+j+lwzypqacaJkAdsTh+e4mINLqP/NR5Tt8PmbabjJCZDEvN97Anb8Wufm94t2xtjh1z+e +48RR3NtNi2Fh5b79N1ynGDhnd2FxdyfLMwhlvNG+pByb9/yCJ1ICBGVKDDzwYT3mfvdxEtJCPt3B +so+bEfniCv1tZkcumcCsIIC8IjT3wW8FBzw0TLx257X3BFKx+8Fvwjapi5F+uIsWjSj8EBLDnNq8 +Wb2RpFOIEm/ct/cdSLg3KLZhORkB5HG78C/+ihmeWqZ22Munt6+nS0pjkaYZs4IAYqGX/uu/JA8I +CT6reqlxwXEqas83UBN1XCgppfBurJFSt4QWlgwXA1yOmDckju/ZiJGIAnmdLeo66r4zDbOCAKJ1 +IpAek0M5drfpeYjJiyI9VwL/zTT/2//3v/BdxuPMu+/IXl54Y41Ugu79kqPCa10Vu23JiN5cXI+m +W+gsLlHtkSvjwjWScqZhVhAgxPr3j7D3LaZ05DseTmzeQLMbS75HyCi9/W/+Ev0RHZesuSQEDfgo +XwFr/Icfs+w1na+576scZQQHw0AmsOYvvZ1aL0eeihtib76lzs0kZJYAGvVCfgHk4cV/ThnLihYi +ZsonouJ3qYVxm2PwfPWaGPr6aJYNFNgm7qw/mWzUKBvW/vYbapwfYs7cW9IOMUOIYaHBV9rvBQXl +jeV9P/03lZ5JyKhsfPGq7rUqxSAnNWCq4KH2rQ+CNP22qeHo1+9V6SNbNkCnVbCLbDYsvelXY/o0 +KKitUMFcCDvOIV6QTgefZDETQGf7x+zha3W6bnIiayYhowQQtehm8BMiZujK304VJPjD4hUUTgQJ +PaI+GSu5cI4SAxbJWi9R8c4xkZBKjxbbf/RjeIlr8X79y6+T6sNHAZq4Fs1GSW9PkDNBjMS2CSKj +BNC0BOp+9nxwBOQl+ml6O5UpnApItC5oml8CUXRXExtk49DdteQmXQA54M0r4X6MK3y3cGDHoWMI +/dKndC3DjyDEAoCDxAInAyuJ4W1HijongMxaAJiIb79bpcTnedTIkzIeZxQmzzHpxoD3FOV+6EA9 +eqK2ErjOoHBe/2W2xUHZ63uQ0AwKLzk8G4r0yyKsU4vCN6wBd7aUmi1fJ12HgTw2Qk+wfLJ7J+IG +JYaCHseFp/6RieTLsfLLlDPJMAHEveroKF3DoNuCSQnkxakNztXg7CSDhJP+kgm3BIoVCaXTInGN +QSHdwspViNLPj20+Llln+ZHjKg4QlyYB5v4HvyZVUxCB2RFIkmXk39maFbBpkiYaAykB+VHMi5g4 +tWYRtH4hlmSm3HcCyCgBXGqZwd69981XEbN0jrLYWK0HbZtroF3qHNxZkwnPwdoT9RRW8vFkBPdF +XrH6eHTMEIHLvjAfvYbJQ12N6Ze1tACXLtLtpDwTwwR5h/DsyiVkYBz+ui3Qx78MqqDcJ4ey+U/8 +CQr6LbSsLUWM95B3ojKBjBJAzaxRCxM0sXUnWnF1/hL4cRNOwkPH5jXoWL0Eh+WrnN0vAa1ngHON +QBv36X6tDN5aW1WHjxnUdt80aY28geHb3R+dlE8Gxw52trIYlGRN03lcKSpWdcbpLpq2rseZqmVo +Xr0M9VWlaKhegbPVy2BFNZSfake8txtuwlGuaFgE/JFX3NRrbr7smTlgOeT584VbiOv5cOnSzmyU +j18yg4wSIITJ9jtscdm+d1HW9jHOVVSqz7JkEmZh35doevJP0fQb96Ppga+j8dfvV7+m4BceN/7a +DqB0ITtj7IFUsjN1lL7yEizNRGdhMdsTms7xQy7fRCJVH2+iRSiBE7GQ55rkvIsix0EhXU2EzV11 +vJ2dUIi+rm728MhDYfmc/dNn/wvtlaU4z19LWSUOb6ojMa5/7i9KDJK4B7d0Mbj+jHVnAJl9IeQG +kFtpCaqDfI7dzyGSQZYoPy0nAy7K614yHl8QpaYVKebLwNISi8fOUnCZoxfcmL7yZBcvIrFoAUwZ +Io4AH3Focd5NJhJVhugYK5C2DNVgITitQCTBRtE3J4VFY8176HIfllfPqv74AAtLHS7rpgKE9Tus +5O271+KBgyfVsceieuwS2taUobcwikIvH35vH1a+ux/OqnI183iotgILEn1qMSrhGag6Szekhj7j +twdTRgCZGpV/Ohur+nO4u4aEYEmRuRRT064afapaf5P+ZYf7QhR1ODzUdaxPyHWjsuSWHfHovJJE +SZAQltxPmjOEO6ralPaHJn4gL7yXHKvCye8ZRPZySrr84toV+Mq+9zjEXMycAHRZPiu5/JN/Ruc/ +PSWMYB+wFYw8E36CgylaHFoaWVV0+Ctr/FSRQWnJODHk0SYPsmAjMULYNyqR7qealGyWPJfitsqP +Xisiw7hkYmSE9Y2mLG9ksWx4DyV8QZoeUtWFBfkLk9cSASQt13MvtYWntFPHIFYcBfOTGSFk+ppP +Pe97P8Dq0y0UskXX5VHbySJaJJnYEisjH7IajAWMnivji2tSkObxcphMiBM79+jDFDRT0YBkKRDt +9jmCEnex6uR5GrD0cxaC137nt1hPaDHHh1lDAC91OEYM59mGlptqyASSL+NSiTFEs4cgXNoWyZiW +hurGc0jYHAuxaMqCpEJhJ+OoMHYaJ2YFAZ599ln09Ayed5eFnaEkeP755wet608H5BsHP7TbEhze +ABJfVLd1oJvDzyIGfqkk6F+9inUEgfE4kfHesG0br776Kvbv3x/kXMPx48eVEIZqYSwWU/lD4TDg +2b17t9rv3btXlUm3oiZf8STkff4UvPDCC4oYqUhnFaQtUnboObmP5Le1tQU5SUi55557Lm17WRsL +BMnh4HXRr/dT9rEgY2QoeXOz7lgDlhw+gjwSWJaaI1EL9/7Hz3lygiLkA2UUTz/9dJAaHkPLsDOD +1GCwo30KSJ2XfZiXip07d/okiE+BqX0qwmtChPWlor9f/uqg75O4ah+C5AlSg0GyXldHCLl7wk7W +Nxzee/z31d8wVH8LMT74njeC+puHAt7DcdgG9bgDueNCxi1AJJJ+TJqqoZZlDbICjzzyiLIcb7zx +RpCT1LSCggJlysOfQK6TcyGkjGEYyrTLfixokencAOpbwABicaSu8F6pbc3Ly1NtEeswFAaNU+TT +T1SgN1xsVrjvHfV2kIoBYsMUGgYDPWtG2T72h3rc9P09WmScAI8++iieeeYZZdZTIR384osv4sCB +A9i+ffsgX9zQ0KA6edu2bUGOuEeGQ2n8teSFZBAIeXbt2oU9e/YEOcNj6LXLly/HK6+8gsbGRhw8 +eDDITd67vLwchw4dUm1ObUc8Hh8gyFD4HLJ9+Ld/p74fkBW8dN4gSp2TP4YtM4B9h18PcqcPUzoT +OOvBnjzy5BMo2f06Kl56GX5NbXJySOb3SSKhTEv5YkRcE71R5mlFqGtoVpdOF3IEyCDUl8y9l9G6 +dgMStACVTR1JUx8YENdNoK1ypZrIkehd/phlZfOFtJZuqjB9d56VYHea85GI2NR2E+2VyyhoCp5n +JC4wXt1FS8CEJu8J6DDpx2XJemIDuYkhR4AMQqIL34rDcEw1Xo8xlmioXgrDjqv1jJM//IGa0JEI +ceArISM23DuqU4IcATIJClezo/h8fokSquZ7arGmuWYx2lctpqzTdPeho5TC9DEgFwNMBtijLRVL +OIS02MMjG/hLhXOw5dgpWo/p0cWcBZgEOPEYPl98O3tXlvxGxvyuyxT+9bObU4UcASYBESsf2949 +pIaAOl2AnvJRyVDIq2vqJZhpQo4AkwE11xTB6mMfwclzrlvFS4Xm9comOJp65AgwGQgEHi+8DWcL +8hHRh9dwDXncTJ8YcgSYRMgs/TePtOCS/N2gYSAre7l5gFkK6VwxBptOtyBhRoI5gMGIaDaJcv0b +wFOFHAEmEakviZY2NOFitBBD/4hl88JKjgGmLwjMzQNMNb7oQNO9d0F3XXyWx9HCsVPUQsYB04Qc +AaYTYc9LEDBNRiBHgCxHLgbIcuQIkOXIESDLkSNAliNHgCxHjgBZjhwBshw5AmQ1gP8H0uX7Koik +l3QAAAAASUVORK5CYII= + 0,0,0,0 + Image1 + + + True + + + Transparent + 2.4,0,13.8,0.8 + + + Arial,22,Bold + 0,0,0,0 + Text1 + + + Resumo do Faturamento + White + Expression + + + Transparent + 2.4,1,3.2,0.6 + + + Arial,16 + 0,0,0,0 + Text2 + + + Fornecedor: + [255:255:255] + Expression + + + Transparent + 5.8,1,2.6,0.6 + + + Arial,16,Bold + 0,0,0,0 + Text5 + + + {FaturamentoFornecedor.CODFORNEC} + [255:255:255] + DataColumn + + + Transparent + 8.6,1,10.2,0.6 + + + Arial,16,Bold + 0,0,0,0 + Text6 + + + {FaturamentoFornecedor.FORNECEDOR} + [255:255:255] + DataColumn + + + + + PageHeaderBand1 + + + + + Transparent + + 0,2.8,19,7.4 + + + Transparent + 1.2,2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text8 + + + Qtde Pedidos: + Black + Expression + + + Transparent + 2.8,2.6,1.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text9 + + + Mix: + Black + Expression + + + Transparent + 5.4,2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text12 + + + {SumRunning(FaturamentoFornecedor.QTPEDIDOS)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + [191:191:191] + 0.2,0.6,7,0.8 + + + Arial,18,Bold + 0,0,0,0 + Text7 + + + Realizado + Black + Expression + + + Transparent + 4.2,3.8,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text3 + + + {SumRunning(FaturamentoFornecedor.VLFATURAMENTO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 1.2,3.2,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text10 + + + Positivação: + Black + Expression + + + Transparent + 1.2,3.8,2.8,0.4 + + + Arial,12 + 0,0,0,0 + Text11 + + + Valor faturado: + Black + Expression + + + Transparent + 5.4,3.2,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text14 + + + {SumRunning(FaturamentoFornecedor.QTCLIPOS)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 5.4,2.6,1.6,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text13 + + + {SumRunning(FaturamentoFornecedor.MIX)} + Black + + 0 + , + . + 1 + DecimalDigits + + Totals + + + Transparent + 4.2,4.4,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text4 + + + {SumRunning(FaturamentoFornecedor.VLDEVOLUCAO)} + Black + + 2 + , + . + 1 + NegativeInRed + + Totals + + + Transparent + 0.8,4.4,3.2,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text15 + + + Valor devolução: + Black + Expression + + + Transparent + 4.2,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text16 + + + {FaturamentoFornecedor.VLVENDALIQ} + Black + + 2 + , + . + 1 + NegativeInRed + + DataColumn + + + Transparent + 1.2,5,2.8,0.4 + + + Arial,12 + Right + 0,0,0,0 + Text17 + + + Valor líquido: + Black + Expression + + + 0.2,0.6,0,0 + + + StartPointPrimitive2 + + + bbcdcd3b63f64a5e9ffbabfe019d8d17 + + + 7.2,5.8,0,0 + + + EndPointPrimitive2 + + + bbcdcd3b63f64a5e9ffbabfe019d8d17 + + + + + FaturamentoFornecedor + + + DataBand1 + + + + + + 0.2,3.4,7,5.2 + Black + + + bbcdcd3b63f64a5e9ffbabfe019d8d17 + RectanglePrimitive2 + + + + + + + cf88027564f845da9d9b9d3d9abbd75f + 1,1,1,1 + Page1 + 29.7 + 21 + + + + + System.Dll + System.Drawing.Dll + System.Windows.Forms.Dll + System.Data.Dll + System.Xml.Dll + Stimulsoft.Controls.Dll + Stimulsoft.Base.Dll + Stimulsoft.Report.Dll + + Report + 1/20/2021 8:39:13 AM + 1/12/2021 9:12:08 PM + C:\Desenvolvimento\NestJS\supplier\src\domain\reports_model\faturamentoFornecedor1.mrt + e85d9c3fa1e748aa8c359e7696c648df + Report + Centimeters + 2020.5.2.0 + + CSharp + + \ No newline at end of file diff --git a/src/domain/repository/tables.respository.ts b/src/domain/repository/tables.respository.ts new file mode 100644 index 0000000..bdfe3a2 --- /dev/null +++ b/src/domain/repository/tables.respository.ts @@ -0,0 +1,19 @@ +import { Pcdepto } from '../entity/tables/pcdepto.entity'; +import { User } from '../entity/tables/estusuario.enity'; +import { EstAbreviatura } from '../entity/tables/estabreviatura.entity'; +import { Estmedidaproduto } from '../entity/tables/estmedidaproduto.entity'; +import { EntityRepository, Repository } from 'typeorm'; + +@EntityRepository(Estmedidaproduto) +export class EstmedidaprodutoRepository extends Repository { } + +@EntityRepository(EstAbreviatura) +export class EstabreviaturasRepository extends Repository { } + +@EntityRepository(User) +export class EstusuarioRepository extends Repository { } + +@EntityRepository(Pcdepto) +export class PcdeptoRepository extends Repository { } + + diff --git a/src/google/google.module.ts b/src/google/google.module.ts new file mode 100644 index 0000000..2a5b5e4 --- /dev/null +++ b/src/google/google.module.ts @@ -0,0 +1,20 @@ +import { ListsService } from 'src/backoffice/lists/lists.service'; +import { GoogleService } from './google.service'; + +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; + +@Module({ + imports: [], + controllers: [], + providers: [ + GoogleService, + ListsService], +}) +export class GoogleModule { + + + } diff --git a/src/google/google.service.ts b/src/google/google.service.ts new file mode 100644 index 0000000..ff20303 --- /dev/null +++ b/src/google/google.service.ts @@ -0,0 +1,36 @@ +/* +https://docs.nestjs.com/providers#services +*/ + +import { Injectable } from '@nestjs/common'; +import * as NodeGeocoder from 'node-geocoder'; +import { ListsService } from 'src/backoffice/lists/lists.service'; + +@Injectable() +export class GoogleService { + + constructor( + private readonly listsService: ListsService) {} + + async getGeocoder(address: string, addressNumber: string, neighborhood: string, city: string, state: string) { + + const stateName = await this.listsService.GetStates(state); + + const options = { + provider: 'google', + + // Optional depending on the providers + // fetch: customFetchImplementation, + apiKey: 'AIzaSyBc0DiFwbS0yOJCuMi1KGwbc7_d1p8HyxQ', // for Mapquest, OpenCage, Google Premier + formatter: null // 'gpx', 'string', ... + }; + + const geocoder = NodeGeocoder(options); + + const completeAddress = addressNumber + ' ' + address + ' ' + neighborhood + ' ' + city + ' ' + stateName; + // Using callback + const res = await geocoder.geocode(completeAddress); + + return res; + } +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..77503c3 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,24 @@ +import { NestFactory } from '@nestjs/core'; +import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; +import * as compression from 'compression'; +import { AppModule } from './app.module'; +import { CustomLoggerService } from './services/custom-logger.service'; + +async function bootstrap() { + const app = await NestFactory.create(AppModule, { cors: true, logger: new CustomLoggerService()}); + app.enableCors(); + app.use(compression()); + const options = new DocumentBuilder() + .setTitle('API Venda web') + .setDescription(`API criada para realizar todo processo da venda assistida, como criação de oraçamento de venda, pedido de venda + cadastro de novos clientes, novos endereços. A API também fornece dados para o portal de parceiros como a manutenção + do cadastro de parceiros, consulta de venda de movimentação e pagamentos, e fechamento das comissões dos parceiros.`) + .setVersion("2023.1.2") + .addTag("VendaWeb") + .addTag("Autenticação") + .build(); + const document = SwaggerModule.createDocument(app, options); + SwaggerModule.setup("docs", app, document); + await app.listen(3001); +} +bootstrap(); diff --git a/src/partner-category/partner-category.controller.ts b/src/partner-category/partner-category.controller.ts new file mode 100644 index 0000000..dea221d --- /dev/null +++ b/src/partner-category/partner-category.controller.ts @@ -0,0 +1,68 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Body, Controller, Delete, Get, HttpException, HttpStatus, Param, Post, Query } from '@nestjs/common'; +import { PartnerCategoryService } from './partner-category.service'; +import { PartnerCategory } from '../domain/models/partner-category.model'; +import { ResultModel } from 'src/domain/models/result.model'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Partner') +@Controller('api/v1/partner/category') +export class PartnerCategoryController { + + constructor( + private readonly partnerCategoryService: PartnerCategoryService, + ){} + + @Get() + getPartnersCategory(@Query() query){ + let type = 'T'; + let description = ''; + try { + type = query['type']; + if ( query['type'] != null ) { + type = query['type']; + } + if ( query['name'] != null ) { + description = query['description']; + } + return this.partnerCategoryService.getPartnersCategory(type, description); + } + catch(error){ + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Get(':id') + getPartnersCategoryById(@Param('id') id: number){ + try { + return this.partnerCategoryService.getPartnerCategory(id); + } + catch(error){ + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Post('create') + createPartner(@Body() data: PartnerCategory) { + try { + return this.partnerCategoryService.createOrUpdatePartnerCategory(data); + } + catch(error){ + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Delete('delete/:id') + async deleteCategory(@Param('id') id: number) { + try { + await this.partnerCategoryService.deleteCategory(id); + return new ResultModel(true, 'Categoria excluída com sucesso!', null, null); + } + catch(error){ + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } +} diff --git a/src/partner-category/partner-category.module.ts b/src/partner-category/partner-category.module.ts new file mode 100644 index 0000000..b5b3b8b --- /dev/null +++ b/src/partner-category/partner-category.module.ts @@ -0,0 +1,17 @@ +import { PartnerCategoryService } from './partner-category.service'; +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; +import { PartnerCategoryController } from './partner-category.controller'; + +@Module({ + imports: [], + controllers: [ + PartnerCategoryController, + ], + providers: [ + PartnerCategoryService,], +}) +export class PartnerCategoryModule { } diff --git a/src/partner-category/partner-category.service.ts b/src/partner-category/partner-category.service.ts new file mode 100644 index 0000000..f3eb810 --- /dev/null +++ b/src/partner-category/partner-category.service.ts @@ -0,0 +1,148 @@ +/* +https://docs.nestjs.com/providers#services +*/ + +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { Estcategoriaparceiro } from 'src/domain/entity/tables/estcategoriaparceiro.entity'; +import { PartnerCategory } from 'src/domain/models/partner-category.model'; +import { Connection } from 'typeorm'; + +@Injectable() +export class PartnerCategoryService { + + async getPartnersCategory(type: string, description: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const partnerCategory = await queryRunner + .query('SELECT ESTCATEGORIAPARCEIRO.ID as "id" ' + + ' ,ESTCATEGORIAPARCEIRO.TIPO as "partnerType" ' + + ' ,CASE WHEN ESTCATEGORIAPARCEIRO.TIPO = \'P\' THEN \'PARCEIRO\' ' + + ' WHEN ESTCATEGORIAPARCEIRO.TIPO = \'B\' THEN \'BELLA OBRA\' ' + + ' WHEN ESTCATEGORIAPARCEIRO.TIPO = \'M\' THEN \'MESTRE JURUNENSE\' ' + + ' ELSE \'OUTROS\' END as "descriptionType" ' + + ' ,ESTCATEGORIAPARCEIRO.DESCRICAO as "name" ' + + ' ,ESTCATEGORIAPARCEIRO.TIPOPAGTO as "paymentType" ' + + ' ,CASE WHEN ESTCATEGORIAPARCEIRO.TIPOPAGTO = \'C\' ' + + ' THEN \'Crédito\' ELSE \'Contas a pagar\' END as "descriptionPayment" ' + + ' FROM ESTCATEGORIAPARCEIRO ' + + ' WHERE ( ESTCATEGORIAPARCEIRO.TIPO = :1 OR :2 = \'T\' )' + + " AND ESTCATEGORIAPARCEIRO.DESCRICAO LIKE :3||'%' ", [type, type, description] ); + return partnerCategory; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getPartnerCategory(id: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const partnerCategory = await queryRunner + .query('SELECT ESTCATEGORIAPARCEIRO.ID as "id" ' + + ' ,ESTCATEGORIAPARCEIRO.TIPO as "partnerType" ' + + ' ,CASE WHEN ESTCATEGORIAPARCEIRO.TIPO = \'P\' THEN \'PARCEIRO\' ' + + ' WHEN ESTCATEGORIAPARCEIRO.TIPO = \'B\' THEN \'BELLA OBRA\' ' + + ' WHEN ESTCATEGORIAPARCEIRO.TIPO = \'M\' THEN \'MESTRE JURUNENSE\' ' + + ' ELSE \'OUTROS\' END as "descriptionType" ' + + ' ,ESTCATEGORIAPARCEIRO.DESCRICAO as "name" ' + + ' ,ESTCATEGORIAPARCEIRO.TIPOPAGTO as "paymentType" ' + + ' ,CASE WHEN ESTCATEGORIAPARCEIRO.TIPOPAGTO = \'C\' ' + + ' THEN \'Crédito\' ELSE \'Contas a pagar\' END as "descriptionPayment" ' + + ' FROM ESTCATEGORIAPARCEIRO ' + + ' WHERE ESTCATEGORIAPARCEIRO.ID = :1', [id]); + return partnerCategory[0]; + } catch (error) { + console.log('Erro ao consultar parceiro.'); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async createOrUpdatePartnerCategory(data: PartnerCategory) { + const partnerCategory = await this.getPartnerCategory(data.id); + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + let estCategoriaParceiro = await queryRunner.manager.findOne(Estcategoriaparceiro, { + id: data.id, + }); + await queryRunner.startTransaction(); + try { + let id = 1; + if (partnerCategory != null) { + id = partnerCategory.id; + } else { + const queryId = await queryRunner.query('SELECT ESSCATEGORIAPARCEIRO.NEXTVAL AS "id" FROM DUAL'); + if (queryId.length > 0) { + id = queryId[0].id; + } + } + if ( estCategoriaParceiro == null ) { + estCategoriaParceiro = new Estcategoriaparceiro(); + } + estCategoriaParceiro.id = id; + estCategoriaParceiro.descricao = data.name; + estCategoriaParceiro.tipo = data.partnerType; + estCategoriaParceiro.tipopagto = data.paymentType; + + await queryRunner.manager.save(estCategoriaParceiro); + await queryRunner.commitTransaction(); + + data.id = id; + + return data; + + } catch (error) { + await queryRunner.rollbackTransaction(); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + + } + + async deleteCategory(id: number) { + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + + await queryRunner.startTransaction(); + try { + const parceiroCategory = await queryRunner.query('SELECT COUNT(1) as "qt" FROM ESTPARCEIRO WHERE CODCATEGORIA = :id', [id]); + if ( parceiroCategory.qt > 0) { + throw new HttpException('Existem parceiros vinculados nesta categoria, exclusao não permitida.', HttpStatus.BAD_REQUEST); + } + const sqlDelete = "DELETE FROM ESTCATEGORIAPARCEIRO WHERE ID = :ID"; + await queryRunner.query(sqlDelete, [id]); + await queryRunner.commitTransaction(); + + } catch (error) { + await queryRunner.rollbackTransaction(); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + + } +} diff --git a/src/partner-range/partner-range.controller.ts b/src/partner-range/partner-range.controller.ts new file mode 100644 index 0000000..a8074dc --- /dev/null +++ b/src/partner-range/partner-range.controller.ts @@ -0,0 +1,61 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Body, Controller, Delete, Get, HttpException, HttpStatus, Param, Post, Query } from '@nestjs/common'; +import { PartnerRange } from 'src/domain/models/partner-range.model'; +import { ResultModel } from 'src/domain/models/result.model'; +import { PartnerRangeService } from './partner-range.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('BackOffice') +@Controller('api/v1/partner/range') +export class PartnerRangeController { + constructor(private partnerRangeService: PartnerRangeService) { } + + @Get() + getPartnersCategory(@Query() query) { + let type = 'T'; + type = query['type']; + if (query['type'] != null) { + type = query['type']; + } + try { + return this.partnerRangeService.getPartnerRanges(type); + } + catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Get(':id') + getPartnerRangeById(@Param('id') id: number) { + try { + return this.partnerRangeService.getPartnerRange(id); + } + catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Post('create') + createPartner(@Body() data: PartnerRange) { + try { + return this.partnerRangeService.createOrUpdatePartnerRange(data); + } + catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Delete('delete/:id') + async deleteRange(@Param('id') id: number) { + try { + await this.partnerRangeService.deleteRange(id); + return new ResultModel(true, 'Faixa de comissão excluída com sucesso!', null, null); + } + catch(error){ + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } +} diff --git a/src/partner-range/partner-range.module.ts b/src/partner-range/partner-range.module.ts new file mode 100644 index 0000000..3411ab3 --- /dev/null +++ b/src/partner-range/partner-range.module.ts @@ -0,0 +1,16 @@ +import { PartnerRangeService } from './partner-range.service'; +import { PartnerRangeController } from './partner-range.controller'; +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; + +@Module({ + imports: [PartnerRangeService], + controllers: [ + PartnerRangeController,], + providers: [ + PartnerRangeService,], +}) +export class PartnerRangeModule { } diff --git a/src/partner-range/partner-range.service.ts b/src/partner-range/partner-range.service.ts new file mode 100644 index 0000000..039dfc5 --- /dev/null +++ b/src/partner-range/partner-range.service.ts @@ -0,0 +1,146 @@ +/* +https://docs.nestjs.com/providers#services +*/ + +import { Injectable } from '@nestjs/common'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { Estfaixaparceiro } from 'src/domain/entity/tables/estfaixaparceiro.entity'; +import { PartnerRange } from 'src/domain/models/partner-range.model'; +import { Connection } from 'typeorm'; + +@Injectable() +export class PartnerRangeService { + + selectPartnerRange = 'SELECT ESTFAIXAPARCEIRO.ID AS "id" ' + + ' ,ESTFAIXAPARCEIRO.TIPO AS "type" ' + + ' ,CASE WHEN ESTFAIXAPARCEIRO.TIPO = \'P\' THEN \'Parceiro\' ' + + ' WHEN ESTFAIXAPARCEIRO.TIPO = \'B\' THEN \'Bella Obra\' ' + + ' WHEN ESTFAIXAPARCEIRO.TIPO = \'M\' THEN \'Mestre Jurunense\' ' + + ' ELSE \'Não Informado\' END AS "descriptionType" ' + + ' ,ESTFAIXAPARCEIRO.FAIXAINI AS "rangeIni" ' + + ' ,ESTFAIXAPARCEIRO.FAIXAFIM AS "rangeFin" ' + + ' ,ESTFAIXAPARCEIRO.PERCCOMISSAO AS "percentComiss" ' + + ' ,ESTFAIXAPARCEIRO.DTCADASTRO AS "createDate" ' + + ' ,ESTFAIXAPARCEIRO.CODFUNCCAD AS "createUserId" ' + + ' ,ESTFAIXAPARCEIRO.DTALTERACAO AS "updateDate" ' + + ' ,ESTFAIXAPARCEIRO.CODFUNCALT AS "updateUserId" ' + + ' ,USUARIO_CADASTRO.NOME AS "createUserName" ' + + ' ,USUARIO_ALTERACAO.NOME AS "updateUserName" ' + + ' FROM ESTFAIXAPARCEIRO, PCEMPR USUARIO_CADASTRO, PCEMPR USUARIO_ALTERACAO ' + + ' WHERE ESTFAIXAPARCEIRO.CODFUNCCAD = USUARIO_CADASTRO.MATRICULA (+) ' + + ' AND ESTFAIXAPARCEIRO.CODFUNCALT = USUARIO_ALTERACAO.MATRICULA (+) '; + + async getPartnerRanges(type: string) { + let sqlFilter = ''; + if ( type != null && type != '' && type !== 'T') { + sqlFilter = ` AND ESTFAIXAPARCEIRO.TIPO = '${type}'`; + } + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const partnerCategory = await queryRunner + .query(this.selectPartnerRange + sqlFilter ); + return partnerCategory; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getPartnerRange(id: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const partnerCategory = await queryRunner + .query(this.selectPartnerRange + + ' AND ESTCATEGORIAPARCEIRO.ID = :1', [id]); + return partnerCategory[0]; + } catch (error) { + console.log('Erro ao consultar parceiro.'); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async createOrUpdatePartnerRange(data: PartnerRange) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + let estfaixaparceiro = await queryRunner.manager.findOne(Estfaixaparceiro, { + id: data.id, + }); + await queryRunner.startTransaction(); + try { + let id = 1; + if (estfaixaparceiro != null) { + id = estfaixaparceiro.id; + } else { + const queryId = await queryRunner.query('SELECT ESSFAIXAPARCEIRO.NEXTVAL AS "id" FROM DUAL'); + if (queryId.length > 0) { + id = queryId[0].id; + } + } + if ( estfaixaparceiro == null ) { + estfaixaparceiro = new Estfaixaparceiro(); + estfaixaparceiro.codfunccad = data.userId; + estfaixaparceiro.dtCadastro = new Date(); + } + estfaixaparceiro.id = id; + estfaixaparceiro.faixaIni = data.rangeIni; + estfaixaparceiro.faixaFim = data.rangeFin; + estfaixaparceiro.percComissao = data.percentComiss; + estfaixaparceiro.codfuncalt = data.userId; + estfaixaparceiro.tipo = data.type; + estfaixaparceiro.dtAlteracao = new Date(); + + await queryRunner.manager.save(estfaixaparceiro); + await queryRunner.commitTransaction(); + + data.id = id; + + return data; + + } catch (error) { + await queryRunner.rollbackTransaction(); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async deleteRange(id: number) { + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + + await queryRunner.startTransaction(); + try { + const sqlDelete = "DELETE FROM ESTFAIXAPARCEIRO WHERE ID = :ID"; + await queryRunner.query(sqlDelete, [id]); + await queryRunner.commitTransaction(); + + } catch (error) { + await queryRunner.rollbackTransaction(); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + + } + } diff --git a/src/partner/partner.controller.ts b/src/partner/partner.controller.ts new file mode 100644 index 0000000..807de8a --- /dev/null +++ b/src/partner/partner.controller.ts @@ -0,0 +1,96 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Body, Controller, Get, HttpException, HttpStatus, Param, Post, Query } from '@nestjs/common'; +import { CreatePaymentPartner } from 'src/domain/models/create-payment-partner.model'; +import { Partner } from 'src/domain/models/partner.model'; +import { PartnerService } from './partner.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Partners') +@Controller('api/v1/partners') +export class PartnerController { + + constructor( + private readonly partnerService: PartnerService, + ) { } + + @Get() + getPartners(@Query() query) { + let cpf: string = null; + let name: string = null; + try { + const type = query['type']; + if ( query['cpf'] != null ) { + cpf = query['cpf']; + } + if ( query['name'] != null ) { + name = query['name']; + } + + return this.partnerService.getPartners(type, cpf, name); + } + catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('payment') + getPaymentPartner(@Query() query) { + + try { + const partnerId = query['partnerId'] as number; + const type = query['type']; + const month = query['month']; + const year = query['year']; + console.log("tipo parceiro: " + type); + return this.partnerService.getPayment(partnerId, type, month, year); + } + catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Get(':cpf') + getPartner(@Param('cpf') cpf: string) { + try { + return this.partnerService.getPartner(cpf); + } + catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('extract/:id') + extractPartner(@Param('id') id: number, @Query() query) { + const start = new Date(query.start); + const end = new Date(query.end); + return this.partnerService.getExtractPartner(id, start, end); + } + + + @Post('create') + createPartner(@Body() data: Partner) { + try { + return this.partnerService.createOrUpdatePartner(data); + } + catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Post('paymentcreate') + createPaymentPartner(@Body() data: CreatePaymentPartner[]) { + console.log('criando payment'); + try { + return this.partnerService.createPayment(data); + } + catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + + +} diff --git a/src/partner/partner.module.ts b/src/partner/partner.module.ts new file mode 100644 index 0000000..4f3a3a1 --- /dev/null +++ b/src/partner/partner.module.ts @@ -0,0 +1,19 @@ +import { PartnerService } from './partner.service'; +import { PartnerController } from './partner.controller'; +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; +import { CustomerService } from 'src/sales/customer/customer.service'; + +@Module({ + imports: [ + ], + controllers: [ + PartnerController,], + providers: [ + PartnerService, + CustomerService], +}) +export class PartnerModule { } diff --git a/src/partner/partner.service.ts b/src/partner/partner.service.ts new file mode 100644 index 0000000..7570fba --- /dev/null +++ b/src/partner/partner.service.ts @@ -0,0 +1,557 @@ +/* +https://docs.nestjs.com/providers#services +*/ + +import { Injectable } from '@nestjs/common'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { Estparceiro } from 'src/domain/entity/tables/estparceiro.entity'; +import { CreatePaymentPartner } from 'src/domain/models/create-payment-partner.model'; +import { Customer } from 'src/domain/models/customer.model'; +import { Partner } from 'src/domain/models/partner.model'; +import { CustomerService } from 'src/sales/customer/customer.service'; +import { Connection } from 'typeorm'; + +@Injectable() +export class PartnerService { + + constructor( + private readonly customerService: CustomerService, + ) { } + + async getPartners(type: string, cpf: string, name: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + const sql = 'SELECT estparceiro.id as "id" ' + + ' ,CASE WHEN estparceiro.tipo = \'M\' THEN \'MESTRE JURUNENSE\' ' + + ' WHEN estparceiro.tipo = \'P\' THEN \'PARCEIRO\' ' + + ' WHEN estparceiro.tipo = \'B\' THEN \'BELLA OBRA\' ' + + ' ELSE \'NÃO INFORMADO\' END as "type" ' + + ' ,estparceiro.cpf as "cpf" ' + + ' ,estparceiro.nome as "name" ' + + ' ,estparceiro.telefone as "phone" ' + + ' ,estcategoriaparceiro.descricao as "category" ' + + ` ,estparceiro.dtcadastro as "createDate" ` + + ` ,func_cad.usuariobd as "userCreate" ` + + ` ,estparceiro.dtalteracao as "updateDate" ` + + ` ,func_alt.usuariobd as "userUpdate" ` + + ' FROM estparceiro, estcategoriaparceiro, pcempr func_cad, pcempr func_alt ' + + ' WHERE estparceiro.codcategoria = estcategoriaparceiro.id (+) ' + + ' AND estparceiro.codfunccadastro = func_cad.matricula (+) ' + + ' AND estparceiro.codfuncalteracao = func_alt.matricula (+) '; + + let whereSql = ` AND ( estparceiro.tipo = '${type}' OR '${type}' = 'T' ) `; + if (cpf != null && cpf.length >= 2) { + whereSql += ` AND REGEXP_REPLACE(estparceiro.cpf, '[^0-9]', '') = REGEXP_REPLACE('${cpf}', '[^0-9]', '') `; + } + if (name != null && name.length >= 3) { + whereSql += ` AND estparceiro.nome like '${name}'||'%' `; + } + try { + const partners = await queryRunner.query(sql + whereSql); + return partners; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getPartner(campo: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = ` SELECT estparceiro.id as "id" ` + + ` ,estparceiro.nome as "name" ` + + ` ,estparceiro.cpf as "cpf" ` + + ` ,estparceiro.tipo as "type" ` + + ` ,estparceiro.rg as "rg" ` + + ` ,estparceiro.regprofissional as "professionalNumber" ` + + ` ,estparceiro.telefone as "phone" ` + + ` ,estparceiro.email as "email" ` + + ` ,estparceiro.chavepix as "pixKey" ` + + ` ,estparceiro.compradorpj as "buyer" ` + + ` ,estparceiro.codcli as "customerId" ` + + ` ,estparceiro.codusur as "sellerId" ` + + ` ,estparceiro.banco as "bank" ` + + ` ,estparceiro.agencia as "agencia" ` + + ` ,estparceiro.conta as "conta" ` + + ` ,estparceiro.cep as "zipCode" ` + + ` ,estparceiro.endereco as "address" ` + + ` ,estparceiro.numero as "number" ` + + ` ,estparceiro.complemento as "complement" ` + + ` ,estparceiro.bairro as "neighborhood" ` + + ` ,estparceiro.cidade as "city" ` + + ` ,estparceiro.estado as "state" ` + + ` ,estparceiro.codcategoria as "categoryId" ` + + ` ,estparceiro.codusurparceiro as "sellerIdPartner" ` + + ` ,estparceiro.codpraca as "placeId" ` + + ` ,estparceiro.codcategoria as "categoryId" ` + + ` ,estparceiro.observacao as "observer1" ` + + ` ,estparceiro.observacao2 as "observer2" ` + + ` ,estparceiro.codIbge as "ibgeCode" ` + + ` ,estparceiro.perccomissao as "commission" ` + + ` ,estparceiro.dtcadastro as "createDate" ` + + ` ,func_cad.usuariobd as "userCreate" ` + + ` ,estparceiro.dtalteracao as "updateDate" ` + + ` ,func_alt.usuariobd as "userUpdate" ` + + ' FROM estparceiro, pcempr func_cad, pcempr func_alt ' + + ` WHERE REGEXP_REPLACE(estparceiro.cpf, '[^0-9]', '') = REGEXP_REPLACE(:1, '[^0-9]', '') ` + + ` AND estparceiro.codfunccadastro = func_cad.matricula (+) ` + + ` AND estparceiro.codfuncalteracao = func_alt.matricula (+) `; + + const partner = await queryRunner.manager.query(sql, [campo]); + return partner[0]; + } catch (error) { + console.log('Erro ao consultar parceiro.'); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async createOrUpdatePartner(data: Partner) { + // let estParceiro = await this.getPartner(data.cpf); + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + let estParceiro = await queryRunner.manager.findOne(Estparceiro, { + cpf: data.cpf, + }); + const rca = await queryRunner.query("SELECT PCUSUARI.CODUSUR, PCUSUARI.ROWID as \"rid\" FROM PCUSUARI WHERE REGEXP_REPLACE(CPF, '[^0-9]', '') = REGEXP_REPLACE(:1, '[^0-9]', '')", + [data.cpf]); + + await queryRunner.startTransaction(); + try { + let id = 1; + if (estParceiro != null) { + id = estParceiro.id; + } else { + const queryId = await queryRunner.query('SELECT ESSPARCEIRO.NEXTVAL AS "id" FROM DUAL'); + if (queryId.length > 0) { + id = queryId[0].id; + } + } + if (estParceiro == null) { + estParceiro = new Estparceiro(); + estParceiro.codfunccadastro = data.userId; + estParceiro.dtcadastro = new Date(); + } + estParceiro.id = id; + estParceiro.agencia = data.agencia; + estParceiro.bairro = data.neighborhood; + estParceiro.banco = data.bank; + estParceiro.cep = data.zipCode; + estParceiro.codibge = data.ibgeCode; + estParceiro.chavepix = data.pixKey; + estParceiro.cidade = data.city.toUpperCase(); + estParceiro.codcli = data.customerId; + estParceiro.codusur = data.sellerId; + estParceiro.conta = data.conta; + estParceiro.cpf = data.cpf; + estParceiro.email = data.email; + estParceiro.endereco = data.address; + estParceiro.estado = data.state; + estParceiro.nome = data.name.toUpperCase(); + estParceiro.numero = data.number; + estParceiro.complemento = data.complement; + estParceiro.observacao = data.observer1; + estParceiro.observacao2 = data.observer2; + // estParceiro.orgaoexp = data.orgaoexp; + estParceiro.rg = data.rg; + estParceiro.regprofissional = data.professionalNumber; + estParceiro.telefone = data.phone; + estParceiro.tipo = data.type; + estParceiro.compradorPj = data.buyer ? 'S' : 'N'; + estParceiro.codcli = data.customerId; + estParceiro.codusur = data.sellerId; + estParceiro.codcategoria = data.categoryId; + estParceiro.codpraca = data.placeId; + estParceiro.perccomissao = data.commission; + estParceiro.codfuncalteracao = data.userId; + estParceiro.dtalteracao = new Date(); + if (rca !== null && rca.length > 0) { + estParceiro.codusurparceiro = rca[0].CODUSUR; + await queryRunner.manager.save(estParceiro); + } + + if (rca == null || rca.length == 0) { + const idSellerPartner = await queryRunner.query(`SELECT NVL(MAX(CODUSUR),20000) + 1 as "id" FROM PCUSUARI WHERE CODUSUR BETWEEN 20000 AND 30000`); + estParceiro.codusurparceiro = idSellerPartner[0].id; + await queryRunner.manager.save(estParceiro); + + const sqlCreateRCA = "INSERT INTO PCUSUARI ( CODUSUR, NOME, TIPOVEND, PERCENT2, ENDERECO, CIDADE, ESTADO, CEP, " + + " TELEFONE1, CPF, CI, BLOQUEIO, DTINICIO, DTNASC, BAIRRO, CODSUPERVISOR, EMAIL, " + + " PROXNUMPED, CODFILIAL, PROXNUMPEDFORCA, BLOQCOMIS, CODDISTRIB, ENDERECO2, AREAATUACAO, TIPOCOMISSAO, " + + " USADEBCREDRCA, PROXNUMPEDWEB, TIPOPESSOA, PERMITEADIANTCOMISSAO, CPFAUX, CODCIDADE, PCUSUARI.NUMBANCO, " + + " PCUSUARI.NUMAGENCIA, PCUSUARI.NUMCCORRENTE ) " + + " SELECT :1, ESTPARCEIRO.NOME, 'P', 0, SUBSTR(ESTPARCEIRO.ENDERECO,1,40), ESTPARCEIRO.CIDADE, ESTPARCEIRO.ESTADO, " + + " ESTPARCEIRO.CEP, ESTPARCEIRO.telefone, ESTPARCEIRO.CPF, ESTPARCEIRO.RG, " + + " 'N', TRUNC(SYSDATE) - 1, NULL, SUBSTR(ESTPARCEIRO.BAIRRO,1,25), 5, ESTPARCEIRO.EMAIL, " + + " TO_NUMBER(:2||'0001'), '99', TO_NUMBER(:3||'0001'), " + + " 'N', '1', NULL, NULL, 'P', 'N', TO_NUMBER(:4||'0001'), 'F', 'N', " + + " TO_CHAR(REGEXP_REPLACE(ESTPARCEIRO.CPF,'[^0-9]', ''), '00000000000000'), NULL, " + + " ESTPARCEIRO.BANCO, ESTPARCEIRO.AGENCIA, ESTPARCEIRO.CONTA " + + " FROM ESTPARCEIRO " + + " WHERE ESTPARCEIRO.id = :5"; + await queryRunner.query(sqlCreateRCA, [idSellerPartner[0].id, idSellerPartner[0].id, + idSellerPartner[0].id, idSellerPartner[0].id, id]); + } + + await queryRunner.commitTransaction(); + + const customer = await queryRunner.query("SELECT PCCLIENT.CODCLI FROM PCCLIENT WHERE REGEXP_REPLACE(CGCENT, '[^0-9]', '') = REGEXP_REPLACE(:1, '[^0-9]', '')", + [data.cpf]); + if (customer == null || customer.length == 0) { + const newCustomer = new Customer(null, + data.name, + data.name, + data.cpf, + 'M', + '', + data.email, + data.zipCode, + data.address, + data.number, + data.complement, + data.neighborhood, + data.city, + data.state, + true, + data.phone, + null, + null, + data.place, + data.sellerId, + data.ibgeCode, + null, + null + ); + + const resultCustomer = await this.customerService.createCustomer(newCustomer); + const textCustomer = JSON.stringify(resultCustomer); + if (textCustomer.indexOf('customerId') >= 0) { + const customer = JSON.parse(textCustomer); + await queryRunner.startTransaction(); + estParceiro.codcli = customer.customerId; + await queryRunner.manager.save(estParceiro); + await queryRunner.commitTransaction(); + } + + } else { + await queryRunner.startTransaction(); + estParceiro.codcli = customer[0].CODCLI; + await queryRunner.manager.save(estParceiro); + await queryRunner.commitTransaction(); + } + + data.id = id; + + return data; + + } catch (error) { + if ( queryRunner.isTransactionActive) { + await queryRunner.rollbackTransaction(); + } + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + + } + + async getPayment(partnerId: number, type: number, month: string, year: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const dataApuracao = '01/' + month + '/' + year; + console.log(type); + const sql = `SELECT + EXTRATO.CODPARCEIRO as "partnerId" + ,ESTPARCEIRO.NOME as "name" + ,ESTPARCEIRO.TELEFONE as "phone" + ,EXTRATO.NOMETIPOPARCEIRO as "type" + ,ESTPARCEIRO.CPF as "document" + ,ESTPARCEIRO.CHAVEPIX as "pixKey" + ,EXTRATO.TIPOPARCEIRO as "partnerType" + ,sum(case when tipomovimento = 'VENDA' then VLTOTAL else 0 end) as "saleValue" + ,sum(case when tipomovimento = 'DEVOLUCAO' then VLTOTAL else 0 end) "devolValue" + ,sum(case when SEQ = 1 then extrato.vlsaldo else 0 end) as "previusBalance" + ,sum(EXTRATO.VALORCOMISSAO) "commissionValue" + ,sum(case when tipomovimento = 'DEPOSITO' then VALORGERADO else 0 end) as "paidValue" + ,sum(case when tipomovimento = 'CREDITO' then VALORGERADO else 0 end) as "creditValue" + ,SUM(SUM(VLSALDO)) + OVER(PARTITION BY EXTRATO.CODPARCEIRO ORDER BY EXTRATO.CODPARCEIRO) as "balance" + FROM ( SELECT 1 AS SEQ, + '6' CODFILIAL, + 'SALDO INICIAL' AS tipomovimento, + esvextratoparceiro.tipoparceiro , + TO_DATE (:1, 'DD/MM/YYYY') DATAVENDA, + NULL AS NUMNOTA, + NULL AS CODUSUR, + NULL AS CLIENTE, + esvextratoparceiro.descricaotipo AS NOMETIPOPARCEIRO, + estparceiro.id CODPARCEIRO, + estparceiro.nome NOMEPARCEIRO, + NULL AS VLTOTAL, + NULL AS PERCCOMISSAO, + NULL AS PERCDESCONTO, + NULL AS VALORCOMISSAO, + NULL AS PERCENTUAL, + NULL AS VALORGERADO, + NULL AS VALORPAGO, + NULL AS DATAPAGTO, + NULL AS TIPOPAGAMENTO, + SUM (esvextratoparceiro.vlsaldo) vlsaldo + FROM esvextratoparceiro, estparceiro + WHERE esvextratoparceiro.codparceiro = estparceiro.id + AND esvextratoparceiro.data < TO_DATE(:2, 'DD/MM/YYYY') + GROUP BY estparceiro.id, estparceiro.nome, estparceiro.tipo, esvextratoparceiro.tipoparceiro, esvextratoparceiro.descricaotipo + UNION ALL + SELECT 2 SEQ, + esvextratoparceiro.codfilial, + esvextratoparceiro.tipomovimento, + esvextratoparceiro.tipoparceiro, + esvextratoparceiro.data, + esvextratoparceiro.numnota, + esvextratoparceiro.nomevendedor, + esvextratoparceiro.cliente, + esvextratoparceiro.descricaotipo, + esvextratoparceiro.codparceiro, + esvextratoparceiro.nomeparceiro, + esvextratoparceiro.vltotal, + esvextratoparceiro.perccomissao, + esvextratoparceiro.percentual_desconto, + esvextratoparceiro.vlcomissao, + esvextratoparceiro.perccomissao, + esvextratoparceiro.valorgerado, + esvextratoparceiro.valorpago, + esvextratoparceiro.dtpagto, + esvextratoparceiro.tipopagto, + esvextratoparceiro.vlsaldo + FROM esvextratoparceiro + WHERE esvextratoparceiro.data BETWEEN TO_DATE(:3, 'DD/MM/YYYY') + AND last_day(TO_DATE(:4, 'DD/MM/YYYY'))) extrato, ESTPARCEIRO + WHERE EXTRATO.CODPARCEIRO = ESTPARCEIRO.ID + AND ( EXTRATO.CODPARCEIRO = :5 OR :6 = -1 ) + AND ( EXTRATO.TIPOPARCEIRO = :7 OR :8 = 99 ) + GROUP BY + EXTRATO.CODPARCEIRO + ,ESTPARCEIRO.NOME + ,ESTPARCEIRO.TELEFONE + ,EXTRATO.TIPOPARCEIRO + ,EXTRATO.NOMETIPOPARCEIRO + ,ESTPARCEIRO.CPF + ,ESTPARCEIRO.CHAVEPIX + ,EXTRATO.TIPOPARCEIRO + ORDER BY extrato.CODPARCEIRO`; + const data = await queryRunner.query(sql, + [dataApuracao, dataApuracao, dataApuracao, dataApuracao, + partnerId, partnerId, type, type]); + + // const sql = `SELECT ` + + // ` ESVCOMISSAOPARCEIRO.CODPARCEIRO as "partnerId" ` + + // ` ,ESVCOMISSAOPARCEIRO.NOMEPARCEIRO as "name" ` + + // ` ,ESVCOMISSAOPARCEIRO.TELEFONE as "phone" ` + + // ` ,ESVCOMISSAOPARCEIRO.TIPOPARCEIRO as "typePartner" ` + + // ` ,ESVCOMISSAOPARCEIRO.DESCRICAOTIPO as "type" ` + + // ` ,SUM(ESVCOMISSAOPARCEIRO.VLTOTAL) as "saleValue" ` + + // ` ,SUM(ESVCOMISSAOPARCEIRO.VLCOMISSAO) as "comissionValue" ` + + // ` ,(NVL((SELECT sum(ESTSALDOPARCEIRO.VALOR) FROM ESTSALDOPARCEIRO ` + + // ` WHERE ESTSALDOPARCEIRO.CODPARCEIRO = ESVCOMISSAOPARCEIRO.CODPARCEIRO ` + + // ` AND ESTSALDOPARCEIRO.DTVENC BETWEEN TO_DATE(:1, 'DD/MM/YYYY') ` + + // ` AND LAST_DAY(TO_DATE(:2, 'DD/MM/YYYY'))),0)) as "prevValue" ` + + // ` ,NVL((SELECT SUM(ESTPAGTOPARCEIRO.VLPAGTO) FROM ESTPAGTOPARCEIRO ` + + // ` WHERE ESTPAGTOPARCEIRO.CODPARCEIRO = ESVCOMISSAOPARCEIRO.CODPARCEIRO ` + + // ` AND ESTPAGTOPARCEIRO.MES = :3 ` + + // ` AND ESTPAGTOPARCEIRO.ANO = :4),0) as "paymentValue" ` + + // ` ,( SUM(ESVCOMISSAOPARCEIRO.VLCOMISSAO) + ` + + // ` NVL((SELECT SUM(ESTSALDOPARCEIRO.VALOR) FROM ESTSALDOPARCEIRO ` + + // ` WHERE ESTSALDOPARCEIRO.CODPARCEIRO = ESVCOMISSAOPARCEIRO.CODPARCEIRO ` + + // ` AND ESTSALDOPARCEIRO.DTVENC BETWEEN TO_DATE(:5, 'DD/MM/YYYY') ` + + // ` AND LAST_DAY(TO_DATE(:6, 'DD/MM/YYYY'))),0) - ` + + // ` NVL((SELECT SUM(ESTPAGTOPARCEIRO.VLPAGTO) FROM ESTPAGTOPARCEIRO ` + + // ` WHERE ESTPAGTOPARCEIRO.CODPARCEIRO = ESVCOMISSAOPARCEIRO.CODPARCEIRO ` + + // ` AND ESTPAGTOPARCEIRO.MES = :7 ` + + // ` AND ESTPAGTOPARCEIRO.ANO = :8),0) ) as "valueForPayment" ` + + // ` FROM ESVCOMISSAOPARCEIRO ` + + // ` WHERE ESVCOMISSAOPARCEIRO.DTSAIDA BETWEEN :9 AND LAST_DAY(:10) ` + + // ` AND ( ESVCOMISSAOPARCEIRO.CODPARCEIRO = :11 OR :12 = -1 ) ` + + // ` AND ( ESVCOMISSAOPARCEIRO.TIPOPARCEIRO = :13 OR :14 = 99 ) ` + + // ` GROUP BY ESVCOMISSAOPARCEIRO.CODPARCEIRO, ESVCOMISSAOPARCEIRO.TIPOPARCEIRO, ` + + // ` ESVCOMISSAOPARCEIRO.DESCRICAOTIPO, ESVCOMISSAOPARCEIRO.NOMEPARCEIRO, ESVCOMISSAOPARCEIRO.TELEFONE `; + + + return data; + } catch (error) { + console.log(error); + } finally { + await queryRunner.release(); + await connection.close(); + } + + } + + async createPayment(createPayments: CreatePaymentPartner[]) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + for (const createPayment of createPayments) { + const date = new Date(createPayment.dueDate); + const day = ('00' + date.getDate()).slice(-2); + const month = ('00' + ( date.getMonth() + 1 )).slice(-2); + const year = date.getFullYear(); + const dueDate = day + '/' + month + '/' + year; + console.log('data de vencimento: ' + dueDate); + console.log(JSON.stringify(createPayment)); + await queryRunner + .query("BEGIN ESK_VENDA.GERAR_COMISSAO_PARCEIROS(:1, :2, :3, :4, :5); END;", + [createPayment.partnerId, createPayment.month, createPayment.year, + dueDate, createPayment.userId]); + } + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + + async getExtractPartner(partnerId: number, start: Date, end: Date) { + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + const dateStart = ( "00" + start.getDate().toString()).slice(-2) + '/' + ("00" + ((start.getMonth() + 1).toString())).slice(-2) + '/' + start.getFullYear(); + const dateEnd = ( "00" + end.getDate().toString()).slice(-2) + '/' + ("00" + ((end.getMonth() + 1).toString())).slice(-2) + '/' + end.getFullYear(); + try { + const sql = `SELECT EXTRATO."seq" + ,EXTRATO."store" + ,EXTRATO."type" + ,EXTRATO."typePartner" + ,EXTRATO."dateSale" + ,EXTRATO."number" + ,EXTRATO."seller" + ,EXTRATO."customer" + ,EXTRATO."descryptionTypePartner" + ,EXTRATO."partnerId" + ,EXTRATO."namePartner" + ,EXTRATO."valueSale" + ,EXTRATO."pecentCommission" + ,EXTRATO."percentOff" + ,EXTRATO."valueCommission" + ,EXTRATO."percent" + ,EXTRATO."valueCreate" + ,EXTRATO."valuePaid" + ,EXTRATO."datePaid" + ,EXTRATO."paidType" + ,SUM(SUM(VLSALDO)) + OVER(ORDER BY EXTRATO."dateSale", EXTRATO."store", EXTRATO."number") as "balance" + FROM + ( + SELECT 1 as "seq" + ,'6' as "store" + ,'SALDO INICIAL' as "type" + ,CASE WHEN ESTPARCEIRO.TIPO = 'M' THEN 1 ELSE 2 END as "typePartner" + ,TO_DATE(:1, 'DD/MM/YYYY') as "dateSale" + ,NULL as "number" + ,NULL as "seller" + ,NULL as "customer" + ,NULL as "descryptionTypePartner" + ,ESTPARCEIRO.ID as "partnerId" + ,ESTPARCEIRO.NOME as "namePartner" + ,NULL as "valueSale" + ,NULL as "pecentCommission" + ,NULL as "percentOff" + ,NULL as "valueCommission" + ,NULL as "percent" + ,NULL as "valueCreate" + ,NULL as "valuePaid" + ,NULL as "datePaid" + ,NULL as "paidType" + ,SUM(ESVEXTRATOPARCEIRO.VLSALDO) VLSALDO + FROM ESVEXTRATOPARCEIRO, ESTPARCEIRO + WHERE ESVEXTRATOPARCEIRO.CODPARCEIRO = :2 + AND ESVEXTRATOPARCEIRO.CODPARCEIRO = ESTPARCEIRO.ID + AND ESVEXTRATOPARCEIRO.DATA < TO_DATE(:3, 'DD/MM/YYYY') + GROUP BY ESTPARCEIRO.ID, ESTPARCEIRO.NOME, ESTPARCEIRO.TIPO + + UNION ALL + + SELECT 2 as "seq" + ,ESVEXTRATOPARCEIRO.codfilial as "store" + ,ESVEXTRATOPARCEIRO.TIPOMOVIMENTO as "type" + ,ESVEXTRATOPARCEIRO.TIPOPARCEIRO as "typePartner" + ,ESVEXTRATOPARCEIRO.DATA as "dateSale" + ,ESVEXTRATOPARCEIRO.NUMNOTA as "number" + ,ESVEXTRATOPARCEIRO.NOMEVENDEDOR as "seller" + ,ESVEXTRATOPARCEIRO.cliente as "customer" + ,ESVEXTRATOPARCEIRO.DESCRICAOTIPO "descryptionTypePartner" + ,ESVEXTRATOPARCEIRO.CODPARCEIRO as "partnerId" + ,ESVEXTRATOPARCEIRO.NOMEPARCEIRO as "namePartner" + ,ESVEXTRATOPARCEIRO.VLTOTAL as "valueSale" + ,ESVEXTRATOPARCEIRO.PERCCOMISSAO as "pecentCommission" + ,ESVEXTRATOPARCEIRO.PERCENTUAL_DESCONTO "percentOff" + ,ESVEXTRATOPARCEIRO.VLCOMISSAO as "valueCommission" + ,ESVEXTRATOPARCEIRO.PERCCOMISSAO as "percent" + ,ESVEXTRATOPARCEIRO.VALORGERADO as "valueCreate" + ,ESVEXTRATOPARCEIRO.VALORPAGO as "valuePaid" + ,ESVEXTRATOPARCEIRO.DTPAGTO as "datePaid" + ,ESVEXTRATOPARCEIRO.TIPOPAGTO as "paidType" + ,ESVEXTRATOPARCEIRO.VLSALDO + FROM ESVEXTRATOPARCEIRO + WHERE ESVEXTRATOPARCEIRO.CODPARCEIRO = :4 + AND ESVEXTRATOPARCEIRO.DATA BETWEEN TO_DATE(:5, 'DD/MM/YYYY') AND TO_DATE(:6, 'DD/MM/YYYY') + ) EXTRATO + GROUP BY EXTRATO."seq" + ,EXTRATO."store" + ,EXTRATO."type" + ,EXTRATO."typePartner" + ,EXTRATO."dateSale" + ,EXTRATO."number" + ,EXTRATO."seller" + ,EXTRATO."customer" + ,EXTRATO."descryptionTypePartner" + ,EXTRATO."partnerId" + ,EXTRATO."namePartner" + ,EXTRATO."valueSale" + ,EXTRATO."pecentCommission" + ,EXTRATO."percentOff" + ,EXTRATO."valueCommission" + ,EXTRATO."percent" + ,EXTRATO."valueCreate" + ,EXTRATO."valuePaid" + ,EXTRATO."datePaid" + ,EXTRATO."paidType" + ORDER BY EXTRATO."seq", EXTRATO."dateSale", EXTRATO."number" `; + + const movs = await queryRunner.manager.query(sql, [ dateStart, partnerId, dateStart, + partnerId, dateStart, dateEnd ]); + return movs; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + +} diff --git a/src/payment/mindee.controller.ts b/src/payment/mindee.controller.ts new file mode 100644 index 0000000..13e577a --- /dev/null +++ b/src/payment/mindee.controller.ts @@ -0,0 +1,19 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Controller, Get } from '@nestjs/common'; +import { MindeeService } from './mindee.service'; +import { ApiExcludeEndpoint } from '@nestjs/swagger'; + +@Controller('api/v1/mindee') +export class MindeeController { + + constructor (private readonly mindeeService: MindeeService){} + + @Get() + @ApiExcludeEndpoint() + loadInvoice() { + return this.mindeeService.importDataInvoice(); + } + } diff --git a/src/payment/mindee.module.ts b/src/payment/mindee.module.ts new file mode 100644 index 0000000..e036086 --- /dev/null +++ b/src/payment/mindee.module.ts @@ -0,0 +1,16 @@ +import { MindeeService } from './mindee.service'; +import { MindeeController } from './mindee.controller'; +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; + +@Module({ + imports: [], + controllers: [ + MindeeController,], + providers: [ + MindeeService,], +}) +export class MindeeModule { } diff --git a/src/payment/mindee.service.ts b/src/payment/mindee.service.ts new file mode 100644 index 0000000..e1ecd44 --- /dev/null +++ b/src/payment/mindee.service.ts @@ -0,0 +1,123 @@ +/* +https://docs.nestjs.com/providers#services +*/ + +import { Injectable } from '@nestjs/common'; +import * as mindee from 'mindee'; +import * as fs from "fs"; + +@Injectable() +export class MindeeService { + + async importDataInvoice() { + + + // Init a new client and add your document endpoint + const mindeeClient = new mindee.Client({ apiKey: "1ca3928852c03a843c6ac8535d2a5682" }) + .addEndpoint({ + accountName: "eduardoestevao", + endpointName: "nota_fiscal_de_servico", + }); + + // Load a file from disk and parse it + const apiResponse = mindeeClient + .docFromPath("/docs/n20.tiff") + .parse(mindee.CustomV1, { endpointName: "nota_fiscal_de_servico" }); + + // Print a brief summary of the parsed data + const resp = await apiResponse; + const dataInvoice = resp.document.toString(); + + fs.writeFileSync('/docs/invoice.txt', dataInvoice); + console.log('gravou arquivo'); + // , err => { + // if (err) { + // console.error(err); + // } + // // ficheiro escrito com sucesso + // }); + + let fornecedor: string; + let cnpj: string; + let numero: string; + let valor: number; + let valoriss: number; + + const data = fs.readFileSync('/docs/invoice.txt', 'utf-8'); + console.log('leu arquivo'); + const linhas = data.split(/\r?\n/); + console.log(linhas); + linhas.forEach((linha) => { + if (!linha.includes('-----')) { + const campo = linha.substring(0, linha.indexOf(":")); + console.log('campo: ' + campo); + if (campo == 'cliente') { + const valor = linha.substring(linha.indexOf(':') + 2); + fornecedor = valor; + console.log('Fornecedor:' + valor); + } + } + console.log('Linha: ' + linha); + }); + console.log('retornando'); + return { fornecedor: fornecedor }; + + fs.readFile('/docs/invoice.txt', 'utf-8', function(err, data) { + const linhas = data.split(/\r?\n/); + linhas.forEach(function(linha){ + if (!linha.includes('-----')) { + if (linha.includes('cliente:')) { + const valor = linha.substring(linha.indexOf(':') + 2); + fornecedor = valor; + console.log('Fornecedor:' + valor); + } + } + console.log('Linha: ' + linha); // aqui podes fazer o que precisas com cada linha + }); + }); + + + + + // return resp.document.toString(); + + /* apiResponse.then((resp) => { + + if (resp.document === undefined) return; + + // full object + console.log(resp.document); + + // string summary + console.log(resp.document.toString()); + + return resp; + + });*/ + } + + async readFile() { + let fornecedor = ''; + fs.readFile('/docs/invoice.txt', 'utf-8', async function(err, data) { + const linhas = data.split(/\r?\n/); + for ( const linha in linhas ) { + if (!linha.includes('-----')) { + if (linha.includes('cliente:')) { + const valor = linha.substring(linha.indexOf(':') + 2); + fornecedor = valor; + console.log('Fornecedor:' + valor); + } + } + console.log('Linha: ' + linha); + } + + // linhas.forEach(function(linha){ + // // aqui podes fazer o que precisas com cada linha + // }); + }); + + return { "fornecedor": fornecedor }; + + } + +} diff --git a/src/process.env b/src/process.env new file mode 100644 index 0000000..7c5b098 --- /dev/null +++ b/src/process.env @@ -0,0 +1,3 @@ +DATABASE_USER="test", +DATABASE_PASSWORD="test", +SALT_KEY="#302b044022df484ab10abe82e9510258#", \ No newline at end of file diff --git a/src/sales/address-customer/address-customer.controller.ts b/src/sales/address-customer/address-customer.controller.ts new file mode 100644 index 0000000..3ee33a1 --- /dev/null +++ b/src/sales/address-customer/address-customer.controller.ts @@ -0,0 +1,69 @@ +import { Body, Controller, Get, HttpException, HttpStatus, Param, Post, Put } from '@nestjs/common'; +import { Address } from 'src/domain/models/address.model'; +import { ResultModel } from 'src/domain/models/result.model'; +import { AddressCustomerService } from './address-customer.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Customer') +@Controller('api/v1/address') +export class AddressCustomerController { + + constructor(private readonly addressService: AddressCustomerService){} + + @Get(':idCustomer') + async getAddresses(@Param('idCustomer') idCustomer: number){ + try { + return await this.addressService.getAdresses(idCustomer); + } catch (error) { + throw new HttpException(new ResultModel(false, error.status == 404 ? + 'Não foram encontrados endereços de entrega para este cliente.' : + error.message, [], error), + error.status == 404 ? error.status : HttpStatus.INTERNAL_SERVER_ERROR); + // const status = error.status == 404 ? error.status : HttpStatus.INTERNAL_SERVER_ERROR; + // throw new HttpException(error.message, status); + } + } + + @Get(':idCustomer/:idAddress') + async getAddress(@Param('idCustomer') idCustomer: number, @Param('idAddress') idAddress: number){ + try { + return await this.addressService.getAddress(idCustomer, idAddress); + } catch (error) { + const status = error.status == 404 ? error.status : HttpStatus.INTERNAL_SERVER_ERROR; + throw new HttpException(error.message, status); + } + } + + @Get('cep/:idCustomer/:cep') + async getAddressByCep(@Param('idCustomer') idCustomer: number, @Param('cep') cep: string){ + try { + return await this.addressService.getAddressByCep(idCustomer, cep); + } catch (error) { + const status = error.status == 404 ? error.status : HttpStatus.INTERNAL_SERVER_ERROR; + throw new HttpException(error.message, status); + } + } + + @Post('create') + async createAddress(@Body() address: Address){ + try { + const addressCreate = await this.addressService.createAddress(address); + return new ResultModel(true, 'Endereço de entrega cadastrado com sucesso!', addressCreate, null); + } catch (error) { + throw new HttpException(new ResultModel(false, 'Erro ao cadastrar endereço de entrega.', {}, error), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Put() + async updateItemShopping(@Body() address: Address){ + try { + const addressCreate = await this.addressService.updateAddress(address); + return addressCreate; + } catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + +} diff --git a/src/sales/address-customer/address-customer.module.ts b/src/sales/address-customer/address-customer.module.ts new file mode 100644 index 0000000..8d5074d --- /dev/null +++ b/src/sales/address-customer/address-customer.module.ts @@ -0,0 +1,12 @@ +import { AddressCustomerController } from './address-customer.controller'; +import { AddressCustomerService } from './address-customer.service'; +import { Module } from '@nestjs/common'; + +@Module({ + imports: [], + controllers: [ + AddressCustomerController,], + providers: [ + AddressCustomerService,], +}) +export class AddressCustomerModule { } diff --git a/src/sales/address-customer/address-customer.service.ts b/src/sales/address-customer/address-customer.service.ts new file mode 100644 index 0000000..745e49f --- /dev/null +++ b/src/sales/address-customer/address-customer.service.ts @@ -0,0 +1,360 @@ +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { Address } from 'src/domain/models/address.model'; +import { Connection } from 'typeorm'; +import { Pcclientendent } from '../../domain/entity/tables/pcclientendent.entity'; +import { Pccidade } from '../../domain/entity/tables/pccidade.entity'; +import { ResultModel } from 'src/domain/models/result.model'; +import { connectionOptions } from 'src/configs/typeorm.config'; + +@Injectable() +export class AddressCustomerService { + + async getAdresses(idCustomer: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const addresses = await queryRunner.manager + .getRepository(Pcclientendent) + .createQueryBuilder('pcclientendent') + .select('\"pcclientendent\".codcli', 'customerId') + .addSelect('\"pcclientendent\".codendentcli', 'idAddress') + .addSelect('\"pcclientendent\".bairroent', 'neighbourhood') + .addSelect('\"pcclientendent\".municent', 'city') + .addSelect('\"pcclientendent\".estent', 'state') + .addSelect('\"pcclientendent\".cepent', 'zipCode') + .addSelect('\"pcclientendent\".enderent', 'street') + .addSelect('\"pcclientendent\".complementoent', 'complement') + .addSelect('\"pcclientendent\".numeroent', 'numberAddress') + .addSelect('\"pcclientendent\".codcidade', 'cityCode') + .addSelect('\"pcclientendent\".pontorefer', 'referencePoint') + .addSelect('\"pcclientendent\".observacao', 'note') + .addSelect('\"pcclientendent\".telent', 'phone') + .addSelect('\"pcclientendent\".telent', 'cellPhone') + .addSelect('\"pcclientendent\".codpracaent', 'placeId') + .addSelect('\"pcclientendent\".latitude', 'latitude') + .addSelect('\"pcclientendent\".longitude', 'longitude') + .where("\"pcclientendent\".codcli = :idCustomer", { idCustomer }) + .getRawMany(); + return new ResultModel(true, null, addresses, null); + } catch (error) { + // throw new HttpException(new ResultModel(false, error.status == 404 ? + // 'Não foram encontrados endereços de entrega para este cliente.' : + // error.message, {}, error), + // error.status == 404 ? error.status : HttpStatus.INTERNAL_SERVER_ERROR); + // console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + + async getAddress(idCustomer: number, idAddress: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + console.log('getAddress'); + try { + const sql = 'SELECT ' + + ' pcclientendent.codcli as "customerId" ' + + ' ,pcclientendent.codendentcli as "idAddress" ' + + ' ,pcclientendent.bairroent as "neighbourhood" ' + + ' ,pcclientendent.municent as "city" ' + + ' ,pcclientendent.estent as "state" ' + + ' ,pcclientendent.cepent as "zipCode" ' + + ' ,pcclientendent.enderent as "street" ' + + ' ,pcclientendent.complementoent as "complement" ' + + ' ,pcclientendent.numeroent as "numberAddress" ' + + ' ,pcclientendent.codcidade as "cityCode" ' + + ' ,pcclientendent.pontorefer as "referencePoint" ' + + ' ,pcclientendent.observacao as "note" ' + + ' ,pcclientendent.telent as "phone" ' + + ' ,pcclientendent.telent as "cellPhone" ' + + ' ,pcclientendent.codpracaent as "placeId" ' + + ' ,pcclientendent.latitude as "latitude" ' + + ' ,pcclientendent.longitude as "longitude" ' + + ' FROM pcclientendent ' + + ' WHERE pcclientendent.codcli = :idCustomer ' + + ' AND pcclientendent.codendentcli = :idAddress '; + + const address = await queryRunner.query( sql, [idCustomer, idAddress] ) ; + + // .getRepository(Pcclientendent) + // .createQueryBuilder('pcclientendent') + // .select('\"pcclientendent\".codcli', 'customerId') + // .addSelect('\"pcclientendent\".codendentcli', 'idAddress') + // .addSelect('\"pcclientendent\".bairroent', 'neighbourhood') + // .addSelect('\"pcclientendent\".municent', 'city') + // .addSelect('\"pcclientendent\".estent', 'state') + // .addSelect('\"pcclientendent\".cepent', 'zipCode') + // .addSelect('\"pcclientendent\".enderent', 'street') + // .addSelect('\"pcclientendent\".complementoent', 'complement') + // .addSelect('\"pcclientendent\".numeroent', 'numberAddress') + // .addSelect('\"pcclientendent\".codcidade', 'cityCode') + // .addSelect('\"pcclientendent\".pontorefer', 'referencePoint') + // .addSelect('\"pcclientendent\".observacao', 'note') + // .addSelect('\"pcclientendent\".telent', 'phone') + // .addSelect('\"pcclientendent\".telent', 'cellPhone') + // .addSelect('\"pcclientendent\".codpracaent', 'placeId') + // .where("\"pcclientendent\".codcli = :idCustomer", { idCustomer }) + // .andWhere("\"pcclientendent\".codendentcli = :idAddress", { idAddress }) + // .getOne(); + return address[0]; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getAddressByCep(idCustomer: number, cep: string ) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + try { + + const sql = 'SELECT ' + + ' pcclientendent.codcli as "customerId" ' + + ' ,pcclientendent.codendentcli as "idAddress" ' + + ' ,pcclientendent.bairroent as "neighbourhood" ' + + ' ,pcclientendent.municent as "city" ' + + ' ,pcclientendent.estent as "state" ' + + ' ,pcclientendent.cepent as "zipCode" ' + + ' ,pcclientendent.enderent as "street" ' + + ' ,pcclientendent.complementoent as "complement" ' + + ' ,pcclientendent.numeroent as "numberAddress" ' + + ' ,pcclientendent.codcidade as "cityCode" ' + + ' ,pcclientendent.pontorefer as "referencePoint" ' + + ' ,pcclientendent.observacao as "note" ' + + ' ,pcclientendent.telent as "phone" ' + + ' ,pcclientendent.telent as "cellPhone" ' + + ' ,pcclientendent.codpracaent as "placeId" ' + + ' ,pcclientendent.latitude as "latitude" ' + + ' ,pcclientendent.longitude as "longitude" ' + + ' FROM pcclientendent ' + + ' WHERE pcclientendent.codcli = :idCustomer ' + + " AND REGEXP_REPLACE(pcclientendent.cepent, '[^0-9]', '') = REGEXP_REPLACE(:cepent, '[^0-9]', '')"; + + const address = await queryRunner.query( sql, [idCustomer, cep]); + return address[0]; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async updateAddress(data: Address) { + + let address = await this.getAddress(data.idCustomer, data.idAddress); + if (address == null) { + throw new HttpException('Endereço não encontrado para alteração.', HttpStatus.NOT_FOUND); + } + + const cityCode = await this.findCity(data.ibgeCode); + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + console.log(data); + const customer = await queryRunner.query('SELECT PCCLIENT.CODCLI as "customerId", PCCLIENT.CLIENTE as "name", PCCLIENT.CEPENT as "zipCode", ' + + ' PCPRACA.NUMREGIAO as "region", PCCLIENT.EMAIL as "email" ' + + ' FROM PCCLIENT, PCPRACA ' + + ' WHERE PCCLIENT.CODPRACA = PCPRACA.CODPRACA (+) ' + + ' AND PCCLIENT.CODCLI = :1', [data.idCustomer]); + console.log("cliente:" + JSON.stringify(customer)); + await queryRunner.manager + .createQueryBuilder() + .update(Pcclientendent) + .set({ + enderent: data.street, + numeroent: data.numberAddress, + bairroent: data.neighbourhood, + complementoent: data.complement, + municent: data.city, + estent: data.state, + cepent: data.zipCode, + observacao: data.note, + telent: data.cellPhone, + fonerecebedor: data.phone, + codmunicipio: cityCode, + codcidade: cityCode, + codpracaent: data.placeId, + pontorefer: data.referencePoint, + razaorecebedor: customer[0].name, + fantasia: customer[0].name, + ceprecebedor: customer[0].zipCode, + numregiao: customer[0].region, + codpaisrecebedor: 1058, + emailRecebedor: customer[0].email, + latitude: ( data.latitude ) ? data.latitude.toString() : '0', + longitude:( data.longitude ) ? data.longitude.toString() : '0', + }) + .where("\"PCCLIENTENDENT\".codcli = :codcli and \"PCCLIENTENDENT\".codendentcli = :codendentcli", + { codcli: data.idCustomer, codendentcli: data.idAddress }) + .execute(); + + address = await this.getAddress(data.idCustomer, data.idAddress); + + return address; + + } catch (erro) { + console.log(erro); + throw new HttpException("Erro ao criar item no carrinho de compras", HttpStatus.INTERNAL_SERVER_ERROR); + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async createAddress(data: Address) { + console.log(data); + const address = await this.getAddressByCep(data.idCustomer, data.zipCode); + if ( address != null ) { + data.idAddress = address.idAddress; + const result = this.updateAddress(data); + return result; + } + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + + const cityCode = await this.findCity(data.ibgeCode); + const customer = await queryRunner.query('SELECT PCCLIENT.CODCLI as "customerId", PCCLIENT.CLIENTE as "name", PCCLIENT.CEPENT as "zipCode", ' + + ' PCPRACA.NUMREGIAO as "region", PCCLIENT.EMAIL as "email" ' + + ' FROM PCCLIENT, PCPRACA ' + + ' WHERE PCCLIENT.CODPRACA = PCPRACA.CODPRACA (+) ' + + ' AND PCCLIENT.CODCLI = :1', [data.idCustomer]); + + const id = await this.getIdAddress(); + const newPcclientendent = new Pcclientendent(); + newPcclientendent.codendentcli = id; + newPcclientendent.codcli = data.idCustomer; + newPcclientendent.enderent = data.street; + newPcclientendent.numeroent = data.numberAddress; + newPcclientendent.complementoent = data.complement; + newPcclientendent.bairroent = data.neighbourhood; + newPcclientendent.municent = data.city; + newPcclientendent.estent = data.state; + newPcclientendent.cepent = data.zipCode; + newPcclientendent.observacao = data.note; + newPcclientendent.fonerecebedor = data.phone; + newPcclientendent.telent = data.cellPhone; + newPcclientendent.codmunicipio = Number.parseInt(data.ibgeCode); + newPcclientendent.codcidade = cityCode; + newPcclientendent.pontorefer = data.referencePoint; + newPcclientendent.observacao = data.note; + newPcclientendent.codpracaent = data.placeId; + + newPcclientendent.razaorecebedor = customer.name; + newPcclientendent.fantasia = customer.name; + newPcclientendent.ceprecebedor = customer.cep; + newPcclientendent.numregiao = customer.region; + newPcclientendent.codpaisrecebedor = 1058; + newPcclientendent.emailRecebedor = customer.email; + newPcclientendent.latitude = ( data.latitude ) ? data.latitude.toString() : '0'; + newPcclientendent.longitude = ( data.longitude ) ? data.longitude.toString() : '0'; + + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcclientendent) + .values(newPcclientendent) + .execute(); + const newAddress: Address = { + idCustomer: data.idCustomer, + idAddress: id, + neighbourhood: data.neighbourhood, + city: data.city, + state: data.state, + zipCode: data.zipCode, + street: data.street, + complement: data.complement, + numberAddress: data.numberAddress, + cityCode: data.cityCode, + referencePoint: data.referencePoint, + note: data.note, + ibgeCode: data.ibgeCode, + phone: data.phone, + cellPhone: data.cellPhone, + placeId: data.placeId, + razaorecebedor: customer.name, + fantasia: customer.name, + ceprecebedor: customer.cep, + numregiao: customer.region, + codpaisrecebedor: 1058, + emailRecebedor: customer.email, + latitude: data.latitude, + longitude: data.longitude, + } + + return newAddress; + + } catch (erro) { + console.log(erro); + throw new HttpException("Erro ao criar endereço de entrega do cliente", HttpStatus.INTERNAL_SERVER_ERROR); + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async findCity(ibgeCode: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const city = await queryRunner.manager + .getRepository(Pccidade) + .createQueryBuilder('pccidade') + .where("\"pccidade\".CODIBGE = :codibge", { codibge: ibgeCode }) + .getOne(); + if (city == null) + return 0; + return city.codcidade; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getIdAddress() { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const address = await queryRunner.manager + .getRepository(Pcclientendent) + .createQueryBuilder('pcclientendent') + .select('max(codendentcli)', 'id') + .getRawOne(); + const id = address.id + 1; + return id; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + + +} diff --git a/src/sales/cep/cep.controller.ts b/src/sales/cep/cep.controller.ts new file mode 100644 index 0000000..66c0d1c --- /dev/null +++ b/src/sales/cep/cep.controller.ts @@ -0,0 +1,43 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Controller, Get, Param, Query } from '@nestjs/common'; +import { CepService } from './cep.service'; +import { GoogleService } from 'src/google/google.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Cep') +@Controller('api/v1/cep') +export class CepController { + + constructor( + private cepService: CepService, + private googleService: GoogleService, + ) {} + + @Get('find/:cep') + findCep(@Param('cep') cep: string){ + //return this.cepService.findCep(cep); + return this.cepService.findViaCep(cep); + } + @Get('find/viacep/:cep') + findViaCep(@Param('cep') cep: string){ + return this.cepService.findViaCep(cep); + } + + @Get('geolocation/:cep') + geolocationCep(@Param('cep') cep: string){ + return this.cepService.geoLocalicationCep(cep); + } + + @Get('google') + async geolocationGoogle(@Query() query){ + const address = query['address']; + const addressNumber = query['addressNumber']; + const neighborhood = query['neighborhood']; + const city = query['city']; + const state = query['state']; + return this.googleService.getGeocoder(address, addressNumber, neighborhood, city, state); + } +} diff --git a/src/sales/cep/cep.module.ts b/src/sales/cep/cep.module.ts new file mode 100644 index 0000000..ecfba52 --- /dev/null +++ b/src/sales/cep/cep.module.ts @@ -0,0 +1,27 @@ +import { CepService } from './cep.service'; +import { CepController } from './cep.controller'; +/* +https://docs.nestjs.com/modules +*/ + +import { HttpModule, Module } from '@nestjs/common'; +import { GoogleService } from 'src/google/google.service'; +import { ListsService } from 'src/backoffice/lists/lists.service'; + + +@Module({ + imports: [ + HttpModule + // HttpModule.register({ + // timeout: 5000, + // maxRedirects: 5, + // }), + ], + controllers: [ + CepController,], + providers: [ + CepService, + GoogleService, + ListsService], +}) +export class CepModule { } diff --git a/src/sales/cep/cep.service.ts b/src/sales/cep/cep.service.ts new file mode 100644 index 0000000..744888e --- /dev/null +++ b/src/sales/cep/cep.service.ts @@ -0,0 +1,88 @@ +/* eslint-disable @typescript-eslint/camelcase */ +/* +https://docs.nestjs.com/providers#services +*/ + +import { HttpService, Injectable } from '@nestjs/common'; +import { catchError, firstValueFrom, switchMap } from 'rxjs'; +import { Cep } from 'src/domain/models/cep.model'; +import { GeolocationCep } from 'src/domain/models/geolocation-cep.model'; +import { ViaCep } from 'src/domain/models/via-cep.model'; + +@Injectable() +export class CepService { + constructor( + private readonly httpService: HttpService) { } + + async findCep(cep: string): Promise { + const url = `http://eduardoestevaogyn-d90e3e3eb6249000.api.findcep.com/v1/cep/${cep}.json`; + const { data } = await firstValueFrom( + this.httpService.get(url, + { + headers: { + 'Accept': 'application/json', + 'Referer': 'EVAB02XJN87NY' + } + }).pipe( + catchError((error) => { + console.log(error); + throw error.response; + }), + ) + ); + + const dataGeoloacation = await this.geoLocalicationCep(cep); + + return { ...data, ...dataGeoloacation.location }; + } + + async findViaCep(cep: string): Promise { + const url = `http://viacep.com.br/ws/${cep}/json/`; + const { data } = await firstValueFrom( + this.httpService.get(url + ).pipe( + catchError((error) => { + console.log(error); + throw error.response; + }), + ) + ); + + const dataGeoloacation = { location: { latitude: 0, longitude: 0} }; + + const dataCep: Cep = { + bairro : data.bairro, + cep: data.cep, + cidade: data.localidade, + codigo_ibge: data.ibge, + complemento: data.complemento, + logradouro: data.logradouro, + nome: null, + status: null, + tipo: null, + uf: data.uf + } + + return { ...dataCep, ...dataGeoloacation.location }; + } + + async geoLocalicationCep(cep: string): Promise { + const url = `http://eduardoestevaogyn-d90e3e3eb6249000.api.findcep.com/v1/geolocation/cep/${cep}`; + const { data } = await firstValueFrom( + this.httpService.get(url, + { + headers: { + 'Accept': 'application/json', + 'Referer': 'EVAB02XJN87NY' + } + }).pipe( + catchError((error) => { + console.log(error); + throw error.response; + }), + ), + ); + return data; + } + +} diff --git a/src/sales/customer/customer.controller.ts b/src/sales/customer/customer.controller.ts new file mode 100644 index 0000000..adad69c --- /dev/null +++ b/src/sales/customer/customer.controller.ts @@ -0,0 +1,109 @@ +import { Body, Controller, Get, HttpException, HttpStatus, Param, Post, Query } from '@nestjs/common'; +import { CustomerService } from './customer.service'; +import { ResultModel } from '../../domain/models/result.model'; +import { error } from 'console'; +import { Customer } from 'src/domain/models/customer.model'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Customer') +@Controller('api/v1/customer') +export class CustomerController { + + constructor(private readonly customerService: CustomerService){} + + @Get(':name') + async getCustomerByName(@Param('name') name: string){ + try{ + const customers = await this.customerService.findCustomerByName(name); + return new ResultModel(true, null, customers, null); + } catch(err){ + throw new HttpException(new ResultModel(false, 'Não foi possível consultar o cadastro de clientes.', {}, error), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Get('categories/fechAll') + async getCategories(){ + try{ + const categories = await this.customerService.getCategory(); + return categories; + } catch(err){ + throw new HttpException(new ResultModel(false, err.message, {}, error), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Get('subcategories/fechAll') + async getSubCategories(){ + try{ + const subCategories = await this.customerService.getSubCategory(); + return subCategories; + } catch(err){ + throw new HttpException(new ResultModel(false, err.message, {}, error), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + + @Get() + async getCustomer(@Query() query){ + try{ + const field = query['field']; + const textSearch = query['textsearch']; + const customers = await this.customerService.findCustomerByQuery(field, textSearch); + return new ResultModel(true, null, customers, null); + } catch(err){ + // 'Não foi possível consultar o cadastro de clientes.' + throw new HttpException(new ResultModel(false, err.message, {}, error), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Get(':id') + async getCustomerById(@Param('id') id: number){ + try{ + const customers = await this.customerService.findCustomerById(id); + return new ResultModel(true, null, customers, null); + } catch(err){ + throw new HttpException(new ResultModel(false, 'Não foi possível consultar o cadastro de clientes.', {}, error), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Get('cpf/:cpf') + async getCustomerByCpf(@Param('cpf') cpf: string){ + try{ + console.log("pesquisando por cpf"); + const customer = await this.customerService.findCustomerByCpf(cpf); + if (!customer) return new ResultModel(false, 'Cliente não cadastrado', null, null); + return new ResultModel(true, null, customer, null); + } catch(err){ + throw new HttpException(new ResultModel(false, 'Não foi possível consultar o cadastro de clientes.', {}, error), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + @Get('create/proxnumcli') + async IdCustomer(){ + try{ + console.log('proxnumcli'); + const id = await this.customerService.generateIdCustomer(); + return new ResultModel(true, null, id, null); + } catch(err){ + throw err; + } + } + + + @Post('create') + async createCustomer(@Body() customer: Customer){ + try{ + console.log(customer); + const result = await this.customerService.createCustomer(customer); + return new ResultModel(true, null, result, null); + //return new ResultModel(true, null, id, null); + } catch(err){ + throw new HttpException(new ResultModel(false, 'Erro ao cadastrar cliente.', {}, err), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } +} diff --git a/src/sales/customer/customer.module.ts b/src/sales/customer/customer.module.ts new file mode 100644 index 0000000..888a485 --- /dev/null +++ b/src/sales/customer/customer.module.ts @@ -0,0 +1,12 @@ +import { CustomerController } from './customer.controller'; +import { CustomerService } from './customer.service'; +import { Module } from '@nestjs/common'; + +@Module({ + imports: [], + controllers: [ + CustomerController,], + providers: [ + CustomerService,], +}) +export class CustomerModule { } diff --git a/src/sales/customer/customer.service.ts b/src/sales/customer/customer.service.ts new file mode 100644 index 0000000..60afd24 --- /dev/null +++ b/src/sales/customer/customer.service.ts @@ -0,0 +1,663 @@ +import { HttpStatus } from '@nestjs/common'; +import { Injectable, HttpException } from '@nestjs/common'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { Customer } from 'src/domain/models/customer.model'; +import { Connection } from 'typeorm'; +import { Pcclient } from '../../domain/entity/tables/pcclient.entity'; +import { Estcategoriacliente } from '../../domain/entity/tables/estcategoriacliente.entity'; +import { Estsubcategoriacliente } from 'src/domain/entity/tables/estsubcategoriacliente.entity'; + +@Injectable() +export class CustomerService { + + async findCustomerByName(name: string) { + let auxName = ''; + for (let i = 0; i < name.length; i++) { + auxName += name[i].replace("@", "%"); + } + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = ' SELECT pcclient.cliente as "name" ' + + ' ,pcclient.codcli as "customerId" ' + + ' ,pcclient.emailnfe as "email" ' + + ' ,pcclient.cgcent as "cpfCnpj" ' + + ' ,pcclient.sexo as "gender" ' + + ' ,pcclient.enderent as "address" ' + + ' ,pcclient.numeroent as "addressNumber" ' + + ' ,pcclient.complementoent as "complement" ' + + ' ,pcclient.bairroent as "neigborhood" ' + + ' ,pcclient.municent as "city" ' + + ' ,pcclient.estent as "state" ' + + ' ,pcclient.cepent as "zipCode" ' + + ' ,pcclient.telent as "phone" ' + + ' ,pcclient.telcelent as "cellPhone" ' + + ' ,pcclient.ieent as "numberState" ' + + ' ,pcclient.codcategoria as "categoryId" ' + + ' ,pcclient.codsubcategoria as "subCategoryId" ' + + ' ,pcclient.codpraca as "placeId" ' + + ' ,pcclient.codusur1 as "sellerId" ' + + ' ,pccidade.codibge as "ibgeCode" ' + + ' ,pcclient.dtnasc as "birthdate" ' + + ' ,pcclient.codatv1 as "ramoId" ' + + ' ,pcclient.meiocomunicacao as "communicate" ' + + ' ,pcclient.latitude as "latitude" ' + + ' ,pcclient.longitude as "longitude" ' + + ' ,pcclient.codmunicipio as "ibgeCode" ' + + ' ,pcclient.codcidade as "cityId" ' + + ' FROM pcclient, pccidade ' + + ' WHERE pcclient.codcidade = pccidade.codcidade (+)'; + let where = ` AND ( pcclient.cliente like '%'||'${auxName.replace('@', '%')}'||'%' OR ` + + ` REGEXP_REPLACE(pcclient.cgcent, '[^0-9]', '') = REGEXP_REPLACE('${name}', '[^0-9]') OR ` + + ` pcclient.codcli = REGEXP_REPLACE('${name}', '[^0-9]') )`; + where += ` AND pcclient.codcli NOT IN (2) AND pcclient.DTEXCLUSAO IS NULL `; + const orderBy = ` ORDER BY pcclient.cliente `; + const pagination = ` OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY`; + const customers = await queryRunner.manager + .query(sql + where + orderBy + pagination) as Customer[]; + return customers; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async findCustomerByCpf(cpf: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = ' SELECT pcclient.cliente as "name" ' + + ' ,pcclient.codcli as "customerId" ' + + ' ,pcclient.emailnfe as "email" ' + + ' ,pcclient.cgcent as "cpfCnpj" ' + + ' ,pcclient.sexo as "gender" ' + + ' ,pcclient.enderent as "address" ' + + ' ,pcclient.numeroent as "addressNumber" ' + + ' ,pcclient.complementoent as "complement" ' + + ' ,pcclient.bairroent as "neighborhood" ' + + ' ,pcclient.municent as "city" ' + + ' ,pcclient.estent as "state" ' + + ' ,pcclient.cepent as "zipCode" ' + + ' ,pcclient.telent as "phone" ' + + ' ,pcclient.telcelent as "cellPhone" ' + + ' ,pcclient.ieent as "numberState" ' + + ' ,pcclient.codcategoria as "categoryId" ' + + ' ,pcclient.codsubcategoria as "subCategoryId" ' + + ' ,pcclient.codpraca as "placeId" ' + + ' ,pcclient.codusur1 as "sellerId" ' + + ' ,pccidade.codibge as "ibgeCode" ' + + ' ,pcclient.dtnasc as "birthdate" ' + + ' ,pcclient.codatv1 as "ramoId" ' + + ' ,pcclient.meiocomunicacao as "communicate" ' + + ' ,pcclient.latitude as "latitude" ' + + ' ,pcclient.longitude as "longitude" ' + + ' ,pcclient.codmunicipio as "ibgeCode" ' + + ' ,pcclient.codcidade as "cityId" ' + + ' FROM pcclient, pccidade ' + + ' WHERE pcclient.codcidade = pccidade.codcidade (+)'; + const where = ` AND REGEXP_REPLACE(pcclient.cgcent, '[^0-9]', '') =REGEXP_REPLACE('${cpf}', '[^0-9]', '')`; + const customer = await queryRunner.query(sql + where); + return customer[0]; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async findCustomerById(idCustomer: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + + const sql = ' SELECT pcclient.cliente as "name" ' + + ' ,pcclient.codcli as "customerId" ' + + ' ,pcclient.emailnfe as "email" ' + + ' ,pcclient.cgcent as "cpfCnpj" ' + + ' ,pcclient.sexo as "gender" ' + + ' ,pcclient.enderent as "address" ' + + ' ,pcclient.numeroent as "addressNumber" ' + + ' ,pcclient.complementoent as "complement" ' + + ' ,pcclient.bairroent as "neighborhood" ' + + ' ,pcclient.municent as "city" ' + + ' ,pcclient.estent as "state" ' + + ' ,pcclient.cepent as "zipCode" ' + + ' ,pcclient.telent as "phone" ' + + ' ,pcclient.telcelent as "cellPhone" ' + + ' ,pcclient.ieent as "numberState" ' + + ' ,pcclient.codcategoria as "categoryId" ' + + ' ,pcclient.codsubcategoria as "subCategoryId" ' + + ' ,pcclient.codpraca as "placeId" ' + + ' ,pcclient.codusur1 as "sellerId" ' + + ' ,pccidade.codibge as "ibgeCode" ' + + ' ,pcclient.dtnasc as "birthdate" ' + + ' ,pcclient.codatv1 as "ramoId" ' + + ' ,pcclient.meiocomunicacao as "communicate" ' + + ' ,pcclient.latitude as "latitude" ' + + ' ,pcclient.longitude as "longitude" ' + + ' ,pcclient.codmunicipio as "ibgeCode" ' + + ' ,pcclient.codcidade as "cityId" ' + + ' FROM pcclient, pccidade ' + + ' WHERE pcclient.codcidade = pccidade.codcidade (+)'; + const where = ` AND pcclient.codcli = ${idCustomer}`; + const customer = await queryRunner.query(sql + where); + // const customer = await queryRunner.manager + // .getRepository(Pcclient) + // .createQueryBuilder('pcclient') + // .select("\"pcclient\".codcli as \"customerId\"") + // .addSelect("\"pcclient\".cliente as \"name\"") + // .addSelect("\"pcclient\".emailnfe as \"email\"") + // .addSelect("\"pcclient\".cgcent as \"cpfCnpj\"") + // .addSelect("\"pcclient\".ieent as \"numberState\"") + // .addSelect("\"pcclient\".enderent as \"address\"") + // .addSelect("\"pcclient\".numeroent as \"addressNumber\"") + // .addSelect("\"pcclient\".bairroent as \"neighborhood\"") + // .addSelect("\"pcclient\".complementoent as \"complement\"") + // .addSelect("\"pcclient\".municent as \"city\"") + // .addSelect("\"pcclient\".estent as \"state\"") + // .addSelect("\"pcclient\".cepent as \"zipCode\"") + // .addSelect("\"pcclient\".telent as \"phone\"") + // .addSelect("\"pcclient\".telcelent as \"cellPhone\"") + // .addSelect("\"pcclient\".codcategoria as \"categoryId\"") + // .addSelect("\"pcclient\".codsubcategoria as \"subCategoryId\"") + // .addSelect("\"pcclient\".codpraca as \"placeId\"") + // .where("\"pcclient\".codcli = :codcli", { codcli: idCustomer }) + // .andWhere("\"pcclient\".CODCLI NOT IN (2)") + // .getOne(); + return customer[0]; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async findCustomerByQuery(field: string, textSearch: string) { + let where = ""; + switch (field) { + case "name": + where += "\"pcclient\".cliente like '" + textSearch + "%'"; + break; + case "document": + where += "REGEXP_REPLACE(\"pcclient\".cgcent, '[^0-9]', '') = REGEXP_REPLACE('" + textSearch + "', '[^0-9]', '')"; + break; + case "phone": + where += "REGEXP_REPLACE(\"pcclient\".telent, '[^0-9]', '') = REGEXP_REPLACE('" + textSearch + "', '[^0-9]', '')"; + break; + case "cellphone": + where += "REGEXP_REPLACE(\"pcclient\".telcelent, '[^0-9]', '') = REGEXP_REPLACE('" + textSearch + "', '[^0-9]', '')"; + break; + case "customerId": + where += "\"pcclient\".codcli = " + textSearch; + break; + default: + throw new HttpException('Não foi informado um campo válido para pesquisa.', HttpStatus.BAD_REQUEST); + } + /* + if (document){ + where += "REGEXP_REPLACE(\"pcclient\".cgcent, '[^0-9]', '') = REGEXP_REPLACE('"+document+"', '[^0-9]', '')"; + } + if (name){ + + if(where.length > 0) { + where += " AND \"pcclient\".cliente like '" + name + "%'"; + } else { + where += "\"pcclient\".cliente like '" + name + "%'"; + } + }*/ + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const customers = await queryRunner.manager + .getRepository(Pcclient) + .createQueryBuilder('pcclient') + .select("\"pcclient\".codcli as \"customerId\"") + .addSelect("\"pcclient\".cliente as \"name\"") + .addSelect("\"pcclient\".emailnfe as \"email\"") + .addSelect("\"pcclient\".cgcent as \"cpfCnpj\"") + .addSelect("\"pcclient\".sexo as \"gender\"") + .addSelect("\"pcclient\".enderent as \"address\"") + .addSelect("\"pcclient\".numeroent as \"addressNumber\"") + .addSelect("\"pcclient\".bairroent as \"neighborhood\"") + .addSelect("\"pcclient\".complementoent as \"complement\"") + .addSelect("\"pcclient\".municent as \"city\"") + .addSelect("\"pcclient\".estent as \"state\"") + .addSelect("\"pcclient\".cepent as \"zipCode\"") + .addSelect("\"pcclient\".telent as \"phone\"") + .addSelect("\"pcclient\".telcelent as \"cellPhone\"") + .addSelect("\"pcclient\".codcategoria as \"categoryId\"") + .addSelect("\"pcclient\".codsubcategoria as \"subCategoryId\"") + .addSelect("\"pcclient\".codpraca as \"placeId\"") + .addSelect("\"pcclient\".ieent as \"numberState\"") + .addSelect("\"pcclient\".latitude as \"latitude\"") + .addSelect("\"pcclient\".longitude as \"longitude\"") + .addSelect("\"pcclient\".codmunicipio as \"ibgeCode\"") + .addSelect("\"pcclient\".codcidade as \"cityId\"") + .where(where) + .andWhere("\"pcclient\".CODCLI NOT IN (2) AND \"pcclient\".DTEXCLUSAO IS NULL") + .getRawMany(); + return customers; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async createCustomer(customer: Customer) { + try { + console.log("Dados consumer: " + JSON.stringify(customer)); + const newCustomer = await this.InitializeCustomer(); + newCustomer.tipofj = (customer.company == 'true' ? "J" : "F"); + newCustomer.ieent = (customer.company == 'true' ? customer.numberState : "ISENTO"); + newCustomer.inscestadual = newCustomer.ieent; + newCustomer.cgcent = customer.cpfCnpj; + newCustomer.sexo = customer.gender; + newCustomer.cgcentrega = customer.cpfCnpj; + newCustomer.cliente = customer.name.toUpperCase(); + newCustomer.fantasia = newCustomer.cliente; + newCustomer.email = customer.email.toLowerCase(); + newCustomer.emailnfe = customer.email.toLowerCase(); + newCustomer.telent = customer.cellPhone; + newCustomer.telcelent = customer.cellPhone; + newCustomer.celularwhatsapp = customer.cellPhone; + newCustomer.codusur1 = customer.sellerId; + newCustomer.codatv1 = ( customer.ramo != null && customer.ramo.id > 0 ) ? customer.ramo.id : newCustomer.codatv1; + //Endereço de entrega + newCustomer.cepent = customer.zipCode; + newCustomer.enderent = customer.address.toUpperCase(); + newCustomer.numeroent = customer.addressNumber; + if ( customer.complement !== null && customer.complement.length > 80 ) { + newCustomer.complementoent = customer.complement.substring(0, 80 ).toUpperCase(); + } else { + if ( customer.complement != null ) { + newCustomer.complementoent = customer.complement.toUpperCase(); + } + } + newCustomer.bairroent = customer.neighborhood.toUpperCase(); + newCustomer.municent = customer.city.toUpperCase(); + newCustomer.estent = customer.state.toUpperCase(); + //Endereço de comercial + newCustomer.cepcom = customer.zipCode; + newCustomer.endercom = customer.address.toUpperCase(); + newCustomer.numerocom = customer.addressNumber.toUpperCase(); + if ( customer.complement !== null && customer.complement.length > 80 ) { + newCustomer.complementocom = customer.complement.substring(0, 80 ).toUpperCase(); + } else { + if ( customer.complement != null ) { + newCustomer.complementocom = customer.complement.toUpperCase(); + } + } + newCustomer.bairrocom = customer.neighborhood.toUpperCase(); + newCustomer.municcom = customer.city.toUpperCase(); + newCustomer.estcom = customer.state.toUpperCase(); + //Endereço de cobrança + newCustomer.cepcob = customer.zipCode; + newCustomer.endercob = customer.address.toUpperCase(); + newCustomer.numerocob = customer.addressNumber; + if ( customer.complement !== null && customer.complement.length > 80 ) { + newCustomer.complementocob = customer.complement.substring(0, 80 ).toUpperCase(); + } else { + if ( customer.complement ) { + newCustomer.complementocob = customer.complement.toUpperCase(); + } + } + newCustomer.bairrocob = customer.neighborhood.toUpperCase(); + newCustomer.municcob = customer.city.toUpperCase(); + newCustomer.estcob = customer.state.toUpperCase(); + newCustomer.codcategoria = (customer.category != null) ? customer.category.id : null; + newCustomer.codsubcategoria = (customer.subCategory != null) ? customer.subCategory.id : null; + newCustomer.codpraca = customer.place.id; + newCustomer.codcidade = customer.ibgeCode != null ? await this.findCity(customer.ibgeCode) : null; + newCustomer.codmunicipio = Number.parseInt(customer.ibgeCode); + newCustomer.codcidadecom = newCustomer.codcidade; + newCustomer.dtnasc = customer.birthdate; + newCustomer.meiocomunicacao = customer.communicate; + newCustomer.codfunccad = customer.idUser; + newCustomer.codfunccadastro = customer.idUser; + newCustomer.codfuncultalter = customer.idUser; + newCustomer.dtultalter = new Date(); + newCustomer.latitude = customer.latitude; + newCustomer.longitude = customer.longitude; + + const oldCustomer = await this.findCustomerByCpf(newCustomer.cgcent); + if (oldCustomer) { + console.log('Cliente localizado: ' + oldCustomer.customerId); + newCustomer.codcli = oldCustomer.customerId; + await this.updateCustomer(newCustomer); + return { + customerId: oldCustomer.customerId, + company: customer.company, name: customer.name, sexo: customer.gender, + cpfCnpj: customer.cpfCnpj, numberState: customer.numberState, + email: customer.email, zipCode: customer.zipCode, address: customer.address, + addressNumber: customer.addressNumber, complement: customer.complement, + neighborhood: customer.neighborhood, + city: customer.city, state: customer.state, + allowMessage: customer.allowMessage, cellPhone: customer.cellPhone, + category: customer.category, subCategory: customer.subCategory, + place: customer.place, ramo: customer.ramo, meiocomunicacao: customer.communicate, + latitude: customer.latitude, longitude: customer.longitude, ibgeCode: customer.ibgeCode + }; + } else { + const idCustomer = await this.generateIdCustomer(); + if (idCustomer == -1) + return new HttpException("Erro ao gerar númeração de cliente.", HttpStatus.INTERNAL_SERVER_ERROR); + newCustomer.codcli = idCustomer; + await this.insertCustomer(newCustomer); + return { + customerId: idCustomer, + company: customer.company, name: customer.name, + cpfCnpj: customer.cpfCnpj, gender: customer.gender, numberState: customer.numberState, + email: customer.email, zipCode: customer.zipCode, address: customer.address, + addressNumber: customer.addressNumber, complement: customer.complement, + neighborhood: customer.neighborhood, + city: customer.city, state: customer.state, + allowMessage: customer.allowMessage, cellPhone: customer.cellPhone, + category: customer.category, subCategory: customer.subCategory, + place: customer.place, meiocomunicacao: customer.communicate, + ramo: customer.ramo, latitude: customer.latitude, longitude: customer.longitude, ibgeCode: customer.ibgeCode + }; + } + } catch (error) { + throw error; + } + } + + async updateCustomer(client: Pcclient) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + console.log("MEIO DE COMUNICACAO: " + client.meiocomunicacao); + await queryRunner.manager + .createQueryBuilder() + .update(Pcclient) + .set({ + cliente: client.cliente, + fantasia: client.cliente, + telcelent: client.telcelent, + sexo: client.sexo, + telent: client.telent, + email: client.email, + emailnfe: client.email, + cepent: client.cepent, + enderent: client.enderent, + numeroent: client.numeroent, + complementoent: client.complementoent, + bairroent: client.bairroent, + municent: client.municent, + estent: client.estent, + cepcob: client.cepent, + endercob: client.enderent, + numerocob: client.numeroent, + complementocob: client.complementoent, + bairrocob: client.bairroent, + municcob: client.municent, + estcob: client.estent, + cepcom: client.cepent, + endercom: client.enderent, + numerocom: client.numeroent, + complementocom: client.complementoent, + bairrocom: client.bairroent, + municcom: client.municent, + estcom: client.estent, + codcategoria: client.codcategoria, + codsubcategoria: client.codsubcategoria, + codpraca: client.codpraca, + codcidade: client.codcidade, + codmunicipio: client.codmunicipio, + codcidadecom: client.codcidade, + dtnasc: client.dtnasc, + codatv1: client.codatv1, + meiocomunicacao: client.meiocomunicacao, + codfuncultalter: client.codfuncultalter, + dtultalter: client.dtultalter, + latitude: client.latitude, + longitude: client.longitude, + }) + .where({ codcli: client.codcli }) + .execute(); + await queryRunner.commitTransaction(); + return client; + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + if ( queryRunner.isTransactionActive) { + await queryRunner.rollbackTransaction(); + } + await queryRunner.release(); + await connection.close(); + } + + } + + async findCity(ibgeCode: string) { + if (ibgeCode == null) { + return 0; + } + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const city = await queryRunner.query('SELECT PCCIDADE.CODCIDADE as "codigoCidade" FROM PCCIDADE WHERE PCCIDADE.codibge = :1', [ibgeCode]); + let cityId = 0; + if (city.length > 0) { + cityId = city[0].codigoCidade; + } + return cityId; + } catch (err) { + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async InitializeCustomer() { + const cliente = new Pcclient(); + cliente.codusur1 = 1; + cliente.codplpag = 10; + cliente.codpraca = 119; + cliente.codcob = "D"; + cliente.dtcadastro = new Date(); + cliente.codcontab = "1"; + cliente.aceitavendafracao = "N"; + //cliente.Meiocomunicacao = "N"; + cliente.bloqueio = "N"; + cliente.bloqueiosefaz = "N"; + cliente.bloqueiosefazped = "N"; + cliente.bloqvendapf = "N"; + cliente.condvenda1 = "S"; + cliente.condvenda5 = "S"; + cliente.condvenda7 = "S"; + cliente.condvenda8 = "S"; + cliente.contribuinte = "N"; + cliente.validarmultiplovenda = "N"; + cliente.codfunccad = 1; + cliente.codfunccadastro = 1; + cliente.horacadastro = new Date(); + cliente.dtcadastro = new Date(); + cliente.dtultvisita = new Date(); + cliente.codatv1 = 7; + cliente.aceitatrocanegativa = "N"; + cliente.consumidorfinal = "S"; + cliente.aplicadescnf = "S"; + cliente.simplesnacional = "N"; + cliente.sexo = "M"; + cliente.isencaosuframa = "T"; + cliente.clicrm = "N"; + cliente.tv10usacustoproduto = "N"; + cliente.inscestadual = "ISENTO"; + cliente.codpais = 1058; //Brasil + cliente.observacao = "Importado do E-Commerce"; + cliente.aceitachterceiros = "S"; + cliente.agregarvalorstdescfin = "N"; + cliente.anvisa = "N"; + cliente.aplicredbaseicmstransp = "N"; + cliente.atendedomingo = "N"; + cliente.atendequarta = "N"; + cliente.atendequinta = "N"; + cliente.atendesabado = "N"; + cliente.atendesegunda = "N"; + cliente.atendesexta = "N"; + cliente.atendeterca = "N"; + cliente.atualizasaldoccdescfin = "N"; + cliente.bloqremcob = "N"; + cliente.clientedan = "N"; + cliente.clientefontest = "N"; + cliente.clientemonitorado = "N"; + cliente.clientprotesto = "S"; + cliente.fretedespacho = "0"; + cliente.aceitavendafracao = "S"; + cliente.validarmultiplovenda = "S"; + + return cliente; + } + + async generateIdCustomer() { + console.log("Gerando idcustomer"); + const connection = new Connection(connectionOptions); + const queryRunner = connection.createQueryRunner(); + try { + + await connection.connect(); + + await queryRunner.connect(); + + // lets now open a new transaction: + await queryRunner.startTransaction(); + + + let sql = `SELECT PROXNUMCLI as "proxnumcli" FROM PCCONSUM WHERE 1 = 1 FOR UPDATE`; + let param = await queryRunner.query(sql); + + // const param = await queryRunner.manager + // .getRepository(Pcconsum) + // .createQueryBuilder('pcconsum') + // .setLock("dirty_read") + // .getOne(); + + const idCustomer = param[0].proxnumcli; + console.log(idCustomer); + sql = `UPDATE PCCONSUM SET PROXNUMCLI = NVL(PROXNUMCLI,0) + 1`; + param = await queryRunner.query(sql); + // await queryRunner.manager + // .createQueryBuilder() + // .update(Pcconsum) + // .set({ proxnumcli: idCustomer + 1 }) + // .execute(); + + // commit transaction now: + await queryRunner.commitTransaction(); + return idCustomer; + + } catch (err) { + // since we have errors let's rollback changes we made + if ( queryRunner.isTransactionActive) { + await queryRunner.rollbackTransaction(); + } + console.log(err); + return -1; + + } finally { + if ( queryRunner.isTransactionActive) { + await queryRunner.rollbackTransaction(); + } + // you need to release query runner which is manually created: + await queryRunner.release(); + await connection.close(); + } + } + + async insertCustomer(client: Pcclient) { + console.log(client); + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcclient) + .values(client) + .execute(); + await queryRunner.commitTransaction(); + return client; + } catch (err) { + await queryRunner.rollbackTransaction(); + console.log(err); + throw err; + } finally { + if ( queryRunner.isTransactionActive) { + await queryRunner.rollbackTransaction(); + } + await queryRunner.release(); + await connection.close(); + } + } + + async getCategory() { + const connectionDb = new Connection(connectionOptions) + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + return await queryRunner.manager + .getRepository(Estcategoriacliente) + .createQueryBuilder("estcategoriacliente") + .getMany(); + + } catch (err) { + console.log(err); + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async getSubCategory() { + const connectionDb = new Connection(connectionOptions) + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + return await queryRunner.manager + .getRepository(Estsubcategoriacliente) + .createQueryBuilder("estsubcategoriacliente") + .getMany(); + + } catch (err) { + console.log(err); + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + +} diff --git a/src/sales/dashboard/dashboard.controller.ts b/src/sales/dashboard/dashboard.controller.ts new file mode 100644 index 0000000..1899b14 --- /dev/null +++ b/src/sales/dashboard/dashboard.controller.ts @@ -0,0 +1,44 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Controller, Get, Param, Query } from '@nestjs/common'; +import { DashboardService } from './dashboard.service'; + +@Controller('api/v1/dashboard') +export class DashboardController { + + constructor(private dashboardService: DashboardService){} + + @Get('sale') + getSale() { + return this.dashboardService.dashboarSale(); + } + + @Get('sale/store') + getSaleSellers(@Query() query) { + let supervisorIds: string; + if (query['ids'] != null) { + supervisorIds = query['ids']; + } + return this.dashboardService.dashboardSeller(null, supervisorIds); + } + + + @Get('sale/company') + getSaleCompany(@Query() query) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + let supervisorIds: string; + if (query['ids'] != null) { + supervisorIds = query['ids']; + } + return this.dashboardService.dashboardCompany(); + } + + + @Get('sale/:supervisorId') + getSaleSeller(@Param('supervisorId') supervisorId: number) { + return this.dashboardService.dashboardSeller(supervisorId, null); + } + +} diff --git a/src/sales/dashboard/dashboard.module.ts b/src/sales/dashboard/dashboard.module.ts new file mode 100644 index 0000000..3964ca3 --- /dev/null +++ b/src/sales/dashboard/dashboard.module.ts @@ -0,0 +1,16 @@ +import { DashboardService } from './dashboard.service'; +import { DashboardController } from './dashboard.controller'; +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; + +@Module({ + imports: [], + controllers: [ + DashboardController,], + providers: [ + DashboardService,], +}) +export class DashboardModule { } diff --git a/src/sales/dashboard/dashboard.service.ts b/src/sales/dashboard/dashboard.service.ts new file mode 100644 index 0000000..c986d27 --- /dev/null +++ b/src/sales/dashboard/dashboard.service.ts @@ -0,0 +1,705 @@ +/* +https://docs.nestjs.com/providers#services +*/ + +import { Injectable } from '@nestjs/common'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { Connection } from 'typeorm'; + +@Injectable() +export class DashboardService { + + async dashboarSale() { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const sqlSale = `SELECT ROUND(SUM(VLVENDA),2) as "sale", + ROUND(SUM(CUSTOFIN),2) as "cost", + ROUND(SUM(VLDEVOLUCAO),2) as "devolution", + ROUND(SUM(VLMETA),2) as "objetivo", + CASE WHEN SUM(VLVENDA) > 0 THEN + ROUND(( ( ( SUM(VLVENDA) - SUM(CUSTOFIN) ) / SUM(VLVENDA) ) * 100 ),2) ELSE 0 END as "profit", + CASE WHEN SUM(VLMETA) > 0 THEN ROUND((( SUM(VLVENDA) / SUM(VLMETA) ) * 100),2) ELSE 0 END as "percentual", + SUM(NFS) as "nfs" + FROM ( + SELECT VENDAS.DTSAIDA, VENDAS.CODSUPERVISOR, + SUM(VENDAS.VLVENDA) VLVENDA, + SUM(VENDAS.VLCUSTOFIN) CUSTOFIN, + 0 VLDEVOLUCAO, + 0 VLMETA, + COUNT(DISTINCT VENDAS.NUMTRANSVENDA) NFS + FROM view_vendas_resumo_faturamento vendas + WHERE VENDAS.DTSAIDA = TRUNC(SYSDATE) + AND VENDAS.CONDVENDA IN (1,7) + GROUP BY VENDAS.DTSAIDA, VENDAS.CODSUPERVISOR + UNION ALL + SELECT DEVOLUCAO.DTENT DTSAIDA, PCUSUARI.CODSUPERVISOR, + ROUND(SUM(DEVOLUCAO.vldevolucao * (-1)), 2) VLVENDA, + ROUND(SUM(DEVOLUCAO.VLCUSTOFIN * (-1)), 2) VLCUSTOFIN, + ROUND(SUM(DEVOLUCAO.VLDEVOLUCAO), 2) VLDEVOLUCAO, + 0 VLMETA, + 0 NFS + FROM view_devol_resumo_faturamento devolucao, PCNFSAID, PCNFENT, PCUSUARI + WHERE devolucao.dtent = TRUNC(SYSDATE) + AND DEVOLUCAO.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA (+) + AND DEVOLUCAO.NUMTRANSENT = PCNFENT.NUMTRANSENT + AND DEVOLUCAO.codusurdevol = PCUSUARI.CODUSUR + GROUP BY DEVOLUCAO.DTENT, PCUSUARI.CODSUPERVISOR + UNION ALL + SELECT PCMETARCA.DATA, PCUSUARI.CODSUPERVISOR, + 0 VLVENDA, + 0 VLCUSTOFIN, + 0 VLDEVOLUCAO, + SUM(PCMETARCA.VLVENDAPREV) VLMETA, + 0 NFS + FROM PCMETARCA, PCUSUARI + WHERE PCMETARCA.DATA = trunc(sysdate) + AND PCMETARCA.CODUSUR = PCUSUARI.CODUSUR + GROUP BY PCMETARCA.DATA, PCUSUARI.CODSUPERVISOR ) DADOS`; + + const sqlSaleBySupervisor = `SELECT DADOS.CODSUPERVISOR as "supervisorId", + PCSUPERV.NOME as "name", + ROUND(SUM(VLVENDA),2) as "sale", + ROUND(SUM(CUSTOFIN),2) as "cost", + ROUND(SUM(VLDEVOLUCAO),2) as "devolution", + ROUND(SUM(VLMETA),2) as "objetivo", + CASE WHEN SUM(VLVENDA) > 0 THEN + ROUND(( ( ( SUM(VLVENDA) - SUM(CUSTOFIN) ) / SUM(VLVENDA) ) * 100 ),2) ELSE 0 END as "profit", + CASE WHEN SUM(VLMETA) > 0 THEN ROUND((( SUM(VLVENDA) / SUM(VLMETA) ) * 100),2) ELSE 0 END as "percentual", + SUM(NFS) as "nfs" + FROM ( + SELECT VENDAS.DTSAIDA, VENDAS.CODSUPERVISOR, + SUM(VENDAS.VLVENDA) VLVENDA, + SUM(VENDAS.VLCUSTOFIN) CUSTOFIN, + 0 VLDEVOLUCAO, + 0 VLMETA, + COUNT(DISTINCT VENDAS.NUMTRANSVENDA) NFS + FROM view_vendas_resumo_faturamento vendas + WHERE VENDAS.DTSAIDA = TRUNC(SYSDATE) + AND VENDAS.CONDVENDA IN (1,7) + GROUP BY VENDAS.DTSAIDA, VENDAS.CODSUPERVISOR + UNION ALL + SELECT DEVOLUCAO.DTENT DTSAIDA, PCUSUARI.CODSUPERVISOR, + SUM(DEVOLUCAO.vldevolucao * (-1)) VLVENDA, + SUM(DEVOLUCAO.VLCUSTOFIN * (-1)) VLCUSTOFIN, + SUM(DEVOLUCAO.VLDEVOLUCAO) VLDEVOLUCAO, + 0 VLMETA, + 0 NFS + FROM view_devol_resumo_faturamento devolucao, PCNFSAID, PCNFENT, PCUSUARI + WHERE devolucao.dtent = TRUNC(SYSDATE) + AND DEVOLUCAO.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA (+) + AND DEVOLUCAO.NUMTRANSENT = PCNFENT.NUMTRANSENT + AND DEVOLUCAO.codusurdevol = PCUSUARI.CODUSUR + GROUP BY DEVOLUCAO.DTENT, PCUSUARI.CODSUPERVISOR + UNION ALL + SELECT PCMETARCA.DATA, PCUSUARI.CODSUPERVISOR, + 0 VLVENDA, + 0 VLCUSTOFIN, + 0 VLDEVOLUCAO, + SUM(PCMETARCA.VLVENDAPREV) VLMETA, + 0 NFS + FROM PCMETARCA, PCUSUARI + WHERE PCMETARCA.DATA = TRUNC(SYSDATE) + AND PCMETARCA.CODUSUR = PCUSUARI.CODUSUR + GROUP BY PCMETARCA.DATA, PCUSUARI.CODSUPERVISOR ) DADOS, PCSUPERV + WHERE DADOS.CODSUPERVISOR = PCSUPERV.CODSUPERVISOR + GROUP BY DADOS.CODSUPERVISOR, PCSUPERV.NOME + ORDER BY SUM(DADOS.VLVENDA) DESC`; + + const sale = await queryRunner.query(sqlSale); + const saleBySupervisor = await queryRunner.query(sqlSaleBySupervisor); + + const data = { ...sale[0], saleSupervisor: [...saleBySupervisor] }; + return data; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + } + + async dashboardSeller(supervisorId: number, supervisorIds: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + let filter = ''; + if (supervisorId != null) { + filter = `CODSUPERVISOR = ${supervisorId} `; + } + if (supervisorIds != null) { + filter = `CODSUPERVISOR IN ( ${supervisorIds} )`; + } + + const sqlDashboard = `SELECT PCSUPERV.CODSUPERVISOR as "supervisorId", + PCSUPERV.NOME as "store", + PCUSUARI.CODUSUR as "sellerId", + PCUSUARI.NOME as "sellerName", + MAX(DIASMES.QTDIAS) as "qtdeDaysMonth", + MAX(DIASMES.QTDIASTRANSCORRIDOS) as "qtdeDays", + SUM(DADOS.VLMETA) as "objetivo" , + SUM(DADOS.VLVENDA) as "saleValue", + SUM(DADOS.VLDEVOLUCAO) as "devolution", + ( SUM(DADOS.VLVENDA) - SUM(DADOS.VLMETA) ) as "dif", + ROUND(CASE WHEN ( SUM(DADOS.VLVENDA) - SUM(DADOS.VLMETA) ) < 0 THEN + ( SUM(DADOS.VLMETA) - SUM(DADOS.VLVENDA) ) / + DECODE(( MAX(DIASMES.QTDIAS) - MAX(DIASMES.QTDIASTRANSCORRIDOS) ), 0, 1, ( MAX(DIASMES.QTDIAS) - MAX(DIASMES.QTDIASTRANSCORRIDOS) ) ) + ELSE 0 END,2) as "ObjetivoSale", + ( CASE WHEN SUM(DADOS.VLMETA) > 0 THEN + ROUND(( SUM(DADOS.VLVENDA) / SUM(DADOS.VLMETA) * 100),2) + ELSE 0 END ) as "percentualObjective", + SUM(DADOS.QTNOTAS) as "qtdeInvoice", + CASE WHEN SUM(DADOS.QTNOTAS) > 0 THEN + ROUND(( SUM(DADOS.VLVENDA) / SUM(DADOS.QTNOTAS) ),2) + ELSE 0 END as "ticket", + SUM(DADOS.VLTABELA) as "listPrice", + ( SUM(DADOS.VLTABELA) - SUM(DADOS.VLVENDA) ) as "discountValue", + ROUND(CASE WHEN SUM(DADOS.VLTABELA) > 0 THEN + ( ( SUM(DADOS.VLTABELA) - SUM(DADOS.VLVENDA) ) / SUM(DADOS.VLTABELA) * 100 ) + ELSE 0 END,2) as "percentOff", + SUM(DADOS.MIX) as "mix", + SUM(DADOS.VLMETADIA) as "objetiveToday", + SUM(DADOS.VLVENDADIA) as "saleToday", + SUM(DADOS.VLORCAMENTO) as "preSaleValue", + SUM(DADOS.QTORCAMENTO) as "preSaleQtde", + SUM(DADOS.QTNOTASDIA) as "qtdeInvoiceDay", + SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORA / 100) as "objetiveHour", + ( CASE WHEN SUM(DADOS.VLMETADIA) > 0 THEN + ROUND(( SUM(DADOS.VLVENDADIA) / SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORA / 100) * 100),2) + ELSE 0 END ) as "percentualObjectiveHour", + SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORATOTAL / 100) as "objetiveTotalHour", + ( CASE WHEN SUM(DADOS.VLMETADIA) > 0 THEN + ROUND(( SUM(DADOS.VLVENDADIA) / SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORATOTAL / 100) * 100),2) + ELSE 0 END ) as "percentualObjectiveTotalHour" + FROM ( SELECT PCMETARCA.CODUSUR, + SUM(PCMETARCA.VLVENDAPREV) VLMETA, + 0 VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + 0 VLVENDADIA, + 0 VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + 0 VLMETADIA, + 0 QTNOTASDIA + FROM PCMETARCA + WHERE PCMETARCA.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),-1)) + 1 AND LAST_DAY(TRUNC(SYSDATE)) + GROUP BY PCMETARCA.CODUSUR + UNION ALL + SELECT PCMETARCA.CODUSUR, + 0 VLMETA, + 0 VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + 0 VLVENDADIA, + 0 VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + SUM(PCMETARCA.VLVENDAPREV) VLMETADIA, + 0 QTNOTASDIA + FROM PCMETARCA + WHERE PCMETARCA.DATA = TRUNC(SYSDATE) + GROUP BY PCMETARCA.CODUSUR + UNION ALL + SELECT VENDAS.CODUSUR, + 0 VLMETA, + SUM(VENDAS.VLVENDA) VLVENDA, + COUNT(DISTINCT VENDAS.NUMPED) QTNOTAS, + SUM(VENDAS.VLTABELA) VLTABELA, + COUNT(DISTINCT VENDAS.CODPROD) MIX, + 0 VLVENDADIA, + 0 VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + 0 VLMETADIA, + 0 QTNOTASDIA + FROM view_vendas_resumo_faturamento VENDAS + WHERE VENDAS.DTSAIDA BETWEEN LAST_DAY(ADD_MONTHS((TRUNC(SYSDATE) - 1),-1)) + 1 AND TRUNC(SYSDATE) + AND VENDAS.CONDVENDA IN (1,7) + GROUP BY VENDAS.CODUSUR + UNION ALL + SELECT DEVOLUCAO.CODUSURDEVOL CODUSUR, + 0 VLMETA, + SUM(DEVOLUCAO.VLDEVOLUCAO * (-1)) VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + 0 VLVENDADIA, + SUM(DEVOLUCAO.VLDEVOLUCAO) VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + 0 VLMETADIA, + 0 QTNOTASDIA + FROM view_devol_resumo_faturamento DEVOLUCAO + WHERE DEVOLUCAO.DTENT BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE)-1,-1)) + 1 AND TRUNC(SYSDATE) + GROUP BY DEVOLUCAO.CODUSURDEVOL + UNION ALL + SELECT VENDAS.CODUSUR, + 0 VLMETA, + 0 VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + SUM(VENDAS.VLVENDA) VLVENDADIA, + 0 VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + 0 VLMETADIA, + COUNT(DISTINCT VENDAS.NUMPED) QTNOTASDIA + FROM view_vendas_resumo_faturamento VENDAS + WHERE VENDAS.DTSAIDA = TRUNC(SYSDATE) + AND VENDAS.CONDVENDA IN (1,7) + GROUP BY VENDAS.CODUSUR + UNION ALL + SELECT DEVOLUCAO.CODUSURDEVOL CODUSUR, + 0 VLMETA, + 0 VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + SUM(DEVOLUCAO.VLDEVOLUCAO * (-1)) VLVENDADIA, + 0 VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + 0 VLMETADIA, + 0 QTNOTASDIA + FROM view_devol_resumo_faturamento DEVOLUCAO + WHERE DEVOLUCAO.DTENT = TRUNC(SYSDATE) + GROUP BY DEVOLUCAO.CODUSURDEVOL + UNION ALL + SELECT PCORCAVENDAC.CODUSUR, + 0 VLMETA, + 0 VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + 0 VLVENDADIA, + 0 VLDEVOLUCAO, + SUM(PCORCAVENDAC.VLATEND) VLORCAMENTO, + COUNT(DISTINCT PCORCAVENDAC.NUMORCA) QTORCAMENTO, + 0 VLMETADIA, + 0 QTNOTASDIA + FROM PCORCAVENDAC + WHERE NVL(PCORCAVENDAC.ORCAMENTOUTILIZADO,'N') = 'N' + AND PCORCAVENDAC.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE) - 1, -1)) + 1 AND TRUNC(SYSDATE) + GROUP BY PCORCAVENDAC.CODUSUR + ,PCORCAVENDAC.CODSUPERVISOR + ) DADOS, + ( SELECT COUNT(1) QTDIAS + ,COUNT(CASE WHEN PCDIASUTEIS.DATA < TRUNC(SYSDATE) THEN 1 ELSE NULL END) QTDIASTRANSCORRIDOS + FROM PCDIASUTEIS + WHERE PCDIASUTEIS.CODFILIAL = '4' + AND PCDIASUTEIS.DIAVENDAS = 'S' + AND PCDIASUTEIS.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),-1)) + 1 AND LAST_DAY(TRUNC(SYSDATE)) ) DIASMES, + (SELECT ESTMETAHORA.CODSUPERVISOR, + CASE WHEN TO_CHAR(SYSDATE, 'D') = 7 THEN + ESTMETAHORA.PERCMETADOM + ELSE ESTMETAHORA.PERCMETAHORA END PERCMETAHORA + , CASE WHEN TO_CHAR(SYSDATE, 'D') = 7 THEN + ESTMETAHORA.PERCMETADOMTOTAL + ELSE ESTMETAHORA.PERCMETAHORATOTAL END PERCMETAHORATOTAL + FROM ESTMETAHORA + WHERE ESTMETAHORA.${filter} + AND TO_CHAR(HORA, 'HH24') = TO_CHAR(SYSDATE, 'HH24')) META_HORA, + PCUSUARI, PCSUPERV + WHERE PCUSUARI.CODUSUR = DADOS.CODUSUR + AND PCUSUARI.CODSUPERVISOR = PCSUPERV.CODSUPERVISOR + AND PCUSUARI.CODSUPERVISOR = META_HORA.CODSUPERVISOR + AND PCUSUARI.${filter} + -- HAVING SUM(DADOS.VLMETA) > 0 + GROUP BY PCSUPERV.CODSUPERVISOR, PCSUPERV.NOME, PCUSUARI.CODUSUR, PCUSUARI.NOME + ORDER BY PCUSUARI.NOME`; + + const saleByRCA = await queryRunner.query(sqlDashboard); + let initialValue = 0; + const totalSale = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.saleValue, + initialValue, + ); + + initialValue = 0; + const totalObjetive = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.objetivo, + initialValue, + ); + initialValue = 0; + const totalObjetiveDay = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.objetiveToday, + initialValue, + ); + + initialValue = 0; + const totalDiscount = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.discountValue, + initialValue, + ); + initialValue = 0; + const totalMix = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.mix, + initialValue, + ); + + initialValue = 0; + const totalNFs = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.qtdeInvoice, + initialValue, + ); + + initialValue = 0; + const totalSaleToday = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.saleToday, + initialValue, + ); + + initialValue = 0; + const totalDevolution = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.devolution, + initialValue, + ); + + initialValue = 0; + const totalQtNfsDia = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.qtdeInvoiceDay, + initialValue, + ); + + const percentualSale = Number.parseFloat(((totalSale / totalObjetive) * 100).toFixed(2)); + + initialValue = 0; + const totalObjetiveHour = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.objetiveHour, + initialValue, + ); + + const percentualObjetiveHour = Number.parseFloat(((totalSaleToday / totalObjetiveHour) * 100).toFixed(2)); + + + initialValue = 0; + const totalObjetiveCompanyHour = saleByRCA.reduce( + (accumulator, currentValue) => accumulator + currentValue.objetiveTotalHour, + initialValue, + ); + + const percentualObjetiveCompanyHour = Number.parseFloat(((totalSaleToday / totalObjetiveCompanyHour) * 100).toFixed(2)); + + + + const data = { + objetive: totalObjetive, sale: totalSale, percentualSale: percentualSale, + discount: totalDiscount, nfs: totalNFs, mix: totalMix, objetiveToday: totalObjetiveDay, + saleToday: totalSaleToday, nfsToday: totalQtNfsDia, devolution: totalDevolution, + objetiveHour: totalObjetiveHour, percentualObjetiveHour: percentualObjetiveHour, + objetiveTotalHour: totalObjetiveCompanyHour, percentualObjetiveTotalHour: percentualObjetiveCompanyHour, + saleSupervisor: [...saleByRCA] + }; + return data; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async dashboardCompany() { //supervisorId: number, supervisorIds: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + + const sqlDashboard = `SELECT PCSUPERV.CODSUPERVISOR as "supervisorId", + PCSUPERV.NOME as "store", + MAX(DIASMES.QTDIAS) as "qtdeDaysMonth", + MAX(DIASMES.QTDIASTRANSCORRIDOS) as "qtdeDays", + SUM(DADOS.VLMETA) as "objetivo" , + SUM(DADOS.VLVENDA) as "saleValue", + SUM(DADOS.VLDEVOLUCAO) as "devolution", + ( SUM(DADOS.VLVENDA) - SUM(DADOS.VLMETA) ) as "dif", + ROUND(CASE WHEN ( SUM(DADOS.VLVENDA) - SUM(DADOS.VLMETA) ) < 0 THEN + ( SUM(DADOS.VLMETA) - SUM(DADOS.VLVENDA) ) / + DECODE(( MAX(DIASMES.QTDIAS) - MAX(DIASMES.QTDIASTRANSCORRIDOS) ), 0, 1, ( MAX(DIASMES.QTDIAS) - MAX(DIASMES.QTDIASTRANSCORRIDOS) ) ) + ELSE 0 END,2) as "ObjetivoSale", + ( CASE WHEN SUM(DADOS.VLMETA) > 0 THEN + ROUND(( SUM(DADOS.VLVENDA) / SUM(DADOS.VLMETA) * 100),2) + ELSE 0 END ) as "percentualObjective", + SUM(DADOS.QTNOTAS) as "qtdeInvoice", + CASE WHEN SUM(DADOS.QTNOTAS) > 0 THEN + ROUND(( SUM(DADOS.VLVENDA) / SUM(DADOS.QTNOTAS) ),2) + ELSE 0 END as "ticket", + SUM(DADOS.VLTABELA) as "listPrice", + ( SUM(DADOS.VLTABELA) - SUM(DADOS.VLVENDA) ) as "discountValue", + ROUND(CASE WHEN SUM(DADOS.VLTABELA) > 0 THEN + ( ( SUM(DADOS.VLTABELA) - SUM(DADOS.VLVENDA) ) / SUM(DADOS.VLTABELA) * 100 ) + ELSE 0 END,2) as "percentOff", + SUM(DADOS.MIX) as "mix", + SUM(DADOS.VLMETADIA) as "objetiveToday", + SUM(DADOS.VLVENDADIA) as "saleToday", + SUM(DADOS.VLORCAMENTO) as "preSaleValue", + SUM(DADOS.QTORCAMENTO) as "preSaleQtde", + SUM(DADOS.QTNOTASDIA) as "qtdeInvoiceDay", + SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORA / 100) as "objetiveHour", + ( CASE WHEN SUM(DADOS.VLMETADIA) > 0 THEN + ROUND(( SUM(DADOS.VLVENDADIA) / SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORA / 100) * 100),2) + ELSE 0 END ) as "percentualObjectiveHour", + SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORATOTAL / 100) as "objetiveTotalHour", + ( CASE WHEN SUM(DADOS.VLMETADIA) > 0 THEN + ROUND(( SUM(DADOS.VLVENDADIA) / SUM(DADOS.VLMETADIA * META_HORA.PERCMETAHORATOTAL / 100) * 100),2) + ELSE 0 END ) as "percentualObjectiveTotalHour", + SUM(DADOS.VLCUSTOFIN) as "profitValue" + FROM ( SELECT PCMETARCA.CODUSUR, + SUM(PCMETARCA.VLVENDAPREV) VLMETA, + 0 VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + 0 VLVENDADIA, + 0 VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + 0 VLMETADIA, + 0 QTNOTASDIA, + 0 VLCUSTOFIN + FROM PCMETARCA + WHERE PCMETARCA.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),-1)) + 1 AND TRUNC(SYSDATE) - 1 + GROUP BY PCMETARCA.CODUSUR + UNION ALL + SELECT PCMETARCA.CODUSUR, + 0 VLMETA, + 0 VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + 0 VLVENDADIA, + 0 VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + SUM(PCMETARCA.VLVENDAPREV) VLMETADIA, + 0 QTNOTASDIA, + 0 VLCUSTOFIN + FROM PCMETARCA + WHERE PCMETARCA.DATA = TRUNC(SYSDATE) + GROUP BY PCMETARCA.CODUSUR + UNION ALL + SELECT VENDAS.CODUSUR, + 0 VLMETA, + SUM(VENDAS.VLVENDA) VLVENDA, + COUNT(DISTINCT VENDAS.NUMPED) QTNOTAS, + SUM(VENDAS.VLTABELA) VLTABELA, + COUNT(DISTINCT VENDAS.CODPROD) MIX, + 0 VLVENDADIA, + 0 VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + 0 VLMETADIA, + 0 QTNOTASDIA, + 0 VLCUSTOFIN + FROM view_vendas_resumo_faturamento VENDAS + WHERE VENDAS.DTSAIDA BETWEEN LAST_DAY(ADD_MONTHS((TRUNC(SYSDATE) - 1),-1)) + 1 AND TRUNC(SYSDATE) - 1 + AND VENDAS.CONDVENDA IN (1,7) + GROUP BY VENDAS.CODUSUR + UNION ALL + SELECT DEVOLUCAO.CODUSURDEVOL CODUSUR, + 0 VLMETA, + SUM(DEVOLUCAO.VLDEVOLUCAO * (-1)) VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + 0 VLVENDADIA, + SUM(DEVOLUCAO.VLDEVOLUCAO) VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + 0 VLMETADIA, + 0 QTNOTASDIA, + 0 VLCUSTOFIN + FROM view_devol_resumo_faturamento DEVOLUCAO + WHERE DEVOLUCAO.DTENT BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE)-1,-1)) + 1 AND TRUNC(SYSDATE) - 1 + GROUP BY DEVOLUCAO.CODUSURDEVOL + UNION ALL + SELECT VENDAS.CODUSUR, + 0 VLMETA, + 0 VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + SUM(VENDAS.VLVENDA) VLVENDADIA, + 0 VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + 0 VLMETADIA, + COUNT(DISTINCT VENDAS.NUMPED) QTNOTASDIA, + SUM(VENDAS.VLCUSTOFIN) VLCUSTOFIN + FROM view_vendas_resumo_faturamento VENDAS + WHERE VENDAS.DTSAIDA = TRUNC(SYSDATE) + AND VENDAS.CONDVENDA IN (1,7) + GROUP BY VENDAS.CODUSUR + UNION ALL + SELECT DEVOLUCAO.CODUSURDEVOL CODUSUR, + 0 VLMETA, + 0 VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + SUM(DEVOLUCAO.VLDEVOLUCAO * (-1)) VLVENDADIA, + 0 VLDEVOLUCAO, + 0 VLORCAMENTO, + 0 QTORCAMENTO, + 0 VLMETADIA, + 0 QTNOTASDIA, + SUM(DEVOLUCAO.VLCUSTOFIN * (-1)) VLCUSTOFIN + FROM view_devol_resumo_faturamento DEVOLUCAO + WHERE DEVOLUCAO.DTENT = TRUNC(SYSDATE) + GROUP BY DEVOLUCAO.CODUSURDEVOL + UNION ALL + SELECT PCORCAVENDAC.CODUSUR, + 0 VLMETA, + 0 VLVENDA, + 0 QTNOTAS, + 0 VLTABELA, + 0 MIX, + 0 VLVENDADIA, + 0 VLDEVOLUCAO, + SUM(PCORCAVENDAC.VLATEND) VLORCAMENTO, + COUNT(DISTINCT PCORCAVENDAC.NUMORCA) QTORCAMENTO, + 0 VLMETADIA, + 0 QTNOTASDIA, + 0 VLCUSTOFIN + FROM PCORCAVENDAC + WHERE NVL(PCORCAVENDAC.ORCAMENTOUTILIZADO,'N') = 'N' + AND PCORCAVENDAC.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE) - 1, -1)) + 1 AND TRUNC(SYSDATE) + GROUP BY PCORCAVENDAC.CODUSUR + ,PCORCAVENDAC.CODSUPERVISOR + ) DADOS, + ( SELECT COUNT(1) QTDIAS + ,COUNT(CASE WHEN PCDIASUTEIS.DATA < TRUNC(SYSDATE) THEN 1 ELSE NULL END) QTDIASTRANSCORRIDOS + FROM PCDIASUTEIS + WHERE PCDIASUTEIS.CODFILIAL = '4' + AND PCDIASUTEIS.DIAVENDAS = 'S' + AND PCDIASUTEIS.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),-1)) + 1 AND LAST_DAY(TRUNC(SYSDATE)) ) DIASMES, + (SELECT ESTMETAHORA.CODSUPERVISOR, + CASE WHEN TO_CHAR(SYSDATE, 'D') = 7 THEN + ESTMETAHORA.PERCMETADOM + ELSE ESTMETAHORA.PERCMETAHORA END PERCMETAHORA + , CASE WHEN TO_CHAR(SYSDATE, 'D') = 7 THEN + ESTMETAHORA.PERCMETADOMTOTAL + ELSE ESTMETAHORA.PERCMETAHORATOTAL END PERCMETAHORATOTAL + FROM ESTMETAHORA + WHERE TO_CHAR(HORA, 'HH24') = TO_CHAR(SYSDATE, 'HH24')) META_HORA, + PCUSUARI, PCSUPERV + WHERE PCUSUARI.CODUSUR = DADOS.CODUSUR + AND PCUSUARI.CODSUPERVISOR = PCSUPERV.CODSUPERVISOR + AND PCUSUARI.CODSUPERVISOR = META_HORA.CODSUPERVISOR + -- HAVING SUM(DADOS.VLMETA) > 0 + GROUP BY PCSUPERV.CODSUPERVISOR, PCSUPERV.NOME + ORDER BY PCSUPERV.NOME`; + + const saleByStore = await queryRunner.query(sqlDashboard); + let initialValue = 0; + const totalSale = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.saleValue, + initialValue, + ); + + initialValue = 0; + const totalObjetive = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.objetivo, + initialValue, + ); + initialValue = 0; + const totalObjetiveDay = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.objetiveToday, + initialValue, + ); + + initialValue = 0; + const totalDiscount = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.discountValue, + initialValue, + ); + initialValue = 0; + const totalMix = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.mix, + initialValue, + ); + + initialValue = 0; + const totalNFs = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.qtdeInvoice, + initialValue, + ); + + initialValue = 0; + const totalSaleToday = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.saleToday, + initialValue, + ); + + initialValue = 0; + const totalDevolution = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.devolution, + initialValue, + ); + + initialValue = 0; + const totalQtNfsDia = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.qtdeInvoiceDay, + initialValue, + ); + + const percentualSale = Number.parseFloat(((totalSale / totalObjetive) * 100).toFixed(2)); + + initialValue = 0; + const totalObjetiveHour = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.objetiveHour, + initialValue, + ); + + const percentualObjetiveHour = Number.parseFloat(((totalSaleToday / totalObjetiveHour) * 100).toFixed(2)); + + + initialValue = 0; + const totalObjetiveCompanyHour = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.objetiveTotalHour, + initialValue, + ); + + const percentualObjetiveCompanyHour = Number.parseFloat(((totalSaleToday / totalObjetiveCompanyHour) * 100).toFixed(2)); + + initialValue = 0; + const totalProfitCompany = saleByStore.reduce( + (accumulator, currentValue) => accumulator + currentValue.profitValue, + initialValue, + ); + + const profitPerc = ( ( totalSaleToday - totalProfitCompany) / totalSaleToday ) * 100; + const profitValue = ( totalSaleToday - totalProfitCompany); + + + const data = { + objetive: totalObjetive, sale: totalSale, percentualSale: percentualSale, + discount: totalDiscount, nfs: totalNFs, mix: totalMix, objetiveToday: totalObjetiveDay, + saleToday: totalSaleToday, nfsToday: totalQtNfsDia, devolution: totalDevolution, + objetiveHour: totalObjetiveHour, percentualObjetiveHour: percentualObjetiveHour, + objetiveTotalHour: totalObjetiveCompanyHour, percentualObjetiveTotalHour: percentualObjetiveCompanyHour, + profitValue: profitValue, profitPerc: profitPerc, + saleSupervisor: [...saleByStore] + }; + return data; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } +} diff --git a/src/sales/order/order.controller.ts b/src/sales/order/order.controller.ts new file mode 100644 index 0000000..501bd60 --- /dev/null +++ b/src/sales/order/order.controller.ts @@ -0,0 +1,154 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Body, Controller, Get, HttpException, HttpStatus, Post, Req } from '@nestjs/common'; +import { Param } from '@nestjs/common/decorators'; +import { Cart } from 'src/domain/models/cart.model'; +import { ResultModel } from 'src/domain/models/result.model'; +import { OrderService } from './order.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Order') +@Controller('api/v1/order') +export class OrderController { + constructor(private readonly orderService: OrderService) { } + + @Get('list') + async getOrder(@Req() request) { + try { + let store = ''; + let initialDate = new Date(); + let finalDate = new Date(); + let name: string; + let document: string; + let sellerId = 0; + let idOrder = ''; + if (request.query['x-store']) + store = request.query['x-store']; + if (request.query['initialDate']){ + initialDate = request.query['initialDate']; + } + if (request.query['finalDate']){ + finalDate = request.query['finalDate'] = finalDate; + } + if (request.query['document']) + document = request.query['document']; + if (request.query['name']) + name = request.query['name']; + if (request.query['sellerId']) + sellerId = request.query['sellerId']; + if (request.query['idOrder']) + idOrder = request.query['idOrder']; + const result = await this.orderService.getOrders(store, initialDate, finalDate, document, name, sellerId, idOrder); + return result; + } catch (err) { + throw new HttpException(new ResultModel(false, err.errors.message, {}, err), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + + @Get('cart') + async getCart(@Req() request) { + console.log('consultando pedido de venda'); + let orderId = 0; + const query = request.query; + if (query.orderId) { + orderId = query.orderId; + } + if (orderId == 0) { + throw new HttpException('Informe um número do pedido de venda para realizar a pesquisa.', HttpStatus.BAD_REQUEST); + } + return await this.orderService.getCartId(orderId); + } + + @Get('productsTax') + async getProductsWithoutTax(@Req() request) { + let cartId = ''; + let customerId = 0; + const query = request.query; + if (query.cartId) { + cartId = query.cartId; + } + if (query.customerId) { + customerId = query.customerId; + } + return await this.orderService.productsWithoutTax(cartId, customerId); + } + + @Get('orderretiraposterior') + async getOrdersRetiraPosterior() { + return await this.orderService.OrderRetiraPosterior(); + } + + @Get('itens/:id') + async getItensOrder(@Param('id') orderId: number) { + console.log('consultando pedido de venda'); + if (orderId == 0) { + throw new HttpException('Informe um número do pedido de venda para realizar a pesquisa.', HttpStatus.BAD_REQUEST); + } + return await this.orderService.getItensOrder(orderId); + } + + + @Post('create') + async createOrder(@Body() cart: Cart) { + console.log("cart: " + JSON.stringify(cart)); + try { + const result = await this.orderService.create(cart); + return new ResultModel(true, null, result, null); + } catch (err) { + console.log(err); + throw new HttpException(new ResultModel(false, err.response, {}, err), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Get('products-order') + async getProductsOrder(@Req() request) { + try { + let store = ''; + let initialDate = new Date(); + let finalDate = new Date(); + let name: string; + let document: string; + let sellerId = 0; + let idOrder = ''; + let typeFilterProduct = ''; + let productText = ''; + if (request.query['x-store']) + store = request.query['x-store']; + + if (request.query['initialDate']){ + initialDate = request.query['initialDate']; + } + if (request.query['finalDate']){ + finalDate = request.query['finalDate'] = finalDate; + } + if (request.query['document']) + document = request.query['document']; + if (request.query['name']) + name = request.query['name']; + if (request.query['sellerId']) + sellerId = request.query['sellerId']; + if (request.query['idOrder']) + idOrder = request.query['idOrder']; + if (request.query['typeFilterProduct']) + typeFilterProduct = request.query['typeFilterProduct']; + if (request.query['productText']) + productText = request.query['productText']; + + const result = await this.orderService + .getProductsOrder(store, initialDate, finalDate, + document, name, sellerId, idOrder, + typeFilterProduct, + productText ); + return result; + } catch (err) { + throw new HttpException(new ResultModel(false, err.errors.message, {}, err), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + +} diff --git a/src/sales/order/order.module.ts b/src/sales/order/order.module.ts new file mode 100644 index 0000000..1ee94b1 --- /dev/null +++ b/src/sales/order/order.module.ts @@ -0,0 +1,30 @@ +import { OrderController } from './order.controller'; +/* +https://docs.nestjs.com/modules +*/ + +import { HttpModule, Module } from '@nestjs/common'; +import { OrderService } from './order.service'; +import { ListsService } from 'src/backoffice/lists/lists.service'; +import { CustomerService } from '../customer/customer.service'; +import { AddressCustomerService } from '../address-customer/address-customer.service'; +import { ShoppingService } from '../shopping/shopping.service'; +import { UserService } from 'src/Auth/services/user.service'; + +@Module({ + imports: [HttpModule], + controllers: [ + OrderController, + OrderController,], + providers: [ + OrderService, + OrderService, + ListsService, + CustomerService, + AddressCustomerService, + ShoppingService, + UserService, + ], + exports: [OrderService] +}) +export class OrderModule { } diff --git a/src/sales/order/order.service.ts b/src/sales/order/order.service.ts new file mode 100644 index 0000000..f4f43a7 --- /dev/null +++ b/src/sales/order/order.service.ts @@ -0,0 +1,1177 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { ShoppingItens } from 'src/domain/entity/tables/estprevendai.entity'; +import { Sale } from 'src/domain/entity/tables/estvenda.entity'; +import { Pcpedctemp } from 'src/domain/entity/tables/pcpedctemp.entity'; +import { Connection, QueryRunner } from 'typeorm'; +import { Pcclient } from '../../domain/entity/tables/pcclient.entity'; +import { Pcpeditemp } from 'src/domain/entity/tables/pcpeditemp.entity'; +import { Cart } from 'src/domain/models/cart.model'; +import { Pcpedc } from '../../domain/entity/tables/pcpedc.entity'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { ListsService } from 'src/backoffice/lists/lists.service'; +import { CustomerService } from '../customer/customer.service'; +import { AddressCustomerService } from '../address-customer/address-customer.service'; +import { ShoppingService } from '../shopping/shopping.service'; + +@Injectable() +export class OrderService { + + constructor( + private readonly listsService: ListsService, + private readonly customerService: CustomerService, + private readonly addressCustomerService: AddressCustomerService, + private readonly shoppingService: ShoppingService, + ) { } + + async create(cart: Cart) { + const shopping = await this.findShopping(cart.id); + if (shopping == null) + throw new HttpException("Carrinho de compras não localizado.", HttpStatus.NOT_FOUND); + const order = await this.createOrder(cart); + return order; + } + + async deleteOrdersDelivery(orderId: number, userId: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + try { + const orderCancel = await queryRunner.query('SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPED = :NUMPED', [orderId]); + + if (orderCancel !== null && orderCancel.length > 0) { + await queryRunner.startTransaction(); + await queryRunner.query("UPDATE PCPEDC SET VENDAASSISTIDA = 'N', RESERVAESTOQUETV7 = 'N' WHERE NUMPEDENTFUT = :1", [orderId]); + await queryRunner.commitTransaction(); + const ordersDelivery = await queryRunner + .query("SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPEDENTFUT = :1", [orderId]); + for (const orderDelivery of ordersDelivery) { + await queryRunner + .query("BEGIN ESK_VENDA.CANCELAR_PEDIDO(:1, :2); END;", [orderDelivery.numped, userId]); + } + } + } catch (erro) { + if (queryRunner.isTransactionActive) { + await queryRunner.commitTransaction(); + } + throw erro; + } finally { + if (queryRunner.isTransactionActive) { + await queryRunner.rollbackTransaction(); + } + await queryRunner.release(); + await connection.close(); + } + } + + async createOrder(cart: Cart) { + + const prevenda = await this.shoppingService.getShopping(cart.id); + let idPreOrder = 0; + cart.idSeller = prevenda.codusur; + if (prevenda.numped > 0) { + idPreOrder = await this.getIdOrder(prevenda.codusur); + } else { + idPreOrder = await this.getIdOrder(cart.idSeller); + } + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + try { + + if (prevenda.numped > 0) { + // await this.deleteOrdersDelivery(prevenda.numped, cart.userId); + const orders = await queryRunner.query('SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPED = :NUMPED', [prevenda.numped]); + if (orders !== null && orders.length > 0) { + await queryRunner + .query("BEGIN ESK_VENDA.CANCELAR_PEDIDO(:1, :2); END;", [prevenda.numped, cart.userId]); + const orderCancel = await queryRunner + .query('SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPED = :1', [prevenda.numped]); + if (orderCancel.length > 0) { + throw new HttpException('Não foi possível alterar o pedido de venda, verifique se o pedido já não encontra-se FATURADO ou em SEPARAÇÃO.', HttpStatus.BAD_REQUEST); + } + } + + } + + // if ( prevenda.codcli === null || prevenda.codcli === 1){ + // this.createPreCustomer(cart); + // } + + const preOrder = await this.createPreOrder(cart, idPreOrder); + + await queryRunner + .query("BEGIN IMPORTARVENDAS.IMPORTARPEDIDOWEB(:preOrder, :idSeller); END;", [preOrder.numpedrca, preOrder.codusur]); + + const order = await queryRunner.manager + .getRepository(Pcpedc) + .createQueryBuilder('pcpedc') + .where("\"pcpedc\".numpedrca = :idPreOrder AND \"pcpedc\".CONDVENDA IN (1,7)", { idPreOrder: preOrder.numpedrca }) + .getOne(); + + if (!order) { + const logPreOrder = await queryRunner.query('SELECT PCPEDCTEMP.NUMPEDRCA, PCPEDCTEMP.observacao_pc as \"resultado\" FROM PCPEDCTEMP WHERE PCPEDCTEMP.NUMPEDRCA = :idPreOrder', + [preOrder.numpedrca]); + console.log(JSON.stringify(logPreOrder)); + throw new HttpException('Erro ao gerar pedido de venda - ' + logPreOrder[0].resultado, HttpStatus.INTERNAL_SERVER_ERROR); + } + + if (queryRunner.isTransactionActive) { + queryRunner.commitTransaction(); + } + + await queryRunner.startTransaction(); + try { + // Atualizar numero do pedido na tabela de pre venda para + let sql = ` UPDATE ESTPREVENDAC SET NUMPED = ${order.numped} ` + + ` WHERE ESTPREVENDAC.ID = '${cart.id}' `; + await queryRunner.query(sql); + + sql = `UPDATE PCORCAVENDAC SET ORCAMENTOUTILIZADO = 'S' ` + + ` ,NUMPED = ${order.numped} ` + + ` WHERE PCORCAVENDAC.NUMORCA = ( SELECT ESTPREVENDAC.NUMORCA FROM ESTPREVENDAC WHERE ID = '${cart.id}' ) `; + await queryRunner.query(sql); + + // await queryRunner + // .query("BEGIN ESK_VENDA.RESERVA_PIGMENTO_TINTOMETRICO(:1); END;", [cart.id]); + + + sql = `UPDATE PCPEDC SET ` + + ` POSICAO = 'L' ` + + ` , MOTIVOPOSICAO = NULL ` + + ` , CODMOTIVO = NULL ` + + ` , DATA = TRUNC(DATA) ` + + ` , CODMOTBLOQUEIO = 0 ` + + ` , CODDISTRIB = 1 ` + + ` , DTENTREGA = TRUNC(DTENTREGA) ` + + ` , ORIGEMPED = 'T' ` + + ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + + ` , ROTINALANC = 'VENDAWEB' ` + + ` , ROTINALANCULTALT = 'VENDAWEB' ` + + ` , TIPOVENDA = 'VV' ` + + ` , TIPOEMBALAGEM = 'U' ` + + ` , PRAZO1 = NVL(PRAZO1,0) ` + + ` WHERE NUMPED = :1 ` + + ` AND NOT EXISTS(SELECT PCBLOQUEIO.CODMOTBLOQUEIO FROM PCBLOQUEIO WHERE PCBLOQUEIO.CODCOB = PCPEDC.CODCOB) ` + + ` AND ( CODCOB IN ('DH', 'D') OR CODCOB LIKE 'CAR%' ` + + ` OR EXISTS(SELECT PCCOB.CODCOB FROM PCCOB ` + + ` WHERE PCCOB.CODCOB = PCPEDC.CODCOB ` + + ` AND NVL(PCCOB.CARTAO,'N') = 'S') ) `; + await queryRunner.manager + .query(sql, [order.numped]); + sql = `UPDATE PCPEDI SET POSICAO = 'L' WHERE NUMPED = :1 ` + + ` AND EXISTS( SELECT PCPEDC.NUMPED FROM PCPEDC ` + + ` WHERE PCPEDC.NUMPED = PCPEDI.NUMPED ` + + ` AND NOT EXISTS(SELECT PCBLOQUEIO.CODMOTBLOQUEIO FROM PCBLOQUEIO WHERE PCBLOQUEIO.CODCOB = PCPEDC.CODCOB) ` + + ` AND ( PCPEDC.CODCOB IN ('DH', 'D', 'CAR') OR CODCOB LIKE 'CAR%' ` + + ` OR EXISTS(SELECT PCCOB.CODCOB FROM PCCOB ` + + ` WHERE PCCOB.CODCOB = PCPEDC.CODCOB ` + + ` AND NVL(PCCOB.CARTAO,'N') = 'S') ) )`; + await queryRunner.manager + .query(sql, [order.numped]); + + await this.updateStatusItem(queryRunner, order.numped); + + + sql = ` UPDATE PCPEDC SET ` + + ` POSICAO = 'L' ` + + ` , MOTIVOPOSICAO = NULL ` + + ` , CODMOTIVO = NULL ` + + ` , DATA = TRUNC(DATA) ` + + ` , DTENTREGA = TRUNC(DTENTREGA) ` + + ` , DTPREVENTREGA = TRUNC(DTENTREGA) ` + + ` , ORIGEMPED = 'T' ` + + ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + + ` , ROTINALANC = 'VENDAWEB' ` + + ` , ROTINALANCULTALT = 'VENDAWEB' ` + + ` , CODMOTBLOQUEIO = NULL ` + + ` , CODDISTRIB = 1 ` + + ` , TIPOVENDA = 'VV' ` + + ` , TIPOEMBALAGEM = 'U' ` + + ` , PRAZO1 = NVL(PRAZO1,0) ` + + `WHERE NOT EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI ` + + ` WHERE PCPEDI.NUMPED = PCPEDC.NUMPED ` + + ` AND PCPEDI.POSICAO NOT IN ('L') ) ` + + ` AND PCPEDC.NUMPEDENTFUT = :1 ` + + ` AND EXISTS(SELECT TV7.NUMPED FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ` + + ` AND TV7.POSICAO = 'L' )`; + + await queryRunner.manager.query(sql, [order.numped]); + sql = ` UPDATE PCPEDC SET ` + + ` POSICAO = ( SELECT PCPEDI.POSICAO FROM PCPEDI WHERE PCPEDI.NUMPED = PCPEDC.NUMPED AND ROWNUM = 1 ) ` + + ` , MOTIVOPOSICAO = NULL ` + + ` , CODMOTIVO = NULL ` + + ` , DTENTREGA = TRUNC(DTENTREGA) ` + + ` , DTPREVENTREGA = TRUNC(DTENTREGA) ` + + ` , DATA = TRUNC(DATA) ` + + ` , ORIGEMPED = 'T' ` + + ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + + ` , ROTINALANC = 'VENDAWEB' ` + + ` , ROTINALANCULTALT = 'VENDAWEB' ` + + ` , CODMOTBLOQUEIO = NULL ` + + ` , CODDISTRIB = 1 ` + + ` , TIPOVENDA = 'VV' ` + + ` , TIPOEMBALAGEM = 'U' ` + + ` , PRAZO1 = NVL(PRAZO1,0) ` + + `WHERE EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI ` + + ` WHERE PCPEDI.NUMPED = PCPEDC.NUMPED ` + + ` AND PCPEDI.POSICAO NOT IN ('L') ) ` + + ` AND PCPEDC.NUMPEDENTFUT = :1 ` + + ` AND EXISTS(SELECT TV7.NUMPED FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ` + + ` AND TV7.POSICAO = 'L' )`; + await queryRunner.manager.query(sql, [order.numped]); + + // atualizar campos padrão para rotina 4116 + sql = ` UPDATE PCPEDC SET ` + + ` DTENTREGA = TRUNC(DTENTREGA) ` + + ` , DATA = TRUNC(DATA) ` + + ` , DTPREVENTREGA = TRUNC(DTENTREGA) ` + + ` , ORIGEMPED = 'T' ` + + ` , VLFRETE = 0 ` + + ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + + ` , ROTINALANC = 'VENDAWEB' ` + + ` , ROTINALANCULTALT = 'VENDAWEB' ` + + ` , CODMOTBLOQUEIO = CASE WHEN PCPEDC.POSICAO = 'B' THEN CODMOTBLOQUEIO ELSE 0 END ` + + ` , CODDISTRIB = 1 ` + + ` , TIPOVENDA = 'VV' ` + + ` , TIPOEMBALAGEM = 'U' ` + + ` , PRAZO1 = NVL(PRAZO1,0) ` + + ` , VENDAASSISTIDA = 'S' ` + + ` , MATERIALDECONSTRUCAO = 'S' ` + + ` , TIPOPRIORIDADEENTREGA = '${cart.shippingPriority}' ` + + ` , CODUSUR3 = ${preOrder.codusur3} ` + + ` , OBSENTREGA3 = '${preOrder.obsentrega3}' ` + + ` , CODPRACA = CASE WHEN '${cart.shippingPriority}' = 'M' THEN ${cart.idStorePlace} ` + + ` WHEN NVL(CODENDENTCLI,0) = 0 THEN CODPRACA ELSE ` + + ` NVL((SELECT PCCLIENTENDENT.CODPRACAENT FROM PCCLIENTENDENT ` + + ` WHERE PCCLIENTENDENT.CODCLI = PCPEDC.CODCLI AND ` + + ` PCCLIENTENDENT.CODENDENTCLI = PCPEDC.CODENDENTCLI), PCPEDC.CODPRACA ) END ` + + `WHERE ( PCPEDC.NUMPED = :1 OR PCPEDC.NUMPEDENTFUT = :2 ) `; + await queryRunner.manager.query(sql, [order.numped, order.numped]); + + sql = ` UPDATE PCPEDC SET ` + + ` CODCOB = ( SELECT TV7.CODCOB FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ) ` + + ` , CODPLPAG = ( SELECT TV7.CODPLPAG FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ) ` + + ` , RESERVAESTOQUETV7 = 'N' ` + + ` , DTENTREGA = ( SELECT TV7.DTENTREGA FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ) ` + + `WHERE (PCPEDC.NUMPEDENTFUT = :1 ) `; + await queryRunner.manager.query(sql, [order.numped]); + + sql = ` UPDATE PCPEDI SET CODSUPERVISOR = ( SELECT PCPEDC.CODSUPERVISOR FROM PCPEDC WHERE PCPEDC.NUMPED = PCPEDI.NUMPED ) ` + + ` ,DTENTREGA = ( SELECT PCPEDC.DTENTREGA FROM PCPEDC WHERE PCPEDI.NUMPED = PCPEDC.NUMPED ) ` + + ` ,COMPLEMENTO = NVL(( SELECT PCPEDITEMP.COMPLEMENTO FROM PCPEDITEMP, PCPEDCTEMP ` + + ` WHERE PCPEDITEMP.NUMPEDRCA = PCPEDCTEMP.NUMPEDRCA ` + + ` AND PCPEDCTEMP.NUMPED = PCPEDI.NUMPED ` + + ` AND PCPEDITEMP.CODPROD = PCPEDI.CODPROD ` + + ` AND PCPEDITEMP.NUMSEQ = PCPEDI.NUMSEQ ` + + ` AND ROWNUM = 1 ), PCPEDI.COMPLEMENTO) ` + + ` WHERE PCPEDI.NUMPED IN ( SELECT PCPEDC.NUMPED FROM PCPEDC ` + + ` WHERE PCPEDC.NUMPED = :1 OR PCPEDC.NUMPEDENTFUT = :2 ) `; + await queryRunner.manager.query(sql, [order.numped, order.numped]); + + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + console.log(err); + } + + + let status = ''; + const statusOrder = await queryRunner + .query('SELECT PCPEDC.POSICAO as "status" FROM PCPEDC WHERE NUMPED = :1', [order.numped]); + switch (statusOrder[0].status) { + case 'L': { + status = 'LIBERADO'; + break; + } + case 'P': { + status = 'PENDENTE'; + break; + } + case 'B': { + status = 'BLOQUEADO'; + break; + } + case 'F': { + status = 'FATURADO'; + break; + } + case 'C': { + status = 'CANCELADO'; + break; + } + + } + + /* Sempre ira retornar status = LIBERADO*/ + // status = 'LIBERADO'; + + return { + idOrder: order.numped, + status: status + }; + } catch (err) { + console.log(err); + this.deletePreOrder(idPreOrder); + throw err; + // since we have errors let's rollback changes we made + } finally { + // you need to release query runner which is manually created: + await queryRunner.release(); + await connection.close(); + } + } + + async updateStatusItem(queryRunner: QueryRunner, orderId: number) { + const sql = ` SELECT PCPEDI.ROWID as "rid", PCPEDI.NUMPED as "numped", PCPEDI.CODPROD as "codprod", PCPEDI.CODFILIALRETIRA as "codfilialretira", ` + + ` PCPEDI.QT as "qt", PCPEDI.POSICAO as "posicao", ` + + ` ( NVL(PCEST.QTESTGER,0) - NVL(PCEST.QTRESERV,0) - NVL(PCEST.QTBLOQUEADA,0) - NVL(PCEST.QTPENDENTE,0) + PCPEDI.QT ) as "qtestoque_disponivel" ` + + ` FROM PCPEDI, PCPEDC, PCEST, PCPEDC TV7 ` + + ` WHERE PCPEDI.CODPROD = PCEST.CODPROD ` + + ` AND PCPEDI.NUMPED = PCPEDC.NUMPED ` + + ` AND PCPEDC.NUMPEDENTFUT = TV7.NUMPED ` + + ` AND PCPEDI.CODFILIALRETIRA = PCEST.CODFILIAL ` + + ` AND NOT EXISTS(SELECT PCBLOQUEIO.CODMOTBLOQUEIO FROM PCBLOQUEIO WHERE PCBLOQUEIO.CODCOB = TV7.CODCOB) ` + + ` AND ( TV7.CODCOB IN ('DH', 'D', 'CAR') OR ( TV7.CODCOB LIKE 'CAR%' ) OR EXISTS(SELECT PCCOB.CODCOB FROM PCCOB ` + + ` WHERE PCCOB.CODCOB = TV7.CODCOB ` + + ` AND NVL(PCCOB.CARTAO,'N') = 'S') ) ` + + ` AND PCPEDC.NUMPEDENTFUT = :1 FOR UPDATE `; + const itensTV8 = await queryRunner.query(sql, [orderId]); + + for (const item of itensTV8) { + await this.updateStockItem(queryRunner, item); + } + } + + async updateStockItem(queryRunner: QueryRunner, item: any) { + let sql = ""; + if (item.posicao === "B") { + if (item.qt > item.qtestoque_disponivel) { + sql = `UPDATE PCPEDI SET POSICAO = 'P' ` + + ` WHERE PCPEDI.ROWID = :1`; + await queryRunner.manager.query(sql, [item.rid]); + } else { + sql = `UPDATE PCEST SET QTPENDENTE = GREATEST((QTPENDENTE - :1), 0) ` + + ` ,QTRESERV = QTRESERV + :2 ` + + ` WHERE PCEST.CODFILIAL = :3 AND PCEST.CODPROD = :4`; + await queryRunner.manager.query(sql, [item.qt, item.qt, item.codfilialretira, item.codprod]); + sql = `UPDATE PCPEDI SET POSICAO = 'L' ` + + ` WHERE PCPEDI.ROWID = :1`; + await queryRunner.manager.query(sql, [item.rid]); + } + } + } + + async updateOrderDelivery(orderDelivery: Pcpedc, order: Pcpedc) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + await queryRunner.manager + .createQueryBuilder() + .update(Pcpedc) + .set({ + codplpag: order.codplpag, + codcob: order.codcob, + condvenda: 8, + numpedentfut: order.numped, + log: null, + codmotivo: null, + motivoposicao: null, + vlbonific: 0, + vendaassistida: 'S' + }) + .where("numped = :numped", { numped: orderDelivery.numped }) + .execute(); + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async deletePreOrder(idPreOrder: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + await queryRunner.manager + .createQueryBuilder() + .delete() + .from(Pcpeditemp) + .where("\"PCPEDITEMP\".NUMPEDRCA = :numpedrca", { numpedrca: idPreOrder }) + .execute(); + + await queryRunner.manager + .createQueryBuilder() + .delete() + .from(Pcpedctemp) + .where("\"PCPEDCTEMP\".NUMPEDRCA = :numpedrca", { numpedrca: idPreOrder }) + .execute(); + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async createPreOrder(cart: Cart, idPreOrder: number, idPreOrderTV7: number = null) { + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + console.log('iniciando transação'); + + try { + const customer = await this.getCustomer(cart.idCustomer); + let idSellerPreorder = cart.idSeller; + //Verifica se existe orçamento para a prevenda (CART) + const cartPreOrder = await queryRunner.query('SELECT ESTPREVENDAC.NUMORCA, PCORCAVENDAC.CODUSUR as "idSeller" ' + + ' FROM ESTPREVENDAC, PCORCAVENDAC ' + + ` WHERE ESTPREVENDAC.ID = '${cart.id}' ` + + ' AND ESTPREVENDAC.NUMORCA = PCORCAVENDAC.NUMORCA '); + + if (cartPreOrder != null && cartPreOrder.length > 0) { + idSellerPreorder = cartPreOrder[0].idSeller; + } + + const supervisor = await queryRunner.manager.query('SELECT PCUSUARI.CODSUPERVISOR FROM PCUSUARI WHERE CODUSUR = :1', [idSellerPreorder]); + console.log(supervisor); + + //Create pre-customers + if (cart.idCustomer === 1 && cart.preCustomerDocument !== null) { + const preCustomer = await queryRunner.query(`SELECT ESTVENDAPRECLIENTE.CPF FROM ESTVENDAPRECLIENTE ` + + ` WHERE IDCART = :1 AND CPF = :2`, [cart.id, cart.preCustomerDocument]); + if (preCustomer === null || preCustomer.length === 0) { + const sqlInsert = ` INSERT INTO ESTVENDAPRECLIENTE ( CPF, IDCART, NOME, TELEFONE, DTCADASTRO, CODUSUR, NUMPEDRCA ) ` + + ` VALUES ( REGEXP_REPLACE(:CPF, '[^0-9]', '') , :IDCART, :NOME, :TELEFONE, SYSDATE, :CODUSUR, :NUMPEDRCA ) `; + await queryRunner.query(sqlInsert, [cart.preCustomerDocument, + cart.id, cart.preCustomerName, cart.preCustomerPhone, cart.idSeller, idPreOrder]); + } + } else { + if (cart.preCustomerDocument !== null) { + await queryRunner.query(`DELETE FROM ESTVENDAPRECLIENTE WHERE IDCART = :1 AND REGEXP_REPLACE(:CPF, '[^0-9]', '')`, + [cart.id, cart.preCustomerDocument]); + } + } + + + //#region create PCPEDCTEMP + console.log('Cart: ' + cart); + const dateNow = new Date(); + const dateDelivery = new Date(); + dateDelivery.setDate(dateNow.getDate() + 3); + const preOrder = new Pcpedctemp(); + preOrder.numpedrca = idPreOrder; + preOrder.percvenda = 100; + preOrder.codcob = cart.idBilling; + preOrder.codplpag = cart.idPaymentPlan; + if (cart.idAddress > 0) { + preOrder.codendentcli = cart.idAddress; + preOrder.codendent = cart.idAddress; + } + preOrder.condvenda = 7; + if (idPreOrderTV7) { + preOrder.condvenda = 1; + } + preOrder.dtaberturapedpalm = new Date(); + preOrder.dtinclusao = new Date(); + preOrder.dtimportacao = new Date(); + preOrder.data = new Date(); + preOrder.hora = preOrder.data.getHours(); + preOrder.minuto = preOrder.data.getMinutes(); + preOrder.dtentrega = dateDelivery; + preOrder.codfilial = cart.saleStore, + preOrder.codfilialnf = preOrder.codfilial; + preOrder.codusur = idSellerPreorder; // cart.idSeller; + if (supervisor != null) { + preOrder.codsupervisor = supervisor.codsupervisor; + } + preOrder.codemitente = cart.userId; + preOrder.codusur3 = cart.idProfessional; + preOrder.tipointegracao = "W"; + preOrder.validarnivelvenda = "N"; + preOrder.dtentrega = cart.shippingDate; + preOrder.esc_tipoentrega = (cart.scheduleDelivery === true) ? 'P' : 'N'; + // preOrder.vlfrete = cart.shippingValue; --Já esta sendo incluido item para o valor de frete + preOrder.vldescontocupom = 0; + preOrder.vldescontofinanceiro = 0; + preOrder.vlentrada = 0; + preOrder.vlfretenf = 0; + preOrder.vloutrasdesp = 0; + preOrder.vltroco = 0; + preOrder.origemped = "W"; + preOrder.integradora = 10; + preOrder.importado = "N"; + preOrder.codautorizacaotef = 0; + preOrder.esc_ajustarfinanceiro = "N"; + preOrder.esc_obternsu = "N"; + preOrder.esc_vloutrasdespweb = 0; + preOrder.pedidopagoecommerce = "S"; + preOrder.numpedmktplace = ""; + preOrder.numitens = cart.itens.length; + preOrder.obs1 = cart.notation1; + preOrder.obs2 = cart.notation2; + preOrder.obsentrega1 = cart.deliveryNote1; + preOrder.obsentrega2 = cart.deliveryNote2; + preOrder.obsentrega3 = cart.deliveryNote3; + + //Dados do cliente + preOrder.codcli = cart.idCustomer; + preOrder.codpraca = (cart.shippingPriority == "M" && cart.idStorePlace != null ) ? cart.idStorePlace : customer.codpraca; + preOrder.fretedespacho = customer.fretedespacho; + preOrder.codfornecfrete = cart.carrierId; + + preOrder.numpedcli = preOrder.numpedrca.toString(); + preOrder.numpedweb = preOrder.numpedrca; + preOrder.data = new Date(); + preOrder.vlfrete = 0; //cart.shippingValue; + //#endregion + + //#region create PCPEDITEMP + + let numeroSeq = 1; + for (const item of cart.itens) { + + const kit = await queryRunner.query('SELECT PCFORMPROD.CODPRODMP as "idProduct", ' + + ' PCFORMPROD.QTPRODMP as "qtComponent", ' + + ' PCPRODUT.CODAUXILIAR as "ean" ,' + + ` case when ESTLISTAPRODUTOS.PRECOPROMOCIONAL > 0 AND '${cart.idBilling}' <> 'CHM' THEN ` + + ' ESTLISTAPRODUTOS.precopromocional ' + + ' ELSE ESTLISTAPRODUTOS.precovenda END as "listPrice" ' + + ' FROM PCFORMPROD, PCPRODUT, ESTLISTAPRODUTOS ' + + ' WHERE PCFORMPROD.CODPRODACAB = :1 ' + + ' AND PCFORMPROD.CODPRODMP = PCPRODUT.CODPROD ' + + ' AND PCPRODUT.CODPROD = ESTLISTAPRODUTOS.CODPROD ' + + ' AND ESTLISTAPRODUTOS.CODFILIAL = :2', + [item.idProduct, preOrder.codfilial]); + if (kit.length > 0) { + for (const componente of kit) { + + const listPrice = componente.listPrice; + + const salePrice = (componente.listPrice * + (item.salePrice / item.listPrice)).toFixed(2); + + const itemOrder = new Pcpeditemp(); + itemOrder.tipointegracao = "W"; + itemOrder.integradora = 10; + itemOrder.numpedrca = idPreOrder; + itemOrder.numpedweb = idPreOrder; + itemOrder.codcli = cart.idCustomer; + itemOrder.codusur = idSellerPreorder; //cart.idSeller; + itemOrder.numseq = numeroSeq; + itemOrder.codprod = componente.idProduct; + itemOrder.codauxiliar = componente.ean; + itemOrder.codfilialretira = item.idStock; + itemOrder.tipoentrega = (item.deliveryMethod == 'RA') ? "RP" : item.deliveryMethod; + itemOrder.rp_imediata = (item.deliveryMethod == 'RA') ? "S" : "N"; + if ( item.deliveryMethod == 'RA') { + preOrder.dtentrega = new Date(); + } + itemOrder.ptabela = Number.parseFloat(listPrice); + itemOrder.pvenda = Number.parseFloat(salePrice); + itemOrder.qt = (item.quantity * componente.qtComponent); + itemOrder.data = new Date(); + itemOrder.complemento = item.descriptionAux; + itemOrder.localizacao = item.environment; + + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcpeditemp) + .values(itemOrder) + .execute(); + + numeroSeq = numeroSeq + 1; + }; + } else { + const itemOrder = new Pcpeditemp(); + itemOrder.tipointegracao = "W"; + itemOrder.integradora = 10; + itemOrder.numpedrca = idPreOrder; + itemOrder.numpedweb = idPreOrder; + itemOrder.codcli = cart.idCustomer; + itemOrder.codusur = idSellerPreorder; //cart.idSeller; + itemOrder.numseq = numeroSeq; + itemOrder.codprod = item.idProduct; + itemOrder.codauxiliar = item.ean; + itemOrder.codfilialretira = item.idStock; + itemOrder.tipoentrega = (item.deliveryMethod == 'RA') ? "RP" : item.deliveryMethod; + itemOrder.rp_imediata = (item.deliveryMethod == 'RA') ? "S" : "N"; + if ( item.deliveryMethod == 'RA') { + preOrder.dtentrega = new Date(); + } + itemOrder.ptabela = item.listPrice; + itemOrder.pvenda = item.salePrice; + itemOrder.qt = item.quantity; + itemOrder.data = new Date(); + itemOrder.complemento = item.descriptionAux; + itemOrder.localizacao = item.environment; + + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcpeditemp) + .values(itemOrder) + .execute(); + + numeroSeq = numeroSeq + 1; + + } + } + + //#endregion + + if (cart.shippingValue > 0) { + const itemOrder = new Pcpeditemp(); + itemOrder.tipointegracao = "W"; + itemOrder.integradora = 10; + itemOrder.numpedrca = idPreOrder; + itemOrder.numpedweb = idPreOrder; + itemOrder.codcli = cart.idCustomer; + itemOrder.codusur = idSellerPreorder; //cart.idSeller; + itemOrder.numseq = numeroSeq; + itemOrder.codprod = 48500; + itemOrder.codauxiliar = 48500; + itemOrder.codfilialretira = '12'; + itemOrder.tipoentrega = 'EF'; + itemOrder.ptabela = Number.parseFloat(cart.shippingValue.toString()); + itemOrder.pvenda = Number.parseFloat(cart.shippingValue.toString()); + itemOrder.qt = 1; + itemOrder.data = new Date(); + + + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcpeditemp) + .values(itemOrder) + .execute(); + + numeroSeq = numeroSeq + 1; + } + + // execute some operations on this transaction: + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcpedctemp) + .values(preOrder) + .execute(); + + await queryRunner.commitTransaction(); + return preOrder; + + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + //const idOrder = await this.getIdOrder(cart.idSeller); + + } + + async findSale(id: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const sale = await queryRunner.manager + .getRepository(Sale) + .createQueryBuilder('estvenda') + .where("\"estvenda\".id = :id", { id: id }) + .getOne(); + return sale; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async findShopping(idshopping: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const shopping = await queryRunner.manager + .getRepository(ShoppingItens) + .createQueryBuilder('estshopping') + .where("\"estshopping\".id = :id", { id: idshopping }) + .getMany(); + return shopping; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getIdOrder(idSeller: number): Promise { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + console.log('Consultando usuario ' + idSeller); + let sql = 'SELECT NVL(PROXNUMPEDWEB,0) as "proxnumpedweb" FROM PCUSUARI ' + + ' WHERE PCUSUARI.CODUSUR = :1 FOR UPDATE'; + const seller = await queryRunner.query(sql, [idSeller]); + /* const seller = await queryRunner.manager + .getRepository(Pcusuari) + .createQueryBuilder('pcusuari') + .where("\"pcusuari\".codusur = :idseller", { idseller: idSeller }) + .getOne(); */ + const idOrder = seller[0].proxnumpedweb; + console.log(idOrder); + + // lets now open a new transaction: + await queryRunner.startTransaction(); + + try { + + sql = 'UPDATE PCUSUARI SET PROXNUMPEDWEB = NVL(PROXNUMPEDWEB,0) + 1 ' + + ' WHERE PCUSUARI.CODUSUR = :1'; + await queryRunner.query(sql, [idSeller]); + + // await queryRunner.manager + // .createQueryBuilder() + // .update(Pcusuari) + // .set({ proxnumpedweb: idOrder + 1 }) + // .where("\"PCUSUARI\".codusur = :idseller", { idseller: idSeller }) + // .execute(); + + // commit transaction now: + await queryRunner.commitTransaction(); + return idOrder; + + } catch (err) { + + // since we have errors let's rollback changes we made + await queryRunner.rollbackTransaction(); + console.log(err); + return -1; + + } finally { + + // you need to release query runner which is manually created: + await queryRunner.release(); + await connection.close(); + } + + } + + async getCustomer(idCustomer: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const customer = await queryRunner.manager + .getRepository(Pcclient) + .createQueryBuilder('pcclient') + .where("\"pcclient\".codcli = :idCustomer", { idCustomer }) + .getOne(); + return customer; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getOrders(store: string, initialDate: Date, finalDate: Date, + document: string, name: string, sellerId: number, idOrder: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + let sqlWhere = ''; + let sql = ''; + + try { + + sql = ` SELECT TO_CHAR(PCPEDC.DATA, \'DD/MM/YYYY\') as "createDate" ` + + ` ,PCPEDC.NUMPED as "orderId" ` + + ` ,PCPEDC.CODFILIAL as "store" ` + + ` ,CASE WHEN PCPEDC.POSICAO = 'B' THEN 'BLOQUEADO' ` + + ` WHEN PCPEDC.POSICAO = 'P' THEN 'PENDENTE' ` + + ` WHEN PCPEDC.POSICAO = 'L' THEN 'LIBERADO' ` + + ` WHEN PCPEDC.POSICAO = 'M' THEN 'MONTADO' ` + + ` WHEN PCPEDC.POSICAO = 'F' THEN 'FATURADO' END as "status" ` + + ` ,PCPEDC.CODCLI as "customerId" ` + + ` ,PCPEDC.CODUSUR as "sellerId" ` + + ` ,PCCLIENT.CLIENTE as "customerName" ` + + ` ,PCPEDC.VLATEND as "orderValue" ` + + ` ,PCPEDC.NUMITENS as "itens" ` + + ` ,CASE WHEN ( SELECT COUNT(1) FROM ESTPIX WHERE ESTPIX.NUMPED = PCPEDC.NUMPED ) > 0 THEN 'S' ELSE 'N' END as "pixCreate" ` + + ` FROM PCPEDC, PCCLIENT ` + + ` WHERE PCPEDC.CODCLI = PCCLIENT.CODCLI ` + + ` AND PCPEDC.CONDVENDA IN (1,7) ` + + ` AND PCPEDC.DTCANCEL IS NULL AND PCPEDC.POSICAO NOT IN ('C') `; + ` AND PCPEDC.ROTINALANC = 'VENDAWEB' `; + if (store != null && store != '') { + sqlWhere += ` AND PCPEDC.CODFILIAL = '${store}' `; + } + if (document != null && document != '') { + sqlWhere += ` AND REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') = REGEXP_REPLACE('${document}', '[^0-9]', '')`; + } + if (name != null && name != '') { + sqlWhere += ` AND PCCLIENT.CLIENTE LIKE '${name.replace('@', '%')}'||'%'`; + } + if (sellerId > 0) { + sqlWhere += ` AND PCPEDC.CODUSUR = ${sellerId} `; + } + if (idOrder.trim() != null && idOrder.trim() != '') { + sqlWhere += ` AND PCPEDC.NUMPED = ${idOrder} `; + } + + //tratamento de data// + const startDate = new Date(initialDate); + let day = startDate.getDate(); + let month = ("00" + (startDate.getMonth() + 1)).slice(-2); + let year = startDate.getFullYear(); + const startFormat = day + "/" + month + "/" + year; + const endDate = new Date(finalDate); + day = endDate.getDate(); + month = ("00" + (endDate.getMonth() + 1)).slice(-2); + year = endDate.getFullYear(); + const endFormat = day + "/" + month + "/" + year; + + sqlWhere += ` AND PCPEDC.DATA BETWEEN TO_DATE('${startFormat}', 'DD/MM/YYYY') AND TO_DATE('${endFormat}', 'DD/MM/YYYY') `; + + const result = await queryRunner.query(sql + sqlWhere); + return result; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + } + + async getItensOrder(idOrder: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + let sql = ''; + + try { + + sql = ` SELECT PCPEDI.CODPROD as "productId", PCPRODUT.DESCRICAO as "description", ` + + ` PCPRODUT.EMBALAGEM as "package", ` + + ` ( SELECT PCPEDITEMP.COMPLEMENTO FROM PCPEDITEMP ` + + ` WHERE PCPEDC.NUMPEDRCA = PCPEDITEMP.NUMPEDRCA ` + + ` AND PCPEDI.CODPROD = PCPEDITEMP.CODPROD ` + + ` AND PCPEDI.NUMSEQ = PCPEDITEMP.NUMSEQ ) as "color" , ` + + ` ( SELECT PCPEDITEMP.LOCALIZACAO FROM PCPEDITEMP ` + + ` WHERE PCPEDC.NUMPEDRCA = PCPEDITEMP.NUMPEDRCA ` + + ` AND PCPEDI.CODPROD = PCPEDITEMP.CODPROD ` + + ` AND PCPEDI.NUMSEQ = PCPEDITEMP.NUMSEQ ) as "local", ` + + ` PCPEDI.QT as "quantity", PCPEDI.PVENDA as "price", ( PCPEDI.QT * PCPEDI.PVENDA ) as "subTotal" ` + + ` FROM PCPEDI, PCPEDC, PCPRODUT ` + + ` WHERE PCPEDI.CODPROD = PCPRODUT.CODPROD ` + + ` AND PCPEDI.NUMPED = PCPEDC.NUMPED ` + + ` AND PCPEDC.CONDVENDA IN (7,1) ` + + ` AND PCPEDC.NUMPED = :NUMPED ` + + // ` AND PCPEDC.ROTINALANC = 'VENDAWEB' ` + + ` ORDER BY PCPEDI.NUMSEQ `; + const result = await queryRunner.query(sql, [idOrder]); + return result; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + } + + async getCartId(orderId: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const order = await queryRunner.query('SELECT PCPEDC.DATA as "createDate" ' + + ' ,PCPEDC.NUMPED as "orderId" ' + + ' ,PCPEDC.CODFILIAL as "invoiceStore" ' + + ' ,PCPEDC.CODCLI as "customerId" ' + + ' ,PCPEDC.CODPLPAG as "paymentPlanId" ' + + ' ,PCPEDC.CODCOB as "billindId" ' + + ' ,PCPEDC.CODENDENT as "addressId" ' + + ' ,PCPEDC.CODUSUR3 as "partnerId" ' + + ' ,ESTPREVENDAC.ID as "cartId" ' + + ' ,PCPEDC.POSICAO as "status" ' + + + ' ,PCPEDC.OBS as "notification" ' + + ' ,PCPEDC.OBS1 as "notification1" ' + + ' ,PCPEDC.OBS2 as "notification2" ' + + ' ,PCPEDC.OBSENTREGA1 as "notificationDelivery1" ' + + ' ,PCPEDC.OBSENTREGA2 as "notificationDelivery2" ' + + ' ,PCPEDC.OBSENTREGA3 as "notificationDelivery3" ' + + ' ,PCPEDC.DTENTREGA as "deliveryDate" ' + + ' ,ESTPREVENDAC.ENTREGAPROGRAMADA as "squeduleDelivery" ' + + ` ,NVL(PCPEDC.TIPOPRIORIDADEENTREGA, 'B') as "priorityDelivery" ` + + ' FROM PCPEDC, ESTPREVENDAC ' + + ' WHERE PCPEDC.NUMPED = ESTPREVENDAC.NUMPED ' + + ' AND PCPEDC.NUMPED = :1', [orderId]); + + if (order.length == 0) { + throw new HttpException(`Pedido não foi localizado`, HttpStatus.NOT_FOUND); + } + + if (order.status == 'F') { + throw new HttpException(`Pedido já FATURADO, alteração não permitida.`, HttpStatus.NOT_FOUND); + } + + const invoiceStores = await this.listsService.GetStoreAll(); + const invoiceStore = await invoiceStores.find(data => data.id === order[0].invoiceStore); + const customer = await this.customerService.findCustomerById(order[0].customerId); + const billinds = await this.listsService.GetBilling(order[0].customerId); + const partners = await this.listsService.GetPartners(); + const address = await this.addressCustomerService.getAddress(order[0].customerId, order[0].addressId); + const billing = billinds.find(data => data.codcob === order[0].billindId); + const paymentPlans = await this.listsService.GetPaymentPlan(billing.codcob); + const paymentPlan = paymentPlans.find(data => data.codplpag === order[0].paymentPlanId); + const partner = partners.find(data => data.id === order[0].partnerId); + + return { + cartId: order[0].cartId, invoiceStore: invoiceStore, customer: customer, partner: partner, + paymentPlan: paymentPlan, billing: billing, address: address, + notification: order[0].notification, notification1: order[0].notification1, notification2: order[0].notification2, + notificationDelivery1: order[0].notificationDelivery1, notificationDelivery2: order[0].notificationDelivery2, notificationDelivery3: order[0].notificationDelivery3, + deliveryDate: order[0].deliveryDate, squeduleDelivery: order[0].esc_tipoEntrega == 'P' ? true : false, priorityDelivery: order[0].priorityDelivery + } + + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async createPreCustomer(cart: Cart) { + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + const preCustomer = await queryRunner.query(`SELECT ESTVENDAPRECLIENTE.CPF FROM ESTVENDAPRECLIENTE ` + + ` WHERE IDCART = :1 AND CPF = :2`, [cart.id, cart.preCustomerDocument]); + if (preCustomer.length === 0) { + const sqlInsert = ` INSERT INTO ESTVENDAPRECLIENTE ( CPF, IDCART, NOME, TELEFONE, DTCADASTRO, CODUSUR ) ` + + ` VALUES ( REGEXP_REPLACE(:CPF, '[^0-9]', '') , :IDCART, :NOME, :TELEFONE, SYSDATE, :CODUSUR ) `; + await queryRunner.query(sqlInsert, [cart.preCustomerDocument, + cart.id, cart.preCustomerName, cart.preCustomerPhone, cart.idSeller]); + } else { + + } + await queryRunner.commitTransaction(); + + } catch (err) { + await queryRunner.rollbackTransaction(); + console.log(err); + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async productsWithoutTax(idCart: string, idCustomer: number) { + const sql = ' SELECT ESTPREVENDAI.CODPROD as "productId", PCPRODUT.DESCRICAO as "description", ' + + ' PCPRODUT.EMBALAGEM as "package", PCCLIENT.ESTENT as "uf" ' + + ' FROM ESTPREVENDAI, ESTPREVENDAC, PCCLIENT, PCPRODUT ' + + ' WHERE ESTPREVENDAI.IDCART = ESTPREVENDAC.ID ' + + ' AND ESTPREVENDAI.CODPROD = PCPRODUT.CODPROD ' + + ' AND PCCLIENT.CODCLI = :CODCLI ' + + ' AND ESTPREVENDAC.ID = :ID ' + + ' AND NOT EXISTS(SELECT PCTRIBUT.CODST FROM PCTABTRIB, PCTRIBUT ' + + ' WHERE PCTABTRIB.CODFILIALNF = ESTPREVENDAC.CODFILIAL ' + + ' AND PCTABTRIB.UFDESTINO = PCCLIENT.ESTENT ' + + ' AND PCTABTRIB.CODPROD = PCPRODUT.CODPROD ' + + ' AND PCTABTRIB.CODST = PCTRIBUT.CODST ) '; + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const products = await queryRunner.query(sql, [idCustomer, idCart]); + return products; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async OrderRetiraPosterior() { + + const sql = ' SELECT ' + + ' p.DATA as "data" ' + + ' ,p.numped as "orderId" ' + + ` ,TO_CHAR(p.datapedido, 'DD/MM/YYYY HH24:MI') as "orderDate" ` + + ' ,p.CODCLI as "customerId" ' + + ' ,p.cliente as "customerName" ' + + ' ,p.codusur as "sellerId" ' + + ' ,p.nomevendedor as "sellerName" ' + + ' ,p.etapa_pedido as "process" ' + + ' ,p.progresso as "progress" ' + + ` ,TO_CHAR(p.DATA_ETAPA_PEDIDO, 'DD/MM/YYYY HH24:MI') as "processDate" ` + + ' ,round( trunc(sysdate-p.DATAPEDIDO) * 24 + (sysdate-p.DATAPEDIDO - trunc(sysdate-p.DATAPEDIDO)) * 24) as "timeHour" ' + + ' ,round(( ( trunc(sysdate-p.DATAPEDIDO) * 24 + (sysdate-p.DATAPEDIDO - trunc(sysdate-p.DATAPEDIDO)) * 24) - ' + + ' TRUNC(( trunc(sysdate-p.DATAPEDIDO) * 24 + (sysdate-p.DATAPEDIDO - trunc(sysdate-p.DATAPEDIDO)) * 24)) ) * 60,0) as "timeMinute" ' + + ' FROM esvpedidoretiraposterior p ' + + ' ORDER BY p.datapedido '; + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const orders = await queryRunner.query(sql); + return orders; + } finally { + await queryRunner.release(); + await connection.close(); + } + + + } + + async getProductsOrder(store: string, initialDate: Date, finalDate: Date, + document: string, name: string, sellerId: number, idOrder: string, + typeFilterProduct: string, productText: string + ) { + + const sql = `SELECT PCPEDC.DATA as "date" + ,PCPEDC.NUMPED as "orderId" + ,PCPEDC.NUMNOTA as "invoice" + ,PCPEDC.CODCLI as "customerId" + ,PCCLIENT.CLIENTE as "customer" + ,PCUSUARI.NOME as "seller" + ,PCPEDI.CODPROD as "productId" + ,PCPRODUT.DESCRICAO as "product" + ,PCPRODUT.EMBALAGEM as "package" + ,PCPEDI.QT as "quantity" + ,( SELECT PCPEDITEMP.COMPLEMENTO FROM PCPEDITEMP + WHERE PCPEDITEMP.NUMPEDRCA = PCPEDC.NUMPEDRCA + AND PCPEDITEMP.CODPROD = PCPEDI.CODPROD + AND PCPEDITEMP.NUMSEQ = PCPEDI.NUMSEQ + AND ROWNUM = 1 ) as "color" + ,( SELECT PCPEDITEMP.LOCALIZACAO FROM PCPEDITEMP + WHERE PCPEDITEMP.NUMPEDRCA = PCPEDC.NUMPEDRCA + AND PCPEDITEMP.CODPROD = PCPEDI.CODPROD + AND PCPEDITEMP.NUMSEQ = PCPEDI.NUMSEQ + AND ROWNUM = 1 ) as "local" + ,CASE WHEN PCPEDI.TIPOENTREGA = 'RI' THEN 'RETIRA IMEDIATA' + WHEN PCPEDI.TIPOENTREGA = 'RP' THEN 'RETIRA POSTERIOR' + WHEN PCPEDI.TIPOENTREGA = 'EN' THEN 'ENTREGA' + WHEN PCPEDI.TIPOENTREGA = 'EF' THEN 'ENTREGA FUTURA' + WHEN PCPEDI.TIPOENTREGA = 'EN' THEN 'ENTREGA FUTURA' + ELSE 'OUTROS' END as "deliveryType" + ,PCPEDI.NUMPED||'-'||PCPEDI.CODPROD||'-'||PCPEDI.NUMSEQ as "itemId" + FROM PCPEDI, PCPEDC, PCCLIENT, PCUSUARI, PCPRODUT + WHERE PCPEDI.NUMPED = PCPEDC.NUMPED + AND PCPEDC.DTCANCEL IS NULL + AND PCPEDC.CONDVENDA IN (1,7) + AND PCPEDC.CODCLI = PCCLIENT.CODCLI + AND PCPEDC.CODUSUR = PCUSUARI.CODUSUR + AND PCPEDI.CODPROD = PCPRODUT.CODPROD `; + + let sqlWhere = ''; + if (store != null && store != '' && store != '99') { + sqlWhere += ` AND PCPEDC.CODFILIAL = '${store}' `; + } + if (document != null && document != '') { + sqlWhere += ` AND REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') = REGEXP_REPLACE('${document}', '[^0-9]', '')`; + } + if (name != null && name != '') { + sqlWhere += ` AND PCCLIENT.CLIENTE LIKE '${name.replace('@', '%')}'||'%'`; + } + if (sellerId > 0) { + sqlWhere += ` AND PCPEDC.CODUSUR = ${sellerId} `; + } + if (idOrder.trim() != null && idOrder.trim() != '') { + sqlWhere += ` AND PCPEDC.NUMPED = ${idOrder} `; + } + + if ( typeFilterProduct != '') { + switch (typeFilterProduct) { + case 'ID': + sqlWhere += ` AND PCPEDI.CODPROD = ${productText} `; + break; + case 'EAN': + sqlWhere += ` AND PCPRODUT.CODAUXILIAR = ${productText} `; + break; + case 'TEXT': + sqlWhere += ` AND PCPRODUT.DESCRICAO LIKE '${productText}%' `; + break; + case 'PARTNER': + sqlWhere += ` AND PCPRODUT.CODFAB like '${productText}%'`; + break; + default: break; + } + } + + //tratamento de data// + const startDate = new Date(initialDate); + let day = startDate.getDate(); + let month = ("00" + (startDate.getMonth() + 1)).slice(-2); + let year = startDate.getFullYear(); + const startFormat = day + "/" + month + "/" + year; + const endDate = new Date(finalDate); + day = endDate.getDate(); + month = ("00" + (endDate.getMonth() + 1)).slice(-2); + year = endDate.getFullYear(); + const endFormat = day + "/" + month + "/" + year; + + sqlWhere += ` AND PCPEDI.DATA BETWEEN TO_DATE('${startFormat}', 'DD/MM/YYYY') AND TO_DATE('${endFormat}', 'DD/MM/YYYY') `; + + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const orders = await queryRunner.query(sql + sqlWhere); + return orders; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + +} diff --git a/src/sales/payment/pix/payment-pix.module.ts b/src/sales/payment/pix/payment-pix.module.ts new file mode 100644 index 0000000..40e5817 --- /dev/null +++ b/src/sales/payment/pix/payment-pix.module.ts @@ -0,0 +1,15 @@ +/* +https://docs.nestjs.com/modules +*/ + +import { HttpModule, Module } from '@nestjs/common'; +import { OrderModule } from 'src/sales/order/order.module'; +import { PixSantanderController } from './santander/pix-santander.controller'; +import { PixSantanderService } from './santander/pix-santander.service'; + +@Module({ + imports: [HttpModule, OrderModule], + controllers: [PixSantanderController], + providers: [PixSantanderService], +}) +export class PaymentPixModule {} diff --git a/src/sales/payment/pix/santander/models/auth-token.model.ts b/src/sales/payment/pix/santander/models/auth-token.model.ts new file mode 100644 index 0000000..08bde00 --- /dev/null +++ b/src/sales/payment/pix/santander/models/auth-token.model.ts @@ -0,0 +1,11 @@ +export interface SantanderPixAuthToken { +     refreshUrl: string; +     token_type: string; +     client_id: string; +     access_token: string; +     refresh_token: string; +     scopes: string; +     expires_in: string; + } + + \ No newline at end of file diff --git a/src/sales/payment/pix/santander/models/cob-pix.model.ts b/src/sales/payment/pix/santander/models/cob-pix.model.ts new file mode 100644 index 0000000..db2c007 --- /dev/null +++ b/src/sales/payment/pix/santander/models/cob-pix.model.ts @@ -0,0 +1,72 @@ +export interface Paginacao { + paginaAtual: number; + itensPorPagina: number; + quantidadeDePaginas: number; + quantidadeTotalDeItens: number; +} + +export interface Parametros { + inicio: Date; + fim: Date; + paginacao: Paginacao; +} + +export interface Calendario { + criacao: Date; + expiracao: string; +} + +export interface Devedor { + cnpj: string; + nome: string; +} + +export interface Valor { + original: string; +} + +export interface Pagador { + cnpj: string; + nome: string; +} + +export interface Horario { + solicitacao: Date; +} + +export interface Devolucao { + id: string; + rtrId: string; + valor: string; + horario: Horario; + status: string; +} + +export interface Pix { + endToEndId: string; + txid: string; + valor: string; + horario: Date; + pagador: Pagador; + infoPagador: string; + devolucoes: Devolucao[]; +} + +export interface Cob { + status: string; + calendario: Calendario; + location: string; + txid: string; + revisao: number; + devedor: Devedor; + valor: Valor; + chave: string; + solicitacaoPagador: string; + pix: Pix[]; +} + +export interface SantanderCreatePix { + parametros: Parametros; + cobs: Cob[]; +} + diff --git a/src/sales/payment/pix/santander/models/create-cob.model.ts b/src/sales/payment/pix/santander/models/create-cob.model.ts new file mode 100644 index 0000000..ab31ad7 --- /dev/null +++ b/src/sales/payment/pix/santander/models/create-cob.model.ts @@ -0,0 +1,50 @@ +export interface Calendario { +     dataDeVencimento: string; +     validadeAposVencimento: number; + } + + export interface Devedor { +     logradouro: string; +     cidade: string; +     uf: string; +     cep: string; +     cpf: string; +     nome: string; + } + + export interface Multa { +     modalidade: string; +     valorPerc: number; + } + + export interface Juros { +     modalidade: string; +     valorPerc: number; + } + + export interface DescontoDataFixa { +     data: string; +     valorPerc: string; + } + + export interface Desconto { +     modalidade: string; +     descontoDataFixa: DescontoDataFixa[]; + } + + export interface Valor { +     original: number; +     multa: Multa; +     juros: Juros; +     desconto: Desconto; + } + + export interface SantanderCreateCob { +     calendario: Calendario; +     devedor: Devedor; +     valor: Valor; +     chave: string; +     solicitacaoPagador: string; + } + + \ No newline at end of file diff --git a/src/sales/payment/pix/santander/models/order-payment.model.ts b/src/sales/payment/pix/santander/models/order-payment.model.ts new file mode 100644 index 0000000..5938a6b --- /dev/null +++ b/src/sales/payment/pix/santander/models/order-payment.model.ts @@ -0,0 +1,5 @@ +export interface OrderPayment { + orderId: number, + customerId: number, + amount: number, +} \ No newline at end of file diff --git a/src/sales/payment/pix/santander/pix-santander.controller.ts b/src/sales/payment/pix/santander/pix-santander.controller.ts new file mode 100644 index 0000000..1fc7e2d --- /dev/null +++ b/src/sales/payment/pix/santander/pix-santander.controller.ts @@ -0,0 +1,22 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Body, Controller, Post } from '@nestjs/common'; +import { OrderPayment } from './models/order-payment.model'; +import { PixSantanderService } from './pix-santander.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Pix-Santander') +@Controller('api/v1/payment/pix/santander') +export class PixSantanderController { + constructor (private pixSantanderService: PixSantanderService){} + + @Post('create') + async create(@Body() orderPayment: OrderPayment ){ + + return this.pixSantanderService.create(orderPayment); + + + } + } diff --git a/src/sales/payment/pix/santander/pix-santander.service.ts b/src/sales/payment/pix/santander/pix-santander.service.ts new file mode 100644 index 0000000..a2d09ad --- /dev/null +++ b/src/sales/payment/pix/santander/pix-santander.service.ts @@ -0,0 +1,159 @@ + +/* +https://docs.nestjs.com/providers#services +*/ + +import { HttpService, Injectable, HttpException } from '@nestjs/common'; +import QueryString = require('qs'); +import { map, catchError, lastValueFrom } from 'rxjs'; +import { HttpStatus } from '@nestjs/common/enums'; +import { SantanderPixAuthToken } from './models/auth-token.model'; +import { Calendario, Devedor, SantanderCreateCob, Valor } from './models/create-cob.model'; +import { OrderService } from 'src/sales/order/order.service'; +import { OrderPayment } from './models/order-payment.model'; +import { SantanderCreatePix } from './models/cob-pix.model'; +import { SharedService } from 'src/shared/services/shared.service'; +import * as crc from 'crc'; + + +@Injectable() +export class PixSantanderService { + + constructor( + private http: HttpService, + private orderService: OrderService) { } + + async create(orderPayment: OrderPayment) { + // const txid = '0'; + // this.http.put(`https://pix.santander.com.br/api/v1/sandbox/cob/${txid}`, null); + //let authToken: SantanderPixAuthToken = null; + const authToken = await this.getToken(); + const dateNow = new Date(); + const year = dateNow.getFullYear(); + const month = ("00" + (dateNow.getMonth() + 1)).slice(-2); + const day = ("00" + dateNow.getDate()).slice(-2); + + if (authToken.access_token !== null) { + + const customer = await this.orderService.getCustomer(orderPayment.customerId); + const calendario: Calendario = { + dataDeVencimento: year + '-' + month + '-' + day, + validadeAposVencimento: 1, + }; + const devedor: Devedor = { + logradouro: customer.enderent, + cidade: customer.municent, + uf: customer.estent, + cep: customer.cepent, + cpf: customer.cgcent, + nome: customer.cliente + } + const valor: Valor = { + original: orderPayment.amount, + multa: null, + desconto: null, + juros: null, + }; + + const pixCob: SantanderCreateCob = { + calendario: calendario, + devedor: devedor, + valor: valor, + chave: orderPayment.orderId.toString(), + solicitacaoPagador: "Compra realizada na JURUNENSE" + } + + + console.log(pixCob); + + return this.createCobPix(authToken, pixCob); + } + + return authToken; + } + + async createCobPix(token: SantanderPixAuthToken, data: SantanderCreateCob) { + const config = { + headers: { + "Authorization": `Bearer ${token.access_token} `, + "Content-Type": 'text/plain' + }, + }; + + const request = this.http + .post("https://pix.santander.com.br/api/v1/sandbox/cob/987456123", data, config) + .pipe( + map((res) => { + return res.data + }), + ) + .pipe( + catchError((error) => { + console.log(error); + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + }), + ); + + const fact = await lastValueFrom(request); + const storeName = "JURUNENSE HOME CENTER"; + const storeCity = "BELEM"; + const lengthTxId = fact.cobs[0].txid.length + 4; + + let qrCodeDynamic = "000201" + + "010212" + + "26850014" + + "br.gov.bcb.pix" + + "2563" + + fact.cobs[0].location + + "52040000" + + "5303986" + + "54" + + ("00" + fact.cobs[0].valor.original.length).slice(-2) + + fact.cobs[0].valor.original + + "5402BR" + + "59" + ("00" + storeName.length).slice(-2) + + storeName + // deve ser o nome de fantasia da filial + "60" + ("00" + storeCity.length).slice(-2) + + storeCity + // deve ser a cidade da filial + "62" + lengthTxId.toString() + + fact.cobs[0].txid;//ver que informação é TXID + + const crcValue = crc.crc16ccitt(qrCodeDynamic).toString(16); + qrCodeDynamic += "6304" + crcValue + + console.log(qrCodeDynamic); + + return fact; + } + + + async getToken() { + const data = QueryString.stringify({ + 'client_id': 'yooItYcY7AYxWHwrjyBvIGcF9uEJDG1L', + 'client_secret': 'L0J47wlZ28ERlEfu' + }); + const config = { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + }; + + const request = this.http + .post('https://pix.santander.com.br/sandbox/oauth/token?grant_type=client_credentials', data, config) + .pipe( + map((res) => { + return res.data + }), + ) + .pipe( + catchError((error) => { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + }), + ); + + const fact = await lastValueFrom(request); + + return fact; + } + +} diff --git a/src/sales/pre-order/pre-order.controller.ts b/src/sales/pre-order/pre-order.controller.ts new file mode 100644 index 0000000..f0900f6 --- /dev/null +++ b/src/sales/pre-order/pre-order.controller.ts @@ -0,0 +1,95 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Body, Controller, Get, HttpException, HttpStatus, Param, Post, Req } from '@nestjs/common'; +import { Cart } from 'src/domain/models/cart.model'; +import { ResultModel } from 'src/domain/models/result.model'; +import { PreOrderService } from './pre-order.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Pre-Order') +@Controller('api/v1/preorder') +export class PreOrderController { + + constructor(private readonly preOrderService: PreOrderService) { } + + @Post('create') + async createOrder(@Body() cart: Cart) { + try { + const result = await this.preOrderService.create(cart); + return new ResultModel(true, null, result, null); + } catch (err) { + throw new HttpException(new ResultModel(false, err.errors.message, {}, err), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Get('list') + async getPreOrders(@Req() request: any) { + let sellerId = 0; + let storeId = ''; + let start = new Date(); + let end = new Date(); + let idPreOrder = 0; + let document = ''; + let nameCustomer = ''; + const query = request.query; + if (query.store) { + storeId = query.store; + } + if (query.start) { + start = query.start; + } + if (query.end) { + end = query.end; + } + if (query.seller) { + sellerId = query.seller; + } + if (query.idPreOrder) { + idPreOrder = query.idPreOrder; + } + if (query.document) { + document = query.document; + } + if (query.nameCustomer) { + nameCustomer = query.nameCustomer; + } + try { + // if (sellerId == 0) { + // throw new HttpException('Não foi informado um vendedor para a pesquisa de orçamentos.', HttpStatus.BAD_REQUEST); + // } + const result = await this.preOrderService.getPreOrders(sellerId, storeId, start, end, idPreOrder, document, nameCustomer); + return new ResultModel(true, null, result, null); + + } catch (err) { + throw err; + } + } + + @Get('cart') + async getCartId(@Req() request: any) { + console.log('consultando orçamento'); + let preOrderId = 0; + const query = request.query; + if (query.preOrderId) { + preOrderId = query.preOrderId; + } + if (preOrderId == 0) { + throw new HttpException('Informe um número de orçamento para realizar a pesquisa.', HttpStatus.BAD_REQUEST); + } + return await this.preOrderService.getCartId(preOrderId); + } + + @Get('itens/:id') + async getItensOrder(@Param('id') preOrderId: number) { + console.log('consultando pedido de venda'); + if (preOrderId == 0) { + throw new HttpException('Informe um número do orçamento de venda para realizar a pesquisa.', HttpStatus.BAD_REQUEST); + } + return await this.preOrderService.getItensPreOrder(preOrderId); + } + + +} diff --git a/src/sales/pre-order/pre-order.module.ts b/src/sales/pre-order/pre-order.module.ts new file mode 100644 index 0000000..26778a0 --- /dev/null +++ b/src/sales/pre-order/pre-order.module.ts @@ -0,0 +1,23 @@ +import { PreOrderController } from './pre-order.controller'; +import { PreOrderService } from './pre-order.service'; +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; +import { SharedModule } from 'src/shared/shared.module'; +import { ListsService } from 'src/backoffice/lists/lists.service'; +import { AddressCustomerService } from '../address-customer/address-customer.service'; +import { CustomerService } from '../customer/customer.service'; + +@Module({ + imports: [SharedModule], + controllers: [ + PreOrderController,], + providers: [ + PreOrderService, + ListsService, + CustomerService, + AddressCustomerService], +}) +export class PreOrderModule { } diff --git a/src/sales/pre-order/pre-order.service.ts b/src/sales/pre-order/pre-order.service.ts new file mode 100644 index 0000000..e4c09db --- /dev/null +++ b/src/sales/pre-order/pre-order.service.ts @@ -0,0 +1,506 @@ +/* +https://docs.nestjs.com/providers#services +*/ + +import { Injectable, HttpException, HttpStatus } from '@nestjs/common'; +import { Pcorcavendai } from 'src/domain/entity/tables/pcorcavendai.entity'; +import { Cart } from 'src/domain/models/cart.model'; +import { SharedService } from 'src/shared/services/shared.service'; +import { Connection } from 'typeorm'; +import { Pcorcavendac } from '../../domain/entity/tables/pcorcavendac.entity'; +import { Shopping } from '../../domain/entity/tables/estprevendac.entity'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { ListsService } from 'src/backoffice/lists/lists.service'; +import { CustomerService } from '../customer/customer.service'; +import { AddressCustomerService } from '../address-customer/address-customer.service'; + +@Injectable() +export class PreOrderService { + + constructor( + private readonly sharedService: SharedService, + private readonly listsService: ListsService, + private readonly customerService: CustomerService, + private readonly addressCustomerService: AddressCustomerService) { } + + async create(cart: Cart) { + console.log('cart: ' + JSON.stringify(cart)); + + // if (cart.idCustomer === 1 && cart.preCustomerDocument !== null) { + // this.createPreCustomer(cart); + // } + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + console.log('Processo 1'); + try { + const customer = await this.sharedService.getCustomer(cart.idCustomer); + let idPreOrder = 0; + let idRca = 0; + const preOrder = new Pcorcavendac(); + const shopping = await queryRunner.query(' SELECT ESTPREVENDAC.NUMORCA as "idPreOrder", ESTPREVENDAC.CODUSUR as "idRca" ' + + ' FROM ESTPREVENDAC ' + + ' WHERE ESTPREVENDAC.ID = :1 ' + + ' AND ESTPREVENDAC.NUMORCA IS NOT NULL ', [cart.id]); + if (shopping.length > 0) { + idPreOrder = shopping[0].idPreOrder; + const existPreOrder = await queryRunner + .query('SELECT PCORCAVENDAC.CODUSUR as "idRca" FROM PCORCAVENDAC WHERE NUMORCA = :NUMORCA', [idPreOrder]); + idRca = existPreOrder[0].idRca; + await queryRunner.query('DELETE FROM PCORCAVENDAI WHERE NUMORCA = :1', [idPreOrder]); + await queryRunner.query('DELETE FROM PCORCAVENDAC WHERE NUMORCA = :1', [idPreOrder]); + } else { + idPreOrder = await this.sharedService.generateIdPreOrder(cart.idSeller); + } + + //Create pre-customers + if (cart.idCustomer === 1 && cart.preCustomerDocument !== null) { + const preCustomer = await queryRunner.query(`SELECT ESTVENDAPRECLIENTE.CPF FROM ESTVENDAPRECLIENTE ` + + ` WHERE IDCART = :1 AND CPF = :2`, [cart.id, cart.preCustomerDocument]); + if (preCustomer === null || preCustomer.length === 0) { + const sqlInsert = ` INSERT INTO ESTVENDAPRECLIENTE ( CPF, IDCART, NOME, TELEFONE, DTCADASTRO, CODUSUR, NUMPEDRCA ) ` + + ` VALUES ( REGEXP_REPLACE(:CPF, '[^0-9]', '') , :IDCART, :NOME, :TELEFONE, SYSDATE, :CODUSUR, :NUMPEDRCA ) `; + await queryRunner.query(sqlInsert, [cart.preCustomerDocument, + cart.id, cart.preCustomerName, cart.preCustomerPhone, cart.idSeller, idPreOrder]); + } + } else { + if ( cart.preCustomerDocument != null ) { + await queryRunner.query(`DELETE FROM ESTVENDAPRECLIENTE WHERE IDCART = :1 AND REGEXP_REPLACE(:CPF, '[^0-9]', '')`, + [cart.id, cart.preCustomerDocument]); + } + } + + const dataAtual = await queryRunner.query("SELECT TO_CHAR(SYSDATE, \'DD\') AS \"dia\" " + + " ,TO_CHAR(SYSDATE, \'MM\') AS \"mes\" " + + " ,TO_CHAR(SYSDATE, \'YYYY\') AS \"ano\" FROM DUAL"); + preOrder.numorca = idPreOrder; + const dateNow = new Date(dataAtual[0].ano, dataAtual[0].mes - 1, dataAtual[0].dia); + const dateDelivery = new Date(dataAtual[0].ano, dataAtual[0].mes, dataAtual[0].dia); + dateDelivery.setDate(dateDelivery.getDate() + 3); // setDate(dateNow.getDate() + 3); + console.log('Processo 2'); + let numeroSeq = 1; + for (const item of cart.itens) { + const itemPreOrder = new Pcorcavendai(); + itemPreOrder.numorca = preOrder.numorca; + itemPreOrder.data = this.formatDate(new Date()); + itemPreOrder.codcli = cart.idCustomer; + itemPreOrder.codprod = item.idProduct; + itemPreOrder.codauxiliar = item.ean; + itemPreOrder.codusur = ( idRca > 0 ) ? idRca : cart.idSeller; + itemPreOrder.qt = item.quantity; + itemPreOrder.pvenda = item.salePrice; + itemPreOrder.ptabela = item.listPrice; + itemPreOrder.numcar = 0; + itemPreOrder.posicao = 'L'; + itemPreOrder.st = 0; + itemPreOrder.vlcustocont = 0; + itemPreOrder.vlcustofin = 0; + itemPreOrder.vlcustoreal = 0; + itemPreOrder.vlcustorep = 0; + itemPreOrder.percom = 0; + itemPreOrder.perdesc = (item.listPrice > 0) ? ((item.listPrice - item.salePrice) / item.listPrice) * 100 : 0; + itemPreOrder.numseq = numeroSeq; + itemPreOrder.pvendabase = 0; + itemPreOrder.codst = await this. + sharedService. + getTaxId(item.idProduct, + cart.saleStore, + customer.estent); + itemPreOrder.custofinest = 0; + itemPreOrder.codauxiliar = item.ean; + itemPreOrder.codfilialretira = item.idStock; + itemPreOrder.poriginal = 0; + itemPreOrder.pvendabase = 0; + itemPreOrder.pvenda1 = 0; + itemPreOrder.tipoentrega = item.deliveryMethod; + // eslint-disable-next-line @typescript-eslint/camelcase + itemPreOrder.rp_imediata = (item.deliveryMethod == "RA") ? "S" : "N"; + itemPreOrder.complemento = item.descriptionAux; + itemPreOrder.ambiente = item.environment; + + console.log('Processo 3'); + + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcorcavendai) + .values(itemPreOrder) + .execute(); + console.log('Processo 4'); + + numeroSeq = numeroSeq + 1; + } + + if (cart.shippingValue > 0) { + const itemPreOrder = new Pcorcavendai(); + itemPreOrder.numorca = preOrder.numorca; + itemPreOrder.data = this.formatDate(new Date()); + itemPreOrder.codcli = cart.idCustomer; + itemPreOrder.codprod = 48500; + itemPreOrder.codauxiliar = 48500; + itemPreOrder.codusur = ( idRca > 0 ) ? idRca : cart.idSeller; + itemPreOrder.qt = 1; + itemPreOrder.pvenda = Number.parseFloat(cart.shippingValue.toString()); + itemPreOrder.ptabela = Number.parseFloat(cart.shippingValue.toString()); + itemPreOrder.numcar = 0; + itemPreOrder.posicao = 'L'; + itemPreOrder.st = 0; + itemPreOrder.vlcustocont = 0; + itemPreOrder.vlcustofin = 0; + itemPreOrder.vlcustoreal = 0; + itemPreOrder.vlcustorep = 0; + itemPreOrder.percom = 0; + itemPreOrder.perdesc = 0; + itemPreOrder.numseq = numeroSeq; + itemPreOrder.pvendabase = 0; + itemPreOrder.codst = await this. + sharedService. + getTaxId(48500, + cart.saleStore, + customer.estent); + itemPreOrder.custofinest = 0; + itemPreOrder.codauxiliar = 48500; + itemPreOrder.codfilialretira = cart.saleStore; + itemPreOrder.poriginal = 0; + itemPreOrder.pvendabase = 0; + itemPreOrder.pvenda1 = 0; + itemPreOrder.tipoentrega = 'EF'; + console.log('Processo 3'); + + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcorcavendai) + .values(itemPreOrder) + .execute(); + console.log('Processo 4'); + + numeroSeq = numeroSeq + 1; + } + + //#region create PCORCAVENDAC + console.log('Processo 5' + cart); + const supervisor = await queryRunner.manager.query('SELECT PCUSUARI.CODSUPERVISOR as "codsupervisor" FROM PCUSUARI WHERE CODUSUR = :1', [cart.idSeller]); + console.log('Supervisor: ' + JSON.stringify(supervisor)); + preOrder.posicao = 'L'; + preOrder.numcar = 0; + preOrder.numpedrca = preOrder.numorca; + preOrder.percvenda = 100; + preOrder.codendent = cart.idAddress; + preOrder.codcob = cart.idBilling; + preOrder.codplpag = cart.idPaymentPlan; + preOrder.condvenda = 7; + preOrder.data = this.formatDate(new Date()); + preOrder.hora = new Date().getHours(); + preOrder.minuto = new Date().getMinutes(); + preOrder.dtentrega = cart.shippingDate; // dateDelivery; + preOrder.codfilial = cart.saleStore, + preOrder.codusur = ( idRca > 0 ) ? idRca : cart.idSeller; + preOrder.codemitente = cart.userId; + preOrder.codusur3 = cart.idProfessional; + preOrder.tipoprioridadeentrega = cart.shippingPriority; + if (supervisor != null && supervisor.length > 0) { + preOrder.codsupervisor = supervisor[0].codsupervisor; + } + preOrder.codemitente = cart.userId; + preOrder.vlfrete = cart.shippingValue; + preOrder.vloutrasdesp = 0; + preOrder.numitens = cart.itens.length; + preOrder.obs1 = cart.notation1; + preOrder.obs2 = cart.notation2; + preOrder.obsentrega1 = cart.deliveryNote1; + preOrder.obsentrega2 = cart.deliveryNote2; + preOrder.obsentrega3 = cart.deliveryNote3; + + //Dados do cliente + preOrder.codcli = cart.idCustomer; + preOrder.codpraca = customer.codpraca; + preOrder.fretedespacho = customer.fretedespacho; + preOrder.data = dateNow; + preOrder.vlfrete = Number.parseFloat(cart.shippingValue.toString()); + //#endregion + + //#region create PCPEDITEMP + + + + //#endregion + + // execute some operations on this transaction: + console.log('Processo 6'); + + const totalOrca = await queryRunner. + query('SELECT SUM((PCORCAVENDAI.QT * PCORCAVENDAI.PVENDA)) AS \"valorTotal\" ' + + ' ,SUM(PCORCAVENDAI.QT * PCORCAVENDAI.PTABELA ) AS \"valorTabela\" ' + + ' ,SUM(PCORCAVENDAI.QT * PCPRODUT.PESOBRUTO ) AS \"pesoTotal\" ' + + ' ,SUM(PCORCAVENDAI.QT * PCPRODUT.VOLUME ) AS \"volumeTotal\" ' + + ' ,SUM(PCORCAVENDAI.QT * ( PCORCAVENDAI.PTABELA - PCORCAVENDAI.PVENDA) ) AS \"valorDesconto\" ' + + ' FROM PCORCAVENDAI, PCPRODUT ' + + ' WHERE PCORCAVENDAI.CODPROD = PCPRODUT.CODPROD ' + + ' AND PCORCAVENDAI.NUMORCA = :idPreOrder ', [preOrder.numorca]); + + preOrder.vltotal = totalOrca[0].valorTotal; + preOrder.vlatend = totalOrca[0].valorTotal; + preOrder.vltabela = totalOrca[0].valorTabela; + preOrder.totpeso = totalOrca[0].pesoTotal; + preOrder.totvolume = totalOrca[0].volumeTotal; + preOrder.vldesconto = totalOrca[0].valorDesconto; + + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcorcavendac) + .values(preOrder) + .execute(); + + + const sql = 'UPDATE PCORCAVENDAC SET DATA = TRUNC(SYSDATE) ' + + ' WHERE PCORCAVENDAC.NUMORCA = :1 '; + + await queryRunner.query(sql, [ + preOrder.numorca + ]); + + + console.log('Processo 7'); + + await queryRunner.manager + .createQueryBuilder() + .update(Shopping) + .set({ + numorca: idPreOrder + }) + .where("ESTPREVENDAC.ID = :idcart", { idcart: cart.id }) + .execute(); + + await queryRunner.commitTransaction(); + + return preOrder; + + } catch (err) { + await queryRunner.rollbackTransaction(); + console.log(err); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + formatDate(date: Date) { + const day = date.getDay(); + const month = date.getMonth() + 1; + const year = date.getFullYear(); + + const newDate: Date = new Date(year, month, day); + + console.log(newDate); + + return newDate; + } + + async getPreOrders(sellerId: number, storeId: string, start: Date, end: Date, idPreOrder: number, document: string, nameCustomer: string) { + console.log('Vendedor: ' + sellerId); + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const startDate = new Date(start); + let day = startDate.getDate(); + let month = ("00" + (startDate.getMonth() + 1)).slice(-2); + let year = startDate.getFullYear(); + const startFormat = day + "/" + month + "/" + year; + const endDate = new Date(end); + day = endDate.getDate(); + month = ("00" + (endDate.getMonth() + 1)).slice(-2); + year = endDate.getFullYear(); + const endFormat = day + "/" + month + "/" + year; + let sql = 'SELECT TO_CHAR(PCORCAVENDAC.DATA, \'DD/MM/YYYY\') as "data" ' + + ' ,PCORCAVENDAC.NUMORCA as "idPreOrder" ' + + ' ,PCORCAVENDAC.VLATEND as "value" ' + + ' ,PCORCAVENDAC.VLTABELA as "listValue" ' + + ' ,PCORCAVENDAC.CODCLI as "idCustomer" ' + + ` ,CASE WHEN PCORCAVENDAC.CODCLI = 1 THEN NVL(( SELECT ESTVENDAPRECLIENTE.NOME || '( PRE-CADASTRO)' ` + + ' FROM ESTVENDAPRECLIENTE ' + + ' WHERE ESTVENDAPRECLIENTE.IDCART = ESTPREVENDAC.ID AND ROWNUM = 1 ), ' + + ' PCCLIENT.CLIENTE ) ELSE PCCLIENT.CLIENTE END as "customer" ' + + ' ,PCORCAVENDAC.CODUSUR as "idSeller" ' + + ' ,PCUSUARI.NOME as "seller" ' + + ' ,CASE WHEN PCORCAVENDAC.ORCAMENTOUTILIZADO = \'S\' THEN \'ORÇAMENTO UTILIZADO\' ELSE \'PENDENTE\' END as "status"' + + ' ,PCORCAVENDAC.NUMPED as "orderId" ' + + ' ,( SELECT ESTVENDAPRECLIENTE.CPF FROM ESTVENDAPRECLIENTE WHERE ESTVENDAPRECLIENTE.IDCART = ESTPREVENDAC.ID AND ROWNUM = 1 ) as "cpfPreCustomer" ' + + ' ,( SELECT ESTVENDAPRECLIENTE.NOME FROM ESTVENDAPRECLIENTE WHERE ESTVENDAPRECLIENTE.IDCART = ESTPREVENDAC.ID AND ROWNUM = 1 ) as "namePreCustomer" ' + + ' FROM PCORCAVENDAC, PCCLIENT, PCUSUARI, ESTPREVENDAC ' + + ' WHERE PCORCAVENDAC.CODCLI = PCCLIENT.CODCLI ' + + ' AND PCORCAVENDAC.CODUSUR = PCUSUARI.CODUSUR ' + + ' AND PCORCAVENDAC.NUMORCA = ESTPREVENDAC.NUMORCA ' + + ' AND PCORCAVENDAC.CODFILIAL = :1 ' + + ' AND PCORCAVENDAC.DATA BETWEEN TO_DATE(:2, \'DD/MM/YYYY\') AND TO_DATE(:3, \'DD/MM/YYYY\')'; + + if (sellerId > 0) { + sql += ` AND PCORCAVENDAC.CODUSUR = ${sellerId} `; + } + + if (idPreOrder > 0) { + sql += ` AND PCORCAVENDAC.NUMORCA = ${idPreOrder} `; + } + + if ( document.length > 0 ) { + sql += ` AND REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') = REGEXP_REPLACE(${document}, '[^0-9]', '') `; + } + + if ( nameCustomer.length > 0 ) { + sql += ` AND PCCLIENT.CLIENTE LIKE UPPER('${nameCustomer}')||'%' `; + } + + const preOrders = + await queryRunner.query(sql, [storeId, startFormat, endFormat]); + + return preOrders; + } catch (err) { + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getCartId(preOrderId: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const preOrder = await queryRunner.query('SELECT PCORCAVENDAC.DATA as "createDate" ' + + ' ,PCORCAVENDAC.ORCAMENTOUTILIZADO as "preOrderFinish" ' + + ' ,PCORCAVENDAC.NUMPED as "orderId" ' + + ' ,PCORCAVENDAC.CODFILIAL as "invoiceStore" ' + + ' ,PCORCAVENDAC.CODCLI as "customerId" ' + + ' ,PCORCAVENDAC.CODPLPAG as "paymentPlanId" ' + + ' ,PCORCAVENDAC.CODCOB as "billindId" ' + + ' ,PCORCAVENDAC.CODENDENT as "addressId" ' + + ' ,PCORCAVENDAC.CODUSUR3 as "partnerId" ' + + ' ,ESTPREVENDAC.ID as "cartId" ' + + ' ,PCORCAVENDAC.OBS as "notification" ' + + ' ,PCORCAVENDAC.OBS1 as "notification1" ' + + ' ,PCORCAVENDAC.OBS2 as "notification2" ' + + ' ,PCORCAVENDAC.OBSENTREGA1 as "notificationDelivery1" ' + + ' ,PCORCAVENDAC.OBSENTREGA2 as "notificationDelivery2" ' + + ' ,PCORCAVENDAC.OBSENTREGA3 as "notificationDelivery3" ' + + ' ,PCORCAVENDAC.DTENTREGA as "deliveryDate" ' + + ` ,NVL(PCORCAVENDAC.TIPOPRIORIDADEENTREGA, 'B') as "priorityDelivery" ` + + ' ,( SELECT ESTVENDAPRECLIENTE.CPF FROM ESTVENDAPRECLIENTE WHERE ESTVENDAPRECLIENTE.IDCART = ESTPREVENDAC.ID AND ROWNUM = 1 ) as "cpfPreCustomer" ' + + ' ,( SELECT ESTVENDAPRECLIENTE.NOME FROM ESTVENDAPRECLIENTE WHERE ESTVENDAPRECLIENTE.IDCART = ESTPREVENDAC.ID AND ROWNUM = 1 ) as "namePreCustomer" ' + + ' FROM PCORCAVENDAC, ESTPREVENDAC ' + + ' WHERE PCORCAVENDAC.NUMORCA = ESTPREVENDAC.NUMORCA ' + + ' AND PCORCAVENDAC.NUMORCA = :1', [preOrderId]); + + if (preOrder.length == 0) { + throw new HttpException(`Orçamento não foi localizado`, HttpStatus.NOT_FOUND); + } + + if (preOrder.preOrderFinish == 'S') { + throw new HttpException(`Orçamento já utilizado, não pode sofre alterações. Número do pedido gerado: ${preOrder.orderId}`, HttpStatus.BAD_REQUEST); + } + + await queryRunner.query("BEGIN ESK_VENDA.ATUALIZAR_PRECO_VENDA(:idcart, :paymentPlanId); END;", + [preOrder[0].cartId, preOrder[0].paymentPlanId]); + + const invoiceStores = await this.listsService.GetStoreAll(); + const invoiceStore = await invoiceStores.find(data => data.id === preOrder[0].invoiceStore); + const customer = await this.customerService.findCustomerById(preOrder[0].customerId); + const billinds = await this.listsService.GetBilling(preOrder[0].customerId); + const partners = await this.listsService.GetPartners(); + const preCustomer = await this.listsService.GetPreCustomer(preOrder[0].cartId); + let address: any; + if (preOrder[0].addressId > 0) { + address = await this.addressCustomerService.getAddress(preOrder[0].customerId, preOrder[0].addressId); + } + // const address = await this.addressCustomerService.getAddress(preOrder[0].customerId, preOrder[0].addressId); + const billing = billinds.find(data => data.codcob === preOrder[0].billindId); + const paymentPlans = await this.listsService.GetPaymentPlan((billing !== null && billing !== undefined) ? billing.codcob : '9999'); + const paymentPlan = paymentPlans.find(data => data.codplpag === preOrder[0].paymentPlanId); + const partner = partners.find(data => data.id === preOrder[0].partnerId); + + + return { + cartId: preOrder[0].cartId, invoiceStore: invoiceStore, customer: customer, partner: partner ?? null, + paymentPlan: paymentPlan ?? null, billing: billing ?? null, address: address ?? null, + notification: preOrder[0].notification, notification1: preOrder[0].notification1, notification2: preOrder[0].notification2, + notificationDelivery1: preOrder[0].notificationDelivery1, notificationDelivery2: preOrder[0].notificationDelivery2, + notificationDelivery3: preOrder[0].notificationDelivery3, deliveryDate: preOrder[0].deliveryDate, + priorityDelivery: preOrder[0].priorityDelivery, preCustomer: preCustomer + } + + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getItensPreOrder(idPreOrder: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + let sql = ''; + + try { + + sql = ` SELECT PCORCAVENDAI.CODPROD as "productId", PCPRODUT.DESCRICAO as "description", ` + + ` PCPRODUT.EMBALAGEM as "package", ` + + ` PCORCAVENDAI.COMPLEMENTO as "color" , ` + + ` PCORCAVENDAI.AMBIENTE as "local", ` + + ` PCORCAVENDAI.QT as "quantity", PCORCAVENDAI.PVENDA as "price", ` + + ` ( PCORCAVENDAI.QT * PCORCAVENDAI.PVENDA ) as "subTotal" ` + + ` FROM PCORCAVENDAI, PCORCAVENDAC, PCPRODUT ` + + ` WHERE PCORCAVENDAI.CODPROD = PCPRODUT.CODPROD ` + + ` AND PCORCAVENDAI.NUMORCA = PCORCAVENDAC.NUMORCA ` + + ` AND PCORCAVENDAC.NUMORCA = :NUMORCA ` + + ` ORDER BY PCORCAVENDAI.NUMSEQ `; + const result = await queryRunner.query(sql, [idPreOrder]); + return result; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + } + + + + async createPreCustomer(cart: Cart) { + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + // const preCustomer = await queryRunner.query(`SELECT ESTVENDAPRECLIENTE.CPF FROM ESTVENDAPRECLIENTE ` + + // ` WHERE IDCART = :1 AND CPF = :2`, [cart.id, cart.preCustomerDocument]); + const sqlInsert = ` INSERT INTO ESTVENDAPRECLIENTE ( CPF, IDCART, NOME, TELEFONE, DTCADASTRO, CODUSUR ) ` + + ` VALUES ( REGEXP_REPLACE(:CPF, '[^0-9]', '') , :IDCART, :NOME, :TELEFONE, SYSDATE, :CODUSUR ) `; + await queryRunner.query(sqlInsert, [cart.preCustomerDocument, + cart.id, cart.preCustomerName, cart.preCustomerPhone, cart.idSeller]); + await queryRunner.commitTransaction(); + + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } + finally { + await queryRunner.release(); + await connection.close(); + } + } + + +} diff --git a/src/sales/sales/sales.controller.ts b/src/sales/sales/sales.controller.ts new file mode 100644 index 0000000..df52ce3 --- /dev/null +++ b/src/sales/sales/sales.controller.ts @@ -0,0 +1,283 @@ +import { Body, Controller, Get, HttpException, HttpStatus, Param, Post, Query, Req } from '@nestjs/common'; +import { FilterProduct } from 'src/domain/models/filter-product.model'; +import { Notify } from 'src/domain/models/notify.model'; +import { Rupture } from 'src/domain/models/rupture.model'; +import { SalesService } from './sales.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Sales') +@Controller('api/v1/sales') +export class SalesController { + constructor(private salesService: SalesService) { } + + @Get('products') + async get(@Req() request: any) { + let pageNumber = 1; + let sizeCount = 500; + let store = '99'; + console.log(request.headers); + console.log(request.query); + try { + if (request.headers['x-page']) + pageNumber = request.headers['x-page']; + if (request.headers['x-size-count']) + sizeCount = request.headers['x-size-count']; + if (request.headers['x-store']) + store = request.headers['x-store']; + return await this.salesService.GetProducts2(store, sizeCount, pageNumber, request.query); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + + } + + @Get('departments') + async getDepartments() { + try { + return await this.salesService.getDepartments(); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('category') + async getCategory() { + try { + return await this.salesService.getCategory(); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + + @Get('placesinterior') + async getPlacesInterior() { + try { + return await this.salesService.getPlacesInterior(); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('products/:search') + async searchProducts(@Param('search') search: string, @Req() request: any) { + console.log("pesquisando produtos..."); + let pageNumber = 1; + let sizeCount = 500; + let store = '99'; + try { + if (request.headers['x-page']) + pageNumber = request.headers['x-page']; + if (request.headers['x-size-count']) + sizeCount = request.headers['x-size-count']; + if (request.headers['x-store']) + store = request.headers['x-store']; + return await this.salesService.searchProduct(store, search, sizeCount, pageNumber); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('product/category/:url') + async searchByDepartment(@Param('url') urlDepartment: string, @Req() request: any) { + console.log("pesquisando produtos..."); + let pageNumber = 1; + let sizeCount = 500; + let store = '99'; + try { + if (request.headers['x-page']) + pageNumber = request.headers['x-page']; + if (request.headers['x-size-count']) + sizeCount = request.headers['x-size-count']; + if (request.headers['x-store']) + store = request.headers['x-store']; + return await this.salesService.searchByDepartment(store, sizeCount, pageNumber, urlDepartment); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('product/category/:urlDepartament/:urlSection') + async searchBySection(@Param('urlDepartament') urlDepartment: string, @Param('urlSection') urlSection: string, @Req() request: any) { + let pageNumber = 1; + let sizeCount = 500; + let store = '99'; + try { + if (request.headers['x-page']) + pageNumber = request.headers['x-page']; + if (request.headers['x-size-count']) + sizeCount = request.headers['x-size-count']; + if (request.headers['x-store']) + store = request.headers['x-store']; + return await this.salesService.searchBySection(store, sizeCount, pageNumber, urlDepartment, urlSection); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('product/category/:urlDepartament/:urlSection/:urlCategory') + async searchByCategory(@Param('urlDepartament') urlDepartment: string, @Param('urlSection') urlSection: string, + @Param('urlCategory') urlCategory: string, @Req() request: any) { + let pageNumber = 1; + let sizeCount = 500; + let store = '99'; + try { + if (request.headers['x-page']) + pageNumber = request.headers['x-page']; + if (request.headers['x-size-count']) + sizeCount = request.headers['x-size-count']; + if (request.headers['x-store']) + store = request.headers['x-store']; + return await this.salesService.searchByCategory(store, sizeCount, pageNumber, urlDepartment, urlSection, urlCategory); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + + @Post('products') + async getProductsByFilter(@Req() request: any, @Body() filter: FilterProduct) { + let pageNumber = 1; + let sizeCount = 500; + console.log(filter); + let store = '99'; + try { + if (request.headers['x-page']) + pageNumber = request.headers['x-page']; + if (request.headers['x-size-count']) + sizeCount = request.headers['x-size-count']; + if (request.headers['x-store']) + store = request.headers['x-store']; + // return await this.salesService.GetProducts2(store, sizeCount, pageNumber, filter); + return await this.salesService.searchProduct2(store, sizeCount, pageNumber, filter); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('product/:id') + async getProduct(@Req() request: any, @Param('id') id: number) { + let store = '99'; + try { + if (request.headers['x-store']) + store = request.headers['x-store']; + return await this.salesService.GetProduct(store, id); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('product/bytogether/:id') + async GetProductsBuyTogether(@Req() request: any, @Param('id') id: number) { + let store = '99'; + try { + if (request.headers['x-store']) + store = request.headers['x-store']; + return await this.salesService.GetProductsBuyTogether(store, id); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('stock/:storeid/:id') + async getStock(@Param('storeid') storeId: string, @Param('id') id: number) { + try { + return await this.salesService.GetStocks(storeId, id); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('installment/:id') + async getSaleIntallment(@Req() request: any, @Query() query, @Param('id') id: number) { + let store = '99'; + let quantity = 1; + try { + if (request.headers['x-store']) + store = request.headers['x-store']; + if (query['quantity']) { + quantity = Number.parseFloat(query['quantity']); + } + return await this.salesService.GetSaleInstallment(store, id, quantity); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + + @Get('delivery/:cpf') + async getDelivery(@Param('cpf') cpf: string) { + try { + return await this.salesService.GetDelivery(cpf); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('deliveryDays/:createDate/:invoiceStoreId/:placeId/:cartId') + async deliveryDays(@Param('createDate') createDate: string, + @Param('invoiceStoreId') invoiceStoreId: string, + @Param('placeId') placeId: string, + @Param('cartId') cartId: string) { + return this.salesService.getDeliveryTime(createDate, invoiceStoreId, placeId, cartId); + } + + @Post('notify') + async createNotification(@Body() data: Notify) { + try { + return await this.salesService.createNotification(data); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Post('rupture') + async createRupture(@Body() data: Rupture) { + try { + return await this.salesService.createRuptura(data); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Post('calculatedeliverytaxorder') + async calcDeliveryTaxOrder( + @Body() dataDeliveryOrder: any) { + try { + return await this.salesService.calculateDeliveryTaxOrder(dataDeliveryOrder); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('analisevenda/:id') + async analiseVendaRca(@Param('id') id: number) { + try { + return await this.salesService.GetAnaliseVenda(id); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('historicovenda/:id') + async historicoVendaRca(@Param('id') id: number) { + try { + return await this.salesService.GetHistoricoVendas(id); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Get('calculatedeliverytax/:cartid/:ibgeCode') + async calculatedeliverytax( + @Param('cartid') cartId: string, + @Param('ibgeCode') ibgeCode: string) { + try { + return await this.salesService.calculateDeliveryTax(cartId, ibgeCode); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + +} diff --git a/src/sales/sales/sales.module.ts b/src/sales/sales/sales.module.ts new file mode 100644 index 0000000..d82b703 --- /dev/null +++ b/src/sales/sales/sales.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { SalesController } from './sales.controller'; +import { SalesService } from './sales.service'; +import { CustomerService } from '../customer/customer.service'; + +@Module({ + imports: [], + controllers: [SalesController], + providers: [SalesService, CustomerService], +}) +export class SalesModule {} diff --git a/src/sales/sales/sales.service.ts b/src/sales/sales/sales.service.ts new file mode 100644 index 0000000..e1ca9fa --- /dev/null +++ b/src/sales/sales/sales.service.ts @@ -0,0 +1,1665 @@ +import { Injectable, HttpException, HttpStatus } from '@nestjs/common'; +import { Pcclient } from 'src/domain/entity/tables/pcclient.entity'; +import { SalesProduct } from 'src/domain/entity/views/esvprodutosvenda.entity'; +import { Connection, getConnection, QueryRunner } from 'typeorm'; +import { Esvsituacaopedido } from '../../domain/entity/views/esvsituacaopedido.entity'; +import { Stock } from '../../domain/entity/views/esvestoquevenda.entity'; +import { FilterProduct } from 'src/domain/models/filter-product.model'; +import { Notify } from 'src/domain/models/notify.model'; +import { Estavisoestoque } from 'src/domain/entity/tables/estavisoestoque.entity'; +import { Esvparcelamentovenda } from '../../domain/entity/views/esvparcelamentovenda.entity'; +import { Rupture } from 'src/domain/models/rupture.model'; +import { Estruptura } from 'src/domain/entity/tables/estruptura.entity'; +import { Esvsecao } from '../../domain/entity/views/esvsecao.entity'; +import { Esvdepartamento } from 'src/domain/entity/views/esvdepartamento.entity'; +import { Esvanalisevendarca } from 'src/domain/entity/views/esvanalisevendarca.entity'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { CustomerService } from '../customer/customer.service'; + +@Injectable() +export class SalesService { + + constructor( + private readonly customerService: CustomerService + ) { } + + + async GetProducts(store: string, pageSize: number, pageNumber: number, filter: FilterProduct = null): Promise { + const connection = getConnection(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + if (pageSize == 0) + pageSize = 500; + if (pageNumber == 0) + pageNumber = 1; + const offSet = (pageNumber - 1) * pageSize; + + if (filter && filter.text != null) { + const description = filter.text.toUpperCase(); + console.log('consultando por codigo de fabrica'); + let products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .orderBy("\"esvlistaprodutos\".DESCRICAO") + .where("UPPER(\"esvlistaprodutos\".CODFAB) LIKE '%'||REPLACE(:description, '@', '%')||'%'", { description }) + .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", + { produtoComReducaoPreco: (filter.markdown) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_campanha = :campaign OR :campaign = 'N')", + { campaign: (filter.campaign) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_oportunidade = :oportunity OR :oportunity = 'N')", + { oportunity: (filter.oportunity) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_promocao = :produtoEmPromocao OR :produtoEmPromocao = 'N')", + { produtoEmPromocao: (filter.promotion) ? 'S' : 'N' }) + .orderBy("\"esvlistaprodutos\".CLASSEVENDA") + .limit(pageSize) + .offset(offSet) + .orderBy("\"esvlistaprodutos\".DESCRICAO", "ASC") + .getRawMany(); + if (products.length == 0) { + products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .orderBy("\"esvlistaprodutos\".DESCRICAO") + .where("UPPER(\"esvlistaprodutos\".descricao) LIKE '%'||REPLACE(:description, '@', '%')||'%'", { description }) + .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", + { produtoComReducaoPreco: (filter.markdown) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_campanha = :campaign OR :campaign = 'N')", + { campaign: (filter.campaign) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_oportunidade = :oportunity OR :oportunity = 'N')", + { oportunity: (filter.oportunity) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_promocao = :produtoEmPromocao OR :produtoEmPromocao = 'N')", + { produtoEmPromocao: (filter.promotion) ? 'S' : 'N' }) + .orderBy("\"esvlistaprodutos\".CLASSEVENDA") + .limit(pageSize) + .offset(offSet) + .orderBy("\"esvlistaprodutos\".DESCRICAO", "ASC") + .getRawMany(); + } + products = this.createListImages(products); + console.log(products.length + ' produtos'); + return products; + } + + if (filter && filter.brands && filter.brands.length > 0) { + const brands = filter.brands; + let xbrands = ''; + brands.forEach(b => { + if (xbrands.length > 0) { + xbrands += ', ' + '\'' + b + '\'' + } + else { + xbrands = '\'' + b + '\''; + } + }); + console.log("String: " + xbrands); + console.log("String: " + filter.urlCategory); + let products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .orderBy("\"esvlistaprodutos\".DESCRICAO") + .where("esvlistaprodutos.brand in (" + xbrands + ")") + .andWhere("\"esvlistaprodutos\".URLCATEGORIA LIKE :urlCategoria||'%'", { urlCategoria: filter.urlCategory }) + .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", + { produtoComReducaoPreco: (filter.markdown) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_campanha = :campaign OR :campaign = 'N')", + { campaign: (filter.campaign) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_oportunidade = :oportunity OR :oportunity = 'N')", + { oportunity: (filter.oportunity) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_promocao = :produtoEmPromocao OR :produtoEmPromocao = 'N')", + { produtoEmPromocao: (filter.promotion) ? 'S' : 'N' }) + .limit(pageSize) + .offset(offSet) + .orderBy("\"esvlistaprodutos\".DESCRICAO", "ASC") + .getRawMany(); + products = this.createListImages(products); + console.log(products.length + ' produtos'); + return products; + + } else { + if (filter && filter.markdown) + console.log('Produto em redução de preço - 1'); + let products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder("esvlistaprodutos") + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .where("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", + { produtoComReducaoPreco: (filter && filter.markdown) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_campanha = :campaign OR :campaign = 'N')", + { campaign: (filter && filter.campaign) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_oportunidade = :oportunity OR :oportunity = 'N')", + { oportunity: (filter && filter.oportunity) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_promocao = :produtoEmPromocao OR :produtoEmPromocao = 'N')", + { produtoEmPromocao: (filter && filter.promotion) ? 'S' : 'N' }) + .orderBy("\"esvlistaprodutos\".DESCRICAO") + .limit(pageSize) + .offset(offSet) + .getRawMany(); + products = this.createListImages(products); + console.log(products.length + ' produtos'); + return products; + + } + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + } + } + + + async GetProducts2(store: string, pageSize: number, pageNumber: number, filter: FilterProduct = null,) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + if (pageSize == 0) + pageSize = 500; + if (pageNumber == 0) + pageNumber = 1; + const offSet = (pageNumber - 1) * pageSize; + + const sqlProduto = `SELECT + esvlistaprodutos.CODPROD as "idProduct", + esvlistaprodutos.SEQ as "seq", + esvlistaprodutos.DESCRICAO as "smallDescription", + esvlistaprodutos.NOMEECOMMERCE as "title", + esvlistaprodutos.CODFAB as "idProvider", + esvlistaprodutos.CODAUXILIAR as "ean", + esvlistaprodutos.TIPOPRODUTO as "productType", + esvlistaprodutos.DADOSTECNICOS as "technicalData", + esvlistaprodutos.INFORMACOESTECNICAS as "description", + esvlistaprodutos.URLIMAGEM as "urlImage", + esvlistaprodutos.NOMEMARCA as "brand", + esvlistaprodutos.NOMEDEPARTAMENTO as "department", + esvlistaprodutos.NOMESECAO as "section", + esvlistaprodutos.NOMECATEGORIA as "category", + esvlistaprodutos.NOMEFORNECEDOR as "supplier", + esvlistaprodutos.CODIGOFILIAL as "store", + esvlistaprodutos.CLASSEVENDA as "saleAbc", + esvlistaprodutos.CLASSEESTOQUE as "stockAbc", + esvlistaprodutos.FORALINHA as "outLine", + esvlistaprodutos.PRECOVENDA as "listPrice", + esvlistaprodutos.PRECOPROMOCIONAL as "salePrice", + esvlistaprodutos.PRECOPROMOCIONAL as "salePromotion", + esvlistaprodutos.PRECOPROMOCIONAL_AVISTA as "salePromotion_cash", + esvlistaprodutos.PERCENTUALDESCONTO as "offPercent", + esvlistaprodutos.QTESTOQUE_DISPONIVEL as "stock", + esvlistaprodutos.QTCAIXAS as "boxStock", + esvlistaprodutos.ESTOQUE_DISP_LOJA as "store_stock", + esvlistaprodutos.ESTOQUE_DISP_CAIXA_LOJA as "store_boxStock", + esvlistaprodutos.MULTIPLO as "mutiple", + esvlistaprodutos.UNIDADE as "unity", + esvlistaprodutos.URLDEPARTAMENTO as "urlDepartment", + esvlistaprodutos.URLSECAO as "urlSection", + esvlistaprodutos.PRODUTO_COM_REDUCAO_PRECO as "downPrice", + esvlistaprodutos.PRODUTO_EM_CAMPANHA as "compaing", + esvlistaprodutos.BASETINTOMETRICO as "base", + esvlistaprodutos.LETRABASETINTOMETRICO as "letter", + esvlistaprodutos.LINHATINTOMETRICO as "line", + esvlistaprodutos.LITRAGEM as "can", + esvlistaprodutos.QUANTIDADE_ESTOQUE_GERAL as "full_stock" + FROM ESVLISTAPRODUTOS + WHERE 1 = 1`; + + if (filter && filter.text.length > 0) { + const description = filter.text.toUpperCase(); + console.log('consultando por codigo de fabrica'); + + let products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL_AVISTA", "salePromotion_cash") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") + .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".LETRATINTOMETRICO", "letter") + .addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line") + .addSelect("\"esvlistaprodutos\".LITRAGEM", "can") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .where("UPPER(\"esvlistaprodutos\".CODFAB) LIKE '%'||REPLACE(:description, '@', '%')||'%'", { description }) + .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", + { produtoComReducaoPreco: (filter.markdown) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_campanha = :campaign OR :campaign = 'N')", + { campaign: (filter.campaign) ? 'I' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_campanha = :oportunity OR :oportunity = 'N')", + { oportunity: (filter.oportunity) ? 'O' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_promocao = :produtoEmPromocao OR :produtoEmPromocao = 'N')", + { produtoEmPromocao: (filter.promotion) ? 'S' : 'N' }) + .limit(pageSize) + .offset(offSet) + .orderBy("\"esvlistaprodutos\".DESCRICAO", "ASC") + .getRawMany(); + if (products.length == 0) { + products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL_AVISTA", "salePromotion_cash") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") + .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".LETRATINTOMETRICO", "letter") + .addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line") + .addSelect("\"esvlistaprodutos\".LITRAGEM", "can") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .where("UPPER(\"esvlistaprodutos\".descricao) LIKE '%'||REPLACE(:description, '@', '%')||'%'", { description }) + .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", + { produtoComReducaoPreco: (filter.markdown) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_campanha = :campaign OR :campaign = 'N')", + { campaign: (filter.campaign) ? 'I' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_oportunidade = :oportunity OR :oportunity = 'N')", + { oportunity: (filter.oportunity) ? 'O' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_promocao = :produtoEmPromocao OR :produtoEmPromocao = 'N')", + { produtoEmPromocao: (filter.promotion) ? 'S' : 'N' }) + .orderBy("\"esvlistaprodutos\".CLASSEVENDA") + .limit(pageSize) + .offset(offSet) + .orderBy("\"esvlistaprodutos\".DESCRICAO", "ASC") + .getRawMany(); + } + products = this.createListImages(products); + console.log(products.length + ' produtos'); + return products; + } + + if (filter && filter.brands && filter.brands.length > 0) { + const brands = filter.brands; + let xbrands = ''; + brands.forEach(b => { + if (xbrands.length > 0) { + xbrands += ', ' + '\'' + b + '\'' + } + else { + xbrands = '\'' + b + '\''; + } + }); + console.log("String: " + xbrands); + console.log("String: " + filter.urlCategory); + let products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL_AVISTA", "salePromotion_cash") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") + .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".LETRATINTOMETRICO", "letter") + .addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line") + .addSelect("\"esvlistaprodutos\".LITRAGEM", "can") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .where("esvlistaprodutos.brand in (" + xbrands + ")") + .andWhere("\"esvlistaprodutos\".URLCATEGORIA LIKE :urlCategoria||'%'", { urlCategoria: filter.urlCategory }) + .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", + { produtoComReducaoPreco: (filter.markdown) ? 'S' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_campanha = :campaign OR :campaign = 'N')", + { campaign: (filter.campaign) ? 'I' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_oportunidade = :oportunity OR :oportunity = 'N')", + { oportunity: (filter.oportunity) ? 'O' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_promocao = :produtoEmPromocao OR :produtoEmPromocao = 'N')", + { produtoEmPromocao: (filter.promotion) ? 'S' : 'N' }) + .limit(pageSize) + .offset(offSet) + .orderBy("\"esvlistaprodutos\".DESCRICAO", "ASC") + .getRawMany(); + products = this.createListImages(products); + console.log(products.length + ' produtos'); + return products; + + } else { + if (filter.markdown.toString() == 'true') + console.log('Produto em redução de preço - 2'); + let products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder("esvlistaprodutos") + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL_AVISTA", "salePromotion_cash") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") + .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".LETRATINTOMETRICO", "letter") + .addSelect("\"esvlistaprodutos\".LINHATINTOMETRICO", "line") + .addSelect("\"esvlistaprodutos\".LITRAGEM", "can") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .where("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .andWhere("(\"esvlistaprodutos\".produto_com_reducao_preco = :produtoComReducaoPreco OR :produtoComReducaoPreco = 'N')", + { produtoComReducaoPreco: (filter.markdown.toString() == 'true') ? 'S' : 'N' }) + // .andWhere("(\"esvlistaprodutos\".produto_em_campanha = :campaign OR :campaign = 'N')", + // { campaign: (filter && filter.campaign) ? 'I' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_oportunidade = :oportunity OR :oportunity = 'N')", + { oportunity: (filter.oportunity.toString() == 'true') ? 'O' : 'N' }) + .andWhere("(\"esvlistaprodutos\".produto_em_promocao = :produtoEmPromocao OR :produtoEmPromocao = 'N')", + { produtoEmPromocao: (filter.promotion.toString() == 'true') ? 'S' : 'N' }) + .limit(pageSize) + .offset(offSet) + .orderBy("\"esvlistaprodutos\".DESCRICAO", "ASC") + .getRawMany(); + products = this.createListImages(products); + console.log(products.length + ' produtos'); + return products; + + } + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + + async searchByDepartment(store: string, pageSize: number, pageNumber: number, urlDepartment: string): Promise { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + if (pageSize == 0) + pageSize = 50; + if (pageNumber == 0) + pageNumber = 1; + const offSet = (pageNumber - 1) * pageSize; + let products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .where('\"esvlistaprodutos\".urldepartamento = :urlDepartment', { urlDepartment }) + .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .limit(pageSize) + .offset(offSet) + .orderBy("\"esvlistaprodutos\".DESCRICAO", "ASC") + .getMany(); + products = this.createListImages(products); + return products; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async searchBySection(store: string, pageSize: number, pageNumber: number, urlDepartment: string, urlSection: string): Promise { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + const url = urlDepartment + '/' + urlSection; + try { + if (pageSize == 0) + pageSize = 50; + if (pageNumber == 0) + pageNumber = 1; + const offSet = (pageNumber - 1) * pageSize; + let products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .where('\"esvlistaprodutos\".urlsecao = :url', { url }) + .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .limit(pageSize) + .offset(offSet) + .orderBy("\"esvlistaprodutos\".DESCRICAO", "ASC") + .getMany(); + products = this.createListImages(products); + return products; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async searchByCategory(store: string, pageSize: number, pageNumber: number, urlDepartment: string, urlSection: string, urlCategory: string): Promise { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + const url = urlDepartment + '/' + urlSection + '/' + urlCategory; + try { + if (pageSize == 0) + pageSize = 50; + if (pageNumber == 0) + pageNumber = 1; + const offSet = (pageNumber - 1) * pageSize; + let products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .where('\"esvlistaprodutos\".urlcategoria = :url', { url }) + .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .limit(pageSize) + .offset(offSet) + .orderBy("\"esvlistaprodutos\".DESCRICAO", "ASC") + .getMany(); + products = this.createListImages(products); + return products; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async searchProduct(store: string, search: string, pageSize: number, pageNumber: number) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + if (pageSize == 0) + pageSize = 50; + if (pageNumber == 0) + pageNumber = 1; + const offSet = (pageNumber - 1) * pageSize; + + const numbers = search.replace(/[^0-9]/g, ''); + let products: SalesProduct[] = []; + + if (numbers === search) { + products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") + .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .where("esvlistaprodutos.idProduct = :id", { id: numbers }) + .andWhere("\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99'", { codfilial: store }) + .limit(pageSize) + .offset(offSet) + .orderBy("REPLACE(\"esvlistaprodutos\".DESCRICAO,'#', '')", "ASC") + .getRawMany(); + + if (products.length === 0) { + console.log('pesquisando por ean'); + products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") + .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .where("esvlistaprodutos.CODAUXILIAR = :id", { id: numbers }) + .andWhere("(\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99')", { codfilial: store }) + .limit(pageSize) + .offset(offSet) + .orderBy("REPLACE(\"esvlistaprodutos\".DESCRICAO,'#', '')", "ASC") + .getRawMany(); + } + + } else { + const description = '%' + search.toUpperCase() + '%'; + console.log('consultando por codigo de fabrica'); + products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") + .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .where("UPPER(esvlistaprodutos.CODFAB) like REPLACE(:description, '@', '%')", { description }) + .andWhere("\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99'", { codfilial: store }) + .limit(pageSize) + .offset(offSet) + .orderBy("REPLACE(\"esvlistaprodutos\".DESCRICAO,'#', '')", "ASC") + .getRawMany(); + + if (products.length == 0) { + products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") + .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .where("UPPER(esvlistaprodutos.DESCRICAO) like REPLACE(:description, '@', '%')", { description }) + .andWhere("\"esvlistaprodutos\".codfilial = :codfilial OR :codfilial = '99'", { codfilial: store }) + .limit(pageSize) + .offset(offSet) + .orderBy("REPLACE(\"esvlistaprodutos\".DESCRICAO,'#', '')", "ASC") + .getRawMany(); + } + + } + + products = this.createListImages(products); + console.log(products.length); + return products; + + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async GetProduct(store: string, id: number) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + let products: SalesProduct[] = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .select("\"esvlistaprodutos\".CODPROD", "idProduct") + .addSelect("\"esvlistaprodutos\".SEQ", "seq") + .addSelect("\"esvlistaprodutos\".DESCRICAO", "smallDescription") + .addSelect("\"esvlistaprodutos\".NOMEECOMMERCE", "title") + .addSelect("\"esvlistaprodutos\".CODFAB", "idProvider") + .addSelect("\"esvlistaprodutos\".CODAUXILIAR", "ean") + .addSelect("\"esvlistaprodutos\".TIPOPRODUTO", "productType") + .addSelect("\"esvlistaprodutos\".DADOSTECNICOS", "technicalData") + .addSelect("\"esvlistaprodutos\".INFORMACOESTECNICAS", "description") + .addSelect("\"esvlistaprodutos\".URLIMAGEM", "urlImage") + .addSelect("\"esvlistaprodutos\".NOMEMARCA", "brand") + .addSelect("\"esvlistaprodutos\".NOMEDEPARTAMENTO", "department") + .addSelect("\"esvlistaprodutos\".NOMESECAO", "section") + .addSelect("\"esvlistaprodutos\".NOMECATEGORIA", "category") + .addSelect("\"esvlistaprodutos\".NOMEFORNECEDOR", "supplier") + .addSelect("\"esvlistaprodutos\".CODIGOFILIAL", "store") + .addSelect("\"esvlistaprodutos\".CLASSEVENDA", "saleAbc") + .addSelect("\"esvlistaprodutos\".CLASSEESTOQUE", "stockAbc") + .addSelect("\"esvlistaprodutos\".FORALINHA", "outLine") + .addSelect("\"esvlistaprodutos\".PRECOVENDA", "listPrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePrice") + .addSelect("\"esvlistaprodutos\".PRECOPROMOCIONAL", "salePromotion") + .addSelect("\"esvlistaprodutos\".PERCENTUALDESCONTO", "offPercent") + .addSelect("\"esvlistaprodutos\".QTESTOQUE_DISPONIVEL", "stock") + .addSelect("\"esvlistaprodutos\".QTCAIXAS", "boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_LOJA", "store_stock") + .addSelect("\"esvlistaprodutos\".ESTOQUE_DISP_CAIXA_LOJA", "store_boxStock") + .addSelect("\"esvlistaprodutos\".MULTIPLO", "mutiple") + .addSelect("\"esvlistaprodutos\".UNIDADE", "unity") + .addSelect("\"esvlistaprodutos\".URLDEPARTAMENTO", "urlDepartment") + .addSelect("\"esvlistaprodutos\".URLSECAO", "urlSection") + .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") + .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") + .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .where("esvlistaprodutos.idProduct = :id", { id: id }) + .andWhere("\"esvlistaprodutos\".codfilial = :codfilial", { codfilial: store }) + .orderBy("REPLACE(\"esvlistaprodutos\".DESCRICAO,'#', '')", "ASC") + .getRawMany(); + products = this.createListImages(products); + if (products.length == 0) { + throw new HttpException('Produto não encontrado!', HttpStatus.NOT_FOUND); + } + const product = products[0]; + return product; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async GetProductsBuyTogether(store: string, id: number) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT esvlistaprodutos.CODPROD as "idProduct" + ,esvlistaprodutos.SEQ as "seq" + ,esvlistaprodutos.DESCRICAO as "smallDescription" + ,esvlistaprodutos.NOMEECOMMERCE as "title" + ,esvlistaprodutos.CODFAB as "idProvider" + ,esvlistaprodutos.CODAUXILIAR as "ean" + ,esvlistaprodutos.TIPOPRODUTO as "productType" + ,esvlistaprodutos.DADOSTECNICOS as "technicalData" + ,esvlistaprodutos.INFORMACOESTECNICAS as "description" + ,esvlistaprodutos.URLIMAGEM as "urlImage" + ,esvlistaprodutos.NOMEMARCA as "brand" + ,esvlistaprodutos.NOMEDEPARTAMENTO as "department" + ,esvlistaprodutos.NOMESECAO as "section" + ,esvlistaprodutos.NOMECATEGORIA as "category" + ,esvlistaprodutos.NOMEFORNECEDOR as "supplier" + ,esvlistaprodutos.CODIGOFILIAL as "store" + ,esvlistaprodutos.CLASSEVENDA as "saleAbc" + ,esvlistaprodutos.CLASSEESTOQUE as "stockAbc" + ,esvlistaprodutos.FORALINHA as "outLine" + ,esvlistaprodutos.PRECOVENDA as "listPrice" + ,esvlistaprodutos.PRECOPROMOCIONAL as "salePrice" + ,esvlistaprodutos.PRECOPROMOCIONAL as "salePromotion" + ,esvlistaprodutos.PERCENTUALDESCONTO as"offPercent" + ,esvlistaprodutos.QTESTOQUE_DISPONIVEL as "stock" + ,esvlistaprodutos.QTCAIXAS as "boxStock" + ,esvlistaprodutos.ESTOQUE_DISP_LOJA as "store_stock" + ,esvlistaprodutos.ESTOQUE_DISP_CAIXA_LOJA as "store_boxStock" + ,esvlistaprodutos.ESTOQUE_DISP_LOJA as "store_stock" + ,esvlistaprodutos.ESTOQUE_DISP_CAIXA_LOJA as "store_boxStock" + ,esvlistaprodutos.MULTIPLO as "mutiple" + ,esvlistaprodutos.UNIDADE as "unity" + ,esvlistaprodutos.URLDEPARTAMENTO as "urlDepartment" + ,esvlistaprodutos.URLSECAO as "urlSection" + ,esvlistaprodutos.PRODUTO_COM_REDUCAO_PRECO as "downPrice" + ,esvlistaprodutos.PRODUTO_EM_CAMPANHA as "compaing" + ,esvlistaprodutos.BASETINTOMETRICO as "base" + ,esvlistaprodutos.QUANTIDADE_ESTOQUE_GERAL as "full_stock" + FROM ESVLISTAPRODUTOS, ESTCOMPREJUNTO + WHERE ESVLISTAPRODUTOS.CODPROD = ESTCOMPREJUNTO.CODPROD + AND ESTCOMPREJUNTO.CODPRODVENDA = ${id} + AND ESVLISTAPRODUTOS.CODFILIAL = '${store}' + ORDER BY REPLACE(esvlistaprodutos.DESCRICAO,'#', '')`; + let products: SalesProduct[] = await queryRunner.query(sql); + + products = this.createListImages(products); + return products; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async GetStocks(storeId: string, id: number) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + + const sql = `SELECT ESVESTOQUEVENDA.CODFILIAL as "store" + ,ESVESTOQUEVENDA.CODPROD as "idProduct" + ,ESVESTOQUEVENDA.PERTENCE as "work" + ,ESVESTOQUEVENDA.QUANTIDADEESTOQUEDISPONIVEL as "quantity" + ,ESVESTOQUEVENDA.QUANTIDADEBLOQUEADA as "blocked" + ,ESVESTOQUEVENDA.QUANTIDADEAVARIA as "breakdown" + ,ESVESTOQUEVENDA.QUANTIDADETRANSITO as "transfer" + ,(CASE WHEN (SELECT COUNT(1) FROM PCFILIALRETIRA + WHERE PCFILIALRETIRA.CODFILIALVENDA = '${storeId}' + AND PCFILIALRETIRA.CODFILIALRETIRA = ESVESTOQUEVENDA.CODFILIAL ) > 0 THEN 1 + ELSE 0 END ) as "allowDelivery" + FROM ESVESTOQUEVENDA + WHERE ESVESTOQUEVENDA.CODPROD = ${id} + ORDER BY TO_NUMBER(ESVESTOQUEVENDA.CODFILIAL) `; + + const stock = await queryRunner.query(sql); + + // return await queryRunner.manager + // .getRepository(Stock) + // .createQueryBuilder('esvestoquevenda') + // .where("esvestoquevenda.idProduct = :id", { id: id }) + // .getMany(); + return stock; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async GetSaleInstallment(store: string, id: number, quantity: number) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const installments = await queryRunner.manager + .getRepository(Esvparcelamentovenda) + .createQueryBuilder('esvparcelamentovenda') + .select('\"esvparcelamentovenda\".CODFILIAL', 'store') + .addSelect('\"esvparcelamentovenda\".CODPROD', 'productId') + .addSelect('\"esvparcelamentovenda\".NUMREGIAO', 'priceTable') + .addSelect('\"esvparcelamentovenda\".PARCELAS', 'installment') + .addSelect('\"esvparcelamentovenda\".PRECOVENDA', 'salePrice') + .addSelect('\"esvparcelamentovenda\".VALORPARCELA', 'installmentValue') + .where("esvparcelamentovenda.store = :store", { store: store }) + .andWhere("esvparcelamentovenda.productId = :id", { id: id }) + .getRawMany(); + installments.forEach(i => { + i.salePrice = i.salePrice * quantity; + i.installmentValue = i.installmentValue * quantity; + }) + + return installments; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + + async GetDelivery(cpf: string): Promise { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const customer = await queryRunner.manager + .getRepository(Pcclient) + .createQueryBuilder('pcclient') + .where("regexp_replace(cgcent, '[^0-9]', '') = regexp_replace(:cpf, '[^0-9]', '') AND dtexclusao is null", { cpf }) + .getOne(); + if (customer == null) { + throw new HttpException('CPF não localizado em nosso cadastro de clientes.', HttpStatus.NOT_FOUND); + } + const orders = await queryRunner.manager + .getRepository(Esvsituacaopedido) + .createQueryBuilder('esvsituacaopedido') + .where("\"esvsituacaopedido\".codcli = :codcli", { codcli: customer.codcli }) + .getMany(); + return orders; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async GetAnaliseVenda(id: number): Promise { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const result = await queryRunner.manager + .getRepository(Esvanalisevendarca) + .createQueryBuilder('esvanalisevendarca') + .where("\"esvanalisevendarca\".codusur = :codusur", { codusur: id }) + .getOne(); + return result; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async GetHistoricoVendas(id: number): Promise { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT PCDIASUTEIS.DATA as "saleDate", + CASE WHEN TO_CHAR(PCDIASUTEIS.DATA, 'D') = 1 THEN 'DOMINGO' + WHEN TO_CHAR(PCDIASUTEIS.DATA, 'D') = 2 THEN 'SEGUNDA' + WHEN TO_CHAR(PCDIASUTEIS.DATA, 'D') = 3 THEN 'TERÇA' + WHEN TO_CHAR(PCDIASUTEIS.DATA, 'D') = 4 THEN 'QUARTA' + WHEN TO_CHAR(PCDIASUTEIS.DATA, 'D') = 5 THEN 'QUINTA' + WHEN TO_CHAR(PCDIASUTEIS.DATA, 'D') = 6 THEN 'SEXTA' + WHEN TO_CHAR(PCDIASUTEIS.DATA, 'D') = 7 THEN 'SABADO' END as "dayWeek", + NVL(VENDAS.CODUSUR, ${id}) as "sellerId", + NVL(VENDAS.VLVENDA,0) as "saleValue", + NVL(DEVOLUCAO.VLDEVOLUCAO,0) as "devolucao", + ( NVL(VENDAS.VLVENDA,0) - NVL(DEVOLUCAO.VLDEVOLUCAO,0) ) as "amount", + ESVCOMISSAOVENDAS.VLCOMISSAO as "comissionValue" + FROM PCDIASUTEIS, ESVCOMISSAOVENDAS, + ( SELECT VENDAS.DTSAIDA + ,VENDAS.CODUSUR + ,SUM(VENDAS.VLVENDA) VLVENDA + FROM VIEW_VENDAS_RESUMO_FATURAMENTO VENDAS + WHERE VENDAS.CONDVENDA IN (1,7) + AND VENDAS.DTCANCEL IS NULL + AND VENDAS.DTSAIDA >= TRUNC(SYSDATE) - 90 + AND VENDAS.CODUSUR = 15 + GROUP BY VENDAS.DTSAIDA, VENDAS.CODUSUR ) VENDAS, + ( SELECT DEVOLUCAO.DTENT + ,DEVOLUCAO.CODUSUR + ,SUM(DEVOLUCAO.VLDEVOLUCAO) VLDEVOLUCAO + FROM VIEW_DEVOL_RESUMO_FATURAMENTO DEVOLUCAO + WHERE DEVOLUCAO.DTCANCEL IS NULL + AND DEVOLUCAO.DTENT >= TRUNC(SYSDATE) - 90 + AND DEVOLUCAO.CODUSUR = 15 + GROUP BY DEVOLUCAO.DTENT, DEVOLUCAO.CODUSUR ) DEVOLUCAO + WHERE PCDIASUTEIS.DATA = VENDAS.DTSAIDA (+) + AND PCDIASUTEIS.DATA = DEVOLUCAO.DTENT (+) + AND ESVCOMISSAOVENDAS.CODUSUR = ${id} + AND PCDIASUTEIS.DATA BETWEEN LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),-1)) + 1 AND TRUNC(SYSDATE) + AND PCDIASUTEIS.CODFILIAL = 6 + ORDER BY PCDIASUTEIS.DATA`; + const result = await queryRunner.query(sql); + return result; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + createListImages(products: SalesProduct[]): SalesProduct[] { + products.forEach(product => { + product.images = []; + if (product.urlImage != null) { + let urlImage = product.urlImage; + if (urlImage.indexOf(";") == -1) { + urlImage += ";"; + } + const images = product.urlImage.split(";"); + product.images = images.map(i => i.trim()); + } + }); + return products; + } + + + async createNotification(data: Notify) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + const notify: Estavisoestoque = new Estavisoestoque(); + notify.id = null; + notify.createDate = new Date(); + notify.codusur = data.idSeller; + notify.cpf = data.document; + notify.name = data.name; + notify.cellPhone = data.cellPhone; + notify.email = data.email; + notify.codprod = data.codprod; + notify.obs = data.notification; + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Estavisoestoque) + .values(notify) + .execute(); + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async createRuptura(data: Rupture) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + + let customerId = 0; + const customer = await queryRunner.manager + .getRepository(Pcclient) + .createQueryBuilder('pcclient') + .where("regexp_replace(cgcent, '[^0-9]', '') = regexp_replace(:cpf, '[^0-9]', '') AND dtexclusao is null", { cpf: data.document }) + .getOne(); + if (customer) { + customerId = customer.codcli; + } + + await queryRunner.startTransaction(); + try { + const ruptura: Estruptura = new Estruptura(); + ruptura.id = null; + ruptura.date = new Date(); + ruptura.store = data.store; + ruptura.customerId = customerId; + ruptura.sellerId = Number.parseFloat(data.seller); + ruptura.document = data.document; + ruptura.name = data.name; + ruptura.cellPhone = data.cellPhone; + ruptura.email = data.email; + ruptura.productId = data.idProduct; + ruptura.quantity = data.quantity; + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Estruptura) + .values(ruptura) + .execute(); + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + + async getDepartments() { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const departments = await queryRunner.manager + .getRepository(Esvdepartamento) + .createQueryBuilder('Esvdepartamento') + .innerJoinAndSelect('Esvdepartamento.secoes', 'secoes') + .innerJoinAndSelect('secoes.categorias', 'categorias') + .where('\"Esvdepartamento\".tituloecommerce is not null') + .orderBy('\"Esvdepartamento\".tituloecommerce, \"secoes\".tituloecommerce, \"categorias\".tituloecommerce') + .getMany(); + return departments; + } catch (err) { + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + + } + + async getCategory() { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const departments = await queryRunner.manager + .getRepository(Esvsecao) + .createQueryBuilder('esvsecao') + .innerJoinAndSelect('esvsecao.departamento', 'departamento') + .innerJoinAndSelect('esvsecao.categorias', 'categorias') + .getMany(); + return departments; + } catch (err) { + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + + } + + async searchProduct2(store: string, pageSize: number, pageNumber: number, filter: FilterProduct) { + console.log('searchProduct2'); + const sql = 'SELECT esvlistaprodutos.CODPROD "idProduct" ' + + ` ,esvlistaprodutos.SEQ "seq" ` + + ' ,esvlistaprodutos.DESCRICAO "smallDescription" ' + + ' ,esvlistaprodutos.NOMEECOMMERCE "title" ' + + ' ,esvlistaprodutos.CODFAB "idProvider" ' + + ' ,esvlistaprodutos.CODAUXILIAR "ean" ' + + ' ,esvlistaprodutos.TIPOPRODUTO "productType" ' + + ' ,esvlistaprodutos.DADOSTECNICOS "technicalData" ' + + ' ,esvlistaprodutos.INFORMACOESTECNICAS "description" ' + + ' ,esvlistaprodutos.URLIMAGEM "urlImage" ' + + ' ,esvlistaprodutos.NOMEMARCA "brand" ' + + ' ,esvlistaprodutos.NOMEDEPARTAMENTO "department" ' + + ' ,esvlistaprodutos.NOMESECAO "section" ' + + ' ,esvlistaprodutos.NOMECATEGORIA "category" ' + + ' ,esvlistaprodutos.NOMEFORNECEDOR "supplier" ' + + ' ,esvlistaprodutos.CODIGOFILIAL "store" ' + + ' ,esvlistaprodutos.CLASSEVENDA "saleAbc" ' + + ' ,esvlistaprodutos.CLASSEESTOQUE "stockAbc" ' + + ' ,esvlistaprodutos.FORALINHA "outLine" ' + + ' ,esvlistaprodutos.PRECOVENDA "listPrice" ' + + ' ,esvlistaprodutos.PRECOPROMOCIONAL "salePrice" ' + + ' ,esvlistaprodutos.PRECOPROMOCIONAL "salePromotion" ' + + ' ,esvlistaprodutos.PRECOPROMOCIONAL_AVISTA "salePromotion_cash" ' + + ' ,esvlistaprodutos.PERCENTUALDESCONTO "offPercent" ' + + ' ,esvlistaprodutos.QTESTOQUE_DISPONIVEL "stock" ' + + ' ,esvlistaprodutos.QTCAIXAS "boxStock" ' + + ' ,esvlistaprodutos.ESTOQUE_DISP_LOJA "store_stock" ' + + ' ,esvlistaprodutos.ESTOQUE_DISP_CAIXA_LOJA "store_boxStock" ' + + ' ,esvlistaprodutos.MULTIPLO "mutiple" ' + + ' ,esvlistaprodutos.UNIDADE "unity" ' + + ' ,esvlistaprodutos.URLDEPARTAMENTO "urlDepartment" ' + + ' ,esvlistaprodutos.URLSECAO "urlSection" ' + + ' ,esvlistaprodutos.PRODUTO_COM_REDUCAO_PRECO "downPrice" ' + + ' ,esvlistaprodutos.PRODUTO_EM_CAMPANHA "compaing" ' + + ' ,esvlistaprodutos.BASETINTOMETRICO "base" ' + + ' ,esvlistaprodutos.LETRABASETINTOMETRICO "letter" ' + + ' ,esvlistaprodutos.LINHATINTOMETRICO "line" ' + + ' ,esvlistaprodutos.LITRAGEM "can" ' + + ' ,esvlistaprodutos.QUANTIDADE_ESTOQUE_GERAL "full_stock" ' + + ' FROM esvlistaprodutos ' + + ' WHERE 1 = 1'; + let where = ""; + if (filter.text != null) { + where += ` AND ( ESF_REMOVE_ACENTUACAO(UPPER(esvlistaprodutos.descricao)) LIKE ` + + ` ESF_REMOVE_ACENTUACAO(REPLACE('${filter.text}', '@', '%'))||'%' ` + + ` OR ESF_REMOVE_ACENTUACAO(UPPER(esvlistaprodutos.nomeecommerce)) LIKE ` + + ` ESF_REMOVE_ACENTUACAO(REPLACE('${filter.text}', '@', '%'))||'%' ` + + ` OR esvlistaprodutos.codprod = REGEXP_REPLACE('${filter.text}', '[^0-9]', '') ` + + ` OR esvlistaprodutos.codauxiliar = REGEXP_REPLACE('${filter.text}', '[^0-9]', '') ` + + ` OR esvlistaprodutos.nomemarca = REPLACE('${filter.text}', '@', '%') ` + + ` OR esvlistaprodutos.codfab LIKE '${filter.text}%' )`; + } + if (filter.urlCategory != null) { + where += ` AND esvlistaprodutos.urlcategoria like '${filter.urlCategory}%'`; + } + where += ` AND (esvlistaprodutos.codfilial = '${store}' OR '${store}' = '99') `; + where += ` AND (esvlistaprodutos.produto_com_reducao_preco = '${(filter.markdown ? 'S' : 'N')}' OR '${(filter.markdown ? 'S' : 'N')}' = 'N') `; + where += ` AND (esvlistaprodutos.produto_em_campanha = '${(filter.offers ? 'D' : 'N')}' OR '${(filter.offers ? 'S' : 'N')}' = 'N') `; + where += ` AND (esvlistaprodutos.produto_em_campanha = '${(filter.oportunity ? 'O' : 'N')}' OR '${(filter.oportunity ? 'O' : 'N')}' = 'N') `; + where += ` AND (esvlistaprodutos.produto_em_promocao = '${(filter.promotion ? 'S' : 'N')}' OR '${(filter.promotion ? 'S' : 'N')}' = 'N') `; + + if (filter.onlyWithStock) { + if (filter.storeStock == '' || filter.storeStock == null) { + where += ` AND EXISTS( SELECT P.CODPROD FROM ESVLISTAPRODUTOS P ` + + ` WHERE P.CODPROD = ESVLISTAPRODUTOS.CODPROD ` + + ` AND P.QTESTOQUE_DISPONIVEL > 0 ) `; + } else { + where += ` AND EXISTS( SELECT P.CODPROD FROM ESVLISTAPRODUTOS P ` + + ` WHERE P.CODPROD = ESVLISTAPRODUTOS.CODPROD AND P.CODFILIAL = '${filter.storeStock}' ` + + ` AND P.ESTOQUE_DISP_LOJA > 0 ) `; + } + } + + if (filter.percentOffMin > 0) { + where += ` AND esvlistaprodutos.PERCENTUALDESCONTO >= ${filter.percentOffMin}` + } + + if (filter.percentOffMax > 0) { + where += ` AND esvlistaprodutos.PERCENTUALDESCONTO <= ${filter.percentOffMax}` + } + + let xbrands = ''; + if (filter && filter.brands && filter.brands.length > 0) { + const brands = filter.brands; + brands.forEach(b => { + if (xbrands.length > 0) { + xbrands += ', ' + '\'' + b + '\'' + } + else { + xbrands = '\'' + b + '\''; + } + }); + where += ` AND esvlistaprodutos.nomemarca in ( ${xbrands} )`; + } + + + const orderBy = `ORDER BY esvlistaprodutos.${(filter.orderBy == null) ? 'DESCRICAO' : filter.orderBy}`; + + const skipReg = ((pageNumber - 1) * pageSize); + const pagination = ` OFFSET ${skipReg} ROWS FETCH NEXT ${pageSize} ROWS ONLY`; + + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + let products = await queryRunner.manager.query(sql + where + orderBy + pagination) as SalesProduct[]; + products = this.createListImages(products); + console.log("Total de produtos: " + products.length); + return products; + } catch (err) { + console.log(err); + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + + } + + + async calculateDeliveryTax(cartId: string, ibgeCode: string) { + let cityId = await this.customerService.findCity(ibgeCode); + + if (cityId == 0) { + cityId = Number.parseInt(ibgeCode); + // throw new HttpException('Cidade não localiza para cálculo da taxa de entrega', HttpStatus.BAD_REQUEST); + } + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = 'SELECT ESVCALCULOFRETE.CODTABELAFRETE as "id" ' + + ' ,ESVCALCULOFRETE.CODFILIAL as "store" ' + + ' ,ESVCALCULOFRETE.CODCIDADE as "cityId" ' + + ' ,PCCIDADE.NOMECIDADE as "cityName" ' + + ' ,ESVCALCULOFRETE.CODFORNEC as "carrierId" ' + + ' ,PCFORNEC.FORNECEDOR as "carrierName" ' + + ' ,ESVCALCULOFRETE.VLCOMPRAMIN as "minSale" ' + + ' ,ESVCALCULOFRETE.VLFRETE as "deliveryValue" ' + + ' ,ESVCALCULOFRETE.PRAZOENTREGA as "deliveryTime" ' + + ' FROM ESVCALCULOFRETE, PCFORNEC, PCCIDADE ' + + ' WHERE ESVCALCULOFRETE.CODFORNEC = PCFORNEC.CODFORNEC ' + + ' AND ESVCALCULOFRETE.CODCIDADE = PCCIDADE.CODCIDADE ' + + ' AND ESVCALCULOFRETE.CODCIDADE = :1 ' + + ' AND ESVCALCULOFRETE.IDCART = :2 ' + + ' ORDER BY VLFRETE'; + + const deliveryTaxTable = await queryRunner.manager + .query(sql, [cityId, cartId]); + return deliveryTaxTable; + } catch (err) { + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + + + } + + async updatePriorityDelivery(cartId: string, priorityDelivery: string) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + const sql = `UPDATE ESTPREVENDAC SET TIPOPRIORIDADEENTREGA = '${priorityDelivery}' + WHERE ID = '${cartId}'`; + + await queryRunner.manager + .query(sql); + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + + + } + + async calculateDeliveryTaxOrder(dataDeliveryTax: any) { + let cityId = await this.customerService.findCity(dataDeliveryTax.ibgeCode); + await this.updatePriorityDelivery(dataDeliveryTax.cartId, dataDeliveryTax.priorityDelivery); + + if (cityId == 0) { + cityId = Number.parseInt(dataDeliveryTax.ibgeCode); + // throw new HttpException('Cidade não localiza para cálculo da taxa de entrega', HttpStatus.BAD_REQUEST); + } + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = 'SELECT ESVCALCULOFRETE.CODTABELAFRETE as "id" ' + + ' ,ESVCALCULOFRETE.CODFILIAL as "store" ' + + ' ,ESVCALCULOFRETE.CODCIDADE as "cityId" ' + + ' ,PCCIDADE.NOMECIDADE as "cityName" ' + + ' ,ESVCALCULOFRETE.CODFORNEC as "carrierId" ' + + ' ,PCFORNEC.FORNECEDOR as "carrierName" ' + + ' ,ESVCALCULOFRETE.VLCOMPRAMIN as "minSale" ' + + ' ,ESVCALCULOFRETE.VLFRETE as "deliveryValue" ' + + ' ,ESVCALCULOFRETE.PRAZOENTREGA as "deliveryTime" ' + + ' FROM ESVCALCULOFRETE, PCFORNEC, PCCIDADE ' + + ' WHERE ESVCALCULOFRETE.CODFORNEC = PCFORNEC.CODFORNEC ' + + ' AND ESVCALCULOFRETE.CODCIDADE = PCCIDADE.CODCIDADE ' + + ' AND ESVCALCULOFRETE.CODCIDADE = :1 ' + + ' AND ESVCALCULOFRETE.IDCART = :2 ' + + ' ORDER BY VLFRETE'; + + let deliveryTaxTable = await queryRunner.manager + .query(sql, [dataDeliveryTax.cityId, dataDeliveryTax.cartId]); + if (deliveryTaxTable == null || deliveryTaxTable.length == 0) { + deliveryTaxTable = await queryRunner.manager + .query(sql, [cityId, dataDeliveryTax.cartId]); + } + return deliveryTaxTable; + } catch (err) { + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + + } + + async getPlacesInterior() { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT DISTINCT ESTPREVENTREGAPRACA.CODPRACA, PCPRACA.PRACA + FROM ESTPREVENTREGAPRACA, PCPRACA + WHERE ESTPREVENTREGAPRACA.CODPRACA = PCPRACA.CODPRACA `; + + const places = await queryRunner.query(sql); + return places; + } catch (err) { + throw err; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + + + } + + async getDeliveryTime(saleDate: string, invoiceStoreId: string, placeId: string, cartId: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT ESF_CALCULAR_PRAZO_ENTREGA_PROGRAMADA(TO_DATE('${saleDate}', 'DD-MM-YYYY'), ${invoiceStoreId}, ${placeId}, '${cartId}') AS "days" FROM DUAL`; + // const sql = `SELECT ESF_CALCULAR_PRAZO_ENTREGA(TO_DATE('${saleDate}', 'DD-MM-YYYY')) AS "days" FROM DUAL`; + const timeDays = await queryRunner.query(sql); + + const sqlRetiraPosterior = `SELECT ( PROXIMO_DIA_UTIL(TO_DATE('${saleDate}', 'DD-MM-YYYY'), '4') - TRUNC(SYSDATE) ) AS "days" FROM DUAL`; + const timeDaysRetiraPosterior = await queryRunner.query(sqlRetiraPosterior); + + return { deliveryDays: timeDays[0].days, retiraPosteriorDays: timeDaysRetiraPosterior[0].days }; + + } catch (err) { + console.log(err); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async allowShippingDelivery(placeId: string, cartId: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT ESF_PERMITE_ENTREGA_DELIVERY('${cartId}', ${placeId}) AS "allow" FROM DUAL`; + const deliveryAllow = await queryRunner.query(sql); + + return { allowShippingDelivery: deliveryAllow[0].allow }; + + } catch (err) { + console.log(err); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + +} diff --git a/src/sales/shopping/shopping.controller.ts b/src/sales/shopping/shopping.controller.ts new file mode 100644 index 0000000..926625a --- /dev/null +++ b/src/sales/shopping/shopping.controller.ts @@ -0,0 +1,168 @@ +import { Body, Controller, Delete, Get, HttpException, HttpStatus, Param, Post, Put, Req } from '@nestjs/common'; +import { ShoppingItem } from 'src/domain/models/shopping-item.model'; +import { ShoppingService } from './shopping.service'; +import { ResultModel } from '../../domain/models/result.model'; +import { OrderDiscount } from 'src/domain/models/order-discount.model'; +import { OrderTaxDelivery } from 'src/domain/models/order-taxdelivery.model'; +import { LogOrder } from 'src/domain/models/log-order.model'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Shopping') +@Controller('api/v1/shopping') +export class ShoppingController { + + constructor(private shoppingService: ShoppingService){} + + @Get('cart/:id') + async getCart(@Param('id') id: string){ + try { + const cart = await this.shoppingService.GetItensCart(id); + if (cart == null || cart.length == 0) + throw new HttpException("Carrinho de compras não encontrado", HttpStatus.NOT_FOUND); + return cart; + } catch (error) { + const status = error.status == 404 ? error.status : HttpStatus.INTERNAL_SERVER_ERROR; + throw new HttpException(error.message, status); + } + } + + @Get(':id') + async getPreVenda(@Param('id') id: string ){ + try { + const cart = await this.shoppingService.getShopping(id); + if (cart == null ) + throw new HttpException("Carrinho de compras não encontrado", HttpStatus.NOT_FOUND); + return cart; + } catch (error) { + const status = error.status == 404 ? error.status : HttpStatus.INTERNAL_SERVER_ERROR; + throw new HttpException(error.message, status); + } + } + + @Get('cart/:idcart/item/:idProduct/tipoentrega/:deliveryType') + async getItemCart(@Req() request, @Param('idCart') idCart: string, + @Param('idProduct') idProduct: string, @Param('deliveryType') deliveryType: string){ + let store = '99'; + try { + if (request.headers['x-store']) + store = request.headers['x-store']; + const cart = await this.shoppingService.getItemCart(idCart, idProduct, store, deliveryType); + if (cart == null ) + throw new HttpException("Item não foi encontrado no carrinho de compras.", HttpStatus.NOT_FOUND); + return cart; + } catch (error) { + const status = error.status == 404 ? error.status : HttpStatus.INTERNAL_SERVER_ERROR; + throw new HttpException(error.message, status); + } + } + + @Get('cart/lot/:productId/:customerId') + async getLotProduct( @Req() request, @Param('productId') productId: number, + @Param('customerId') customerId: number ) { + let store = '99'; + try { + if (request.headers['x-store']) + store = request.headers['x-store']; + const lotsProduct = await this.shoppingService.getLotProduct(productId, customerId); + return lotsProduct; + } catch (error) { + const status = error.status == 404 ? error.status : HttpStatus.INTERNAL_SERVER_ERROR; + throw new HttpException(error.message, status); + } + } + + + @Post('item') + async createItemShopping(@Body() item: ShoppingItem){ + console.log('createItemShopping') + try { + return await this.shoppingService.createItemCart(item); + } catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Post('log') + async logOrderShopping(@Body() logOrder: LogOrder){ + try { + console.log('logOrderShopping') + return await this.shoppingService.createLogShopping(logOrder); + } catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Put('item') + async updateQuantityItem(@Body() item: ShoppingItem){ + console.log(item); + try { + if (item.id == null){ + throw new HttpException('Item sem Id informado, faça a inclusão do item no carrinho.', HttpStatus.BAD_REQUEST); + } + const itemCreate = await this.shoppingService.updateItem(item); + return itemCreate; + } catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Put('item/discount') + async updatePriceItem(@Body() item: ShoppingItem){ + console.log(item); + try { + if (item.id == null){ + throw new HttpException('Item sem Id informado, faça a inclusão do item no carrinho.', HttpStatus.BAD_REQUEST); + } + const itemCreate = await this.shoppingService.updatePrice(item); + return itemCreate; + } catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Put('order/discount') + async applyDiscountOrder(@Body() order: OrderDiscount) { + try { + const itensOrder = await this.shoppingService.applyDiscountOrder(order); + return itensOrder; + } catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Put('order/tax') + async applyTaxDeOrder(@Body() order: OrderTaxDelivery) { + try { + const orderTax = await this.shoppingService.applyTaxDelivery(order); + return orderTax; + } catch (error) { + console.log(error); + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Delete('item/delete/:id') + async deleteItem(@Param('id') id: string){ + try { + await this.shoppingService.deleteItem(id); + return new ResultModel(true, 'Item excluído com sucesso!', id, null,); + } catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + + @Put('update/payment/:id') + async updateItemsShopping(@Param('id') id: string, @Body() payment: any) { + try { + console.log('Atualizando preços (controller).') + const idPaymentPlan = payment.idPaymentPlan; + await this.shoppingService.updatePriceShopping(id, idPaymentPlan); + return new ResultModel(true, 'Preços atualizados com sucesso!', {}, null); + } catch (err) { + throw new HttpException(new ResultModel(false, err.errors.message, {}, err), + HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + + } diff --git a/src/sales/shopping/shopping.module.ts b/src/sales/shopping/shopping.module.ts new file mode 100644 index 0000000..58a8f58 --- /dev/null +++ b/src/sales/shopping/shopping.module.ts @@ -0,0 +1,17 @@ +import { ShoppingService } from './shopping.service'; +import { ShoppingController } from './shopping.controller'; +import { Module } from '@nestjs/common'; +import { UserService } from 'src/Auth/services/user.service'; + +@Module({ + imports: [ + UserService, + ], + controllers: [ + ShoppingController,], + providers: [ + ShoppingService, + UserService + ], +}) +export class ShoppingModule { } diff --git a/src/sales/shopping/shopping.service.ts b/src/sales/shopping/shopping.service.ts new file mode 100644 index 0000000..b782ba3 --- /dev/null +++ b/src/sales/shopping/shopping.service.ts @@ -0,0 +1,717 @@ +import { Injectable, HttpException, HttpStatus } from '@nestjs/common'; +import { ShoppingItens } from 'src/domain/entity/tables/estprevendai.entity'; +import { OrderDiscount } from 'src/domain/models/order-discount.model'; +import { ShoppingItem } from 'src/domain/models/shopping-item.model'; +import { Connection, QueryRunner } from 'typeorm'; +import { UserService } from 'src/Auth/services/user.service'; +import { Shopping } from 'src/domain/entity/tables/estprevendac.entity'; +import { OrderTaxDelivery } from 'src/domain/models/order-taxdelivery.model'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { LogOrder } from 'src/domain/models/log-order.model'; + +@Injectable() +export class ShoppingService { + + + constructor(private userService: UserService + ) { } + + async GetItensCart(idcart: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const product = await queryRunner.manager + .getRepository(ShoppingItens) + .createQueryBuilder('estprevendai') + .where("\"estprevendai\".idcart = :idcart", { idcart: idcart }) + .andWhere("\"estprevendai\".dtcancel is null") + .orderBy("\"estprevendai\".dtinclusao") + .getMany(); + return product; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + /* async createSale(cart: Cart){ + try + { + let sale = new Sale(); + sale.id = cart.idShopping; + sale.codcli = cart.idCustomer; + sale.codusur = cart.idSeller; + sale.codcob = cart.billingCode; + sale.codendcli = 0; + sale.codplpag = cart.idPayment; + sale.vlfrete = cart.valueShipping; + + await getConnection() + .createQueryBuilder() + .insert() + .into(Shopping) + .values(createShopping) + .execute(); + + return createShopping; + + } catch ( erro ) { + console.log(erro); + throw new HttpException("Erro ao criar item no carrinho de compras", HttpStatus.INTERNAL_SERVER_ERROR); + } + }*/ + + async getItemCart(idCart: string, idProduct: string, store: string, deliveryType: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const item = await queryRunner.manager + .getRepository(ShoppingItens) + .createQueryBuilder('estprevendai') + .where("\"estprevendai\".idcart = :idcart", { idcart: idCart }) + .andWhere("\"estprevendai\".codprod = :idProduct", { idProduct: idProduct }) + .andWhere("\"estprevendai\".tipoentrega = :tipoentrega", { tipoentrega: deliveryType }) + .andWhere("( \"estprevendai\".codfilialretira = :store OR :store = '99' )", { store: store }) + .andWhere("\"estprevendai\".dtcancel is null") + .getOne(); + console.log(item); + return item; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + } + + async getItemCartById(idCart: string, id: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const item = await queryRunner.manager + .getRepository(ShoppingItens) + .createQueryBuilder('estprevendai') + .where("\"estprevendai\".idcart = :idcart", { idcart: idCart }) + .andWhere("\"estprevendai\".id = :id", { id: id }) + .andWhere("\"estprevendai\".dtcancel is null") + .getOne(); + console.log(item); + return item; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + } + + async createItemCart(itemShopping: ShoppingItem) { + console.log(JSON.stringify(itemShopping)); + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + //const connection = getConnection(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + console.log('Incluindo item 01 - ' + Date.now().toString()); + await queryRunner.startTransaction(); + + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const uuid = require('uuid'); + const idItem = uuid.v4(); + let idCart = ""; + if (itemShopping.idCart == null || itemShopping.idCart == '') + idCart = uuid.v4(); + else + idCart = itemShopping.idCart; + console.log('Incluindo item 02 - ' + Date.now().toString()); + const cart = await queryRunner.manager + .getRepository(Shopping) + .createQueryBuilder('estprevendac') + .where("\"estprevendac\".id = :id", { id: idCart }) + .getOne(); + console.log('Incluindo item 03 - ' + Date.now().toString()); + if (cart == null) { + await this.createShopping(idCart, itemShopping.invoiceStore, itemShopping.seller, queryRunner); + } + console.log('Incluindo item 04 - ' + Date.now().toString()); + const item = await this.getItemCartById(itemShopping.idCart, itemShopping.id); + console.log('Incluindo item 05 - ' + Date.now().toString()); + if (item) { + itemShopping.id = item.id; + this.updateItem(itemShopping); + return await this.getItemCartById(itemShopping.idCart, itemShopping.id); + } + + console.log('Incluindo item 06 - ' + Date.now().toString()); + const recordItens = await queryRunner.query(`SELECT COUNT(1) as "recordNo" FROM ESTPREVENDAI WHERE IDCART = '${itemShopping.idCart}'`); + let numSeq = 1; + if (recordItens != null && recordItens.length > 0) { + numSeq = recordItens[0].recordNo + 1; + } + const sqlInsertitem = 'INSERT INTO ESTPREVENDAI ( ID, IDCART, NUMSEQ, CODPROD, QT, PVENDA, DTINCLUSAO, NOMEECOMMERCE, URLIMAGEM, TIPOPRODUTO, CODFILIALRETIRA, TIPOENTREGA, ' + + ' CODUSUR, PERCDESC, CODFUNCDESC, PTABELA, VLDESCONTO, PRECOPROMOCIONAL, MULTIPLO, DESCRICAOAUXILIAR, DESCRICAO, MARCA, ' + + ' PRECOPROMOCAO, CODAUXILIAR, VLCUSTOFIN, VLCUSTOREAL, VLCUSTOREP, PERCACRESCIMO, QTACRESCIMO, BASETINTOMETRICO, ' + + ' LINHATINTOMETRICO, CORTINTOMETRICO, LITRAGEM, LETRATINTOMETRICO, AMBIENTE, PRODUTOCOMPREJUNTO ) ' + + ' VALUES ( :ID, :IDCART, :NUMSEQ, :CODPROD, :QT, :PVENDA, SYSDATE, :NOMEECOMMERCE, :URLIMAGEM, :TIPOPRODUTO, :CODFILIALRETIRA, :TIPOENTREGA, ' + + ' :CODUSUR, :PERCDESC, :CODFUNCDESC, :PTABELA, :VLDESCONTO, :PRECOPROMOCIONAL, :MULTIPLO, :DESCRICAOAUXILIAR, :DESCRICAO, :MARCA, ' + + ' :PRECOPROMOCAO, :CODAUXILIAR, :VLCUSTOFIN, :VLCUSTOREAL, :VLCUSTOREP, :PERCACRESCIMO, :QTACRESCIMO, :BASETINTOMETRICO, ' + + ' :LINHATINTOMETRICO, :CORTINTOMETRICO, :LITRAGEM, :LETRATINTOMETRICO, :AMBIENTE, :PRODUTOCOMPREJUNTO )'; + let listPrice = 0; + if (itemShopping.base === 'S') { + listPrice = itemShopping.price; + } else { + listPrice = (itemShopping.promotion > 0) ? itemShopping.promotion : itemShopping.listPrice; + } + + await queryRunner.query(sqlInsertitem, [ + idItem, //ID + idCart, //IDCART + numSeq, //NUMSEQ + itemShopping.idProduct, //CODPROD + itemShopping.quantity, //QT + itemShopping.price, //PVENDA + itemShopping.description, //NOMEECOMMERCE + itemShopping.image, //URLIMAGE + itemShopping.productType, //TIPOPRODUTO + itemShopping.stockStore, //CODFILIALRETIRA + itemShopping.deliveryType, //TIPOENTREGA + itemShopping.seller, //CODUSUR + itemShopping.discount, //PERCDESC + itemShopping.userDiscount, //CODFUNCDESC + listPrice, //PTABELA + itemShopping.discountValue, //VALORDESCONTO + (itemShopping.promotion > 0) ? 'S' : 'N', //PRECOPROMOCIONAL + itemShopping.mutiple, //MULTIPLO + itemShopping.auxDescription, //DESCRICAOAUXILIAR + itemShopping.smallDescription, //DESCRICAO + itemShopping.brand, //MARCA + itemShopping.promotion, //PRECOPROMOCAO + itemShopping.ean, //CODAUXILIAR + 0, //VLCUSTOFIN + 0, //VLCUSTOREAL + 0, //VLCUSTOREP + itemShopping.percentUpQuantity, //PERCARESCIMO + itemShopping.upQuantity, //QTACRESCIMO + itemShopping.base, //BASEINTOMETRICO + itemShopping.line, //LINHATINTOMETRICO + (itemShopping.base == 'S') ? itemShopping.auxDescription : null, //CORTINTOMETRICO + itemShopping.can, //LITRAGEM + itemShopping.letter, //LETRATINTOMETRICO + itemShopping.environment, //AMBIENTE + itemShopping.productTogether, //PRODUTOCOMPREJUNTO + ]); + + const createItemShopping = new ShoppingItens(); + createItemShopping.id = idItem; + createItemShopping.description = itemShopping.description; + createItemShopping.smallDescription = itemShopping.smallDescription; + createItemShopping.image = itemShopping.image; + createItemShopping.productType = itemShopping.productType; + createItemShopping.idCart = idCart; + createItemShopping.idProduct = itemShopping.idProduct; + if (itemShopping.base === 'S') { + createItemShopping.listPrice = itemShopping.price; + } else { + createItemShopping.listPrice = (itemShopping.promotion > 0) ? itemShopping.promotion : itemShopping.listPrice; + } + createItemShopping.price = itemShopping.price; + createItemShopping.quantity = itemShopping.quantity; + createItemShopping.deliveryType = itemShopping.deliveryType; + createItemShopping.stockStore = itemShopping.stockStore; + createItemShopping.seller = itemShopping.seller; + createItemShopping.discount = itemShopping.discount; + createItemShopping.discountValue = (itemShopping.listPrice * itemShopping.discount / 100); + createItemShopping.promotion = itemShopping.promotion; + createItemShopping.mutiple = itemShopping.mutiple; + createItemShopping.auxDescription = itemShopping.auxDescription; + createItemShopping.brand = itemShopping.brand; + createItemShopping.ean = itemShopping.ean; + createItemShopping.percentUpQuantity = itemShopping.percentUpQuantity; + createItemShopping.upQuantity = itemShopping.upQuantity; + createItemShopping.base = itemShopping.base; + createItemShopping.line = itemShopping.line; + createItemShopping.can = itemShopping.can; + createItemShopping.letter = itemShopping.letter; + createItemShopping.color = (itemShopping.base == 'S') ? itemShopping.auxDescription : null; + createItemShopping.productTogether = itemShopping.productTogether; + + createItemShopping.createDate = new Date(); + + console.log('Incluindo item 07 - ' + Date.now().toString()); + // await queryRunner.manager.save(createItemShopping); + console.log('Incluindo item 08 - ' + Date.now().toString()); + await queryRunner.commitTransaction(); + console.log('Incluindo item 09 - ' + Date.now().toString()); + await this.calculateProfitShoppping(idCart, queryRunner); + await this.updateTotalShopping(idCart); + + return createItemShopping; + + } catch (erro) { + console.log(erro); + await queryRunner.rollbackTransaction(); + throw new HttpException("Erro ao criar item no carrinho de compras", HttpStatus.INTERNAL_SERVER_ERROR); + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + + } + + async createShopping(idCart: string, storeId: string, sellerId: number, queryRunner: QueryRunner) { + const sql = 'INSERT INTO ESTPREVENDAC ( ID, CODFILIAL, DATA, CODUSUR, VLPEDIDO, VLDESCONTO, VLTAXAENTREGA, TIPOPRIORIDADEENTREGA ) ' + + ' VALUES ( :1, :2, TRUNC(SYSDATE), :3, :4, :5, :6, :7 )'; + + await queryRunner.query(sql, [ + idCart, + storeId, + sellerId, + 0, + 0, + 0, + 'B' + ]); + + } + + async updateTotalShopping(idCart: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + const prevenda = await queryRunner + .query('SELECT SUM(ESTPREVENDAI.PTABELA * ESTPREVENDAI.QT) as "vltabela" ' + + ' ,SUM(ESTPREVENDAI.PVENDA * ESTPREVENDAI.QT) as "vlatend" ' + + ' ,SUM(ESTPREVENDAI.VLDESCONTO * ESTPREVENDAI.QT) as "vldesconto" ' + + ' ,SUM(PCPRODUT.PESOBRUTO * ESTPREVENDAI.QT) as "totpeso" ' + + ' FROM ESTPREVENDAI, PCPRODUT ' + + ' WHERE ESTPREVENDAI.CODPROD = PCPRODUT.CODPROD ' + + ' AND ESTPREVENDAI.IDCART = :1', [idCart]); + if (prevenda != null) { + const sql = ` UPDATE ESTPREVENDAC SET ` + + ` VLPEDIDO = :1 ` + + ` ,VLDESCONTO = :2 ` + + ` ,TOTPESO = :3 ` + + ` ,VLTABELA = :4 ` + + ` WHERE ID = :5 `; + await queryRunner.query(sql, [ + prevenda[0].vlatend, + prevenda[0].vldesconto, + prevenda[0].totpeso, + prevenda[0].vltabela, + idCart + ]); + } + await queryRunner.commitTransaction(); + + } catch (error) { + await queryRunner.rollbackTransaction(); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + + } + + async updateItem(itemShopping: ShoppingItem) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + + const sql = ' UPDATE ESTPREVENDAI SET ' + + ' PVENDA = :1 ' + + ' ,PTABELA = :2 ' + + ' ,QT = :3 ' + + ' ,TIPOENTREGA = :4 ' + + ' ,CODFILIALRETIRA = :5 ' + + ' ,DESCRICAOAUXILIAR = :6 ' + + ' ,AMBIENTE = :7 ' + + ' WHERE ID = :8 '; + + await queryRunner.query(sql, [ + itemShopping.price, + itemShopping.listPrice, + itemShopping.quantity, + itemShopping.deliveryType, + itemShopping.stockStore, + itemShopping.auxDescription, + itemShopping.environment, + itemShopping.id + ]); + + await queryRunner.commitTransaction(); + + await this.updateTotalShopping(itemShopping.idCart); + await this.calculateProfitShoppping(itemShopping.idCart, queryRunner); + + } catch (erro) { + await queryRunner.rollbackTransaction(); + throw erro; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async updatePrice(itemShopping: ShoppingItem) { + console.log(itemShopping); + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + + const sql = 'UPDATE ESTPREVENDAI SET ' + + ' PVENDA = :1 ' + + ' ,PERCDESC = :2 ' + + ' ,VLDESCONTO = :3 ' + + ' ,CODFUNCDESC = :4 ' + + ' WHERE ID = :5 '; + await queryRunner.query(sql, [ + itemShopping.price, + itemShopping.discount, + Number.parseFloat((itemShopping.listPrice * itemShopping.discount / 100).toFixed(2)), + itemShopping.userDiscount, + itemShopping.id + ]); + + // await queryRunner.manager + // .createQueryBuilder() + // .update(ShoppingItens) + // .set({ + // price: itemShopping.price, + // discount: itemShopping.discount, + // discountValue: Number.parseFloat((itemShopping.listPrice * itemShopping.discount / 100).toFixed(2)), + // userDiscount: itemShopping.userDiscount + // }) + // .where("\"ESTPREVENDAI\".id = :id", { id: itemShopping.id }) + // .execute(); + await queryRunner.commitTransaction(); + await this.calculateProfitShoppping(itemShopping.idCart, queryRunner); + await this.updateTotalShopping(itemShopping.idCart); + return itemShopping; + } catch (erro) { + await queryRunner.rollbackTransaction(); + throw erro; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async deleteItem(id: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + const item = await queryRunner.manager + .getRepository(ShoppingItens) + .createQueryBuilder('estprevendai') + .where("\"estprevendai\".id = :id", { id }) + .getOne(); + if (item != null) { + const sql = 'DELETE FROM ESTPREVENDAI WHERE ID = :1'; + await queryRunner.query(sql, [ + id + ]); + } + await queryRunner.commitTransaction(); + await this.updateTotalShopping(item.idCart); + await this.calculateProfitShoppping(item.idCart, queryRunner); + } catch (erro) { + await queryRunner.rollbackTransaction(); + throw erro; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async applyDiscountOrder(order: OrderDiscount) { + console.log('Desconto pedido: ' + JSON.stringify(order)); + const items = await this.GetItensCart(order.id); + const discountAuthUser = await this.userService.discountUser(order.idUserAuth); + console.log(discountAuthUser); + if (discountAuthUser < order.percentDiscount) { + return new HttpException('Percentual de desconto acima do permido para o usuário.', HttpStatus.FORBIDDEN); + } + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + let listPriceTotal = 0; + let discountTotal = 0; + const sql = 'UPDATE ESTPREVENDAI SET ' + + ' PVENDA = :1 ' + + ' ,PERCDESC = :2 ' + + ' ,VLDESCONTO = :3 ' + + ' ,CODFUNCDESC = :4 ' + + ' WHERE ID = :5 '; + items.filter(item => item.promotion == null || item.promotion == 0) + .forEach(async (item) => { + const price = (item.listPrice * (1 - (order.percentDiscount / 100))).toFixed(2); + listPriceTotal += (item.listPrice * item.quantity); + discountTotal += ((Number.parseFloat(item.listPrice.toFixed(2)) - Number.parseFloat(price)) * item.quantity); + await queryRunner.query(sql, [ + Number.parseFloat(price), + order.percentDiscount, + (item.listPrice - Number.parseFloat(price)), + order.idUserAuth, + item.id + ]); + // await queryRunner.manager + // .createQueryBuilder() + // .update(ShoppingItens) + // .set({ + // price: Number.parseFloat(price), + // discount: order.percentDiscount, + // discountValue: (item.listPrice - Number.parseFloat(price)), + // userDiscount: order.idUserAuth + // }) + // .where("\"ESTPREVENDAI\".id = :id", { id: item.id }) + // .execute(); + }); + console.log('total de desconto: ' + discountTotal); + const sqlOrder = 'UPDATE ESTPREVENDAC SET ' + + ' VLPEDIDO = :1 ' + + ' ,VLDESCONTO = :2 ' + + ' WHERE ID = :3 '; + + await queryRunner.query(sqlOrder, [ + listPriceTotal, + discountTotal, + order.id + ]); + + // await queryRunner.manager + // .createQueryBuilder() + // .update(Shopping) + // .set({ + // vlpedido: listPriceTotal, + // vldesconto: discountTotal, + // }) + // .where("\"ESTPREVENDAC\".id = :id", { id: order.id }) + // .execute(); + await queryRunner.commitTransaction(); + await this.calculateProfitShoppping(order.id, queryRunner); + await this.updateTotalShopping(order.id); + } catch (err) { + console.log(err); + await queryRunner.rollbackTransaction(); + throw err; + } + finally { + await queryRunner.release(); + await connection.close(); + } + + return await this.GetItensCart(order.id); + + } + + async applyTaxDelivery(order: OrderTaxDelivery) { + + + /* const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + // await queryRunner.startTransaction(); + try { + + // const sql = ' UPDATE ESTPREVENDAC SET ' + + // ' VLTAXAENTREGA = :1 ' + + // ' ,CODFORNECFRETE = :2 ' + + // ' ,CODTABELAFRETE = :3 ' + + // ' WHERE ID = :4'; + + const sql = 'BEGIN ESK_VENDA.ATULIZAR_DADOS_PREVENDA(:1, :2, :3, :4); END;' + + await queryRunner.query(sql, [ + order.taxValue, + order.carrierId, + order.deliveryTaxId, + order.id + ]); + // await queryRunner.commitTransaction(); + } catch (err) { + // await queryRunner.rollbackTransaction(); + // console.log(err); + + throw err; + } + finally { + await queryRunner.release(); + await connection.close(); + } */ + + return await this.GetItensCart(order.id.toString()); + } + + + async getShopping(id: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const shopping = await queryRunner.manager + .getRepository(Shopping) + .createQueryBuilder('estprevendac') + .where("\"estprevendac\".id = :id", { id }) + .getOne(); + return shopping; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async updatePriceShopping(idCart: string, idPaymentPlan: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + console.log('atualizando preços.'); + await queryRunner + .query("BEGIN ESK_VENDA.ATUALIZAR_PRECO_VENDA(:idCart, :idPaymentPlan); END;", [idCart, idPaymentPlan]); + await this.calculateProfitShoppping(idCart, queryRunner); + await queryRunner.commitTransaction(); + return true; + } catch (err) { + await queryRunner.rollbackTransaction(); + console.log(err); + throw err; + // since we have errors let's rollback changes we made + } finally { + // you need to release query runner which is manually created: + await queryRunner.release(); + await connection.close(); + } + } + + async calculateProfitShoppping(id: string, queryRunner: QueryRunner) { + try { + console.log('Calculando margem da prevenda - id: ' + id); + await queryRunner.query('BEGIN ESK_VENDA.calcular_cmv_prevenda(:1); END;', [id]).catch(err => console.log(err)); + } catch (erro) { + throw erro; + } + } + + async createLogShopping(logOrder: LogOrder) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + const sqlInsert = "INSERT INTO ESTLOGPEDIDOWEB ( IDCART, DATA, CODFUNCLOGADO, ACAO, CODFUNCAUTOR, OBSERVACAO ) " + + " VALUES ( :IDCART, SYSDATE, :CODFUNCAUTOR, :ACAO, :CODFUNCAUTOR, :OBSERVACAO )"; + + await queryRunner + .query(sqlInsert, [ + logOrder.idCart, + logOrder.idUser, + logOrder.action, + logOrder.iduserAuth, + logOrder.notation + ]); + await queryRunner.commitTransaction(); + return true; + } catch (err) { + console.log(err); + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getLotProduct(productId: number, customerId: number) { + + const sqlQueryLot = `SELECT LOTES_WMS.CODFILIAL as "storeId", + LOTES_WMS.CODPROD as "customerId", + LOTES_WMS.NUMLOTE as "lotProduct", + SUM(LOTES_WMS.QT) as "quantitySale", + MAX(ESTOQUE_WMS.QT) as "quantityStock" + FROM LOTES_WMS, ESTOQUE_WMS, PCPEDC + WHERE LOTES_WMS.NUMPED = PCPEDC.NUMPED + AND PCPEDC.DATA = ( SELECT MAX(P.DATA) FROM PCPEDC P, PCPEDI I + WHERE P.CODCLI = PCPEDC.CODCLI + AND P.NUMPED = I.NUMPED + AND I.CODPROD = LOTES_WMS.CODPROD ) + AND ESTOQUE_WMS.EMPRESA_ERP = LOTES_WMS.CODFILIAL + AND ESTOQUE_WMS.PRODUTO_ERP = LOTES_WMS.CODPROD + AND ESTOQUE_WMS.LOTE = LOTES_WMS.NUMLOTE + AND PCPEDC.CODCLI = ${customerId} + AND ESTOQUE_WMS.PRODUTO_ERP = ${productId} + GROUP BY LOTES_WMS.CODFILIAL, LOTES_WMS.CODPROD, LOTES_WMS.NUMLOTE + + UNION ALL + + SELECT ESTOQUE_WMS.empresa_erp as "storeId", + ESTOQUE_WMS.produto_erp as "customerId", + ESTOQUE_WMS.LOTE as "lotProduct", + NULL as "quantitySale", + ESTOQUE_WMS.QT as "quantityStock" + FROM ESTOQUE_WMS + WHERE NOT EXISTS(SELECT LOTES_WMS.NUMPED FROM LOTES_WMS, PCPEDC + WHERE ESTOQUE_WMS.EMPRESA_ERP = LOTES_WMS.CODFILIAL + AND ESTOQUE_WMS.PRODUTO_ERP = LOTES_WMS.CODPROD + AND ESTOQUE_WMS.LOTE = LOTES_WMS.NUMLOTE + AND LOTES_WMS.NUMPED = PCPEDC.NUMPED + AND PCPEDC.CODCLI = ${customerId} ) + AND ESTOQUE_WMS.PRODUTO_ERP = ${productId} `; + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + + const lotsProduct = await queryRunner + .query(sqlQueryLot); + + return lotsProduct; + } catch (err) { + console.log(err); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + + } + +} diff --git a/src/sales/tintometrico/tintometrico.controller.ts b/src/sales/tintometrico/tintometrico.controller.ts new file mode 100644 index 0000000..5571239 --- /dev/null +++ b/src/sales/tintometrico/tintometrico.controller.ts @@ -0,0 +1,41 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Body, Controller, Get, HttpException, HttpStatus, Post, Query } from '@nestjs/common'; +import { CalculatePriceTintometrico } from 'src/domain/models/calculate-price-tintometrico.model'; +import { TintometricoService } from './tintometrico.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Tintometrico') +@Controller('api/v1/tintometrico') +export class TintometricoController { + + constructor(private readonly tintometricoService: TintometricoService){} + + @Get('colors') + async getColors(@Query() query) { + let letter = ''; + let product = ''; + try { + if (query['letter']) + letter = query['letter']; + if (query['product']) { + product = query['product']; + } + return await this.tintometricoService.GetColors(letter, product); + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } + + @Post('calculatePrice') + async getPriceTintometrico(@Body() data: CalculatePriceTintometrico) { + try{ + const dataPrice = await this.tintometricoService.calculatePriceColor(data); + return dataPrice; + } catch (e) { + throw new HttpException(e.message, HttpStatus.BAD_REQUEST); + } + } +} diff --git a/src/sales/tintometrico/tintometrico.module.ts b/src/sales/tintometrico/tintometrico.module.ts new file mode 100644 index 0000000..6279eca --- /dev/null +++ b/src/sales/tintometrico/tintometrico.module.ts @@ -0,0 +1,16 @@ +import { TintometricoController } from './tintometrico.controller'; +import { TintometricoService } from './tintometrico.service'; +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; + +@Module({ + imports: [TintometricoService], + controllers: [ + TintometricoController,], + providers: [ + TintometricoService,], +}) +export class TintometricoModule { } diff --git a/src/sales/tintometrico/tintometrico.service.ts b/src/sales/tintometrico/tintometrico.service.ts new file mode 100644 index 0000000..0e8e8c8 --- /dev/null +++ b/src/sales/tintometrico/tintometrico.service.ts @@ -0,0 +1,58 @@ +/* +https://docs.nestjs.com/providers#services +*/ + +import { Injectable } from '@nestjs/common'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { CalculatePriceTintometrico } from 'src/domain/models/calculate-price-tintometrico.model'; +import { Connection } from 'typeorm'; + +@Injectable() +export class TintometricoService { + + async GetColors(letter: string, product: string) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT DISTINCT PRODUCT as "line", NVL(COLORNAME, COLORID) as "colorName" ` + + ` FROM esttintometricoplanbase ` + + ` WHERE BASE = :1 AND PRODUCT = :2 ` + + ` ORDER BY NVL(COLORNAME, COLORID)`; + const colors = await queryRunner.query(sql, [letter, product]); + return colors; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + + async calculatePriceColor(dataPrice: CalculatePriceTintometrico) { + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { + const sql = `SELECT ESK_VENDA.CALCULAR_PRECO_TINTOMETRICO(:1, :2, :3, :4, :5, :6) as "price_color" ` + + ` FROM DUAL`; + const price = await queryRunner.query(sql, [dataPrice.storeId, dataPrice.productId, + dataPrice.letter, dataPrice.line, dataPrice.color, dataPrice.can]); + + const resultPrice = new CalculatePriceTintometrico(dataPrice.storeId, dataPrice.productId, dataPrice.letter, + dataPrice.line, dataPrice.can, dataPrice.color, price[0].price_color ); + + return resultPrice; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + } + } + +} diff --git a/src/schedules/report/report.controller.ts b/src/schedules/report/report.controller.ts new file mode 100644 index 0000000..e926966 --- /dev/null +++ b/src/schedules/report/report.controller.ts @@ -0,0 +1,22 @@ +import { Controller, Get, HttpException, HttpStatus, Req } from '@nestjs/common'; +import { ResultModel } from 'src/domain/models/result.model'; +import { ReportService } from './report.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Report') +@Controller('v1/report') +export class ReportsController { + + constructor(private readonly reportService: ReportService){} + + @Get() + async getReport(@Req() req) { + try { + await this.reportService.GetReportSupplier(); + return new ResultModel(true, 'Relatório gerado com sucesso!', null, null); + } 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); + } + } + } diff --git a/src/schedules/report/report.service.ts b/src/schedules/report/report.service.ts new file mode 100644 index 0000000..a870b71 --- /dev/null +++ b/src/schedules/report/report.service.ts @@ -0,0 +1,50 @@ +import { Injectable } from '@nestjs/common'; +import * as compression from 'compression'; + +@Injectable() +export class ReportService { + + async GetReportSupplier() { + try { + var Stimulsoft = require('stimulsoft-reports-js'); + Stimulsoft.Base.StiFontCollection.addOpentypeFontFile("Roboto-Black.ttf"); + // Creating new report + var report = new Stimulsoft.Report.StiReport(); + console.log("New report created"); + // Loading report template + report.loadFile("src/domain/reports_model/faturamentoFornecedor1.mrt"); + // Renreding report + //report.compile(); + var dateInitial = '01.01.2021'; //new Date('2021-01-01') + var dateEnd = '20.01.2021'; //new Date('2021-01-31') + //report.CompiledReport.DataSources["FaturamentoFornecedor"].Parameters["CODFORNEC"].ParameterValue = 10; + //report.CompiledReport.DataSources["FaturamentoFornecedor"].Parameters["DATA_INICIO"].ParameterValue = dateInitial; + //report.CompiledReport.DataSources["FaturamentoFornecedor"].Parameters["DATA_FIM"].ParameterValue = dateEnd; + //report.setVariable("CODFORNEC", 10); + //report.setVariable("DATA_INICIO", dateInitial); + //report.setVariable("DATA_FIM", dateEnd); + + report.renderAsync(() => { + console.log("Report rendered. Pages count: ", report.renderedPages.count); + + // Export to PDF + report.exportDocumentAsync((pdfData) => { + // Converting Array into buffer + var buffer = Buffer.from(pdfData) + + // File System module + var fs = require('fs'); + + // Saving string with rendered report in PDF into a file + fs.writeFileSync('c:\\temp\\SimpleList.pdf', buffer); + console.log("Rendered report saved into PDF-file."); + }, Stimulsoft.Report.StiExportFormat.Pdf); + }); + + } catch ( error ) { + console.log(error); + } + + + } +} diff --git a/src/seller/seller.controller.ts b/src/seller/seller.controller.ts new file mode 100644 index 0000000..65e517d --- /dev/null +++ b/src/seller/seller.controller.ts @@ -0,0 +1,22 @@ +/* +https://docs.nestjs.com/controllers#controllers +*/ + +import { Controller, Get, HttpException, HttpStatus } from '@nestjs/common'; +import { SellerService } from './seller.service'; +import { ApiTags } from '@nestjs/swagger'; + +@ApiTags('Seller') +@Controller('api/v1/sellers') +export class SellerController { + + constructor(private readonly sellerService: SellerService){} + + @Get() getSellers() { + try { + return this.sellerService.getSellers(); + } catch (error) { + throw new HttpException(error.message, HttpStatus.BAD_REQUEST); + } + } + } diff --git a/src/seller/seller.module.ts b/src/seller/seller.module.ts new file mode 100644 index 0000000..2dabac3 --- /dev/null +++ b/src/seller/seller.module.ts @@ -0,0 +1,16 @@ +import { SellerService } from './seller.service'; +import { SellerController } from './seller.controller'; +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; + +@Module({ + imports: [SellerService], + controllers: [ + SellerController,], + providers: [ + SellerService,], +}) +export class SellerModule { } diff --git a/src/seller/seller.service.ts b/src/seller/seller.service.ts new file mode 100644 index 0000000..ade76bb --- /dev/null +++ b/src/seller/seller.service.ts @@ -0,0 +1,31 @@ +/* +https://docs.nestjs.com/providers#services +*/ + +import { Injectable } from '@nestjs/common'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { Connection } from 'typeorm'; + +@Injectable() +export class SellerService { + + async getSellers(){ + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const sellers = await queryRunner.query('SELECT PCUSUARI.CODUSUR as "sellerId" ' + + ' ,PCUSUARI.NOME as "name" ' + + ' FROM PCUSUARI ' + + ' WHERE PCUSUARI.DTTERMINO IS NULL ' + + ' AND PCUSUARI.DTEXCLUSAO IS NULL ' + + ' AND PCUSUARI.TIPOVEND NOT IN (\'P\') '); + + return sellers; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + } diff --git a/src/services/custom-logger.service.ts b/src/services/custom-logger.service.ts new file mode 100644 index 0000000..49fb52f --- /dev/null +++ b/src/services/custom-logger.service.ts @@ -0,0 +1,21 @@ +import { LoggerService } from "@nestjs/common"; + +export class CustomLoggerService implements LoggerService { + + log(message: any, context?: string) { + console.log(message); + } + error(message: any, trace?: string, context?: string) { + console.log(message); + } + warn(message: any, context?: string) { + console.log(message); + } + debug?(message: any, context?: string) { + console.log(message); + } + verbose?(message: any, context?: string) { + console.log(message); + } + +} \ No newline at end of file diff --git a/src/shared/services/shared.service.ts b/src/shared/services/shared.service.ts new file mode 100644 index 0000000..bc12216 --- /dev/null +++ b/src/shared/services/shared.service.ts @@ -0,0 +1,167 @@ +/* +https://docs.nestjs.com/providers#services +*/ + +import { Injectable } from '@nestjs/common'; +import { connectionOptions } from 'src/configs/typeorm.config'; +import { Pcclient } from 'src/domain/entity/tables/pcclient.entity'; +import { Store } from 'src/domain/entity/tables/pcfilial.entity'; +import { Pctabtrib } from 'src/domain/entity/tables/pctabtrib.entity'; +import { Connection } from 'typeorm'; + +@Injectable() +export class SharedService { + + async generateIdCustomer() { + console.log("Gerando idcustomer"); + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + // lets now open a new transaction: + await queryRunner.startTransaction(); + + try { + + let sql = 'SELECT PROXNUMCLI as "proxnumcli" FROM PCCONSUM WHERE 1 = 1 FOR UPDATE'; + const param = await queryRunner.query(sql); + // const param = await queryRunner.manager + // .getRepository(Pcconsum) + // .createQueryBuilder('pcconsum') + // .setLock("dirty_read") + // .getOne(); + + const idCustomer = param[0].proxnumcli; + console.log(idCustomer); + + sql = "UPDATE PCCONSUM SET PROXNUMCLI = NVL(PROXNUMCLI,0) + 1 WHERE 1 = 1" + await queryRunner.query(sql, []); + // commit transaction now: + await queryRunner.commitTransaction(); + return idCustomer; + + } catch (err) { + // since we have errors let's rollback changes we made + await queryRunner.rollbackTransaction(); + return -1; + + } finally { + // you need to release query runner which is manually created: + await queryRunner.release(); + await connection.close(); + } + } + + async generateIdPreOrder(idSeller: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + + // lets now open a new transaction: + await queryRunner.startTransaction(); + + try { + + let sql = `SELECT PROXNUMPED as "proxnumped" FROM PCUSUARI WHERE CODUSUR = :1 FOR UPDATE`; + const seller = await queryRunner.query(sql, [idSeller] ); + + // const seller = await queryRunner.manager + // .getRepository(Pcusuari) + // .createQueryBuilder('pcusuari') + // .where('pcusuari.codusur = :idSeller', {idSeller: idSeller}) + // .setLock("dirty_read") + // .getOne(); + + const idPreOrder = seller[0].proxnumped; + // await getConnection() + // .createQueryBuilder() + // .update(Pcusuari) + // .set({ proxnumped: idPreOrder + 1 }) + // .where('pcusuari.codusur = :idSeller', {idSeller: idSeller}) + // .execute(); + // commit transaction now: + sql = `UPDATE PCUSUARI SET PROXNUMPED = NVL(PROXNUMPED,0) + 1 WHERE CODUSUR = :1`; + await queryRunner.query(sql, [idSeller] ); + await queryRunner.commitTransaction(); + return idPreOrder; + } catch (err) { + // since we have errors let's rollback changes we made + await queryRunner.rollbackTransaction(); + console.log(err); + throw err; + } finally { + // you need to release query runner which is manually created: + await queryRunner.release(); + await connection.close(); + } + } + + async getCustomer(idCustomer: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const customer = await queryRunner.manager + .getRepository(Pcclient) + .createQueryBuilder('pcclient') + .where("\"pcclient\".codcli = :idCustomer", { idCustomer }) + .getOne(); + return customer; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getTaxId(productId: number, stockId: string, state: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const tax = await queryRunner.manager + .getRepository(Pctabtrib) + .createQueryBuilder('pctabtrib') + .where("pctabtrib.codprod = :codprod and pctabtrib.codfilialnf = :codfilialnf and ufdestino = :ufdestino", + { codprod: productId, codfilialnf: stockId, ufdestino: state }) + .getOne(); + return tax != null ? tax.codst : 0; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async getStores(storeId: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + let where = "1=1"; + if (storeId != null){ + where = `ID = ${storeId}`; + } + const stores = await queryRunner.manager + .getRepository(Store) + .createQueryBuilder('pcfilial') + .select(['storeId', 'name', 'shortName']) + .where(where) + .getMany(); + return stores; + } catch (error) { + throw error; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + +} diff --git a/src/shared/services/tools/datetime.function.ts b/src/shared/services/tools/datetime.function.ts new file mode 100644 index 0000000..4ba9749 --- /dev/null +++ b/src/shared/services/tools/datetime.function.ts @@ -0,0 +1,10 @@ +export class DateTimeFunction { + + convertFromStringToDate(responseDate) { + const dateComponents = responseDate.split('T'); + const datePieces = dateComponents[0].split("-"); + const timePieces = dateComponents[1].split(":"); + return (new Date(datePieces[2], (datePieces[1] - 1), datePieces[0], + timePieces[0], timePieces[1], timePieces[2])) + } +} \ No newline at end of file diff --git a/src/shared/shared.module.ts b/src/shared/shared.module.ts new file mode 100644 index 0000000..3e11504 --- /dev/null +++ b/src/shared/shared.module.ts @@ -0,0 +1,15 @@ +import { SharedService } from './services/shared.service'; +/* +https://docs.nestjs.com/modules +*/ + +import { Module } from '@nestjs/common'; + +@Module({ + imports: [SharedService], + controllers: [], + providers: [ + SharedService,], + exports: [SharedService] +}) +export class SharedModule { } diff --git a/src/utils/flunt.ts b/src/utils/flunt.ts new file mode 100644 index 0000000..4b7fed5 --- /dev/null +++ b/src/utils/flunt.ts @@ -0,0 +1,27 @@ +export class Flunt { + constructor(public errors: any[] = []) + {} + + isRequired(value, message){ + if (!value || value.length <= 0) { + this.errors.push(message); + } + } + + hasMinLen( value, min, message) { + if (!value || value.length <= min) { + this.errors.push(message); + } + } + + hasMaxLen( value, max, message) { + if (!value || value.length >= max) { + this.errors.push(message); + } + } + + isValid(): boolean { + return this.errors.length == 0; + } + +} \ No newline at end of file diff --git a/src/utils/number.utils.ts b/src/utils/number.utils.ts new file mode 100644 index 0000000..75c0a16 --- /dev/null +++ b/src/utils/number.utils.ts @@ -0,0 +1,6 @@ +export class NumberUtils { + + static getNewId(max: number, min: number) { + return Math.floor(Math.random() * (max - min + 1)) + min; + } +} \ No newline at end of file diff --git a/test/app.e2e-spec.ts b/test/app.e2e-spec.ts new file mode 100644 index 0000000..50cda62 --- /dev/null +++ b/test/app.e2e-spec.ts @@ -0,0 +1,24 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from './../src/app.module'; + +describe('AppController (e2e)', () => { + let app: INestApplication; + + beforeEach(async () => { + const moduleFixture: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + }); + + it('/ (GET)', () => { + return request(app.getHttpServer()) + .get('/') + .expect(200) + .expect('Hello World!'); + }); +}); diff --git a/test/jest-e2e.json b/test/jest-e2e.json new file mode 100644 index 0000000..e9d912f --- /dev/null +++ b/test/jest-e2e.json @@ -0,0 +1,9 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "rootDir": ".", + "testEnvironment": "node", + "testRegex": ".e2e-spec.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + } +} diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..64f86c6 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..69f185f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "target": "es2017", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true + }, + "exclude": ["node_modules", "dist"] +}