You are on page 1of 6

/* Formatted on 2020/07/28 13:06 (Formatter Plus v4.8.

8) */
CREATE OR REPLACE PROCEDURE erp.prc_virmnt_rokka_log_req (
p_dml_oper IN VARCHAR2
)
IS
TYPE frm_virmntrec IS RECORD ( --RECORD TYPE DECLARE
vsno NUMBER,
from_ministry_code VARCHAR2 (100),
from_project_code VARCHAR2 (100),
from_sub_project_code VARCHAR2 (100),
from_economic_code5 VARCHAR2 (100),
deducted_amount NUMBER (10, 2)
);

TYPE frm_rectyp IS VARRAY (20) OF frm_virmntrec;

v_frm_rectyp frm_rectyp := frm_rectyp ();

TYPE to_virmntrec IS RECORD ( --RECORD TYPE DECLARE


vsno NUMBER,
to_ministry_code VARCHAR2 (100),
to_project_code VARCHAR2 (100),
to_sub_project_code VARCHAR2 (100),
to_economic_code5 VARCHAR2 (100),
added_amount NUMBER (10, 2)
);

TYPE to_rectyp IS VARRAY (20) OF to_virmntrec;

v_to_rectyp to_rectyp := to_rectyp ();


p_success VARCHAR2 (1) := 'Y';
p_msg VARCHAR2 (500);
v_dml_oper VARCHAR2 (6);
v_dedamt NUMBER (10, 2);
v_addamt NUMBER (10, 2);
v_balance NUMBER (10, 2);
v_baladd NUMBER (10, 2);
v_totaddamt number(10,2);
c_count1 int;
c_count2 int;
c_count3 int;

BEGIN
v_dml_oper := UPPER (TRIM (p_dml_oper));

SELECT serial_no,
from_ministry_code,
from_project_code,
from_sub_project_code,
from_economic_code5,
deducted_amount
BULK COLLECT INTO v_frm_rectyp
FROM lmbs_frm_tmp_virmnt_roka_act
ORDER BY serial_no ASC;

SELECT b.serial_no,
b.to_ministry_code,
b.to_project_code,
b.to_sub_project_code,
b.to_economic_code5,
b.added_amount
BULK COLLECT INTO v_to_rectyp
FROM lmbs_to_tmp_virmnt_roka_act b
ORDER BY serial_no ASC;

IF v_dml_oper = 'INS'
THEN

-- v_totaddamt:=v_frm_rectyp(0).added_amount;
c_count1 :=v_frm_rectyp.count;
c_count2 :=v_to_rectyp.count;
if c_count1>c_count2 then
c_count3:=c_count1;

else
c_count3:=c_count2;

end if;
FOR i IN 1 .. c_count3
LOOP

-- if nvl(v_totaddamt,0)=0 then
-- v_totaddamt:=v_to_rectyp(i).added_amount;
-- end if;

IF ((v_frm_rectyp (i).deducted_amount + NVL (v_balance, 0)) - NVL


(v_baladd, 0)) = v_to_rectyp(i).added_amount
THEN
INSERT INTO lmbis_virement_rokka_act_log
(from_ministry_code,
deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (i).from_ministry_code,
v_frm_rectyp (i).deducted_amount
+ NVL (v_balance, 0)
- NVL (v_baladd, 0),
v_to_rectyp (i).to_ministry_code,
v_to_rectyp (i).added_amount,
v_frm_rectyp (i).from_project_code,
v_frm_rectyp (i).from_sub_project_code,
v_frm_rectyp (i).from_economic_code5,
v_to_rectyp (i).to_project_code,
v_to_rectyp (i).to_sub_project_code,
v_to_rectyp (i).to_economic_code5
);
v_totaddamt:=0;
v_balance := 0;
v_baladd := 0;
ELSIF ((v_frm_rectyp (i).deducted_amount + NVL (v_balance, 0)) - NVL
(v_baladd, 0)) > v_to_rectyp(i).added_amount
THEN
INSERT INTO lmbis_virement_rokka_act_log
(from_ministry_code,
deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (i).from_ministry_code,
v_frm_rectyp (i).deducted_amount,
v_to_rectyp (i).to_ministry_code,
v_to_rectyp (i).added_amount,
v_frm_rectyp (i).from_project_code,
v_frm_rectyp (i).from_sub_project_code,
v_frm_rectyp (i).from_economic_code5,
v_to_rectyp (i).to_project_code,
v_to_rectyp (i).to_sub_project_code,
v_to_rectyp (i).to_economic_code5
);

