delimiter ;


/*
	20/01/2016 Itens da Nota Fiscal NFC Temporária
    Criado     erpc_code Armando Leme
    Projeto    erpc, estoque, nfephp, easysat
    drop view vw_erpc_nfccode_geraxml_produtos
*/
insert into instalacao_log(ds_passo) values ('passo 156');
drop view if exists vw_erpc_nfccode_geraxml_produtos;

Create View vw_erpc_nfccode_geraxml_produtos
as
select
  ped.id		as nItem
, ds.id 		as nr_documento
, ds.ds_numnf 	as nr_nota
, ped.id_pedido_venda_liberado 	as nr_pedido
, pro.cd_produto 	  	as cProd
, pro.ds_ean 		  	as cEAN
, pro.ds_produto 	  	as xProd
, pro.ds_ncm  	  		as NCM
, mov.ds_cfop 			as CFOP
, null   				as EXTIPI
, ped.id_unidade_medida as uCom
, ped.nr_quantidade     as qCom
, ped.vl_unitario       as vUnCom
, ped.vl_desconto_produto as vDesc
, ped.vl_unitario * ped.nr_quantidade - ped.vl_desconto_produto   as vProd
, 'A' as indRegra
, (ncm.nr_perc_nacional  / 100) as vTribFed
, (ncm.nr_perc_estadual  / 100) as vTribEst
, (ncm.nr_perc_municipal / 100) as vTribMun
, ncm.ds_chave_acesso as ds_chave_ibpt
from erpc_pedidos_itens_liberados	ped
join erpc_pedidos_documentos_saida	dp  on dp.id_pedido_liberados = ped.id_pedido_venda_liberado
join erpc_documentos_saida			ds  on ds.id = dp.id_documento_saida
join erpc_produtos 					pro on ped.id_produto = pro.id
join erpc_origem_produto 			org on pro.id_origem_produto = org.id
left join erpc_grupo_tributacao  		grp on pro.id_grupo_tributacao  = grp.id
left join erpc_excecao_fiscal  	 		exc on grp.id = exc.id_grupo_tributacao
left join erpc_tipos_movimentacao		mov on ped.id_tipo_movimentacao = mov.id
left join erpc_dom_situacao_tributaria 	tri on mov.id_situacao_tributaria = tri.id
left join erpc_tributos_ncm ncm on pro.ds_ncm = ncm.ds_ncm
	and ifnull(pro.ds_ex_ncm, '') = ncm.ds_ex_tipi
;

insert into instalacao_log(ds_passo) values ('passo 157');
drop view if exists vw_erpc_nfccode_geraxml_cancelar;

Create View vw_erpc_nfccode_geraxml_cancelar
as
select	dc.id, 
		dc.ds_numnf, 
        dc.ds_chave as chCanc,
        '07494091000108'  as CNPJ, -- un.ds_cnpj
        'rdjsiqxIfJsdSy8TBFZTWiNqp4bBhO48qM2cvoHiOJioNZCW8/EpPb5HgwN7myOz3IZt8UpJWL8ohe/6vPqnFObCqZ0gv6GVUxMcR5ZtW3O9diRGGDtV+tTPBIamgMMrXLAnNAHVaBQE+t3G7tU8wjtW6eHJ+7B7PzGyl061DYeyQTT4Nvswj8xmDPFwWzX/hse3CDnRGLumrDP7ee7Vx/L145OAlBxcp6nVLTQR7cdzKg1uD9HV+lKqa3mND6G9lDhgl+3lKUmPdYsBG9HEUkUlg5yd8oWq4jpLrvt12etWSTnSTDKnzMtvkvCtUfbNsxU/paQsIuLTfmqlusUJww==' 
              as signAC, -- un.ds_razao_social 
        '001' as numeroCaixa,
        dc.cd_status_nfe,
        sum(pv.vl_total_pedido) as vl_total_cfe
