
-- StoreProcedure {lancamento_integra_itens()} Versao {155} Esquema {padrao} Descricao {Grava integracao itens do documento}
-- ------------------------------------------------------------

CREATE OR REPLACE FUNCTION padrao.lancamento_integra_itens()
  RETURNS trigger AS
$BODY$

DECLARE
 --Variaveis
   dia                   double precision;
   mes                   double precision;
   ano                   double precision;
   ultimoVcto            DATE;
   vencimento            DATE;
   valorNFsaldo          NUMERIC(14,2); -- Valor Total da NF
   valorPA               NUMERIC(14,2); -- Valor da Parcela
   indicePA              NUMERIC(14,5); -- Valor da PArcela equivalente ao total da venda
   valorComissao         NUMERIC(14,2); -- Valor da Comissao pelo recebimento

   custoTotalCalculo     NUMERIC(14,4);
   rateio                NUMERIC(14,4);
   custo                 NUMERIC(14,4);
   custoNF               NUMERIC(14,4);
   custoInventario       NUMERIC(14,4);
   custoDigitado         NUMERIC(14,4);
   custoReal             NUMERIC(14,4);


   Receber_Pagar          CHAR(1);
   aCampos                character varying[];
   aDados                 character varying[];
   aCamposcl              character varying[];
   aDadoscl               character varying[];
   aCamposSaldo           character varying[];
   aDadosSaldo            character varying[];
   aCamposPed             character varying[];
   aDadosPed              character varying[];
   aCamposPedC            character varying[];
   aDadosPedC             character varying[];
   sCampos                VARCHAR;
   sDados                 VARCHAR;
   rp_id_seq              INTEGER;



 --Faturamento
   d11_perc_comissao     NUMERIC(14,5);
   d12_natureza          CHAR(1); --Natureza: Entrada/Saida
   d13_tipo_docto        CHAR(1); --Tipo Docto: Nota Fiscao/Pedido/Orcamento
   d14_calcularICMS      CHAR(1); --Calcular ICMS: Sim/Nao
   d15_calcularIPI       CHAR(1); --Calcular IPI: Sim/Nao
   d16_calcularFUNRURAL  CHAR(1); --Calcular FUNRURAL: Sim/Nao
   d17_CFOP              VARCHAR; --Classificacao Fiscal(CFOP) da transacao
   d18_usarCFOP          CHAR(1); --Usar classificacao fiscal(CFOP) do:(1-Cadastro de Transacao/2-Cadastro do produtos
   d19_devolucao         CHAR(1); --devolucao de mercadorias (Sim - Nao)
   d115_NFE              CHAR(1); --Nota Fiscal Eletronica: (Sim/Nao)
   d118_classgerencialproduto   CHAR(1); --Class.Gerencial do Produto: (Sim/Nao)
   d119_NFe               CHAR(1); --Nota Fiscal eletronica: (Sim/Nao)
 --Estoque
   d26_atualiza_estoque  CHAR(1); --Atualiza estoque:(Sim/Nao)
   d27_tipo_mvto         CHAR(1); --Tipo de Movimento :0-Normal/1-Consignacao - Envio/ ...
   d28_alterarCM         CHAR(1); --Alterar Custo Medio : Sim/Nao
   d29_alterrrCUC        CHAR(1); --Alterar Custo Ultima compra: Sim/Nao
   d210_checarestoque    CHAR(1); --Checar Estoque: 0-Checar saldo negativo/1-Vetar saida com saldo negativo
 --Financeiro
   d49_lancarCRP         CHAR(1); --Lancar contas a receber/pagar: Sim/Nao
   d410_atualizarsaldoCC CHAR(1); --Atualizar saldo do C/C: Sim/Nao
   d411_tipolcto         CHAR(1); --Tipo lancamento: 0-Normal/1-Transferencia
   d412_natureza         CHAR(1); --Natureza: Creditol/Debito
   d413_comissao         CHAR(1); --Comissao: 0-Creditar comissao/1-Debitar comissao/2-Nao comissionar
   d414_conciliar        CHAR(1); --Conciliar automatico: Sim/Nao
 --Classificacao Gerencial
   d71_codigoclasse1      VARCHAR(5); --Codigo classificacacao gerencial 1
   d72_codigoclasse2      VARCHAR(5); --Codigo classificacacao gerencial 2
   d73_codigoclasse3      VARCHAR(5); --Codigo classificacacao gerencial 3

   r_transacao      RECORD;
   r_lctoitens      RECORD;
   r_condpgto       RECORD; -- Condicao de pgto
   r_condpgtop      RECORD; -- Condicao de pgto - parcelas
   r_doctoc         RECORD; -- Documento Cabecalho
   r_doctoI         RECORD; -- Documento Itens
   r_doctoPA        RECORD; -- Documento Pedidos Atendidos
   r_parameters     RECORD; -- Parametros padrao do sistema
   r_serie          RECORD; -- Cadastro de Serie de docto
   r_consistencia   RECORD; -- cosisencia somatario dos produtos
   r_produto        RECORD; -- Cadastro Produto
   r_cad            RECORD; -- Cadastro Cadastro Destinatario
   r_filial         RECORD; -- Cadastro Cadastro Emitente

BEGIN
-- SE FOR UMA EXCLUSAO
   IF TG_OP = 'DELETE'  THEN

     --Posiciona Cabecalho
       SELECT controle,fat_transacao_id, seriedocto_codigo, seriedocto_id, cad_filial_id, numero_docto,cad_cadastro_id,emissao,
              dataentradasaida, infocustodescpgto, statuslcto, fat_listapre_id, fat_listapre_tabela_tabela,
              infocustojurosvendor, infocustooutrasdesp, infocustofretepagar, frete_valor, despesa_valor, seguro_Valor,
              icmssubst_valor,totalliquidoprodutos, totalprodutos, valortotal_docto, descontodocto_valor
       INTO r_doctoc
       FROM fat_docto_c
       WHERE controle = OLD.fat_docto_c_controle;

      --checa existencia de produtos atendido
      SELECT fat_produto_id, fat_docto_pc_controle, fat_docto_c_controle,qtde
        INTO r_doctoPA
        FROM fat_docto_pa
       WHERE fat_docto_pc_controle = OLD.fat_docto_c_controle
         AND fat_produto_id        = OLD.fat_produto_id;

      --RAISE DEBUG '(Ctrl : % Produto Codigo: % - Qtde Atendida %" )', OLD.fat_docto_c_controle, OLD.fat_produto_id, r_doctoPA.qtde;
      --RAISE DEBUG 'NAO SERA POSSIVEL A EXCLUSAO, EXISTE PRODUTO ATENDIDO PARA ESSE DOCUMENTO (Ctrl Atendido: % Produto Codigo: % - Qtde Atendida %" )', r_doctoPA.fat_docto_c_controle, r_doctoPA.fat_produto_id, r_doctoPA.qtde;

      IF FOUND  THEN
         RAISE EXCEPTION 'NAO SERA POSSIVEL A EXCLUSAO, EXISTE PRODUTO ATENDIDO PARA ESSE DOCUMENTO (Ctrl Atendido: % Produto Codigo: % - Qtde Atendida %" )', r_doctoPA.fat_docto_c_controle, r_doctoPA.fat_produto_id, r_doctoPA.qtde;
      END IF;



	  EXECUTE 'DELETE FROM fat_produto_movto WHERE fat_docto_c_controle = '|| OLD.fat_docto_c_controle || 'and fat_produto_id = ' || OLD.fat_produto_id;

	  EXECUTE 'DELETE FROM fat_docto_pi WHERE fat_docto_pc_fat_docto_c_controle = '|| OLD.fat_docto_c_controle || 'and fat_produto_id = ' || OLD.fat_produto_id;

	  EXECUTE 'DELETE FROM fat_docto_pa WHERE fat_docto_c_controle = '|| OLD.fat_docto_c_controle || 'and fat_produto_id = ' || OLD.fat_produto_id;

      --RAISE NOTICE 'Executando gravaEstoque(%,%,%,%)...', OLD.fat_produto_id, r_doctoc.cad_filial_id, r_doctoc.dataentradasaida, false;

	  IF NOT padrao.gravaEstoque(OLD.fat_produto_id, r_doctoc.cad_filial_id, r_doctoc.dataentradasaida, false)THEN
	    RAISE EXCEPTION 'Nao foi possivel persistir estoque do produto (Cod.:% NF:% - CTRL:%)!', OLD.fat_produto_id,OLD.numero_docto ,OLD.fat_docto_c_controle ;
	  END IF;

      RETURN NULL;
   END IF;

 --Posiciona Cabecalho
   SELECT controle,fat_transacao_id, seriedocto_codigo, seriedocto_id, cad_filial_id, numero_docto,cad_cadastro_id,emissao,
          dataentradasaida, infocustodescpgto, statuslcto, fat_listapre_id, fat_listapre_tabela_tabela,
          infocustojurosvendor, infocustooutrasdesp, infocustofretepagar, frete_valor, despesa_valor, seguro_Valor,
          icmssubst_valor,totalliquidoprodutos, totalprodutos, valortotal_docto, descontodocto_valor
   INTO r_doctoc
   FROM fat_docto_c
   WHERE controle = NEW.fat_docto_c_controle;

-- Posiciona Cadastro (Destinatario)
   SELECT cad_cadastro.id, razaosocial, nomefantasia, pessoa, cad_mun_id,padrao.cad_mun.municipio AS municipio,padrao.cad_mun.uf AS uf,contribuinteicms, calculoicmssobre_ipi,
          CASE WHEN contribuinteicms = 'Sim' THEN 1 ELSE 2 END AS tipoa,  CASE WHEN contribuinteicms = 'Sim' THEN 3 ELSE 4 END AS tipoadif
     INTO r_cad
     FROM cad_cadastro
     LEFT JOIN padrao.cad_mun ON cad_cadastro.cad_mun_id = padrao.cad_mun.id
    WHERE cad_cadastro.id = r_doctoc.cad_cadastro_id;

-- Posiciona Filial (Emitente)
   SELECT cad_filial.id, razaosocial, nomefantasia, pessoa, cad_mun_id,padrao.cad_mun.municipio AS municipio, padrao.cad_mun.uf AS uf,regimetributacao
     INTO r_filial
     FROM cad_filial
     LEFT JOIN padrao.cad_mun ON cad_filial.cad_mun_id = padrao.cad_mun.id
    WHERE cad_filial.id = r_doctoc.cad_filial_id;

--Posiciona Serie
   SELECT codigo, natureza, tipodocto
	 INTO r_serie
	 FROM padrao.fat_serie
	WHERE id = r_doctoc.seriedocto_id;

-- Posiciona parameters
   SELECT *
   INTO r_parameters
   FROM fat_parameters
   LIMIT 1 ;




-- Documento Cancelado, agrupado, Denegado
    IF TG_OP = 'UPDATE'  THEN
	      IF r_doctoc.statuslcto = 7
	         OR r_doctoc.statuslcto = 8
	         OR r_doctoc.statuslcto = 95
	         OR r_doctoc.statuslcto = 135
	         OR r_doctoc.statuslcto = 136
	         OR r_doctoc.statuslcto = 205
	         OR r_doctoc.statuslcto = 302 THEN
		     EXECUTE 'DELETE FROM fat_docto_pa WHERE fat_docto_c_controle = '|| OLD.fat_docto_c_controle || 'and fat_produto_id = ' || OLD.fat_produto_id;
		  END IF;
	      EXECUTE 'DELETE FROM fat_produto_movto WHERE fat_docto_c_controle = '|| OLD.fat_docto_c_controle || 'and fat_produto_id = ' || OLD.fat_produto_id;


		  --IF NOT padrao.gravaEstoque(OLD.fat_produto_id, OLD.cad_filial_id, OLD.dataentradasaida, false)THEN
		  --  RAISE EXCEPTION 'Nao foi possivel persistir estoque do produto (Cod.:% NF:% - CTRL:%)!', OLD.fat_produto_id,OLD.numero_docto ,OLD.fat_docto_c_controle ;
		  --END IF;

	      IF r_doctoc.statuslcto = 7
	         OR r_doctoc.statuslcto = 8
	         OR r_doctoc.statuslcto = 95
	         OR r_doctoc.statuslcto = 135
	         OR r_doctoc.statuslcto = 136
	         OR r_doctoc.statuslcto = 205
	         OR r_doctoc.statuslcto = 302 THEN
	         IF NOT padrao.gravaEstoque(OLD.fat_produto_id, OLD.cad_filial_id, OLD.dataentradasaida, false)THEN
	           RAISE EXCEPTION 'Nao foi possivel persistir estoque do produto (Cod.:% NF:% - CTRL:%)!', OLD.fat_produto_id,OLD.numero_docto ,OLD.fat_docto_c_controle ;
	         END IF;
	         RETURN NULL;
	      END IF;
    END IF;
-- LOOP
   FOR r_transacao IN SELECT * FROM view_transacao WHERE codigo_transacao = r_doctoc.fat_transacao_id ORDER BY diretiva LOOP
       --RAISE NOTICE 'Propriedade:% (%)',  r_transacao.diretiva, r_transacao.propriedade;
    -- diretiva/Regra 11 -( (%) Comissao vendedores)
       IF r_transacao.diretiva = 11 THEN
       	  d11_perc_comissao = CAST(r_transacao.propriedade AS DECIMAL(14,5));
       END IF;

    -- diretiva/Regra 12 - ( Natureza: Entrada/Saida)
       IF r_transacao.diretiva = 12 THEN
       	  d12_natureza = substring(r_transacao.propriedade from 1 for 1);
       END IF;

    -- diretiva/Regra 13 - ( Tipo Docto: Nota Fiscao/Pedido/Orcamento)
       IF r_transacao.diretiva = 13 THEN
       	  d13_tipo_docto = substring(r_transacao.propriedade from 1 for 1);
       END IF;

    -- diretiva/Regra 14 - ( Calcular ICMS: Sim/Nao)
       IF r_transacao.diretiva = 14 THEN
       	  d14_calcularICMS = substring(r_transacao.propriedade from 1 for 1);
       END IF;

    -- diretiva/Regra 15 - ( Calcular IPI: Sim/Nao)
       IF r_transacao.diretiva = 15 THEN
       	  d15_calcularIPI = substring(r_transacao.propriedade from 1 for 1);
       END IF;

    -- diretiva/Regra 16 - ( Calcular FUNRURAL: Sim/Nao)
       IF r_transacao.diretiva = 16 THEN
       	  d16_calcularFUNRURAL = substring(r_transacao.propriedade from 1 for 1);
       END IF;

    -- diretiva/Regra 17 - ( Classificacao Fiscal(CFOP))
       IF r_transacao.diretiva = 17 THEN
       	  d17_CFOP = Trim(both ' ' from r_transacao.propriedade);
       END IF;

    -- diretiva/Regra 18 - ( Usar classificacao fiscal(CFOP) do:(1-Cadastro de Transacao/2-Cadastro do produtos )
       IF r_transacao.diretiva = 18 THEN
       	  d18_usarCFOP = substring(r_transacao.propriedade from 1 for 1);
       END IF;
	-- diretiva/Regra 19 - (Devolucao:( Sim/Nao )
       IF r_transacao.diretiva = 19 THEN
       	  d19_devolucao = substring(r_transacao.propriedade from 1 for 1);
       END IF;
     -- diretiva/Regra 115 - (Nota Fiscal Eletronica: Sim/Nao)
       IF r_transacao.diretiva = 115 THEN
       	  d115_NFE = substring(r_transacao.propriedade from 1 for 1);
       END IF;
       -- diretiva/Regra 118 - (Class.Gerencial do Produto: Sim/Nao)
       IF r_transacao.diretiva = 118 THEN
       	  d118_classgerencialproduto = substring(r_transacao.propriedade from 1 for 1);
       END IF;
       -- diretiva/Regra 119 - (Nota Fiscal eletornica: Sim/Nao)
       IF r_transacao.diretiva = 119 THEN
       	  d119_NFe = substring(r_transacao.propriedade from 1 for 1);
       END IF;
    -- diretiva/Regra 26 - ( Atualiza estoque: Sim/Nao.)
       IF r_transacao.diretiva = 26 THEN
       	  d26_atualiza_estoque = substring(r_transacao.propriedade from 1 for 1);
       END IF;
 	-- diretiva/Regra 27 - ( Tipo de Movimentacao: 0-Normal/1-Consignacao - Envio/ ...)
       IF r_transacao.diretiva = 27 THEN
       	  d27_tipo_mvto = substring(r_transacao.propriedade from 1 for 1);
       END IF;

  	-- diretiva/Regra 28 - ( Alterar Custo Medio: Sim/Nao)
       IF r_transacao.diretiva = 28 THEN
       	  d28_alterarCM = substring(r_transacao.propriedade from 1 for 1) ;
       END IF;

  	-- diretiva/Regra 29 - ( Alterar Custo Ultima compra: Sim/Nao)
       IF r_transacao.diretiva = 29 THEN
       	  d29_alterrrCUC = substring(r_transacao.propriedade from 1 for 1) ;
       END IF;
   -- diretiva/Regra 210 - ( Checar Saldo Negativo:  0-Checar saldo negativo/1-Vetar saida com saldo negativo)
       IF r_transacao.diretiva = 210 THEN
       	  d210_checarestoque = substring(r_transacao.propriedade from 1 for 1) ;
       END IF;
  	-- diretiva/Regra 49 - ( Lancar contas a receber/pagar: Sim/Nao)
       IF r_transacao.diretiva = 49 THEN
       	 d49_lancarCRP =  substring(r_transacao.propriedade from 1 for 1);
       END IF;
    -- diretiva/Regra 71 - ( -codigo classificacacao gerencial 1 )
       IF r_transacao.diretiva = 71 THEN
       	 d71_codigoclasse1 =  r_transacao.propriedade;
       END IF;
    -- diretiva/Regra 72 - ( -codigo classificacacao gerencial 2 )
       IF r_transacao.diretiva = 72 THEN
       	 d72_codigoclasse2 =  r_transacao.propriedade;
       END IF;
     -- diretiva/Regra 73 - ( -codigo classificacacao gerencial 3 )
       IF r_transacao.diretiva = 73 THEN
       	 d73_codigoclasse3 =  r_transacao.propriedade;
       END IF;
   	-- diretiva/Regra 410 - ( Atualiza saldo do C/C: Sim/Nao)
       IF r_transacao.diretiva = 410 THEN
       	  d410_atualizarsaldoCC = substring(r_transacao.propriedade from 1 for 1)  ;
       END IF;

  	-- diretiva/Regra 411 - ( Tipo lancamento: 0-Normal/1-Transferencia)
       IF r_transacao.diretiva = 411 THEN
       	  d411_tipolcto =  substring(r_transacao.propriedade from 1 for 1);
       END IF;

  	-- diretiva/Regra 412 - ( Natureza: Creditol/Debito)
       IF r_transacao.diretiva = 412 THEN
       	  d412_natureza = substring(r_transacao.propriedade from 1 for 1);
       END IF;

  	-- diretiva/Regra 413 - ( Comissao: 0-Creditar comissao/1-Debitar comissao/2-Nao comissionar)
       IF r_transacao.diretiva = 413 THEN
       	  d413_comissao =  substring(r_transacao.propriedade from 1 for 1);
       END IF;

    -- diretiva/Regra 414 - (Regra Conciliar automatico: Sim/Nao)
       IF r_transacao.diretiva = 414 THEN
       	  d414_conciliar = substring(r_transacao.propriedade from 1 for 1);
       END IF;
   END LOOP;


  --RAISE EXCEPTION 'Estqoue:% produto: %	custo:% (%) total:%',d26_atualiza_estoque,new.fat_produto_id, custoTotalCalculo, rateio,NEW.valor_total_liquido;

   /****************************************************
    * Estoque / Movimentacao de produtos
    ****************************************************/
	-- Grava ProdutoMovto
   aCampos =  '{fat_produto_id,
	            fat_docto_c_controle,
	            cad_filial_id,
                seriedocto_codigo,
	            numero_docto,
	            cad_cadastro_id,
	            fat_transacao_id,
	            datamovto,
	            natureza,
	            tipomovto,
                devolucao,
	            atualizaestoque,
                alteracustomedio,
                alteracustoultimacompra,
	            fat_almoxarifado_id_origem,
	            fat_almoxarifado_id_destino,
                qtde,
	            valorunitario,
	            valortotal,
	            custoinventario,
                custoinventariototal,
                custonf,
                custodigitado,
                custoreal,
                customedio,
                customediototal,
                saldo,
                saldo2,
                saldoinventario,
                usuarioalteracao,
                usuarioinclusao}';

    --RAISE EXCEPTION 'chegou ate aqui)!custo_inventario: %, custo_nf:%, custo_digitado:%, custo_real:%',new.custo_inventario,NEW.custo_nf,NEW.custo_digitado,NEW.custo_real ;

    aDados  =  '{'|| to_char(NEW.fat_produto_id,'99999')                                ||','
    			  || to_char(NEW.fat_docto_c_controle,  '99999999999999999999')               ||','
    			  || to_Char(r_doctoc.cad_filial_id, '999')                                   ||','
    			  || Trim(r_serie.codigo)                                                    ||','
    			  || to_Char(r_doctoc.numero_docto, '99999999999')                               ||','
    			  || to_char(r_doctoc.cad_cadastro_id, '999999999')                                ||','
    			  || to_Char(r_doctoc.fat_transacao_id, '99999')                              ||','
    			  || to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy')                   ||','
    			  || d12_natureza                                                        ||','
    			  || d27_tipo_mvto                                                       ||','
                  || (CASE WHEN d19_devolucao = 'S' THEN 'true' ELSE 'false' END)        ||','
                  || (CASE WHEN d26_atualiza_estoque = 'S' THEN 'true' ELSE 'false' END) ||','
    			  || (CASE WHEN d28_alterarCM = 'S' THEN 'true' ELSE 'false' END)        ||','
    			  || (CASE WHEN d29_alterrrCUC = 'S' THEN 'true' ELSE 'false' END)       ||','
    			  || '0'                                                                 ||','
    			  || '0'                                                                 ||','
    			  || to_Char(NEW.qtde, '9999999.9999')                                   ||','
    			  || to_Char(Coalesce(NEW.valor_unitario_liquido,NEW.valor_unitario) , '999999999.9999')                 ||','
    			  || to_Char(Coalesce(NEW.valor_total_liquido,NEW.valor_total), '999999999.9999')                    ||','
    			  || (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_inventario,0), '999999999.999')           ELSE '0' END) ||','
				  || (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_inventario,0)*NEW.qtde, '999999999.999')  ELSE '0' END) ||','
				  || (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_nf,0), '999999999.999')                   ELSE '0' END) ||','
				  || (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_digitado,0), '999999999.999')             ELSE '0' END) ||','
				  || (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_real,0), '999999999.999')                 ELSE '0' END) ||','
    		      || '0'                                                                 ||','
    			  || '0'                                                                 ||','
    			  || '0'                                                                 ||','
    			  || '0'                                                                 ||','
    			  || '0'                                                                 ||','
    			  || (CASE WHEN NEW.usuarioalteracao IS NULL THEN  '??' ELSE  NEW.usuarioalteracao END) ||','
 			      || (CASE WHEN NEW.usuarioinclusao  IS NULL THEN  '??' ELSE  NEW.usuarioinclusao  END)  ||'}';



 	 --RAISE EXCEPTION 'custos nf:% digitado:% real:% custo inventario:% custo inventario total:%', to_Char(NEW.custo_nf, '999999999D999'),  to_Char(NEW.custo_digitado, '999999999D999'),NEW.custo_real,NEW.custo_inventario, NEW.custo_inventario*NEW.qtde ;
 	 --RAISE EXCEPTION 'custos nf:% digitado:% real:% custo inventario:% custo inventario total:%', to_Char(custoNF, '999999999D999'),  to_Char(custoDigitado, '999999999D999'),custoReal,custoInventario, custoInventario*NEW.qtde ;
     ----RAISE NOTICE 'aCampos: (%)',     aCampos;
     --RAISE EXCEPTION 'aDados: (%)',      aDados;

     IF aDados IS NULL THEN
	    RAISE EXCEPTION 'Nao sera possivel persistir movimentacao do produto.
                         Dados para movimentacao esta incompleto.Verifique Campos <NULL>:
                        (fat_produto_id:%
                         fat_docto_c_controle:%
                         cad_filial_id:%
                         seriedocto_codigo:%
                         numero_docto:%
                         cad_cadastro_id:%
                         fat_transacao_id:%
                         datamovto:%
                         natureza:%
                         tipomovto:%
                         devolucao:%
                         atualizaestoque:%
                         alteracustomedio:%
                         alteracustoultimacompra:%
                         fat_almoxarifado_id_origem:%
                         fat_almoxarifado_id_destino:%
                         qtde:%
                         valorunitario:%
                         valortotal:%
                         custoinventario:%
                         custoinventariototal:%
                         custonf:%
                         custodigitado:%
                         custoreal:%
                         customedio:%
                         customediototal:%
                         saldo:%
                         saldo2:%
                         saldoinventario:%
                         usuarioalteracao:%
                         usuarioinclusao:%

                        )!',
                        to_char(NEW.fat_produto_id,':%9999')                                ,
                        to_char(NEW.fat_docto_c_controle,  '99999999999999999999')             ,
                        to_Char(r_doctoc.cad_filial_id, '999')                                  ,
	                    Trim(r_serie.codigo)                                                    ,
	                    to_Char(r_doctoc.numero_docto, '99999999')                              ,
	                    to_char(r_doctoc.cad_cadastro_id, '999999999')                               ,
	                    to_Char(r_doctoc.fat_transacao_id, '99999')                             ,
	                    to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy')                   ,
	                    d12_natureza                                                       ,
	                    d27_tipo_mvto                                                      ,
	                    (CASE WHEN d19_devolucao = 'S' THEN 'true' ELSE 'false' END)       ,
                        (CASE WHEN d26_atualiza_estoque = 'S' THEN 'true' ELSE 'false' END),
	                    (CASE WHEN d28_alterarCM = 'S' THEN 'true' ELSE 'false' END)       ,
	                    (CASE WHEN d29_alterrrCUC = 'S' THEN 'true' ELSE 'false' END)      ,
	                    '0'                                                                ,
	                    '0'                                                                ,
	                    to_Char(NEW.qtde, '9999999.9999')                                  ,
	                    to_Char(NEW.valor_unitario_liquido, '999999999.999')               ,
	                    to_Char(NEW.valor_total_liquido, '999999999.999')                  ,
	                    (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_inventario,0), '999999999.999')           ELSE '0' END),
				        (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_inventario,0)*NEW.qtde, '999999999.999')  ELSE '0' END),
				        (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_nf,0), '999999999.999')                   ELSE '0' END),
				        (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_digitado,0), '999999999.999')             ELSE '0' END),
				        (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_real,0), '999999999.999')                 ELSE '0' END),
	                    '0'                                                                 ,
	                    '0'                                                                 ,
	                    '0'                                                                 ,
	                    '0'                                                                 ,
	                    '0'                                                                 ,
	                    (CASE WHEN NEW.usuarioalteracao IS NULL THEN  '??' ELSE  NEW.usuarioalteracao END) ,
	                    (CASE WHEN NEW.usuarioinclusao  IS NULL THEN  '??' ELSE  NEW.usuarioinclusao  END) ;
	        END IF;


	 IF NOT padrao.gravamovtoestoque(aCampos, aDados)THEN
	    RAISE EXCEPTION 'nao possivel persistir movimentacao produto ->gravaMovtoEstoque<- (Cod.:% NF:% - CTRL:% ARRAY:%)!', NEW.fat_produto_id,r_doctoc.numero_docto ,NEW.fat_docto_c_controle, aDados ;
	 END IF;


   /****************************************************
    * Estoque / Movimentacao de produtos
    ****************************************************/
   -- Grava ProdutoSaldo
	aCamposSaldo =  '{fat_produto_id,
	                  cad_filial_id,
	                  almoxarifado_codigo,
                      ultimaentrada,
	                  ultimasaida,
	                  ultimomovto,
                      usuarioalteracao,
                      usuarioinclusao}';

    aDadosSaldo  =  '{'|| to_char(NEW.fat_produto_id,'99999')                                 ||','
    			       || to_Char(r_doctoc.cad_filial_id, '999')                                   ||','
    			       || '0'                                                                 ||','
    			       || CASE WHEN d19_devolucao <> 'S' AND d12_natureza = 'E'THEN to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy') ELSE '00/00/0000' END ||','
    			       || CASE WHEN d19_devolucao <> 'S' AND d12_natureza = 'S'THEN to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy') ELSE '00/00/0000' END ||','
    			       || to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy')                   ||','
    			  	   || (CASE WHEN NEW.usuarioalteracao IS NULL THEN  '??' ELSE  NEW.usuarioalteracao END) ||','
 			           || (CASE WHEN NEW.usuarioinclusao  IS NULL THEN  '??' ELSE  NEW.usuarioinclusao  END)  ||'}';


     --RAISE NOTICE 'aCamposSaldo: (%)',     aCamposSaldo;
     --RAISE NOTICE 'aDadosSaldo: (%)',      aDadosSaldo;


     --RAISE EXCEPTION 'teste: %',to_char(NEW.fat_produto_id,'99999');


     IF aDadosSaldo IS NULL THEN
	    RAISE EXCEPTION 'Nao sera possivel persistir saldo do produto.
                         Dados para persistencia esta incompleto. Verifique campo <NULL>:
						( fat_produto_id:%
                          cad_filial_id:%
                          almoxarifado_codigo:%
                          ultimaentrada:%
                          ultimasaida:%
                          ultimomovto:%
                          usuarioalteracao:%
                          usuarioinclusao:% )',
                          to_char(NEW.fat_produto_id,'99999')  ,
                          to_Char(r_doctoc.cad_filial_id, '999')   ,
                          '0'                                 ,
                          CASE WHEN d19_devolucao <> 'S' AND d12_natureza = 'E'THEN to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy') ELSE '00/00/1999' END ,
                          CASE WHEN d19_devolucao <> 'S' AND d12_natureza = 'S'THEN to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy') ELSE '00/00/1999' END ,
                          to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy')  ,
                          (CASE WHEN NEW.usuarioalteracao IS NULL THEN  '??' ELSE  NEW.usuarioalteracao END) ,
                          (CASE WHEN NEW.usuarioinclusao  IS NULL THEN  '??' ELSE  NEW.usuarioinclusao  END) ;



	 END IF;


	 IF NOT padrao.gravaSaldo(aCamposSaldo, aDadosSaldo)THEN
	    RAISE EXCEPTION 'Nao foi possivel persistir saldo do produto ->gravaSaldo<-(Cod.:% NF:% - CTRL:% ARRAY:%)!', NEW.fat_produto_id,r_doctoc.numero_docto ,NEW.fat_docto_c_controle , aDados;
	 END IF;

	 --RAISE EXCEPTION 'Nao foi possivel persistir saldo do produto ->gravaSaldo<-(Cod.:% NF:% - CTRL:% ARRAY:%)!', NEW.fat_produto_id,r_doctoc.numero_docto ,NEW.fat_docto_c_controle , aDados;

	 IF NOT padrao.gravaEstoque(NEW.fat_produto_id, r_doctoc.cad_filial_id, r_doctoc.dataentradasaida, false)THEN
	    RAISE EXCEPTION 'Nao foi possivel persistir estoque do produto ->gravaEstoque<- (Cod.:% NF:% - CTRL:%!', NEW.fat_produto_id,r_doctoc.numero_docto ,NEW.fat_docto_c_controle ;
	 END IF;



	 --
   -- grava consignacao/entrega futura/etc
   --