v_balance := v_frm_rectyp (i).deducted_amount -


v_to_rectyp(i).added_amount ;
v_baladd := 0;

IF v_balance > 0
THEN
INSERT INTO lmbis_virement_rokka_act_log
(from_ministry_code, deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (i).from_ministry_code, v_balance,
v_to_rectyp (i + 1).to_ministry_code,
v_to_rectyp (i + 1).added_amount,
v_frm_rectyp (i).from_project_code,
v_frm_rectyp (i).from_sub_project_code,
v_frm_rectyp (i).from_economic_code5,
v_to_rectyp (i + 1).to_project_code,
v_to_rectyp (i + 1).to_sub_project_code,
v_to_rectyp (i + 1).to_economic_code5
);
-- v_balance:=v_balance - v_to_rectyp (i+1).added_amount;
END IF;
ELSIF (((v_frm_rectyp (i).deducted_amount + NVL (v_balance, 0))- NVL
(v_baladd, 0)) < v_to_rectyp(i).added_amount)

THEN
if((((v_frm_rectyp (i).deducted_amount + NVL (v_balance, 0))- NVL
(v_baladd, 0)))>0) then
INSERT INTO lmbis_virement_rokka_act_log
(from_ministry_code,
deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (i).from_ministry_code,
v_frm_rectyp (i).deducted_amount + NVL (v_balance, 0) -
NVL (v_baladd, 0),
v_to_rectyp (i).to_ministry_code,
v_to_rectyp (i).added_amount,
v_frm_rectyp (i).from_project_code,
v_frm_rectyp (i).from_sub_project_code,
v_frm_rectyp (i).from_economic_code5,
v_to_rectyp (i).to_project_code,
v_to_rectyp (i).to_sub_project_code,
v_to_rectyp (i).to_economic_code5
);

end if;

v_baladd := v_to_rectyp(i).added_amount - (v_frm_rectyp


(i).deducted_amount + NVL (v_balance, 0) - NVL (v_baladd, 0) );

v_totaddamt:=v_frm_rectyp (i+1).deducted_amount ;
IF v_baladd > 0
THEN
if v_frm_rectyp (i+1).deducted_amount >v_baladd then
INSERT INTO lmbis_virement_rokka_act_log
(from_ministry_code, deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (i+1).from_ministry_code, v_baladd,
v_to_rectyp (i).to_ministry_code,
v_to_rectyp (i).added_amount,
v_frm_rectyp (i+1).from_project_code,
v_frm_rectyp (i+1).from_sub_project_code,
v_frm_rectyp (i+1).from_economic_code5,
v_to_rectyp (i).to_project_code,
v_to_rectyp (i).to_sub_project_code,
v_to_rectyp (i).to_economic_code5
);
else
-- v_baladd:= v_baladd -v_frm_rectyp (i).deducted_amount;
FOR k IN i+1 .. c_count3
loop

if(v_totaddamt<= v_baladd) then

INSERT INTO lmbis_virement_rokka_act_log


(from_ministry_code, deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (k).from_ministry_code, v_frm_rectyp
(k).deducted_amount ,
v_to_rectyp (i).to_ministry_code,
v_to_rectyp (i).added_amount,
v_frm_rectyp (k).from_project_code,
v_frm_rectyp (k).from_sub_project_code,
v_frm_rectyp (k).from_economic_code5,
v_to_rectyp (i).to_project_code,
v_to_rectyp (i).to_sub_project_code,
v_to_rectyp (i).to_economic_code5
);

else

exit;
end if;
v_totaddamt:=v_totaddamt+ v_frm_rectyp (k).deducted_amount;

end loop;

end if;
END IF;

END IF;

COMMIT;
END LOOP;

END IF;
EXCEPTION
WHEN OTHERS
THEN
p_success := 'N';
p_msg :=
'PKG_VIRMNT_ROKKA_ACT_DML.PRC_VIRMNT_ROKKA_ACT_LOG_DML(INS) '
|| SUBSTR (SQLERRM, 1, 200);
END;
/

You might also like