from	erpc_documentos_saida dc
join   	erpc_pedidos_documentos_saida pd on dc.id =  pd.id_documento_saida
join   	erpc_pedidos_venda_liberados  pv on pv.id = pd.id_pedido_liberados
join   	erpc_unidades un on un.id =  pv.id_unidade
where   dc.id_status_transmissao = 4 -- Transmitido com sucesso
   and  dc.cd_status_nfe = '06000'   -- Autorizado pelo SAT
   and  dc.ds_modelo = 59            -- Modelo 59 - Cfe Cupom Fiscal
group	by
		dc.id, 
		dc.ds_numnf, 
        dc.ds_chave,
        dc.cd_status_nfe        
   ;
   
insert into instalacao_log(ds_passo) values ('passo 158');
drop view if exists vw_erpc_nfccode_geraxml_entrega;

Create View vw_erpc_nfccode_geraxml_entrega
as
select 
  ds.id			as nr_documento
, ds_endereco	as xLgr
, ''		    as nro	   -- ds_numero
, ''			as xCpl   -- ds_complemento
, ds_bairro		as xBairro
, m.ds_municipio   	as xMun
, m.ds_uf		 as UF     -- m.ds_uf
from	erpc_documentos_saida			ds 
join	erpc_pedidos_documentos_saida 	dp on ds.id = dp.id_documento_saida
join	erpc_pedidos_venda_liberados	pv on dp.id_pedido_liberados = pv.id
join	erpc_pedidos_itens_liberados	pp on pv.id = pp.id_pedido_venda_liberado
join	erpc_clientes 		cl on pv.id_cliente = cl.id
join 	erpc_municipios 	m  on cl.id_municipio = m.id
;

insert into instalacao_log(ds_passo) values ('passo 159');
drop view if exists vw_erpc_nfccode_geraxml_totais;

Create View vw_erpc_nfccode_geraxml_totais
as
select  ds.id as nr_documento
, ds.ds_numnf
, vl_total_pedido
, '01' as cMP
, vl_total_pedido as vMP
/*
, sum(case when pp.vl_icms = 0 then 
	 (nr_perc_icms /100) * vl_unitario * nr_quantidade 
      else pp.vl_icms end) 
 as vl_total_icms
        -- , pr.nr_perc_pis, pr.nr_perc_cofins
, sum((pr.nr_perc_pis + pr.nr_perc_cofins) / 100 * vl_unitario * nr_quantidade)
 as vl_total_fede
 */
from	erpc_documentos_saida			ds 
join	erpc_pedidos_documentos_saida 	dp on ds.id = dp.id_documento_saida
join	erpc_pedidos_venda_liberados	pv on dp.id_pedido_liberados = pv.id
join	erpc_pedidos_itens_liberados	pp on pv.id = pp.id_pedido_venda_liberado
-- join    erpc_produtos pr on pp.id_produto = pr.id
group   by 
		ds.id,
        ds.ds_numnf,
        vl_total_pedido
        ;
		
insert into instalacao_log(ds_passo) values ('passo 160');
drop view if exists vw_erpc_nfecode_geraxml_cliente;

Create View vw_erpc_nfecode_geraxml_cliente
as
select 
  ds.id 			as nr_documento
, ds.ds_numnf		as nr_nota
, 35 			 	as cUF    
, ds_codigo_ibge   	as cMunFG -- id_municipio
, ds_endereco	 	as xLgr
, ''		     	as nro	   -- ds_numero
, ''			 	as xCpl   -- ds_complemento
, ds_bairro		 	as xBairro
, ds_codigo_ibge 	as cMun   -- id_municipio
, m.ds_municipio   	as xMun
, m.ds_uf		 as UF     -- m.ds_uf
, ds_cep  		 as CEP
, 1058 	    	 as cPais
, 'Brasil' 		 as xPais   -- p.ds_pais
, case when ds_tipo_documento='J' then ds_cnpj_cpf else '' end as CNPJ
, case when ds_tipo_documento='F' then ds_cnpj_cpf else '' end as CPF
, cl.ds_nome as xNome
, case when ds_tipo_documento='F' or cl.id_tipo_cliente IN( 1)
                                               Then 9   
	   when cl.id_tipo_cliente IN( 3, 4, 5, 6) Then 1 Else 2 end as indIEDest
