CREATE DEFINER=`root`@`localhost` PROCEDURE `SPRegistrar_BalanceDetailLibroLiq-IIBB`()
BEGIN
	declare done int default 0;
	declare balance_libro_id,person_id, periodo_id, period_liquidation_id, plan_cuenta_id, saldo_id, zone_id int;
    declare fecha date;
    declare tax_amount,previous_period_balance,sircreb_amount,perception_amount,retention_amount,
	positive_amount,negative_amount,monto,control decimal(20,2) default 0.00;
    
    DECLARE liq_iib CURSOR FOR 
	select bl.id as balance_libro_id,pl.person_id,pl.period_id,pl.zone_id,pl.tax_amount,pl.previous_period_balance,pl.sircreb_amount,pl.perception_amount,pl.retention_amount,
	pl.positive_amount,pl.negative_amount
	from period_liquidation_details pl
	join balance_libro bl on pl.period_liquidation_id = bl.period_liquidation_id
	join period_liquidations pli on pl.period_liquidation_id = pli.id
	where pli.status = 2
	order by pl.period_liquidation_id;


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

	OPEN liq_iib;
	REPEAT

	FETCH liq_iib INTO balance_libro_id,person_id, periodo_id,zone_id,tax_amount,previous_period_balance,sircreb_amount,perception_amount,retention_amount,
