CREATE DEFINER=`root`@`localhost` PROCEDURE `SPRegistrar_BalanceLibroDetailVentasYCompras`()
BEGIN
	declare done int default 0;
	declare balance_libro_id,person_id, periodo_id, conta_tipo_asiento_id, plan_cuenta_id, saldo_id, comprobante_id,type_receipt int;
    declare gravado, iva decimal(20,2) default 0.00;
    
    DECLARE table_receipt_detail CURSOR FOR 
SELECT bl.id as balance_libro_id, bl.person_id,bl.period_id,bl.conta_tipo_asiento_id,rt.receipt_id,rt.tax_id,rt.amount,rt.tax_amount,r.type_receipt_id
FROM db1.receipt_taxes rt
join balance_libro as bl on rt.receipt_id = bl.receipt_id
join receipts as r on rt.receipt_id = r.id
where bl.conta_tipo_asiento_id = 2
	or bl.conta_tipo_asiento_id = 3;


	DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

	OPEN table_receipt_detail;
	REPEAT

	FETCH table_receipt_detail INTO balance_libro_id,person_id, periodo_id, conta_tipo_asiento_id,comprobante_id,plan_cuenta_id, gravado, iva, type_receipt;
	-- este if tiene que estar sino agrega un registro mas
	IF NOT done THEN
		-- Venta
		if conta_tipo_asiento_id = 2 then

			CASE plan_cuenta_id
			    WHEN 1 THEN set plan_cuenta_id := 96; -- Ventas Gravadas
			    WHEN 2 THEN set plan_cuenta_id := 96;
			    WHEN 3 THEN set plan_cuenta_id := 96;
			    WHEN 4 THEN set plan_cuenta_id := 96;
			    WHEN 5 THEN set plan_cuenta_id := 96;

			    WHEN 6 THEN set plan_cuenta_id := 218; -- Ventas No Gravadas
			    WHEN 7 THEN set plan_cuenta_id := 218; 
			    
			    WHEN 1000 THEN set plan_cuenta_id := 220;
			    WHEN 1001 THEN set plan_cuenta_id := 221;
			    WHEN 1002 THEN set plan_cuenta_id := 222;
			    WHEN 1003 THEN set plan_cuenta_id := 223;
			    WHEN 1004 THEN set plan_cuenta_id := 224;
			    WHEN 1005 THEN set plan_cuenta_id := 225;
			    WHEN 1006 THEN set plan_cuenta_id := 226;
			    WHEN 1007 THEN set plan_cuenta_id := 227;
			    WHEN 1008 THEN set plan_cuenta_id := 228;
			    WHEN 1009 THEN set plan_cuenta_id := 229;
			    WHEN 1010 THEN set plan_cuenta_id := 230;
			    WHEN 1011 THEN set plan_cuenta_id := 231;
			    WHEN 1012 THEN set plan_cuenta_id := 232;
			    WHEN 1013 THEN set plan_cuenta_id := 233;
			    WHEN 1014 THEN set plan_cuenta_id := 234;
			    WHEN 1015 THEN set plan_cuenta_id := 235;
			    WHEN 1016 THEN set plan_cuenta_id := 236;
			    WHEN 1017 THEN set plan_cuenta_id := 237;
			    WHEN 1018 THEN set plan_cuenta_id := 238;
			    WHEN 1019 THEN set plan_cuenta_id := 239;
			    WHEN 1020 THEN set plan_cuenta_id := 240;
			    WHEN 1021 THEN set plan_cuenta_id := 241;
			    WHEN 1022 THEN set plan_cuenta_id := 242;
			    WHEN 1023 THEN set plan_cuenta_id := 243;
			    WHEN 1024 THEN set plan_cuenta_id := 244;
			    WHEN 1025 THEN set plan_cuenta_id := 245;
			    WHEN 1026 THEN set plan_cuenta_id := 246;
			    WHEN 1027 THEN set plan_cuenta_id := 247;
			    WHEN 1028 THEN set plan_cuenta_id := 248;
			    WHEN 1029 THEN set plan_cuenta_id := 249;
			END CASE;        
	        
		        -- Si es nota de Credito
		        CASE type_receipt
				    WHEN 3 THEN set saldo_id := 1;
				    WHEN 6 THEN set saldo_id := 1;
				    WHEN 9 THEN set saldo_id := 1;
				    WHEN 15 THEN set saldo_id := 1;
				    WHEN 18 THEN set saldo_id := 1;
				    WHEN 19 THEN set saldo_id := 1;
				    ELSE set saldo_id := 2;
				END CASE;    

				insert into balance_libro_details 
					(balance_libro_id, person_id, period_id, conta_tipo_asiento_id, plan_cuenta_id, saldo_id, monto )
						VALUES
	                (balance_libro_id, person_id, periodo_id, conta_tipo_asiento_id, plan_cuenta_id,saldo_id, gravado );
	             
	             -- Si es Venta gravado, entonces registro el IVA
	            IF plan_cuenta_id = 96 THEN
					
					-- Si es nota de Credito
			        CASE type_receipt
					    WHEN 3 THEN set saldo_id := 1; set plan_cuenta_id := 68;
					    WHEN 6 THEN set saldo_id := 1; set plan_cuenta_id := 68;
					    WHEN 9 THEN set saldo_id := 1; set plan_cuenta_id := 68;
					    WHEN 15 THEN set saldo_id := 1;set plan_cuenta_id := 68; 
					    WHEN 18 THEN set saldo_id := 1;set plan_cuenta_id := 68;
					    WHEN 19 THEN set saldo_id := 1;set plan_cuenta_id := 68;
					    ELSE 
					    	set saldo_id := 2;
						    set plan_cuenta_id := 67;
					END CASE;

					insert into balance_libro_details 
					(balance_libro_id, person_id, period_id, conta_tipo_asiento_id, plan_cuenta_id, saldo_id, monto )
						VALUES
	                (balance_libro_id, person_id, periodo_id, conta_tipo_asiento_id, plan_cuenta_id,saldo_id, iva );

				END IF; -- fin Si es Venta gravado, entonces registro el IVA

				-- Registro Contra Partida
					-- Si es nota de Credito
			        CASE type_receipt
					    WHEN 3 THEN set saldo_id := 2; 
					    WHEN 6 THEN set saldo_id := 2; 
					    WHEN 9 THEN set saldo_id := 2; 
					    WHEN 15 THEN set saldo_id := 2; 
					    WHEN 18 THEN set saldo_id := 2;
					    WHEN 19 THEN set saldo_id := 2;
					    ELSE set saldo_id := 1;
						    
					END CASE;
					set plan_cuenta_id := 13;
					insert into balance_libro_details 
					(balance_libro_id, person_id, period_id, conta_tipo_asiento_id, plan_cuenta_id, saldo_id, monto )
						VALUES
	                (balance_libro_id, person_id, periodo_id, conta_tipo_asiento_id, plan_cuenta_id,saldo_id, gravado+iva );

	    END IF; -- Fin Venta


	    -- Compra
		if conta_tipo_asiento_id = 3 then

			CASE plan_cuenta_id
			    WHEN 1 THEN set plan_cuenta_id := 217; -- Compras Gravadas
			    WHEN 2 THEN set plan_cuenta_id := 217;
			    WHEN 3 THEN set plan_cuenta_id := 217;
			    WHEN 4 THEN set plan_cuenta_id := 217;
			    WHEN 5 THEN set plan_cuenta_id := 217;

			    WHEN 6 THEN set plan_cuenta_id := 250; -- Compras No Gravadas
			    WHEN 7 THEN set plan_cuenta_id := 250; 
			    
			    WHEN 1000 THEN set plan_cuenta_id := 220;
			    WHEN 1001 THEN set plan_cuenta_id := 221;
			    WHEN 1002 THEN set plan_cuenta_id := 222;
			    WHEN 1003 THEN set plan_cuenta_id := 223;
			    WHEN 1004 THEN set plan_cuenta_id := 224;
			    WHEN 1005 THEN set plan_cuenta_id := 225;
			    WHEN 1006 THEN set plan_cuenta_id := 226;
			    WHEN 1007 THEN set plan_cuenta_id := 227;
			    WHEN 1008 THEN set plan_cuenta_id := 228;
			    WHEN 1009 THEN set plan_cuenta_id := 229;
			    WHEN 1010 THEN set plan_cuenta_id := 230;
			    WHEN 1011 THEN set plan_cuenta_id := 231;
			    WHEN 1012 THEN set plan_cuenta_id := 232;
			    WHEN 1013 THEN set plan_cuenta_id := 233;
			    WHEN 1014 THEN set plan_cuenta_id := 234;
			    WHEN 1015 THEN set plan_cuenta_id := 235;
			    WHEN 1016 THEN set plan_cuenta_id := 236;
			    WHEN 1017 THEN set plan_cuenta_id := 237;
			    WHEN 1018 THEN set plan_cuenta_id := 238;
			    WHEN 1019 THEN set plan_cuenta_id := 239;
			    WHEN 1020 THEN set plan_cuenta_id := 240;
			    WHEN 1021 THEN set plan_cuenta_id := 241;
			    WHEN 1022 THEN set plan_cuenta_id := 242;
			    WHEN 1023 THEN set plan_cuenta_id := 243;
			    WHEN 1024 THEN set plan_cuenta_id := 244;
			    WHEN 1025 THEN set plan_cuenta_id := 245;
			    WHEN 1026 THEN set plan_cuenta_id := 246;
			    WHEN 1027 THEN set plan_cuenta_id := 247;
			    WHEN 1028 THEN set plan_cuenta_id := 248;
			    WHEN 1029 THEN set plan_cuenta_id := 249;
			END CASE;        
	        
		        -- Si es nota de Credito
		        CASE type_receipt
				    WHEN 3 THEN set saldo_id := 2;
				    WHEN 6 THEN set saldo_id := 2;
				    WHEN 9 THEN set saldo_id := 2;
				    WHEN 15 THEN set saldo_id := 2;
				    WHEN 18 THEN set saldo_id := 2;
				    WHEN 19 THEN set saldo_id := 2;
				    ELSE set saldo_id := 1;
				END CASE;    

				insert into balance_libro_details 
					(balance_libro_id, person_id, period_id, conta_tipo_asiento_id, plan_cuenta_id, saldo_id, monto )
						VALUES
	                (balance_libro_id, person_id, periodo_id, conta_tipo_asiento_id, plan_cuenta_id,saldo_id, gravado );
	             
	             -- Si es Compra gravado, entonces registro el IVA
	            IF plan_cuenta_id = 217 THEN
					
					-- Si es nota de Credito
			        CASE type_receipt
					    WHEN 3 THEN set saldo_id := 2; set plan_cuenta_id := 67;
					    WHEN 6 THEN set saldo_id := 2; set plan_cuenta_id := 67;
					    WHEN 9 THEN set saldo_id := 2; set plan_cuenta_id := 67;
					    WHEN 15 THEN set saldo_id := 2;set plan_cuenta_id := 67; 
					    WHEN 18 THEN set saldo_id := 2;set plan_cuenta_id := 67;
					    WHEN 19 THEN set saldo_id := 2;set plan_cuenta_id := 67;
					    ELSE 
					    	set saldo_id := 1;
						    set plan_cuenta_id := 68;
					END CASE;

					insert into balance_libro_details 
					(balance_libro_id, person_id, period_id, conta_tipo_asiento_id, plan_cuenta_id, saldo_id, monto )
						VALUES
	                (balance_libro_id, person_id, periodo_id, conta_tipo_asiento_id, plan_cuenta_id,saldo_id, iva );

				END IF; -- fin Si es Venta gravado, entonces registro el IVA

				-- Registro Contra Partida
					-- Si es nota de Credito
			        CASE type_receipt
					    WHEN 3 THEN set saldo_id := 1; 
					    WHEN 6 THEN set saldo_id := 1; 
					    WHEN 9 THEN set saldo_id := 1; 
					    WHEN 15 THEN set saldo_id := 1; 
					    WHEN 18 THEN set saldo_id := 1;
					    WHEN 19 THEN set saldo_id := 1;
					    ELSE set saldo_id := 2;
						    
					END CASE;
					set plan_cuenta_id := 57;
					insert into balance_libro_details 
					(balance_libro_id, person_id, period_id, conta_tipo_asiento_id, plan_cuenta_id, saldo_id, monto )
						VALUES
	                (balance_libro_id, person_id, periodo_id, conta_tipo_asiento_id, plan_cuenta_id,saldo_id, gravado+iva );

	    END IF; -- Fin Compra

    END IF; -- Fin If Done

	UNTIL done END REPEAT; -- fin del loop

  	CLOSE table_receipt_detail;
  	
  
  END