/*
When cl.id_tipo_cliente IN( 1, 2, 7) then 2  end as indIEDest

1 - Consumidor Final
2 - Produtor Rural
3 - Revendedor
4 - Solidário
5 - Exportação
6 - Importação
7 - Não se Aplica
            
1: Contribuinte de ICMS. Neste caso, deverá ser informada a Inscrição Estadual do destinatário.
2: Contribuinte isento. 
9: Não Contribuinte, que pode ou não possuir Inscrição Estadual no Cadastro de Contribuintes do ICMS.
*/
, case when cl.id_tipo_cliente IN( 3, 4, 5, 6) Then cl.ds_ie else '' end as IE
, cl.ds_suframa as ISUF
, ''            as idEstrangeiro
, cl.ds_im 			as IM
, cl.ds_email_nfe 	as email
, (
select concat(ct.ds_ddi, ct.ds_telefone) from erpc_clientes_telefones ct where id_cliente = cl.id limit 1) as fone
from	erpc_documentos_saida			ds 
join	erpc_pedidos_documentos_saida 	dp on ds.id = dp.id_documento_saida
join	erpc_pedidos_venda_liberados	pv on dp.id_pedido_liberados = pv.id
join	erpc_pedidos_itens_liberados	pp on pv.id = pp.id_pedido_venda_liberado
join	erpc_clientes 		cl on pv.id_cliente = cl.id
join 	erpc_municipios 	m  on cl.id_municipio = m.id
/*
join 	erpc_estados    	e  on m.ds_uf = e.ds_uf
join 	erpc_paises	 		p  on e.id_pais = p.id
*/
;

insert into instalacao_log(ds_passo) values ('passo 161');
drop view if exists vw_erpc_nfecode_geraxml_documento;

Create View vw_erpc_nfecode_geraxml_documento
as
select distinct
  ds.id 			as nr_documento
, ds.ds_numnf		as nr_nota
, ds.dt_emissao		as dt_nfe
, ds.ds_modelo 		as 'mod'
, ds.ds_serie		as serie
, ds.id_tipo_ambiente 	as tpAmb -- //1=Produção; 2=Homologação
, ds.ds_numnf			as nNF
, 'Venda de Produto'    as natOp
, case when cp.nr_qtde_parcelas<=1 then 0 else 1 end  	as indPag 	-- //0=Pagamento à vista; 1=Pagamento a prazo; 2=Outros
, Case when cl.ds_tipo_documento ='J' then 1
	   when cl.ds_tipo_documento ='F' then 0 end 		as tpNF 	-- // 1 para CNPJ e 0 para CPF
, id_destino_operacao as idDest										
, 1 as tpImp
/*
0=Sem geração de DANFE; 1=DANFE normal, Retrato; 2=DANFE normal, Paisagem;
3=DANFE Simplificado; 
4=DANFE NFC-e; 
5=DANFE NFC-e em mensagem eletrônica (o envio de mensagem eletrônica pode ser feita de forma simultânea com a impressão do DANFE;
                                //usar o tpImp=5 quando esta for a única forma de disponibilização do DANFE).
*/
, id_tipo_emissao as tpEmis
, id_finalidade   as finNfe	-- //1=NF-e normal; 2=NF-e complementar; 3=NF-e de ajuste; 4=Devolução/Retorno.
, fl_consumidor_final 		as indFinal
, ds.id_operacao_presencial as indPres
, id_processamento_emissao  as procEmi 
, ds_chave
, ds_recibo_sefaz 		as nr_recibo_nfe
, ds_numnf_referencia 	as refNfe 
from erpc_documentos_saida   		ds
join erpc_pedidos_documentos_saida  dp on ds.id = dp.id_documento_saida
join erpc_pedidos_venda_liberados   vl on dp.id_pedido_liberados = vl.id
-- join erpc_pedidos_itens_liberados   il on vl.id = il.id_pedido_venda_liberado
join erpc_clientes 					cl on vl.id_cliente = cl.id
join erpc_condicao_pagamento		cp on vl.id_condicao_pagamento = cp.id
left join erpc_dom_tipos_pedidos_nfs tp 	on vl.id_tipo_pedido_nf = tp.id
-- left join siscap_erpc_code.erpc_dom_finalidade_nfe;

