delimiter ;
insert into instalacao_log(ds_passo) values ('passo 271');
insert into erpc_dom_operacao_presencial( st_ativo, id, ds_operacao_presencial)
select distinct 1, 5, 'Operação presencial, fora do estabelecimento'
from  erpc_dom_operacao_presencial o
where not exists (
select 1 from erpc_dom_operacao_presencial where id = 5)
;

insert into instalacao_log(ds_passo) values ('passo 272');
DELIMITER $$
CREATE PROCEDURE AddColumnUnlessExists(IN tabela tinytext, IN coluna tinytext, IN tipo tinytext)
BEGIN
    IF NOT EXISTS (
		SELECT * FROM information_schema.COLUMNS
		WHERE column_name=coluna
		and table_name=tabela
		and table_schema=DATABASE()
		)
	THEN
		set @ddl=CONCAT('ALTER TABLE ',DATABASE(),'.',tabela,
			' ADD COLUMN ',coluna,' ',tipo);
		prepare stmt from @ddl;
		execute stmt;
	END IF;
END $$
DELIMITER ;

insert into instalacao_log(ds_passo) values ('passo 273');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_controle_lote', ' VARCHAR(20) null');
CALL AddColumnUnlessExists('erpc_produtos', 'qt_produto_lote', ' decimal(15,4) null default 1');
CALL AddColumnUnlessExists('erpc_produtos', 'dt_fabrica_lote', ' date null');
CALL AddColumnUnlessExists('erpc_produtos', 'dt_validae_lote', ' date null');
CALL AddColumnUnlessExists('erpc_produtos', 'cd_produto_ANVISA', ' varchar(13) null');
CALL AddColumnUnlessExists('erpc_produtos', 'nr_perc_fcp', ' decimal( 5, 2) null');

insert into instalacao_log(ds_passo) values ('passo 274');
drop view if exists vw_erpc_nfecode_geraxml_pagamentos;
drop view if exists vw_erpc_nfecode_geraxml_produtos;
drop view if exists vw_erpc_nfecode_geraxml_documento;
drop view if exists vw_erpc_nfecode_geraxml_transporte;

insert into instalacao_log(ds_passo) values ('passo 275');
/* Detalhamento dos tipos de pagamentos, remoção do indPag e inclusão da Tag Pagamentos */
Create View vw_erpc_nfecode_geraxml_pagamentos as
	SELECT 
        ds.id AS nr_documento,
        ds.ds_numnf AS ds_numnf,
        fp.cd_forma AS tPag,
        IF(IFNULL(pv.vl_pagamento,0) = 0, pv.vl_total_pedido, vl_pagamento) AS vPag,
        ROUND(
            IF(IFNULL(pv.vl_pagamento,0) >    pv.vl_total_pedido, pv.vl_pagamento - pv.vl_total_pedido, 0), 2) AS vTroco,
        '2' AS tpIntegra,
					/*
					1=Pagamento integrado com o sistema de automação da empresa (Ex.: equipamento TEF, Comércio Eletrônico);
					2= Pagamento não integrado com o sistema de automação da empresa (Ex.: equipamento POS);
					*/
        ''  AS CNPJ, 
        '99' AS tBand,
					/*
					01=Visa
					02=Mastercard
					03=American Express
					04=Sorocred 05=Diners Club 06=Elo 07=Hipercard 08=Aura 09=Cabal
					99=Outros
					*/
        ''   AS cAut
    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_dom_forma_pagamento fp      ON pv.id_forma_pagamento = fp.id
    GROUP BY ds.id , ds.ds_numnf , pv.vl_total_pedido , fp.cd_forma
	
;

insert into instalacao_log(ds_passo) values ('passo 276');
/* Inclusão dos campos de rastreamento de 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,
        0 AS vFrete,
        0 AS vSeg,
        0 AS vDesc,
        0 AS vOutro,
        1 AS indTot,
        ped.id_pedido_venda_liberado AS xPed,
        '' AS nFCI,
        org.cd_origem AS orig,
        tri.cd_tributacao AS trib,
        (ped.vl_unitario * ped.nr_quantidade) AS vBC,
        pro.nr_perc_aliq_icms AS pICMS,
        ROUND((((ped.vl_unitario * ped.nr_quantidade) * pro.nr_perc_aliq_icms) / 100),
                2) AS vICMS,
        0 AS vBCST,
        0 AS pICMSST,
        0 AS vICMSST,
        pis.cd_sit_trib_pis AS cst,
        pro.nr_perc_pis AS pPIS,
        ROUND((((ped.vl_unitario * ped.nr_quantidade) * pro.nr_perc_pis) / 100),
                2) AS vPIS,
        pro.nr_perc_cofins AS pCof,
        ROUND((((ped.vl_unitario * ped.nr_quantidade) * pro.nr_perc_cofins) / 100),
                2) AS vCof,
        pro.nr_perc_aliq_ipi AS pIPI,
        ROUND((((ped.vl_unitario * ped.nr_quantidade) * pro.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
		, IFNULL(pro.tp_rastro, '0') AS tp_rastro
		, IFNULL(pro.ds_controle_lote ,'') AS nLote
		, IFNULL(pro.qt_produto_lote  ,'') AS qLote
		, IFNULL(pro.dt_fabrica_lote  ,'') AS dFab
		, IFNULL(pro.dt_validae_lote  ,'') AS dVal	
		, IFNULL(pro.cd_produto_ANVISA,'') AS cProdANVISA
		
		/* FUNDO DE COMBATE A POBREZA FCP */
		, IF(
		  IFNULL(pro.nr_perc_aliq_icms,0)=0, 0,     ped.vl_unitario * ped.nr_quantidade) as vBCFCP
		, ROUND(   IFNULL(pro.nr_perc_fcp, 0)  , 2) AS pFCP
		, ROUND(IF(IFNULL(pro.nr_perc_fcp, 0)=0, 0, ped.vl_unitario * ped.nr_quantidade * pro.nr_perc_fcp / 100)
			, 2) as vFCP
    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_dom_sit_trib_cof cof on mov.erpc_dom_sit_trib_cof_id = cof.id
		LEFT JOIN erpc_dom_sit_trib_pis pis on mov.erpc_dom_sit_trib_pis_id = pis.id
