CREATE DEFINER=`root`@`localhost` PROCEDURE `SPRegistrar_BalanceLibroDetailRet-SIR-Comp-Ant`()
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,retention_type_id, zone_id int;
    declare monto 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, bl.total, r.retention_type_id, r.zone_id
	from balance_libro bl
	join receipts as r on bl.receipt_id = r.id
	where bl.conta_tipo_asiento_id = 6
	or bl.conta_tipo_asiento_id = 7
	or bl.conta_tipo_asiento_id = 8
	or bl.conta_tipo_asiento_id = 9;


	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,monto,retention_type_id, zone_id;
	-- este if tiene que estar sino agrega un registro mas
	IF NOT done THEN
		-- Retencion
		if conta_tipo_asiento_id = 7 then

			CASE retention_type_id
			    WHEN 1 THEN set plan_cuenta_id := 23; 
			    WHEN 2 THEN set plan_cuenta_id := 162;
			    WHEN 3 THEN set plan_cuenta_id := 25;
			    WHEN 4 THEN set plan_cuenta_id := 251;
			    WHEN 5 THEN set plan_cuenta_id := 252;
			    WHEN 6 THEN set plan_cuenta_id := 253;
			    WHEN 7 THEN set plan_cuenta_id := 254; 			    
			    WHEN 8 THEN set plan_cuenta_id := 255;
			    WHEN 9 THEN set plan_cuenta_id := 256;
			    WHEN 10 THEN set plan_cuenta_id := 257;
			    WHEN 11 THEN set plan_cuenta_id := 258;
			    WHEN 12 THEN set plan_cuenta_id := 259;
			    WHEN 13 THEN set plan_cuenta_id := 260;
			    WHEN 14 THEN set plan_cuenta_id := 261;
			    WHEN 15 THEN set plan_cuenta_id := 262;
			    WHEN 16 THEN set plan_cuenta_id := 263;
			    WHEN 17 THEN set plan_cuenta_id := 264;
			    WHEN 18 THEN set plan_cuenta_id := 265;
			    WHEN 19 THEN set plan_cuenta_id := 266;
			    WHEN 20 THEN set plan_cuenta_id := 267;
			    WHEN 21 THEN set plan_cuenta_id := 268;
			    WHEN 22 THEN set plan_cuenta_id := 269;
			    WHEN 23 THEN set plan_cuenta_id := 270;
			    WHEN 24 THEN set plan_cuenta_id := 271;
			    WHEN 25 THEN set plan_cuenta_id := 272;
			    WHEN 26 THEN set plan_cuenta_id := 273;
			    WHEN 27 THEN set plan_cuenta_id := 274;
			    WHEN 28 THEN set plan_cuenta_id := 275;
			END CASE;        
	        
				set saldo_id := 1;
				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, monto );
	             
	          
				-- Registro Contra Partida	
		    	set saldo_id := 2;
			    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, monto );

	    END IF; -- Fin Retenciones


	    -- SIRCREB
		if conta_tipo_asiento_id = 8 then

			CASE zone_id
			    WHEN 23 THEN set plan_cuenta_id := 276; 
			    WHEN 22 THEN set plan_cuenta_id := 277;
			    WHEN 24 THEN set plan_cuenta_id := 278;
			    WHEN 3 THEN set plan_cuenta_id := 279;
			    WHEN 4 THEN set plan_cuenta_id := 280;
			    WHEN 1 THEN set plan_cuenta_id := 281;
			    WHEN 2 THEN set plan_cuenta_id := 282; 			    
			    WHEN 5 THEN set plan_cuenta_id := 283;
			    WHEN 6 THEN set plan_cuenta_id := 284;
			    WHEN 7 THEN set plan_cuenta_id := 285;
			    WHEN 8 THEN set plan_cuenta_id := 286;
			    WHEN 9 THEN set plan_cuenta_id := 287;
			    WHEN 10 THEN set plan_cuenta_id := 288;
			    WHEN 11 THEN set plan_cuenta_id := 289;
			    WHEN 12 THEN set plan_cuenta_id := 290;
			    WHEN 25 THEN set plan_cuenta_id := 291;
			    WHEN 13 THEN set plan_cuenta_id := 292;
			    WHEN 14 THEN set plan_cuenta_id := 293;
			    WHEN 15 THEN set plan_cuenta_id := 294;
			    WHEN 16 THEN set plan_cuenta_id := 295;
			    WHEN 17 THEN set plan_cuenta_id := 296;
			    WHEN 18 THEN set plan_cuenta_id := 297;
			    WHEN 19 THEN set plan_cuenta_id := 298;
			    WHEN 20 THEN set plan_cuenta_id := 299;
			    WHEN 21 THEN set plan_cuenta_id := 300;
			END CASE;        
	        
				set saldo_id := 1;
				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, monto );
	             
	          
				-- Registro Contra Partida	
		    	set saldo_id := 2;
			    set plan_cuenta_id := 351;

				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, monto );

	    END IF; -- Fin SIRCREB


	   	-- COMPENSACIONES
		if conta_tipo_asiento_id = 9 then
     
        	set plan_cuenta_id := 352;
			set saldo_id := 1;
			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, monto );
             
          
			-- Registro Contra Partida	
	    	set saldo_id := 2;
		    set plan_cuenta_id := 354;

			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, monto );

	    END IF; -- Fin COMPENSACIONES


	   	-- Anticipo Ganancias
		if conta_tipo_asiento_id = 6 then
     
        	set plan_cuenta_id := 20;
			set saldo_id := 1;
			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, monto );
             
          
			-- Registro Contra Partida	
	    	set saldo_id := 2;
		    set plan_cuenta_id := 219;

			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, monto );

	    END IF; -- Fin Anticipo Ganancias



    END IF; -- Fin If Done

	UNTIL done END REPEAT; -- fin del loop

  	CLOSE table_receipt_detail;
  	
  
  END