;

insert into instalacao_log(ds_passo) values ('passo 162');
drop view if exists vw_erpc_nfecode_geraxml_emitente;

Create View vw_erpc_nfecode_geraxml_emitente
as
select distinct
  ds.id 			as nr_documento
, ds.ds_numnf		as nr_nota
, 35 				as cUF    
, m.ds_codigo_ibge 	as cMunFG
, ds_endereco	 as xLgr
, ds_numero      as nro
, ds_complemento as xCpl
, ds_bairro		 as xBairro
, m.ds_codigo_ibge   as cMun
, m.ds_municipio as xMun
, m.ds_uf   	 as UF 
, ds_cep  		 as CEP
, 1058 	    	 as cPais
, p.ds_pais 	 as xPais
-- , u.nr_telefone	 as fone
, null as fone
, u.ds_logo as logo
from erpc_documentos_saida 			ds
join erpc_pedidos_documentos_saida	dp on ds.id = dp.id_documento_saida
join erpc_pedidos_venda_liberados	vl on dp.id_pedido_liberados = vl.id
join erpc_pedidos_itens_liberados   il on vl.id = il.id_pedido_venda_liberado
join erpc_unidades   	u  on vl.id_unidade = u.id
join erpc_municipios 	m  on u.id_municipio = m.id
join erpc_estados    	e  on m.ds_uf = e.ds_uf
join erpc_paises	 	p  on e.id_pais = p.id
;

insert into instalacao_log(ds_passo) values ('passo 163');
drop view if exists vw_erpc_nfecode_geraxml_produtos;

Create View vw_erpc_nfecode_geraxml_produtos
as
select
  ds.id 		as nr_documento
, ds.ds_numnf 	as nr_nota
, '' as nItem
, ped.id_pedido_venda_liberado 	as nr_pedido
, pro.cd_produto 	  	as cProd
, pro.ds_ean 		  	as cEAN
, pro.ds_produto 	  	as xProd
, pro.ds_ncm  	  		as NCM
, null   				as EXTIPI
, mov.ds_cfop 			as CFOP
, ped.id_unidade_medida as uCom
, ped.nr_quantidade     as qCom
, ped.vl_unitario       as vUnCom
, ped.vl_unitario * ped.nr_quantidade    as vProd
, pro.ds_ean            as cEANTrib
, ped.id_unidade_medida as uTrib
, ped.nr_quantidade     as qTrib
, ped.vl_unitario       as vUnTrib

/* campos abaixo são só para cálculo do totalizador da nota*/
, 0 as vFrete
, 0 as vSeg
, 0 as vDesc
, 0 as vOutro
, 1 as indTot
, ped.id_pedido_venda_liberado as xPed
, '' as nFCI

/* tributos federais icms e st*/
, org.cd_origem  	 as orig
, tri.cd_tributacao  as trib
, ped.vl_unitario * ped.nr_quantidade as vBC
, nr_perc_aliq_icms  as pICMS
, round(ped.vl_unitario * ped.nr_quantidade * nr_perc_aliq_icms / 100, 2) as vICMS
, 0 as vBCST
, 0 as pICMSST
, 0 as vICMSST

