filhotecmail

PL/SQL Analise regras Fiscais

Mar 3rd, 2024
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 27.23 KB | Source Code | 0 0
  1. CREATE OR ALTER PROCEDURE PROC_VENDA_REGISTRAITEM (
  2.     IN_NUMEROVENDA BIGINT NOT NULL,
  3.     IN_I02CPROD VARCHAR(60) NOT NULL,
  4.     IN_I03CEAN VARCHAR(14) NOT NULL,
  5.     IN_I04XPROD VARCHAR(120) NOT NULL,
  6.     IN_I05NCM VARCHAR(8) NOT NULL,
  7.  
  8.     IN_I09UCOM VARCHAR(10)NOT NULL,
  9.     IN_I10QCOM NUMERIC(15,4)NOT NULL,
  10.     IN_I10AVUNCOM NUMERIC(15,2)NOT NULL,
  11.     IN_VLCUSTOPROD NUMERIC(15,2)NOT NULL,
  12.  
  13.     IN_I12CEANTRIB VARCHAR(14) NOT NULL,
  14.     IN_I13UTRIB VARCHAR(6) NOT NULL,
  15.     IN_I14QTRIB NUMERIC(15,4) NOT NULL,
  16.     IN_I14AVUNTRIB NUMERIC(15,2) NOT NULL,
  17.  
  18.     IN_CSTCSOSN TYPE OF COLUMN PROD_ICMS.CSTCSOSN,
  19.  
  20.     IN_I15VFRETE TYPE OF COLUMN PROD.I15VFRETE,
  21.     IN_I16VSEG TYPE OF COLUMN PROD.I16VSEG,
  22.     IN_I17VDESC TYPE OF COLUMN PROD.I17VDESC,
  23.     IN_I17AVOUTRO TYPE OF COLUMN PROD.I17AVOUTRO,
  24.     IN_PICMS TYPE OF COLUMN PROD_ICMS.PICMS,
  25.  
  26.     IN_ICMSORIG TYPE OF COLUMN PROD_ICMS.ICMSORIG,
  27.     IN_PIS_CST TYPE OF COLUMN PROD_ICMS.PIS_CST,
  28.     IN_PIS_ALIQ TYPE OF COLUMN PROD_ICMS.PIS_ALIQ,
  29.     IN_COFINS_CST TYPE OF COLUMN PROD_ICMS.COFINS_CST,
  30.     IN_COFINS_ALIQ TYPE OF COLUMN PROD_ICMS.COFINS_ALIQ,
  31.     IN_CFOP TYPE OF COLUMN PROD_ICMS.CFOP,
  32.  
  33.     IN_IBPT_ALIQMUN TYPE OF COLUMN PROD_ICMS.IBPT_ALIQMUN,
  34.     IN_IBPT_ALIQEST TYPE OF COLUMN PROD_ICMS.IBPT_ALIQEST,
  35.     IN_IBPT_ALIQFED TYPE OF COLUMN PROD_ICMS.IBPT_ALIQFED,
  36.     IN_IBPT_ALIQIMP TYPE OF COLUMN PROD_ICMS.IBPT_ALIQIMP,
  37.  
  38.     IN_VICMS TYPE OF COLUMN PROD_ICMS.VICMS,
  39.     IN_VPIS TYPE OF COLUMN PROD_ICMS.VPIS,
  40.     IN_VCOFINS TYPE OF COLUMN PROD_ICMS.VCOFINS,
  41.     IN_N17BPFCP TYPE OF COLUMN PROD_ICMS.N17BPFCP,
  42.     IN_N17CVFCP TYPE OF COLUMN PROD_ICMS.N17CVFCP,
  43.     IN_N17AVBCFCP TYPE OF COLUMN PROD_ICMS.N17AVBCFCP,
  44.     IN_N18MODBCST TYPE OF COLUMN PROD_ICMS.N18MODBCST,
  45.     IN_N19PMVAST TYPE OF COLUMN PROD_ICMS.N19PMVAST,
  46.     IN_N20PREDBCST TYPE OF COLUMN PROD_ICMS.N20PREDBCST,
  47.     IN_N21VBCST TYPE OF COLUMN PROD_ICMS.N21VBCST,
  48.     IN_N22PICMSST TYPE OF COLUMN PROD_ICMS.N22PICMSST,
  49.     IN_N23AVBCFCPST TYPE OF COLUMN PROD_ICMS.N23AVBCFCPST,
  50.     IN_N23BPFCPST TYPE OF COLUMN PROD_ICMS.N23BPFCPST,
  51.     IN_N23DVFCPST TYPE OF COLUMN PROD_ICMS.N23DVFCPST,
  52.     IN_N28AVICMSDESON TYPE OF COLUMN PROD_ICMS.N28AVICMSDESON,
  53.     IN_N28MOTDESICMS TYPE OF COLUMN PROD_ICMS.N28MOTDESICMS,
  54.     IN_N26VBCSTRET TYPE OF COLUMN PROD_ICMS.N26VBCSTRET,
  55.     IN_N26APST TYPE OF COLUMN PROD_ICMS.N26APST,
  56.     IN_N26BVICMSSUBSTITUTO TYPE OF COLUMN PROD_ICMS.N26BVICMSSUBSTITUTO,
  57.     IN_N27VICMSSTRET TYPE OF COLUMN PROD_ICMS.N27VICMSSTRET,
  58.     IN_N14PREDBC TYPE OF COLUMN PROD_ICMS.N14PREDBC,
  59.     IN_N27AVBCFCPSTRET TYPE OF COLUMN PROD_ICMS.N27AVBCFCPSTRET,
  60.     IN_N27BPFCPSTRET TYPE OF COLUMN PROD_ICMS.N27BPFCPSTRET,
  61.     IN_N27DVFCPSTRET TYPE OF COLUMN PROD_ICMS.N27DVFCPSTRET,
  62.     IN_N34PREDBCEFET TYPE OF COLUMN PROD_ICMS.N34PREDBCEFET,
  63.     IN_N35VBCEFET TYPE OF COLUMN PROD_ICMS.N35VBCEFET,
  64.     IN_N36PICMSEFET TYPE OF COLUMN PROD_ICMS.N36PICMSEFET,
  65.     IN_N37VICMSEFET TYPE OF COLUMN PROD_ICMS.N37VICMSEFET,
  66.     IN_N15VBC TYPE OF COLUMN PROD_ICMS.N15VBC,
  67.     IN_VITEM12741 TYPE OF COLUMN PROD_ICMS.VITEM12741,
  68.     IN_N13MODBC TYPE OF COLUMN PROD_ICMS.N13MODBC,
  69.  
  70.     IN_I17BINDTOT TYPE OF COLUMN PROD.I17BINDTOT,
  71.     IN_I05ANVE TYPE OF COLUMN PROD.I05ANVE,
  72.     IN_I06EXTIPI TYPE OF COLUMN PROD.I06EXTIPI,
  73.     IN_I07IPPT TYPE OF COLUMN PROD.I07IPPT
  74.  
  75.  
  76.     )
  77.    RETURNS (
  78.  
  79.     ID BIGINT,
  80.     FKEMPRESA BIGINT,
  81.     B001DATETIME TIMESTAMP,
  82.     B002NATOP VARCHAR(200),
  83.     B003NROPDV SMALLINT,
  84.     B004OPERADOR VARCHAR(60),
  85.     B005SIT INTEGER,
  86.     B006IDMOVCAIXA INTEGER,
  87.     B007IDSESSAO INTEGER,
  88.     B008VOLUME SMALLINT,
  89.  
  90.     TIPO SMALLINT,
  91.     TIPOFISCAL SMALLINT,
  92.     TIPODOCFISCAL SMALLINT,
  93.     CONSUMDOC VARCHAR(17),
  94.     I16PROFITABILITRATE NUMERIC(15,4),
  95.     I17PROFITABILITVAL NUMERIC(15,4),
  96.  
  97.     CNPJ VARCHAR(17),
  98.     XNOME VARCHAR(60),
  99.     XFANT VARCHAR(60),
  100.     XLGR VARCHAR(60),
  101.     NRO VARCHAR(60),
  102.     XCPL VARCHAR(60),
  103.     XBAIRRO VARCHAR(60),
  104.     CMUN INTEGER,
  105.     XMUN VARCHAR(60),
  106.     UF VARCHAR(2),
  107.     CEP INTEGER,
  108.     CPAIS SMALLINT,
  109.     XPAIS VARCHAR(60),
  110.     FONE VARCHAR(35),
  111.     XMAIL VARCHAR(200),
  112.     C18IEST VARCHAR(14),
  113.     C17IE VARCHAR(14),
  114.     C19IM VARCHAR(15),
  115.     C20CNAE VARCHAR(7),
  116.     C21CRT INTEGER,
  117.     LMESSAGE TYPE OF COLUMN WARNINGS.MENSAGEM,
  118.  
  119.  
  120.     H02NITEM TYPE OF COLUMN PROD.H02NITEM,
  121.     I02CPROD TYPE OF COLUMN PROD.I02CPROD,
  122.     I03CEAN TYPE OF COLUMN PROD.I03CEAN,
  123.     I04XPROD TYPE OF COLUMN PROD.I04XPROD,
  124.     I05NCM TYPE OF COLUMN PROD.I05NCM,
  125.     I08CFOP TYPE OF COLUMN PROD.I08CFOP,
  126.     I09UCOM TYPE OF COLUMN PROD.I09UCOM,
  127.     I10QCOM TYPE OF COLUMN PROD.I10QCOM,
  128.     I10AVUNCOM TYPE OF COLUMN PROD.I10AVUNCOM,
  129.     I11VPROD TYPE OF COLUMN PROD.I11VPROD,
  130.     I12CEANTRIB TYPE OF COLUMN PROD.I12CEANTRIB,
  131.     I13UTRIB TYPE OF COLUMN PROD.I13UTRIB,
  132.     I14QTRIB TYPE OF COLUMN PROD.I14QTRIB,
  133.     I14AVUNTRIB TYPE OF COLUMN PROD.I14AVUNTRIB,
  134.     I15VFRETE TYPE OF COLUMN PROD.I15VFRETE,
  135.     I16VSEG TYPE OF COLUMN PROD.I16VSEG,
  136.     I17VDESC TYPE OF COLUMN PROD.I17VDESC,
  137.     I17AVOUTRO TYPE OF COLUMN PROD.I17AVOUTRO,
  138.     I17BINDTOT TYPE OF COLUMN PROD.I17BINDTOT,
  139.     I05CCEST TYPE OF COLUMN PROD.I05CCEST,
  140.     IVLCUSTOPROD TYPE OF COLUMN PROD.IVLCUSTOPROD,
  141.     I05ANVE TYPE OF COLUMN PROD.I05ANVE,
  142.     I06EXTIPI TYPE OF COLUMN PROD.I06EXTIPI,
  143.     I07IPPT TYPE OF COLUMN PROD.I07IPPT,
  144.     I08VTOTPROD TYPE OF COLUMN PROD.I08VTOTPROD,
  145.  
  146.     ICMSORIG TYPE OF COLUMN PROD_ICMS.ICMSORIG,
  147.     CSTCSOSN TYPE OF COLUMN PROD_ICMS.CSTCSOSN,
  148.     PICMS TYPE OF COLUMN PROD_ICMS.PICMS,
  149.     PIS_CST TYPE OF COLUMN PROD_ICMS.PIS_CST,
  150.     PIS_ALIQ TYPE OF COLUMN PROD_ICMS.PIS_ALIQ,
  151.     COFINS_CST TYPE OF COLUMN PROD_ICMS.COFINS_CST,
  152.     COFINS_ALIQ TYPE OF COLUMN PROD_ICMS.COFINS_ALIQ,
  153.     CFOP TYPE OF COLUMN PROD_ICMS.CFOP,
  154.  
  155.     IBPT_ALIQMUN TYPE OF COLUMN PROD_ICMS.IBPT_ALIQMUN,
  156.     IBPT_ALIQEST TYPE OF COLUMN PROD_ICMS.IBPT_ALIQEST,
  157.     IBPT_ALIQFED TYPE OF COLUMN PROD_ICMS.IBPT_ALIQFED,
  158.     IBPT_ALIQIMP TYPE OF COLUMN PROD_ICMS.IBPT_ALIQIMP,
  159.  
  160.     VICMS TYPE OF COLUMN PROD_ICMS.VICMS,
  161.     VPIS TYPE OF COLUMN PROD_ICMS.VPIS,
  162.     VCOFINS TYPE OF COLUMN PROD_ICMS.VCOFINS,
  163.     N17BPFCP TYPE OF COLUMN PROD_ICMS.N17BPFCP,
  164.     N17CVFCP TYPE OF COLUMN PROD_ICMS.N17CVFCP,
  165.     N17AVBCFCP TYPE OF COLUMN PROD_ICMS.N17AVBCFCP,
  166.     N18MODBCST TYPE OF COLUMN PROD_ICMS.N18MODBCST,
  167.     N19PMVAST TYPE OF COLUMN PROD_ICMS.N19PMVAST,
  168.     N20PREDBCST TYPE OF COLUMN PROD_ICMS.N20PREDBCST,
  169.     N21VBCST TYPE OF COLUMN PROD_ICMS.N21VBCST,
  170.     N22PICMSST TYPE OF COLUMN PROD_ICMS.N22PICMSST,
  171.     N23AVBCFCPST TYPE OF COLUMN PROD_ICMS.N23AVBCFCPST,
  172.     N23BPFCPST TYPE OF COLUMN PROD_ICMS.N23BPFCPST,
  173.     N23DVFCPST TYPE OF COLUMN PROD_ICMS.N23DVFCPST,
  174.     N28AVICMSDESON TYPE OF COLUMN PROD_ICMS.N28AVICMSDESON,
  175.     N28MOTDESICMS TYPE OF COLUMN PROD_ICMS.N28MOTDESICMS,
  176.     N26VBCSTRET TYPE OF COLUMN PROD_ICMS.N26VBCSTRET,
  177.     N26APST TYPE OF COLUMN PROD_ICMS.N26APST,
  178.     N26BVICMSSUBSTITUTO TYPE OF COLUMN PROD_ICMS.N26BVICMSSUBSTITUTO,
  179.     N27VICMSSTRET TYPE OF COLUMN PROD_ICMS.N27VICMSSTRET,
  180.     N14PREDBC TYPE OF COLUMN PROD_ICMS.N14PREDBC,
  181.     N27AVBCFCPSTRET TYPE OF COLUMN PROD_ICMS.N27AVBCFCPSTRET,
  182.     N27BPFCPSTRET TYPE OF COLUMN PROD_ICMS.N27BPFCPSTRET,
  183.     N27DVFCPSTRET TYPE OF COLUMN PROD_ICMS.N27DVFCPSTRET,
  184.     N34PREDBCEFET TYPE OF COLUMN PROD_ICMS.N34PREDBCEFET,
  185.     N35VBCEFET TYPE OF COLUMN PROD_ICMS.N35VBCEFET,
  186.     N36PICMSEFET TYPE OF COLUMN PROD_ICMS.N36PICMSEFET,
  187.     N37VICMSEFET TYPE OF COLUMN PROD_ICMS.N37VICMSEFET,
  188.     N15VBC TYPE OF COLUMN PROD_ICMS.N15VBC,
  189.     VITEM12741 TYPE OF COLUMN PROD_ICMS.vitem12741,
  190.     N13MODBC TYPE OF COLUMN PROD_ICMS.N13MODBC
  191.  
  192.     )
  193. AS
  194.  DECLARE VARIABLE LEHSN SMALLINT;
  195.  DECLARE VARIABLE SLINEBREAK CHAR(23);
  196.  DECLARE VARIABLE L_OLD_CSTCSOSN TYPE OF COLUMN PROD_ICMS.CSTCSOSN ;
  197.  DECLARE VARIABLE L_VAR_VBRUTOPROD TYPE OF COLUMN PROD.I08VTOTPROD;
  198.  DECLARE VARIABLE L_VAR_TIPOFISCALSTR VARCHAR(3);
  199.  DECLARE VARIABLE L_VAR_VTOTALPRODSERV NUMERIC(15,2);
  200.  DECLARE VARIABLE L_VAR_PERCLUCROPROD NUMERIC(15,4);
  201. BEGIN
  202.   SLINEBREAK  = ''||ASCII_CHAR(13) || ASCII_CHAR(10)||'';
  203.  
  204.   FOR
  205.     SELECT
  206.         T1.ID,            T1.FKEMPRESA,     T1.B001DATETIME, T1.B002NATOP,
  207.         T1.B003NROPDV,    T1.B004OPERADOR,  T1.B005SIT,      T1.B006IDMOVCAIXA,
  208.         T1.B007IDSESSAO,  T1.B008VOLUME,    T1.TIPO,         T1.TIPOFISCAL,
  209.         T1.TIPODOCFISCAL, T1.CONSUMDOC,     T2.CNPJ,         T2.XNOME,
  210.         T2.XFANT,         T2.XLGR,          T2.NRO,          T2.XCPL,
  211.         T2.XBAIRRO,       T2.CMUN,          T2.XMUN,         T2.UF,
  212.         T2.CEP,           T2.CPAIS,         T2.XPAIS,        T2.FONE,
  213.         T2.XMAIL,         T2.C18IEST,       T2.C17IE,        T2.C19IM,
  214.         T2.C20CNAE,       T2.C21CRT
  215.     FROM EMIT T2
  216.        INNER JOIN IDE T1 ON (T2.IDPK = T1.ID)
  217.        WHERE T1.ID = :IN_NUMEROVENDA
  218.     INTO :ID,
  219.          :FKEMPRESA,  :B001DATETIME,  :B002NATOP,   :B003NROPDV,  :B004OPERADOR,
  220.          :B005SIT,    :B006IDMOVCAIXA,:B007IDSESSAO,:B008VOLUME,  :TIPO,
  221.          :TIPOFISCAL, :TIPODOCFISCAL, :CONSUMDOC,   :CNPJ,        :XNOME,
  222.          :XFANT,      :XLGR,          :NRO,         :XCPL,        :XBAIRRO,
  223.          :CMUN,       :XMUN,          :UF,          :CEP,         :CPAIS,
  224.          :XPAIS,      :FONE,          :XMAIL,       :C18IEST,     :C17IE,
  225.          :C19IM,      :C20CNAE,       :C21CRT
  226.  
  227.   DO
  228.   BEGIN
  229.     IF (ID IS NULL OR ID = 0) THEN
  230.     EXCEPTION eebadparam 'VENDA DE NUMERO '||IN_NUMEROVENDA||' NAO LOCALIZADA NO SISTEMA';
  231.  
  232.    SELECT TRIM(MENSAGEM) FROM WARNINGS WHERE WARNINGS.IDCAIXA = :B006IDMOVCAIXA
  233.         AND WARNINGS.IDSESSAO = :B007IDSESSAO AND WARNINGS.IDVENDA = :IN_NUMEROVENDA
  234.         INTO :LMESSAGE;
  235.  
  236.   IF (CHARACTER_LENGTH( TRIM(LMESSAGE) ) <= 0 OR ( LMESSAGE IS NULL ) ) THEN
  237.       LMESSAGE = '';
  238.       ELSE
  239.       LMESSAGE = TRIM(:LMESSAGE)||SLINEBREAK||LPAD('',80,'*');
  240.  
  241.  /* 0 VENDA ABERTA -  1 VENDA FECHADA   2 VENDA CANCELADA   3 VENDA ESTORNADA */
  242.   IF (:B005SIT = 1) THEN EXCEPTION EEBADPARAM 'VENDA DE NUMERO ' || :ID || ' FECHADA NO SISTEMA!';
  243.   IF (:B005SIT = 2) THEN EXCEPTION EEBADPARAM 'VENDA DE NUMERO ' || :ID || ' CANCELADA NO SISTEMA!';
  244.   IF (:B005SIT = 3) THEN EXCEPTION EEBADPARAM 'VENDA DE NUMERO ' || :ID || ' ESTORNADA NO SISTEMA!';
  245.  
  246.    IF ( :C21CRT IS NULL ) THEN
  247.     EXCEPTION EECRITICALFAIL 'NAO EXISTE EMPRESA CARREGADA NO PLU EMPRESA';
  248.  
  249.   /* VERIFICA O CRT DA EMPRESA */
  250.   IF ( NOT C21CRT IN (1,2,3) ) THEN
  251.    BEGIN
  252.  
  253.     LMESSAGE = TRIM(:LMESSAGE)|| SLINEBREAK || 'VENDA NUMERO '||:IN_NUMEROVENDA||' - AJUSTE I03CEAN '
  254.         ||:C21CRT|| ' INVALIDO PARA TIPO DE CLASSIFICACAO TRIBUTARIA AJUSTADO PARA 1 SIMPLES NACIONAL ';
  255.  
  256.     C21CRT = 1;
  257.  
  258.   END
  259.  
  260.   LEHSN  = IIF( C21CRT = 1,1,0 );
  261.  
  262.   IF ( CHARACTER_LENGTH( TRIM( (SELECT * FROM ISONOASC( :IN_I04XPROD )))) <= 0 ) THEN
  263.      BEGIN
  264.       LMESSAGE = TRIM(:LMESSAGE)|| SLINEBREAK ||'VENDA NUMERO '||:IN_NUMEROVENDA||' - AJUSTE I04XPROD '
  265.         ||:IN_I04XPROD|| ' INVALIDO PRODUTO DE CÓDIGO DE BARRAS '
  266.         ||:IN_I02CPROD||'TEM UM I04XPROD QUE NAO CORRESPONDE A UMA DESCRICAO'
  267.         ||' DE PRODUTO VALIDA AJUSTADO PARA '||'PRODUTO DE CODIGO '||IN_I02CPROD;
  268.  
  269.       IN_I04XPROD = 'PRODUTO DE CODIGO '||IN_I02CPROD;
  270.  
  271.      END
  272.  
  273.   /*Preencher com o código GTIN-8, GTIN-12, GTIN-13 ou
  274.     GTIN-14 (antigos códigos EAN, UPC e DUN-14) da  unidade tributável do produto.
  275.  
  276.     O GTIN da unidade tributável deve corresponder àquele da  menor unidade
  277.     comercializável identificada por código GTIN.
  278.    Para produtos que não possuem código de barras com  GTIN, deve ser informado
  279.    o literal "SEM GTIN”; (Atualizado NT 2017.001)   */
  280.  
  281.   IF (CHARACTER_LENGTH( :IN_I03CEAN ) NOT IN ( 8,12,13,14 )) THEN
  282.    BEGIN
  283.  
  284.      LMESSAGE = TRIM(:LMESSAGE)|| SLINEBREAK ||'VENDA NUMERO '||:IN_NUMEROVENDA||' - AJUSTE I03CEAN '
  285.         ||:IN_I03CEAN|| ' INVALIDO PRODUTO DE CÓDIGO DE BARRAS '
  286.         ||:IN_I02CPROD||'TEM UM I03CEAN QUE NAO CORRESPONDE A UM GTIN/CEAN VALIDO';
  287.  
  288.     IN_I03CEAN = 'SEM GTIN';
  289.  
  290.   END
  291.  
  292.   /* Obrigatória informação do NCM completo (8 dígitos).
  293.      Nota: Em caso de item de serviço ou item que não tenham
  294.      produto (ex. transferência de crédito, crédito do
  295.      ativo imobilizado, etc.), informar o valor 00 (dois
  296.      zeros). (NT 2014/004 ) */
  297.   IF ( CHARACTER_LENGTH( :IN_I05NCM )< 8 ) THEN
  298.    BEGIN
  299.      LMESSAGE = TRIM(:LMESSAGE)|| SLINEBREAK || 'VENDA NUMERO '||:IN_NUMEROVENDA||' - AJUSTE NCM '
  300.         ||:IN_I05NCM|| ' INVALIDO PRODUTO DE CÓDIGO DE BARRAS '
  301.         ||:IN_I02CPROD||'TEM UM NCM MENOR QUE 8 DIGITOS AJUSTADO PARA "39269090"';
  302.  
  303.    /*CORRIGE COM NCM 3926.90.90 - Plásticos e suas obras - Outras obras de
  304.     plásticos e obras de outras matérias das posições
  305.     3901 a 3914 - Outras - Outras */
  306.    IN_I05NCM = '39269090';
  307.  
  308.    END
  309.  
  310.    IF ( CHARACTER_LENGTH(:IN_I09UCOM) <= 0  OR ( :IN_I09UCOM IS NULL )  ) THEN
  311.     BEGIN
  312.  
  313.      LMESSAGE = TRIM(:LMESSAGE)|| SLINEBREAK ||'VENDA NUERO '
  314.         ||:IN_NUMEROVENDA||' - AJUSTE I09UCOM '
  315.         ||:IN_I09UCOM|| ' INVALIDO, NAO CORRESPONDE A UMA UNIDADE COMERCIAL VALIDA '
  316.         ||:IN_I02CPROD||' TEVE A UNIDADE COMERCIAL AJUSTADA PARA "UNID" ';
  317.  
  318.         IN_I09UCOM = 'UNID';
  319.  
  320.     END
  321.  
  322.   IF ( IN_I10QCOM <= 0.0000 ) THEN
  323.       EXCEPTION eebadparam 'QUANTIDADE INVÁLIDA INFORMADA NA VENDA';
  324.  
  325.  IF ( IN_I10AVUNCOM <= 0.00 ) THEN
  326.       EXCEPTION eebadparam 'VALOR UNITARIO DO PRODUTO INVÁLIDO INFORMADO NO'
  327.                          ||' CAMPO I10AVUNCOM NA VENDA';
  328.  
  329.  /* VERIFICA O CUSTO DO PRODUTO E AJUSTA  */
  330.   IF ( :IN_VLCUSTOPROD <= 0.00 ) THEN
  331.    BEGIN
  332.     LMESSAGE = TRIM(:LMESSAGE)|| SLINEBREAK ||'VENDA NUMERO '
  333.                               ||:IN_NUMEROVENDA||' - AJUSTE VLCUSTOPROD '
  334.                               ||:IN_VLCUSTOPROD|| ' INVALIDO E AJUSTADO '
  335.                               ||'PARA 0.01 CENTAVO(S) ';
  336.  
  337.    IN_VLCUSTOPROD = 0.01;
  338.  
  339.   END
  340.  
  341.   IF (IN_I12CEANTRIB IS NULL OR CHAR_LENGTH(TRIM(IN_I12CEANTRIB)) <= 0) THEN
  342.   BEGIN
  343.    LMESSAGE = TRIM(:LMESSAGE)|| SLINEBREAK || 'VENDA NUMERO '
  344.                              ||:IN_NUMEROVENDA||' - AJUSTE I12CEANTRIB '
  345.                              ||:IN_I12CEANTRIB|| ' INVALIDO E AJUSTADO PARA '
  346.                              ||:IN_I03CEAN;
  347.  
  348.        IN_I12CEANTRIB = :IN_I03CEAN;
  349.   END
  350.  
  351.   IF (IN_I13UTRIB IS NULL OR CHAR_LENGTH(TRIM(IN_I13UTRIB)) <= 0) THEN
  352.   BEGIN
  353.     LMESSAGE = TRIM(:LMESSAGE)|| SLINEBREAK ||'VENDA NUMERO '
  354.                ||:IN_NUMEROVENDA||' - AJUSTE I13UTRIB '
  355.                ||:IN_I13UTRIB|| ' INVALIDO E AJUSTADO PARA '
  356.                ||:IN_I09UCOM;
  357.  
  358.     IN_I13UTRIB = :IN_I09UCOM;
  359.   END
  360.  
  361.   IF (IN_I14AVUNTRIB IS NULL OR ( IN_I14AVUNTRIB <= 0.00 ) ) THEN
  362.   BEGIN
  363.      LMESSAGE = TRIM(:LMESSAGE)|| SLINEBREAK || 'VENDA NUMERO '
  364.                 ||:IN_NUMEROVENDA||' - AJUSTE I14AVUNTRIB '
  365.                 ||:IN_I14AVUNTRIB|| ' INVALIDO E AJUSTADO PARA '
  366.                 ||:IN_I10AVUNCOM;
  367.  
  368.     IN_I14AVUNTRIB = :IN_I10AVUNCOM;
  369.   END
  370.  
  371.   IF (IN_I14QTRIB IS NULL OR ( IN_I14QTRIB <= 0.0000 ) ) THEN
  372.   BEGIN
  373.     LMESSAGE = TRIM(:LMESSAGE) || SLINEBREAK ||' VENDA NUMERO '||:IN_NUMEROVENDA
  374.                ||' - AJUSTE I14QTRIB '
  375.                ||:IN_I14QTRIB|| ' INVALIDO E AJUSTADO PARA '
  376.                ||:IN_I10QCOM;
  377.     IN_I14QTRIB = :IN_I10QCOM;
  378.   END
  379.  
  380.   IF (:IN_VLCUSTOPROD IN ( 0.00, 0.01, 0.02  ) ) THEN
  381.   BEGIN
  382.     LMESSAGE = TRIM(:LMESSAGE) || SLINEBREAK ||' VENDA NUMERO '||:IN_NUMEROVENDA
  383.                ||' - AVISO VLCUSTOPROD '
  384.                ||:IN_VLCUSTOPROD|| ' CUSTO DO PRODUTO ESTÁ MUITO ABAIXO DO CUSTO'
  385.                ||' PRATICADO NO COMERCIO, GERALMENTE ENTRE 30 A 60% DO VALOR DE '
  386.                ||'VENDA';
  387.  
  388.   END
  389.  
  390.  
  391.  L_OLD_CSTCSOSN = :IN_CSTCSOSN;
  392.  
  393. IF (:C21CRT = 1) THEN
  394. BEGIN
  395.   IF (:IN_CSTCSOSN IN ('40','41')) THEN IN_CSTCSOSN = '400';
  396.   IF (:IN_CSTCSOSN IN ('60')) THEN IN_CSTCSOSN = '500';
  397.   IF (:IN_CSTCSOSN IN ('00','01','20','90')) THEN IN_CSTCSOSN = '102';
  398.   IF (:IN_CSTCSOSN NOT IN ('00', '01', '02', '20', '30', '40', '41',
  399.                            '50', '51', '60', '90','70')) THEN IN_CSTCSOSN = '102';
  400.  
  401.   IF (L_OLD_CSTCSOSN <> :IN_CSTCSOSN) THEN
  402.     LMESSAGE = TRIM(:LMESSAGE) || SLINEBREAK || 'VENDA NUMERO '
  403.                 || :IN_NUMEROVENDA || ' - AJUSTE CSTCSOSN '
  404.                 || L_OLD_CSTCSOSN || ' INVALIDO PARA REGIME TRIBUTARIO DA '
  405.                 ||'EMPRESA E AJUSTADO PARA ' || :IN_CSTCSOSN;
  406.  
  407.   CSTCSOSN = :IN_CSTCSOSN;
  408.  
  409. END
  410.  
  411. IF (:C21CRT IN (2,3)) THEN
  412. BEGIN
  413.   IF (:IN_CSTCSOSN IN ('102')) THEN IN_CSTCSOSN = '00';
  414.   IF (:IN_CSTCSOSN IN ('500')) THEN IN_CSTCSOSN = '60';
  415.   IF (:IN_CSTCSOSN IN ('400','300')) THEN IN_CSTCSOSN = '40';
  416.   IF (:IN_CSTCSOSN IN ('900')) THEN IN_CSTCSOSN = '90';
  417.   IF (:IN_CSTCSOSN IN ('103')) THEN IN_CSTCSOSN = '40';
  418.   IF (:IN_CSTCSOSN IN ('101')) THEN IN_CSTCSOSN = '20';
  419.   IF (:IN_CSTCSOSN IN ('201','203')) THEN IN_CSTCSOSN = '10';
  420.   IF (:IN_CSTCSOSN IN ('202')) THEN IN_CSTCSOSN = '30';
  421.   IF (:IN_CSTCSOSN IN ('101', '102', '103', '201', '202', '203', '300',
  422.                        '400', '500', '900')) THEN IN_CSTCSOSN = '00';
  423.  
  424.   IF (L_OLD_CSTCSOSN <> :IN_CSTCSOSN) THEN
  425.     LMESSAGE = TRIM(:LMESSAGE) || SLINEBREAK || 'VENDA NUMERO '
  426.                 || :IN_NUMEROVENDA || ' - AJUSTE CSTCSOSN '
  427.                 || L_OLD_CSTCSOSN || ' INVALIDO PARA REGIME TRIBUTARIO DA '
  428.                 ||'EMPRESA E AJUSTADO PARA ' || :IN_CSTCSOSN;
  429.  
  430.   CSTCSOSN = :IN_CSTCSOSN;
  431. END
  432.  
  433.   L_VAR_VBRUTOPROD = (  :IN_I10AVUNCOM * :IN_I10QCOM );
  434.  
  435.  IF (:IN_I17VDESC > :L_VAR_VBRUTOPROD ) THEN
  436.   EXCEPTION EECRITICALFAIL 'O VALOR DE DESCONTOS DO ITEM NAO PODE SER MAIOR QUE'
  437.                          ||' O VALOR BRUTO DE PRODUTOS VALOR UNITARIO * QUANTIDADE ';
  438.  
  439.  
  440.  
  441. /* *****************************************************************************
  442.     INICIO DA ANALISE DE ENTRADA DOS DADOS DE TRIBUTAÇÃO E IMPOSTOS PROC_ICMS
  443.     -
  444. *******************************************************************************/
  445.  
  446.  IF ( NOT :IN_ICMSORIG IN  (0, 1, 2, 3, 4, 5, 6, 7, 8)  ) THEN
  447.   BEGIN
  448.     LMESSAGE = TRIM(:LMESSAGE) || SLINEBREAK || 'VENDA NUMERO '
  449.                 || :IN_NUMEROVENDA || ' - AJUSTE ICMSORIG '
  450.                 || :IN_ICMSORIG || ' NAO CORRESPONDE A UMA ORIGEM DE MERCADORIA '
  451.                 ||' VALIDA, AJUSTADO PARA 0  0 - NACIONAL, EXCETO AS INDICADAS'
  452.                 ||' NOS CÓDIGOS 3, 4, 5 E 8; ';
  453.  
  454.      IN_ICMSORIG = 0;
  455.  
  456.   END
  457.  
  458.  
  459.   IF ( NOT :IN_N13MODBC IN  (0, 1, 2, 3)  ) THEN
  460.   BEGIN
  461.     LMESSAGE = TRIM(:LMESSAGE) || SLINEBREAK || 'VENDA NUMERO '
  462.                 || :IN_NUMEROVENDA || ' - AJUSTE N13MODBC '
  463.                 || :IN_N13MODBC || ' MODALIDADE DA BASE DE CALCULO DO ICMS NAO'
  464.                 ||' VALIDA, AJUSTADO PARA 3  3=VALOR DA OPERACAO';
  465.  
  466.      IN_N13MODBC = 3;
  467.  
  468.   END
  469.  
  470.   IF ( :IN_PICMS <= 0.0000  ) THEN
  471.   BEGIN
  472.     LMESSAGE = TRIM(:LMESSAGE) || SLINEBREAK || 'VENDA NUMERO '
  473.                 || :IN_PICMS || ' - AJUSTE PICMS '
  474.                 || :IN_N13MODBC || ' PERCENTUAL DE ICMS INVALIDO'
  475.                 ||', AJUSTADO PARA 0.0000%';
  476.  
  477.      IN_PICMS = 0.0000;
  478.  
  479.   END
  480.  
  481.  
  482. /* *****************************************************************************
  483.     BLOCO A1 TRATA O BLOCO CFOP E CRUZAMENTOS PARA EMPRESA DO SIMPLES NACIONAL
  484.     SUBROUTINE CALCULA ICMS_SN SAT CFE | NFCE
  485. *******************************************************************************/
  486.  L_VAR_TIPOFISCALSTR =  CASE :TIPODOCFISCAL
  487.    WHEN 0 THEN '59'
  488.    WHEN 1 THEN '65'
  489.    WHEN 99 THEN '99'
  490.    END;
  491.  
  492.    IF (:C21CRT = 1 OR ( :C21CRT NOT IN ( 1,2,3 )  )  ) THEN
  493.    BEGIN
  494.  
  495.    SELECT OUT_ALIQICMS, OUT_BCICMS, OUT_VICMS,
  496.           OUT_VPROD, OUT_VITEM12741, OUT_CFOP, OUT_VTOTPROD
  497.  
  498.    FROM SUBROUT_CALCULAICMS_SN(:IN_CSTCSOSN, :IN_I10AVUNCOM, :IN_I17VDESC,
  499.                                :IN_I15VFRETE, :IN_I16VSEG, :IN_I17AVOUTRO,
  500.                                :IN_PICMS,:L_VAR_TIPOFISCALSTR , :IN_I10QCOM)
  501.  
  502.    INTO :PICMS, :N15VBC, :VICMS, :I11VPROD, :VITEM12741,
  503.         :I08CFOP, :I08VTOTPROD;
  504.  
  505.    IF (:in_picms <> :PICMS) THEN
  506.     LMESSAGE = TRIM(:LMESSAGE) || SLINEBREAK || 'VENDA NUMERO '
  507.                 || :IN_NUMEROVENDA || ' - AJUSTE PICMS '
  508.                 || :in_picms || ' AJUSTADO PARA SIMPLES NACIONAL '
  509.                 ||' PARA ' || :PICMS;
  510.  
  511.    IF (:in_n15vbc <> :N15VBC) THEN
  512.     LMESSAGE = TRIM(:LMESSAGE) || SLINEBREAK || 'VENDA NUMERO '
  513.                 || :IN_NUMEROVENDA || ' - AJUSTE N15VBC '
  514.                 || :in_n15vbc || ' AJUSTADO PARA SIMPLES NACIONAL '
  515.                 ||' PARA ' || :N15VBC;
  516.  
  517.    /* pis e cofins simples nacional */
  518.    SELECT OUT_PISCST, OUT_VPIS, OUT_PPIS, OUT_COFINSCST, OUT_VCOFINS, OUT_PCOFINS
  519.    FROM SUBROUT_CALCULA_PISCOFINS_SN(:L_VAR_TIPOFISCALSTR)
  520.    INTO :PIS_CST, :VPIS, :PIS_ALIQ, :COFINS_CST, :VCOFINS, :COFINS_ALIQ;
  521.  
  522.    END
  523.  
  524.  /* ******************* FIM BLOCO A1 ****************************************/
  525.  
  526.  
  527.  
  528.  
  529.    /* *************************************************************************
  530.              INSERE DADOS NA TABELA DE PRODUTOS
  531.   ************************************************************************** */
  532.  
  533.   H02NITEM  = ( SELECT COALESCE(MAX( P1.H02NITEM ),0) + 1 FROM PROD P1
  534.                   WHERE P1.I001AIDPK = :IN_NUMEROVENDA );
  535.  
  536.   I16VSEG   = :IN_I16VSEG;
  537.   I15VFRETE = :IN_I15VFRETE;
  538.   I17VDESC  = :IN_I17VDESC;
  539.   I17AVOUTRO = :IN_I17AVOUTRO;
  540.   I17BINDTOT = :IN_I17BINDTOT;
  541.   I02CPROD   = :IN_I02CPROD;
  542.   I03CEAN    = :IN_I03CEAN;
  543.   I04XPROD   = :IN_I04XPROD;
  544.   I05NCM     = :IN_I05NCM;
  545.   I09UCOM    = :IN_I09UCOM;
  546.   I10QCOM    = :IN_I10QCOM;
  547.   I10AVUNCOM  = :IN_I10AVUNCOM;
  548.   I12CEANTRIB = :IN_I12CEANTRIB;
  549.   I13UTRIB    = :IN_I13UTRIB;
  550.   I14QTRIB    = :IN_I14QTRIB;
  551.   I14AVUNTRIB  = :IN_I14AVUNTRIB;
  552.   IVLCUSTOPROD = :IN_VLCUSTOPROD;
  553.   I05ANVE      = :IN_I05ANVE;
  554.   I06EXTIPI    = :IN_I06EXTIPI;
  555.   I07IPPT      = :IN_I07IPPT;
  556.  
  557.  
  558.   INSERT INTO PROD (I001AIDPK, H02NITEM, I02CPROD, I03CEAN, I04XPROD, I05NCM,
  559.                     I08CFOP, I09UCOM, I10QCOM, I10AVUNCOM,
  560.                     I11VPROD, I12CEANTRIB, I13UTRIB, I14QTRIB, I14AVUNTRIB,
  561.                     I15VFRETE, I16VSEG, I17VDESC, I17AVOUTRO,
  562.                     I17BINDTOT, I05CCEST, IVLCUSTOPROD, I05ANVE, I06EXTIPI,
  563.                     I07IPPT, I08VTOTPROD)
  564.   VALUES (:IN_NUMEROVENDA, :H02NITEM, :I02CPROD, :I03CEAN, :I04XPROD, :I05NCM,
  565.           :I08CFOP, :I09UCOM, :I10QCOM, :I10AVUNCOM,
  566.           :I11VPROD, :I12CEANTRIB, :I13UTRIB, :I14QTRIB,
  567.           :I14AVUNTRIB, :I15VFRETE, :I16VSEG, :I17VDESC, :I17AVOUTRO,
  568.           :I17BINDTOT, :I05CCEST, :IVLCUSTOPROD, :I05ANVE,
  569.           :I06EXTIPI, :I07IPPT, :I08VTOTPROD)
  570.   RETURNING ID
  571.   INTO :ID;
  572.  
  573. /* *************************************************************************
  574.              INICIO DO BLOCO A2
  575.     - CALCULO DE TRIBUTOS E INCIDENTES FISCAIS
  576.     - GRAVAÇÃO DOS DADOS DE TRIBUTOS NA TABELA
  577.   ************************************************************************** */
  578.  
  579.   ICMSORIG   = :IN_ICMSORIG;
  580.   N13MODBC   = :IN_N13MODBC;
  581.   PICMS      = :IN_PICMS;
  582.  
  583.  INSERT INTO PROD_ICMS (ICMSORIG, CSTCSOSN, PICMS, PIS_CST, PIS_ALIQ,
  584.                         COFINS_CST, COFINS_ALIQ, CFOP,IBPT_ALIQMUN, IBPT_ALIQEST,
  585.                         IBPT_ALIQFED, IBPT_ALIQIMP, VICMS, VPIS, VCOFINS,
  586.                         N17BPFCP, N17CVFCP, N17AVBCFCP, N18MODBCST, N19PMVAST,
  587.                         N20PREDBCST, N21VBCST, N22PICMSST, N23AVBCFCPST, N23BPFCPST,
  588.                         N23DVFCPST, N28AVICMSDESON, N28MOTDESICMS, N26VBCSTRET,
  589.                         N26APST, N26BVICMSSUBSTITUTO,N27VICMSSTRET, N14PREDBC,
  590.                         N27AVBCFCPSTRET, N27BPFCPSTRET,  N27DVFCPSTRET,
  591.                          N34PREDBCEFET,  N35VBCEFET, N36PICMSEFET, N37VICMSEFET,
  592.                          N15VBC, VITEM12741)
  593.  
  594.  VALUES (:IN_ICMSORIG, :IN_CSTCSOSN, :IN_PICMS, :IN_PIS_CST, :IN_PIS_ALIQ,
  595.          :IN_COFINS_CST,:IN_COFINS_ALIQ, :IN_CFOP, :IN_IBPT_ALIQMUN,
  596.          :IN_IBPT_ALIQEST, :IN_IBPT_ALIQFED, :IN_IBPT_ALIQIMP, :IN_VICMS,
  597.          :IN_VPIS, :IN_VCOFINS, :IN_N17BPFCP, :IN_N17CVFCP, :IN_N17AVBCFCP,
  598.          :IN_N18MODBCST, :IN_N19PMVAST,:IN_N20PREDBCST, :IN_N21VBCST,
  599.          :IN_N22PICMSST, :IN_N23AVBCFCPST,  :IN_N23BPFCPST, :IN_N23DVFCPST,
  600.          :IN_N28AVICMSDESON, :IN_N28MOTDESICMS, :IN_N26VBCSTRET, :IN_N26APST,
  601.          :IN_N26BVICMSSUBSTITUTO, :IN_N27VICMSSTRET, :IN_N14PREDBC,
  602.          :IN_N27AVBCFCPSTRET, :IN_N27BPFCPSTRET, :IN_N27DVFCPSTRET,
  603.          :IN_N34PREDBCEFET, :IN_N35VBCEFET,  :IN_N36PICMSEFET, :IN_N37VICMSEFET,
  604.          :IN_N15VBC, :IN_VITEM12741)
  605.  
  606.  returning ICMSORIG, CSTCSOSN, PICMS, PIS_CST, PIS_ALIQ, COFINS_CST, COFINS_ALIQ,
  607.            CFOP, IBPT_ALIQMUN, IBPT_ALIQEST, IBPT_ALIQFED, IBPT_ALIQIMP, VICMS,
  608.            VPIS, VCOFINS, N17BPFCP, N17CVFCP, N17AVBCFCP, N18MODBCST, N19PMVAST,
  609.            N20PREDBCST,   N21VBCST, N22PICMSST, N23AVBCFCPST, N23BPFCPST,
  610.            N23DVFCPST, N28AVICMSDESON, N28MOTDESICMS, N26VBCSTRET, N26APST,
  611.            N26BVICMSSUBSTITUTO,   N27VICMSSTRET, N14PREDBC, N27AVBCFCPSTRET,
  612.            N27BPFCPSTRET, N27DVFCPSTRET, N34PREDBCEFET, N35VBCEFET, N36PICMSEFET,
  613.            N37VICMSEFET, N15VBC, VITEM12741
  614.  
  615.  INTO :ICMSORIG, :CSTCSOSN, :PICMS, :PIS_CST, :PIS_ALIQ, :COFINS_CST,
  616.       :COFINS_ALIQ, :CFOP, :IBPT_ALIQMUN, :IBPT_ALIQEST, :IBPT_ALIQFED,
  617.       :IBPT_ALIQIMP, :VICMS, :VPIS, :VCOFINS, :N17BPFCP, :N17CVFCP, :N17AVBCFCP,
  618.       :N18MODBCST, :N19PMVAST, :N20PREDBCST, :N21VBCST, :N22PICMSST,
  619.       :N23AVBCFCPST, :N23BPFCPST, :N23DVFCPST, :N28AVICMSDESON, :N28MOTDESICMS,
  620.       :N26VBCSTRET, :N26APST, :N26BVICMSSUBSTITUTO, :N27VICMSSTRET, :N14PREDBC,
  621.       :N27AVBCFCPSTRET, :N27BPFCPSTRET, :N27DVFCPSTRET, :N34PREDBCEFET,
  622.       :N35VBCEFET, :N36PICMSEFET, :N37VICMSEFET, :N15VBC, :VITEM12741;
  623.  
  624.  
  625.   /* *************************************************************************
  626.              CALCULO LUCRO, E PERCENTUAL DE LUCRO BRUTO NA VENDA
  627.   ************************************************************************** */
  628.  
  629.    SELECT SUM(  E1."108CALCLUCROBRT") ,
  630.           SUM( I08VTOTPROD ) ,
  631.           SUM( FLOOR( E1.I10QCOM )),
  632.           MAX("108CALCLUCROPCT")  FROM PROD E1
  633.    WHERE E1.I001AIDPK = :IN_NUMEROVENDA
  634.          AND E1.id = :ID
  635.    INTO :I17PROFITABILITVAL, :L_VAR_VTOTALPRODSERV,
  636.         :B008VOLUME, :L_VAR_PERCLUCROPROD;
  637.  
  638.    I16PROFITABILITRATE  = ( :I17PROFITABILITVAL / :L_VAR_VTOTALPRODSERV ) * 100;
  639.  
  640.    IF ( L_VAR_PERCLUCROPROD <= 10.000 ) THEN
  641.   BEGIN
  642.     LMESSAGE = TRIM(:LMESSAGE) || SLINEBREAK ||' VENDA NUMERO '||:IN_NUMEROVENDA
  643.                ||' - AVISO PERCENTUAL DE LUCRO '
  644.                ||:L_VAR_PERCLUCROPROD|| ', MARKUP DO PRODUTO É MENOR QUE 10%, '
  645.                ||'MUITO ABAIXO DO '
  646.                ||'PRATICADO NO COMERCIO, GERALMENTE ENTRE 30 A 60% DO VALOR DE '
  647.                ||'CUSTO';
  648.  
  649.   END
  650.  
  651.    UPDATE IDE SET B008VOLUME = :B008VOLUME,
  652.                   I16PROFITABILITRATE = :I16PROFITABILITRATE ,
  653.                   I17PROFITABILITVAL = :I17PROFITABILITVAL
  654.      WHERE (ID = :IN_NUMEROVENDA);
  655.  
  656. /* *************************************************************************
  657.                        GRAVA AS MENSAGENS DE ALERTA
  658.   ************************************************************************** */
  659.  
  660.    IF (CHARACTER_LENGTH(TRIM(:LMESSAGE)) > 0 OR (NOT :LMESSAGE IS NULL) ) THEN
  661.    UPDATE OR INSERT INTO WARNINGS (DATETIMEC, MENSAGEM, IDCAIXA, IDSESSAO, IDVENDA)
  662.     VALUES (CURRENT_TIMESTAMP,
  663.             TRIM(:LMESSAGE),
  664.             :B006IDMOVCAIXA,
  665.             :B007IDSESSAO,:IN_NUMEROVENDA)
  666.    MATCHING (IDCAIXA, IDSESSAO, IDVENDA);
  667.  
  668.    END
  669.    SUSPEND;
  670.  
  671. END
Tags: PLSQL
Add Comment
Please, Sign In to add comment