--      IF d27_tipo_mvto = '1' OR d27_tipo_mvto = '3' OR d27_tipo_mvto = '5' OR d27_tipo_mvto = '7' OR d27_tipo_mvto = 'L' OR d27_tipo_mvto = 'N' OR d27_tipo_mvto = 'O' OR d27_tipo_mvto = 'P' THEN
      IF d27_tipo_mvto IN('1', '3', '5' , '7' , 'L' , 'N', 'O' , 'P') THEN

	        aCamposPedC =  '{ fat_docto_c_controle,
		                   tipo,
		                   cad_cadastro_id,
		                   cad_filial_id,
		                   data_p,
		                   status_p}';


		      aDadosPedC  =   '{' || to_char(NEW.fat_docto_c_controle,  '9999999999')   ||','
		     			         || cast(d27_tipo_mvto ||d12_natureza as varchar)  ||','
		     			         || to_Char(r_doctoc.cad_cadastro_id, '999999999')  ||','
		     			         || to_Char(r_doctoc.cad_filial_id, '999')      ||','
		     			         || to_Char(r_doctoc.emissao::DATE, 'dd/MM/yyyy')     ||','
		     			         || 'P'                                    ||'}';

		     --RAISE NOTICE 'aCamposPedC: (%)',     aCamposPed;
		     --RAISE NOTICE 'aDadosPedC: (%)',      aDados;

		     IF NOT padrao.gravaPC(aCamposPedC, aDadosPedC)THEN
		        RAISE EXCEPTION 'nao possivel persistir saldo ds pedidos-fat_docto_pc (NF:% - CTRL:% - Tipo:%)!',NEW.numero_docto , New.controle, cast(d27_tipo_mvto ||d12_natureza as varchar) ;
		     END IF;


	       aCamposPed =  '{ fat_docto_pc_fat_docto_c_controle,
							fat_produto_id,
							cad_filial_id,
		                   	tipo,
							data_p,
		                   	qtde,
		                   	qtde_atendida,
		                   	qtde_naoatendida,
		                   	qtde_cancelada,
		                    qtde_pendente }';


		      aDadosPed  =   '{'|| to_char(NEW.fat_docto_c_controle,  '99999999999999')   ||','
		      					|| to_char(NEW.fat_produto_id,'99999')    ||','
		      					|| to_Char(r_doctoc.cad_filial_id, '999')      ||','
		     			        || cast(d27_tipo_mvto ||d12_natureza as varchar)  ||','
		     			        || to_Char(r_doctoc.emissao::DATE, 'dd/MM/yyyy')  ||','
		     			        || to_Char(NEW.qtde, '9999999.9999')              ||','
		     			        || to_Char(0, '9999999.9999')              ||','
		     			        || to_Char(0, '9999999.9999')              ||','
		     			        || to_Char(0, '9999999.9999')              ||','
		     			        || to_Char(NEW.qtde, '9999999.9999')       ||'}';

		     --RAISE NOTICE 'aCamposPed: (%)',     aCamposPed;
		     --RAISE NOTICE 'aDadosPed: (%)',      aDados;

		     IF NOT padrao.gravaPI(aCamposPed, aDadosPed)THEN
		        RAISE EXCEPTION 'nao possivel persistir itens dos pedidos-fat_docto_pi (NF:% - CTRL:% - Tipo:%)!',NEW.numero_docto , New.controle, cast(d27_tipo_mvto ||d12_natureza as varchar) ;
		     END IF;
        END IF;




	/*******************************************
	* grava regtorno consignacao
	********************************************/
	IF d27_tipo_mvto = 'C' THEN
		-- Grava ProdutoMovto
		aCampos =  '{	fat_produto_id,
			    		fat_docto_c_controle,
			    		cad_filial_id,
						seriedocto_codigo,
					    numero_docto,
					    cad_cadastro_id,
					    fat_transacao_id,
					    datamovto,
					    natureza,
					    tipomovto,
						devolucao,
					    atualizaestoque,
						alteracustomedio,
						alteracustoultimacompra,
					    fat_almoxarifado_id_origem,
					    fat_almoxarifado_id_destino,
						qtde,
					    valorunitario,
					    valortotal,
					    custoinventario,
						custoinventariototal,
						custonf,
						custodigitado,
						custoreal,
						customedio,
						customediototal,
						saldo,
						saldo2,
						saldoinventario,
						usuarioalteracao,
						usuarioinclusao	}';


	    aDados  =  '{'	|| to_char(NEW.fat_produto_id,'9999999')                                		||','
				  		|| to_char(NEW.fat_docto_c_controle,  '99999999999999999999')               ||','
				  		|| to_Char(r_doctoc.cad_filial_id, '999')                                   ||','
				  		|| Trim(r_serie.codigo)                                                     	||','
				  		|| to_Char(r_doctoc.numero_docto, '99999999')                               ||','
				  		|| to_char(r_doctoc.cad_cadastro_id, '999999999')                                ||','
				  		|| to_Char(r_doctoc.fat_transacao_id, '99999')                              ||','
				  		|| to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy')                   ||','
				  		|| (CASE WHEN d12_natureza ='S' THEN 'E' ELSE 'S' END)                   	||','
				  		|| '2'                                                      				||','
			  			|| (CASE WHEN d19_devolucao = 'S' THEN 'true' ELSE 'false' END)       		||','
			  			|| (CASE WHEN d26_atualiza_estoque = 'S' THEN 'true' ELSE 'false' END)		||','
				  		|| (CASE WHEN d28_alterarCM = 'S' THEN 'true' ELSE 'false' END)        		||','
				  		|| (CASE WHEN d29_alterrrCUC = 'S' THEN 'true' ELSE 'false' END)       		||','
				  		|| '0'                                                                 		||','
				  		|| '0'                                                                 		||','
				  		|| to_Char(NEW.qtde, '9999999.9999')                                   		||','
				  		|| to_Char(NEW.valor_unitario_liquido, '999999999.999')                 	||','
				  		|| to_Char(NEW.valor_total_liquido, '999999999.999')                    			||','
						|| (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_inventario,0), '999999999.999')           ELSE '0' END) ||','
						|| (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_inventario,0)*NEW.qtde, '999999999.999')  ELSE '0' END) ||','
						|| (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_nf,0), '999999999.999')                   ELSE '0' END) ||','
						|| (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_digitado,0), '999999999.999')             ELSE '0' END) ||','
						|| (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_real,0), '999999999.999')                 ELSE '0' END) ||','
					    || '0'                                                                 ||','
						|| '0'                                                                 ||','
						|| '0'                                                                 ||','
						|| '0'                                                                 ||','
						|| '0'                                                                 ||','
						|| (CASE WHEN NEW.usuarioalteracao IS NULL THEN  '??' ELSE  NEW.usuarioalteracao END) ||','
						|| (CASE WHEN NEW.usuarioinclusao  IS NULL THEN  '??' ELSE  NEW.usuarioinclusao  END)  ||'}';

	     IF aDados IS NULL THEN
		    RAISE EXCEPTION 'Nao sera possivel persistir movimentacao do produto.
				 Dados para movimentacao esta incompleto.Verifique Campos <NULL>:
				(fat_produto_id:%
				 fat_docto_c_controle:%
				 cad_filial_id:%
				 seriedocto_codigo:%
				 numero_docto:%
				 cad_cadastro_id:%
				 fat_transacao_id:%
				 datamovto:%
				 natureza:%
				 tipomovto:%
				 devolucao:%
				 atualizaestoque:%
				 alteracustomedio:%
				 alteracustoultimacompra:%
				 fat_almoxarifado_id_origem:%
				 fat_almoxarifado_id_destino:%
				 qtde:%
				 valorunitario:%
				 valortotal:%
				 custoinventario:%
				 custoinventariototal:%
				 custonf:%
				 custodigitado:%
				 custoreal:%
				 customedio:%
				 customediototal:%
				 saldo:%
				 saldo2:%
				 saldoinventario:%
				 usuarioalteracao:%
				 usuarioinclusao:%

				)!',
				to_char(NEW.fat_produto_id,':%999999')                                ,
				to_char(NEW.fat_docto_c_controle,  '99999999999999999999')             ,
				to_Char(r_doctoc.cad_filial_id, '999')                                  ,
				    Trim(r_serie.codigo)                                                    ,
				    to_Char(r_doctoc.numero_docto, '99999999')                              ,
				    to_char(r_doctoc.cad_cadastro_id, '999999999')                               ,
				    to_Char(r_doctoc.fat_transacao_id, '99999')                             ,
				    to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy')                   ,
				    (CASE WHEN d12_natureza ='S' THEN 'E' ELSE 'S' END)               ,
				    '2'                                                      ,
				    (CASE WHEN d19_devolucao = 'S' THEN 'true' ELSE 'false' END)       ,
				(CASE WHEN d26_atualiza_estoque = 'S' THEN 'true' ELSE 'false' END),
				    (CASE WHEN d28_alterarCM = 'S' THEN 'true' ELSE 'false' END)       ,
				    (CASE WHEN d29_alterrrCUC = 'S' THEN 'true' ELSE 'false' END)      ,
				    '0'                                                                ,
				    '0'                                                                ,
				    to_Char(NEW.qtde, '9999999.9999')                                  ,
				    to_Char(NEW.valor_unitario_liquido, '999999999.999')               ,
				    to_Char(NEW.valor_total_liquido, '999999999.999')                  ,
				    (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_inventario,0), '999999999.999')           ELSE '0' END),
				    (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_inventario,0)*NEW.qtde, '999999999.999')  ELSE '0' END),
				    (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_nf,0), '999999999.999')                   ELSE '0' END),
				    (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_digitado,0), '999999999.999')             ELSE '0' END),
				    (CASE WHEN d26_atualiza_estoque = 'S' THEN to_Char(coalesce(NEW.custo_real,0), '999999999.999')                 ELSE '0' END),
				    '0'                                                                 ,
				    '0'                                                                 ,
				    '0'                                                                 ,
				    '0'                                                                 ,
				    '0'                                                                 ,
				    (CASE WHEN NEW.usuarioalteracao IS NULL THEN  '??' ELSE  NEW.usuarioalteracao END) ,
				    (CASE WHEN NEW.usuarioinclusao  IS NULL THEN  '??' ELSE  NEW.usuarioinclusao  END) ;
			END IF;


		 IF NOT padrao.gravamovtoestoque(aCampos, aDados)THEN
		    RAISE EXCEPTION 'nao possivel persistir movimentacao produto (Cod.:% NF:% - CTRL:% ARRAY:%)!', NEW.fat_produto_id,NEW.numero_docto ,NEW.fat_docto_c_controle, aDados ;
		 END IF;


	   /****************************************************
	    * Estoque / Movimentacao de produtos
	    ****************************************************/
	-- Grava ProdutoSaldo
		aCamposSaldo =  '{fat_produto_id,
				  cad_filial_id,
				  almoxarifado_codigo,
			      ultimaentrada,
				  ultimasaida,
				  ultimomovto,
			      usuarioalteracao,
			      usuarioinclusao}';

	    aDadosSaldo  =  '{'	|| to_char(NEW.fat_produto_id,'99999')                                 ||','
				       		|| to_Char(r_parameters.fatfilialpadrao, '999')                        ||','
						    || '0'                                                                 ||','
						    || CASE WHEN d19_devolucao <> 'S' AND d12_natureza = 'E'THEN to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy') ELSE '00/00/0000' END ||','
						    || CASE WHEN d19_devolucao <> 'S' AND d12_natureza = 'S'THEN to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy') ELSE '00/00/0000' END ||','
						    || to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy')                   ||','
							|| (CASE WHEN NEW.usuarioalteracao IS NULL THEN  '??' ELSE  NEW.usuarioalteracao END) ||','
							|| (CASE WHEN NEW.usuarioinclusao  IS NULL THEN  '??' ELSE  NEW.usuarioinclusao  END)  ||'}';


	     --RAISE NOTICE 'aCamposSaldo: (%)',     aCamposSaldo;
	     --RAISE NOTICE 'aDadosSaldo: (%)',      aDadosSaldo;


	     --RAISE EXCEPTION 'teste: %',to_char(NEW.fat_produto_id,'99999');


	     IF aDadosSaldo IS NULL THEN
		    RAISE EXCEPTION 'Nao sera possivel persistir saldo do produto.
				 Dados para persistencia esta incompleto. Verifique campo <NULL>:
							( fat_produto_id:%
							  cad_filial_id:%
							  almoxarifado_codigo:%
							  ultimaentrada:%
							  ultimasaida:%
							  ultimomovto:%
							  usuarioalteracao:%
							  usuarioinclusao:% )',
							  to_char(NEW.fat_produto_id,'99999')  ,
							  to_Char(r_parameters.fatfilialpadrao, '999')   ,
							  '0'                                 ,
							  CASE WHEN d19_devolucao <> 'S' AND d12_natureza = 'E'THEN to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy') ELSE '00/00/0000' END ,
							  CASE WHEN d19_devolucao <> 'S' AND d12_natureza = 'S'THEN to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy') ELSE '00/00/0000' END ,
							  to_Char(r_doctoc.dataentradasaida::DATE, 'dd/MM/yyyy')  ,
							  (CASE WHEN NEW.usuarioalteracao IS NULL THEN  '??' ELSE  NEW.usuarioalteracao END) ,
							  (CASE WHEN NEW.usuarioinclusao  IS NULL THEN  '??' ELSE  NEW.usuarioinclusao  END) ;



		 END IF;


		 IF NOT padrao.gravaSaldo(aCamposSaldo, aDadosSaldo)THEN
		    RAISE EXCEPTION 'Nao foi possivel persistir saldo do produto (Cod.:% NF:% - CTRL:% ARRAY:%)!', NEW.fat_produto_id,NEW.numero_docto ,NEW.fat_docto_c_controle , aDados;
		 END IF;

		 IF NOT padrao.gravaEstoque(NEW.fat_produto_id, r_doctoc.cad_filial_id, r_doctoc.dataentradasaida, false)THEN
		    RAISE EXCEPTION 'Nao foi possivel persistir estoque do produto (Cod.:% NF:% - CTRL:% ARRAY:%)!', NEW.fat_produto_id,NEW.numero_docto ,NEW.fat_docto_c_controle, aDados ;
		 END IF;

	END IF;

   --Consiste desconto item