/* tributos federais de pis e cofins */
, 0 as cst
, nr_perc_pis    	as pPIS
, round(ped.vl_unitario * ped.nr_quantidade * nr_perc_pis	   / 100, 2) as vPIS
, nr_perc_cofins 	as pCof
, round(ped.vl_unitario * ped.nr_quantidade * nr_perc_cofins	   / 100, 2) as vCof
, nr_perc_aliq_ipi  as pIPI
, round(ped.vl_unitario * ped.nr_quantidade * nr_perc_aliq_ipi  / 100, 2) as vIPI
, pro.vl_perc_mva 	  as pIVA
, exc.nr_aliq_externa as pInter
, exc.nr_aliq_interna as pIntra
from erpc_pedidos_itens_liberados	ped
join erpc_pedidos_documentos_saida	dp  on dp.id_pedido_liberados = ped.id_pedido_venda_liberado
join erpc_documentos_saida			ds  on ds.id = dp.id_documento_saida
join erpc_produtos 					pro on ped.id_produto = pro.id
join erpc_origem_produto 			org on pro.id_origem_produto = org.id
left join erpc_grupo_tributacao  		grp on pro.id_grupo_tributacao  = grp.id
left join erpc_excecao_fiscal  	 		exc on grp.id = exc.id_grupo_tributacao
left join erpc_tipos_movimentacao		mov on ped.id_tipo_movimentacao = mov.id
left join erpc_dom_situacao_tributaria 	tri on mov.id_situacao_tributaria = tri.id
;

insert into instalacao_log(ds_passo) values ('passo 164');
/* confirmar view abaixo */
drop table if exists vw_saldos_produtos;

create table vw_saldos_produtos(
	id 	int not null ,
	id_local	int not null , 
	qt_disponivel	numeric( 13,2)	,
	qt_saldo_atual	numeric( 13,2)	, 
	qt_pedido_venda	numeric( 13,2)	,
	qt_empenhada	numeric( 13,2)	,
	qt_entrada_prevista	numeric( 13,2)	,
	qt_reservada	numeric( 13,2)	,

/*  controles de edição do usuário final */
	dh_alteracao 	timestamp not null default now(),
	st_ativo		bit default 1 	,
	id_usuario		int default 1
);


insert into instalacao_log(ds_passo) values ('passo 165');
drop view if exists vw_erpc_nfccode_geraxml_prod_imposto;

Create View vw_erpc_nfccode_geraxml_prod_imposto
as
select 
  
  ped.id			as nItem
, 1
, 'ICMS'	as tipo
/*, Concat('<ICMSSN'
	, tri.cd_tributacao, '><Orig>', org.cd_origem, '</Orig><CSOSN>' 
	, tri.cd_tributacao, '</CSOSN></ICMSSN'
	, tri.cd_tributacao, '>') as valor*/
, /*Case	When uni.id_regime = 4 and org.cd_origem in ( '00', '30', '60') then
		Concat(
		'<ICMSSN101><Orig>'	, org.cd_origem, '</Orig>'
		'<pCredSN>'			, ped.nr_perc_icms, '</pCredSN>',
		'<vCredICMSSN>'		, ped.vl_icms, '</vCredICMSSN>',
		'<CSOSN>101</CSOSN></ICMSSN101>')
        When uni.id_regime = 4 and not org.cd_origem in ( '00', '30', '60') then
        */
        Concat(
		'<ICMSSN102><Orig>'	, org.cd_origem, '</Orig><CSOSN>102</CSOSN></ICMSSN102>')
        /*else 
        
        Concat(
		'<ICMS'  , tri.cd_tributacao, '><Orig>'  , org.cd_origem, '</Orig>'
		'<pICMS>', ped.nr_perc_icms , '</pICMS>' ,
		'<vICMS>', ped.vl_icms		, '</vICMS>' ,
		'<CST>'  , tri.cd_tributacao, '</CST></ICMS' , tri.cd_tributacao, '>')
        -- end 
        */
        as valor