;

insert into instalacao_log(ds_passo) values ('passo 277');
/* Inclusão da Observação do Pedido na Nfe */
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,
ds.ds_numnf AS nNF,
(select distinct cc.ds_categoria 
from erpc_cfop_categorias cc 
join erpc_cfop cf                    on cc.id      = cf.id_categoria
join erpc_tipos_movimentacao tp      on tp.ds_cfop = cf.ds_cfop 
join erpc_pedidos_itens_liberados il on il.id_tipo_movimentacao = tp.id
where (il.id_pedido_venda_liberado = vl.id) limit 1) AS natOp,
(case when (cp.nr_qtde_parcelas <= 1) then 0 else 1 end) AS indPag,
ds.id_tipo_nfe AS tpNF,
ds.id_destino_operacao AS idDest,
1 AS tpImp,
ds.id_tipo_emissao AS tpEmis,
tp.id_finalidade AS finNfe,
ds.fl_consumidor_final AS indFinal,
ds.id_operacao_presencial AS indPres,
ds.id_processamento_emissao AS procEmi,
ds.ds_chave AS ds_chave,
ds.ds_recibo_sefaz AS nr_recibo_nfe,
ds.ds_numnf_referencia AS refNfe,
Concat((select   distinct cf.ds_complementar_nfe 
	from  erpc_cfop cf 
    join  erpc_tipos_movimentacao tp on tp.ds_cfop = cf.ds_cfop
	join  erpc_pedidos_itens_liberados il on il.id_tipo_movimentacao = tp.id
	where il.id_pedido_venda_liberado = vl.id limit 1), IF(IFNULL(vl.ds_mensagem_nf, '')='', '', '|Obs NF: '), vl.ds_mensagem_nf) AS infCpl,
(select   distinct cc.id 
    from  erpc_cfop_categorias cc 
	join  erpc_cfop cf on cc.id = cf.id_categoria
	join  erpc_tipos_movimentacao tp on tp.ds_cfop = cf.ds_cfop
	join erpc_pedidos_itens_liberados il on il.id_tipo_movimentacao = tp.id
	where il.id_pedido_venda_liberado = vl.id limit 1) AS natOpID 
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_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
;

insert into instalacao_log(ds_passo) values ('passo 278');
create view vw_erpc_nfecode_geraxml_transporte
as
    SELECT DISTINCT
        ds.id AS nr_documento,
        ds.ds_numnf AS nr_nota,
        IFNULL(pv.ds_modelo_frete,0) AS modFrete,
        pv.ds_placa_veiculo AS placa,
        pv.ds_uf_placa_veiculo AS UF,
        pv.ds_codigo_antt AS RNTC,
        (CASE
            WHEN (LENGTH(tr.ds_cpf_cnpj) > 11) THEN tr.ds_cpf_cnpj
            ELSE ''
        END) AS CNPJ,
        (CASE
            WHEN (LENGTH(tr.ds_cpf_cnpj) = 11) THEN tr.ds_cpf_cnpj
            ELSE ''
        END) AS CPF,
        tr.ds_razao AS xNome,
        tr.ds_ie AS IE,
        tr.ds_endereco AS xEnder,
        m.ds_municipio AS xMun,
        m.ds_uf AS xUF,
        m.ds_codigo_ibge AS cMunFG,
        5352 AS CFOP,
        0 AS vServ,
        0 AS vBCRet,
        0 AS pICMSRet,
        0 AS vICMSRet
    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 
        LEFT JOIN erpc_transportadoras tr ON pv.id_transportadora = tr.id
        LEFT JOIN erpc_municipios m ON tr.id_municipio = m.id
    WHERE pv.ds_placa_veiculo <> ''
          OR pv.id_transportadora IS NOT NULL
;
insert into instalacao_log(ds_passo) values ('passo 279');