--   IF COALESCE(r_doctoc.descontodocto_valor,0) = 0 THEN
--
--      SELECT SUM(qtde * valor_unitario_liquido) AS valor_total_liquido,
--             SUM(qtde * valor_unitario)         AS valor_total_bruto
--        INTO r_consistencia
--        FROM fat_docto_i
--       WHERE fat_docto_c_controle = NEW.fat_docto_c_controle;
--
--      IF Round(r_doctoc.totalprodutos,2) != Round(r_consistencia.valor_total_bruto,2) OR  Round(r_doctoc.totalliquidoprodutos,2) != Round(r_consistencia.valor_total_liquido,2) THEN
--         RAISE EXCEPTION 'A T E N C A O  CHECANDO SOMATORIA ITEM(S)!!
--                         Total dos Produtos nao batem.
--                         Verifique
--                        TOTAL BRUTO  : ( % <-> %)
--                        TOTAL LIQUIDO  : ( % <-> %)
--                          ',ROUND(r_doctoc.totalprodutos,2) , ROUND(r_consistencia.valor_total_bruto,2), Round(r_doctoc.totalliquidoprodutos,2), Round(r_consistencia.valor_total_liquido,2)  ;
--      END IF;
--   END IF;
--
--
     --Atualiza/grava classes
     IF d118_classgerencialproduto = 'S' THEN
        UPDATE financ_rp set valor_total = valor_total WHERE fatura = NEW.fat_docto_c_controle;
     END IF;


   RETURN NULL;
END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE;

-- Gatilho {lancamento_integra_itens()} Versao {002} Esquema {empresa} Descricao {Grava integracao itens do doc  mento }
-- ------------------------------------------------------------

CREATE TRIGGER lancamento_integra_itens AFTER INSERT OR UPDATE OR DELETE ON fat_docto_i
       FOR EACH ROW EXECUTE PROCEDURE padrao.lancamento_integra_itens();


       