update conf set confrelease = '13208'; ------------------------------------------------------------------------------------------------ ALTER TABLE public.rca ADD rca_debcred_perc_bonus numeric(14, 4) NULL; --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- DROP FUNCTION public.f_calc_debcred(int4, int4, date, date, numeric); CREATE OR REPLACE FUNCTION public.f_calc_debcred(integer, integer, date, date, numeric) RETURNS TABLE(dc_rca_cod integer, dc_limite numeric, dc_saldo numeric, dc_vltab numeric, dc_vl numeric, dc_vldebcred numeric, dc_percdebcred numeric, dc_pv_vltab numeric, dc_pv_vl numeric, dc_pv_vldebcred numeric, dc_pv_percdebcred numeric, dc_fat_vltab numeric, dc_fat_vl numeric, dc_fat_vldebcred numeric, dc_fat_percdebcred numeric, dc_devol_vltab numeric, dc_devol_vl numeric, dc_devol_vldebcred numeric, dc_devol_percdebcred numeric, dc_bonif_vltab numeric, dc_bonif_vl numeric, dc_bonif_vldebcred numeric, dc_bonif_percdebcred numeric, dc_troca_vltab numeric, dc_troca_vl numeric, dc_troca_vldebcred numeric, dc_troca_percdebcred numeric, dc_vlextra numeric, dc_bonus_pv_vl numeric, dc_bonus_nf_vl numeric) LANGUAGE plpgsql AS $function$ DECLARE /* select * from f_calc_debcred(1, null,'2023-01-01','now()',null) where dc_rca_cod = 10683 Descrição: Função criada para calcular deb cred do vendedor 05/11/13 - KAYTON: Criação da função f_calc_debcred 13/05/14 - KAYTON: Implementação parametro periodo 28/06/14 - KAYTON: Corrigir bug nos pedidos não faturados - Adicionar opnf tipo VI - Se rca_d_debcred é null então DATE(now()) 27/05/15 - KAYTON: Adicionar campos de Devolução ao cálculo 08/06/16 - KAYTON: Uso dos campos pvibasedebcred e nfibasedebcred no lugar de pvibasedebcred e nfibasedebcred respectivamente. 24/08/17 - David: correção da quantidade na base de devolução 30/08/17 - David: correção do saldo, para considerar pv negativo 03/01/19 - Kayton: atribuir valor inicial para p_data1 e p_data2 10/01/21 - David: considerar bonificação e troca no saldo do deb/cred 17/11/22 - David: adicionar BV e TR nos dados dos pedidos; correção do valor de bonificação / troca; correção do saldo final; 19/11/22 - David: inserir pedidos AP no calculo de deb/cred; 15/05/23 - David: correção do sinal no creb/cred de devolução 10/05/24 - David: tratar rca_debcred_perc_bonus para adicionar um % especial de acordo com os pedidos/notas sem desconto */ p_empresa ALIAS FOR $1; p_vendedor ALIAS FOR $2; p_data1 ALIAS FOR $3; p_data2 ALIAS FOR $4; p_limite ALIAS FOR $5; /* */ rec_dc RECORD; BEGIN p_data1:=case when p_data1 is not null then p_data1 else coalesce((select rca_d_debcred from rca where rcaparcod=p_vendedor),DATE(now())) end; p_data2:=case when p_data2 is not null then p_data2 else DATE(now()) end; FOR rec_dc IN select rcaparcod as dc_rca_cod, coalesce(p_limite,rcadclimite,0) as dc_limite, --SALDO --coalesce(p_limite,rcadclimite,0)+(coalesce(pv_vl,0)-coalesce(pv_basedebcred,0))+(coalesce(fat_vl,0)-coalesce(fat_basedebcred,0))-(coalesce(fat_basedebcred_dc,0)-coalesce(fat_vl_dc,0))+coalesce(vlextra,0) as dc_saldo, case when coalesce(rca_usa_bonif_troca_dc,'S')='S' then coalesce(p_limite,rcadclimite,0)+ (coalesce(pv_vl,0)-coalesce(pv_basedebcred,0))+ (coalesce(fat_vl,0)-coalesce(fat_basedebcred,0))- (coalesce(fat_vl_dc,0)-coalesce(fat_basedebcred_dc,0))- (coalesce(fat_vl_bo,0))- (coalesce(fat_vl_tr,0))+ coalesce(vlextra,0)+ coalesce(bonus_pv_cred_vl,0)+ coalesce(bonus_nf_cred_vl,0) else coalesce(p_limite,rcadclimite,0)+ (coalesce(pv_vl,0)-coalesce(pv_basedebcred,0))+ (coalesce(fat_vl,0)-coalesce(fat_basedebcred,0))- (coalesce(fat_vl_dc,0)-coalesce(fat_basedebcred_dc,0))+ coalesce(vlextra,0)+ coalesce(bonus_pv_cred_vl,0)+ coalesce(bonus_nf_cred_vl,0) end as dc_saldo, --TOTAL case when coalesce(rca_usa_bonif_troca_dc,'S')='S' then coalesce(pv_basedebcred,0)+coalesce(fat_basedebcred,0)-coalesce(fat_basedebcred_bo,0)-coalesce(fat_basedebcred_tr,0) else coalesce(pv_basedebcred,0)+coalesce(fat_basedebcred,0) end as dc_basedebcred, case when coalesce(rca_usa_bonif_troca_dc,'S')='S' then coalesce(pv_vl,0)+coalesce(fat_vl,0)-coalesce(fat_vl_bo,0)-coalesce(fat_vl_tr,0) else coalesce(pv_vl,0)+coalesce(fat_vl,0) end as dc_vl, case when coalesce(rca_usa_bonif_troca_dc,'S')='S' then (coalesce(pv_vl,0)+coalesce(fat_vl,0)-coalesce(fat_vl_bo,0)-coalesce(fat_vl_tr,0))-(coalesce(pv_basedebcred,0)+coalesce(fat_basedebcred,0)-coalesce(fat_basedebcred_bo,0)-coalesce(fat_basedebcred_tr,0)) else (coalesce(pv_vl,0)+coalesce(fat_vl,0))-(coalesce(pv_basedebcred,0)+coalesce(fat_basedebcred,0)) end as dc_vldebcred, case when coalesce(rca_usa_bonif_troca_dc,'S')='S' then case when (coalesce(pv_basedebcred,0)+coalesce(fat_basedebcred,0)-coalesce(fat_basedebcred_bo,0)-coalesce(fat_basedebcred_tr,0))>0 then round(((coalesce(pv_vl,0)+coalesce(fat_vl,0)-coalesce(fat_vl_bo,0)-coalesce(fat_vl_tr,0))-(coalesce(pv_basedebcred,0)+coalesce(fat_basedebcred,0)-coalesce(fat_basedebcred_bo,0)-coalesce(fat_basedebcred_tr,0)))/(coalesce(pv_basedebcred,0)+coalesce(fat_basedebcred,0)-coalesce(fat_basedebcred_bo,0)-coalesce(fat_basedebcred_tr,0))*100,2) else 0.00 end else case when (coalesce(pv_basedebcred,0)+coalesce(fat_basedebcred,0))>0 then round(((coalesce(pv_vl,0)+coalesce(fat_vl,0))-(coalesce(pv_basedebcred,0)+coalesce(fat_basedebcred,0)))/(coalesce(pv_basedebcred,0)+coalesce(fat_basedebcred,0))*100,2) else 0.00 end end as dc_percdebcred, --PV case when coalesce(rca_usa_bonif_troca_dc,'S')='S' then coalesce(pv_basedebcred,0)+coalesce(pv_basedebcred_bo,0)+coalesce(pv_basedebcred_tr,0) else coalesce(pv_basedebcred,0) end as dc_pv_basedebcred, case when coalesce(rca_usa_bonif_troca_dc,'S')='S' then coalesce(pv_vl,0)+coalesce(pv_vl_bo,0)+coalesce(pv_vl_tr,0) else coalesce(pv_vl,0) end as dc_pv_vl, case when coalesce(rca_usa_bonif_troca_dc,'S')='S' then (coalesce(pv_vl,0)-coalesce(pv_basedebcred,0)) else (coalesce(pv_vl,0)-coalesce(pv_basedebcred,0)-coalesce(pv_vl_bo,0)-coalesce(pv_vl_tr,0)) end as dc_pv_vldebcred, case when coalesce(rca_usa_bonif_troca_dc,'S')='S' then case when coalesce(pv_basedebcred,0)>0 then round((coalesce(pv_vl,0)-coalesce(pv_basedebcred,0))/coalesce(pv_basedebcred,0)*100,2) else 0.00 end else case when coalesce(pv_basedebcred,0)>0 then round((coalesce(pv_vl,0)-coalesce(pv_basedebcred,0)-coalesce(pv_vl_bo,0)-coalesce(pv_vl_tr,0))/coalesce(pv_basedebcred,0)*100,2) else 0.00 end end as dc_pv_percdebcred, --FAT coalesce(fat_basedebcred,0) as dc_fat_basedebcred, -- errado coalesce(fat_vl,0) as dc_fat_vl, (coalesce(fat_vl,0)-coalesce(fat_basedebcred,0)) as dc_fat_vldebcred, case when coalesce(fat_basedebcred,0)>0 then round((coalesce(fat_vl,0)-coalesce(fat_basedebcred,0))/coalesce(fat_basedebcred,0)*100,2) else 0.00 end as dc_fat_percdebcred, --DEVOL coalesce(fat_basedebcred_dc,0) as dc_devol_basedebcred, coalesce(fat_vl_dc,0) as dc_devol_vl, (coalesce(fat_vl_dc,0)-coalesce(fat_basedebcred_dc,0)) as dc_devol_vldebcred, --(coalesce(fat_basedebcred_dc,0)-coalesce(fat_vl_dc,0)) as dc_devol_vldebcred, --case when coalesce(fat_basedebcred_dc,0)>0 then round((coalesce(fat_vl_dc,0)-coalesce(fat_basedebcred_dc,0))/coalesce(fat_basedebcred_dc,0)*100,2) else 0.00 end as dc_devol_percdebcred, case when coalesce(fat_basedebcred_dc,0)>0 then round((coalesce(fat_basedebcred_dc,0)-coalesce(fat_vl_dc,0))/coalesce(fat_basedebcred_dc,0)*100,2) else 0.00 end as dc_devol_percdebcred, --BONIF coalesce(fat_basedebcred_bo,0) as dc_bonif_basedebcred, coalesce(fat_vl_bo,0) as dc_bonif_vl, (coalesce(fat_vl_bo,0)) as dc_bonif_vldebcred, case when coalesce(fat_basedebcred_bo,0)>0 then round((coalesce(fat_vl_bo,0)-coalesce(fat_basedebcred_bo,0))/coalesce(fat_basedebcred_bo,0)*100,2) else 0.00 end as dc_bonif_percdebcred, --TROCA coalesce(fat_basedebcred_tr,0) as dc_troca_basedebcred, coalesce(fat_vl_tr,0) as dc_troca_vl, (coalesce(fat_vl_tr,0)) as dc_troca_vldebcred, case when coalesce(fat_basedebcred_tr,0)>0 then round((coalesce(fat_vl_tr,0)-coalesce(fat_basedebcred_tr,0))/coalesce(fat_basedebcred_tr,0)*100,2) else 0.00 end as dc_troca_percdebcred, --EXTRA coalesce(vlextra,0) as dc_extra_vl, --Bonus coalesce(bonus_pv_cred_vl,0) as dc_bonus_pv_vl, coalesce(bonus_nf_cred_vl,0) as dc_bonus_nf_vl from rca --Pedido left join ( select pv_rca_cod, round(sum(pv_basedebcred),2) as pv_basedebcred, round(sum(pv_vl),2) as pv_vl from sd.vw_pv where DATE(pv_dtlan) between p_data1 and p_data2 and pv_opnf_tipo in ('VE','VI','VV') and pv_sta not in ('EX','FT') and case when p_vendedor is not null then pv_rca_cod = p_vendedor else 1=1 end group by pv_rca_cod ) as dcpv on rcaparcod=dcpv.pv_rca_cod --Pedido bonificação/troca left join ( select pv_rca_cod, round(sum(pv_basedebcred_bo),2) as pv_basedebcred_bo, round(sum(pv_vl_bo),2) as pv_vl_bo, round(sum(pv_basedebcred_tr),2) as pv_basedebcred_tr, round(sum(pv_vl_tr),2) as pv_vl_tr from sd.vw_pv where DATE(pv_dtlan) between p_data1 and p_data2 and pv_opnf_tipo in ('BV','TR') and pv_sta not in ('EX','FT') and case when p_vendedor is not null then pv_rca_cod = p_vendedor else 1=1 end group by pv_rca_cod ) as dcpvbotr on rcaparcod=dcpvbotr.pv_rca_cod --Faturado left join ( select fat_rca_cod, round(sum(fat_basedebcred),2) as fat_basedebcred, round(sum(fat_vl),2) as fat_vl, round(sum(fat_basedebcred_dc),2) as fat_basedebcred_dc, round(sum(fat_vl_dc),2) as fat_vl_dc from sd.vw_fat where fat_nf_sta not in ('EX') and fat_opnf_tipo in ('VE','VI','VV','DC') and DATE(fat_nf_dtemi) between p_data1 and p_data2 and case when p_vendedor is not null then fat_rca_cod = p_vendedor else 1=1 end group by fat_rca_cod ) as dcfat on rcaparcod=dcfat.fat_rca_cod --Bonificação / troca left join ( select fat_rca_cod as boniftr_rca_cod, round(sum(fat_basedebcred_bo),2) as fat_basedebcred_bo, round(sum(fat_vl_bo),2) as fat_vl_bo, round(sum(fat_basedebcred_tr),2) as fat_basedebcred_tr, round(sum(fat_vl_tr),2) as fat_vl_tr from sd.vw_fat where fat_nf_sta not in ('EX') and fat_opnf_tipo in ('BV','TR') and DATE(fat_nf_dtemi) between p_data1 and p_data2 and case when p_vendedor is not null then fat_rca_cod = p_vendedor else 1=1 end group by fat_rca_cod ) as dcfatbotc on rcaparcod=dcfatbotc.boniftr_rca_cod --Extra left join ( select rcamvrcaparcod, sum(case when rcamvnatureza='D' then -rcamvvalor else rcamvvalor end) as vlextra from rcamv join rca on rcamvrcaparcod=rcaparcod where rcamvsta='A' and DATE(rcamvdtlanc) between p_data1 and p_data2 and case when p_vendedor is not null then rcamvrcaparcod = p_vendedor else 1=1 end group by rcamvrcaparcod ) as dcextra on rcaparcod=dcextra.rcamvrcaparcod --Bonus PV left join ( select pv_rca_cod as bonus_pv_rca_cod, round(sum(pv_basedebcred),2) as bonus_pv_basedebcred, round(sum(pv_vl),2) as bonus_pv_vl, case when (round(sum(pv_vl),2) - round(sum(pv_basedebcred),2) >= 0) then round(sum((pv_vl*rca_debcred_perc_bonus)/100),2) else 0 end as bonus_pv_cred_vl from sd.vw_pv join rca on pv_rca_cod=rcaparcod where DATE(pv_dtlan) between p_data1 and p_data2 and pv_opnf_tipo in ('VE','VI','VV') and pv_sta not in ('EX','FT') and case when p_vendedor is not null then pv_rca_cod = p_vendedor else 1=1 end group by pv_rca_cod ) as dcbonuspv on rcaparcod=dcbonuspv.bonus_pv_rca_cod --Bonus NF left join ( select fat_rca_cod as bonus_fat_rca_cod, round(sum(fat_basedebcred),2) as bonus_fat_basedebcred, round(sum(fat_vl),2) as bonus_fat_vl, case when (round(sum(fat_vl),2) - round(sum(fat_basedebcred),2) >= 0) then round(sum((fat_vl*rca_debcred_perc_bonus)/100),2) else 0 end as bonus_nf_cred_vl from sd.vw_fat join rca on fat_rca_cod=rcaparcod where fat_nf_sta not in ('EX') and fat_opnf_tipo in ('VE','VI','VV','DC') and DATE(fat_nf_dtemi) between p_data1 and p_data2 and case when p_vendedor is not null then fat_rca_cod = p_vendedor else 1=1 end group by fat_rca_cod ) as dcbonusnf on rcaparcod=dcbonusnf.bonus_fat_rca_cod where rcausadebcred = 'S' and case when p_vendedor is not null then rcaparcod = p_vendedor else 1=1 end order by rcaparcod LOOP RETURN QUERY SELECT rec_dc.dc_rca_cod ,rec_dc.dc_limite ,rec_dc.dc_saldo ,rec_dc.dc_basedebcred ,rec_dc.dc_vl ,rec_dc.dc_vldebcred ,rec_dc.dc_percdebcred ,rec_dc.dc_pv_basedebcred ,rec_dc.dc_pv_vl ,rec_dc.dc_pv_vldebcred ,rec_dc.dc_pv_percdebcred ,rec_dc.dc_fat_basedebcred ,rec_dc.dc_fat_vl ,rec_dc.dc_fat_vldebcred ,rec_dc.dc_fat_percdebcred ,rec_dc.dc_devol_basedebcred ,rec_dc.dc_devol_vl ,rec_dc.dc_devol_vldebcred ,rec_dc.dc_devol_percdebcred ,rec_dc.dc_bonif_basedebcred ,rec_dc.dc_bonif_vl ,rec_dc.dc_bonif_vldebcred ,rec_dc.dc_bonif_percdebcred ,rec_dc.dc_troca_basedebcred ,rec_dc.dc_troca_vl ,rec_dc.dc_troca_vldebcred ,rec_dc.dc_troca_percdebcred ,rec_dc.dc_extra_vl ,rec_dc.dc_bonus_pv_vl ,rec_dc.dc_bonus_nf_vl RETURN; END LOOP; RETURN; END; $function$ ; -- Permissions ALTER FUNCTION public.f_calc_debcred(int4, int4, date, date, numeric) OWNER TO postgres; GRANT ALL ON FUNCTION public.f_calc_debcred(int4, int4, date, date, numeric) TO public; GRANT ALL ON FUNCTION public.f_calc_debcred(int4, int4, date, date, numeric) TO postgres; ------------------------------------------------------------------------------------------------ ALTER TABLE public.forn ADD forconta_id int4 NULL; ALTER TABLE public.forn ADD forcc_id int4 NULL; ------------------------------------------------------------------------------------------------ INSERT INTO public.privacao(privacaodes, privacaodefinicao) VALUES('PERMITIR_BAIXA_DE_TITULOS_CONTAS_PAGAR/RECEBER ', 'Permite a baixa de título para o módulo de contas a pagar/receber'); ------------------------------------------------------------------------------------------------ ALTER TABLE public.conf ADD conf_envia_email_copy_empresa bpchar NULL; ------------------------------------------------------------------------------------------------ -- DROP FUNCTION public.f_realizar_faturamento(int4, int4, int4, int4, timestamptz, timestamptz, int4, int4, int4); CREATE OR REPLACE FUNCTION public.f_realizar_faturamento(integer, integer, integer, integer, timestamp with time zone, timestamp with time zone, integer, integer, integer) RETURNS TABLE(frfatnfcod integer, frfatnfnum integer, frfatnfserie text, frfatmens text) LANGUAGE plpgsql AS $function$ declare /* 10/01/13 - KAYTON: Criação da função f_faturar 15/03/13 - KAYTON: Alteracao select pvi pra so selecionar itens com pviqtdeatecar > 0 where pviqtdeatecar>0 and pvipvempparcod=p_empresa and pvipvcod=p_pedido 21/03/13 - KAYTON: Implementacao da f_seqnf para obter o proximo numero de nf por opnf e empresa 16/07/13 - KAYTON: Implementacao cesta básica (Configuração prevista para tratar 1 item CB por pedido) 05/08/13 - KAYTON: Implementacao controle de estoque 02/09/13 - KAYTON: Implementacao da qtde reservada 10/10/13 - KAYTON: Implementacao do campo opnfcfop e opnfgt e aproveitamento de cred PIS/COFINS 11/10/13 - KAYTON: Tratamento coalesce -> icms,v_vicms,percipi 05/11/13 - KAYTON: Tratamento custo 07/11/13 - KAYTON: Corrigir erro de update em cprpg 26/11/13 - KAYTON: Implementacao do Lote (NAO FINALIZADO) 29/11/13 - KAYTON: Corrigir insert do estmv 06/12/13 - KAYTON: Customização do campo obs nf. Puxando de confobsnf 16/12/13 - KAYTON: Corrigir cliultnfserie 03/01/14 - KAYTON: Informações sobre compra do cliente considerar VI (rec_pv.opnftopnfcod IN ('VE','VI','VV')) 03/01/14 - KAYTON: Tratamento da rotina de recalcular comissão e atualização de dados NFIDET 26/03/14 - KAYTON: Tratamento de tributacao por produto 28/03/14 - KAYTON: Desconsiderar vldesc para total da nf, pois o item ja vem com desconto aplicado 31/03/14 - KAYTON: Suspender temporariamente o tratamento do vldesc 02/04/14 - KAYTON: Substituir opnfpis_cst para opnfcofins_cst no cálculo da base de dados cofins coalesce nos campos opnfpiscofins para validar corretamento com conteudo 'S' quando vazio no calculo de bcpis/bccofins 17/04/14 - KAYTON: Considerar campo coalesce(opnftipoemissaonf,'P') as opnftipoemissaonf, para nftipoemissao 04/05/14 - KAYTON: Implementação dos campos referentes à embalagem principal 09/05/14 - KAYTON: Ativação da regra controle de lote 26/05/14 - KAYTON: Gravar campo nfnumvol com o conteúdo sum(nfiqtde) 01/06/14 - KAYTON: Implementar regra CLILP - usar f_livro_do_cliente para localizar trib 25/06/14 - KAYTON: Calcular custocompra e custoreal multiplicado por uvemult e pviqtdeatecar 07/07/14 - KAYTON: Substituir uvemult por pviuvemult 07/07/14 - KAYTON: Adicionar bloco para calcular ipi/st quando pedido com índice 11/08/14 - KAYTON: Tratamento de tributacao por benefício fiscal associado ao cliente 11/08/14 - KAYTON: Alterar cobrança de acordo com parâmetro informado (b_boleto) e flag no tc (tc_per_alt_fat) 15/08/14 - KAYTON: Implementação do coalesce coalesce(tribbenefufdest,tribproufdest,tribufdest) corrigindo erro quando pedido bonificação enviando cfop de venda 15/09/14 - KAYTON: Implementação das regras de impressão tributação para OPNF ECF - opnftopnfcod='CF' 18/11/14 - KAYTON: Corrigindo regras para gravacao do lote 07/12/14 - KAYTON: Round 4 para qtde e round 2 para valores - Base de cálculo se aliq icms > 0 08/12/14 - KAYTON: Inclusão do campo pvtipofrete e nftipofrete, pviseq e nfiseq. Gravar pvalthorario, ação e usuário 02/04/15 - KAYTON: Inclusão da regra de gerar cprpg a partir da pvplpg (plano negociado) 02/04/15 - KAYTON: Gravar pvvol em nfvol 03/05/15 - KAYTON: 1. Corrigir diferença no valor total das parcelas (cprpg) em relação à nf. antes: cprvt/rec_pv.num_parc,--cprpgv numeric(14,4), depois: trunc(cprvt/rec_pv.num_parc,2),--cprpgv numeric(14,4), 2. Gerar primeira parcela do cprpg com ST. 16/05/15 - KAYTON: Adicionar novos campos em f_insert_estmv: parceiro, opnf operacao. 02/06/15 - KAYTON: Implementar faturamento Produto KIT. 05/06/15 - KAYTON: Alimentar cprpgparc com cprpgcod 08/06/15 - KAYTON: Alimentar nfibasedebcred com pvibasedebcred 21/07/15 - KAYTON: Implementar lote pelo pvilote 01/12/15 - RAUL: Alimentar transportadora com base no tipo de frete do pedido caso nao alimente transportadora ao faturar (p_transportadora) 04/12/15 - RAUL: Corrigir bugs do CPR e CPRPG e NFIVLVEN 1.data de vencimento do CPRPG (cprpgdvenc) agora é com base no parametro: p_horariosaida (v_datahorasaida), --> antes estava fixo now() 2.update cpr set cprdocnum=rec_seqnf.numero,cprdocserie=rec_seqnf.serie,cpr_notafiscal, agora com "v_nfcod", pois estava alterando registros em outras empresas 3.Alterado de round 2 para round 4 ao inserir nfivlunit (pvivlven). -->Kayton orientou estudarmos mais! 31/03/16 - KAYTON: Alimentar campos nfvlfrete e nfivlfrete referente a frete que vem de pvvlfrete e pvivlfrete respectivamente 28/06/16 - KAYTON: Alimentar campos nfiqtdefalta e nfiqtdecorte 06/07/16 - KAYTON: clicontricms para parcontricms -csosn para não contribuinte -tratamento temporario do parametro transportadora para contemplar regra lemos e demais -round pvltabunit e pvlven de 2 para 4 casas -lança despesa de boleto (clidespbol) na base de calculo do primeiro item 07/07/16 - KAYTON: Regra DIFFAL 07/07/16 - KAYTON: Corrigir cálculo despbol quando produto ST 07/07/16 - KAYTON: Cobrar despesa de boleto somente qd cobrança boleto e cliente marcado 20/01/17 - KAYTON: Implementação de efetivação automática de acordo com parâmetro confefetivarauto 27/03/17 - KAYTON: Implementação regra ST para não contribuinte 12/05/17 - KAYTON: Implementação dos campos pvvol,pvpesobruto,pvpesoliq,pvtranspparcod,pvdtentrega Considerando campo confusadtentregaparagerarfin para setar dtvenc tanto de plano negociado, qt plano pagamento 18/05/17 - KAYTON: Gravando trasnportadora do pedido (pvtranspparcod) na nf (nftranspcod) 04/07/17 - KAYTON: Obter Modelo do documento a partir do laymodelo (01, 55, 65) 13/07/17 - KAYTON: Gravar Aliq IVA em nfi (nfialiqiva) 20/02/18 - DAVID: calcular difal apenas se se a aliq de ICMS for > que 0 28/02/18 - DAVID: Tratar informações adicionais do pedido 05/03/18 - DAVID: Alterar busca do peso, alterado para UVE*qtde 07/03/18 - DAVID: Alterar para não calcular IPI em opérações SR 08/03/18 - DAVID: Alterar para calcular IPI em opérações ISENTO 01/06/18 - DAVID: Alterar para calcular IPI para seguir o informado na OPNF caso seja 'S' ou no cadastro do PRODUTO caso seja <> 'S' 30/07/18 - DAVID: Tratar FCP e FCPST alimentando os campos na NFI 05/09/18 - DAVID: multiplicar despesa de boleto pela quantidade de boletos 12/09/18 - DAVID: Travar IVA no faturamento 12/07/19 - DAVID: Alimentar campo nfialiqicmsefet 03/04/20 - DAVID: Alimentar campos nfi nfibcicmsefet e nfivlicmsefet 18/06/20 - DAVID: tratar aliqicmsefet para receber valor do gtperccredicmsbenef caso ele esteja preenchido 17/07/20 - DAVID: tratar campo pvipedcli 20/07/20 - DAVID: tratar opnfusaentregafutura para alimentar a tabela estcli 31/08/20 - DAVID: tratar opnfusaipinoicms para calcular o valor da base de ICMS + IPI 16/10/20 - DAVID: tratar base de fcp nfidifalbcfcpdest 12/11/20 - DAVID: Adicionar tratamento de m³: nfimetrocubico e nfmetrocubico 05/01/21 - DAVID: Não movimentar estoque para operações de entrega futura 12/01/21 - DAVID: tratar campo cli_perc_fin para dar desconto no documento 28/01/21 - David: tratar cbenef pelo codigo do GT 23/09/21 - David: Tratar opnf_nao_mov_est 28/07/22 - David: Tratar nfibcfcp e nfibcfcpst e o somatório do nfifcpvlqicmsst no nfvl 30/07/22 - David: criação dos campos v_vbcfcp e v_vbcfcpST e tratativa na inserção da NFI 11/08/22 - David: correção do valor do FCP ST baseado no v_vlfcpST 11/08/22 - David: correção do valor do ST baseado no v_vlfcpST 18/08/22 - David: correção do da base de ST para não somar o valor da base de FCP ST 18/08/22 - David: retirar o FCP ST do valor da ST, fiz de forma facil de retornar caso o contador da EXXA queira alterar novamente 02/09/22 - David: utilizar uvedes e uveun do cadastro do produto e não o salvo no pedido. -- feito para evitar que o dado não seja preenchido. 08/09/22 - David: Alimentar cprpgdescv com o valor calculado do % de desconto do cliente 13/09/22 - David: Voltar a regra do valor da CPR para salvar o valor cheio da nota 15/09/22 - David: Alteração na regra de desconto financeiro para considerar a ST daprimeira parcela 20/09/22 - David: Alteração na regra de desconto financeiro para considerar a ST daprimeira parcela 07/11/22 - David: Correção do calculo do v_vlfcpST para subtrair o valor da v_vlfcp 19/12/22 - David: Tratar o v_vicms_efet para receber o valor de redução do beneficio quando ele estiver presente no cadastro da empresa 27/12/22 - David: Correção do beneficio fiscal, para tratar os campos do grupo de tributação 23/01/22 - David: Tratar parcontricms <> N para verificar qual bloco da tributação será utilizada 08/03/23 - David: Tratar despbol para ser rateado em todos os produtos e ser considerado na base de ST verifica diferenca de despbol e joga no ultimo produto 21/06/23 - David: Envio de mensagem para o vendedor sempre que um pedido for faturado 31/06/23 - David: Correção da soma de despesa de boleto na ST 30/09/23 - David: Correção do v_baseicms para tratar a redução corretamente 18/10/23 - David: Correção da redução da base de ST 03/11/23 - David: Correção do valor de outras despesas, comentar o bloco que recalcula elas visto que o valor esta sendo lançado corretamente 13/11/23 - David: usar o campo conf_div_st_parcelas para verificar se divide a ST ou se mantem o calculo atual 11/04/24 - David: alimentar nfibcipi no momento de faturar 23/04/24 - David: corrigir nfivloutrasdesp para 2 casas decimais 09/07/24 - David: Criação da varialvel v_vlfcp para alimentar o valor de FCP baseado em um calculo em tempo real da base de ICMS 18/07/24 - David: alimentar o campo nfrefnfcod com o pvrefnfcod para a referencia de NFce 02/08/24 - David: - Correção na identação - criar campo v_vpro - tratar calculo da ST baseado no campo conf_usa_desconta_st_do_preco para que o sistema calcule o valor dos produtos baseado na precificação como valor final 12/09/24 - David: recalcular o valor da base de calculo de acordo com o novo valor do produto para os casos de v_DescontaStdoPreco = 'S' 13/09/24 - David: verifica se existe uyma diferença no valor sum(nfivl+nfivlicmsst+nfifcpvlqicmsst)-sum(round(nfivl,2)+round(nfivlicmsst,2)+round(nfifcpvlqicmsst,2) , caso exista, joga essa diferença no ultimo produto 09/10/24 - David: correção da aliquota de destino do DIFAL para usar 100% da aliquota e não mais subtrair a aliq interna 11/10/24 - David: correção do valor da ST quando não descontata do preço, para 2 casas decimais 22/11/24 - David: correção do calculo do icms quando (rec_pv.isento <> 'S') 11/12/24 - David: corrigir vicms quando opnfusaipinoicms = 'S' -------------------------------------------------------------------------------------------------------------------------------------------------------- -- select * from f_realizar_faturamento(100,1,4223,0,cast(now() as date),now(),3,0,0) select * from pv where pvcod = 34484 update pv set pvsta = 'AA' where pvcod = 34484 select * from pvi where pvipvcod = 34484 select * from nfi where nfinfcod = 32977 */ p_usuario ALIAS for $1;--integer 1001 p_empresa ALIAS for $2;--integer 191 p_pedido ALIAS for $3;--integer 843 p_boleto ALIAS for $4;--integer 9 - CAIXA p_dtemissao ALIAS for $5;--date now() p_horariosaida ALIAS for $6;--timestamp p_transportadora ALIAS for $7;--integer p_veiculo ALIAS for $8;--integer p_motorista ALIAS for $9;--integer rec_pv RECORD; rec_plpg RECORD; rec_seqnf RECORD; rec_mens RECORD; rec_insert_estmv RECORD; rec_insert_estlotemv RECORD; rec_pv_insert_estmv RECORD; rec_pv_insert_estlotemv RECORD; rec_pv_usacontrolelote RECORD; rec_efetauto RECORD; v_nfidet RECORD; v_erro INTEGER; num_parc INTEGER; v_nfcod INTEGER; v_menscod INTEGER; v_res INTEGER; v_cprcod INTEGER; v_agora TIMESTAMP; v_datahorasaida TIMESTAMP; v_pedido INTEGER; v_vnf numeric(14, 4); v_visento numeric(14, 4); v_vbasecalc numeric(14, 4); v_vicms numeric(14, 4); v_voutros numeric(14, 4); v_vipi numeric(14, 4); v_vbasecalcST numeric(14, 4); v_vlicmsST numeric(14, 4); v_vdesc numeric(14, 4); v_vbcfcp numeric(14, 4); v_vbcfcpST numeric(14, 4); v_vlfcpST numeric(14, 4); v_vbasecalc_efet numeric(14, 4); v_vicms_efet numeric(14, 4); v_inseriuCab BOOLEAN; v_confobsnf text; v_obsnf text; v_VERSAO text; v_efetauto text; v_cliestprocod integer; v_DivSt text; v_vlfcp numeric(14, 4); v_DescontaStdoPreco text; v_vpro numeric(14, 4); v_vproFinal numeric(14, 4); v_indice_st numeric(14, 4); begin --************************************************************* -- VERSAO DA FUNCAO FATURAMENTO --************************************************************* v_VERSAO = 'FUNCAO DE FATURAMENTO v2024.09.18.1'; --************************************************************* -- VALIDAR DADOS ANTES DO FATURAMENTO --************************************************************* v_erro := 0; for rec_mens in select pedido, advertencia from f_validar_faturamento(p_empresa, p_pedido) loop return QUERY select 0::integer as nfcod, 0::integer as nfnum, ''::text as nfserie, rec_mens.advertencia; v_erro := 1; end loop; if v_erro > 0 then return; end if; --************************************************************* -- OBTER DATA HORA HOJE --************************************************************* select now() into v_agora; --************************************************************* -- OBTER DADOS PV --************************************************************* v_inseriuCab := false; /* Inserir nf somente 1 vez e não para cada item do laço. Dessa forma é possivel usar 1 sql. */ --************************************************************* -- OBTER DADOS PV/PVI --************************************************************* for rec_pv in select /* REGRA ESPECIFICA LEMOS - TEMPORARIA (07/06/2016) INI-------------*/ case when ( select parcnpjcpf from par where parcod = pvempparcod) in ('12941093000138', '00652008000213', '00652008000990', '00652008000302', '00652008000647', '00652008000132', '11476381000368', '12978703000178', '01623668000239', '11476381000287', '01623668000158', '00652008000728', '11476381000104') then case when coalesce(p_transportadora, 0)>0 then p_transportadora --se informar transportadora when coalesce(p_transportadora, 0)= 0 and pvtipofrete = '0' then pvempparcod --se nao informar, 0=EMITENTE when coalesce(p_transportadora, 0)= 0 and pvtipofrete = '1' then pvcliparcod --se nao informar, 1=DESTINATARIO else p_transportadora end else case when coalesce(pvtranspparcod, 0)>0 then pvtranspparcod else p_transportadora end end as transpcod, /* REGRA ESPECIFICA LEMOS - TEMPORARIA (07/06/2016) FIM-------------*/ --Lança despesa boleto no primeiro item e tipo de cobranca pedido igual boleto --case when ROW_NUMBER() OVER (ORDER BY pviseq)=1 and (select tctdoc from tc where tccod=pvtccod)='BO' then coalesce(clidespbol,0) else 0 end as despbol, /* 08/03/2023 * Alteração da regra de despesa para ratear entre todos os produtos * case when ROW_NUMBER() OVER (ORDER BY pviseq)=1 and (select tctdoc from tc where tccod=pvtccod)='BO' then coalesce((clidespbol*coalesce(plpgnumparc,1)),0) else 0 end as despbol, */ case when ( select tctdoc from tc where tccod = pvtccod)= 'BO' then coalesce(round((clidespbol * coalesce(plpgnumparc, 1))/ count(pviprocod) over (order by 1), 2), 0) else 0 end as despbol, pvempparcod, pvcod, pvsta, pvplpgcod, case when cast(p_boleto as integer)>0 and (select tc_per_alt_fat from tc where tccod = pvtccod)= 'S' then p_boleto else pvtccod end as pvtccod, pvcliparcod, pvopnfcod, pvrcaparcod, pvrcaauxparcod, pvsupparcod, pvcarcod, pvobsnf, pvindice, pvipvempparcod, pvipvcod, tipoproduto, kitprocod, pviprocod, --embalagem de venda pviuvecod, (select uvedes from uve where uveprocod = pviprocod and uvecod = pviuvecod) as pviuvedes, (select uveun from uve where uveprocod = pviprocod and uvecod = pviuvecod) as pviuveun, pviuvemult, pviqtde, pviqtdeate, pviqtdeatecar, pvivltab, pvibasedebcred, pvivlven, coalesce(pviqtde, 0)-coalesce(pviqtdeate, 0) as qtdefalta, coalesce(pviqtdeate, 0)-coalesce(pviqtdeatecar, 0) as qtdecorte, --embalagem principal (select uvecod from uve where uvetipo = 'P' and uveprocod = pviprocod limit 1) as puvecod, (select uvedes from uve where uvetipo = 'P' and uveprocod = pviprocod limit 1) as puvedes, (select uveun from uve where uvetipo = 'P' and uveprocod = pviprocod limit 1) as puveun, (select uvemult from uve where uvetipo = 'P' and uveprocod = pviprocod limit 1) as puvemult, --QT_PRINCIPAL=Qt.vendida*mult_venda/mult_principal round(pviqtdeatecar * pviuvemult /(select uvemult from uve where uvetipo = 'P' and uveprocod = pviprocod limit 1), 4) as pqtde, round(pvivltab / pviuvemult *(select uvemult from uve where uvetipo = 'P' and uveprocod = pviprocod limit 1), 4) as pvltabunit, round(pvivlven / pviuvemult *(select uvemult from uve where uvetipo = 'P' and uveprocod = pviprocod limit 1), 4) as pvlven, coalesce(prouvenf, 'V') as uvenf, pvivltotal, pviqtdeatecar *(pvivltab-pvivlven) as vldesc, parcontricms, regtribccsacod, opnfsta, opnf_conta_id, opnf_cc_id, opnfcpr, opnfesp, opnftopnfcod, coalesce(opnftipoemissaonf, 'P') as opnftipoemissaonf, case when opnfpiscofins = 'S' then opnfpis else cstpiscofins_aliq_pis end pisaliq, case when opnfpiscofins = 'S' then opnfpis_cst else estcstpiscofinscod end piscst, case when opnfpiscofins = 'S' then opnfpis_aliqvalor else estvlpautapis end pisvlpauta, --case when opnfpiscofins='S' then opnfpis_percred else gtfpispercred end pispercred, case when opnfpiscofins = 'S' then opnfcofins else cstpiscofins_aliq_cofins end cofinsaliq, case when opnfpiscofins = 'S' then opnfcofins_cst else estcstpiscofinscod end cofinscst, case when opnfpiscofins = 'S' then opnfcofins_aliqvalor else estvlpautacofins end cofinsvlpauta, --case when opnfpiscofins='S' then opnfcofins_percred else gtfcofinspercred end cofinspercred, --Valores PIS/COFINS (Base de calculo = Vl.Operacao - Vl.Desc) case when (coalesce(opnfpiscofins, '')= 'S' and coalesce(opnfpis_cst, '')= '01') then pvivltotal when (coalesce(opnfpiscofins, '')<> 'S' and coalesce(estcstpiscofinscod, '')= '01') then pvivltotal else 0 end as bcpis, case when (coalesce(opnfpiscofins, '')= 'S' and coalesce(opnfcofins_cst, '')= '01') then pvivltotal when (coalesce(opnfpiscofins, '')<> 'S' and coalesce(estcstpiscofinscod, '')= '01') then pvivltotal else 0 end as bccofins, 0 as bcqtpis,--pendente para produto com pauta 0 as bcqtcofins,--pendente para produto com pauta gtcod, gtdes, case when parcontricms <> 'N' then estvlpautaicms else estvlpautaicmsncontrib end as pauta, case when parcontricms <> 'N' then coalesce(gtpercredbc,0) else coalesce(gtncontribpercredbc,0) end as percrbcicms, case when opnftopnfcod = 'CF' then gtecfaliqicms else case when parcontricms = 'S' then gtaliqicms else gtncontribaliqicms end end as aliqicms, case when opnftopnfcod = 'CF' then gtecfaliqicms when gtperccredicmsbenef > 0 then gtperccredicmsbenef when parcontricms <> 'N' then gtaliqefet else gtncontribaliqefet end as aliqicmsefet, case when opnftopnfcod = 'CF' then gtecfcstcod else case when parcontricms <> 'N' then gtcstcod else gtncontribcstcod end end as cst, --case when parcontricms='S' then gtcfopcod else gtncontribcfopcod end as cfopcod, --se utilizar CFOP de OPNF case when opnftopnfcod = 'CF' then gtecfcfopcod else case when opnfcfop = 'S' and coalesce(tribbenefuforig, tribprouforig, tribuforig)= coalesce(tribbenefufdest, tribproufdest, tribufdest) then opnfcfopcode when opnfcfop = 'S' and coalesce(tribbenefuforig, tribprouforig, tribuforig)<> coalesce(tribbenefufdest, tribproufdest, tribufdest) and parcontricms = 'S' then opnfcfopcodi when opnfcfop = 'S' and coalesce(tribbenefuforig, tribprouforig, tribuforig)<> coalesce(tribbenefufdest, tribproufdest, tribufdest) and parcontricms <> 'S' then opnfcfopcodincontricms else case when parcontricms <> 'N' then gtcfopcod else gtncontribcfopcod end end end as cfopcod, case when parcontricms <> 'N' then gtmodalidbcicms else gtncontribmodalidbcicms end as modbcicms, case when parcontricms <> 'N' then gtisento else gtisento end as isento, case when coalesce(opnfipi, '')= 'S' then opnfcstipi else estcstipicod end as cstipi, case when coalesce(opnfipi, '')= 'S' then opnfaliqipi else estaliqipi end as percipi, --FCP case when coalesce(gtfcpaliqicms, 0) > 0 then gtfcpaliqicms else 0 end as fcpaliqicms, case when coalesce(gtfcpaliqicms, 0) > 0 then ((pvivltotal * gtfcpaliqicms)/ 100) else 0 end as fcpvlqicms, --FCP ST case when coalesce(gtfcpaliqicmsst, 0) > 0 then gtfcpaliqicmsst else 0 end as fcpaliqicmsst, case when coalesce(gtfcpaliqicmsst, 0) > 0 then ((pvivltotal * gtfcpaliqicmsst)/ 100) else 0 end as fcpvlqicmsst, --ST case when parcontricms <> 'N' then coalesce(estvlpautast, 0) else cast(0 as numeric) end as pautaret, case when parcontricms <> 'N' then coalesce(gtstaliqicms, 0) else cast(0 as numeric) end as aliqicmsret, case when parcontricms <> 'N' then coalesce(gtstpercredbc, 0) else cast(0 as numeric) end as percrbcicmsret, case when parcontricms <> 'N' then coalesce(gtstiva, 0) else cast(0 as numeric) end as aliqiva, case when parcontricms <> 'N' then coalesce(gtstmodalidbcicms, 0) else cast(0 as integer) end as modbcicmsret, gtmensagem, gtlegenda, gtpercdescisencaocond, -- NÃO CONTRIBUINTE case when parcontricms <> 'N' then gtcsosncod else gtncontribcsosncod end as gtcsosncod, case when parcontricms <> 'N' then gtperccredicmssn else gtncontribperccredicmssn end as gtpCredSN, --calculado round((pviqtdeatecar * pvivlven)*(case when parcontricms <> 'N' then gtperccredicmssn else gtncontribperccredicmssn end)/ 100, 2) as vCredICMSSN, (select fpeforparcod from fpe where fpeprocod = pviprocod and pvipvempparcod = fpeempparcod and fpetipo = 'P' limit 1) as fpeforparcod, plpgdes, plpgcondicao, (select count(*) from( select regexp_split_to_table(plpgcondicao, ';')) p) as num_parc, estcustocompra * pviuvemult * pviqtdeatecar as estcustocompra, estcustoreal * pviuvemult * pviqtdeatecar as estcustoreal, pvtipofrete, row_number() over (order by pviseq) as pviseq, (select count(distinct pvplpgpvcod) from pvplpg where pvplpgpvcod = pvcod) as qtparcplpgnegoc, pvvol, (pviqtdeatecar * uvepesobruto) as pvpesobruto, (pviqtdeatecar * uvepesoliq) as pvpesoliq, pvdtentrega, pvvlfrete, pvivlfrete, --Se é consumidor final e orig<>dest case when (parconsfinal = 'S' and gtaliqicms > 0 and (select munufsigla from par join mun on parmuncod = muncod where parcod = pvempparcod) <> (select lpuf from lp where lpcod = f_livro_do_cliente(pvcliparcod, pvempparcod))) then tribdifalpercfcp else 0 end as tribdifalpercfcp, case when (parconsfinal = 'S' and gtaliqicms > 0 and (select munufsigla from par join mun on parmuncod = muncod where parcod = pvempparcod) <> (select lpuf from lp where lpcod = f_livro_do_cliente(pvcliparcod, pvempparcod))) then tribdifalpercicms else 0 end as tribdifalpercicms, case when (parconsfinal = 'S' and gtaliqicms > 0 and (select munufsigla from par join mun on parmuncod = muncod where parcod = pvempparcod) <> (select lpuf from lp where lpcod = f_livro_do_cliente(pvcliparcod, pvempparcod))) then tribdifalpercpart else 0 end as tribdifalpercpart, ----------------------- --Modelo do Doc (01, 55 ,65) (select laymodelo from opnf join eol on eolopnfcod = opnfcod and eolempparcod = pvempparcod join lay on eollaycod = laycod where opnfcod = pvopnfcod) as modelo, pviinfadprod, pvipedcli, opnfusaentregafutura, opnfusaipinoicms, pvmetrocubico, pvimetrocubico, coalesce(cli_perc_fin, 0) as cli_perc_fin, coalesce(cli_tipo_perc_fin, 'P') as cli_tipo_perc_fin, ben_cbenef, opnf_nao_mov_est, coalesce(benefcod, 0) as benefcod, gtbenefredaliqsaida, pvrefnfcod from( select pvipvempparcod, pvipvcod, protipo as tipoproduto, case when protipo = 'KT' then prompprocod else 0 end as kitprocod, case when protipo = 'KT' then prompmpcod else pviprocod end as pviprocod, case when protipo = 'KT' then (select uvecod from uve where uveprocod = prompmpcod and uvetipo = 'P' limit 1) else pviuvecod end as pviuvecod, case when protipo = 'KT' then (select uvedes from uve where uveprocod = prompmpcod and uvetipo = 'P' limit 1) else pviuvedes end as pviuvedes, case when protipo = 'KT' then (select uveun from uve where uveprocod = prompmpcod and uvetipo = 'P' limit 1) else pviuveun end as pviuveun, case when protipo = 'KT' then (select uvemult from uve where uveprocod = prompmpcod and uvetipo = 'P' limit 1) else pviuvemult end as pviuvemult, case when protipo = 'KT' then cast(pviqtde * prompmpqtde as numeric(14, 4)) else pviqtde end as pviqtde, case when protipo = 'KT' then cast(pviqtde * prompmpqtde as numeric(14, 4)) else pviqtdeate end as pviqtdeate, case when protipo = 'KT' then cast(pviqtde * prompmpqtde as numeric(14, 4)) else pviqtdeatecar end as pviqtdeatecar, --Se Produto KIT round(case when protipo = 'KT' then (select fprvlven from f_preco(f_livro_do_cliente(pvcliparcod, pvempparcod), null, null, pvplpgcod, null, cast(prompmpcod as text)) where fprprocod = prompmpcod and fprembcod =(select uvecod from uve where uveprocod = prompmpcod and uvetipo = 'P' limit 1))else pvivltab end, 2) as pvivltab, --Se Produto KIT round(case when protipo = 'KT' then(select fprvlven from f_preco(f_livro_do_cliente(pvcliparcod, pvempparcod), null, null, pvplpgcod, null, cast(prompmpcod as text)) where fprprocod = prompmpcod and fprembcod =(select uvecod from uve where uveprocod = prompmpcod and uvetipo = 'P' limit 1))*(1-(round((pvivltab-pvivlven)/ pvivltab * 100, 2)/ 100)) else pvivlven end, 4) as pvivlven, --Se Produto KIT round(case when protipo = 'KT' then round((select fprvlven from f_preco(f_livro_do_cliente(pvcliparcod, pvempparcod), null, null, pvplpgcod, null, cast(prompmpcod as text)) where fprprocod = prompmpcod and fprembcod =(select uvecod from uve where uveprocod = prompmpcod and uvetipo = 'P' limit 1))*(1-(round((pvivltab-pvivlven)/ pvivltab * 100, 2)/ 100)), 2)*(prompmpqtde * pviqtdeatecar)::numeric else pvivltotal end, 2) as pvivltotal, pviseq, pvibasedebcred, pvivlfrete, pviinfadprod, coalesce (pvipedcli, 0) as pvipedcli, pvimetrocubico from pv join pvi on pvcod = pvipvcod join pro on pviprocod = procod join uve on procod = uveprocod and pviuvecod = uvecod left join promp on pviprocod = prompprocod and protipo = 'KT' ) as i ----------------------- join pv on pvipvcod = pvcod join cli on pvcliparcod = cliparcod join par on cliparcod = parcod join loc on cliloccod = loccod join opnf on pvopnfcod = opnfcod join plpg on pvplpgcod = plpgcod --join pvi on pvcod=pvipvcod and pvempparcod=pvipvempparcod join pro on pviprocod = procod join est on pviprocod = estprocod and pvipvempparcod = estempparcod join uve on uveprocod = pviprocod and uvecod = pviuvecod join emp on pvipvempparcod = empparcod join regtrib on empregtribcod = regtribcod left join benef on empbenefcod = benefcod --trib por benef left join tribbenef on regtribcod = tribbenefregtribcod and tribbenefuforig =(select munufsigla from par join mun on parmuncod = muncod where parcod = pvempparcod) and tribbenefufdest =(select lpuf from lp where lpcod = f_livro_do_cliente(pvcliparcod, pvempparcod)) and tribbenefbenefcod = clibenefcod and tribbenefprocod = procod --trib por produto left join tribpro on regtribcod = tribproregtribcod and tribprouforig =(select munufsigla from par join mun on parmuncod = muncod where parcod = pvempparcod) and tribproufdest =(select lpuf from lp where lpcod = f_livro_do_cliente(pvcliparcod, pvempparcod)) and tribproprocod = procod --trib por ncm left join trib on regtribcod = tribregtribcod and tribuforig =(select munufsigla from par join mun on parmuncod = muncod where parcod = pvempparcod) and tribufdest =(select lpuf from lp where lpcod = f_livro_do_cliente(pvcliparcod, pvempparcod)) and tribncm = proncm -- se utilizar GT de OPNF --left join gt on tribgtcod=gtcod --da prioridade para gt por opnf, depois por trib produto e por fim trib ncm left join gt on gtcod = case when opnfgt = 'S' and coalesce(tribbenefuforig, tribprouforig, tribuforig)= coalesce(tribbenefufdest, tribproufdest, tribufdest) then opnfgtcode when opnfgt = 'S' and coalesce(tribbenefuforig, tribprouforig, tribuforig)<> coalesce(tribbenefufdest, tribproufdest, tribufdest) then opnfgtcodi else coalesce(tribbenefgtcod, tribprogtcod, tribgtcod) end left join beneficios on ben_id = gt_ben_id --verificar PIS/COFINS left join cstpiscofins on regtribcod = cstpiscofins_regtribcod and estcstpiscofinscod = cstpiscofins_cod --REGRA DIFAL left join tribdifal on tribdifaluf =(select lpuf from lp where lpcod = f_livro_do_cliente(pvcliparcod, pvempparcod)) --where pviqtdeatecar>0 and pvipvempparcod=1 and pvipvcod=46984 where pviqtdeatecar>0 and pvipvempparcod = p_empresa and pvipvcod = p_pedido loop if not v_inseriuCab then --Verifica se cab nf já foi inserido --************************************************************* --INSERIR CAB NF --************************************************************* --OBTER OBS NF select trim(confobsnf) into v_confobsnf from conf where confempparcod = p_empresa; select coalesce(conf_usa_desconta_st_do_preco,'N') into v_DescontaStdoPreco from conf where confempparcod = p_empresa; select case when conffatdsaid = 'S' then coalesce(p_horariosaida, now()) else now() end into v_datahorasaida from conf where confempparcod = p_empresa; execute coalesce(v_confobsnf, 'select null') into v_obsnf using p_pedido; select nextval('nf_nfcod_seq') into v_nfcod; --OBTER PROX CODIGO/SEQ DE NF - CAMPO CHAVE --INSERT NF insert into nf (nfcadusuparcod, nfcadhorario, nfaltusuparcod, nfalthorario, nfcod, nfempparcod, nfparcod, nfnum, nfserie, nfsta, nfdtemi, nfdtsai, nfhrsai, nfopnfcod, nfespecie, nftipoemissao, nfmodelo, nfvl, nfvlpro, nftipofrete, nfpesobruto, nfpesoliq, nfvol, nfnumvol, nfobs, nfpvcod, nfplpgcod, nftccod, nfrcaparcod, nfsupparcod, nfrcaauxparcod, nfcarcod, nfcarcodorig, nfordcar, nftranspcod, nfveicod, nfmotparcod, nfconhecfretecod, nfpccod, nfdevolnum, nfdevolserie, nfmotivdevolnfcod, nfmetrocubico, nfrefnfcod ) values ( p_usuario,--nfcadusuparcod v_agora,--nfcadhorario null,--nfaltusuparcod null,--nfalthorario v_nfcod,--nfcod rec_pv.pvempparcod, rec_pv.pvcliparcod, v_nfcod,--update - Recebe v_nfcod/seq provisoriamente ate gravar nfi, cpr e cprpg '0',-- update - Recebe 0 provisoriamente ate gravar nfi, cpr e cprpg 'FT',--nfsta cast(p_dtemissao as date),--nfdtemi cast(v_datahorasaida as date),--nfdtsai cast(v_datahorasaida as time),--nfhrsai rec_pv.pvopnfcod, rec_pv.opnfesp,--nfopnfesp character(4) rec_pv.opnftipoemissaonf,--nftipoemissao rec_pv.modelo,--nfmodelo 0,--nfvl update - Recebe 0 provisoriamente ate gravar nfi 0,--nfvlpro update - Recebe 0 provisoriamente ate gravar nfi rec_pv.pvtipofrete,--nftipofrete coalesce(rec_pv.pvpesobruto, 0),--nfpesobruto update - Recebe 0 provisoriamente ate gravar nfi coalesce(rec_pv.pvpesoliq, 0),--nfpesoliq update - Recebe 0 provisoriamente ate gravar nfi coalesce(rec_pv.pvvol, 0),--nfvol 0,--nfnumvol update - Recebe 0 provisoriamente ate gravar nfi v_obsnf,--nfobs rec_pv.pvcod,--nfpvcod rec_pv.pvplpgcod,--nfplpgcod rec_pv.pvtccod, rec_pv.pvrcaparcod,--nfrcaparcod rec_pv.pvsupparcod,--nfsupparcod rec_pv.pvrcaauxparcod,--nfrcaauxparcod rec_pv.pvcarcod,--nfcarcod null,--nfcarcodorig null,--nfordcar rec_pv.transpcod,--nftranspcod p_veiculo,--nfveicod p_motorista,--nfmotparcod null,--nfconhecfretecod null,--nfpccod null,--nfdevolnum null,--nfdevolserie null,--nfmotivdevolnfcod rec_pv.pvmetrocubico,--nfmetrocubico rec_pv.pvrefnfcod ); --INSERIR REGISTRO EM NFE insert into nfe(nfecadusuparcod, nfecadhorario, nfealtusuparcod, nfealthorario, nfenfempparcod, nfenfparcod, nfenfnum, nfenfserie, nfenfcod ) values ( p_usuario,--nfecadusuparcod integer, v_agora,--nfecadhorario timestamp without time zone, null,--nfealtusuparcod integer, null,--nfealthorario timestamp without time zone, rec_pv.pvempparcod,--nfenfempparcod integer NOT NULL, rec_pv.pvcliparcod,--nfenfparcod integer NOT NULL, v_nfcod,--nfenfnum integer NOT NULL, update - Recebe v_nfcod/seq provisoriamente ate gravar nfi, cpr e cprpg '0',--nfenfserie character varying(4) NOT NULL, update - Recebe 0 provisoriamente ate gravar nfi, cpr e cprpg v_nfcod--nfenfcod integer NOT NULL, ); --INSERIR REGISTRO EM NFECF insert into nfecf (nfecfcadusuparcod, nfecfcadhorario, nfecfaltusuparcod, nfecfalthorario, nfecfnfempparcod, nfecfnfparcod, nfecfnfnum, nfecfnfserie, nfecfnfcod ) values ( p_usuario,--nfecfcadusuparcod integer, v_agora,--nfecfcadhorario timestamp without time zone, null,--nfecfaltusuparcod integer, null,--nfecfalthorario timestamp without time zone, rec_pv.pvempparcod,--nfecfnfempparcod integer NOT NULL, rec_pv.pvcliparcod,--nfecfnfparcod integer NOT NULL, v_nfcod,--nfecfnfnum integer NOT NULL, update - Recebe v_nfcod/seq provisoriamente ate gravar nfi, cpr e cprpg '0',--nfecfnfserie character varying(4) NOT NULL, update - Recebe 0 provisoriamente ate gravar nfi, cpr e cprpg v_nfcod--nfecfnfcod integer NOT NULL, ); v_inseriuCab := true; end if; --IF NOT inseriuCab THEN --************************************************************* --INSERIR ITEM - NFI --************************************************************* --ICMS NORMAL v_visento := 0; v_vbasecalc := 0; v_vicms := 0; v_voutros := 0; v_vipi := 0; v_vbasecalc_efet := 0; v_vicms_efet := 0; v_vpro := 0; v_vproFinal := 0; v_vpro := rec_pv.pvivltotal; v_vproFinal := rec_pv.pvivltotal; if rec_pv.isento = 'S' then v_visento := v_vpro; else --Obter base de calculo if rec_pv.pauta > 0 then v_vbasecalc := rec_pv.pviqtdeatecar * rec_pv.pauta; else if rec_pv.percrbcicms > 0 then v_vbasecalc := (v_vpro - round(v_vpro * rec_pv.percrbcicms / 100, 2)); else --Compor base de calculo se aliq icms > 0 if rec_pv.aliqicms > 0 then v_vbasecalc := v_vpro; else v_vbasecalc := 0; end if; end if; end if; -- VBaseCalc recebe despesa de boleto no primeiro item caso configurado no cliente v_vbasecalc := coalesce(v_vbasecalc, 0) + case when v_vbasecalc>0 then coalesce(rec_pv.despbol, 0) else 0 end; v_vicms := round(v_vbasecalc * coalesce(rec_pv.aliqicms, 0)/ 100, 2); v_voutros := rec_pv.pvivltotal-v_vbasecalc; v_vbasecalc_efet := coalesce(v_vbasecalc, 0) + case when v_vbasecalc>0 then coalesce(rec_pv.despbol, 0) else 0 end; if coalesce(rec_pv.gtbenefredaliqsaida, 0)>0 then v_vicms_efet := round(v_vicms-(v_vicms * rec_pv.gtbenefredaliqsaida / 100), 2); else v_vicms_efet := round(v_vbasecalc * coalesce(rec_pv.aliqicmsefet, 0)/ 100, 2); end if; if rec_pv.opnfusaipinoicms = 'S' then v_vipi := round(rec_pv.pvivltotal * coalesce(rec_pv.percipi, 0)/ 100, 2); v_vbasecalc := coalesce(v_vbasecalc, 0) + case when v_vbasecalc>0 then coalesce(v_vipi, 0) else 0 end; v_vicms := round(v_vbasecalc * coalesce(rec_pv.aliqicms, 0)/ 100, 2); v_voutros := case when v_vpro-v_vbasecalc < 0 then 0 else rec_pv.pvivltotal - v_vbasecalc end; v_vbasecalc_efet := coalesce(v_vbasecalc, 0) + case when v_vbasecalc>0 then coalesce(v_vipi, 0) else 0 end; if coalesce(rec_pv.gtbenefredaliqsaida, 0)>0 then v_vicms_efet := round(v_vicms-(v_vicms * rec_pv.gtbenefredaliqsaida / 100), 2); else v_vicms_efet := round(v_vbasecalc * coalesce(rec_pv.aliqicmsefet, 0)/ 100, 2); end if; end if; end if; --SUBSTITUICAO v_vbasecalcST := 0; v_vlicmsST := 0; v_vbcfcp := 0; v_vbcfcpST := 0; v_vlfcpST := 0; v_vlfcp := 0; if rec_pv.opnfsta in ('GC', 'C') and (rec_pv.isento <> 'S') then v_vipi := round(rec_pv.pvivltotal * coalesce(rec_pv.percipi, 0)/ 100, 2); if rec_pv.aliqicmsret > 0 then if v_DescontaStdoPreco = 'N' then if rec_pv.pautaret > 0 then v_vbasecalcST := rec_pv.pviqtdeatecar * rec_pv.pautaret; else if rec_pv.percrbcicmsret > 0 then --v_vbasecalcST := round((rec_pv.pvivltotal+v_vipi+frete)*rec_pv.percrbcicmsret/100,4); v_vbasecalcST := (v_vpro - round((v_vpro + v_vipi)* rec_pv.percrbcicmsret / 100, 2)); else --v_vbasecalcST := rec_pv.pvivltotal+v_vipi+frete; v_vbasecalcST := v_vpro + v_vipi; end if; end if; v_vbasecalcST := round((v_vbasecalcST + (case when v_vbasecalcST>0 then coalesce(rec_pv.despbol, 0) else 0 end))*(1 +(coalesce(rec_pv.aliqiva, 0)/ 100)), 2); v_vlicmsST := round((v_vbasecalcST * rec_pv.aliqicmsret / 100)-coalesce(v_vicms, 0), 2); else --v_DescontaStdoPreco = 'S' if rec_pv.pautaret > 0 then v_vbasecalcST := rec_pv.pviqtdeatecar * rec_pv.pautaret; else if rec_pv.percrbcicmsret > 0 then v_vbasecalcST := (v_vpro - round((v_vpro + v_vipi)* rec_pv.percrbcicmsret / 100, 6)); else --= (R$1.050,00 * 100%) / 114,42% = R$ 917,67 -- select round(((1 + (66.65+0) / 100) * 20) - 20,4) -- select 100+9 -- select round(((15.65 * 100)) / 113.33 ,6) v_indice_st := round(((1 + (coalesce(rec_pv.aliqiva, 0)+coalesce(rec_pv.fcpaliqicmsst, 0)) / 100) * rec_pv.aliqicmsret) - rec_pv.aliqicms,6); v_indice_st := 100+v_indice_st; v_vpro := round((v_vpro * 100) / v_indice_st,6); --NECESSARIO RECALCULAR O ICMS if rec_pv.pauta > 0 then v_vbasecalc := rec_pv.pviqtdeatecar * rec_pv.pauta; else if rec_pv.percrbcicms > 0 then v_vbasecalc := (v_vpro - round(v_vpro * rec_pv.percrbcicms / 100, 2)); else --Compor base de calculo se aliq icms > 0 if rec_pv.aliqicms > 0 then v_vbasecalc := v_vpro; else v_vbasecalc := 0; end if; end if; end if; v_vbasecalc := coalesce(v_vbasecalc, 0) + case when v_vbasecalc>0 then coalesce(v_vipi, 0) else 0 end; v_vicms := round(v_vbasecalc * coalesce(rec_pv.aliqicms, 0)/ 100, 2); v_voutros := case when rec_pv.pvivltotal-v_vbasecalc < 0 then 0 else rec_pv.pvivltotal-v_vbasecalc end; v_vbasecalc_efet := coalesce(v_vbasecalc, 0) + case when v_vbasecalc>0 then coalesce(v_vipi, 0) else 0 end; v_vicms_efet := round(v_vbasecalc * coalesce(rec_pv.aliqicmsefet, 0)/ 100, 2); v_vbasecalcST := v_vpro + v_vipi; v_vbasecalcST := round((v_vbasecalcST + (case when v_vbasecalcST>0 then coalesce(rec_pv.despbol, 0) else 0 end))*(1 +(coalesce(rec_pv.aliqiva, 0)/ 100)), 6); v_vlicmsST := round((v_vbasecalcST * rec_pv.aliqicmsret / 100)-coalesce(v_vicms, 0), 6); end if; end if; end if; end if; if rec_pv.fcpaliqicms > 0 then v_vbcfcp := v_vbasecalc;--rec_pv.pvivltotal; v_vlfcp := round((v_vbcfcp * rec_pv.fcpaliqicms / 100), 2); end if; if rec_pv.fcpaliqicmsst > 0 then v_vbcfcpST := v_vbasecalcST; v_vlfcpST := round((v_vbcfcpST * rec_pv.fcpaliqicmsst / 100), 6); v_vlfcpST := round(v_vlfcpST-coalesce(v_vlfcp, 0), 6); end if; --corrige o valor final baseado na forma de calculo if v_DescontaStdoPreco = 'N' then v_vproFinal := v_vpro; else --v_DescontaStdoPreco = 'S' v_vproFinal := v_vproFinal - v_vlicmsST - v_vlfcpST; v_vbasecalc := coalesce(v_vproFinal, 0) + case when v_vproFinal > 0 then coalesce(rec_pv.despbol, 0) else 0 end; v_vicms := round(v_vbasecalc * coalesce(rec_pv.aliqicms, 0)/ 100, 2); v_voutros := rec_pv.pvivltotal-v_vbasecalc; v_vbasecalc_efet := coalesce(v_vbasecalc, 0) + case when v_vbasecalc>0 then coalesce(rec_pv.despbol, 0) else 0 end; end if; end if; --IPI/ST - QD PEDIDO POSSUI INDICE (TENDO COMO BASE O BLOCO ANTERIOR) if rec_pv.opnfsta in ('G') and rec_pv.pvindice > 0 then v_vipi := round(v_vpro * coalesce(rec_pv.percipi, 0)/ 100, 2); -- Linha específica para esse bloco v_vipi := round(v_vipi *(rec_pv.pvindice / 100.0), 2); if rec_pv.aliqicmsret > 0 then if rec_pv.pautaret > 0 then v_vbasecalcST := rec_pv.pviqtdeatecar * rec_pv.pautaret; else if rec_pv.percrbcicmsret > 0 then --v_vbasecalcST := round((rec_pv.pvivltotal+v_vipi+frete)*rec_pv.percrbcicmsret/100,4); v_vbasecalcST := round((v_vpro + v_vipi)* rec_pv.percrbcicmsret / 100, 4); else --v_vbasecalcST := rec_pv.pvivltotal+v_vipi+frete; v_vbasecalcST := v_vpro + v_vipi; end if; end if; v_vbasecalcST := round(v_vbasecalcST *(1 +(coalesce(rec_pv.aliqiva, 0)/ 100)), 6); v_vlicmsST := round((v_vbasecalcST * rec_pv.aliqicmsret / 100)-coalesce(v_vicms, 0), 6); -- Linhas específicas para esse bloco v_vbasecalcST := round((v_vbasecalcST + (case when v_vbasecalcST>0 then coalesce(rec_pv.despbol, 0) else 0 end))*(rec_pv.pvindice / 100.0), 6); v_vlicmsST := round(v_vlicmsST *(rec_pv.pvindice / 100.0), 6); end if; if rec_pv.opnfusaipinoicms = 'S' then v_vbasecalc := coalesce(v_vbasecalc, 0) + case when v_vbasecalc>0 then coalesce(v_vipi, 0) else 0 end; v_vicms := round(v_vbasecalc * coalesce(rec_pv.aliqicms, 0)/ 100, 2); v_voutros := case when v_vpro-v_vbasecalc < 0 then 0 else rec_pv.pvivltotal - v_vbasecalc end; v_vbasecalc_efet := coalesce(v_vbasecalc, 0) + case when v_vbasecalc>0 then coalesce(v_vipi, 0) else 0 end; v_vicms_efet := round(v_vbasecalc * coalesce(rec_pv.aliqicmsefet, 0)/ 100, 2); end if; end if; insert into nfi (nficadusuparcod, nficadhorario, nfialtusuparcod, nfialthorario, nfinfempparcod, nfinfparcod, nfinfnum, nfinfserie, nfinfcod, nfiprocod, nfiuvecod, nfiuvedes, nfiuveun, nfiuvemult, nfiqtde, nfivltabunit, nfivlunit, nfivl, nficfopcod, nficstcod, nficsosncod, nfialiqcredsn, nfivlcredicmssn, nfibcicms, nfipercredbcicms, nfialiqicms, nfialiqicmsefet, nfivlicms, nfibcicmsst, nfipercredbcicmsst, nfialiqicmsst, nfivlicmsst, nfibcipi, nficstipicod, nfialiqipi, nfivlipi, nficstpiscofinscod, nfialiqpis, nfivlpautapis, nfivlpis, nfialiqcofins, nfivlpautacofins, nfivlcofins, nfivlfrete, nfivlseguro, nfivldesc, nfivloutrasdesp, nfivlisento, nfivloutros, nfivldesprat, nfivldespnrat, nficustocompra, nficustoreal, nfivlvensug, nfiforparcod, nfibcpis, nfibccofins, nfibcqtpis, nfibcqtcofins, nfipuvecod, nfipuvedes, nfipuveun, nfipuvemult, nfipqtde, nfipvltabunit, nfipvlunit, nfiuvenf, nfiseq, nfibasedebcred, nfiqtdefalta, nfiqtdecorte, --difal nfidifalbcfcpdest, nfidifalpercfcpdest, nfidifalpercicmsdest, nfidifalpercpartdest, nfidifalvlfcpdest, nfidifalvlicmsdest, nfidifalvlicms, nfiinfadprod, --FCP nfibcfcp, nfifcpaliqicms, nfifcpvlqicms, nfibcfcpst, nfifcpaliqicmsst, nfifcpvlqicmsst, nfialiqiva, nfibcicmsefet, nfivlicmsefet, nfipedcli, nfimetrocubico, nficbenef ) values ( p_usuario,--nficadusuparcod v_agora,--nficadhorario, null,--nfialtusuparcod, null,--nfialthorario, rec_pv.pvempparcod,--nfinfempparcod, rec_pv.pvcliparcod,--nfinfparcod, v_nfcod,--nfinfnum, Receber v_nfcod/seq provisoriamente ate gravar nfi, cpr e cprpg '0',--nfinfserie, Receber v_nfcod/seq provisoriamente ate gravar nfi, cpr e cprpg v_nfcod,--nfinfcod, rec_pv.pviprocod,--nfiprocod, rec_pv.pviuvecod,--nfiuvecod, rec_pv.pviuvedes,--nfiuvedes, rec_pv.pviuveun,--nfiuveun, rec_pv.pviuvemult,--nfiuvemult, rec_pv.pviqtdeatecar,--nfiqtde, rec_pv.pvivltab,--nfivltabunit, v_vproFinal/rec_pv.pviqtdeatecar,-- rec_pv.pvivlven,--nfivlunit v_vproFinal,--rec_pv.pvivltotal,--nfivl, rec_pv.cfopcod,--nficfopcod, rec_pv.cst,--nficstcod, rec_pv.gtcsosncod,--nficsosncod, rec_pv.gtpCredSN,--nfialiqcredsn, rec_pv.vCredICMSSN,--nfivlcredicmssn, v_vbasecalc,--nfibcicms, rec_pv.percrbcicms,--nfipercredbcicms, rec_pv.aliqicms,--nfialiqicms, rec_pv.aliqicmsefet,--nfialiqicmsefet v_vicms,--nfivlicms, v_vbasecalcST,--nfibcicmsst, rec_pv.percrbcicmsret,--nfipercredbcicmsst, coalesce(rec_pv.aliqicmsret, 0),--(coalesce(rec_pv.aliqicmsret,0)+coalesce(rec_pv.fcpaliqicmsst,0)),--nfialiqicmsst, v_vlicmsST,--nfivlicmsst, rec_pv.pvivltotal,--nfibcipi rec_pv.cstipi,--nficstipicod, rec_pv.percipi,--nfialiqipi, v_vipi,--nfivlipi, rec_pv.piscst,--nficstpiscofinscod, rec_pv.pisaliq,--nfialiqpis, rec_pv.pisvlpauta,--nfivlpautapis, round(rec_pv.bcpis * rec_pv.pisaliq / 100, 2),--nfivlpis, rec_pv.cofinsaliq,--nfialiqcofins, null,--nfivlpautacofins, round(rec_pv.bccofins * rec_pv.cofinsaliq / 100, 2),--nfivlcofins, rec_pv.pvivlfrete,--nfivlfrete, null,--nfivlseguro, 0,--rec_pv.vldesc,--nfivldesc, rec_pv.despbol,--nfivloutrasdesp, v_visento,--nfivlisento, v_voutros,--nfivloutros, null,--nfivldesprat, null,--nfivldespnrat, rec_pv.estcustocompra,--nficustocompra, rec_pv.estcustoreal,--nficustoreal, null,--nfivlvensug, rec_pv.fpeforparcod,--nfiforparcod, rec_pv.bcpis,--nfibcpis numeric(14,4), rec_pv.bccofins,--nfibccofins numeric(14,4), rec_pv.bcqtpis,--nfibcqtpis numeric(14,4), rec_pv.bcqtcofins,--nfibcqtcofins numeric(14,4), rec_pv.puvecod,--nfipuvecod integer, rec_pv.puvedes,--nfipuvedes character varying(60), rec_pv.puveun,--nfipuveun character varying(10), rec_pv.puvemult,--nfipuvemult numeric(14,4), rec_pv.pqtde,--nfipqtde numeric(14,4) DEFAULT 0, rec_pv.pvltabunit,--nfipvltabunit numeric(14,4) DEFAULT 0, rec_pv.pvlven,--nfipvlunit numeric(14,4) DEFAULT 0, rec_pv.uvenf,--nfiuvenf char(1) DEFAULT 'V' rec_pv.pviseq,--nfiseq rec_pv.pvibasedebcred,--pvibasedebcred rec_pv.qtdefalta,--nfiqtdefalta rec_pv.qtdecorte,--nfiqtdecorte case when rec_pv.tribdifalpercicms>0 then v_vbasecalc else 0 end,--nfidifalbcfcpdest, rec_pv.tribdifalpercfcp,--nfidifalpercfcpdest, rec_pv.tribdifalpercicms,--nfidifalpercicmsdest, rec_pv.tribdifalpercpart,--nfidifalpercpartdest, round(rec_pv.tribdifalpercfcp * v_vbasecalc / 100, 2),-- nfidifalvlfcpdest, --Formula = round(((pICMSUFDest-pICMSInter)*vBCUFDest/100)*pICMSInterPart/100,2) case when rec_pv.tribdifalpercicms>0 then round(((rec_pv.tribdifalpercicms)* v_vbasecalc / 100)* rec_pv.tribdifalpercpart / 100, 2) else 0 end,--nfidifalvlicmsdest, --Formula = round(((pICMSUFDest-pICMSInter)*vBCUFDest/100)*([100]-pICMSInterPart)/100,2) [100]=>menos 100 pois se tribdifalpart=40% então origem paga o resto case when rec_pv.tribdifalpercicms>0 then round(((rec_pv.tribdifalpercicms)* v_vbasecalc / 100)*(100-rec_pv.tribdifalpercpart)/ 100, 2) else 0 end,--nfidifalvlicms rec_pv.pviinfadprod, v_vbcfcp,--nfibcfcp rec_pv.fcpaliqicms, v_vlfcp, v_vbcfcpST,--nfibcfcpst rec_pv.fcpaliqicmsst, v_vlfcpST,--nfifcpvlqicmsst, rec_pv.aliqiva, v_vbasecalc_efet,--nfibcicmsefet, v_vicms_efet,--nfivlicmsefet rec_pv.pvipedcli,--nfipedcli rec_pv.pvimetrocubico, rec_pv.ben_cbenef--nficbenef ); end loop; --************************************************************* --UPDATE PESO --************************************************************* update nf set nfpesobruto = t.t_pesobruto, nfpesoliq = t.t_pesoliq from( select case when coalesce(sum(uvepesobruto), 0) > 0 then sum((pviqtdeatecar * uvepesobruto)) else 0 end as t_pesobruto, case when coalesce(sum(uvepesoliq), 0) > 0 then sum((pviqtdeatecar * uvepesoliq)) else 0 end as t_pesoliq from pvi join uve on pviprocod = uveprocod and pviuvecod = uvecod where pviqtdeatecar>0 and pvipvempparcod = p_empresa and pvipvcod = p_pedido ) as t where nfcod = v_nfcod; --************************************************************* --UPDATE NF PARA DISPONIBILIZAR VL TOTAL PARA GERAR CPR --************************************************************* update nf set nfvl = i.nfvl,--nfvl numeric(14,4) DEFAULT 0, nfvlpro = i.nfvlpro,--nfvlpro numeric(14,4) DEFAULT 0, nfbcicms = i.nfbcicms,--nfbcicms numeric(14,4) DEFAULT 0, nfvlicms = i.nfvlicms,--nfvlicms numeric(14,4) DEFAULT 0, nfbcicmsst = i.nfbcicmsst,--nfbcicmsst numeric(14,4) DEFAULT 0, nfvlicmsst = i.nfvlicmsst,--nfvlicmsst numeric(14,4) DEFAULT 0, nfvlfrete = i.nfvlfrete,--nfvlfrete numeric(14,4) DEFAULT 0, nfvlseguro = i.nfvlseguro,--nfvlseguro numeric(14,4) DEFAULT 0, nfvldesc = 0,--nfvldesc=i.nfvldesc,--nfvldesc numeric(14,4) DEFAULT 0, nfvloutrasdesp = i.nfvloutrasdesp,--nfvloutrasdesp numeric(14,4) DEFAULT 0, nfvlipi = i.nfvlipi,--nfvlipi numeric(14,4) DEFAULT 0, nfvlisento = i.nfvlisento,--nfvlisento numeric(14,4) DEFAULT 0, nfvloutros = i.nfvloutros,--nfvloutros numeric(14,4) DEFAULT 0, nfnumvol = i.nfnumvol--nfnumvol numeric(14,4), from( select nfinfcod, count(nfiprocod) as qtitens, sum(coalesce(nfivl, 0))+ sum(coalesce(nfivlipi, 0))+ sum(coalesce(nfivlfrete, 0))+ sum(coalesce(nfivlseguro, 0))+ sum(coalesce(nfivloutrasdesp, 0))+ sum(coalesce(nfivlicmsst, 0))+ sum(coalesce(nfifcpvlqicmsst, 0)) --sum(coalesce(nfivldesc,0)) desconto ja vem do item as nfvl, sum(coalesce(nfibcicms, 0)) as nfbcicms, sum(coalesce(nfivlicms, 0)) as nfvlicms, sum(coalesce(nfibcicmsst, 0)) as nfbcicmsst, sum(coalesce(nfivlicmsst, 0)) as nfvlicmsst, sum(coalesce(nfivl, 0)) as nfvlpro, sum(coalesce(nfivlfrete, 0)) as nfvlfrete, sum(coalesce(nfivlseguro, 0)) as nfvlseguro, sum(coalesce(nfivloutrasdesp, 0)) as nfvloutrasdesp, sum(coalesce(nfivlipi, 0)) as nfvlipi, sum(coalesce(nfivlisento, 0)) as nfvlisento, sum(coalesce(nfivloutros, 0)) as nfvloutros, sum(coalesce(nfivldesc, 0)) as nfvldesc, sum(coalesce(nfiqtde, 0)) as nfnumvol --difal (gravando só nos itens) --nfdifalvlfcpdest, --nfdifalvlicmsdest, --nfdifalvlicms from nfi where nfinfcod = v_nfcod group by nfinfcod ) as i where nfcod = nfinfcod; --************************************************************* --verifica diferenca de despbol e joga no ultimo produto --************************************************************* /* if rec_pv.despbol > 0 then UPDATE nfi a SET nfivloutrasdesp = round(nfivloutrasdesp,2)+p.dif FROM ( select nfempparcod, nfcod, max(max(nfiseq)) over (partition by 1) as ultpro, nfvloutrasdesp-sum(round(coalesce(nfivloutrasdesp,0),2)) as dif from nf join nfi on nfinfcod = nfcod where nfcod=v_nfcod group by nfempparcod,nfcod,nfvloutrasdesp ) AS p WHERE nfinfcod=nfinfcod and nfinfempparcod=nfempparcod and nfiseq=ultpro; end if; */ --Se opnf gera conta if rec_pv.opnfcpr = 'S' then --************************************************************* --OBTER PROX CODIGO/SEQ DE CPR - CAMPO CHAVE --************************************************************* select nextval('seq_cpr' || rec_pv.pvempparcod::text) into v_cprcod; --select nfvl-(nfvl*rec_pv.cli_perc_fin/100) into v_vnf from nf where nfcod=v_nfcod; select nfvl into v_vnf from nf where nfcod = v_nfcod; select(nfvl * rec_pv.cli_perc_fin / 100) into v_vdesc from nf where nfcod = v_nfcod; select coalesce(conf_div_st_parcelas, 'N') into v_DivSt from conf where confempparcod = p_empresa; --INSERIR CAB insert into cpr(cprempparcod,-- integer NOT NULL, cprcod,-- integer NOT NULL, cprtipo,-- character(3), cprccpcgcccod,-- integer, cprccpcgpcgcod,-- integer, cprmodg,-- character(2), cprparcod,-- integer, cprdocnum,-- integer, cprdocserie,-- character varying(10), cprprev,-- character(1), cprdemi,-- timestamp with time zone, cprdlan,-- timestamp with time zone, cprvt,-- numeric(14,4) DEFAULT 0, cprvtpg,-- numeric(14,4) DEFAULT 0, cprfunparcod,-- integer, cprpcgcod,-- integer, cprnat,-- character(1), cprrcaparcod,-- integer, cprdevparcod,-- integer, cprobs,-- character varying(250), cpr_cart_codigo,-- integer, cpr_d_competencia,-- date, cpr_ccc_id,-- integer, cpr_conta_id,-- integer, cpr_cc_id,-- integer, cpr_notafiscal,-- character varying(20), cprnfcod-- integer, ) select nfempparcod,--cprempparcod integer NOT NULL, v_cprcod,--cprcod integer NOT NULL, 'CRC',--cprtipo character(3), null,--cprccpcgcccod integer, null,--cprccpcgpcgcod integer, 'FT',--cprmodg character(2), nfparcod,--cprparcod integer, null,--update cprdocnum integer, null,--update cprdocserie character varying(10), 'N',--cprprev character(1), nfdtemi,--cprdemi timestamp with time zone, v_agora,--cprdlan timestamp with time zone, v_vnf,--cprvt numeric(14,4) DEFAULT 0, 0,--cprvtpg numeric(14,4) DEFAULT 0, p_usuario,--cprfunparcod integer, null,--cprpcgcod integer, null,--cprnat character(1), nfrcaparcod,--cprrcaparcod integer, nfparcod,--cprdevparcod integer, 'Referente a saida de Mercadoria',--cprobs character varying(250), 1,--cpr_cart_codigo integer, DATE(v_agora),--cpr_d_competencia date, null,--cpr_ccc_id integer, rec_pv.opnf_conta_id,--cpr_conta_id integer, rec_pv.opnf_cc_id,--cpr_cc_id integer, null,--update cpr_notafiscal character varying(20), v_nfcod--cprnfcod integer; from nf where nfcod = v_nfcod; /* SE PEDIDO COM PLANO NEGOCIADO ENTAO GERAR CPRPG A PARTIR DO PVPLPG SENAO NFPLPGCOD */ ------------------------------------------------------------------------------ --confusadtentregaparagerarfin if coalesce(rec_pv.qtparcplpgnegoc, 0)>0 then --INSERIR CPRPG A PARTIR DE PVPLPG (PLANO NEGOCIADO) insert into cprpg (cprpgcprempparcod,-- integer NOT NULL, cprpgcprcod,-- integer NOT NULL, cprpgcod,-- integer NOT NULL, cprpgdvenc,-- date, cprpgv,-- numeric(14,4), cprpgtccod,-- integer, cprpgsta,-- character(1), cprpgfunparcod,-- integer, cprpgdvenco,-- date, cprpgtccodo,-- integer, cprpg_d_lanc,-- timestamp without time zone, cprpg_d_competencia,-- date, cprpgparc-- varchar(250) ) select cprempparcod,--cprpgcprempparcod integer NOT NULL, v_cprcod,--cprpgcprcod integer NOT NULL, pvplpgparc,--cprpgcod integer NOT NULL, case when coalesce(confusadtentregaparagerarfin, 'N')= 'S' and pvdtentrega is not null then pvplpgdtvenc +(DATE(pvdtentrega)-DATE(now())) else pvplpgdtvenc end as pvplpgdtvenc,--cprpgdvenc date, pvplpgv,--cprpgv numeric(14,4), pvplpgtccod,--cprpgtccod integer, 'A',--cprpgsta character(1), cprfunparcod,--cprpgfunparcod integer, pvplpgdtvenc,--cprpgdvenco date, pvplpgtccod,--cprpgtccodo integer, v_agora,--cprpg_d_lanc timestamp without time zone, cast(v_agora as date),--cprpg_d_competencia date, pvplpgparc--cprpgparc varchar(250) from pvplpg join pv on pvcod = pvplpgpvcod and pvcod = rec_pv.pvcod join cpr on cprempparcod = p_empresa and cprcod = v_cprcod join conf on pvempparcod = confempparcod; else --INSERIR CPRPG A PARTIR DE PLPG insert into cprpg (cprpgcprempparcod,-- integer NOT NULL, cprpgcprcod,-- integer NOT NULL, cprpgcod,-- integer NOT NULL, cprpgdvenc,-- date, cprpgv,-- numeric(14,4), --Gerar conta com vl total nf menos ST cprpgtccod,-- integer, cprpgsta,-- character(1), cprpgfunparcod,-- integer, cprpgdvenco,-- date, cprpgtccodo,-- integer, cprpg_d_lanc,-- timestamp without time zone, cprpg_d_competencia,-- date, cprpgparc,-- varchar(250) cprpgdescv ) select cprempparcod,--cprpgcprempparcod integer NOT NULL, v_cprcod,--cprpgcprcod integer NOT NULL, parc,--cprpgcod integer NOT NULL, case when coalesce(confusadtentregaparagerarfin, 'N')= 'S' and rec_pv.pvdtentrega is not null then (v_datahorasaida::date + prazo[parc]::integer)+(DATE(rec_pv.pvdtentrega)-DATE(now())) else v_datahorasaida::date + prazo[parc]::integer end, --cprpgdvenc date, --now()::date+prazo[parc]::integer,--cprpgdvenc date, --ST rateado igualmente em todas as parcelas (REGRA SUSPENSA) --trunc(cprvt/rec_pv.num_parc,2),--cprpgv numeric(14,4), --Com ST na Primeira Parcela case when (v_DivSt = 'S') then trunc(cprvt / rec_pv.num_parc, 2) else case when parc = 1--se primeira parcela, calcula o valor da parcela sem ST e em seguida soma o valor total ST then trunc(((cprvt-coalesce(( select nfvlicmsst from nf where nfcod = cprnfcod), 0))/ rec_pv.num_parc)+ coalesce(( select nfvlicmsst from nf where nfcod = cprnfcod), 0), 2)--cprpgv numeric(14,4), --Gerar conta com vl total nf menos ST else trunc((cprvt-coalesce(( select nfvlicmsst from nf where nfcod = cprnfcod), 0))/ rec_pv.num_parc, 2)--cprpgv numeric(14,4), --Gerar conta com vl total nf menos ST end end, rec_pv.pvtccod,--cprpgtccod integer, 'A',--cprpgsta character(1), cprfunparcod,--cprpgfunparcod integer, v_datahorasaida::date + prazo[parc]::integer,--cprpgdvenco date, --now()::date+prazo[parc]::integer,--cprpgdvenco date, rec_pv.pvtccod,--cprpgtccodo integer, v_agora,--cprpg_d_lanc timestamp without time zone, cast(v_agora as date),--cprpg_d_competencia date, parc,--cprpgparc varchar(250) case when (v_DivSt = 'S') then round((cprvt / rec_pv.num_parc)* rec_pv.cli_perc_fin / 100, 4) else case when (parc = 1 and rec_pv.cli_tipo_perc_fin = 'N') then round((((cprvt-coalesce(( select nfvlicmsst from nf where nfcod = cprnfcod), 0))/ rec_pv.num_parc)+ coalesce(( select nfvlicmsst from nf where nfcod = cprnfcod), 0))* rec_pv.cli_perc_fin / 100, 4) else round((((cprvt-coalesce(( select nfvlicmsst from nf where nfcod = cprnfcod), 0))/ rec_pv.num_parc))* rec_pv.cli_perc_fin / 100, 4) end end from(select regexp_split_to_array(rec_pv.plpgcondicao, ';') as prazo) p join generate_series(1, rec_pv.num_parc) parc on 1 = 1 join cpr on cprempparcod = p_empresa and cprcod = v_cprcod join conf on cprempparcod = confempparcod; end if;--verifica diferenca e joga na ultima parcela update cprpg a set cprpgv = round(cprpgv, 2)+ p.dif from(select cprempparcod, cprcod, cprvt-sum(round(coalesce(cprpgv, 0), 2)) as dif from cpr left join cprpg on cprcod = cprpgcprcod and cprpgcprempparcod = cprempparcod where cprcod = v_cprcod group by cprempparcod, cprcod, cprvt ) as p where cprpgcprcod = cprcod and cprpgcprempparcod = cprempparcod and cprpgcod = rec_pv.num_parc; --corrige o desconto update cprpg a set cprpgdescv = round(cprpgv * rec_pv.cli_perc_fin / 100, 2) from(select cprempparcod, cprcod from cpr left join cprpg on cprcod = cprpgcprcod and cprpgcprempparcod = cprempparcod where cprcod = v_cprcod group by cprempparcod, cprcod, cprvt ) as p where cprpgcprcod = cprcod and cprpgcprempparcod = cprempparcod; end if;--IF rec_pv.opnfcpr='S' THEN --************************************************************* --TRATAMENTO DO ESTOQUE --(No momento tratando pelo pvicb, se existe entao caracteriza pedido CB. --Tratar no futuro Tipo Pedido) select pvipvcod into v_pedido from pvicb where pvipvcod = p_pedido; if found then--SE PEDIDO CESTA for rec_pv_insert_estmv in select pvcliparcod, pvipvempparcod, pvipvcod, pviprocod, pviuvecod, pviuvedes, pviuveun, pviuvemult, pviqtde, pviqtdeate, pviqtdeatecar, opnfcod, opnfsta, opnfcpr, opnfesp, opnftopnfcod from pv join cli on pvcliparcod = cliparcod join loc on cliloccod = loccod join opnf on pvopnfcod = opnfcod join plpg on pvplpgcod = plpgcod join pvicb on pvcod = pvipvcod and pvempparcod = pvipvempparcod join pro on pviprocod = procod join est on pviprocod = estprocod and pvipvempparcod = estempparcod where pviqtdeatecar>0 and opnf_nao_mov_est = 'N' and pvipvempparcod = p_empresa and pvipvcod = p_pedido loop select f_insert_estmv(rec_pv_insert_estmv.pvipvempparcod, rec_pv_insert_estmv.pviprocod, rec_pv_insert_estmv.pviuvecod, rec_pv_insert_estmv.pviuvedes, rec_pv_insert_estmv.pviuveun, rec_pv_insert_estmv.pviuvemult, 'S', rec_pv_insert_estmv.opnfsta, rec_pv_insert_estmv.pviqtdeatecar, v_VERSAO,--'FUNCAO FATURAMENTO', v_VERSAO,--'FATURAMENTO PEDIDO CESTA BASICA', v_nfcod, p_usuario, --novos campos rec_pv_insert_estmv.pvcliparcod, rec_pv_insert_estmv.opnfcod, 'SAIDA MERCADORIA' ) into rec_insert_estmv; end loop; else for rec_pv_insert_estmv in--SE PEDIDO NAO CESTA select pvcliparcod, pvipvempparcod, pvipvcod, pviprocod, pviuvecod, pviuvedes, pviuveun, pviuvemult, pviqtde, pviqtdeate, pviqtdeatecar, opnfcod, opnfsta, opnfcpr, opnfesp, opnftopnfcod, fpeforparcod from pv join cli on pvcliparcod = cliparcod join loc on cliloccod = loccod join opnf on pvopnfcod = opnfcod join plpg on pvplpgcod = plpgcod join pvi on pvcod = pvipvcod and pvempparcod = pvipvempparcod join pro on pviprocod = procod join est on pviprocod = estprocod and pvipvempparcod = estempparcod join fpe on fpeprocod = procod and fpeempparcod = estempparcod and fpetipo = 'P' where pviqtdeatecar > 0 and opnf_nao_mov_est = 'N' and pvipvempparcod = p_empresa and pvipvcod = p_pedido loop if rec_pv.opnfusaentregafutura = 'N' then select f_insert_estmv(rec_pv_insert_estmv.pvipvempparcod, rec_pv_insert_estmv.pviprocod, rec_pv_insert_estmv.pviuvecod, rec_pv_insert_estmv.pviuvedes, rec_pv_insert_estmv.pviuveun, rec_pv_insert_estmv.pviuvemult, 'S', rec_pv_insert_estmv.opnfsta, rec_pv_insert_estmv.pviqtdeatecar, v_VERSAO,--'FUNCAO FATURAMENTO', v_VERSAO,--'FATURAMENTO PEDIDO DE VENDA', v_nfcod, p_usuario, --novos campos rec_pv_insert_estmv.fpeforparcod,--rec_pv_insert_estmv.pvcliparcod, alterado temporariamente para mostrar o fornecedor do produto rec_pv_insert_estmv.opnfcod, 'SAIDA MERCADORIA' ) into rec_insert_estmv; end if; /*************************************************************** * ALIMENTA CLIEST **************************************************************/ if rec_pv.opnfusaentregafutura = 'S' then select coalesce(estcliprocod, 0) into v_cliestprocod from estcli where estcliparcod = rec_pv_insert_estmv.pvcliparcod and estcliprocod = rec_pv_insert_estmv.pviprocod and estcliuvecod = rec_pv_insert_estmv.pviuvecod; if v_cliestprocod > 0 then update estcli set estcliest = coalesce(estcliest, 0)+ rec_pv_insert_estmv.pviqtdeatecar where estcliparcod = rec_pv_insert_estmv.pvcliparcod and estcliprocod = rec_pv_insert_estmv.pviprocod and estcliuvecod = rec_pv_insert_estmv.pviuvecod; else insert into estcli (estcliparcod, estcliprocod, estcliuvecod, estcliest ) values ( rec_pv_insert_estmv.pvcliparcod,--estcliparcod, rec_pv_insert_estmv.pviprocod,--estcliprocod, rec_pv_insert_estmv.pviuvecod,--estcliuvecod, rec_pv_insert_estmv.pviqtdeatecar--estcliest ); end if;--v_cliestprocod > 0 end if;--rec_pv.opnfusaentregafutura = 'S' /*************************************************************** * ALIMENTA CLIEST **************************************************************/ end loop; end if; --************************************************************* -- TRATAMENTO LOTE --************************************************************* for rec_pv_usacontrolelote in --FILTRA ITENS DO PEDIDO QUE USA CONTROLE DE LOTE select pvcliparcod, pvipvempparcod, pvipvcod, pviprocod, pviuvecod, pviuvedes, pviuveun, pviuvemult, pviqtde, pviqtdeate, pviqtdeatecar, opnfsta, opnfcpr, opnfesp, opnftopnfcod, pvilotelotecod, pviloteqtdeatecar from pv join cli on pvcliparcod = cliparcod join loc on cliloccod = loccod join opnf on pvopnfcod = opnfcod join plpg on pvplpgcod = plpgcod join pvi on pvcod = pvipvcod and pvempparcod = pvipvempparcod join pro on pviprocod = procod join est on pviprocod = estprocod and pvipvempparcod = estempparcod join pvilote on pvipvcod = pvilotepvipvcod and pvilotepviseq = pviseq where pviqtdeatecar>0 and opnf_nao_mov_est = 'N' and estusacontrolelote = 'S' and pvcod = p_pedido and pvipvempparcod = p_empresa loop select f_insert_estlotemv( rec_pv_usacontrolelote.pvipvempparcod, rec_pv_usacontrolelote.pviprocod, rec_pv_usacontrolelote.pviuvecod, rec_pv_usacontrolelote.pviuvedes, rec_pv_usacontrolelote.pviuveun, rec_pv_usacontrolelote.pviuvemult, rec_pv_usacontrolelote.pvilotelotecod, 'S', rec_pv_usacontrolelote.opnfsta, rec_pv_usacontrolelote.pviloteqtdeatecar, v_VERSAO,--'FUNC FATURAMENTO', v_VERSAO,--'FATURAMENTO PEDIDO DE VENDA', v_nfcod, p_usuario) into rec_insert_estlotemv; insert into nfilote ( nfilotecadusuparcod, nfilotecadhorario, nfilotealtusuparcod, nfilotealthorario, nfilotenfempparcod, nfilotenfparcod, nfilotenfnum, nfilotenfserie, nfilotenfcod, nfiloteprocod, nfiloteuvecod, nfiloteuvedes, nfiloteuveun, nfiloteuvemult, nfilotelotecod, nfiloteqtde) values ( p_usuario, v_agora, null, null, rec_pv_usacontrolelote.pvipvempparcod, rec_pv_usacontrolelote.pvcliparcod, 1,--substituir no update '1',--substituir no update v_nfcod, rec_pv_usacontrolelote.pviprocod, rec_pv_usacontrolelote.pviuvecod, rec_pv_usacontrolelote.pviuvedes, rec_pv_usacontrolelote.pviuveun, rec_pv_usacontrolelote.pviuvemult, rec_pv_usacontrolelote.pvilotelotecod, rec_pv_usacontrolelote.pviloteqtdeatecar ); end loop; --FOR rec_pv_usacontrolelote IN --************************************************************* -- LIBERACAO DA QTDE RESERVADA --************************************************************* select f_tratar_reserva(p_empresa) into v_res; --LOCK TABLE "app"; -- trava a tabela para nenhuma outra instancia da função acessar a tabela e gerar o mesmo numero. --p_numero = (SELECT numero FROM "app" WHERE empresa= p_empresa AND serie = p_serie); -- pega o numero da tabela --IF p_numero is null THEN --caso não tenha registro para a empresa e serie informado, cria um novo. --INSERT INTO "app" (appcod,appdes,appcom) VALUES (1,p_empresa,p_serie); --p_numero = 1; --END IF; --************************************************************* -- GERAR PROXIMO NUM NF --************************************************************* select empresa, layout, numero, serie into rec_seqnf from f_seqnf(rec_pv.pvempparcod, rec_pv.pvopnfcod); --************************************************************* -- ATUALIZAR PROXIMO NUM NF E DEMAIS DADOS --************************************************************* update nf set nfnum = rec_seqnf.numero, nfserie = rec_seqnf.serie where nfcod = v_nfcod; update nfe set nfenfnum = rec_seqnf.numero, nfenfserie = rec_seqnf.serie where nfenfcod = v_nfcod; update nfecf set nfecfnfnum = rec_seqnf.numero, nfecfnfserie = rec_seqnf.serie where nfecfnfcod = v_nfcod; update nfi set nfinfnum = rec_seqnf.numero, nfinfserie = rec_seqnf.serie where nfinfcod = v_nfcod; update cpr set cprdocnum = rec_seqnf.numero, cprdocserie = rec_seqnf.serie, cpr_notafiscal = rec_seqnf.numero::text where cprnfcod = v_nfcod; --cprcod=v_cprcod; update pv set pvsta = 'FT', pvaltusuparcod = p_usuario, pvalthorario = now(), pvacao = 'FUNCAO FATURAMENTO' || v_VERSAO where pvcod = rec_pv.pvcod and pvempparcod = rec_pv.pvempparcod; update car set carsta = 'FT', cartf = 'F' where carcod = rec_pv.pvcarcod and carempparcod = rec_pv.pvempparcod; update nfilote set nfilotenfnum = rec_seqnf.numero, nfilotenfserie = rec_seqnf.serie where nfilotenfcod = v_nfcod; -- corrige o nfivl caso a diferença de round 4 - round 2 seja maior que 0 jogando essa diferença no primeiro item if (v_DescontaStdoPreco = 'S') and (rec_pv.isento <> 'S') then UPDATE nfi a SET nfivl = round(nfivl,4)+p.dif, nfibcicms = round(nfibcicms,4)+p.dif FROM ( select nfempparcod, nfcod, max(max(nfiseq)) over (partition by 1) as ultpro, sum((nfivl+nfivlicmsst+nfifcpvlqicmsst)-(round(nfivl,2)+round(nfivlicmsst,2)+round(nfifcpvlqicmsst,2))) as dif from nf join nfi on nfinfcod = nfcod where nfcod=v_nfcod group by nfempparcod,nfcod ) AS p WHERE nfiseq=ultpro and nfinfcod=v_nfcod; end if; --atualizar info sobre compras do cliente if rec_pv.opnftopnfcod in ('VE', 'VI', 'VV') then --Inserindo a Data da Primeira Compra update cli set clidpcomp = v_agora where cliparcod = rec_pv.pvcliparcod and (clidpcomp is null); --Atualizando a Data da Ultima Compra update cli set cliducomp = v_agora, cliultnfnum = rec_seqnf.numero, cliultnfserie = rec_seqnf.serie where cliparcod = rec_pv.pvcliparcod; end if; --************************************************************* -- NFIDET --************************************************************* select f_atualizar_nfidet(v_nfcod) into v_nfidet; --************************************************************* -- EFETIVACAO AUTOMATICA --************************************************************* if rec_pv.opnfcpr = 'S' then select confefetivarauto into v_efetauto from conf where confempparcod = rec_pv.pvempparcod; if coalesce(v_efetauto, 'N')= 'S' then select f_efetivar_automatico(v_nfcod) into rec_efetauto; end if; end if; --************************************************************* -- ENVIO DE MENSAGEM --************************************************************* select nextval('mensagem_mens_cod_seq') into v_menscod; insert into mensagem (mens_cod, mens_dtlan, mens_de, mens_assunto, mens_texto1, mens_texto2) values (v_menscod, now(), p_usuario, 'Faturamento realizado', 'NFe ' || cast(rec_seqnf.numero as varchar)|| ' - Faturamento realizado para o pedido: ' || cast(p_pedido as varchar), 'Cliente: ' ||( select pardes from par where parcod = ( select pvcliparcod from pv where pvcod = p_pedido)) ); insert into mens_para (menspara_mens_cod, menspara_para, menspara_dtreceb, menspara_dtexc) values (v_menscod, rec_pv.pvrcaparcod, null, null); if v_nfcod>0 then return QUERY select v_nfcod::integer as frfatnfcod, rec_seqnf.numero::integer as frfatnfnum, rec_seqnf.serie::text as frfatnfserie, 'Faturamento realizado'::text; else return QUERY select 0::integer as frfatnfcod, 0::integer as frfatnfnum, ''::text as frfatnfserie, 'Nenhum pedido faturado'::text; end if; --RETURN QUERY SELECT 1::integer as frfatnfcod, 1::integer as frfatnfnum, '1'::text as frfatnfserie, 'Faturamento realizado'::text; return; end; $function$ ; -- Permissions ALTER FUNCTION public.f_realizar_faturamento(int4, int4, int4, int4, timestamptz, timestamptz, int4, int4, int4) OWNER TO postgres; GRANT ALL ON FUNCTION public.f_realizar_faturamento(int4, int4, int4, int4, timestamptz, timestamptz, int4, int4, int4) TO public; GRANT ALL ON FUNCTION public.f_realizar_faturamento(int4, int4, int4, int4, timestamptz, timestamptz, int4, int4, int4) TO postgres; GRANT ALL ON FUNCTION public.f_realizar_faturamento(int4, int4, int4, int4, timestamptz, timestamptz, int4, int4, int4) TO consulta; ------------------------------------------------------------------------------------------------ delete from menu; insert into menu values (1,'Parâmetros',1,'0','','S','N'); insert into menu values (2,'Configuração Geral',1,'108','formconf','S','N'); insert into menu values (3,'Controle de Acesso',1,'106','formusu','S','N'); insert into menu values (4,'Alterar Senha',1,'107','frmalterarsenha','S','N'); insert into menu values (5,'Empresa',1,'101','formemp','S','N'); insert into menu values (6,'Departamento',1,'102','formdepe','S','N'); insert into menu values (7,'Seção',1,'103','formsece','S','N'); insert into menu values (8,'Função',1,'104','formfunc','S','N'); insert into menu values (9,'Funcionário',1,'105','formfun','S','N'); insert into menu values (10,'Município',1,'109','formmun','S','N'); insert into menu values (11,'País',1,'','formpais','S','N'); insert into menu values (12,'Motivos de Devolução de Nota Fiscal',1,'113','formtdvnf','S','N'); insert into menu values (13,'Motivos de Exclusão',1,'114','formtmex','S','N'); insert into menu values (14,'Tipos de Baixa',1,'116','formtb','S','N'); insert into menu values (15,'Tipos de Bônus',1,'117','formtbon','S','N'); insert into menu values (16,'Configurações de Boletos',1,'118','frmboleto','S','N'); insert into menu values (17,'Impressoras ECF',1,'120','formmaqecf','S','N'); insert into menu values (18,'Unidades de Medida',1,'122','formunidade','S','N'); insert into menu values (19,'Layout de Notas Fiscais',1,'127','formel','S','N'); insert into menu values (20,'Layouts de Impressão',1,'','formgerlay','S','N'); insert into menu values (21,'Configuração de Contas',1,'','formconfconta','S','N'); insert into menu values (22,'Histórico de Alterações',1,'','formlog','S','N'); insert into menu values (23,'Calendário',1,'','formferiados','S','N'); insert into menu values (24,'Tributação',24,'0','','S','N'); insert into menu values (25,'Regime de Tributação',24,'123','formregtrib','S','N'); insert into menu values (26,'CFOP',24,'123','formcfop','S','N'); insert into menu values (27,'Tipos de OPNF',24,'125','formtopnf','S','N'); insert into menu values (28,'OPNF',24,'112','formopnf','S','N'); insert into menu values (29,'Grupo de Tributação',24,'111','formgt','S','N'); insert into menu values (30,'Cadastro de NCM',24,'','formncm','S','N'); insert into menu values (31,'Tributação por NCM',24,'128','formtrib','S','N'); insert into menu values (32,'Tributação por Produto',24,'129','formtribpro','S','N'); insert into menu values (33,'Tributação de Benefício',24,'','formtribbenef','S','N'); insert into menu values (34,'Tributação de Transferência',24,'','formtribtransf','S','N'); insert into menu values (35,'Cadastro de Benefício Fiscal - Cliente',24,'','formbenef','S','N'); insert into menu values (36,'Cadastro de Benefício Fiscal - Produto',24,'','formbenf','S','N'); insert into menu values (37,'Cadastro de CEST',24,'','formcest','S','N'); insert into menu values (38,'Tributação de Entrada',24,'','formtribentr','S','N'); insert into menu values (39,'Gestão de Produtos',39,'0','','S','N'); insert into menu values (40,'Aplicação do Produto',39,'301','formapp','S','N'); insert into menu values (41,'Departamento',39,'201','formdepp','S','N'); insert into menu values (42,'Seção',39,'202','formsecp','S','N'); insert into menu values (43,'Categoria',39,'203','formcat','S','N'); insert into menu values (44,'SubCategoria',39,'204','formscat','S','N'); insert into menu values (45,'Marca',39,'206','formmarca','S','N'); insert into menu values (46,'Família de Produtos',39,'312','formfam','S','N'); insert into menu values (47,'Produto',39,'306','formpro','S','N'); insert into menu values (48,'Produto Serviço',39,'','formproserv','S','N'); insert into menu values (49,'Produto Simplificado',39,'','formproduto','S','N'); insert into menu values (50,'Agrupamento de Produto',39,'302','formagrup','S','N'); insert into menu values (51,'Administração de Produtos',39,'311','formadmpro','S','N'); insert into menu values (52,'Relação de Produtos',39,'','formrelcadastroproduto','S','N'); insert into menu values (53,'Cesta Básica',53,'0','','S','N'); insert into menu values (54,'Montagem Cesta Básica',53,'303','formcesta','S','N'); insert into menu values (55,'Proposta Cesta Básica',53,'','formcestaprop','S','N'); insert into menu values (56,'Aprovação Proposta Cesta Básica',53,'','formcestapropaprov','S','N'); insert into menu values (57,'Ordem de Produção Cesta Básica',53,'','formcestaop','S','N'); insert into menu values (58,'Entrada de Produção Cesta Básica',53,'','formcestaep','S','N'); insert into menu values (59,'Alterar Item de Produção Cesta Básica',53,'','formcestaopalt','S','N'); insert into menu values (60,'Pedido de Venda Cesta Básica',53,'','formpvcb','S','N'); insert into menu values (61,'Relatório - Ordem Produção Consolidado',53,'','formrelordprodcbconsolidado','S','N'); insert into menu values (62,'Gestão de Compras',62,'0','','S','N'); insert into menu values (63,'Tipo de Fornecedor',62,'126','formtipoforn','S','N'); insert into menu values (64,'Representante do Fornecedor',62,'304','formrep','S','N'); insert into menu values (65,'Fornecedor',62,'305','formforn','S','N'); insert into menu values (66,'Pedido de Compra',62,'307','formpedcompra','S','N'); insert into menu values (67,'Consulta de Pedidos de Compra',62,'312','formconsultapc','S','N'); insert into menu values (68,'Manutenção de Notas de Entrada',62,'309','formmannf','S','N'); insert into menu values (69,'Ajuste de Custo',62,'','formajustecusto','S','N'); insert into menu values (70,'Recalcular Custo',62,'','formatualcusto','S','N'); insert into menu values (71,'Relatório - Sugestão de Compra',62,'','formrelsugestaocompra','S','N'); insert into menu values (72,'Relatório - Giro do Estoque',62,'','formrelgiroestoque','S','N'); insert into menu values (73,'Distribuição',62,'','formdistr','S','N'); insert into menu values (74,'Cadastro de Zonas',62,'','formzona','S','N'); insert into menu values (75,'Manutenção de Zonas - Frete',62,'','formmanzona','S','N'); insert into menu values (76,'Recebimento de Mercadoria',76,'0','','S','N'); insert into menu values (77,'Autorização de Recebimento',76,'401','formautrec','S','N'); insert into menu values (78,'Entrada de Mercadoria',76,'402','formnf','S','N'); insert into menu values (79,'Sugestão de Preço',76,'403','formsugestao_preco','S','N'); insert into menu values (80,'Atualização de Entrada',76,'404','formatuentr','S','N'); insert into menu values (81,'Desagregação',76,'0','formdesagregacao','S','N'); insert into menu values (82,'Devolução para Fornecedor',76,'405','formnfdev','S','N'); insert into menu values (83,'Devolução sem documento do Cliente',76,'407','formdevnf','S','N'); insert into menu values (84,'Manutenção de Lote',76,'408','formlote','S','N'); insert into menu values (85,'Entrada de Lote',76,'','formentrlote','S','N'); insert into menu values (86,'Conhecimento de Frete - Entrada',76,'409','frmcfrete_ent','S','N'); insert into menu values (87,'Devolução para Fornecedor por Carregamento',76,'411','formdevforncar','S','N'); insert into menu values (88,'Entrada de Importação',76,'','formnfimport','S','N'); insert into menu values (89,'Proposta de Importação',76,'','formpropimportacao','S','N'); insert into menu values (90,'Entrada Cega',76,'','formentrcega','S','N'); insert into menu values (91,'Mapa de Conferência Cega Consolidado',76,'','mapacegoconsolidado','S','N'); insert into menu values (92,'Relatório - Compras Acumuladas',76,'','formrelcompacum','S','N'); insert into menu values (93,'Precificação',93,'0','','S','N'); insert into menu values (94,'Livro de Preço',93,'502','formlp','S','N'); insert into menu values (95,'Precificação',93,'503','formpreco','S','N'); insert into menu values (96,'Precificação por Tabela de Preço',93,'','formprecificacaolivro','S','N'); insert into menu values (97,'Impressão de Tabela de Preço',93,'','formrellivropreco','S','N'); insert into menu values (98,'Logística',98,'0','','S','N'); insert into menu values (99,'Rota',98,'601','formrota','S','N'); insert into menu values (100,'Praça',98,'602','formpraca','S','N'); insert into menu values (101,'Localidade',98,'603','formloc','S','N'); insert into menu values (102,'Motorista',98,'604','formmot','S','N'); insert into menu values (103,'Veículo',98,'605','formvei','S','N'); insert into menu values (104,'Área de Venda',98,'','formarea_venda','S','N'); insert into menu values (105,'Conferente',98,'','formconferente','S','N'); insert into menu values (106,'Categoria de Frota',98,'','formcategfrota','S','N'); insert into menu values (107,'Transporte de Pedido',98,'','formtransppedido','S','N'); insert into menu values (108,'Venda de Mercadoria',108,'0','','S','N'); insert into menu values (109,'Motivos de Não Venda',108,'121','formotnv','S','N'); insert into menu values (110,'Tipos de Cobrança',108,'2401','formtc','S','N'); insert into menu values (111,'Planos de Pagamento',108,'701','formpp','S','N'); insert into menu values (112,'Ramos de Atividades',108,'702','formra','S','N'); insert into menu values (113,'Grupo de Cliente',108,'703','formcliente_grupo','S','N'); insert into menu values (114,'Supervisor',108,'705','formsup','S','N'); insert into menu values (115,'RCA',108,'706','formrca','S','N'); insert into menu values (116,'Promotores',108,'707','formprom','S','N'); insert into menu values (117,'Clientes',108,'708','formcli','S','N'); insert into menu values (118,'Administração de Clientes',108,'709','formadmcarteira','S','N'); insert into menu values (119,'Ficha de atendimento',108,'709','formfa','S','N'); insert into menu values (120,'Manutenção de Notas de Saída',108,'710','formmannfsai','S','N'); insert into menu values (121,'Pedido de Venda',108,'1003','formpvtl','S','N'); insert into menu values (122,'Pedido - Telemarketing Passivo',108,'1004','formpvtlpassivo','N','N'); insert into menu values (123,'Pedido Balcão',108,'1005','formpvbalcao','S','N'); insert into menu values (124,'Consulta de Pedidos',108,'1008','formconpv','S','N'); insert into menu values (125,'Aprovação de Pedidos',108,'1001','formpvaprov','S','N'); insert into menu values (126,'Carteira de Pedidos',108,'1002','frmcartped','S','N'); insert into menu values (127,'Desconto Gerencial Pedido de Venda',108,'1003','formdescpv','S','N'); insert into menu values (128,'Nota de Serviço',108,'','formpvserv','S','N'); insert into menu values (129,'NFSe 4.0',108,'','nfse40','S','N'); insert into menu values (130,'NFSeX',108,'','nfsex','S','N'); insert into menu values (131,'Carta de Correção de Serviço',108,'','formnfcceserv','S','N'); insert into menu values (132,'Pedido - Administrador',108,'1008','formpvadmin','S','N'); insert into menu values (133,'Consulta Preço',108,'','formconsultaprecoproduto','S','N'); insert into menu values (134,'Lista de Preço',108,'','formlistaprecoproduto','S','N'); insert into menu values (135,'Entrega de Venda Futura',108,'','formvendfut','S','N'); insert into menu values (136,'Administração de RCA',108,'','formadmrca','S','N'); insert into menu values (137,'Relatório - Vendas Acumuladas',108,'','formrelvenacum','S','N'); insert into menu values (138,'Relatório - Clientes Sem Vendas',108,'','formrelclientesemvenda','S','N'); insert into menu values (139,'Relatório - Relação de Vendas',108,'','formrelrelacaovenda','S','N'); insert into menu values (140,'Relatório - Nota Fiscal de Serviço',108,'','formrelnfserv','S','N'); insert into menu values (141,'Relatório - Relação de Clientes',108,'','formrellistacliente','S','N'); insert into menu values (142,'Relatório - Produtos sem Venda',108,'','formrelprodutosemvenda','S','N'); insert into menu values (143,'Relatório - Relação de Cortes',108,'','formrelcorteproduto','S','N'); insert into menu values (144,'Relatório - Relação de Vendedor',108,'','formrelacaorca','S','N'); insert into menu values (145,'Relatório - Evolução do Preço de Venda',108,'','formrelevolprvenda','S','N'); insert into menu values (146,'Relatório - Mapa de Vendas Matriz',108,'','formrelmapavenda','S','N'); insert into menu values (147,'Relatório - Mapa de Vendas Filial',108,'','formrelmapavendafilial','S','N'); insert into menu values (148,'Relatório - Relação de Vendas por Endereço',108,'','formrellistavendaendereco','S','N'); insert into menu values (149,'Relatório - Entrega Futura',108,'','formrelentrfut','S','N'); insert into menu values (150,'Relatório - Apuração de Desconto',108,'','formreldesc','S','N'); insert into menu values (151,'Comissão',151,'0','','S','N'); insert into menu values (152,'Categoria de Comissão Produto',151,'801','formce','S','N'); insert into menu values (153,'Categoria de Comissão RCA',151,'802','formcr','S','N'); insert into menu values (154,'Comissão por Produto',151,'803','formcrce','S','N'); insert into menu values (155,'Comissão por Cobrança',151,'804','formcrtc','S','N'); insert into menu values (156,'Recalcular Comissão',151,'805','formrecalccom','S','N'); insert into menu values (157,'Região de Comissão',151,'','formcomissregiao','S','N'); insert into menu values (158,'Comissão por Viagem',151,'','formcomissviagem','S','N'); insert into menu values (159,'Comercial',159,'0','','S','N'); insert into menu values (160,'Meta por RCA',159,'','formmetaemprca','S','S'); insert into menu values (161,'Meta RCA por Distribuição',159,'901','formmetarcadistri','S','S'); insert into menu values (162,'Meta RCA por Categoria',159,'902','formmetarcacat','S','S'); insert into menu values (163,'Administração de Metas / Campanhas',159,'','formmetaatac','S','N'); insert into menu values (164,'Campanha',159,'904','formcamp','S','N'); insert into menu values (165,'Manutenção de Vendas do RCA',159,'906','frmvendasrca','S','N'); insert into menu values (166,'Promoção',159,'','formpromocao','S','N'); insert into menu values (167,'Desconto por Quantidade',159,'','formdescqtde','S','N'); insert into menu values (168,'Autorização Especial de Pedido ',159,'','FormAutorizDescEspecial','S','N'); insert into menu values (169,'Lançamento Deb/Cred RCA',159,'911','formrcamv','S','N'); insert into menu values (170,'Restrição de Produto - iPedi',159,'','formrcapro','S','N'); insert into menu values (171,'Restrição de Venda',159,'','formrestrvenda','S','N'); insert into menu values (172,'ECF - Emissor de Cupom Fiscal',172,'0','','S','N'); insert into menu values (173,'Utilitário ECF',172,'1010','formecfutil','S','N'); insert into menu values (174,'Pedido - Atacadão',172,'1006','formpvvarejo','S','N'); insert into menu values (175,'Listagem/Cotação de Preços',172,'1009','formllp','S','N'); insert into menu values (176,'Consulta de Pedidos Carregamento',172,'1009','formconsultapvcar','A','N'); insert into menu values (177,'Carregamento',177,'0','','S','N'); insert into menu values (178,'Montar Carregamento por Rota',177,'1101','formcar','S','N'); insert into menu values (179,'Montar Carregamento por Pedido',177,'1102','formcarpv','S','N'); insert into menu values (180,'Montar Carregamento de Nota Fiscal',177,'1104','formcarnf','S','N'); insert into menu values (181,'Separação por Pedido',177,'1106','formmapped','S','N'); insert into menu values (182,'Impressão Mapa de Separação de Nota Fiscal',177,'1105','formimprmapanf','S','N'); insert into menu values (183,'ReImpressão Mapa de Separação',177,'','formreimprmapa','S','N'); insert into menu values (184,'ReImpressão de Mapa de Pedido',177,'1107','formremapped','S','N'); insert into menu values (185,'CTe - Conhecimento de Transporte Eletrônico',177,'1110','formcte','S','N'); insert into menu values (186,'CT-e -4.0',177,'1110','cte','S','N'); insert into menu values (187,'MDF-e',177,'','mdfe','S','N'); insert into menu values (188,'Retirar Nota Fiscal de Carregamento',177,'1111','formretnfcar','S','N'); insert into menu values (189,'Retirar Pedido de Carregamento Mapeado',177,'1103','formretpedcar','S','N'); insert into menu values (190,'Administração de Carregamento',177,'','formadmcarreg','S','N'); insert into menu values (191,'Relatório - Mapa de Separação Consolidado',177,'','formrelmapasepconsolidado','S','N'); insert into menu values (192,'Relatório - Posição de Carregamento',177,'','formrelposicaocarreg','S','N'); insert into menu values (193,'Relatório - Listagem de CTe de Saída',177,'','formrelctesaida','S','N'); insert into menu values (194,'Faturamento',194,'0','','S','N'); insert into menu values (195,'Lançar Divergência',194,'1201','formdivpv','S','N'); insert into menu values (196,'Registrar Lote',194,'1202','frmctrllote','S','N'); insert into menu values (197,'Faturar Pedido',194,'1203','formfatped','S','N'); insert into menu values (198,'Faturar Carregamento',194,'1204','formfat','S','N'); insert into menu values (199,'Impressão de Nota Fiscal',194,'1205','formimprnfrav','S','N'); insert into menu values (200,'ReImpressão de Nota Fiscal',194,'1206','formreimprnf','S','N'); insert into menu values (201,'Imprimir Boleto (Pré-impresso)',194,'1207','formimprbol','S','N'); insert into menu values (202,'Imprimir Duplicata',194,'1208','formimprdp','S','N'); insert into menu values (203,'Imprimir Nota Promissória',194,'1209','formimprpromissoria','S','N'); insert into menu values (204,'Impressão Romaneio',194,'1210','formimprrom','S','N'); insert into menu values (205,'Imprimir Rascunho',194,'1211','formimprrascnf','S','N'); insert into menu values (206,'Cancelamento de Nota Fiscal',194,'1212','formcancnf','S','N'); insert into menu values (207,'Estorno de Cancelamento de Nota Fiscal',194,'1213','formestcancnf','S','N'); insert into menu values (208,'NFe Nota Fiscal Eletrônica',194,'1214','nfe','S','N'); insert into menu values (209,'NF-e 4.0',194,'','nfe40','S','N'); insert into menu values (210,'NFC-e 4.0',194,'','nfce40','S','N'); insert into menu values (211,'Emissor de Documentos Eletrônicos',194,'','doce','S','N'); insert into menu values (212,'Carta de Correção',194,'','formnfcce','S','N'); insert into menu values (213,'Manutenção de Volumes - Nota Fiscal',194,'1214','formmanvol','S','N'); insert into menu values (214,'Manutenção de Volumes - Pedido',194,'','formmanvolumepedido','S','N'); insert into menu values (215,'Caixa Varejo',194,'1215','frmcxvarejo','N','N'); insert into menu values (216,'Transferência entre Filias',194,'','formtransestoque','S','N'); insert into menu values (217,'Lançamento de Conferência Cega',194,'1008','formlancconfcega','S','N'); insert into menu values (218,'Conferencia Cega',194,'2211','formconfcega','S','N'); insert into menu values (219,'Consulta de Notas Fiscais',194,'2202','frmconsultanf','S','N'); insert into menu values (220,'Emissão de Outras Nfes',194,'','formoutrasnfes','S','N'); insert into menu values (221,'Cobrança Magnética',221,'0','','S','N'); insert into menu values (222,'Boleto Laser (Impressão,Remessa e Retorno)',221,'1301','boletolaser','S','N'); insert into menu values (223,'Brasil',221,'','brasil','S','N'); insert into menu values (224,'Sicredi',221,'','sicredi','S','N'); insert into menu values (225,'Banrisul',221,'','banrisul','S','N'); insert into menu values (226,'Bradesco',221,'','bradesco','S','N'); insert into menu values (227,'Sicoob',221,'','sicoob','S','N'); insert into menu values (228,'Safra',221,'','Safra','S','N'); insert into menu values (229,'Caixa',221,'','Caixa','S','N'); insert into menu values (230,'Itau',221,'','itau','S','N'); insert into menu values (231,'Santander',221,'','santander','S','N'); insert into menu values (232,'BRB',221,'','brb','S','N'); insert into menu values (233,'Expedição',233,'0','','S','N'); insert into menu values (234,'Portaria',233,'1401','formportaria','S','N'); insert into menu values (235,'Ocorrência de Portaria',233,'','formportariaocorr','S','N'); insert into menu values (236,'Serviço de Portaria',233,'','formservicodeportaria','S','N'); insert into menu values (237,'Plano de Contas',237,'0','','S','N'); insert into menu values (238,'Centro de Custos',237,'1501','frmcentro_custo','S','N'); insert into menu values (239,'Grupo de Contas',237,'1502','formgrupo_conta','S','N'); insert into menu values (240,'Contas Gerenciais',237,'1503','formconta','S','N'); insert into menu values (241,'Contas a Pagar',241,'0','','S','N'); insert into menu values (242,'Lançamento Contas a Pagar',241,'1601','formcprpag','S','N'); insert into menu values (243,'Renegociação Contas a Pagar',241,'1602','formrendocpag','S','N'); insert into menu values (244,'Baixa Contas a Pagar',241,'1603','formbaipag','S','N'); insert into menu values (245,'Estorno de Baixa Contas a Pagar',241,'1606','formbaiestpag','S','N'); insert into menu values (246,'Pagamento com Cheque',241,'1604','frmpagcheque','S','N'); insert into menu values (247,'Cancelamento de Pagamento com Cheque',241,'1607','frmcancheque','S','N'); insert into menu values (248,'Pagamento com Documentos de Terceiros',241,'1605','formpagdoc','S','N'); insert into menu values (249,'Carta de Prorrogação',241,'1809','formecartapr','S','N'); insert into menu values (250,'Entrada Nota Fiscal de Serviço',241,'','Formnfentradaaguaenergiagas','S','N'); insert into menu values (251,'Folha de Pagamento',241,'','formfolhapagamento','S','N'); insert into menu values (252,'Folha de Pagamento Completa',241,'','formfolhapagcompleta','S','N'); insert into menu values (253,'Pagamento Eletrônico - iPag',241,'','ipag','S','N'); insert into menu values (254,'Aprovação de Contas a Pagar',241,'','formcpagaprov','S','N'); insert into menu values (255,'Relatório - Contas a Pagar Resumo',241,'','formrelcpagresumo','S','N'); insert into menu values (256,'Relatório - Contas a Pagar Quitadas',241,'','formrelcpagquitado','S','N'); insert into menu values (257,'Relatório - Contas a Pagar em Aberto',241,'','formrelcpagaberto','S','N'); insert into menu values (258,'Relatório - Contas a Pagar por Centro de Custo',241,'','formrelcpagcentrocusto','S','N'); insert into menu values (259,'Relatório - Contas a Pagar por Grupo de Contas',241,'','formrelcpaggrupoconta','S','N'); insert into menu values (260,'Relatório - Comissão de Motorista por Viagem',241,'','formrelcomissaoviag','S','N'); insert into menu values (261,'Relatório - Comissão de RCA por Liquidez',241,'','relcomissaoliquidez','S','N'); insert into menu values (262,'Relatório - Comissão de RCA',241,'','formrelcomissao','S','N'); insert into menu values (263,'Contas a Pagar',241,'','contpag','S','N'); insert into menu values (264,'Contas a Receber',264,'0','','S','N'); insert into menu values (265,'Tipos de Devolução de Cheques',264,'115','formtdvch','S','N'); insert into menu values (266,'Contas a Receber',264,'','formcreceb','N','N'); insert into menu values (267,'Lançamento Contas a Receber',264,'1701','formcprrec','S','N'); insert into menu values (268,'Renegociação Contas a Receber',264,'1703','formrendocrec','S','N'); insert into menu values (269,'Baixa Contas a Receber',264,'1704','formbairec','S','N'); insert into menu values (270,'Estorno de Baixa Contas a Receber',264,'1709','formbaiestrec','S','N'); insert into menu values (271,'Efetivação de Carregamento (Caixa Motorista)',264,'1702','formef','S','N'); insert into menu values (272,'Devolução de Cheques',264,'1705','formdevdoc','S','N'); insert into menu values (273,'Representação de Cheques',264,'1706','formreapdoc','S','N'); insert into menu values (274,'Depósito/Custódia/Desconto de Cheques',264,'1707','formdepcustdescdoc','S','N'); insert into menu values (275,'Protesto de Títulos',264,'1710','formprotesta','S','N'); insert into menu values (276,'Estorno de Protesto',264,'1711','formestprotesto','S','N'); insert into menu values (277,'Antecipação de Títulos',264,'1712','formanttit','S','N'); insert into menu values (278,'Estorno de Antecipação',264,'1717','formestant','S','N'); insert into menu values (279,'Impressão de Boletos Avulsos',264,'1708','formimpbolm','S','N'); insert into menu values (280,'Caixa Balcão',264,'','formcaixabalcao','S','N'); insert into menu values (281,'Caixa Balcão (TEF)',264,'','formcaixabalcaotef','S','N'); insert into menu values (282,'Borderô de Cobrança',264,'','formbordero','S','N'); insert into menu values (283,'Conciliação de Títulos',264,'','formconccartao','S','N'); insert into menu values (284,'Lançamento Vales',264,'2301','formvale','S','N'); insert into menu values (285,'Baixa Vales',264,'2302','formbaivale','S','N'); insert into menu values (286,'Transferência de Carteira de Títulos',264,'','formtransfcart','S','N'); insert into menu values (287,'Lançamento de Adiantamento',264,'','lancvale','S','N'); insert into menu values (288,'Relatório - Contas a Receber Resumo',264,'','formrelcrecebresumo','S','N'); insert into menu values (289,'Relatório - Contas a Receber em Aberto',264,'','formrelcrecebaberto','S','N'); insert into menu values (290,'Relatório - Contas a Receber Quitadas',264,'','formrelcrecebquitado','S','N'); insert into menu values (291,'Relatório - Títulos em Aberto para Cobrança',264,'','formrelcrecebabertocob','S','N'); insert into menu values (292,'Relatório - Lista de Títulos Protestados',264,'','formrellistatituloprotestado','S','N'); insert into menu values (293,'Negociação de Contas a Receber',264,'','NegociacaoDoc','S','N'); insert into menu values (294,'Relatório - Histórico de Ocorrencia de Titulos',264,'','formrelhisttitulos','S','N'); insert into menu values (295,'Regua de Cobrança',264,'','formreguacob','S','N'); insert into menu values (296,'Contas a Receber',264,'','contrec','S','N'); insert into menu values (297,'Movimentação de Caixa',297,'0','','S','N'); insert into menu values (298,'Bancos',297,'110','formban','S','N'); insert into menu values (299,'Tipos de Movimentação de Caixa',297,'1808','formtcxmv','S','N'); insert into menu values (300,'Caixas/Bancos',297,'1801','formcx','S','N'); insert into menu values (301,'Lançamento Caixa',297,'1802','formlanccx','S','N'); insert into menu values (302,'Transferência entre Caixas',297,'1803','formtransf','S','N'); insert into menu values (303,'Estono de Lançamento',297,'1804','formestornocaixa','S','N'); insert into menu values (304,'Fechamento de Caixa',297,'1806','formfechcx','S','N'); insert into menu values (305,'Estorno de Fechamento',297,'1805','formestfechcx','S','N'); insert into menu values (306,'Extrato de Movimentação de Caixa',297,'1807','frmextrmovcx','S','N'); insert into menu values (307,'Fluxo de Caixa',297,'','formfluxocaixa','S','N'); insert into menu values (308,'Fluxo de Caixa - NOVO',297,'','fluxocaixa','S','N'); insert into menu values (309,'Acerto de Caixa',297,'','formacertocx','S','N'); insert into menu values (310,'Conciliação Bancaria',297,'','conciliacaobancaria','S','N'); insert into menu values (311,'Relatório - Demonstrativo de Contas',297,'','formreldemonstrativoconta','S','N'); insert into menu values (312,'Relatório - Demonstrativo de Fluxo de Caixa - DFC',297,'','formreldemfluxocaixa','S','N'); insert into menu values (313,'Contabilidade',313,'0','','S','N'); insert into menu values (314,'Escrita Fiscal - Apuração de Vendas para CPF',313,'1901','frmlfapvencpf','S','N'); insert into menu values (315,'Escrita Fiscal - Apuração de ICMS',313,'1902','formlfapicms','S','N'); insert into menu values (316,'Escrita Fiscal - Apuração de ICMS Analítico',313,'','formrelapuracaoicmsanalitico','S','N'); insert into menu values (317,'Escrita Fiscal - Apuração de Pis/Cofins',313,'1903','formlfpiscofins','S','N'); insert into menu values (318,'Escrita Fiscal - Apuração IPI',313,'','formrelapuracaoipi','S','N'); insert into menu values (319,'Escrita Fiscal - Crédito Outorgado',313,'1904','formlfcredout','S','N'); insert into menu values (320,'Escrita Fiscal - Registro de Entradas',313,'1905','formlfregent','S','N'); insert into menu values (321,'Escrita Fiscal - Registro de Inventário',313,'1906','formlfreginv','S','N'); insert into menu values (322,'Escrita Fiscal - Registro de Saídas',313,'1907','formrelfiscalicmsregsaida','S','N'); insert into menu values (323,'Escrita Fiscal - Registro de Saídas por CNPJ/CPF',313,'1908','formlfregsaicpf','S','N'); insert into menu values (324,'Escrita Fiscal - Registro de Entradas/Saídas por CFOP',313,'1909','formlflistacfop','S','N'); insert into menu values (325,'Escrita Fiscal - Registro de Saídas por Item da Portaria e por CFOP',313,'1910','formlfregitem','S','N'); insert into menu values (326,'Escrita Fiscal - Ressarcimento de ICMS',313,'1911','formlfregressarc','S','N'); insert into menu values (327,'Escrita Fiscal - Entrada/Saída por Produto',313,'','formrelentrsaiproduto','S','N'); insert into menu values (328,'Confronto Fiscal',313,'1912','frmconfrontofiscal','S','N'); insert into menu values (329,'Sintegra',313,'1913','formsintegra','S','N'); insert into menu values (330,'Livro Eletrônico',313,'1914','formlivro_eletronico','S','N'); insert into menu values (331,'Arquivos ROI',313,'1915','formroi','S','N'); insert into menu values (332,'Ambiente Dexion',313,'1916','formdexion','S','N'); insert into menu values (333,'Exportação Dexion',313,'','ExportarDexion','S','N'); insert into menu values (334,'SPED Fiscal',313,'','formsped','S','N'); insert into menu values (335,'SPED Contribuições (PIS/Cofins)',313,'','formspedpiscofins','S','N'); insert into menu values (336,'Relatório - Apuração PIS/COFINS',313,'','formlfappiscofins','S','N'); insert into menu values (337,'Complemento de ICMS (Entrada/Saída)',313,'','formcomplicms','S','N'); insert into menu values (338,'Inventário',338,'0','','S','N'); insert into menu values (339,'Controle da Contagem de Estoque',338,'2001','frmctrlcontagemest','S','N'); insert into menu values (340,'Contagem de Estoque',338,'2002','frmcontagemest','S','N'); insert into menu values (341,'Relatório de Estoque Retroativo',338,'2003','formrelestretroativo','S','N'); insert into menu values (342,'Contagem - HoneyWell',338,'','formhoneywell','S','N'); insert into menu values (343,'Ajuste de Estoque',338,'','formajusteest','S','N'); insert into menu values (344,'Manutenção de Estoque Pendente',338,'','formmanestpend','S','N'); insert into menu values (345,'Relatório - Posição de Estoque',338,'','formrelposicaoestoque','S','N'); insert into menu values (346,'Relatório - Relação de Estoque',338,'','frmrelest','S','N'); insert into menu values (347,'Relatório - Valor do Estoque',338,'','formrelvalorestoque','S','N'); insert into menu values (348,'Relatório - Saldo de Produto de Armazenagem',338,'','formrelsaldoprodarmaz','S','N'); insert into menu values (349,'Relatório - Controle de Armazenagem',338,'','formrelcontrolearmaz','S','N'); insert into menu values (350,'Utilitários',350,'0','','S','N'); insert into menu values (351,'Backup',350,'2101','formbckup','S','N'); insert into menu values (352,'Força de Vendas',350,'2102','ipedi','S','N'); insert into menu values (353,'Mala Direta',350,'2103','frmmaladireta','S','N'); insert into menu values (354,'Exportar Carteira',350,'2104','frmexportcart','S','N'); insert into menu values (355,'Configurar Etiqueta Zebra',350,'2108','formlayetiqzebra','S','N'); insert into menu values (356,'Imprimir Etiqueta Zebra',350,'2109','formimpretiq','S','N'); insert into menu values (357,'Imprimir Código de Barras',350,'2106','frmimprcodbarras','S','N'); insert into menu values (358,'Atualização Thunder',350,'2106','atualizathunder','S','N'); insert into menu values (359,'Produção',359,'0','','S','N'); insert into menu values (360,'Composição de Produtos',359,'2504','formcomppro','S','N'); insert into menu values (361,'Ítens de Custo de Produção',359,'2503','formicustoprod','S','N'); insert into menu values (362,'Ordem de Produção',359,'2502','formop','S','N'); insert into menu values (363,'Entrada de Produção',359,'2501','formnfep','S','N'); insert into menu values (364,'Consulta Ordem de Produçao',359,'2505','formconsultaop','S','N'); insert into menu values (365,'Conversão de Estoque',359,'','formproconvert','S','N'); insert into menu values (366,'Relatório - Conversão de Estoque',359,'','FormRelProConvert','S','N'); insert into menu values (367,'Relatório - Consumo de Matéria-Prima',359,'','Formrelconsumomateriaprima','S','N'); insert into menu values (368,'Relatório - Perda por Produção',359,'','formrelperdaproducao','S','N'); insert into menu values (369,'Relatório - Produção Realizada',359,'','formrelentradaproducao','S','N'); insert into menu values (370,'Frotas',370,'0','','S','N'); insert into menu values (371,'Tipos de Serviços',370,'2601','formtiposervico','S','N'); insert into menu values (372,'Lançamento de Serviços',370,'2602','formservico','S','N'); insert into menu values (373,'Comodato',373,'0','','S','N'); insert into menu values (374,'Equipamento',373,'','formcomodequip','S','N'); insert into menu values (375,'Contrato',373,'','formcomodcontrato','S','N'); insert into menu values (376,'Remessa de Equipamento',373,'','formcomodremessaequip','S','N'); insert into menu values (377,'Relatório - Relação de Contratos',373,'','formrelListaclientecomodato','S','N'); insert into menu values (378,'Gerencial',378,'0','','S','N'); insert into menu values (379,'Gerencial',378,'2700','formgerencial','S','N'); insert into menu values (380,'ExportarPDV',378,'','exportarpdv','S','N'); insert into menu values (381,'Valida Query',378,'','formvalidaquery','S','N'); ------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------