/* somente inserir tabela dom caso registros nao existam */
/*
insert into erpc_dom_csosn(st_ativo, cd_csosn, ds_csosn) values
(1, '101', 'Tributada pelo Simples Nacional com permissão de crédito'),
(1, '102', 'Tributada pelo Simples Nacional sem permissão de crédito'),
(1, '103', 'Isenção do ICMS no Simples Nacional para faixa de receita bruta'),
(1, '201', 'Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por substituição tributária'),
(1, '202', 'Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por substituição tributária'),
(1, '203', 'Isenção do ICMS no Simples Nacional para faixa de receita bruta e com cobrança do ICMS por substituição tributária'),
(1, '300', 'Imune'),
(1, '400', 'Não tributada pelo Simples Nacional'),
(1, '500', 'ICMS cobrado anteriormente por substituição tributária (substituído) ou por antecipação'),
(1, '900', 'Outros');
*/

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 AS nOrdem,
        'ICMS' AS tipo,
        Case when uni.id_regime = 4 then
        CONCAT('<ICMSSN102><Orig>',
                org.cd_origem,
                '</Orig><CSOSN>', IFNULL(sos.cd_csosn, 102), '</CSOSN></ICMSSN102>')
		else 
			Case When tri.cd_tributacao in( '00', '20', '90') then /* INTEGRAL OU OUTROS */
				 Concat(
                 '<ICMS' , tri.cd_tributacao ,'>'   ,
				 '<Orig>', org.cd_origem	 ,'</Orig>',
                 '<CST>' , tri.cd_tributacao ,'</CST>',
                 -- '<modBC>0</modBC><vBC>', Round(ped.vl_unitario * ped.nr_quantidade - ped.vl_desconto_produto, 2), '</vBC>',
				 '<pICMS>', ped.nr_perc_icms,'</pICMS></ICMS' , tri.cd_tributacao ,'>')
				 When tri.cd_tributacao in( '40', '41') then /* ISENTA OU NAO TRIBUTADA */
				 Concat(
                 '<ICMS40><Orig>', org.cd_origem,
                 '</Orig><CST>'  , tri.cd_tributacao , '</CST>',
                 '</ICMS40>') 
			end
		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
        LEFT JOIN erpc_dom_sit_trib_pis pis 		ON mov.erpc_dom_sit_trib_pis_id = pis.id
		LEFT JOIN erpc_dom_csosn sos 				ON mov.id_dom_csosn = sos.id
    UNION ALL SELECT 
        ped.id AS id_item_liberado,
        2 AS nOrdem,
        'PIS' AS tipo,
        Case when uni.id_regime = 4 then
			 '<PISSN><CST>49</CST></PISSN>'
             else
             Case When pis.cd_sit_trib_pis in ( '01', '02', '05') then
				CONCAT('<PISAliq><CST>',
					  pis.cd_sit_trib_pis   , 
                      '</CST><vBC>',
                      Round(ped.vl_unitario * ped.nr_quantidade - ped.vl_desconto_produto, 2),
                      '</vBC><pPIS>',
                      Round(IFNULL(pro.nr_perc_pis, 0), 4),
                      '</pPIS></PISAliq>')
				 When pis.cd_sit_trib_pis in ( '04', '06', '07', '08', '09') then
                 CONCAT('<PISNT><CST>',
					  pis.cd_sit_trib_pis   , 
                      '</CST></PISNT>')
				 When pis.cd_sit_trib_pis in ( '99') then
				CONCAT('<PIS><PISOutr><CST>',
					  pis.cd_sit_trib_pis   , 
                      '</CST><vBC>',
                      Round(ped.vl_unitario * ped.nr_quantidade - ped.vl_desconto_produto, 2),
                      '</vBC><pPIS>',
                      Round(IFNULL(pro.nr_perc_pis, 0), 4),
                      '</pPIS>',
                      '<qBCProd>', Round(ped.nr_quantidade, 4), '</qBCProd>',
                      '</PISOutr></PIS>')
             end
		end
		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
        LEFT join erpc_dom_sit_trib_pis 	   pis on mov.erpc_dom_sit_trib_pis_id = pis.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,
        3 AS nOrdem,
        'COFINS' AS tipo,
        Case when uni.id_regime = 4 then
			 '<COFINSSN><CST>49</CST></COFINSSN>'
             else
             Case When cof.cd_sit_trib_cof in ( '01', '02', '05') then
				CONCAT('<COFINSAliq><CST>',
					  cof.cd_sit_trib_cof   , 
                      '</CST><vBC>',
                      Round(ped.vl_unitario * ped.nr_quantidade - ped.vl_desconto_produto, 2),
                      '</vBC><pCOFINS>',
                      Round(IFNULL(pro.nr_perc_cofins, 0), 4),
                      '</pCOFINS></COFINSAliq>')
				When cof.cd_sit_trib_cof in ( '04', '06', '07', '08', '09') then
                 CONCAT('<COFINSNT><CST>',
					  cof.cd_sit_trib_cof   , 
                      '</CST></COFINSNT>')
			    When cof.cd_sit_trib_cof in ( '99') then
				CONCAT('<COFINS><COFINSOutr><CST>',
					  cof.cd_sit_trib_cof   , 
                      '</CST><vBC>',
                      Round(ped.vl_unitario * ped.nr_quantidade - ped.vl_desconto_produto, 2),
                      '</vBC><pCOFINS>',
                      Round(IFNULL(pro.nr_perc_cofins, 0), 2),
                      '<qBCProd>', Round(ped.nr_quantidade, 4), '</qBCProd>',
                      '</pCOFINS></COFINSOutr></COFINS>')
             end
		end
        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
        LEFT join erpc_dom_sit_trib_cof 	   cof on mov.erpc_dom_sit_trib_cof_id = cof.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
    ORDER BY 1 , 2
;