/*

Edival 13/02/2019 - Disponibilização do campo de ST dos produtos da Nfe

*/
delimiter ;

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,
        Case when IFNULL(exc.id, 0) = 0 or pro.ds_cest = 0 then NULL 
			ELSE pro.ds_cest 
            end AS CEST,
        mov.ds_cfop AS CFOP,
        ped.id_unidade_medida AS uCom,
        ped.nr_quantidade AS qCom,
        (ROUND(((ped.vl_unitario * ped.nr_quantidade) - ped.vl_desconto_produto),
                2) / ped.nr_quantidade) AS vUnCom,
        ROUND(((ped.vl_unitario * ped.nr_quantidade) - ped.vl_desconto_produto),
                2) AS vProd,
        pro.ds_ean AS cEANTrib,
        ped.id_unidade_medida AS uTrib,
        ped.nr_quantidade AS qTrib,
        (ROUND(((ped.vl_unitario * ped.nr_quantidade) - ped.vl_desconto_produto),
                2) / ped.nr_quantidade) AS vUnTrib,
        (CASE
            WHEN (IFNULL(ven.vl_frete, 0) = 0) THEN 0
            ELSE ROUND(((ROUND(((ped.vl_unitario * ped.nr_quantidade) - ped.vl_desconto_produto),
                            2) / (ven.vl_total_produtos - ven.vl_desconto)) * ven.vl_frete),
                    2)
        END) AS vFrete,
        ven.vl_frete AS vl_frete,
        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,
                    */
		ped.vl_icms as vICMS,
        Case when IFNULL(exc.id, 0) = 0 then 0.00 else
			 case when mov.tp_tipo = 0 then
			 ROUND(((ped.vl_unitario * ped.nr_quantidade) - ped.vl_desconto_produto),2) 
				* (1 + IFNULL(exc.nr_mva, 0) / 100)
                  when mov.tp_tipo = 1 then
             ROUND(
				(((ped.vl_unitario * ped.nr_quantidade) - ped.vl_desconto_produto) + IFNULL(ped.vl_ipi, 0))
				* ( 1 + (1 + (nr_mva / 100)) * (1 - nr_aliq_interna / 100) / (1- nr_aliq_externa / 100) -1)
                )
               end
			end
		AS vBCST,
        0 AS pICMSST,
        /* CALCULO SAIDA POR MARGEM DE VALOR AGREGADO */
        Case when mov.tp_tipo = 0 and IFNULL(exc.nr_mva, 0)> 0 then
			 /* ALIQUOTA ICMS ST */
             ROUND(((ped.vl_unitario * ped.nr_quantidade) - ped.vl_desconto_produto),2)
				* (1 + exc.nr_mva / 100)
				* (    exc.nr_aliq_externa / 100)
			 /* ALIQUOTA ICMS INTERNA, PROPRIO */
				- ped.vl_icms
		/* CALCULO SAIDA POR DIFERENÇA DE ALIQUOTAS */
		    when mov.tp_tipo = 0 and IFNULL(exc.nr_aliq_interna,0) <> IFNULL(exc.nr_aliq_externa, 0) then
            ROUND(((ped.vl_unitario * ped.nr_quantidade) - ped.vl_desconto_produto),2)
                * ((IFNULL(exc.nr_aliq_externa, 0) - IFNULL(exc.nr_aliq_interna,0)) / 100)
		/* CALCULO ENTRADA ANTECIPADO POR IVA-ST {PROD + IPI * IVA_AJUSTADO * ALIQ INTERNA  - VL_ICMS */
            when mov.tp_tipo = 1 and IFNULL(exc.nr_aliq_interna,0) <> IFNULL(exc.nr_aliq_externa, 0) then
            ROUND(
				(((ped.vl_unitario * ped.nr_quantidade) - ped.vl_desconto_produto) + IFNULL(ped.vl_ipi, 0))
				* ( 1 + (1 + (nr_mva / 100)) * (1 - nr_aliq_interna / 100) / (1- nr_aliq_externa / 100) -1)
                * ( exc.nr_aliq_interna / 100)
                - IFNULL(ped.vl_icms, 0)
                , 2)
		else 0.00 
            end
		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,
        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_venda_liberados ven ON ped.id_pedido_venda_liberado = ven.id
        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
;