from erpc_pedidos_itens_liberados	ped
join erpc_produtos 					pro on ped.id_produto = pro.id
join erpc_origem_produto 			org on pro.id_origem_produto = org.id
left join erpc_tipos_movimentacao		mov on ped.id_tipo_movimentacao = mov.id
left join erpc_dom_situacao_tributaria 	tri on mov.id_situacao_tributaria = tri.id
left join erpc_pedidos_venda_liberados	ven on ped.id_pedido_venda_liberado = ven.id
left join erpc_unidades 				uni on ven.id_unidade = uni.id
union all
select 
  ped.id			as id_item_liberado
, 2
, 'PIS'	as tipo
, Concat('<PISSN><CST>49</CST></PISSN>') as valor
from erpc_pedidos_itens_liberados		ped
join erpc_produtos 						pro on ped.id_produto = pro.id
left join erpc_tipos_movimentacao		mov on ped.id_tipo_movimentacao   = mov.id
left join erpc_dom_situacao_tributaria 	tri on mov.id_situacao_tributaria = tri.id
union all
select 
  ped.id			as id_item_liberado
, 3
, 'COFINS'	as tipo
, Concat('<COFINSSN><CST>49</CST></COFINSSN>') as valor
from erpc_pedidos_itens_liberados		ped
join erpc_produtos 						pro on ped.id_produto = pro.id
left join erpc_tipos_movimentacao		mov on ped.id_tipo_movimentacao   = mov.id
left join erpc_dom_situacao_tributaria 	tri on mov.id_situacao_tributaria = tri.id
order by 1, 2
;


DELIMITER $$

insert into instalacao_log(ds_passo) values ('passo 166');
drop procedure if exists pr_produtos_fantasma_ins_upd$$

Create Procedure pr_produtos_fantasma_ins_upd(
	IN _ID_PRODUTO_EST INT, 
    IN _ID_PRODUTO  INT, 
    IN _QT_PRODUTO  NUMERIC( 9,2),
    IN _ST_ATIVO	INT,
    IN _ID_USUARIO  INT)
BEGIN
	/*CORPO DO PROCEDIMENTO*/
select	 count(*) as itens
into @count_reg
  from	erpc_produtos_estrutura
where   id_produto_estrutura = _ID_PRODUTO_EST
	and	id_produto           = _ID_PRODUTO;

if @count_reg = 0 then
	insert into erpc_produtos_estrutura( 
           id_produto_estrutura, id_produto, qt_produto, st_ativo, id_usuario, dh_alteracao)
	values( _ID_PRODUTO_EST, _ID_PRODUTO, _QT_PRODUTO, _ST_ATIVO, _ID_USUARIO, now());
else
	update erpc_produtos_estrutura
		   set qt_produto= _QT_PRODUTO ,
			   st_ativo  = _ST_ATIVO   ,
			   id_usuario= _ID_USUARIO ,
               dh_alteracao=now()
	where   id_produto_estrutura = _ID_PRODUTO_EST
		and	id_produto           = _ID_PRODUTO;	
end if;    

END$$

DELIMITER $$

insert into instalacao_log(ds_passo) values ('passo 167');
drop procedure if exists pr_nfccode_cfe_cliente$$

CREATE procedure `pr_nfccode_cfe_cliente`(IN _ID_DOC INT)
BEGIN
	/*CORPO DO PROCEDIMENTO*/
select	 case when ISNULL(cl.ds_cnpj_cpf) then '' else cl.ds_cnpj_cpf end , 
		 cl.ds_nome, 
         cl.ds_tipo_documento
into @documento, @nome, @tipo
  from	erpc_pedidos_documentos_saida dp
  join	erpc_pedidos_venda_liberados  pv
    on 	dp.id_pedido_liberados = pv.id
  join	erpc_clientes cl
  	ON pv.id_cliente = cl.id
where   dp.id_documento_saida = _ID_DOC;

if @documento='' then
	select @nome  as xNome;
elseif @tipo='J' then
	select @documento as CNPJ, @nome as xNome;
elseif @tipo='F' then 
	select @documento as CPF, @nome as xNome;
end if;    

END$$
DELIMITER ;
insert into instalacao_log(ds_passo) values ('passo 168');