positive_amount,negative_amount ;
	-- este if tiene que estar sino agrega un registro mas
	IF NOT done THEN
		
   
		if tax_amount <>0 then
			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, 16, 156,1, tax_amount );
	    end if;

	    if previous_period_balance <>0 then
	    	CASE zone_id
			    WHEN 23 THEN set plan_cuenta_id := 301; 
			    WHEN 22 THEN set plan_cuenta_id := 302;
			    WHEN 24 THEN set plan_cuenta_id := 303;
			    WHEN 3 THEN set plan_cuenta_id := 304;
			    WHEN 4 THEN set plan_cuenta_id := 305;
			    WHEN 1 THEN set plan_cuenta_id := 306;
			    WHEN 2 THEN set plan_cuenta_id := 307; 			    
			    WHEN 5 THEN set plan_cuenta_id := 308;
			    WHEN 6 THEN set plan_cuenta_id := 309;
			    WHEN 7 THEN set plan_cuenta_id := 310;
			    WHEN 8 THEN set plan_cuenta_id := 311;
			    WHEN 9 THEN set plan_cuenta_id := 312;
			    WHEN 10 THEN set plan_cuenta_id := 313;
			    WHEN 11 THEN set plan_cuenta_id := 314;
			    WHEN 12 THEN set plan_cuenta_id := 315;
			    WHEN 25 THEN set plan_cuenta_id := 316;
			    WHEN 13 THEN set plan_cuenta_id := 317;
			    WHEN 14 THEN set plan_cuenta_id := 318;
			    WHEN 15 THEN set plan_cuenta_id := 319;
			    WHEN 16 THEN set plan_cuenta_id := 320;
			    WHEN 17 THEN set plan_cuenta_id := 321;
			    WHEN 18 THEN set plan_cuenta_id := 322;
			    WHEN 19 THEN set plan_cuenta_id := 323;
			    WHEN 20 THEN set plan_cuenta_id := 324;
			    WHEN 21 THEN set plan_cuenta_id := 325;
			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, 16, plan_cuenta_id,2, previous_period_balance );
	    end if;

	    if sircreb_amount <>0 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;  
			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, 16, plan_cuenta_id,2, sircreb_amount );
	    end if;


	    if retention_amount <>0 then
	    	CASE zone_id
			    WHEN 23 THEN set plan_cuenta_id := 251; 
			    WHEN 22 THEN set plan_cuenta_id := 252;
			    WHEN 24 THEN set plan_cuenta_id := 253;
			    WHEN 3 THEN set plan_cuenta_id := 254;
			    WHEN 4 THEN set plan_cuenta_id := 255;
			    WHEN 1 THEN set plan_cuenta_id := 256;
			    WHEN 2 THEN set plan_cuenta_id := 257; 			    
			    WHEN 5 THEN set plan_cuenta_id := 258;
			    WHEN 6 THEN set plan_cuenta_id := 259;
			    WHEN 7 THEN set plan_cuenta_id := 260;
			    WHEN 8 THEN set plan_cuenta_id := 261;
			    WHEN 9 THEN set plan_cuenta_id := 262;
			    WHEN 10 THEN set plan_cuenta_id := 263;
			    WHEN 11 THEN set plan_cuenta_id := 264;
			    WHEN 12 THEN set plan_cuenta_id := 265;
			    WHEN 25 THEN set plan_cuenta_id := 266;
			    WHEN 13 THEN set plan_cuenta_id := 267;
			    WHEN 14 THEN set plan_cuenta_id := 268;
			    WHEN 15 THEN set plan_cuenta_id := 269;
			    WHEN 16 THEN set plan_cuenta_id := 270;
			    WHEN 17 THEN set plan_cuenta_id := 271;
			    WHEN 18 THEN set plan_cuenta_id := 272;
			    WHEN 19 THEN set plan_cuenta_id := 273;
			    WHEN 20 THEN set plan_cuenta_id := 274;
			    WHEN 21 THEN set plan_cuenta_id := 275;
			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, 16, plan_cuenta_id,2, retention_amount );
	    end if;


	    if perception_amount <>0 then
	    	CASE zone_id
			    WHEN 23 THEN set plan_cuenta_id := 225; 
			    WHEN 22 THEN set plan_cuenta_id := 226;
			    WHEN 24 THEN set plan_cuenta_id := 227;
			    WHEN 3 THEN set plan_cuenta_id := 228;
			    WHEN 4 THEN set plan_cuenta_id := 229;
			    WHEN 1 THEN set plan_cuenta_id := 230;
			    WHEN 2 THEN set plan_cuenta_id := 231; 			    
			    WHEN 5 THEN set plan_cuenta_id := 232;
			    WHEN 6 THEN set plan_cuenta_id := 233;
			    WHEN 7 THEN set plan_cuenta_id := 234;
			    WHEN 8 THEN set plan_cuenta_id := 235;
			    WHEN 9 THEN set plan_cuenta_id := 236;
			    WHEN 10 THEN set plan_cuenta_id := 237;
			    WHEN 11 THEN set plan_cuenta_id := 238;
			    WHEN 12 THEN set plan_cuenta_id := 239;
			    WHEN 25 THEN set plan_cuenta_id := 240;
			    WHEN 13 THEN set plan_cuenta_id := 241;
			    WHEN 14 THEN set plan_cuenta_id := 242;
			    WHEN 15 THEN set plan_cuenta_id := 243;
			    WHEN 16 THEN set plan_cuenta_id := 244;
			    WHEN 17 THEN set plan_cuenta_id := 245;
			    WHEN 18 THEN set plan_cuenta_id := 246;
			    WHEN 19 THEN set plan_cuenta_id := 247;
			    WHEN 20 THEN set plan_cuenta_id := 248;
			    WHEN 21 THEN set plan_cuenta_id := 249;
			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, 16, plan_cuenta_id,2, perception_amount );
	    end if;


	    if negative_amount <>0 then
	    	CASE zone_id
			    WHEN 23 THEN set plan_cuenta_id := 326; 
			    WHEN 22 THEN set plan_cuenta_id := 327;
			    WHEN 24 THEN set plan_cuenta_id := 328;
			    WHEN 3 THEN set plan_cuenta_id := 329;
			    WHEN 4 THEN set plan_cuenta_id := 330;
			    WHEN 1 THEN set plan_cuenta_id := 331;
			    WHEN 2 THEN set plan_cuenta_id := 332; 			    
			    WHEN 5 THEN set plan_cuenta_id := 333;
			    WHEN 6 THEN set plan_cuenta_id := 334;
			    WHEN 7 THEN set plan_cuenta_id := 335;
			    WHEN 8 THEN set plan_cuenta_id := 336;
			    WHEN 9 THEN set plan_cuenta_id := 337;
			    WHEN 10 THEN set plan_cuenta_id := 338;
			    WHEN 11 THEN set plan_cuenta_id := 339;
			    WHEN 12 THEN set plan_cuenta_id := 340;
			    WHEN 25 THEN set plan_cuenta_id := 341;
			    WHEN 13 THEN set plan_cuenta_id := 342;
			    WHEN 14 THEN set plan_cuenta_id := 343;
			    WHEN 15 THEN set plan_cuenta_id := 344;
			    WHEN 16 THEN set plan_cuenta_id := 345;
			    WHEN 17 THEN set plan_cuenta_id := 346;
			    WHEN 18 THEN set plan_cuenta_id := 347;
			    WHEN 19 THEN set plan_cuenta_id := 348;
			    WHEN 20 THEN set plan_cuenta_id := 349;
			    WHEN 21 THEN set plan_cuenta_id := 350;
			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, 16, plan_cuenta_id,2, negative_amount );
	    end if;


	    if positive_amount <>0 then
	    	CASE zone_id
			    WHEN 23 THEN set plan_cuenta_id := 301; 
			    WHEN 22 THEN set plan_cuenta_id := 302;
			    WHEN 24 THEN set plan_cuenta_id := 303;
			    WHEN 3 THEN set plan_cuenta_id := 304;
			    WHEN 4 THEN set plan_cuenta_id := 305;
			    WHEN 1 THEN set plan_cuenta_id := 306;
			    WHEN 2 THEN set plan_cuenta_id := 307; 			    
			    WHEN 5 THEN set plan_cuenta_id := 308;
			    WHEN 6 THEN set plan_cuenta_id := 309;
			    WHEN 7 THEN set plan_cuenta_id := 310;
			    WHEN 8 THEN set plan_cuenta_id := 311;
			    WHEN 9 THEN set plan_cuenta_id := 312;
			    WHEN 10 THEN set plan_cuenta_id := 313;
			    WHEN 11 THEN set plan_cuenta_id := 314;
			    WHEN 12 THEN set plan_cuenta_id := 315;
			    WHEN 25 THEN set plan_cuenta_id := 316;
			    WHEN 13 THEN set plan_cuenta_id := 317;
			    WHEN 14 THEN set plan_cuenta_id := 318;
			    WHEN 15 THEN set plan_cuenta_id := 319;
			    WHEN 16 THEN set plan_cuenta_id := 320;
			    WHEN 17 THEN set plan_cuenta_id := 321;
			    WHEN 18 THEN set plan_cuenta_id := 322;
			    WHEN 19 THEN set plan_cuenta_id := 323;
			    WHEN 20 THEN set plan_cuenta_id := 324;
			    WHEN 21 THEN set plan_cuenta_id := 325;
			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, 16, plan_cuenta_id,1, positive_amount );
	    end if;

	    -- Me fijo que cierre el asiento, sino cierra, registro la diferencia en la cuenta Ajustes!
        	set control :=  tax_amount + positive_amount - previous_period_balance - 
            	sircreb_amount - retention_amount - perception_amount - negative_amount;

            if control <> 0 then
            	
            	if control > 0 then
            		set saldo_id := 2; 
            	end if;
            	if control < 0 then
            		set saldo_id := 1; 
            	end if;
            	set control := ABS(control);
            	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, 16, 136,saldo_id, control );

            end if;


    END IF; -- Fin If Done

	UNTIL done END REPEAT; -- fin del loop

  	CLOSE liq_iib;
  	
  
  END