Invo 12
Invo 12
IS
--
c_str_pckname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'INVO_12_PCK' ;
--
c_str_invstatcop CONSTANT invoice_header_v.inv_status%TYPE :=
'C';
c_str_invstatpiaonly CONSTANT invoice_header_v.inv_status%TYPE :=
'N';
c_str_invstatnet CONSTANT invoice_header_v.inv_status%TYPE :=
'R';
c_str_invstatdisc CONSTANT invoice_header_v.inv_status%TYPE :=
'D';
c_str_invstatdat CONSTANT invoice_header_v.inv_status%TYPE :=
'B';
c_str_invstatfreight CONSTANT invoice_header_v.inv_status%TYPE :=
'F';
c_str_invstattransport CONSTANT invoice_header_v.inv_status%TYPE :=
'T';
c_str_invstataddserv CONSTANT invoice_header_v.inv_status%TYPE :=
'A';
c_str_invstatassembly CONSTANT invoice_header_v.inv_status%TYPE :=
'Y';
c_str_invstatspecart1 CONSTANT invoice_header_v.inv_status%TYPE :=
'1';
c_str_invstatspecart2 CONSTANT invoice_header_v.inv_status%TYPE :=
'2';
c_str_invstatspecart3 CONSTANT invoice_header_v.inv_status%TYPE :=
'3';
c_str_invstatspecart4 CONSTANT invoice_header_v.inv_status%TYPE :=
'4';
c_str_invstatzerototals CONSTANT invoice_header_v.inv_status%TYPE
:= '5' ;
c_str_invstatgoods CONSTANT invoice_header_v.inv_status%TYPE
:= 'G' ;
c_str_invstatadvpay CONSTANT invoice_header_v.inv_status%TYPE
:= 'P' ;
c_str_invstatadmcost CONSTANT invoice_header_v.inv_status%TYPE
:= 'E' ;
c_str_invstattotals CONSTANT invoice_header_v.inv_status%TYPE
:= 'O' ;
c_str_invstatvat CONSTANT invoice_header_v.inv_status%TYPE
:= 'V' ;
c_str_invstatduedate CONSTANT invoice_header_v.inv_status%TYPE
:= 'U' ;
c_str_invstatasgn CONSTANT invoice_header_v.inv_status%TYPE
:= 'W' ;
c_str_invstatctrlno CONSTANT invoice_header_v.inv_status%TYPE
:= 'I' ;
c_str_invstatctrlnomiss CONSTANT invoice_header_v.inv_status%TYPE
:= 'M' ;
c_str_invstatsend CONSTANT invoice_header_v.inv_status%TYPE
:= 'H' ;
c_str_invstatpono CONSTANT invoice_header_v.inv_status%TYPE
:= 'Q' ;
c_str_invstatponomiss CONSTANT invoice_header_v.inv_status%TYPE
:= 'Z' ;
c_str_invstatdiscproc CONSTANT invoice_header_v.inv_status%TYPE
:= 'K' ;
c_str_invstativs CONSTANT invoice_header_v.inv_status%TYPE
:= 'L' ;
c_str_invstatdummyacct CONSTANT invoice_header_v.inv_status%TYPE
:= '6' ;
c_str_potentialcredithandled CONSTANT invoice_header_v.inv_status%TYPE
:= '7' ;
c_str_potentialcrediterror CONSTANT invoice_header_v.inv_status%TYPE
:= '8' ;
c_str_invstatsrcsys CONSTANT invoice_header_v.inv_status%TYPE
:= '9' ;
c_str_invstatuniterr CONSTANT invoice_header_v.inv_status%TYPE
:= '0' ;
c_str_invstatnoprocessat CONSTANT invoice_header_v.inv_status%TYPE
:= '@' ;
c_str_invstatnoprocesshash CONSTANT invoice_header_v.inv_status%TYPE
:= '#' ;
c_str_invstatdelftold CONSTANT invoice_header_v.inv_status%TYPE
:= 'S' ;
--
-- Remaining Allowed Stati: '67890'
--
l_rec_invhead invoice_header_v%ROWTYPE;
l_str_invno invoice_header_v.inv_no%TYPE;
l_rec_acct account_v%ROWTYPE;
l_bol_vatobliged BOOLEAN := FALSE;
--L_bol_success Boolean := True; -- <0057>
l_bol_success BOOLEAN; -- <0057>
l_rec_curdec currency_decimals_v%ROWTYPE;
l_bol_100percdiscount BOOLEAN := FALSE;
-- 0032 Alsc
--
-- 0035 Novg 15-Jun-2007 Eco Tax France
m_bol_eco_tax BOOLEAN;
-- Flag For Invoice Level Discount
l_bol_invdisc BOOLEAN := FALSE;
--
--L_dat_registration_date Date;
--
-- ==========================================================================
-- Description : All Lines Of An Invoice, That Have At Least One As Faulty
-- Marked Line, Are Marked To Be Erroneous.
-- Author : Alexandra Schuetz
-- ==========================================================================
FUNCTION markfaultyinvoice_fct (
pi_str_compcode IN work_invoice_info_v.comp_code%TYPE)
RETURN BOOLEAN
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'MarkFaultyInvoice_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_cur_invoiceparam invo_winv_pck.typ_cur;
l_cur_invoicelines invo_winv_pck.typ_cur;
l_rec_invoicelines work_invoice_info_v%ROWTYPE;
l_str_criteria VARCHAR2 (500) DEFAULT NULL;
l_str_stono work_invoice_info_v.sto_no%TYPE;
l_str_inv_type work_invoice_info_v.inv_type%TYPE;
l_int_cashno work_invoice_info_v.cash_no%TYPE;
l_int_receiptno work_invoice_info_v.receipt_no%TYPE;
l_str_salesdate work_invoice_info_v.sales_date%TYPE;
l_str_totcustno work_invoice_info_v.tot_cust_no%TYPE;
l_int_orderno work_invoice_info_v.order_no%TYPE;
l_bol_access BOOLEAN;
l_bol_found BOOLEAN := FALSE;
l_bol_error BOOLEAN := FALSE;
l_str_stmt VARCHAR2 (1000);
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Check Uses Access On Level One
l_bol_access :=
sec_01_pck.checkaccesslevelone_fct (
pi_str_package => c_str_pckname,
pi_str_procedure => c_str_prcname,
pi_str_user => glob_01_pck.getuser_fct);
--
IF l_bol_access
THEN
-- Fetching Faulty Invoices
util_01_pck.log_prc (
pi_str_msg => 'Fetching Faulty Invoices',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
-- Prepare Statement For Cursor
l_str_stmt :=
'SELECT sto_no, '
|| 'tot_cust_no, '
|| 'sales_date, '
|| 'cash_no, '
|| 'receipt_no, '
|| 'inv_type, '
|| 'order_no '
|| 'FROM work_invoice_info_v '
|| 'WHERE comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND error_flag IS NULL '
|| 'GROUP BY sto_no, '
|| 'tot_cust_no, '
|| 'sales_date, '
|| 'cash_no, '
|| 'receipt_no, '
|| 'inv_type, '
|| 'order_no';
-- Open Cursor
OPEN l_cur_invoiceparam FOR l_str_stmt;
--
util_01_pck.log_prc (
pi_str_msg => 'Fetching Lines',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
LOOP
FETCH l_cur_invoiceparam
INTO l_str_stono,
l_str_totcustno,
l_str_salesdate,
l_int_cashno,
l_int_receiptno,
l_str_inv_type,
l_int_orderno;
--
CLOSE l_cur_invoicelines;
--
-- Mark All Lines Of This Invoice As Faulty If Flag Says 'Faulty'
IF l_bol_error
THEN
util_01_pck.log_prc (
pi_str_msg => 'Mark Lines',
pi_str_logtype =>
util_01_pck.c_str_logtypeapplication,
pi_bol_logverbose => TRUE);
l_str_criteria :=
l_str_criteria || ' AND error_flag IS NULL';
invo_winv_pck.updwhere_prc (
pi_str_errorflag => 'E',
pi_str_criteria => l_str_criteria);
END IF;
l_bol_error := FALSE;
l_str_criteria := NULL;
END LOOP;
--
util_01_pck.log_prc (
pi_str_msg =>
l_cur_invoiceparam%ROWCOUNT || ' Invoice Marked',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
CLOSE l_cur_invoiceparam;
ELSE
-- Raise Error
appl_01_pck.raise_prc (
pi_int_msgcode => 20000,
pi_str_msgtext =>
'#1'
|| glob_01_pck.getuser_fct
|| '#2'
|| c_str_prcname
|| '#3'
|| c_str_pckname,
pi_bol_log => FALSE,
pi_bol_raise => FALSE);
END IF;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
RETURN l_bol_found;
--
EXCEPTION
WHEN OTHERS
THEN
RAISE;
--
END markfaultyinvoice_fct;
--
-- ==========================================================================
-- Description : Updates Invoices, That Were Corrected Completely, But Still
-- Have The Errorflag 'E' (And Only 'E').
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE updcorrinvlines_prc (
pi_str_compcode IN work_invoice_info_v.comp_code%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'UpdCorrInvLines_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_cur_invoiceparam invo_winv_pck.typ_cur;
l_cur_invoicelines invo_winv_pck.typ_cur;
l_rec_invoicelines work_invoice_info_v%ROWTYPE;
l_str_criteria VARCHAR2 (500) DEFAULT NULL;
l_str_stono work_invoice_info_v.sto_no%TYPE;
l_str_inv_type work_invoice_info_v.inv_type%TYPE;
l_int_cashno work_invoice_info_v.cash_no%TYPE;
l_int_receiptno work_invoice_info_v.receipt_no%TYPE;
l_str_salesdate work_invoice_info_v.sales_date%TYPE;
l_str_totcustno work_invoice_info_v.tot_cust_no%TYPE
DEFAULT NULL;
l_int_orderno work_invoice_info_v.order_no%TYPE;
l_bol_found BOOLEAN := FALSE;
l_bol_error BOOLEAN := FALSE;
l_str_stmt VARCHAR2 (1000);
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT updcorrinvlines_begin;
--
-- Fetching Invoices
util_01_pck.log_prc (
pi_str_msg => 'Fetching Invoices',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
-- Prepare Statement For Cursor
l_str_stmt :=
'SELECT sto_no, '
|| 'tot_cust_no, '
|| 'sales_date, '
|| 'cash_no, '
|| 'receipt_no, '
|| 'inv_type, '
|| 'order_no '
|| 'FROM work_invoice_info_v '
|| 'WHERE comp_code = '''
|| pi_str_compcode
|| ''''
|| 'AND error_flag IS NOT NULL '
|| 'GROUP BY sto_no, '
|| 'tot_cust_no, '
|| 'sales_date, '
|| 'cash_no, '
|| 'receipt_no, '
|| 'inv_type, '
|| 'order_no';
-- Open Cursor
OPEN l_cur_invoiceparam FOR l_str_stmt;
--
util_01_pck.log_prc (
pi_str_msg => 'Fetching Lines',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
LOOP
FETCH l_cur_invoiceparam
INTO l_str_stono,
l_str_totcustno,
l_str_salesdate,
l_int_cashno,
l_int_receiptno,
l_str_inv_type,
l_int_orderno;
--
IF l_str_inv_type IS NOT NULL
THEN
l_str_criteria :=
l_str_criteria
|| ' AND inv_type = '''
|| l_str_inv_type
|| '''';
ELSE
l_str_criteria := l_str_criteria || ' AND inv_type IS NULL ';
END IF;
--
util_01_pck.log_prc (pi_str_msg => l_str_criteria,
pi_bol_logverbose => TRUE);
--
invo_winv_pck.sel_prc (po_ref_cur => l_cur_invoicelines,
pi_str_criteria => l_str_criteria);
--
LOOP
-- Get All Lines For One Invoice.
FETCH l_cur_invoicelines INTO l_rec_invoicelines;
--
-- Check One By One Whether Or Not There Exists An Errortext.
IF (l_rec_invoicelines.error_flag <> 'E')
AND (l_rec_invoicelines.error_flag IS NOT NULL)
THEN
-- Set Flag If Invoice Needs Still Correction
l_bol_error := TRUE;
-- Set Flag If Any Invoice Is Faulty
l_bol_found := TRUE;
END IF;
END LOOP;
--
CLOSE l_cur_invoicelines;
--
-- Unmark All Lines Of This Invoice If Flag Says 'Needs No Correction'
IF NOT l_bol_error
THEN
util_01_pck.log_prc (
pi_str_msg => 'UnMark Lines',
pi_str_logtype => util_01_pck.c_str_logtypeapplication,
pi_bol_logverbose => TRUE);
l_str_criteria :=
l_str_criteria || ' AND error_flag = ''E'' ';
util_01_pck.log_prc (pi_str_msg => l_str_criteria,
pi_bol_logverbose => TRUE);
invo_winv_pck.updwhere_prc (
pi_str_errorflag =>
invo_winv_pck.frcerrorflag_fct (NULL),
pi_str_criteria => l_str_criteria);
END IF;
l_bol_error := FALSE;
l_str_criteria := NULL;
END LOOP;
util_01_pck.log_prc (
pi_str_msg => l_cur_invoiceparam%ROWCOUNT || ' Invoice UnMarked',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
CLOSE l_cur_invoiceparam;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
EXCEPTION
-- Novg 04.01.2006
--When No_data_found Then
-- Dbms_output.Put_line('Updcorrinvlines_begin');
WHEN OTHERS
THEN
ROLLBACK TO updcorrinvlines_begin;
l_bol_success := FALSE; -- <0057>
-- Write To Eventlog, That Problem Occurred In This Procedure
util_01_pck.log_prc (
pi_str_msg =>
c_str_prcname || ' ran on error for ' || l_str_totcustno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
-- ==========================================================================
-- Description : All Lines That Have The Same Articlenumber And No Or The Same
-- Groupid Are Accumulated.
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE accumartlines_prc (
pi_str_compcode IN work_invoice_info_v.comp_code%TYPE)
IS
TYPE objectgroup IS RECORD
(
sto_no work_invoice_info_v.sto_no%TYPE,
tot_cust_no work_invoice_info_v.tot_cust_no%TYPE,
sales_date work_invoice_info_v.sales_date%TYPE,
cash_no work_invoice_info_v.cash_no%TYPE,
receipt_no work_invoice_info_v.receipt_no%TYPE,
inv_type work_invoice_info_v.inv_type%TYPE,
order_no work_invoice_info_v.order_no%TYPE,
cusdel_no work_invoice_info_v.cusdel_no%TYPE,
art_no work_invoice_info_v.art_no%TYPE,
group_id_prod work_invoice_info_v.group_id_prod%TYPE,
group_id_txt work_invoice_info_v.group_id_txt%TYPE,
source_system work_invoice_info_v.source_system%TYPE,
inv_id work_invoice_info_v.inv_id%TYPE
);
-- Open Cursor
OPEN l_cur_objgroup FOR l_str_stmt;
--
LOOP
FETCH l_cur_objgroup INTO l_rec_objgroup;
IF ( l_rec_objgroup.order_no IS NULL
OR l_rec_objgroup.order_no = 0)
THEN
l_str_criteria :=
l_str_criteria
|| ' AND cash_no = '
|| l_rec_objgroup.cash_no
|| ' AND receipt_no = '
|| l_rec_objgroup.receipt_no;
ELSE
l_str_criteria :=
l_str_criteria
|| ' AND order_no = '
|| l_rec_objgroup.order_no
|| ' AND NVL(cusdel_no,1) = '''
|| NVL (l_rec_objgroup.cusdel_no, 1)
|| '''';
END IF;
l_str_criteria :=
l_str_criteria
|| ' AND art_no = '''
|| l_rec_objgroup.art_no
|| '''';
--
IF l_rec_objgroup.inv_type IS NOT NULL
THEN
l_str_criteria :=
l_str_criteria
|| ' AND inv_type = '''
|| l_rec_objgroup.inv_type
|| '''';
ELSE
l_str_criteria := l_str_criteria || ' AND inv_type IS NULL ';
END IF;
--
IF l_rec_objgroup.source_system IS NOT NULL
THEN
l_str_criteria :=
l_str_criteria
|| ' AND source_system = '''
|| l_rec_objgroup.source_system
|| '''';
ELSE
l_str_criteria :=
l_str_criteria || ' AND source_system IS NULL ';
END IF;
--
IF l_rec_objgroup.inv_id IS NOT NULL
THEN
l_str_criteria :=
l_str_criteria
|| ' AND inv_id = '''
|| l_rec_objgroup.inv_id
|| '''';
ELSE
l_str_criteria := l_str_criteria || ' AND inv_id IS NULL ';
END IF;
--
LOOP
FETCH l_cur_artlines INTO l_rec_artlines;
l_dbl_netamount :=
NVL (l_dbl_netamount, 0) + nvl(l_rec_artlines.net_amount,0);
CLOSE l_cur_artlines;
IF l_sum_flag > 1
THEN
-- Delete From Table All Lines With This Complete Article-Id-Set
util_01_pck.log_prc (
pi_str_msg => 'Deleting from Work Table',
pi_str_logtype => util_01_pck.c_str_logtypeapplication,
pi_bol_logverbose => TRUE);
--
-- Sobha5: Set The Source System
IF l_str_sourcesystem IS NULL
THEN
IF l_int_orderno IS NULL
THEN
IF stco_01_pck.getstorecompanyinterface_fct (
pi_str_compcode =>
stco_01_pck.getcompfromstore_fct (
pi_str_stono => l_str_stono),
pi_str_functionality => 'STORE',
pi_str_stono => l_str_stono) <>
'IPOS'
THEN
l_str_sourcesystem := 'MHS';
ELSE
l_str_sourcesystem := 'IPOS';
END IF;
ELSE
l_str_sourcesystem := 'ISELL';
END IF;
END IF;
--
invo_winv_pck.ins_prc (
pi_str_artno => l_str_artno,
pi_int_cashno => l_int_cashno,
pi_int_controlno => l_int_controlno,
pi_str_curcode => l_str_curcode,
pi_int_cusdelno => l_int_cusdelno,
pi_str_cusdeltype => l_str_cusdeltype,
pi_str_errorflag => l_str_errorflag,
pi_int_groupidprod => l_int_groupidprod,
pi_int_groupidtxt => l_int_groupidtxt, -- <Change Novg
2007.08.08 Tracking Invoice Data Back To The Input Data>
pi_int_iinvseq => NULL,
pi_str_invadmcostfr => l_str_invadmcostfr,
pi_str_invtype => l_str_inv_type,
pi_int_orderno => l_int_orderno,
pi_str_originvo => l_str_originvo,
pi_int_receiptno => l_int_receiptno,
pi_str_regdate => l_str_regdate,
pi_str_salesdate => l_str_salesdate, -- <Change Novg
2007.08.08 Tracking Invoice Data Back To The Input Data>
pi_int_seq => l_int_seq,
pi_str_seqnosort => l_int_seqnosort,
pi_int_soldamount => l_dbl_soldamount,
pi_int_soldqty => l_int_soldqty,
pi_str_stono => l_str_stono,
pi_str_totcustno => l_str_totcustno,
pi_str_vatcode => l_str_vatcode,
pi_str_vatobliged => l_str_vatobliged,
pi_dbl_vatrate => l_dbl_vatrate,
pi_str_compcode => l_str_compcode,
pi_str_puorderno => l_str_puorderno,
pi_str_origdate => l_str_origdate,
pi_str_sourcesystem => l_str_sourcesystem,
pi_str_transactiontype => l_str_transactiontype,
pi_str_oneinv => l_str_oneinv,
pi_int_lineno => l_num_lineno,
pi_int_lineorderno => l_num_lineorderno,
pi_str_artdesc => l_str_artdesc,
pi_dbl_unitprice => l_dbl_unitprice,
pi_dbl_vatamount => l_dbl_vatamount,
pi_str_taxtype1 => l_str_taxtype1,
pi_dbl_taxrate1 => l_dbl_taxrate1,
pi_str_taxcode1 => l_str_taxcode1,
pi_dbl_taxamount1 => l_dbl_taxamount1,
pi_str_taxtype2 => l_str_taxtype2,
pi_dbl_taxrate2 => l_dbl_taxrate2,
pi_str_taxcode2 => l_str_taxcode2,
pi_dbl_taxamount2 => l_dbl_taxamount2,
pi_str_unitofmeasure => l_str_unitofmeasure,
pi_dbl_netamount => l_dbl_netamount,
pi_str_invid => l_str_invid,
pi_str_invisoffline => l_str_invisoffline,
pi_str_invtypecode => l_str_invtypecode,
pi_str_invtypedate => l_str_invtypedate,
pi_str_originvid => l_str_originvid,
pi_str_originvtypecode => l_str_originvtypecode,
pi_str_originvtypedate => l_str_originvtypedate,
pi_dbl_totgrossamount => l_dbl_totgrossamount,
pi_dbl_totnetamount => l_dbl_totnetamount,
pi_dbl_tottaxamount => l_dbl_tottaxamount);
ELSE
invo_winv_pck.updwhere_prc (
pi_int_seq => l_int_seq,
pi_str_criteria =>
' seq = ''' || l_int_workinvrowseq || '''');
END IF;
--
CLOSE l_cur_objgroup;
--
-- ==========================================================================
-- Description : Status Of The Invoice Is Set To Parameter Given
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE setinvstatus_prc (
pi_str_invno IN invoice_header_v.inv_no%TYPE,
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invstatus IN invoice_header_v.inv_status%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'SetInvStatus_fct' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_str_criteria VARCHAR2 (500) DEFAULT NULL;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Update Invoiceheader For Given Invoicenumber (Field Inv_status)
invo_06_pck.changeinvhead_prc (pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
pi_str_invstatus => pi_str_invstatus);
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
END setinvstatus_prc;
--
-- ==========================================================================
-- Description : Set Invoicedate And Invoice-Batch-Date To Rundate Given
-- Author : Alexandra Schuetz
-- Modified : Sobha5 (If Invdatesalesdatetot Is Active Then Invoice Date
-- Should Be Set To Sales Date).
-- ==========================================================================
PROCEDURE setdates_prc (
pi_str_invno IN invoice_header_v.inv_no%TYPE,
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_dat_invdate IN invoice_header_v.inv_date%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'SetDates_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT setdates_begin;
--
util_01_pck.log_prc (
pi_str_msg => 'Set Dates for Invoice : ' || pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
invo_06_pck.getinvhead_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
po_rec_ihead => l_rec_invhead);
--
-- Check If Condition Invdatesalesdatetot Is Active
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'INVDATESALESDATETOT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => l_rec_invhead.comp_code)
THEN
IF l_rec_invhead.inv_type = 'C'
THEN
l_rec_invhead.inv_date := l_rec_invhead.reg_date;
ELSE
l_rec_invhead.inv_date := l_rec_invhead.sales_date;
END IF;
ELSE
l_rec_invhead.inv_date := pi_dat_invdate;
END IF;
--
-- Update Invoiceheader For Given Invoicenumber
invo_06_pck.changeinvhead_prc (
pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
pi_dat_invbatchdate => pi_dat_invdate,
pi_dat_invdate => l_rec_invhead.inv_date);
-- Set Invoicestatus To 'B'
setinvstatus_prc (pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
pi_str_invstatus => c_str_invstatdat);
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
EXCEPTION
-- Novg 04.01.2006
--When No_data_found Then
-- Null;
WHEN OTHERS
THEN
-- Dbms_output.Put_line('Setdates_begin');
ROLLBACK TO setdates_begin;
l_bol_success := FALSE; -- <0057>
-- Write To Eventlog, That Problem Occurred In This Procedure
util_01_pck.log_prc (
pi_str_msg =>
c_str_prcname || ' ran on error for : ' || pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
-- ==========================================================================
-- Description : Retrieves The Currencycode For A Given Invoice
-- Author : Alexandra Schuetz
-- ==========================================================================
FUNCTION getcur_fct (
pi_str_invno IN invoice_header_v.inv_no%TYPE,
pi_str_compcode IN invoice_header_v.comp_code%TYPE)
RETURN invoice_row_v.cur_code%TYPE
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'GetCur_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_cur_invrows invo_invr_pck.typ_cur;
--
l_rec_invrows invoice_row_v%ROWTYPE;
--
l_str_curcode invoice_row_v.cur_code%TYPE;
l_str_criteria VARCHAR2 (500);
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
l_str_criteria :=
'inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND comp_code = '''
|| pi_str_compcode
|| ''' AND ROWNUM = 1';
util_01_pck.log_prc (
pi_str_msg => 'Criteria for currency: ' || l_str_criteria,
pi_bol_logverbose => TRUE);
--
invo_07_pck.getinvrows_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrows);
--
FETCH l_cur_invrows INTO l_rec_invrows;
--
l_str_curcode := l_rec_invrows.cur_code;
-- Novg 04.01.2006
CLOSE l_cur_invrows;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
RETURN l_str_curcode;
--
END getcur_fct;
--
-- ==========================================================================
-- Description : The Invoicestatus For A Specific Invoice Is Checked. This
-- Function Is Used To Determine The Next Needed Action For An
-- Invoice
-- Author : Alexandra Schuetz
-- ==========================================================================
FUNCTION checkinvstatus_fct (
pi_str_compcode IN invoice_row_v.comp_code%TYPE,
pi_str_invno IN invoice_row_v.inv_no%TYPE,
pi_str_invstatus IN invoice_header_v.inv_status%TYPE)
RETURN BOOLEAN
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CheckInvStatus_fct' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_bol_invstatus BOOLEAN := FALSE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
invo_06_pck.getinvhead_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
po_rec_ihead => l_rec_invhead);
util_01_pck.log_prc (
pi_str_msg => 'Get Status : ' || l_rec_invhead.inv_status,
pi_bol_logverbose => TRUE);
IF (l_rec_invhead.inv_status = pi_str_invstatus)
THEN
l_bol_invstatus := TRUE;
ELSE
l_bol_invstatus := FALSE;
END IF;
--
-- ==========================================================================
-- Description : Checks, Whether Customer Has To Pay Vat
-- Author : Alexandra Schuetz
-- ==========================================================================
FUNCTION checkcustvat_fct (
pi_str_compcode IN invoice_row_v.comp_code%TYPE,
pi_str_invno IN invoice_row_v.inv_no%TYPE)
RETURN BOOLEAN
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CheckCustVAT_fct' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_bol_vatappl BOOLEAN := TRUE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
util_01_pck.log_prc (
pi_str_msg => 'Account VAT Applicable : ' || l_rec_acct.vat_appl);
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
RETURN l_bol_vatappl;
--
END checkcustvat_fct;
--
-- ==========================================================================
-- Description : Checks, Whether Invoice Is Vat-Obliged
-- Author : Alexandra Schuetz
-- ==========================================================================
FUNCTION checkinvvat_fct (
pi_str_compcode IN invoice_row_v.comp_code%TYPE,
pi_str_invno IN invoice_row_v.inv_no%TYPE)
RETURN BOOLEAN
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CheckInvVAT_fct' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_bol_vatobl BOOLEAN := TRUE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
util_01_pck.log_prc (
pi_str_msg =>
'Invoice VAT Obliged : ' || l_rec_invhead.inv_vat_obliged);
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
RETURN l_bol_vatobl;
--
END checkinvvat_fct;
--
-- ==========================================================================
-- Description : Checks, Whether group discount can be applied ot customer
-- Author : Swarupa Varanasi(SWVAR1) 24-May-2023
-- RIMS-433 - Add Group Memberships to RIMS SE to apply discounts to specific
customer
-- ==========================================================================
FUNCTION checkcustgroupdisc_fct (
pi_str_compcode IN invoice_row_v.comp_code%TYPE,
pi_str_invno IN invoice_row_v.inv_no%TYPE,
po_dbl_discrate OUT DISCOUNT_GROUP_MAPPING_V.DISC_RATE%TYPE)
RETURN BOOLEAN
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'checkcustgroupdisc_fct' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_cur_acctcustgrp acct_acgr_pck.typ_Cur;
l_rec_acctcustgrp ACCOUNT_CUST_GROUP_V%ROWTYPE;
l_rec_GroupDiscountRate DISCOUNT_GROUP_MAPPING_V%ROWTYPE;
l_rec_invhead invoice_header_v%ROWTYPE;
--
--Fetch customer group account details
Acct_03_Pck.GetAccountCustGroups_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_acctcustgrp);
util_01_pck.log_prc (
pi_str_msg =>
'Group Discount applicable for : '
|| 'CHECKING FOR ERROR LINE2');
-- Get Invoiceheader in Record
INVO_06_PCK.GetInvHead_prc (pi_str_CompCode => pi_str_compcode,
pi_str_InvNo => pi_str_invno,
po_rec_IHead => l_rec_invhead);
util_01_pck.log_prc (
pi_str_msg =>
'Group Discount applicable for : '
|| 'CHECKING FOR ERROR LINE3');
po_dbl_discrate :=
MTB_01_PCK.GetGroupDiscountRate_fct (
pi_str_CompCode => pi_str_compcode,
pi_str_Code => l_rec_acctcustgrp.code,
pi_str_ValidFrom => TRUNC (l_rec_invhead.sales_date));
util_01_pck.log_prc (
pi_str_msg =>
'Group Discount applicable for : '
|| 'CHECKING FOR ERROR LINE5');
EXIT;
END IF;
END LOOP;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
RETURN l_bol_realdiscfound;
--
END checkcustgroupdisc_fct;
--
-- ==========================================================================
-- Description : Calculates The Rounded Amount With Correct Decimals
-- Author : Alexandra Schuetz
-- ==========================================================================
FUNCTION roundcur_fct (pi_dbl_amount IN invoice_row_v.sold_amount%TYPE,
pi_str_compcode IN invoice_row_v.comp_code%TYPE)
RETURN invoice_row_v.sold_amount%TYPE
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'RoundCur_fct' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_dbl_amount invoice_row_v.sold_amount%TYPE;
--
BEGIN
-- Round To The Correct Number Of Decimals
l_dbl_amount := ROUND (pi_dbl_amount, l_rec_curdec.nof_decimals);
RETURN l_dbl_amount;
EXCEPTION
WHEN OTHERS
THEN
RAISE;
END roundcur_fct;
--
-- ==========================================================================
-- Description : For A Given Invoiceline The Netamount Is Calculated
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE setartnetamt_prc (
pi_str_invno IN invoice_row_v.inv_no%TYPE,
pi_str_compcode IN invoice_row_v.comp_code%TYPE,
pi_int_salerowno IN invoice_row_v.sale_row_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'SetArtNetAmt_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_rec_invrow invoice_row_v%ROWTYPE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
invo_07_pck.getinvrow_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_salerowno => pi_int_salerowno,
po_rec_invr => l_rec_invrow);
--
/*Sobha5: A) If The Article Is Pia Then Sold_amount_excl = Sold_amount
B) If The Transaction Comes From Ipos Then Sold_amount_excl
Is Already Set In Invoice_row_t
C) If Row_vat Amount Is Present Then The Transaction Has Come
From
Ipos And Can Be Used. Otherwise It Has Come From Mhs Or Isell
And The
Vat_amount Must Be Calculated */
--RIMS-230 TDS for INDIA
IF l_rec_invrow.art_no IN ('70000087', '12345678')
AND l_rec_invrow.source_system = 'RIMS'
THEN
l_rec_invrow.sold_amount_excl := l_rec_invrow.sold_amount;
ELSE
IF l_rec_invrow.source_system != 'IPOS'
THEN
IF l_rec_invrow.row_vat_amount IS NOT NULL
THEN
l_rec_invrow.sold_amount_excl :=
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
l_rec_invrow.sold_amount
- l_rec_invrow.row_vat_amount);
l_rec_invrow.sold_amount_excl :=
l_rec_invrow.sold_amount
- l_rec_invrow.row_vat_amount;
ELSE
l_rec_invrow.sold_amount_excl :=
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
l_rec_invrow.sold_amount
* (1 / (1 + (l_rec_invrow.row_vat / 100))));
END IF;
END IF;
END IF;
--
invo_07_pck.changeinvrow_prc (pi_rec_invr => l_rec_invrow);
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
END setartnetamt_prc;
--
-- ==========================================================================
-- Description : Copies The Invoiceinformation From The Work_invoice_info_t
-- To The Invoice_header_t And Invoice_row_t Table.
-- - Sale_row_no Is Calculated Here As Part Of The Primary Key
-- Of Invoice_row_t.
-- - Recalculation Of Amounts From Cents To Euro F.E.
-- - Recalculation Of Quantities For Wares-By-The-Meter
-- Author : Alexandra Schuetz
-- Changed : Andreas Theimer, 2005-12-06
-- Hotfix: Control_no Is Restricted To Max. 4 Digits.
-- ==========================================================================
PROCEDURE copyworktodest_prc (
pi_str_compcode IN work_invoice_info_v.comp_code%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CopyWorkToDest_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
c_str_invstatus CONSTANT invoice_header_v.inv_status%TYPE := 'C';
l_cur_invoiceparam invo_winv_pck.typ_cur;
l_cur_invoicerows invo_winv_pck.typ_cur;
l_rec_invrowwork work_invoice_info_v%ROWTYPE;
-- Per Invoice
l_rec_invheader invoice_header_v%ROWTYPE;
l_int_orderno work_invoice_info_v.order_no%TYPE;
l_str_totcustno work_invoice_info_v.tot_cust_no%TYPE;
l_str_salesdate work_invoice_info_v.sales_date%TYPE;
l_str_criteria VARCHAR2 (2000) DEFAULT NULL;
l_str_invnotemp invoice_header_v.inv_no%TYPE;
l_rec_acct account_v%ROWTYPE;
l_str_ctycode invoice_articles_v.cty_code%TYPE;
l_str_acctno invoice_header_v.acct_no%TYPE;
l_str_acctusrno invoice_header_v.acct_usr_no%TYPE;
l_str_invstatus invoice_header_v.inv_status%TYPE;
l_str_checkdigit VARCHAR2 (1);
l_str_inv_type work_invoice_info_v.inv_type%TYPE;
l_str_inv_id work_invoice_info_v.inv_id%TYPE;
-- Per Invoiceline
l_int_cusdelno invoice_row_v.cusdel_no%TYPE := 1;
l_rec_invrow invoice_row_v%ROWTYPE;
l_str_criteria1 VARCHAR2 (500) DEFAULT NULL;
l_int_rowcount invoice_row_t.sale_row_no%TYPE := 0;
-- <0054>
l_bol_access BOOLEAN;
l_str_stmt VARCHAR2 (1000);
l_str_validunit VARCHAR2 (1);
l_crs_iart invo_iart_pck.typ_cur;
l_rec_iart invoice_articles_v%ROWTYPE;
--
l_int_invrowseq invoice_row_v.seq%TYPE DEFAULT NULL;
--
l_rec_invtaxinv invoice_taxinv_v%ROWTYPE;
l_rec_invtaxinv_old invoice_taxinv_v%ROWTYPE := NULL;
l_rec_invtaxinv_orig invoice_taxinv_v%ROWTYPE;
--
l_bol_success_custnotoacctno BOOLEAN; -- <0057>
l_num_corrfact NUMBER;
l_num_return NUMBER;
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Copy Work To Destination
util_01_pck.log_prc (
pi_str_msg => 'Copying from Work to Destination',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
SAVEPOINT copyworktodest_begin;
--
-- Prepare Statement For Cursor
l_str_stmt :=
'SELECT sto_no, '
|| 'LTRIM(tot_cust_no), '
|| 'sales_date, '
|| 'cash_no, '
|| 'receipt_no, '
|| 'inv_type, '
|| 'order_no '
--|| 'Inv_id '
|| 'FROM work_invoice_info_v '
|| 'WHERE comp_code = '''
|| pi_str_compcode
|| ''''
|| 'AND error_flag IS NULL '
|| 'GROUP BY sto_no, '
|| 'LTRIM(tot_cust_no), '
|| 'sales_date, '
|| 'cash_no, '
|| 'receipt_no, '
|| 'inv_type, '
|| 'order_no '
--|| 'Inv_id '
|| 'ORDER BY sto_no, '
|| 'DECODE(inv_type, ''C'', 2, 1), '
|| 'LTRIM(tot_cust_no), '
|| 'sales_date, '
|| 'cash_no, '
|| 'receipt_no, '
|| 'order_no ';
--
<<perinvoiceloop>>
LOOP
BEGIN --kiras1 RIMS-2118 PRB1000022548 - 26-MAR-2024
-- Outer Loop Reads Criteria To Select The Different (Correct!)
Invoices
FETCH l_cur_invoiceparam
INTO l_rec_invheader.sto_no,
l_str_totcustno,
l_str_salesdate,
l_rec_invheader.cash_no,
l_rec_invheader.receipt_no,
l_str_inv_type,
l_int_orderno;
--L_rec_invrowwork.Inv_id;
--
EXIT WHEN l_cur_invoiceparam%NOTFOUND;
--
-- Create Where-Clause To Retrieve All Lines For One Invoice
l_str_criteria :=
'sto_no = '''
|| l_rec_invheader.sto_no
|| ''''
|| ' AND sales_date = '''
|| l_str_salesdate
|| ''''
|| ' AND TRIM(tot_cust_no) = TRIM('''
|| l_str_totcustno
|| ''')';
--
-- 0036 Alsc
IF (NVL (l_int_orderno, 0) <> 0)
THEN
l_str_criteria :=
l_str_criteria
|| ' AND order_no = '''
|| l_int_orderno
|| '''';
ELSIF ( (NVL (l_rec_invheader.cash_no, 0) <> 0)
OR (NVL (l_rec_invheader.receipt_no, 0) <> 0))
THEN
l_str_criteria :=
l_str_criteria
|| ' AND cash_no = '''
|| l_rec_invheader.cash_no
|| ''''
|| ' AND receipt_no = '''
|| l_rec_invheader.receipt_no
|| '''';
ELSE
l_str_criteria :=
l_str_criteria
|| ' AND NVL(order_no,0) = '
|| NVL (l_int_orderno, 0)
|| ' AND NVL(cash_no,0) = '
|| NVL (l_rec_invheader.cash_no, 0)
|| ' AND NVL(receipt_no,0) = '
|| NVL (l_rec_invheader.receipt_no, 0);
END IF;
--
IF l_str_inv_type IS NOT NULL
THEN
l_str_criteria :=
l_str_criteria
|| ' AND inv_type = '''
|| l_str_inv_type
|| '''';
ELSE
l_str_criteria :=
l_str_criteria || ' AND inv_type IS NULL ';
END IF;
l_str_criteria :=
l_str_criteria || ' AND error_flag IS NULL ';
l_str_criteria1 :=
l_str_criteria
|| ' ORDER BY source_system desc, cusdel_no, group_id_prod,
group_id_txt, seq_no_sort, inv_id';
--
invo_winv_pck.sel_prc (po_ref_cur => l_cur_invoicerows,
pi_str_criteria => l_str_criteria1);
l_str_invnotemp := invo_50_pck.getnexttempinvno_fct;
DBMS_OUTPUT.put_line (
'Temporary InvoiceNumber '
|| l_str_invnotemp
|| ' for orderNo '
|| TO_CHAR (l_int_orderno));
util_01_pck.log_prc (
pi_str_msg =>
'Temporary Invoice No : ' || l_str_invnotemp);
DBMS_OUTPUT.put_line (SUBSTR (l_str_criteria1, 1, 250));
--
<<perinvoicerowloop>>
LOOP
-- Inner Loop Reads The Lines Of An Invoice, Sorted
FETCH l_cur_invoicerows INTO l_rec_invrowwork;
l_int_cusdelno := l_rec_invrowwork.cusdel_no;
--
-- Prepare And Insert Invoicerows Into Invoice_row_t
l_rec_invrow.inv_no := l_str_invnotemp;
l_rec_invrow.comp_code := l_rec_invrowwork.comp_code;
l_rec_invrow.art_no := l_rec_invrowwork.art_no;
--
--L_bol_success := Glob_01_pck.Custnotoacctno_fct(Pi_str_custno
=> L_rec_invrowwork.Tot_cust_no
-- <0057>
l_bol_success_custnotoacctno :=
glob_01_pck.custnotoacctno_fct (
pi_str_custno => l_rec_invrowwork.tot_cust_no,
po_str_acctno => l_str_acctno,
po_str_acctusrno => l_str_acctusrno,
po_str_checkdigit => l_str_checkdigit);
--
-- Recalculate Quantity For Ware-By-The-Meter
acct_01_pck.getaccount_prc (
pi_str_compcode => pi_str_compcode,
pi_str_acctno => l_str_acctno,
po_rec_acct => l_rec_acct);
l_str_ctycode :=
glob_01_pck.getctycode_fct (
pi_str_compcode => pi_str_compcode);
--
-- If Unit Of Measure Is Null Then Check With
Invo_05_pck.Foundartbythemetre_fct
IF l_rec_invrowwork.unit_of_measure IS NULL
THEN
l_num_return :=
invo_05_pck.foundartbythemetre_fct (
pi_str_artno => l_rec_invrowwork.art_no);
IF l_num_return = 1
THEN
l_rec_invrow.sold_qty :=
l_rec_invrowwork.sold_qty / 100;
ELSIF l_num_return = 0
THEN
l_str_invstatus := c_str_invstatuniterr;
l_rec_invrow.sold_qty :=
l_rec_invrowwork.sold_qty;
ELSE
l_rec_invrow.sold_qty :=
l_rec_invrowwork.sold_qty;
END IF;
ELSE
IF l_str_validunit = 'N'
THEN
l_str_invstatus := c_str_invstatuniterr;
l_rec_invrow.sold_qty :=
l_rec_invrowwork.sold_qty;
ELSE
IF l_rec_invrowwork.unit_of_measure != 'EA'
THEN
l_rec_invrow.sold_qty :=
l_rec_invrowwork.sold_qty / 100;
ELSE
l_rec_invrow.sold_qty :=
l_rec_invrowwork.sold_qty;
END IF;
END IF;
END IF;
--
-- Here Insert The Recalculation Of Sold_amount And All Amounts
Present In Invoice_row_t
IF l_rec_invrowwork.order_no IS NULL
THEN
l_num_corrfact :=
curr_02_pck.corrfact_fct (
pi_str_compcode => pi_str_compcode,
pi_str_idrstransaction => 'I0470001');
ELSE
l_num_corrfact :=
curr_02_pck.corrfact_fct (
pi_str_compcode => pi_str_compcode,
pi_str_idrstransaction => 'I1719000');
END IF;
--
-- Re-Claculate The Amounts Based On The Correction Factor
l_rec_invrow.sold_amount :=
l_rec_invrowwork.sold_amount * l_num_corrfact;
--RIMS-223_SOLD_AMOUNT_EXCL is null
invoice row_t l_rec_invrow.sold_amount_excl :=
NVL (l_rec_invrowwork.net_amount, 0) * l_num_corrfact;
l_rec_invrow.unit_price :=
l_rec_invrowwork.unit_price * l_num_corrfact;
l_rec_invrow.row_vat_amount :=
l_rec_invrowwork.vat_amount; --* L_num_corrfact;
l_rec_invrow.row_tax_amount1 :=
l_rec_invrowwork.tax_amount1 * l_num_corrfact;
l_rec_invrow.row_tax_amount2 :=
l_rec_invrowwork.tax_amount2 * l_num_corrfact;
--
l_rec_invrow.row_vat := l_rec_invrowwork.vat_rate;
l_rec_invrow.row_vat_code := l_rec_invrowwork.vat_code;
l_rec_invrow.upd_date := SYSDATE;
l_rec_invrow.sale_row_no := l_int_rowcount;
l_rec_invrow.cusdel_no :=
NVL (l_rec_invrowwork.cusdel_no, 1);
l_rec_invrow.seq_no_sort :=
NVL (l_rec_invrowwork.seq_no_sort, l_int_rowcount);
l_rec_invrow.group_id_prod :=
l_rec_invrowwork.group_id_prod;
l_rec_invrow.group_id_txt :=
l_rec_invrowwork.group_id_txt;
l_rec_invrow.cur_code := l_rec_invrowwork.cur_code;
-- Sobha5: Assignments Of New Or Newly Available Attributes
Needs To Be Added
l_rec_invrow.line_no := l_rec_invrowwork.line_no;
l_rec_invrow.line_order_no :=
l_rec_invrowwork.line_order_no;
l_rec_invrow.description := l_rec_invrowwork.art_desc;
l_rec_invrow.row_tax_type1 := l_rec_invrowwork.tax_type1;
l_rec_invrow.row_tax_code1 := l_rec_invrowwork.tax_code1;
l_rec_invrow.row_tax_type2 := l_rec_invrowwork.tax_type2;
l_rec_invrow.row_tax_code2 := l_rec_invrowwork.tax_code2;
l_rec_invrow.row_tax_amount2 :=
l_rec_invrowwork.tax_amount2;
l_rec_invrow.source_system :=
l_rec_invrowwork.source_system;
l_rec_invrow.unit_of_measure :=
l_rec_invrowwork.unit_of_measure;
--
-- <Change Novg 2007.08.08 Tracking Invoice Data Back To The
Input Data>
SELECT invr_seq.NEXTVAL INTO l_int_invrowseq FROM DUAL;
l_rec_invrow.seq := l_int_invrowseq;
--
-- <Change Novg 2007.08.08 Tracking Invoice Data Back To The
Input Data>
invo_07_pck.createinvrow_prc (pi_rec_invr => l_rec_invrow);
invo_trck_pck.updwhere_prc (
pi_int_invrowseq => l_int_invrowseq,
pi_str_criteria =>
' work_inv_seq = '''
|| l_rec_invrowwork.seq
|| '''');
--
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'TAXINVOICEIN',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
-- Prepare And Insert Invoicerows Into Invoice_taxinv_t
l_rec_invtaxinv.inv_no := l_str_invnotemp;
l_rec_invtaxinv.comp_code :=
l_rec_invrowwork.comp_code;
l_rec_invtaxinv.amount :=
l_rec_invrowwork.sold_amount * l_num_corrfact;
l_rec_invtaxinv.amount_excl :=
l_rec_invrowwork.net_amount * l_num_corrfact;
--
l_rec_invtaxinv.tax_amount :=
l_rec_invtaxinv.amount
- l_rec_invtaxinv.amount_excl;
l_rec_invtaxinv.cur_code := l_rec_invrowwork.cur_code;
l_rec_invtaxinv.inv_id := l_rec_invrowwork.inv_id;
l_rec_invtaxinv.inv_type_code :=
l_rec_invrowwork.inv_type_code;
l_rec_invtaxinv.inv_type_date :=
TO_DATE (l_rec_invrowwork.inv_type_date,
'RRMMDD');
l_rec_invtaxinv.inv_is_offline :=
l_rec_invrowwork.inv_is_offline;
l_rec_invtaxinv.orig_inv_id :=
l_rec_invrowwork.orig_inv_id;
l_rec_invtaxinv.orig_inv_type_date :=
TO_DATE (l_rec_invrowwork.orig_inv_type_date,
'RRMMDD');
--
-- Assign The Sequence Number
IF l_rec_invtaxinv_old.inv_no =
l_rec_invtaxinv.inv_no
THEN
IF l_rec_invtaxinv_old.inv_id <>
l_rec_invtaxinv.inv_id
THEN
l_rec_invtaxinv.seq_no :=
TRIM (
TO_CHAR (
( NVL (
l_rec_invtaxinv_old.seq_no,
0)
+ 1),
'09'));
END IF;
ELSE
l_rec_invtaxinv.seq_no := '01';
END IF;
--
IF l_rec_invrowwork.inv_id IS NOT NULL
THEN
IF l_rec_invtaxinv_old.inv_id =
l_rec_invtaxinv.inv_id
THEN
l_rec_invtaxinv.amount :=
NVL (l_rec_invtaxinv_old.amount, 0)
+ l_rec_invtaxinv.amount;
l_rec_invtaxinv.amount_excl :=
NVL (l_rec_invtaxinv_old.amount_excl,
0)
+ l_rec_invtaxinv.amount_excl;
l_rec_invtaxinv.tax_amount :=
NVL (l_rec_invtaxinv_old.tax_amount, 0)
+ l_rec_invtaxinv.tax_amount;
invo_57_pck.changeinvtaxinv_prc (
pi_rec_intaxi => l_rec_invtaxinv);
ELSE
l_rec_invtaxinv.amount :=
l_rec_invtaxinv.amount;
l_rec_invtaxinv.amount_excl :=
l_rec_invtaxinv.amount_excl;
l_rec_invtaxinv.tax_amount :=
l_rec_invtaxinv.tax_amount;
invo_57_pck.createinvtaxinv_prc (
pi_rec_intaxi => l_rec_invtaxinv);
END IF;
--
l_rec_invtaxinv_old := l_rec_invtaxinv;
ELSE
l_bol_success := FALSE;
END IF;
END IF;
Trim(L_rec_invrowwork.Tot_cust_no)
,8
,2);
*/
l_rec_invheader.acct_usr_no := l_str_acctusrno;
l_rec_invheader.cash_no := l_rec_invrowwork.cash_no;
--
l_rec_invheader.receipt_no := l_rec_invrowwork.receipt_no;
--
IF (l_rec_invrowwork.order_no IS NOT NULL)
THEN
IF LENGTH (l_rec_invrowwork.order_no) > 9
THEN
l_rec_invheader.order_no :=
l_rec_invrowwork.sto_no
|| LPAD (TO_CHAR (l_rec_invrowwork.order_no),
10,
'0');
ELSE
l_rec_invheader.order_no :=
l_rec_invrowwork.sto_no
|| LPAD (TO_CHAR (l_rec_invrowwork.order_no),
9,
'0');
END IF;
ELSE
l_rec_invheader.order_no := NULL;
END IF;
--
-- Check If Condition Invdatesalesdatetot Is Active
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'INVDATESALESDATETOT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 =>
l_rec_invrowwork.comp_code)
THEN
IF l_rec_invrowwork.inv_type = 'C'
THEN
l_rec_invheader.sales_date :=
TO_DATE (l_rec_invrowwork.orig_date,
'RRMMDD');
ELSE
l_rec_invheader.sales_date :=
TO_DATE (l_rec_invrowwork.sales_date,
'RRMMDD');
END IF;
ELSE
l_rec_invheader.sales_date :=
TO_DATE (l_rec_invrowwork.sales_date, 'RRMMDD');
END IF;
--0041
--Declare
--Begin
-- L_dat_registration_date :=
To_date(Trim(L_rec_invrowwork.Reg_date)
-- ,'Rrmmdd');
--Exception
-- When Others Then
-- L_dat_registration_date :=
To_date(L_rec_invrowwork.Sales_date
-- ,'Rrmmdd');
--End;
l_rec_invheader.inv_type :=
NVL (l_rec_invrowwork.inv_type, 'D');
--'D';
l_rec_invheader.sto_no := l_rec_invrowwork.sto_no;
l_rec_invheader.upd_date := SYSDATE;
l_rec_invheader.inv_auto := 'Y';
l_rec_invheader.inv_vat_obliged :=
l_rec_invrowwork.vat_obliged;
l_rec_invheader.inv_adm_cost_fr :=
l_rec_invrowwork.inv_adm_cost_fr;
l_rec_invheader.cusdel_type :=
NVL (l_rec_invrowwork.cusdel_type, '01');
--
IF l_rec_invrowwork.inv_adm_cost_fr = '0'
THEN
l_rec_invheader.inv_adm_cost_fr := 'N';
ELSE
l_rec_invheader.inv_adm_cost_fr := 'Y';
END IF;
IF l_rec_invrowwork.vat_obliged = '0'
THEN
l_rec_invheader.inv_vat_obliged := 'N';
ELSE
l_rec_invheader.inv_vat_obliged := 'Y';
END IF;
--
l_rec_invheader.orig_invo := l_rec_invrowwork.orig_invo;
l_rec_invheader.reg_date :=
TO_DATE (l_rec_invrowwork.reg_date, 'YYMMDD');
l_rec_invheader.orig_date :=
TO_DATE (l_rec_invrowwork.orig_date, 'YYMMDD');
IF l_rec_invrowwork.one_inv = 'Y'
THEN
l_rec_invheader.source_system := 'ONEINV';
ELSE
l_rec_invheader.source_system :=
l_rec_invrowwork.source_system;
END IF;
l_rec_invheader.transaction_type :=
l_rec_invrowwork.transaction_type;
l_rec_invheader.one_inv := l_rec_invrowwork.one_inv;
l_rec_invheader.pu_order_no :=
l_rec_invrowwork.pu_order_no;
IF l_rec_invheader.source_system = 'IPOS'
THEN
l_rec_invheader.tot_net_amount :=
l_rec_invrowwork.tot_net_amount * l_num_corrfact;
l_rec_invheader.tot_tax_amount :=
l_rec_invrowwork.tot_tax_amount * l_num_corrfact;
l_rec_invheader.tot_gross_amount :=
l_rec_invrowwork.tot_gross_amount
* l_num_corrfact;
l_rec_invheader.tot_buscard_amount :=
l_rec_invrowwork.tot_buscard_amount
* l_num_corrfact;
ELSE
l_rec_invheader.tot_net_amount := NULL;
l_rec_invheader.tot_tax_amount := NULL;
l_rec_invheader.tot_gross_amount := NULL;
l_rec_invheader.tot_buscard_amount := NULL;
END IF;
--
END LOOP perinvoicerowloop;
-- Novg 04.01.2006
CLOSE l_cur_invoicerows;
--
--
-- Insert Invoice Header Info Into Invoice_header_t
invo_06_pck.createinvhead_prc (
pi_rec_ihead => l_rec_invheader);
-- Delete From Work_invoice_info_t
invo_02_pck.removeinvoicework_prc (
pi_str_criteria => l_str_criteria);
l_rec_invtaxinv_old := l_rec_invtaxinv;
--End If;
-- Reset All Inner-Loop-Variables
l_rec_invrow := NULL;
l_int_rowcount := 0;
-- Reset Outer Loop Variables
l_rec_invheader := NULL;
l_str_criteria := NULL;
l_int_cusdelno := 1;
COMMIT; --kiras1 RIMS-2118 PRB1000022548 - 26-MAR-2024
EXCEPTION
WHEN OTHERS
THEN --kiras1 RIMS-2118 PRB1000022548 - 26-MAR-2024
ROLLBACK;
invo_02_pck.removeinvoicework_prc (
pi_str_criteria => l_str_criteria);
util_01_pck.log_prc (
pi_str_msg =>
c_str_prcname
|| ' ran on error for : '
|| l_str_totcustno
|| ' in delivery '
|| l_int_cusdelno
|| ' art_no '
|| l_rec_invrowwork.art_no -- <Change Novg 2007.08.14>
,
pi_str_logtype =>
util_01_pck.c_str_logtypeapplication);
l_rec_invrow := NULL;
l_int_rowcount := 0;
-- Reset Outer Loop Variables
l_rec_invheader := NULL;
l_str_criteria := NULL;
l_int_cusdelno := 1;
END; --kiras1 RIMS-2118 PRB1000022548 - 26-MAR-2024
END LOOP perinvoiceloop;
-- Novg 04.01.2006
CLOSE l_cur_invoiceparam;
--
-- ==========================================================================
-- Description : Returns The Articlenumber For The Given Functionality
-- Or '00000000' When This Special Article Is Not Used In This
-- Company.
-- Author : Alexandra Schuetz
-- Changed : Andreas Theimer 2005-10-13
-- If Invoice Has Only Special Articles Return '00000000'.
-- ==========================================================================
FUNCTION checkspecart_fct (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE DEFAULT NULL,
pi_str_functionality IN special_articles_v.functionality%TYPE)
RETURN special_articles_v.art_no%TYPE
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CheckSpecArt_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_bol_access BOOLEAN;
l_str_artno special_articles_v.art_no%TYPE;
l_rec_sart special_articles_v%ROWTYPE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
IF pi_str_invno IS NULL
THEN
IF invo_15_pck.foundsart_fct (
pi_str_compcode => pi_str_compcode,
pi_str_functionality => pi_str_functionality)
THEN
invo_15_pck.getsart_prc (
pi_str_compcode => pi_str_compcode,
pi_str_functionality => pi_str_functionality,
po_rec_sart => l_rec_sart);
--
-- ==========================================================================
-- Description : Takes Invoices With Only Pia Article Out Of The Processing
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE checkforpiaonly_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CheckForPIAonly_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
-- Novg 04.01.2006
l_rec_invrow invoice_row_v%ROWTYPE;
l_cur_invrows invo_invr_pck.typ_cur;
l_str_criteria VARCHAR2 (500);
l_int_nofgoodsarticles NUMBER (3) := 0;
l_int_nofpiaarticles NUMBER (3) := 0;
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT checkforpiaonly_begin;
--
-- Get All Rows From An Invoice
util_01_pck.log_prc (pi_str_msg => 'Get Invoice Rows',
pi_bol_logverbose => TRUE);
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| '''';
IF (l_rec_invrow.art_no =
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'PIA'))
THEN
l_int_nofpiaarticles := l_int_nofpiaarticles + 1;
ELSE
l_int_nofgoodsarticles := l_int_nofgoodsarticles + 1;
END IF;
-- Dbms_output.Put_line('Invoice '||L_rec_invrow.Inv_no);
-- Dbms_output.Put_line('Article '||L_rec_invrow.Art_no);
END LOOP;
-- Novg 04.01.2006
CLOSE l_cur_invrows;
--
-- Compare Both Numbers And Take Out Of The Running Those, That Only Have
Pia
-- Dbms_output.Put_line('L_int_nofpiaarticles '||
To_char(L_int_nofpiaarticles));
-- Dbms_output.Put_line('L_int_nofgoodsarticles '||
To_char(L_int_nofgoodsarticles));
IF (l_int_nofpiaarticles <> 0) AND (l_int_nofgoodsarticles = 0)
THEN
-- Set Invstatus To 'N'
setinvstatus_prc (pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
pi_str_invstatus => c_str_invstatpiaonly);
END IF;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
EXCEPTION
-- Novg 04.01.2006
--When No_data_found Then
-- Null;
WHEN OTHERS
THEN
ROLLBACK TO checkforpiaonly_begin;
l_bol_success := FALSE; -- <0057>
-- Write To Eventlog, That Problem Occurred In This Procedure
util_01_pck.log_prc (
pi_str_msg =>
c_str_prcname || ' ran on error for : ' || pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
-- ==========================================================================
-- Description : All Articles Of One Invoice Have Their Netamount Calculated
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE setartnetamts_prc (
pi_str_invno IN invoice_row_v.inv_no%TYPE,
pi_str_compcode IN invoice_row_v.comp_code%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'SetArtNetAmts_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_str_discartno invoice_row_v.art_no%TYPE;
l_str_piaartno invoice_row_v.art_no%TYPE;
l_rec_invrow invoice_row_v%ROWTYPE;
l_cur_invrows invo_invr_pck.typ_cur;
l_str_criteria VARCHAR2 (500) := NULL;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT setartnetamts_begin;
--
-- Get Number For Discount Article And Payment In Advance
l_str_discartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'DISCOUNT');
l_str_piaartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'PIA');
-- Get All Rows From An Invoice
util_01_pck.log_prc (pi_str_msg => 'Get Invoice Rows',
pi_bol_logverbose => TRUE);
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| '''';
LOOP
FETCH l_cur_invrows INTO l_rec_invrow;
/*
If L_rec_invrow.Art_no <> L_str_discartno And
L_rec_invrow.Art_no <> L_str_piaartno Then
*/
-- Athe 2005-10-12 Set Amount_excl Also For Pia
IF l_rec_invrow.art_no <> l_str_discartno
THEN
setartnetamt_prc (
pi_str_invno => l_rec_invrow.inv_no,
pi_str_compcode => l_rec_invrow.comp_code,
pi_int_salerowno => l_rec_invrow.sale_row_no);
END IF;
END LOOP;
-- Novg 04.01.2006
CLOSE l_cur_invrows;
--
-- ==========================================================================
-- Description : This Function Returns The Customers Discountrate. If There
-- Exists None The Rate Returned Is 0.
-- Author : Alexandra Schuetz
-- ==========================================================================
FUNCTION checkcustdisc_fct (
pi_str_compcode IN invoice_row_v.comp_code%TYPE,
pi_str_invno IN invoice_row_v.inv_no%TYPE,
po_dbl_discrate OUT discount_rate_v.disc_rate%TYPE)
RETURN BOOLEAN
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CheckCustDisc_fct' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_rec_discrate discount_rate_v%ROWTYPE;
l_bol_discfound BOOLEAN := FALSE;
l_bol_realdiscfound BOOLEAN := FALSE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Use The Discountcode To Get The Discountrate
util_01_pck.log_prc (
pi_str_msg => 'Get Discount Rate for ' || l_rec_acct.disc_code);
mtb_01_pck.getdiscountrate_prc (
pi_str_compcode => pi_str_compcode,
pi_str_disccode => l_rec_acct.disc_code,
po_rec_discountrate => l_rec_discrate,
po_bol_found => l_bol_discfound);
-- Set Returnvalue
IF l_bol_discfound AND l_rec_acct.disc_allowed = 'Y'
THEN
po_dbl_discrate := l_rec_discrate.disc_rate;
ELSE
po_dbl_discrate := 0;
END IF;
/*
-- Athe 2011-06-30
-- Hack To Handle Discount Activity In Austria. Discount Is Given For
-- Cash'N'Carry Transactions Only, Between 30th June And 2nd July
If Pi_str_compcode = '1520' And L_rec_acct.Disc_code = '03' Then
If L_rec_invhead.Order_no Is Not Null Then
L_bol_realdiscfound := False;
End If;
If L_rec_invhead.Inv_type = 'C' Then
L_bol_realdiscfound := False;
End If;
If L_rec_invhead.Inv_type Is Null Then
L_bol_realdiscfound := False;
End If;
If To_char (L_rec_invhead.Sales_date, 'Yyyymmdd') < '20110630' Or
To_char (L_rec_invhead.Sales_date, 'Yyyymmdd') > '20110702' Then
L_bol_realdiscfound := False;
End If;
End If;
*/
--
-- ==========================================================================
-- Description : Calculates The Total Discount Per Invoice And Inserts
-- The Accumulated Discount Per Delivery Resp. Per Invoice
-- Into The Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- Changed : Xyz
-- Handling Discount For Articles With Eco-Fee
-- ==========================================================================
PROCEDURE calcdisc_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcDisc_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_discartno invoice_row_v.art_no%TYPE;
l_str_freightartno invoice_row_v.art_no%TYPE;
--rabha1 15-Mar-2022
--RIMS-291 Print special articles description for Germany
l_str_freightartno1 invoice_row_v.art_no%TYPE;
l_str_freightartno2 invoice_row_v.art_no%TYPE;
l_str_freightartno3 invoice_row_v.art_no%TYPE;
l_str_freightartno4 invoice_row_v.art_no%TYPE;
l_str_addservartno invoice_row_v.art_no%TYPE;
l_str_assemblyartno invoice_row_v.art_no%TYPE;
l_str_transportartno invoice_row_v.art_no%TYPE;
l_str_spec1artno invoice_row_v.art_no%TYPE;
l_str_spec2artno invoice_row_v.art_no%TYPE;
l_str_spec3artno invoice_row_v.art_no%TYPE;
l_str_spec4artno invoice_row_v.art_no%TYPE;
l_str_advartno invoice_row_v.art_no%TYPE;
l_dbl_custdiscrate discount_rate_v.disc_rate%TYPE := 0;
--
-- Table For Storing The Used Vatcodes And Their Vatrates
TYPE typ_rec_vatinfodel IS RECORD
(
vat_code invoice_row_v.row_vat_code%TYPE,
vat_rate invoice_row_v.row_vat%TYPE,
delivery invoice_row_v.cusdel_no%TYPE,
disc_amount_incl invoice_row_v.sold_amount%TYPE,
disc_amount_excl invoice_row_v.sold_amount_excl%TYPE,
disc_amount_vat invoice_row_v.sold_amount%TYPE,
goods_amount_incl invoice_row_v.sold_amount%TYPE,
goods_amount_excl invoice_row_v.sold_amount_excl%TYPE,
goods_amount_noeco_excl invoice_row_v.sold_amount_excl%TYPE,
goods_amount_noeco_incl invoice_row_v.sold_amount%TYPE,
goods_amount_vat invoice_row_v.sold_amount%TYPE
);
l_bol_vatdelnotexists BOOLEAN;
l_tab_vatinfodel typ_tab_vatinfodel;
l_tab_vatinfo typ_tab_vatinfo;
l_int_vatcodecount INTEGER := 0;
l_int_vatinfodel INTEGER := 0;
l_int_vatinfo INTEGER := 0;
l_int_indextable1 INTEGER;
l_int_indextable2 INTEGER;
l_int_indextable3 INTEGER;
l_int_indextable4 INTEGER;
l_int_indextable2max INTEGER := 0;
l_bol_vatinfonotexists BOOLEAN;
--
-- Variables For The Retrieval Of Delivery-Group-Keys
l_cur_invdel invo_invr_pck.typ_cur;
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
--
-- Variables For Retrieval Of Articlerows Per Delivery
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
l_str_criteria VARCHAR2 (500);
l_int_salerownodisc invoice_row_v.sale_row_no%TYPE
DEFAULT NULL;
l_int_salerownomax invoice_row_v.sale_row_no%TYPE
DEFAULT NULL;
l_str_sourcesystemdisc invoice_row_v.source_system%TYPE
DEFAULT NULL;
l_str_artdescdiscount invoice_row_v.description%TYPE
DEFAULT NULL;
l_int_i INTEGER := 0;
--
-- Variables For Accumulation
l_dbl_discamtdel invoice_row_v.sold_amount%TYPE := 0;
l_dbl_discamtincl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_discamtexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_discamtvat invoice_row_v.sold_amount%TYPE := 0;
l_dbl_goodsamtdelincl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_goodsamtdelexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_totgoodsincl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_totdiscincl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_totspecartincl invoice_row_v.sold_amount%TYPE := 0;
-- 0042 Alsc
l_dbl_specartamtdelincl invoice_row_v.sold_amount%TYPE := 0;
-- <0039> Novg
--
-- Handling Of Eco-Fee
l_str_ctycode acct_global_parameter_v.cty_code%TYPE;
l_dbl_ecofeeamountexcl eco_fee_v.fee_amount%TYPE; --Eco-Fee Amount
Without Vat
l_dbl_ecofeeamountincl eco_fee_v.fee_amount%TYPE; --Eco-Fee Amount
With Vat
l_dbl_goodsamtdelnoecoincl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_goodsamtdelnoecoexcl invoice_row_v.sold_amount%TYPE := 0;
--RIMS-1138 rasha16 25/08/23 new varibales added to get group discount
l_dbl_groupcustdicount BOOLEAN := FALSE;
l_dbl_discgroupcustamtdel invoice_row_v.sold_amount%TYPE := 0;
l_db1_disc_amount_incl invoice_row_v.sold_amount%TYPE := 0;
l_db1_disc_amount_excl invoice_row_v.sold_amount%TYPE := 0;
l_db1_disc_amount_vat invoice_row_v.sold_amount%TYPE := 0;
--
--
-- Flags
l_bol_invdiscdel BOOLEAN := FALSE;
l_bol_custdisc BOOLEAN := FALSE;
l_bol_ecofeecty BOOLEAN := FALSE;
--
PROCEDURE setinvstatzerototals
IS
BEGIN
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatzerototals);
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
END;
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcdisc_begin;
l_bol_invdisc := FALSE;
--
l_str_discartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'DISCOUNT');
--
-- If Country Uses This Special Article, Calculate The Sum ...
--
-- Get The Five Different Vatrates For This Country
-- ...
--
IF l_str_discartno <> '00000000'
THEN
-- What Other Special Articles Are There (On Which We May Give No
Discount)?
l_str_freightartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'FREIGHT');
--rabha1 15-Mar-2022
--RIMS-291 Print special articles description for Germany
l_str_freightartno1 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'FREIGHT1');
l_str_freightartno2 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'FREIGHT2');
l_str_freightartno3 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'FREIGHT3');
l_str_freightartno4 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'FREIGHT4');
l_str_addservartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'ADDSERV');
l_str_assemblyartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'ASSEMBLY');
l_str_transportartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'TRANSPORT');
l_str_spec1artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'SPECART1');
l_str_spec2artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'SPECART2');
l_str_spec3artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'SPECART3');
l_str_spec4artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'SPECART4');
l_str_advartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'PIA');
IF l_dbl_custdiscrate = 100
THEN -- 0032 Alsc
-- Dbms_output.Put_line('Customerdiscount 100%!');
l_bol_100percdiscount := TRUE;
END IF;
END IF; */
-- Removed as per RIMS 433 SWVAR1 26-May-2023
l_dbl_groupcustdicount :=
cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'APPLYRIMSDISCOUNT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode);
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'GROUPCUSTDISCOUNT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
--RIMS-1138 Added to check if group discount is applicable
IF NOT NVL (l_dbl_groupcustdicount, FALSE) --
l_dbl_groupcustdicount is FALSE
THEN
IF NOT l_bol_invdiscdel -- ISELL discount is false then apply
only cust group discount. Else it will automatically take iSELL discount only
THEN
IF checkcustgroupdisc_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
po_dbl_discrate => l_dbl_custdiscrate)
THEN
-- Set Flag For Customers Discount
l_bol_custdisc := TRUE;
l_bol_invdisc := TRUE;
END IF;
ELSE -- ELSE Not needed it is kept to make the code readable.
Only ISELL discount will be applicable
l_bol_custdisc := FALSE;
l_bol_invdisc := FALSE;
END IF;
-- RIMS-1138 added if l_dbl_groupcustdicount = TRUE. It will get
cust group percentage checkcustgroupdisc_fct
ELSE -- l_dbl_groupcustdicount TRUE
IF checkcustgroupdisc_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
po_dbl_discrate => l_dbl_custdiscrate)
THEN
-- Set Flag For Customers Discount
l_bol_custdisc := TRUE;
l_bol_invdisc := TRUE;
END IF;
END IF;
ELSE -- GROUPCUSTDISCOUNT is FALSE
IF NOT NVL (l_dbl_groupcustdicount, FALSE) -- APPLYRIMSDISCOUNT
FALSE
THEN
IF (l_rec_acct.disc_allowed = 'Y')
THEN
IF NOT l_bol_invdiscdel -- l_bol_invdiscdel ISELL discount
is false, then apply RIMS customer discount
THEN
IF checkcustdisc_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
po_dbl_discrate => l_dbl_custdiscrate)
THEN
-- Set Flag For Customers Discount
l_bol_custdisc := TRUE;
l_bol_invdisc := TRUE;
END IF;
END IF;
END IF;
ELSE -- APPLYRIMSDISCOUNT is true apply cust discount
checkcustdisc_fct , In this case cusr group discount is NOT applicable.
IF (l_rec_acct.disc_allowed = 'Y')
THEN
IF checkcustdisc_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
po_dbl_discrate => l_dbl_custdiscrate)
THEN
-- Set Flag For Customers Discount
l_bol_custdisc := TRUE;
l_bol_invdisc := TRUE;
END IF;
ELSE -- ELSE Not needed it is kept to make the code readable.
Only ISELL discount is applied
l_bol_custdisc := FALSE;
l_bol_invdisc := FALSE;
END IF;
END IF;
END IF;
--
-- Dbms_output.Put_line('1');
-- Now Go Through The Different Deliveries One By One
<<deliveries>>
LOOP
FETCH l_cur_invdel
INTO l_str_compcode, l_str_invno, l_str_cusdelno;
-- Dbms_output.Put_line('3');
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
--RIMS--138 rasha16
l_dbl_discgroupcustamtdel := 0;
l_db1_disc_amount_incl := 0;
l_db1_disc_amount_excl := 0;
l_db1_disc_amount_vat := 0;
-- Get Eco-Fee
-- If No Eco-Fee Is Defined For The Regarding Article, Country
And Date, The Eco-Fee Amount Is Null
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'ECOFEECOUNTRY',
pi_str_condition1 => 'CTY_CODE',
pi_str_value1 => l_str_ctycode)
THEN
--02-Feb-24 rabha1 RIMS-2188 fee_type added
l_dbl_ecofeeamountexcl :=
NVL (ecof_01_pck.getecofeeamount_fct (
pi_str_ctycode => l_str_ctycode,
pi_str_artno =>
l_rec_invrowsdel.art_no,
pi_str_feetype => 'ECO',
pi_dat_startdate =>
l_rec_invhead.sales_date),
0);
l_bol_ecofeecty := TRUE;
ELSE
l_dbl_ecofeeamountexcl := 0;
l_dbl_ecofeeamountincl := 0;
l_bol_ecofeecty := FALSE;
END IF;
-- Dbms_output.Put_line('4');
-- Dbms_output.Put_line('Current Article Is '||
L_rec_invrowsdel.Art_no);
-- Accumulate Either The Discountamount Or Goods
IF (l_rec_invrowsdel.art_no = l_str_discartno)
THEN
-- No Discount On Eco-Fee, Therfore This Sold_amount Of The
Discount Article, As Sent By Mhs, Should
-- Not Include Eco-Fee!
l_dbl_discamtdel :=
l_dbl_discamtdel
+ NVL (l_rec_invrowsdel.sold_amount, 0);
-- Set Flag, That - Delivery-Discount Has Been Given
-- - Invoice-Specific Discount Has Been
Given
l_bol_invdiscdel := TRUE;
l_bol_invdisc := TRUE;
-- Remember The Salerow, Source System And Article
Description
-- That Contains The Discount (For
-- Inserting The Net Amount)
l_int_salerownodisc := l_rec_invrowsdel.sale_row_no;
l_str_sourcesystemdisc :=
l_rec_invrowsdel.source_system;
l_str_artdescdiscount := l_rec_invrowsdel.description;
-- Dbms_output.Put_line('Discountrow Has Sale-Row-Number '||
L_int_salerownodisc);
-- L_int_salerownomax := L_rec_invrowsdel.Sale_row_no; --
Novg 19.04.2007
-- Dbms_output.Put_line('Highest Sale-Row-Number Is '||
L_int_salerownomax);
--
-- Dbms_output.Put_line('5');
-- The Goodsamount = 'Discountable Articles' Amount Per
Delivery
ELSIF (l_rec_invrowsdel.art_no = l_str_freightartno)
OR -- <0039> Novg
(l_rec_invrowsdel.art_no = l_str_addservartno)
OR (l_rec_invrowsdel.art_no = l_str_assemblyartno)
OR (l_rec_invrowsdel.art_no = l_str_transportartno)
OR (l_rec_invrowsdel.art_no = l_str_spec1artno)
OR (l_rec_invrowsdel.art_no = l_str_spec2artno)
OR (l_rec_invrowsdel.art_no = l_str_spec3artno)
OR (l_rec_invrowsdel.art_no = l_str_spec4artno)
--RIMS-291
OR (l_rec_invrowsdel.art_no = l_str_freightartno1)
OR (l_rec_invrowsdel.art_no = l_str_freightartno2)
OR (l_rec_invrowsdel.art_no = l_str_freightartno3)
OR (l_rec_invrowsdel.art_no = l_str_freightartno4)
THEN
DBMS_OUTPUT.put_line (
'in arcticle l_str_discartno step 02 ');
l_dbl_specartamtdelincl :=
l_dbl_specartamtdelincl
+ l_rec_invrowsdel.sold_amount;
--RIMS-432 rasha16 21/04/23
ELSIF MTB_06_PCK.FoundSArt_fct (
pi_str_CmpCode => l_rec_invrowsdel.comp_code,
pi_str_ArtNo => l_rec_invrowsdel.ART_NO)
THEN
l_dbl_specartamtdelincl :=
l_dbl_specartamtdelincl
+ l_rec_invrowsdel.sold_amount;
ELSIF (l_rec_invrowsdel.art_no <> l_str_advartno)
THEN -- 0042 Alsc
-- Dbms_output.Put_line('6');
l_bol_vatdelnotexists := TRUE;
--
-- Does An Entry For This Vatcode And Delivery Already
Exist In The Matrix?
l_int_vatinfodel := NVL (l_tab_vatinfodel.LAST, 0);
-- Dbms_output.Put_line('7');
-- New Vatcode Is Added To The Vatcode-Matrix
IF l_bol_vatdelnotexists
THEN
-- Dbms_output.Put_line('7.5');
l_tab_vatinfodel (l_int_vatinfodel + 1).vat_code :=
l_rec_invrowsdel.row_vat_code;
l_tab_vatinfodel (l_int_vatinfodel + 1).vat_rate :=
l_rec_invrowsdel.row_vat;
l_tab_vatinfodel (l_int_vatinfodel + 1).delivery :=
l_rec_invrowsdel.cusdel_no;
l_tab_vatinfodel (l_int_vatinfodel +
1).disc_amount_incl :=
0;
l_tab_vatinfodel (l_int_vatinfodel +
1).disc_amount_excl :=
0;
l_tab_vatinfodel (l_int_vatinfodel + 1).disc_amount_vat
:=
0;
l_tab_vatinfodel (l_int_vatinfodel +
1).goods_amount_incl :=
0;
l_tab_vatinfodel (l_int_vatinfodel +
1).goods_amount_excl :=
0;
l_tab_vatinfodel (l_int_vatinfodel +
1).goods_amount_noeco_incl :=
0;
l_tab_vatinfodel (l_int_vatinfodel +
1).goods_amount_noeco_excl :=
0;
l_tab_vatinfodel (l_int_vatinfodel +
1).goods_amount_vat :=
0;
END IF;
-- Now Add Up The Goods Amounts And Insert Into This Table
-- Dbms_output.Put_line('8');
l_int_vatinfodel := NVL (l_tab_vatinfodel.LAST, 0);
l_tab_vatinfodel
(l_int_indextable).goods_amount_excl :=
l_tab_vatinfodel
(l_int_indextable).goods_amount_excl
+ l_rec_invrowsdel.sold_amount_excl;
--
-- Goods Amounts Excluding Eco-Fee
l_tab_vatinfodel
(l_int_indextable).goods_amount_noeco_incl :=
l_tab_vatinfodel
(l_int_indextable).goods_amount_noeco_incl
+ l_rec_invrowsdel.sold_amount
- l_dbl_ecofeeamountincl;
l_tab_vatinfodel
(l_int_indextable).goods_amount_noeco_excl :=
l_tab_vatinfodel
(l_int_indextable).goods_amount_noeco_excl
+ l_rec_invrowsdel.sold_amount_excl
- l_dbl_ecofeeamountexcl;
END IF;
END LOOP;
-- Dbms_output.Put_line('10');
-- Reset Flag For 'New Vatcode?'
l_bol_vatdelnotexists := TRUE;
-- L_int_salerownomax := L_rec_invrowsdel.Sale_row_no; --
Novg 19.04.2007
--
END IF;
l_int_salerownomax := l_rec_invrowsdel.sale_row_no;
-- Novg 19.04.2007
--
-- Dbms_output.Put_line('Highest Sale-Row-Number Is '||
L_int_salerownomax);
--
END LOOP articles;
-- Dbms_output.Put_line('11');
-- Dbms_output.Put_line('Maximum Sale-Row-Number Is '||
L_int_salerownomax);
--
-- Accumulate Goods-Amounts With Current Deliveries' Goodsamounts
Per Vatcode
l_int_vatinfodel := NVL (l_tab_vatinfodel.LAST, 0);
-- Dbms_output.Put_line('12');
--
-- Calculate Vat For Discount On Invoice
IF l_bol_invdiscdel
THEN
-- Dbms_output.Put_line('13');
-- Dbms_output.Put_line('This Invoice Has A Discount Given By
Mhs');
--RIMS-1138
IF l_dbl_groupcustdicount AND l_bol_custdisc
THEN
IF l_bol_vatobliged
THEN
-- Dbms_output.Put_line('22');
l_dbl_discgroupcustamtdel :=
l_dbl_goodsamtdelnoecoincl
* (l_dbl_custdiscrate / 100);
ELSE
-- Dbms_output.Put_line('23');
l_dbl_discgroupcustamtdel :=
l_dbl_goodsamtdelnoecoexcl
* (l_dbl_custdiscrate / 100);
END IF;
END IF;
--
l_int_vatinfodel := NVL (l_tab_vatinfodel.LAST, 0);
--RIMS-1138 rasha16
l_int_i := 1;
--RIMS-1138 rasha16
IF l_dbl_groupcustdicount AND l_bol_custdisc
THEN
l_db1_disc_amount_incl :=
( ( l_tab_vatinfodel (
l_int_indextable).goods_amount_noeco_incl
- l_tab_vatinfodel (
l_tab_vatinfodel
(l_int_indextable).disc_amount_incl :=
l_tab_vatinfodel
(l_int_indextable).disc_amount_incl
+ l_db1_disc_amount_incl;
END IF;
END IF;
--RIMS-1138 rasha16
IF l_dbl_groupcustdicount AND l_bol_custdisc
THEN
IF l_bol_vatobliged
THEN
-- Calculate Discount Excl For This Delivery
And Vatcode
--- Changed here now
-- shdl be 36
l_db1_disc_amount_excl :=
( (l_db1_disc_amount_incl)
/ ( 1
+ ( l_tab_vatinfodel (
l_int_indextable).vat_rate
/ 100)));
-- commented now
/*
l_tab_vatinfodel
(l_int_indextable).disc_amount_excl :=
l_tab_vatinfodel
(l_int_indextable).disc_amount_excl + l_db1_disc_amount_excl;
*/
ELSE
l_db1_disc_amount_excl :=
l_db1_disc_amount_incl;
--commented now
/*
l_tab_vatinfodel
(l_int_indextable).disc_amount_excl :=
l_tab_vatinfodel
(l_int_indextable).disc_amount_excl + l_db1_disc_amount_excl;
*/
END IF;
END IF;
--RIMS-1138
IF l_dbl_groupcustdicount AND l_bol_custdisc
THEN
l_db1_disc_amount_vat :=
l_db1_disc_amount_incl
- l_db1_disc_amount_excl;
l_tab_vatinfodel (l_int_indextable).disc_amount_vat
:=
l_tab_vatinfodel
(l_int_indextable).disc_amount_vat
+ l_db1_disc_amount_vat;
END IF;
-- Dbms_output.Put_line('16');
-- Insert The New Discount-Rows, But First Get Rid Of The Old
Discountrow
-- Dbms_output.Put_line('Remove Discountrow '||
L_int_salerownodisc);
IF (l_int_salerownodisc IS NOT NULL)
AND (l_dbl_goodsamtdelincl <> 0)
THEN
invo_07_pck.removeinvrow_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_salerowno => l_int_salerownodisc);
-- Dbms_output.Put_line('17');
END IF;
--
-- L_int_i := 1; I.M. Issidoros Minovgidis
-- L_int_i := 0: 0031 Alsc: Is Problematic, If Mhs-Discountrow
Was Not Last Article...
--RIMS-1138 rasha16
l_int_i := 1;
--
l_int_vatinfodel := NVL (l_tab_vatinfodel.LAST, 0);
-- Dbms_output.Put_line('18');
FOR l_int_indextable IN 1 .. l_int_vatinfodel
LOOP
-- Dbms_output.Put_line('19');
IF (l_tab_vatinfodel (l_int_indextable).delivery =
l_str_cusdelno)
THEN
-- Dbms_output.Put_line('20');
l_rec_invrowsdel.sold_qty := -1;
l_rec_invrowsdel.art_no := l_str_discartno;
l_rec_invrowsdel.sale_row_no :=
l_int_salerownomax + l_int_i;
l_rec_invrowsdel.sold_amount :=
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
(l_tab_vatinfodel (
l_int_indextable).disc_amount_incl))
* -1;
l_rec_invrowsdel.sold_amount_excl :=
(roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
l_tab_vatinfodel (
l_int_indextable).disc_amount_excl))
* -1;
l_rec_invrowsdel.row_vat :=
l_tab_vatinfodel (l_int_indextable).vat_rate;
l_rec_invrowsdel.row_vat_code :=
l_tab_vatinfodel (l_int_indextable).vat_code;
l_rec_invrowsdel.group_id_prod := NULL;
l_rec_invrowsdel.group_id_txt := NULL;
--Sobha5: The Remembered Source System And Article
Description
-- Will Be Inserted. The Article Description Is Null If
Source
-- System Is Isell.
l_rec_invrowsdel.source_system :=
l_str_sourcesystemdisc;
l_rec_invrowsdel.description :=
l_str_artdescdiscount;
--
-- <Change Novg 2007.08.08 Tracking Invoice Data Back
To The Input Data>
SELECT invr_seq.NEXTVAL
INTO l_rec_invrowsdel.seq
FROM DUAL;
invo_07_pck.createinvrow_prc (
pi_rec_invr => l_rec_invrowsdel);
--RIMS-1138
/*
l_int_i := l_int_i + 1;
IF l_dbl_groupcustdicount
THEN
l_rec_invrowsdel.sold_qty := -1;
l_rec_invrowsdel.sale_row_no :=
l_rec_invrowsdel.sale_row_no + l_int_i;
dbms_output.put_line('The value of
l_rec_invrowsdel.sale_row_no ' || l_rec_invrowsdel.sale_row_no);
l_rec_invrowsdel.sold_amount :=
(roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
l_db1_disc_amount_incl))
* -1;
dbms_output.put_line('The value of
l_rec_invrowsdel.sold_amount ' || l_rec_invrowsdel.sold_amount);
l_rec_invrowsdel.unit_price :=
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
l_rec_invrowsdel.sold_amount)
* -1;
dbms_output.put_line('The value of
l_rec_invrowsdel.unit_price ' || l_rec_invrowsdel.unit_price);
l_rec_invrowsdel.sold_amount_excl :=
(roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
l_db1_disc_amount_excl))
* -1;
dbms_output.put_line('The value of
l_rec_invrowsdel.sold_amount_excl ' || l_rec_invrowsdel.sold_amount_excl);
l_rec_invrowsdel.art_no := l_str_discartno;
dbms_output.put_line('The value of
l_rec_invrowsdel.art_no ' || l_rec_invrowsdel.art_no);
l_rec_invrowsdel.row_vat :=
l_tab_vatinfodel (l_int_indextable).vat_rate;
dbms_output.put_line('The value of
l_rec_invrowsdel.row_vat ' || l_rec_invrowsdel.row_vat);
l_rec_invrowsdel.row_vat_code :=
l_tab_vatinfodel (l_int_indextable).vat_code;
dbms_output.put_line('The value of
l_rec_invrowsdel.row_vat_code ' || l_rec_invrowsdel.row_vat_code);
l_rec_invrowsdel.row_vat_amount :=
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
( l_rec_invrowsdel.sold_amount
- l_rec_invrowsdel.sold_amount_excl))
* -1;
dbms_output.put_line('The value of
l_rec_invrowsdel.row_vat_amount ' || l_rec_invrowsdel.row_vat_amount);
l_rec_invrowsdel.group_id_prod := NULL;
l_rec_invrowsdel.group_id_txt := NULL;
-- Sobha5: The Article Description In Invoice_row_t For
The Discount Article
-- Will Be Null And The Source System Will Be Rims.
This Will Add A New
-- Sum_code = Rims In Invoice_sums_t Which Is
Acceptable.
l_rec_invrowsdel.source_system := 'RIMS';
l_rec_invrowsdel.description :=
l_str_artdescdiscount;
-- Dbms_output.Put_line('28');
--
-- Here Insert Additional Articlerow With Customer'S
Discount
-- <Change Novg 2007.08.08 Tracking Invoice Data Back
To The Input Data>
SELECT invr_seq.NEXTVAL
INTO l_rec_invrowsdel.seq
FROM DUAL;
invo_07_pck.createinvrow_prc (
pi_rec_invr => l_rec_invrowsdel);
-- Dbms_output.Put_line('29');
end if;
*/
l_int_i := l_int_i + 1;
END IF;
END LOOP;
--
-- If No Invoice-Discount But Customer'S Discount
ELSIF l_bol_custdisc
THEN
-- Dbms_output.Put_line('21');
--
-- Calculate The Discountamount For This Delivery
-- On Goods Amount Excluding Eco-Fee
IF l_bol_vatobliged
THEN
-- Dbms_output.Put_line('22');
l_dbl_discamtdel :=
l_dbl_goodsamtdelnoecoincl
* (l_dbl_custdiscrate / 100);
ELSE
-- Dbms_output.Put_line('23');
l_dbl_discamtdel :=
l_dbl_goodsamtdelnoecoexcl
* (l_dbl_custdiscrate / 100);
END IF;
--
l_int_i := 1;
--
-- Dbms_output.Put_line('24');
l_int_vatinfodel := NVL (l_tab_vatinfodel.LAST, 0);
l_int_indextable).goods_amount_noeco_incl
/ l_dbl_goodsamtdelnoecoincl)
* l_dbl_discamtdel;
END IF;
END IF;
IF l_bol_vatobliged
THEN
-- Calculate Discount Excl For This Delivery And
Vatcode
l_tab_vatinfodel
(l_int_indextable).disc_amount_excl :=
( l_tab_vatinfodel
(l_int_indextable).disc_amount_incl
/ ( 1
+ ( l_tab_vatinfodel (
l_int_indextable).vat_rate
/ 100)));
ELSE
l_tab_vatinfodel
(l_int_indextable).disc_amount_excl :=
l_tab_vatinfodel
(l_int_indextable).disc_amount_incl;
END IF;
-- Dbms_output.Put_line('27');
-- Calculate Discount'S Vat For This Delivery And
Vatcode
l_tab_vatinfodel (l_int_indextable).disc_amount_vat :=
l_tab_vatinfodel
(l_int_indextable).disc_amount_incl
- l_tab_vatinfodel
(l_int_indextable).disc_amount_excl;
--
-- Create New Invoicerow And Insert It
l_rec_invrowsdel.sold_qty := 1;
l_rec_invrowsdel.sale_row_no :=
l_rec_invrowsdel.sale_row_no + l_int_i;
l_rec_invrowsdel.sold_amount :=
(roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
l_tab_vatinfodel (
l_int_indextable).disc_amount_incl))
* -1;
l_rec_invrowsdel.unit_price :=
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
l_rec_invrowsdel.sold_amount)
* -1;
l_rec_invrowsdel.sold_amount_excl :=
(roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
l_tab_vatinfodel (
l_int_indextable).disc_amount_excl))
* -1;
l_rec_invrowsdel.art_no := l_str_discartno;
l_rec_invrowsdel.row_vat :=
l_tab_vatinfodel (l_int_indextable).vat_rate;
l_rec_invrowsdel.row_vat_code :=
l_tab_vatinfodel (l_int_indextable).vat_code;
l_rec_invrowsdel.row_vat_amount :=
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
( l_rec_invrowsdel.sold_amount
- l_rec_invrowsdel.sold_amount_excl))
* -1;
l_rec_invrowsdel.group_id_prod := NULL;
l_rec_invrowsdel.group_id_txt := NULL;
-- Sobha5: The Article Description In Invoice_row_t For
The Discount Article
-- Will Be Null And The Source System Will Be Rims.
This Will Add A New
-- Sum_code = Rims In Invoice_sums_t Which Is
Acceptable.
l_rec_invrowsdel.source_system := 'RIMS';
l_rec_invrowsdel.description :=
l_str_artdescdiscount;
-- Dbms_output.Put_line('28');
--
-- Here Insert Additional Articlerow With Customer'S
Discount
-- <Change Novg 2007.08.08 Tracking Invoice Data Back
To The Input Data>
SELECT invr_seq.NEXTVAL
INTO l_rec_invrowsdel.seq
FROM DUAL;
invo_07_pck.createinvrow_prc (
pi_rec_invr => l_rec_invrowsdel);
-- Dbms_output.Put_line('29');
l_int_i := l_int_i + 1;
END IF;
END LOOP;
-- Dbms_output.Put_line('30');
END IF;
l_int_indextable).disc_amount_excl),
pi_dbl_amountincl =>
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
(-1)
* l_tab_vatinfodel (
l_int_indextable).disc_amount_incl),
pi_dbl_vat =>
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
(-1)
* l_tab_vatinfodel (
l_int_indextable).disc_amount_incl)
- roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
(-1)
* l_tab_vatinfodel (
l_int_indextable).disc_amount_excl));
IF l_bol_ecofeecty
THEN
Util_01_Pck.Log_prc (
pi_str_Msg =>
'Line no 3754 boolean is true');
ELSE
Util_01_Pck.Log_prc (
pi_str_Msg =>
'Line no 3756 boolean is false');
END IF;
END IF;
-- Dbms_output.Put_line('33');
END IF;
END LOOP;
-- Dbms_output.Put_line('34');
--
-- Reset Flag For Delivery-Specific Discount And The Delivery'S
Discount
l_dbl_discamtdel := 0;
l_dbl_goodsamtdelincl := 0;
l_dbl_goodsamtdelexcl := 0;
l_dbl_goodsamtdelnoecoincl := 0;
l_dbl_goodsamtdelnoecoexcl := 0;
l_dbl_totspecartincl :=
l_dbl_totspecartincl + l_dbl_specartamtdelincl;
-- 0042 Alsc
l_dbl_specartamtdelincl := 0; -- <0039> Novg
l_bol_invdiscdel := FALSE;
END LOOP deliveries;
--
CLOSE l_cur_invdel;
--
-- Dbms_output.Put_line('35');
--
l_int_vatinfodel := NVL (l_tab_vatinfodel.LAST, 0);
--
FOR l_int_indextable2 IN 1 .. l_int_indextable2max
LOOP
-- Dbms_output.Put_line('37');
IF (l_tab_vatinfodel (l_int_indextable1).vat_code =
l_tab_vatinfo (l_int_indextable2).vat_code)
THEN
-- Dbms_output.Put_line('38');
--
-- Accumulate Discount Amounts
l_tab_vatinfo (l_int_indextable2).disc_amount_incl :=
l_tab_vatinfo (l_int_indextable2).disc_amount_incl
+ l_tab_vatinfodel
(l_int_indextable1).disc_amount_incl;
--
l_tab_vatinfo (l_int_indextable2).disc_amount_excl :=
l_tab_vatinfo (l_int_indextable2).disc_amount_excl
+ l_tab_vatinfodel
(l_int_indextable1).disc_amount_excl;
--
l_tab_vatinfo (l_int_indextable2).disc_amount_vat :=
l_tab_vatinfo (l_int_indextable2).disc_amount_vat
+ l_tab_vatinfodel (l_int_indextable1).disc_amount_vat;
-- Dbms_output.Put_line('40');
l_int_vatinfo := NVL (l_tab_vatinfo.LAST, 0);
-- Dbms_output.Put_line('40.5');
--
FOR l_int_indextable3 IN 1 .. l_int_vatinfo
LOOP
-- Total Of Goods Vs Total Of Discount ...
-- Dbms_output.Put_line('Goods: Adding '||
To_char(L_tab_vatinfo(L_int_indextable3).Goods_amount_incl)||' To '||
To_char(L_dbl_totgoodsincl));
-- Dbms_output.Put_line('Discount: Adding '||
To_char(L_tab_vatinfo(L_int_indextable3).Disc_amount_incl)||' To '||
To_char(L_dbl_totdiscincl));
l_dbl_totgoodsincl :=
l_dbl_totgoodsincl
+ l_tab_vatinfo (l_int_indextable3).goods_amount_incl;
l_dbl_totdiscincl :=
l_dbl_totdiscincl
+ l_tab_vatinfo (l_int_indextable3).disc_amount_incl;
END LOOP;
-- ... = 100% ?
IF (ABS (l_dbl_totgoodsincl) = ABS (l_dbl_totdiscincl)) -- 0032
Alsc
AND (ABS (l_dbl_totdiscincl) > 0)
THEN -- 0033 Novg
l_bol_100percdiscount := TRUE;
END IF;
--
FOR l_int_indextable2 IN 1 .. l_int_vatinfo
LOOP
--rasha1 RIMS-2823 ECO Fee not showing in INVOICE_SUMS_T
-- Write To Table Invoice_sums_t The Eco-Fee Per Invoice
IF l_bol_ecofeecty
THEN
Util_01_Pck.Log_prc (
pi_str_Msg =>
'Required Message for l_bol_ecofeecty in 2nd place is
true');
l_dbl_ecofeeamountexcl :=
l_tab_vatinfodel (l_int_indextable2).goods_amount_excl
- l_tab_vatinfodel
(l_int_indextable2).goods_amount_noeco_excl;
l_dbl_ecofeeamountincl :=
l_tab_vatinfodel (l_int_indextable2).goods_amount_incl
- l_tab_vatinfodel
(l_int_indextable2).goods_amount_noeco_incl;
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'ECOFEE'
|| l_tab_vatinfo (l_int_indextable2).vat_code,
pi_dbl_amountexcl =>
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount => l_dbl_ecofeeamountexcl),
pi_dbl_amountincl =>
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount => l_dbl_ecofeeamountincl),
pi_dbl_vat =>
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
l_dbl_ecofeeamountincl
- l_dbl_ecofeeamountexcl));
END IF;
END LOOP;
-- Dbms_output.Put_line('43');
--
-- 0042 Alsc:
-- If The Whole Invoice Has No Amounts Then Do Not Process This Invoice
Further!
-- ... So First Calculate The Total Of Goods For This Invoice (Total Of
Special
-- Articles Is Already Calculated Above)
l_int_vatinfo := NVL (l_tab_vatinfo.LAST, 0);
--
-- Set Invoicestatus To 'D'
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatdisc);
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
EXCEPTION
-- Novg 04.01.2006
-- When No_data_found Then
-- Null;
WHEN OTHERS
THEN
-- Dbms_output.Put_line('Calcdisc_begin');
ROLLBACK TO calcdisc_begin;
l_bol_success := FALSE; -- <0057>
-- Write To Eventlog, That Problem Occurred In This Procedure
util_01_pck.log_prc (
pi_str_msg =>
c_str_prcname || ' ran on error for : ' || pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
-- ==========================================================================
-- Description : Calculates The Freightcosts Per Delivery And Per Invoice
-- And Inserts Them Into Invoice_sums_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcfreight_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcFreight_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_artnofreight invoice_row_v.art_no%TYPE;
--rabha1 02-Mar-2022
--RIMS-291 Print special articles description for Germany
l_str_artnofreight1 invoice_row_v.art_no%TYPE;
l_str_artnofreight2 invoice_row_v.art_no%TYPE;
l_str_artnofreight3 invoice_row_v.art_no%TYPE;
l_str_artnofreight4 invoice_row_v.art_no%TYPE;
--
l_bol_access BOOLEAN := FALSE;
l_bol_delfreight BOOLEAN := FALSE;
l_bol_invfreight BOOLEAN := FALSE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts Of Freight Per Delivery ...
l_dbl_invdelfreight invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelfreightexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelfreightvat invoice_row_v.sold_amount%TYPE := 0;
l_str_invdelfreightvatcode invoice_row_v.row_vat_code%TYPE
DEFAULT NULL;
-- ... Or Invoice
l_dbl_invfreight invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invfreightexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invfreightvat invoice_row_v.sold_amount%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcfreight_begin;
--
-- Fetch Articlenumber For Article 'Freight'
l_str_artnofreight :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'FREIGHT');
--RIMS-291
l_str_artnofreight1 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'FREIGHT1');
l_str_artnofreight2 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'FREIGHT2');
l_str_artnofreight3 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'FREIGHT3');
l_str_artnofreight4 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'FREIGHT4');
util_01_pck.log_prc (
pi_str_msg => 'Freight Article is ' || l_str_artnofreight);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
--rabha1 02-Mar-2022
--RIMS-291 Print special articles description for Germany
IF ( l_rec_invrowsdel.art_no = l_str_artnofreight
OR l_rec_invrowsdel.art_no = l_str_artnofreight1
OR l_rec_invrowsdel.art_no = l_str_artnofreight2
OR l_rec_invrowsdel.art_no = l_str_artnofreight3
OR l_rec_invrowsdel.art_no = l_str_artnofreight4)
THEN
-- Accumulate Freight For This Delivery
l_dbl_invdelfreight :=
l_dbl_invdelfreight
+ l_rec_invrowsdel.sold_amount;
l_dbl_invdelfreightexcl :=
l_dbl_invdelfreightexcl
+ l_rec_invrowsdel.sold_amount_excl;
l_dbl_invdelfreightvat :=
l_dbl_invdelfreight - l_dbl_invdelfreightexcl;
l_str_invdelfreightvatcode :=
l_rec_invrowsdel.row_vat_code;
l_bol_delfreight := TRUE;
l_bol_invfreight := TRUE;
END IF;
END LOOP articles;
-- Write To Invoice_sums_t
IF l_bol_delfreight
THEN
-- ...Should The Invoice Be Vatobliged
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'FREIGHTDEL' || l_str_invdelfreightvatcode,
pi_dbl_amountexcl => l_dbl_invdelfreightexcl,
pi_dbl_amountincl => l_dbl_invdelfreight,
pi_dbl_vat => l_dbl_invdelfreightvat);
END IF;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invfreight
THEN
-- ...Should The Invoice Be Vat-Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'FREIGHT' || l_str_invdelfreightvatcode,
pi_dbl_amountexcl => l_dbl_invfreightexcl,
pi_dbl_amountincl => l_dbl_invfreight,
pi_dbl_vat => l_dbl_invfreightvat);
END IF;
END IF; -- ... Otherwise Just Move On To The Next Special Article
--
-- ==========================================================================
-- Description : Calculates The Transport Per Delivery And Per Invoice
-- And Inserts Those Values Into Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calctransport_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcTransport_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_artnotransport invoice_row_v.art_no%TYPE;
--
l_bol_deltransport BOOLEAN := FALSE;
l_bol_invtransport BOOLEAN := FALSE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts Of Transport Per Delivery ...
l_dbl_invdeltransport invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdeltransportexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdeltransportvat invoice_row_v.sold_amount%TYPE := 0;
l_str_invdeltransportvatcode invoice_row_v.row_vat_code%TYPE
DEFAULT NULL;
-- ... Or Invoice
l_dbl_invtransport invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invtransportexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invtransportvat invoice_row_v.sold_amount%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calctransport_begin;
--
-- Fetch Articlenumber For Article 'Transport'
l_str_artnotransport :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'TRANSPORT');
util_01_pck.log_prc (
pi_str_msg => 'Transport Article is ' || l_str_artnotransport);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
IF l_rec_invrowsdel.art_no = l_str_artnotransport
THEN
-- Accumulate Transport For This Delivery
l_dbl_invdeltransport :=
l_dbl_invdeltransport
+ l_rec_invrowsdel.sold_amount;
l_dbl_invdeltransportexcl :=
l_dbl_invdeltransportexcl
+ l_rec_invrowsdel.sold_amount_excl;
l_dbl_invdeltransportvat :=
l_dbl_invdeltransport - l_dbl_invdeltransportexcl;
l_str_invdeltransportvatcode :=
l_rec_invrowsdel.row_vat_code;
l_bol_deltransport := TRUE;
l_bol_invtransport := TRUE;
END IF;
END LOOP articles;
-- Write To Invoice_sums_t
IF l_bol_deltransport
THEN
-- Is The Invoice Be Vat-Obliged?
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'TRANSPORTDEL'
|| l_str_invdeltransportvatcode,
pi_dbl_amountexcl => l_dbl_invdeltransportexcl,
pi_dbl_amountincl => l_dbl_invdeltransport,
pi_dbl_vat => l_dbl_invdeltransportvat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'TRANSPORTDEL'
|| l_str_invdeltransportvatcode,
pi_dbl_amountexcl => l_dbl_invdeltransportexcl,
pi_dbl_amountincl => l_dbl_invdeltransport --Excl
,
pi_dbl_vat => l_dbl_invdeltransportvat);
END IF;
--
END IF;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invtransport
THEN
-- Is The Invoice Be Vat-Obliged?
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'TRANSPORT' || l_str_invdeltransportvatcode,
pi_dbl_amountexcl => l_dbl_invtransportexcl,
pi_dbl_amountincl => l_dbl_invtransport,
pi_dbl_vat => l_dbl_invtransportvat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'TRANSPORT' || l_str_invdeltransportvatcode,
pi_dbl_amountexcl => l_dbl_invtransportexcl,
pi_dbl_amountincl => l_dbl_invtransport --Excl
,
pi_dbl_vat => l_dbl_invtransportvat);
END IF;
--
END IF;
END IF; -- ... Otherwise Just Move On To The Next Special Article
--
-- ==========================================================================
-- Description : Calculates Them Assembly Per Delivery And Per Invoice
-- And Inserts Those Values Into Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcassembly_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcAssembly_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_artnoassembly invoice_row_v.art_no%TYPE;
--
l_bol_delassembly BOOLEAN := FALSE;
l_bol_invassembly BOOLEAN := FALSE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts Of Assembly Per Delivery ...
l_dbl_invdelassembly invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelassemblyexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelassemblyvat invoice_row_v.sold_amount%TYPE := 0;
l_str_invdelassemblyvatcode invoice_row_v.row_vat_code%TYPE := 0;
-- ... Or Invoice
l_dbl_invassembly invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invassemblyexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invassemblyvat invoice_row_v.sold_amount%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcassembly_begin;
--
-- Fetch Articlenumber For Article 'Assembly'
l_str_artnoassembly :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'ASSEMBLY');
util_01_pck.log_prc (
pi_str_msg =>
'Additional Services Article is ' || l_str_artnoassembly);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
-- Write To Invoice_sums_t
IF l_bol_delassembly
THEN
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'ASSEMBLYDEL' || l_str_invdelassemblyvatcode,
pi_dbl_amountexcl => l_dbl_invdelassemblyexcl,
pi_dbl_amountincl => l_dbl_invdelassembly,
pi_dbl_vat => l_dbl_invdelassemblyvat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'ASSEMBLYDEL' || l_str_invdelassemblyvatcode,
pi_dbl_amountexcl => l_dbl_invdelassemblyexcl,
pi_dbl_amountincl => l_dbl_invdelassembly --Excl
,
pi_dbl_vat => l_dbl_invdelassemblyvat);
END IF;
END IF;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invassembly
THEN
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'ASSEMBLY' || l_str_invdelassemblyvatcode,
pi_dbl_amountexcl => l_dbl_invassemblyexcl,
pi_dbl_amountincl => l_dbl_invassembly,
pi_dbl_vat => l_dbl_invassemblyvat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'ASSEMBLY' || l_str_invdelassemblyvatcode,
pi_dbl_amountexcl => l_dbl_invassemblyexcl,
pi_dbl_amountincl => l_dbl_invassembly --Excl
,
pi_dbl_vat => l_dbl_invassemblyvat);
END IF;
END IF;
END IF; -- ... Otherwise Just Move On To The Next Special Article
--
-- ==========================================================================
-- Description : Calculates The Additional Services Per Delivery And Per
-- Invoice And Inserts Those Values Into Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcaddserv_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcAddServ_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_artnoaddserv invoice_row_v.art_no%TYPE;
--
l_bol_deladdserv BOOLEAN := FALSE;
l_bol_invaddserv BOOLEAN := FALSE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts For Additional Services Per Delivery ...
l_dbl_invdeladdserv invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdeladdservexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdeladdservvat invoice_row_v.sold_amount%TYPE := 0;
l_str_invdelassemblyvatcode invoice_row_v.row_vat_code%TYPE
DEFAULT NULL;
-- ... Or Invoice
l_dbl_invaddserv invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invaddservexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invaddservvat invoice_row_v.sold_amount%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcaddserv_begin;
--
-- Fetch Articlenumber For Article 'Additional Services'
l_str_artnoaddserv :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'ADDSERV');
util_01_pck.log_prc (
pi_str_msg =>
'Additional Services Article is ' || l_str_artnoaddserv);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
IF l_rec_invrowsdel.art_no = l_str_artnoaddserv
THEN
-- Accumulate Additional Services For This Delivery
l_dbl_invdeladdserv :=
l_dbl_invdeladdserv
+ l_rec_invrowsdel.sold_amount;
l_dbl_invdeladdservexcl :=
l_dbl_invdeladdservexcl
+ l_rec_invrowsdel.sold_amount_excl;
l_dbl_invdeladdservvat :=
l_dbl_invdeladdserv - l_dbl_invdeladdservexcl;
l_str_invdelassemblyvatcode :=
l_rec_invrowsdel.row_vat_code;
l_bol_deladdserv := TRUE;
l_bol_invaddserv := TRUE;
END IF;
END LOOP articles;
-- Write To Invoice_sums_t
IF l_bol_deladdserv
THEN
-- Is The Invoice Be Vat-Obliged?
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'ADDSERVDEL' || l_str_invdelassemblyvatcode,
pi_dbl_amountexcl => l_dbl_invdeladdservexcl,
pi_dbl_amountincl => l_dbl_invdeladdserv,
pi_dbl_vat => l_dbl_invdeladdservvat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'ADDSERVDEL' || l_str_invdelassemblyvatcode,
pi_dbl_amountexcl => l_dbl_invdeladdservexcl,
pi_dbl_amountincl => l_dbl_invdeladdserv --Excl
,
pi_dbl_vat => l_dbl_invdeladdservvat);
END IF;
--
END IF;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invaddserv
THEN
-- Is The Invoice Vat-Obliged?
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'ADDSERV' || l_str_invdelassemblyvatcode,
pi_dbl_amountexcl => l_dbl_invaddservexcl,
pi_dbl_amountincl => l_dbl_invaddserv,
pi_dbl_vat => l_dbl_invaddservvat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'ADDSERV' || l_str_invdelassemblyvatcode,
pi_dbl_amountexcl => l_dbl_invaddservexcl,
pi_dbl_amountincl => l_dbl_invaddserv --Excl
,
pi_dbl_vat => l_dbl_invaddservvat);
END IF;
--
END IF;
END IF; -- ... Otherwise Just Move On To The Next Special Article
--
-- ==========================================================================
-- Description : Calculates The Special Article 1 Per Delivery And Per
-- Invoice And Inserts Those Values Into Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcspecart1_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcSpecArt1_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_spec1artno invoice_row_v.art_no%TYPE;
--
l_bol_delspecart1 BOOLEAN := FALSE;
l_bol_invspecart1 BOOLEAN := FALSE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts For Special Article 1 Per Delivery ...
l_dbl_invdelspecart1 invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelspecart1excl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelspecart1vat invoice_row_v.sold_amount%TYPE := 0;
l_str_invdelspecart1vatcode invoice_row_v.row_vat_code%TYPE
DEFAULT NULL;
-- ... Or Invoice
l_dbl_invspecart1 invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invspecart1excl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invspecart1vat invoice_row_v.sold_amount%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcspecart1_begin;
--
-- Fetch Articlenumber For Special Article 1
l_str_spec1artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'SPECART1');
util_01_pck.log_prc (
pi_str_msg => 'Special Article 1 is ' || l_str_spec1artno);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
IF l_rec_invrowsdel.art_no = l_str_spec1artno
THEN
-- Accumulate Speical Article 1 For This Delivery
l_dbl_invdelspecart1 :=
l_dbl_invdelspecart1
+ l_rec_invrowsdel.sold_amount;
l_dbl_invdelspecart1excl :=
l_dbl_invdelspecart1excl
+ l_rec_invrowsdel.sold_amount_excl;
l_dbl_invdelspecart1vat :=
l_dbl_invdelspecart1 - l_dbl_invdelspecart1excl;
l_str_invdelspecart1vatcode :=
l_rec_invrowsdel.row_vat_code;
l_bol_delspecart1 := TRUE;
l_bol_invspecart1 := TRUE;
END IF;
END LOOP articles;
-- Write To Invoice_sums_t
IF l_bol_delspecart1
THEN
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'SPECART1DEL' || l_str_invdelspecart1vatcode,
pi_dbl_amountexcl => l_dbl_invdelspecart1excl,
pi_dbl_amountincl => l_dbl_invdelspecart1,
pi_dbl_vat => l_dbl_invdelspecart1vat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'SPECART1DEL' || l_str_invdelspecart1vatcode,
pi_dbl_amountexcl => l_dbl_invdelspecart1excl,
pi_dbl_amountincl => l_dbl_invdelspecart1 --Excl
,
pi_dbl_vat => l_dbl_invdelspecart1vat);
END IF;
END IF;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invspecart1
THEN
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'SPECART1' || l_str_invdelspecart1vatcode,
pi_dbl_amountexcl => l_dbl_invspecart1excl,
pi_dbl_amountincl => l_dbl_invspecart1,
pi_dbl_vat => l_dbl_invspecart1vat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'SPECART1' || l_str_invdelspecart1vatcode,
pi_dbl_amountexcl => l_dbl_invspecart1excl,
pi_dbl_amountincl => l_dbl_invspecart1 --Excl
,
pi_dbl_vat => l_dbl_invspecart1vat);
END IF;
END IF;
END IF; -- ... Otherwise Just Move On To The Next Special Article
--
-- ==========================================================================
-- Description : Calculates The Special Article 2 Per Delivery And Per
-- Invoice And Inserts Those Values Into Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcspecart2_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcSpecArt2_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_spec2artno invoice_row_v.art_no%TYPE;
--
l_bol_delspecart2 BOOLEAN := FALSE;
l_bol_invspecart2 BOOLEAN := FALSE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts For Special Article 1 Per Delivery ...
l_dbl_invdelspecart2 invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelspecart2excl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelspecart2vat invoice_row_v.sold_amount%TYPE := 0;
l_str_invdelspecart2vatcode invoice_row_v.row_vat_code%TYPE
DEFAULT NULL;
-- ... Or Invoice
l_dbl_invspecart2 invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invspecart2excl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invspecart2vat invoice_row_v.sold_amount%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcspecart2_begin;
--
-- Fetch Articlenumber For Special Article 2
l_str_spec2artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'SPECART2');
util_01_pck.log_prc (
pi_str_msg => 'Special Article 2 is ' || l_str_spec2artno);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
IF l_rec_invrowsdel.art_no = l_str_spec2artno
THEN
-- Accumulate Speical Article 1 For This Delivery
l_dbl_invdelspecart2 :=
l_dbl_invdelspecart2
+ l_rec_invrowsdel.sold_amount;
l_dbl_invdelspecart2excl :=
l_dbl_invdelspecart2excl
+ l_rec_invrowsdel.sold_amount_excl;
l_dbl_invdelspecart2vat :=
l_dbl_invdelspecart2 - l_dbl_invdelspecart2excl;
l_str_invdelspecart2vatcode :=
l_rec_invrowsdel.row_vat_code;
l_bol_delspecart2 := TRUE;
l_bol_invspecart2 := TRUE;
END IF;
END LOOP articles;
-- Write To Invoice_sums_t
IF l_bol_delspecart2
THEN
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'SPECART2DEL' || l_str_invdelspecart2vatcode,
pi_dbl_amountexcl => l_dbl_invdelspecart2excl,
pi_dbl_amountincl => l_dbl_invdelspecart2,
pi_dbl_vat => l_dbl_invdelspecart2vat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'SPECART2DEL' || l_str_invdelspecart2vatcode,
pi_dbl_amountexcl => l_dbl_invdelspecart2excl,
pi_dbl_amountincl => l_dbl_invdelspecart2 --Excl
,
pi_dbl_vat => l_dbl_invdelspecart2vat);
END IF;
END IF;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invspecart2
THEN
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'SPECART2' || l_str_invdelspecart2vatcode,
pi_dbl_amountexcl => l_dbl_invspecart2excl,
pi_dbl_amountincl => l_dbl_invspecart2,
pi_dbl_vat => l_dbl_invspecart2vat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'SPECART2' || l_str_invdelspecart2vatcode,
pi_dbl_amountexcl => l_dbl_invspecart2excl,
pi_dbl_amountincl => l_dbl_invspecart2 --Excl
,
pi_dbl_vat => l_dbl_invspecart2vat);
END IF;
END IF;
END IF; -- ... Otherwise Just Move On To The Next Special Article
--
-- ==========================================================================
-- Description : Calculates The Special Article 3 Per Delivery And Per
-- Invoice And Inserts Those Values Into Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcspecart3_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcSpecArt3_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_spec3artno invoice_row_v.art_no%TYPE;
--
l_bol_delspecart3 BOOLEAN := FALSE;
l_bol_invspecart3 BOOLEAN := FALSE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts For Special Article 3 Per Delivery ...
l_dbl_invdelspecart3 invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelspecart3excl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelspecart3vat invoice_row_v.sold_amount%TYPE := 0;
l_str_invdelspecart3vatcode invoice_row_v.row_vat_code%TYPE
DEFAULT NULL;
-- ... Or Invoice
l_dbl_invspecart3 invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invspecart3excl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invspecart3vat invoice_row_v.sold_amount%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcspecart3_begin;
--
-- Fetch Articlenumber For Special Article 3
l_str_spec3artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'SPECART3');
util_01_pck.log_prc (
pi_str_msg => 'Special Article 3 is ' || l_str_spec3artno);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
IF l_rec_invrowsdel.art_no = l_str_spec3artno
THEN
-- Accumulate Speical Article 3 For This Delivery
l_dbl_invdelspecart3 :=
l_dbl_invdelspecart3
+ l_rec_invrowsdel.sold_amount;
l_dbl_invdelspecart3excl :=
l_dbl_invdelspecart3excl
+ l_rec_invrowsdel.sold_amount_excl;
l_dbl_invdelspecart3vat :=
l_dbl_invdelspecart3 - l_dbl_invdelspecart3excl;
l_str_invdelspecart3vatcode :=
l_rec_invrowsdel.row_vat_code;
l_bol_delspecart3 := TRUE;
l_bol_invspecart3 := TRUE;
END IF;
END LOOP articles;
-- Write To Invoice_sums_t
IF l_bol_delspecart3
THEN
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'SPECART3DEL' || l_str_invdelspecart3vatcode,
pi_dbl_amountexcl => l_dbl_invdelspecart3excl,
pi_dbl_amountincl => l_dbl_invdelspecart3,
pi_dbl_vat => l_dbl_invdelspecart3vat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'SPECART3DEL' || l_str_invdelspecart3vatcode,
pi_dbl_amountexcl => l_dbl_invdelspecart3excl,
pi_dbl_amountincl => l_dbl_invdelspecart3 --Excl
,
pi_dbl_vat => l_dbl_invdelspecart3vat);
END IF;
END IF;
-- Accumulate Special Article 3 For This Invoice
l_dbl_invspecart3 := l_dbl_invspecart3 + l_dbl_invdelspecart3;
l_dbl_invspecart3excl :=
l_dbl_invspecart3excl + l_dbl_invdelspecart3excl;
l_dbl_invspecart3vat :=
l_dbl_invspecart3 - l_dbl_invspecart3excl;
-- Reset Per-Delivery Variables
l_dbl_invdelspecart3 := 0;
l_dbl_invdelspecart3excl := 0;
l_bol_delspecart3 := FALSE;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invspecart3
THEN
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'SPECART3' || l_str_invdelspecart3vatcode,
pi_dbl_amountexcl => l_dbl_invspecart3excl,
pi_dbl_amountincl => l_dbl_invspecart3,
pi_dbl_vat => l_dbl_invspecart3vat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'SPECART3' || l_str_invdelspecart3vatcode,
pi_dbl_amountexcl => l_dbl_invspecart3excl,
pi_dbl_amountincl => l_dbl_invspecart3 --Excl
,
pi_dbl_vat => l_dbl_invspecart3vat);
END IF;
END IF;
END IF; -- ... Otherwise Just Move On To The Next Special Article
--
-- ==========================================================================
-- Description : Calculates The Special Article 4 Per Delivery And Per
-- Invoice And Inserts Those Values Into Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcspecart4_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcSpecArt4_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_spec4artno invoice_row_v.art_no%TYPE;
--
l_bol_delspecart4 BOOLEAN := FALSE;
l_bol_invspecart4 BOOLEAN := FALSE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts For Special Article 4 Per Delivery ...
l_dbl_invdelspecart4 invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelspecart4excl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invdelspecart4vat invoice_row_v.sold_amount%TYPE := 0;
l_str_invdelspecart4vatcode invoice_row_v.row_vat_code%TYPE
DEFAULT NULL;
-- ... Or Invoice
l_dbl_invspecart4 invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invspecart4excl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invspecart4vat invoice_row_v.sold_amount%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcspecart4_begin;
--
-- Fetch Articlenumber For Special Article 3
l_str_spec4artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'SPECART4');
util_01_pck.log_prc (
pi_str_msg => 'Special Article 4 is ' || l_str_spec4artno);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
IF l_rec_invrowsdel.art_no = l_str_spec4artno
THEN
-- Accumulate Speical Article 4 For This Delivery
l_dbl_invdelspecart4 :=
l_dbl_invdelspecart4
+ l_rec_invrowsdel.sold_amount;
l_dbl_invdelspecart4excl :=
l_dbl_invdelspecart4excl
+ l_rec_invrowsdel.sold_amount_excl;
l_dbl_invdelspecart4vat :=
l_dbl_invdelspecart4 - l_dbl_invdelspecart4excl;
l_str_invdelspecart4vatcode :=
l_rec_invrowsdel.row_vat_code;
l_bol_delspecart4 := TRUE;
l_bol_invspecart4 := TRUE;
END IF;
END LOOP articles;
-- Write To Invoice_sums_t
IF l_bol_delspecart4
THEN
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'SPECART4DEL' || l_str_invdelspecart4vatcode,
pi_dbl_amountexcl => l_dbl_invdelspecart4excl,
pi_dbl_amountincl => l_dbl_invdelspecart4,
pi_dbl_vat => l_dbl_invdelspecart4vat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode =>
'SPECART4DEL' || l_str_invdelspecart4vatcode,
pi_dbl_amountexcl => l_dbl_invdelspecart4excl,
pi_dbl_amountincl => l_dbl_invdelspecart4 --Excl
,
pi_dbl_vat => l_dbl_invdelspecart4vat);
END IF;
END IF;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invspecart4
THEN
IF l_bol_vatobliged
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'SPECART4' || l_str_invdelspecart4vatcode,
pi_dbl_amountexcl => l_dbl_invspecart4excl,
pi_dbl_amountincl => l_dbl_invspecart4,
pi_dbl_vat => l_dbl_invspecart4vat);
ELSE
-- Invoice Is Vat Free
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'SPECART4' || l_str_invdelspecart4vatcode,
pi_dbl_amountexcl => l_dbl_invspecart4excl,
pi_dbl_amountincl => l_dbl_invspecart4 --Excl
,
pi_dbl_vat => l_dbl_invspecart4vat);
END IF;
END IF;
END IF; -- ... Otherwise Just Move On To The Next Special Article
--
-- ==========================================================================
-- Description : Calculates The Goods Per Delivery And Per Invoice
-- And Inserts Those Values Into Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcgoods_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcGoods_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_discartno invoice_row_v.art_no%TYPE;
l_str_freightartno invoice_row_v.art_no%TYPE;
l_str_addservartno invoice_row_v.art_no%TYPE;
l_str_assemblyartno invoice_row_v.art_no%TYPE;
l_str_transportartno invoice_row_v.art_no%TYPE;
l_str_spec1artno invoice_row_v.art_no%TYPE;
l_str_spec2artno invoice_row_v.art_no%TYPE;
l_str_spec3artno invoice_row_v.art_no%TYPE;
l_str_spec4artno invoice_row_v.art_no%TYPE;
l_str_advartno invoice_row_v.art_no%TYPE;
l_str_artnofreight1 invoice_row_v.art_no%TYPE;
l_str_artnofreight2 invoice_row_v.art_no%TYPE;
l_str_artnofreight3 invoice_row_v.art_no%TYPE;
l_str_artnofreight4 invoice_row_v.art_no%TYPE;
--
l_bol_delgoods BOOLEAN := FALSE;
l_bol_invgoods BOOLEAN := FALSE;
--RIMS-230 TDS for INDIA
l_str_tdsartno invoice_row_v.art_no%TYPE;
--
-- Matrix For Goods Per Delivery And Vatcode
TYPE typ_rec_goodsinfodel IS RECORD
(
vat_code invoice_row_v.row_vat_code%TYPE,
vat_rate invoice_row_v.row_vat%TYPE,
amount_incl invoice_row_v.sold_amount%TYPE,
amount_excl invoice_row_v.sold_amount_excl%TYPE,
amount_vat invoice_row_v.sold_amount%TYPE,
delivery invoice_row_v.cusdel_no%TYPE
);
l_tab_goodsinfodel typ_tab_goodsinfodel;
l_int_goodsinfodel INTEGER := 0;
l_bol_goodsdelnotexists BOOLEAN := TRUE;
--
-- Matrix For Goods Per Vatcode
TYPE typ_rec_goodsinfo IS RECORD
(
vat_code invoice_row_v.row_vat_code%TYPE,
vat_rate invoice_row_v.row_vat%TYPE,
amount_incl invoice_row_v.sold_amount%TYPE,
amount_excl invoice_row_v.sold_amount_excl%TYPE,
amount_vat invoice_row_v.sold_amount%TYPE
);
l_tab_goodsinfo typ_tab_goodsinfo;
l_int_goodsinfo INTEGER := 0;
l_bol_goodsnotexists BOOLEAN := TRUE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts For Goods Per Delivery ...
l_dbl_delgoods invoice_row_v.sold_amount%TYPE := 0;
l_dbl_delgoodsexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_delgoodsvat invoice_row_v.sold_amount%TYPE := 0;
-- ... Or Invoice
l_dbl_invgoods invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invgoodsexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invgoodsvat invoice_row_v.sold_amount%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcgoods_begin;
--
-- What Special Articles Do Exist?
l_str_freightartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'FREIGHT');
l_str_discartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'DISCOUNT');
l_str_addservartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'ADDSERV');
l_str_assemblyartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'ASSEMBLY');
l_str_transportartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'TRANSPORT');
l_str_spec1artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'SPECART1');
l_str_spec2artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'SPECART2');
l_str_spec3artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'SPECART3');
l_str_spec4artno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'SPECART4');
l_str_advartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'PIA');
--RIMS-230 TDS for INDIA
l_str_tdsartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'TDS');
l_str_artnofreight1 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'FREIGHT1');
l_str_artnofreight2 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'FREIGHT2');
l_str_artnofreight3 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'FREIGHT3');
l_str_artnofreight4 :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_functionality => 'FREIGHT4');
-- Dbms_output.Put_line('0');
-- Fetch All Different Deliveries For This Invoice
util_01_pck.log_prc (pi_str_msg => 'Calculate Goods Sum');
invo_07_pck.getinvrowsdel_prc (pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
po_ref_cur => l_cur_invdel);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
IF l_rec_invrowsdel.art_no <>
l_str_addservartno
AND l_rec_invrowsdel.art_no <>
l_str_discartno
AND l_rec_invrowsdel.art_no <>
l_str_freightartno
AND l_rec_invrowsdel.art_no <>
l_str_assemblyartno
AND l_rec_invrowsdel.art_no <>
l_str_transportartno
AND l_rec_invrowsdel.art_no <>
l_str_spec1artno
AND l_rec_invrowsdel.art_no <>
l_str_spec2artno
AND l_rec_invrowsdel.art_no <>
l_str_spec3artno
AND -- 0036 Alsc
l_rec_invrowsdel.art_no <> l_str_spec4artno
AND -- 0036 Alsc
l_rec_invrowsdel.art_no <> l_str_advartno
--RIMS-230 TDS for INDIA
AND l_rec_invrowsdel.art_no <> l_str_tdsartno
AND l_rec_invrowsdel.art_no <> l_str_artnofreight1
AND l_rec_invrowsdel.art_no <> l_str_artnofreight2
AND l_rec_invrowsdel.art_no <> l_str_artnofreight3
AND l_rec_invrowsdel.art_no <> l_str_artnofreight4
THEN
-- Find This Vatcode In The Matrix
l_int_goodsinfodel := NVL (l_tab_goodsinfodel.LAST, 0);
-- Dbms_output.Put_line('2');
-- If It Doesn'T Already Exist There
-- New Vatcode Is Added To The Vatcode-Matrix
IF l_bol_goodsdelnotexists
THEN
-- Dbms_output.Put_line('New Vatcode! Adding To Matrix '||
L_rec_invrowsdel.Row_vat_code);
l_tab_goodsinfodel (l_int_goodsinfodel + 1).vat_code :=
l_rec_invrowsdel.row_vat_code;
l_tab_goodsinfodel (l_int_goodsinfodel + 1).vat_rate :=
l_rec_invrowsdel.row_vat;
l_tab_goodsinfodel (l_int_goodsinfodel + 1).delivery :=
l_rec_invrowsdel.cusdel_no;
l_tab_goodsinfodel (l_int_goodsinfodel + 1).amount_incl :=
0;
l_tab_goodsinfodel (l_int_goodsinfodel + 1).amount_excl :=
0;
l_tab_goodsinfodel (l_int_goodsinfodel + 1).amount_vat :=
0;
END IF;
--
-- Dbms_output.Put_line('3');
-- Now Accumulate Goods For This Delivery
l_int_goodsinfodel := NVL (l_tab_goodsinfodel.LAST, 0);
l_tab_goodsinfodel (l_int_indextable).amount_excl :=
l_tab_goodsinfodel (l_int_indextable).amount_excl
+ l_rec_invrowsdel.sold_amount_excl;
l_tab_goodsinfodel (l_int_indextable).amount_vat :=
l_tab_goodsinfodel (l_int_indextable).amount_incl
- l_tab_goodsinfodel
(l_int_indextable).amount_excl;
-- Dbms_output.Put_line('-------------');
-- Dbms_output.Put_line('Goods Gross: '||
L_tab_goodsinfodel(L_int_indextable).Amount_incl);
-- Dbms_output.Put_line('Goods Net: '||
L_tab_goodsinfodel(L_int_indextable).Amount_excl);
-- Dbms_output.Put_line('Goods Vat: '||
L_tab_goodsinfodel(L_int_indextable).Amount_vat);
END IF;
END LOOP;
--
l_bol_delgoods := TRUE;
l_bol_invgoods := TRUE;
END IF;
END LOOP articles;
-- Dbms_output.Put_line('After Articles');
--
-- Write To Invoice_sums_t Goods Per Delivery And Vatcode
IF l_bol_delgoods
THEN
-- Dbms_output.Put_line('Write Goods For This Delivery To
Invoice_sums_t');
--
l_int_goodsinfodel := NVL (l_tab_goodsinfodel.LAST, 0);
--
FOR l_int_indextable2 IN 1 .. l_int_goodsinfo
LOOP
-- Dbms_output.Put_line('In Inner Loop');
IF (l_tab_goodsinfodel (l_int_indextable1).vat_code =
l_tab_goodsinfo (l_int_indextable2).vat_code)
THEN
--
Dbms_output.Put_line('-----------------------------------------------');
-- Dbms_output.Put_line('Accumulating For Vatcode '||
L_tab_goodsinfodel(L_int_indextable1).Vat_code||
-- ' Over Delivery '||
L_tab_goodsinfodel(L_int_indextable1).Delivery);
--
-- Accumulate Goods Amounts
l_tab_goodsinfo (l_int_indextable2).amount_incl :=
l_tab_goodsinfo (l_int_indextable2).amount_incl
+ l_tab_goodsinfodel (l_int_indextable1).amount_incl;
--
l_tab_goodsinfo (l_int_indextable2).amount_excl :=
l_tab_goodsinfo (l_int_indextable2).amount_excl
+ l_tab_goodsinfodel (l_int_indextable1).amount_excl;
--
l_tab_goodsinfo (l_int_indextable2).amount_vat :=
l_tab_goodsinfo (l_int_indextable2).amount_vat
+ l_tab_goodsinfodel (l_int_indextable1).amount_vat;
-- Dbms_output.Put_line('Amountincl: '||
L_tab_goodsinfo(L_int_indextable2).Amount_incl);
-- Dbms_output.Put_line('Amountexcl: '||
L_tab_goodsinfo(L_int_indextable2).Amount_excl);
-- Dbms_output.Put_line('Amountvat : '||
L_tab_goodsinfo(L_int_indextable2).Amount_vat);
--
l_bol_goodsnotexists := FALSE;
END IF;
END LOOP;
--
-- Insert A Line For This Vatcode
IF l_bol_goodsnotexists
THEN
--
Dbms_output.Put_line('-----------------------------------------------');
-- Dbms_output.Put_line('First Goodsdelivery For This Vatcode!');
l_tab_goodsinfo (l_int_goodsinfo + 1).vat_code :=
l_tab_goodsinfodel (l_int_indextable1).vat_code;
l_tab_goodsinfo (l_int_goodsinfo + 1).vat_rate :=
l_tab_goodsinfodel (l_int_indextable1).vat_rate;
l_tab_goodsinfo (l_int_goodsinfo + 1).amount_incl :=
l_tab_goodsinfodel (l_int_indextable1).amount_incl;
l_tab_goodsinfo (l_int_goodsinfo + 1).amount_excl :=
l_tab_goodsinfodel (l_int_indextable1).amount_excl;
l_tab_goodsinfo (l_int_goodsinfo + 1).amount_vat :=
l_tab_goodsinfodel (l_int_indextable1).amount_vat;
-- Dbms_output.Put_line('Amountincl: '||L_tab_goodsinfo(L_int_goodsinfo
+ 1).Amount_incl);
-- Dbms_output.Put_line('Amountexcl: '||L_tab_goodsinfo(L_int_goodsinfo
+ 1).Amount_excl);
-- Dbms_output.Put_line('Amountvat : '||L_tab_goodsinfo(L_int_goodsinfo
+ 1).Amount_vat);
END IF;
END LOOP;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invgoods
THEN
-- Dbms_output.Put_line('Now Write To Table');
l_int_goodsinfo := NVL (l_tab_goodsinfo.LAST, 0);
--
-- ==========================================================================
-- Description : Get Document Type (Invoice Or Credit Note) Depending On
-- Sign For 'Goods'
-- Author : Andreas Theimer
-- ==========================================================================
PROCEDURE setinvoicetype_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'SetInvoiceType_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_criteria VARCHAR2 (500) := NULL;
l_cur_invsumsvat invo_sums_pck.typ_cur;
l_rec_invsumsvat invoice_sums_v%ROWTYPE;
l_dbl_goodsamountincl invoice_row_v.sold_amount%TYPE := 0;
l_str_invtype invoice_header_t.inv_type%TYPE := 'D';
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT setinvoicetype_begin;
--
-- Get Document Type (Invoice Or Credit Note) Depending On Sign For 'Goods'
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = ''0'' '
|| ' AND SUBSTR(sum_code,1,5) = ''GOODS'' ';
invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invsumsvat);
LOOP
FETCH l_cur_invsumsvat INTO l_rec_invsumsvat;
--
IF l_dbl_goodsamountincl >= 0
THEN
l_str_invtype := 'D';
ELSE
l_str_invtype := 'C';
END IF;
--
CLOSE l_cur_invsumsvat;
l_rec_invhead.inv_type := l_str_invtype;
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
EXCEPTION
-- Novg 04.01.2006
-- When No_data_found Then
-- Null;
WHEN OTHERS
THEN
-- Dbms_output.Put_line('Setinvoicetype_begin');
ROLLBACK TO setinvoicetype_begin;
l_bol_success := FALSE; -- <0057>
-- Write To Eventlog, That Problem Occurred In This Procedure
util_01_pck.log_prc (
pi_str_msg =>
c_str_prcname || ' ran on error for : ' || pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
LOOP
FETCH l_cur_isum INTO l_rec_isum;
--
IF SUBSTR (l_rec_isum.sum_code, 1, 5) = 'GOODS'
THEN
IF l_bol_vatobliged
THEN
l_dbl_invgoodsamt :=
l_dbl_invgoodsamt + ABS (l_rec_isum.amount_incl);
ELSE
l_dbl_invgoodsamt :=
l_dbl_invgoodsamt + ABS (l_rec_isum.amount_excl);
END IF;
ELSIF SUBSTR (l_rec_isum.sum_code, 1, 8) = 'DISCOUNT'
THEN
-- For Non-Vatobliged Invoices Incl And Excl Are The Same Anyway
l_dbl_invdiscamt :=
l_dbl_invdiscamt + ABS (l_rec_isum.amount_incl);
ELSIF SUBSTR (l_rec_isum.sum_code, 1, 6) = 'ECOFEE'
THEN
IF l_bol_vatobliged
THEN
l_dbl_invecoamt :=
l_dbl_invecoamt
+ ABS (NVL (l_rec_isum.amount_incl, 0));
ELSE
l_dbl_invecoamt :=
l_dbl_invecoamt
+ ABS (NVL (l_rec_isum.amount_excl, 0));
END IF;
END IF;
--
END LOOP;
-- Novg 04.01.2006
CLOSE l_cur_isum;
--
-- Calculate The Discount-Percentage Per Invoice
IF (l_dbl_invdiscamt IS NOT NULL)
AND (l_dbl_invdiscamt <> 0)
AND (l_dbl_invgoodsamt <> 0)
THEN
l_dbl_invdiscproc :=
ROUND (
( l_dbl_invdiscamt
/ (l_dbl_invgoodsamt - NVL (l_dbl_invecoamt, 0))
* 100),
1);
ELSE
l_dbl_invdiscproc := 0;
END IF;
--
-- ==========================================================================
-- Description : Calculates The Advance Payments Per Delivery And Per Invoice
-- And Inserts Those Values Into Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcadvpay_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcAdvPay_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_advartno invoice_row_v.art_no%TYPE;
l_cur_invsumsvat invo_sums_pck.typ_cur;
l_rec_invsumsvat invoice_sums_v%ROWTYPE;
l_dbl_goodsamountincl invoice_sums_v.amount_incl%TYPE := 0;
l_bol_debitnote BOOLEAN := FALSE;
--
l_bol_deladvpay BOOLEAN := FALSE;
l_bol_invadvpay BOOLEAN := FALSE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts For Advance Payments Per Delivery ...
l_dbl_deladvpay invoice_row_v.sold_amount%TYPE := 0;
-- ... Or Invoice
l_dbl_invadvpay invoice_row_v.sold_amount%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcadvpay_begin;
--
-- Fetch Articlenumber For Article 'Advance Payment'
l_str_advartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'PIA');
util_01_pck.log_prc (
pi_str_msg => 'Advance Payment Article is ' || l_str_advartno);
LOOP
FETCH l_cur_invsumsvat INTO l_rec_invsumsvat;
-- Novg 04.01.2006
CLOSE l_cur_invsumsvat;
--
IF l_dbl_goodsamountincl > 0
THEN
l_bol_debitnote := TRUE;
ELSE
l_bol_debitnote := FALSE;
END IF;
--
-- Fetch All Different Deliveries For This Invoice
invo_07_pck.getinvrowsdel_prc (
pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
po_ref_cur => l_cur_invdel);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
IF l_rec_invrowsdel.art_no = l_str_advartno
THEN
-- Accumulate Advance Payments For This Delivery
IF l_bol_debitnote
THEN
l_dbl_deladvpay :=
l_dbl_deladvpay
+ (-1) * ABS (l_rec_invrowsdel.sold_amount);
ELSE
l_dbl_deladvpay :=
l_dbl_deladvpay
+ ABS (l_rec_invrowsdel.sold_amount);
END IF;
l_bol_deladvpay := TRUE;
l_bol_invadvpay := TRUE;
END IF;
END LOOP articles;
-- Write To Invoice_sums_t
IF l_bol_deladvpay
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode => 'PIADEL',
pi_dbl_amountexcl => l_dbl_deladvpay,
pi_dbl_amountincl => l_dbl_deladvpay,
pi_dbl_vat => 0);
END IF;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invadvpay
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode => 'PIA',
pi_dbl_amountexcl => l_dbl_invadvpay,
pi_dbl_amountincl => l_dbl_invadvpay,
pi_dbl_vat => 0);
END IF;
END IF; -- ... Otherwise Just Move On To The Next Special Article
--
-- ==========================================================================
-- Description : Calculates The TDS Payments Per Delivery And Per Invoice
-- And Inserts Those Values Into Table Invoice_sums_t
-- Author : Sobha5
-- ==========================================================================
--RIMS-230 TDS for INDIA
PROCEDURE calctdspay_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcPay_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_advartno invoice_row_v.art_no%TYPE;
l_cur_invsumsvat invo_sums_pck.typ_cur;
l_rec_invsumsvat invoice_sums_v%ROWTYPE;
l_dbl_goodsamountincl invoice_sums_v.amount_incl%TYPE := 0;
l_bol_debitnote BOOLEAN := FALSE;
--
l_bol_deltdspay BOOLEAN := FALSE;
l_bol_invtdspay BOOLEAN := FALSE;
--
l_cur_invdel invo_invr_pck.typ_cur;
l_cur_invrowsdel invo_invr_pck.typ_cur;
l_rec_invrowsdel invoice_row_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_cusdelno invoice_row_v.cusdel_no%TYPE;
l_str_criteria VARCHAR2 (500) := NULL;
--
-- Amounts For Advance Payments Per Delivery ...
--RIMS-230 TDS forINDIA
l_dbl_deltdspay invoice_row_v.sold_amount%TYPE := 0;
-- ... Or Invoice
--RIMS-230 TDS for INDIA
l_dbl_invtdspay invoice_row_v.sold_amount%TYPE := 0;
l_str_tdsartno invoice_row_v.art_no%TYPE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calctdspay_begin;
--
-- Fetch Articlenumber For Article 'Advance Payment'
l_str_tdsartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'TDS');
util_01_pck.log_prc (
pi_str_msg => 'TDS Payment Article is ' || l_str_tdsartno);
LOOP
FETCH l_cur_invsumsvat INTO l_rec_invsumsvat;
-- Novg 04.01.2006
CLOSE l_cur_invsumsvat;
--
IF l_dbl_goodsamountincl > 0
THEN
l_bol_debitnote := TRUE;
ELSE
l_bol_debitnote := FALSE;
END IF;
--
-- Fetch All Different Deliveries For This Invoice
invo_07_pck.getinvrowsdel_prc (
pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
po_ref_cur => l_cur_invdel);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
IF l_rec_invrowsdel.art_no = l_str_tdsartno
THEN
-- Accumulate Advance Payments For This Delivery
IF l_bol_debitnote
THEN
l_dbl_deltdspay :=
l_dbl_deltdspay
+ (-1) * ABS (l_rec_invrowsdel.sold_amount);
ELSE
l_dbl_deltdspay :=
l_dbl_deltdspay
+ ABS (l_rec_invrowsdel.sold_amount);
END IF;
l_bol_deltdspay := TRUE;
l_bol_invtdspay := TRUE;
END IF;
END LOOP articles;
-- Write To Invoice_sums_t
IF l_bol_deltdspay
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode => 'TDSDEL',
pi_dbl_amountexcl => l_dbl_deltdspay,
pi_dbl_amountincl => l_dbl_deltdspay,
pi_dbl_vat => 0);
END IF;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invtdspay
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode => 'TDS',
pi_dbl_amountexcl => l_dbl_invtdspay,
pi_dbl_amountincl => l_dbl_invtdspay,
pi_dbl_vat => 0);
END IF;
END IF; -- ... Otherwise Just Move On To The Next Special Article
--
-- ==========================================================================
-- Description : Calculates The Administrationcost - In Case It Exists - Per
-- Invoice And Inserts This Values Into Table Invoice_sums_t
-- Author : Alexandra Schuetz
-- Changed : Andreas Theimer, 2005-09-12, Ignore Flag Inv_adm_cost_fr.
-- ==========================================================================
PROCEDURE calcadmcost_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
TYPE typ_tab_vatrates IS TABLE OF rims_vat_v%ROWTYPE
INDEX BY BINARY_INTEGER;
-- Does There Exists Any Invoicefee In The Country And For This Customer?
/* According To Jeri And Mecl Ignore Flag Inv_adm_cost_fr
Athe 2005-09-23
If L_rec_acct.Inv_fee = 'Y' And
--L_rec_invhead.Inv_type = 'D' And
L_str_invtype = 'D' And
Invo_15_pck.Foundsart_fct(Pi_str_compcode => Pi_str_compcode
,Pi_str_functionality => 'Admcost') And
L_rec_invhead.Inv_adm_cost_fr = 'N' Then */
IF l_rec_acct.inv_fee = 'Y'
AND l_rec_invhead.inv_type = 'D'
AND invo_15_pck.foundsart_fct (
pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'ADMCOST')
THEN
-- ... Get The Invoicefee-Amount (Net Amount)
mtb_01_pck.getinvoicefee_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invfeecode => l_rec_acct.inv_fee_code,
po_rec_invoicefee => l_rec_invoicefee,
po_bol_found => l_bol_invadmcost);
-- If There Is Vat On The Invoicefee, Get The Vatcode
invo_15_pck.getsart_prc (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'ADMCOST',
po_rec_sart => l_rec_sart);
--
IF l_rec_sart.vat_code IS NOT NULL
THEN
-- Get The Vatrate For Vatcode
l_str_stmt :=
'SELECT * FROM RIMS_VAT_V RV1'
|| ' WHERE RV1.comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND to_char(RV1.start_date,''YYYYMMDD'') = (SELECT
max(to_char(RV2.start_date,''YYYYMMDD''))'
|| ' FROM RIMS_VAT_V RV2'
|| ' WHERE RV2.comp_code = RV1.comp_code'
|| ' AND RV2.vat_code = RV1.vat_code'
|| ' AND RV2.start_date <= TO_DATE('''
|| TO_CHAR (l_rec_invhead.sales_date, 'YYYYMMDD')
|| ''',''YYYYMMDD''))';
--
LOOP
FETCH l_crs_vatrates INTO l_rec_rvat;
CLOSE l_crs_vatrates;
--
-- ==========================================================================
-- Description : Calculates The Proper Duedate For This Invoice And Customer
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcduedate_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcDueDate_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_bol_paytermfound BOOLEAN := FALSE;
--
l_rec_payterms pay_terms_v%ROWTYPE;
l_rec_globpar acct_global_parameter_v%ROWTYPE;
l_tab_induedate glob_01_pck.typ_condfunctmatrix;
l_tab_outduedate glob_01_pck.typ_condfunctmatrix;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
--
l_dat_duedate invoice_header_v.inv_due_date%TYPE;
-- <0039> Novg
l_bol_foundcutypeb BOOLEAN;
--
l_tab_condfunctmatrix cfuncs_01_pck.typ_condfunctmatrix;
l_bol_executed BOOLEAN := FALSE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcduedate_begin;
--
IF l_rec_invhead.inv_type = 'C'
THEN
-- Creditnotes Have Immediate Duedate
IF cfuncs_02_pck.condfunctistrue_fct ( -- Novg <0056>
pi_str_functionality => 'INVDATEREGDATE',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
-- Sobha5:
-- Reg_date Should Be Present Now And Can Be Used Directly As
Due_date
-- Otherwise The Reg_date Must Be Fetched From I_invoice% Views Via
-- Invo_06_pck.Getinvregistrationdate_fct
IF l_rec_invhead.reg_date IS NOT NULL
THEN
l_rec_invhead.inv_due_date := l_rec_invhead.reg_date;
ELSE
l_rec_invhead.inv_due_date :=
invo_06_pck.getinvregistrationdate_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
END IF;
ELSE
l_rec_invhead.inv_due_date := l_rec_invhead.inv_date;
END IF;
ELSE
-- For Debitnotes Retrieve The Pay-Term-Days And ...
--
mtb_01_pck.getpayterm_prc (
pi_str_compcode => pi_str_compcode,
pi_str_paytermcode => l_rec_acct.pay_term_code,
po_rec_payterms => l_rec_payterms,
po_bol_found => l_bol_paytermfound);
--
-- New Conditional Functionality Handling
-- Athe 2005-06-01
-- Check If There Is A Conditional Functionality
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'DUEDATE',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
-- Get The Invoice Date
util_01_pck.log_prc (pi_str_msg => 'Get Duedate');
-- For Italy Duedate Is Set To The Last Day Of The Following Month
--
l_tab_condfunctmatrix :=
cfuncs_02_pck.initcondfunctmatrix_fct;
-- Set The First In Parameter
l_tab_condfunctmatrix (1).dat_value := l_rec_invhead.inv_date;
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'DUEDATE',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode,
pio_tab_condfunctmatrix => l_tab_condfunctmatrix);
--
IF l_bol_executed
THEN
-- Get The Out Parameter
l_rec_invhead.inv_due_date :=
l_tab_condfunctmatrix (2).dat_value;
ELSE
appl_01_pck.raise_prc (
pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'DUEDATE',
pi_bol_raise => TRUE);
END IF;
ELSIF cfuncs_01_pck.foundcondfuncs_fct ( -- <0039> Novg
pi_str_functionality => 'DUEDATESPAIN',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
-- Get The Invoice Date
util_01_pck.log_prc (
pi_str_msg =>
'Get Duedate'
|| l_rec_invhead.inv_date
|| l_rec_payterms.pay_term_value);
-- Overwrite Due Date For Customers From Spain
l_rec_invhead.inv_due_date :=
l_rec_invhead.inv_date + l_rec_payterms.pay_term_value;
l_bol_foundcutypeb :=
acct_03_pck.foundaccountcustgroup_fct (
pi_str_compcode => pi_str_compcode,
pi_str_acctno => l_rec_invhead.acct_no,
pi_str_code => '2CUTYPEB');
IF l_bol_foundcutypeb
THEN
-- Overwrite Due Date For Customers From Spain
-- Of Type 2cutypeb
-- <Invoice Date> + <Payment Terms>.+ No. Of Days To Make
-- The Invoice Due On 1st Day Of Month Following <Due Date>.
--
l_tab_condfunctmatrix :=
cfuncs_02_pck.initcondfunctmatrix_fct;
-- Set The First In Parameter
l_tab_condfunctmatrix (1).dat_value :=
l_rec_invhead.inv_date;
l_tab_condfunctmatrix (2).int_value :=
l_rec_payterms.pay_term_value;
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'DUEDATESPAIN',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode,
pio_tab_condfunctmatrix => l_tab_condfunctmatrix);
--
IF l_bol_executed
THEN
-- Get The Out Parameter
l_rec_invhead.inv_due_date :=
l_tab_condfunctmatrix (3).dat_value;
ELSE
appl_01_pck.raise_prc (
pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'DUEDATESPAIN',
pi_bol_raise => TRUE);
END IF;
END IF;
END IF;
/*
--
L_tab_induedate(1).Field_name := 'Inv_date';
L_tab_induedate(1).Dat_value := L_rec_invhead.Inv_date;
L_tab_induedate(2).Field_name := 'Default_field';
L_tab_induedate(2).Str_value := 'Due_date';
L_tab_induedate(3).Field_name := 'Default_value';
L_tab_induedate(3).Dat_value := L_rec_invhead.Inv_date
+ L_rec_payterms.Pay_term_value;
-- Get The Invoice Date
Util_01_pck.Log_prc(
Pi_str_msg => 'Get Duedate'
);
L_tab_outduedate := Cond_02_pck.Condfunct_fct(Pi_tab_invalues
=> L_tab_induedate
,Pi_str_functionality
=> 'Duedate'
,Pi_str_condition1
=> 'Comp_code'
,Pi_str_param1
=> Pi_str_compcode
);
-- Set The Duedate
For L_int_index In 1..L_tab_outduedate.Last
Loop
If (L_tab_outduedate(L_int_index).Field_name = 'Due_date') Then
L_rec_invhead.Inv_due_date :=
L_tab_outduedate(L_int_index).Dat_value;
End If;
End Loop;
*/
-- ...Make Sure, That Duedates Don'T Come Together With Weekends!
glpa_01_pck.getaccountglobpar_prc (
pi_str_compcode => pi_str_compcode,
po_rec_glpa => l_rec_globpar);
--
-- ==========================================================================
-- Description : Calculates The Totals Per Delivery And Per Invoice
-- Author : Alexandra Schuetz
-- Changed : Xyz
-- Handling Discount For Articles With Eco-Fee
-- ==========================================================================
PROCEDURE calctotals_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CalcTotals_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_cur_invsums invo_sums_pck.typ_cur;
l_cur_invsumsdel invo_sums_pck.typ_cur;
l_rec_invsumsdel invoice_sums_v%ROWTYPE;
--
l_str_compcode invoice_sums_v.comp_code%TYPE;
l_str_invno invoice_sums_v.inv_no%TYPE;
l_str_cusdelno invoice_sums_v.cusdel_no%TYPE;
--
l_str_criteria VARCHAR2 (500);
-- Totals Per Delivery ...
l_dbl_deltotals invoice_row_v.sold_amount%TYPE := 0;
l_dbl_deltotalsexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_deltotalsvat invoice_row_v.sold_amount%TYPE := 0;
-- ... Or Invoice
l_dbl_invtotals invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invtotalsexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invtotalsvat invoice_row_v.sold_amount%TYPE := 0;
--
-- Send Invoices Not To Pam And Not Print Fro Store 81
l1_rec_invhead invoice_header_v%ROWTYPE;
--
-- For The Recalculation Of The Totals
l_tab_condfunctmatrix cfuncs_01_pck.typ_condfunctmatrix;
l_bol_executed BOOLEAN := FALSE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calctotals_begin;
--
-- What Special Sumcodes Do Exist?
-- Fetch All Different Deliveries For This Invoice
invo_04_pck.getinvsums_prc (pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
po_ref_cur => l_cur_invsums);
--
-- For Jp The Totals' Net And Vat -- 0044 Alsc
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'RECALCTOTALS',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
--
l_tab_condfunctmatrix :=
cfuncs_02_pck.initcondfunctmatrix_fct;
-- Set The In Parameters
l_tab_condfunctmatrix (1).param_name := 'comp_code';
l_tab_condfunctmatrix (1).str_value := l_str_compcode;
l_tab_condfunctmatrix (2).param_name := 'inv_no';
l_tab_condfunctmatrix (2).str_value := l_str_invno;
l_tab_condfunctmatrix (3).param_name := 'cusdel_no';
l_tab_condfunctmatrix (3).str_value := l_str_cusdelno;
l_tab_condfunctmatrix (4).param_name :=
'l_bol_100PercDiscount';
l_tab_condfunctmatrix (4).bol_value := l_bol_100percdiscount;
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'RECALCTOTALS',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode,
pio_tab_condfunctmatrix => l_tab_condfunctmatrix);
--
IF l_bol_executed
THEN
-- Get The Out Parameter
l_dbl_deltotals := l_tab_condfunctmatrix (5).dbl_value;
l_dbl_deltotalsexcl :=
l_tab_condfunctmatrix (6).dbl_value;
l_dbl_deltotalsvat := l_tab_condfunctmatrix (7).dbl_value;
ELSE
appl_01_pck.raise_prc (
pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'DUEDATE',
pi_bol_raise => TRUE);
END IF;
ELSE
-- Create Where-Clause For Retrieval Of Sumcodes Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''' AND (SUBSTR(sum_code,1,6) != ''ECOFEE'')'
|| ' AND (SUBSTR(sum_code,1,5) != ''ISELL'')'
|| ' AND (SUBSTR(sum_code,1,3) != ''MHS'')'
|| ' AND (SUBSTR(sum_code,1,4) != ''IPOS'')'
|| ' AND (SUBSTR(sum_code,1,4) != ''RIMS'')';
--
invo_04_pck.getinvsums_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invsumsdel);
--
-- Go Through All Sums For This Delivery
<<sums>>
LOOP
FETCH l_cur_invsumsdel INTO l_rec_invsumsdel;
IF l_bol_100percdiscount
AND -- 0032 Alsc
l_str_cusdelno = 0
AND ( SUBSTR (l_rec_invsumsdel.sum_code, 1, 5) =
'GOODS'
OR SUBSTR (l_rec_invsumsdel.sum_code, 1, 8) =
'DISCOUNT')
THEN
-- If This Is A 100%-Invoice, Not Even Roundingerrors Shall
Be Visible In The Totals
-- So We Exclude Goods And Discount By Force From The Total
-- Dbms_output.Put_line('Now Omitting Adding '||
L_rec_invsumsdel.Sum_code||' To The Total');
NULL;
ELSE
-- Dbms_output.Put_line('Adding '||
L_rec_invsumsdel.Sum_code||' To The Total'||Substr(L_rec_invsumsdel.Sum_code,-
1,3));
-- The Totals Of The Deliveries
l_dbl_deltotals :=
l_dbl_deltotals + l_rec_invsumsdel.amount_incl;
l_dbl_deltotalsexcl :=
l_dbl_deltotalsexcl
+ l_rec_invsumsdel.amount_excl;
l_dbl_deltotalsvat :=
l_dbl_deltotalsvat + l_rec_invsumsdel.vat;
END IF;
END LOOP sums;
CLOSE l_cur_invsumsdel;
END IF; -- 0044 Alsc
--
-- Write To Invoice_sums_t
IF l_str_cusdelno = 0
THEN
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode => 'TOTAL',
pi_dbl_amountexcl => l_dbl_deltotalsexcl,
pi_dbl_amountincl => l_dbl_deltotals,
pi_dbl_vat => l_dbl_deltotalsvat);
ELSE
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => l_str_cusdelno,
pi_str_sumcode => 'TOTALDEL',
pi_dbl_amountexcl => l_dbl_deltotalsexcl,
pi_dbl_amountincl => l_dbl_deltotals,
pi_dbl_vat => l_dbl_deltotalsvat);
END IF;
--
CLOSE l_cur_invsums;
--
-- Set Invoicestatus To 'O'
invo_06_pck.getinvhead_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
po_rec_ihead => l1_rec_invhead);
IF NOT cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'INVONOTTOPAMORPRINT',
pi_str_condition1 => 'STO_NO',
pi_str_value1 => l1_rec_invhead.sto_no)
THEN
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstattotals);
ELSE
setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatnotprintnottopam);
END IF;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
EXCEPTION
-- Novg 04.01.2006
-- When No_data_found Then
-- Null;
WHEN OTHERS
THEN
ROLLBACK TO calctotals_begin;
l_bol_success := FALSE; -- <0057>
-- Write To Eventlog, That Problem Occurred In This Procedure
util_01_pck.log_prc (
pi_str_msg =>
c_str_prcname || ' ran on error for : ' || pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
-- ==========================================================================
-- Description : Here The New Invoicenumber Is Given To The Invoice.
-- The Number Depending On Whether The Amount Of Goods Is
-- Positive Or Negative The Document Will Receive The
-- Invoicenumber Or A Creditnotenumber.
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE assignnewinvno_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'AssignNewInvNo_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_rec_invrow invoice_row_v%ROWTYPE;
l_rec_isum invoice_sums_v%ROWTYPE;
l_cur_invrow invo_invr_pck.typ_cur;
l_rec_invsums invoice_sums_v%ROWTYPE;
l_cur_invsums invo_sums_pck.typ_cur;
l_rec_invvat invoice_vat_v%ROWTYPE;
l_cur_invvat invo_ivat_pck.typ_cur;
l_cur_invtaxinv invo_taxi_pck.typ_cur;
l_rec_invtaxinv invoice_taxinv_v%ROWTYPE;
-- Novg 15-Jun-2007 Eco Tax
l_rec_invenvtax invoice_row_env_tax_v%ROWTYPE;
l_cur_invenvtax envt_iret_pck.typ_cur;
--
l_str_criteria VARCHAR2 (500);
l_str_oldinvno invoice_header_v.inv_no%TYPE;
--
l_str_artno special_articles_v.art_no%TYPE;
l_rec_sart special_articles_v%ROWTYPE;
l_rec_invnode invoice_header_t%ROWTYPE;
l_tab_invnode glob_01_pck.typ_condfunctmatrix;
l_tab_oinvnode glob_01_pck.typ_condfunctmatrix;
--
l_tab_condfunctmatrix cfuncs_01_pck.typ_condfunctmatrix;
l_bol_executed BOOLEAN := FALSE;
no_inv_no_found_exception EXCEPTION; -- 0038 Alsc
l_s_comp_codenewinvno invoice_header_t.comp_code%TYPE; -- 0043
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT assignnewinvno_begin;
--
l_str_oldinvno := pi_str_invno;
-- Get The Correct Number Range For The Customer/Invoice
-- L_str_invno Is Here The Global Variable!!!
-- 0043 Novg
/*Select Distinct Mastercomp.Cmpcode Into L_s_comp_codenewinvno
From (Select * From Coda_server_v Cds
Where Cds.Coda_master_flag = 'Y'
) Mastercomp,
(Select * From Coda_server_v Cds
Where Cds.Coda_master_flag = 'N'
And Cds.Cmpcode = Pi_str_compcode
) Slavecomp
Where Mastercomp.Cty_code = Slavecomp.Cty_code;
*/
l_str_invno :=
invo_50_pck.getnextinvoiceno_fct (
pi_str_acctno => l_rec_invhead.acct_no,
pi_str_compcode => pi_str_compcode -- Pi_str_compcode =>
L_s_comp_codenewinvno -- 0043 Novg
,
pi_str_invtype => l_rec_invhead.inv_type);
IF l_str_invno IS NULL
THEN
RAISE no_inv_no_found_exception; -- 0038 Alsc
END IF;
--
util_01_pck.log_prc (
pi_str_msg => 'Found new number : ' || l_str_invno);
--
-- Create Special New Invoicenumber For Some Companies (Called For All
Companies, Though)
invo_06_pck.getinvhead_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
po_rec_ihead => l_rec_invnode);
--
--
IF l_bol_executed
THEN
-- Get The Out Parameter
l_str_invno := l_tab_condfunctmatrix (3).str_value;
ELSE
appl_01_pck.raise_prc (pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'INVNO',
pi_bol_raise => TRUE);
END IF;
END IF;
/*
-- Create Special New Invoicenumber For Some Companies (Called For All
Companies, Though)
L_tab_invnode(1).Field_name := 'Sto_no';
L_tab_invnode(1).Str_value := L_rec_invnode.Sto_no;
L_tab_invnode(2).Field_name := 'Inv_no';
L_tab_invnode(2).Str_value := L_str_invno;
L_tab_invnode(3).Field_name := 'Default_field'; -- If No Special
Invoicenumber
L_tab_invnode(3).Str_value := 'Inv_no'; -- For This Company
Give Back
L_tab_invnode(4).Field_name := 'Default_value'; -- Default Number
L_tab_invnode(4).Str_value := L_str_invno;
--
L_tab_oinvnode := Cond_02_pck.Condfunct_fct(Pi_tab_invalues =>
L_tab_invnode
,Pi_str_functionality =>
'Invno'
,Pi_str_condition1 =>
'Comp_code'
,Pi_str_param1 =>
Pi_str_compcode);
L_str_invno := L_tab_oinvnode(1).Str_value;
*/
--
-- Now Assign The Found Number To The Invoice ...
-- ... In Table Invoice_header_t ...
--
l_rec_invhead.inv_no := l_str_invno;
--
invo_06_pck.createinvhead_prc (pi_rec_ihead => l_rec_invhead);
--
invo_06_pck.removeinvhead_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => l_str_oldinvno);
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_oldinvno
|| '''';
--
-- ... And In Table Invoice_row_t ...
--
invo_07_pck.getinvrows_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrow);
LOOP
FETCH l_cur_invrow INTO l_rec_invrow;
-- Novg 04.01.2006
CLOSE l_cur_invrow;
--
-- ... And In Table Invoice_sums_t ...
invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invsums);
LOOP
FETCH l_cur_invsums INTO l_rec_invsums;
-- Novg 04.01.2006
CLOSE l_cur_invsums;
--
-- And In Table Invoice_taxinv_t
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'TAXINVOICEIN',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
invo_57_pck.getinvtaxinvs_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invtaxinv);
LOOP
FETCH l_cur_invtaxinv INTO l_rec_invtaxinv;
--
CLOSE l_cur_invtaxinv;
END IF;
LOOP
FETCH l_cur_invvat INTO l_rec_invvat;
invo_16_pck.removeinvvat_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => l_str_oldinvno,
pi_str_vatcode => l_rec_invvat.vat_code);
END LOOP;
-- Novg 04.01.2006
CLOSE l_cur_invvat;
--
-- Novg 15-Jun-2007 Eco Tax France
-- ... And In Table Invoice_row_env_tax_t ...
IF m_bol_eco_tax
THEN
envt_iret_pck.sel_prc (po_ref_cur => l_cur_invenvtax,
pi_str_criteria => l_str_criteria);
LOOP
FETCH l_cur_invenvtax INTO l_rec_invenvtax;
envt_iret_pck.del_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => l_str_oldinvno,
pi_int_salerowno => l_rec_invenvtax.sale_row_no);
END LOOP;
CLOSE l_cur_invenvtax;
END IF;
--
-- ==========================================================================
-- Description : Calculates The Vat For Invoice_vat_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE calcvat_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
TYPE typ_tab_vatrates IS TABLE OF rims_vat_v%ROWTYPE
INDEX BY BINARY_INTEGER;
--
-- Sobha5: Calculation Should Only Happen When Nocalcvat Is Not Active
IF NOT cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'NOCALCVAT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => glob_01_pck.getcompcode_fct)
THEN
--
IF l_bol_vatobliged
THEN
--
l_str_stmt :=
'SELECT * FROM RIMS_VAT_V RV1'
|| ' WHERE RV1.comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND to_char(RV1.start_date,''YYYYMMDD'') = (SELECT
max(to_char(RV2.start_date,''YYYYMMDD''))'
|| ' FROM RIMS_VAT_V RV2'
|| ' WHERE RV2.comp_code = RV1.comp_code'
|| ' AND RV2.vat_code = RV1.vat_code'
|| ' AND RV2.start_date <= TO_DATE('''
|| TO_CHAR (l_rec_invhead.sales_date, 'YYYYMMDD')
|| ''',''YYYYMMDD''))';
OPEN l_crs_vatrates FOR l_str_stmt;
--
LOOP
FETCH l_crs_vatrates INTO l_rec_vatrates;
CLOSE l_crs_vatrates;
--
-- L_int_next := L_tab_vatrates.First;
-- Loop
-- Exit When L_int_next Is Null;
-- L_int_current := L_int_next;
-- Dbms_output.Put_line('Vatcode: '||
L_tab_vatrates(L_int_current).Vat_code||
-- ' Vatrate: '||
L_tab_vatrates(L_int_current).Vat_incl);
-- L_int_next := L_tab_vatrates.Next(L_int_current);
-- End Loop;
--
--
-- Loop Through Invoice_sums_t For Delivery '0'
l_str_criteria :=
' comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = ''0''';
invo_04_pck.getinvsums_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_isums);
<<sums>>
LOOP
FETCH l_cur_isums INTO l_rec_isums;
-- Sumcode 'Total' And 'Pia' And 'Admcost' May Not Be Used Here
IF NOT (SUBSTR (l_rec_isums.sum_code, 1, 5) = 'TOTAL')
AND --Not (L_rec_isums.Sum_code ='Admcost') And
NOT (SUBSTR (l_rec_isums.sum_code, 1, 3) = 'PIA')
--RIMS-230 TDS for INDIA
AND NOT (SUBSTR (l_rec_isums.sum_code, 1, 3) = 'TDS')
AND NOT (SUBSTR (l_rec_isums.sum_code, 1, 5) = 'ISELL')
AND NOT (SUBSTR (l_rec_isums.sum_code, 1, 4) = 'IPOS')
AND NOT (SUBSTR (l_rec_isums.sum_code, 1, 4) = 'RIMS')
AND NOT (SUBSTR (l_rec_isums.sum_code, 1, 3) = 'MHS')
THEN
-- Dbms_output.Put_line('Sumcode: '||L_rec_isums.Sum_code);
--
-- Create Vat-Matrix
l_int_dummy := NVL (l_tab_accumvat.LAST, 0);
l_bol_vatfound := TRUE;
END IF;
END IF;
j := i;
END LOOP;
END IF;
l_tab_accumvat (j + 1).vat_code :=
SUBSTR (l_rec_isums.sum_code, -1, 1);
CLOSE l_cur_isums;
--
FOR K IN 1 .. l_tab_accumvat.LAST
LOOP
invo_16_pck.createinvvat_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_vatcode => l_tab_accumvat (K).vat_code,
pi_dbl_vatrate => l_tab_accumvat (K).vat_rate,
pi_dbl_amount => l_tab_accumvat (K).vat_amount);
-- Dbms_output.Put_line(L_tab_accumvat(K).Vat_code||' '||
L_tab_accumvat(K).Vat_rate||' '||L_tab_accumvat(K).Vat_amount);
END LOOP;
END IF;
END IF;
--
--
-- Novg 15-Jun-2007 Eco Tax France
m_bol_eco_tax := FALSE;
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'ECOTAX',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
m_bol_eco_tax := TRUE;
END IF;
IF m_bol_eco_tax
THEN
envt_01_pck.insert_eco_tax_rows (
pi_str_comp_code => pi_str_compcode,
pi_str_inv_no => pi_str_invno);
END IF;
--
-- ==========================================================================
-- Description : Retrieves The Correct Accountcodes For The Sending Of
-- Invoices To Coda
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE getacctcodes_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
po_rec_acctcodes OUT company_account_codes_v%ROWTYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'GetAcctCodes_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_criteria VARCHAR2 (500);
--
l_cur_acctcodes comp_accd_pck.typ_cur;
l_rec_acctcodes company_account_codes_v%ROWTYPE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
l_str_criteria := 'comp_code = ''' || pi_str_compcode || '''';
util_01_pck.log_prc (pi_str_msg => l_str_criteria,
pi_bol_logverbose => TRUE);
--
accd_01_pck.getcompacctcodes_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_acctcodes);
LOOP
FETCH l_cur_acctcodes INTO l_rec_acctcodes;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
END getacctcodes_prc;
--
-- ==========================================================================
-- Description : Sums Up Vat For Given Invoice
-- Author : Alexandra Schuetz
-- ==========================================================================
FUNCTION getinvvat_fct (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
RETURN invoice_vat_v.amount%TYPE
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'GetInvVAT_fct' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_cur_invvat invo_ivat_pck.typ_cur;
l_rec_invvat invoice_vat_v%ROWTYPE;
--
l_dbl_invvat invoice_vat_v.amount%TYPE := 0;
l_str_criteria VARCHAR2 (500);
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
util_01_pck.log_prc (pi_str_msg => 'Get Invoice VAT');
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| '''';
--
invo_16_pck.getinvvat_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invvat);
LOOP
FETCH l_cur_invvat INTO l_rec_invvat;
--
-- ==========================================================================
-- Description : Insert Invoices Into O-Tables For Coda
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE inssendcoda_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'InsSendCODA_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
c_str_invsource CONSTANT o_invoice_sendings_to_coda_v.inv_src%TYPE
:= 'INV' ;
--
l_rec_isums1 invoice_sums_v%ROWTYPE;
l_rec_isums2 invoice_sums_v%ROWTYPE;
l_rec_invsend o_invoice_sendings_to_coda_v%ROWTYPE;
l_rec_acct account_v%ROWTYPE;
l_rec_acctcodes company_account_codes_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
l_str_invno invoice_row_v.inv_no%TYPE;
l_str_checkdigit VARCHAR2 (1);
l_dbl_invvat invoice_vat_v.amount%TYPE;
--
l_tab_outinvno glob_01_pck.typ_condfunctmatrix;
l_tab_outinvdate glob_01_pck.typ_condfunctmatrix;
l_tab_ininvno glob_01_pck.typ_condfunctmatrix;
l_tab_ininvdate glob_01_pck.typ_condfunctmatrix;
l_tab_invalues glob_01_pck.typ_condfunctmatrix;
l_tab_outvalues glob_01_pck.typ_condfunctmatrix;
--
l_int_index NUMBER (2);
--
l_tab_condfunctmatrix cfuncs_01_pck.typ_condfunctmatrix;
l_bol_executed BOOLEAN := FALSE;
--
BEGIN
--
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT inssendcoda_begin;
--
-- Insert Values From Parameter List
l_rec_invsend.comp_code := pi_str_compcode;
--
-- New Conditional Functionality Handling
-- Athe 2005-06-01
-- Check If There Is A Conditional Functionality
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'PAYREF',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
-- Get The Invoice Number
util_01_pck.log_prc (pi_str_msg => 'Get Invoice No');
--
l_tab_condfunctmatrix := cfuncs_02_pck.initcondfunctmatrix_fct;
-- Set The In-Parameters
l_tab_condfunctmatrix (1).str_value := pi_str_invno;
l_tab_condfunctmatrix (2).str_value := l_rec_invhead.acct_no;
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'PAYREF',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode,
pio_tab_condfunctmatrix => l_tab_condfunctmatrix);
--
IF l_bol_executed
THEN
-- Get The Out Parameter
l_rec_invsend.inv_no := l_tab_condfunctmatrix (3).str_value;
ELSE
appl_01_pck.raise_prc (pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'PAYREF',
pi_bol_raise => TRUE);
END IF;
ELSE
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'PAYREFAT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_rec_invsend.inv_no :=
SUBSTR (l_rec_invhead.acct_no, 3) || ' ' || pi_str_invno;
ELSE
-- Take The Default
l_rec_invsend.inv_no := pi_str_invno;
END IF;
END IF;
/*
-- Set Values For Call Of Company Specific Invoice Number
L_tab_ininvno(1).Field_name := 'Inv_no';
L_tab_ininvno(1).Str_value := Pi_str_invno;
L_tab_ininvno(2).Field_name := 'Acct_no';
L_tab_ininvno(2).Str_value := L_rec_invhead.Acct_no;
L_tab_ininvno(3).Field_name := 'Default_field';
L_tab_ininvno(3).Str_value := 'Inv_no';
L_tab_ininvno(4).Field_name := 'Default_value';
L_tab_ininvno(4).Str_value := Pi_str_invno;
-- Get The Invoice Number
Util_01_pck.Log_prc(
Pi_str_msg => 'Get Invoice No'
);
L_tab_outinvno := Cond_02_pck.Condfunct_fct(Pi_tab_invalues =>
L_tab_ininvno
,Pi_str_functionality =>
'Payref'
,Pi_str_condition1 =>
'Comp_code'
,Pi_str_param1 =>
Pi_str_compcode);
-- Set The Invoice Number To Be Sent
For L_int_index In 1..L_tab_outinvno.Last
Loop
If (L_tab_outinvno(L_int_index).Field_name = 'Inv_no') Then
L_rec_invsend.Inv_no := L_tab_outinvno(L_int_index).Str_value;
End If;
End Loop;
*/
--
l_rec_invsend.cust_no := l_rec_invhead.acct_no;
l_rec_invsend.sto_no := l_rec_invhead.sto_no;
l_rec_invsend.order_no := l_rec_invhead.order_no;
--
-- Set Values For Calls Of Company Specific Invoice Date
-- New Conditional Functionality Handling
-- Athe 2005-06-01
-- Set Values For Calls Of Company Specific Invoice Date
-- New Conditional Functionality Handling
-- Athe 2005-06-01
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'INVDATESALESDATE',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_rec_invhead.inv_date := l_rec_invhead.sales_date;
ELSIF cfuncs_02_pck.condfunctistrue_fct ( -- Novg <0056>
pi_str_functionality => 'INVDATEREGDATE',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
-- Sobha5:
-- Reg_date Should Now Be Present And Can Be Used Directly To Calculate
Due Date.
-- Otherwise The Reg_date Must Be Fetched From The I_invoice% Views Via
-- Invo_06_pck.Getinvregistrationdate_fct
IF l_rec_invhead.reg_date IS NOT NULL
THEN
l_rec_invhead.inv_date := l_rec_invhead.reg_date;
ELSE
l_rec_invhead.inv_date :=
invo_06_pck.getinvregistrationdate_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
END IF;
ELSE
--L_rec_invhead.Sales_date;
l_rec_invsend.inv_date := l_rec_invhead.inv_date;
END IF;
/*
-- Set Values For Calls Of Company Specific Invoice Date
--
L_tab_ininvdate(1).Field_name := 'Salesdate';
L_tab_ininvdate(1).Str_value := L_rec_invhead.Sales_date;
L_tab_ininvdate(2).Field_name := 'Default_field';
L_tab_ininvdate(2).Str_value := 'Invdate';
L_tab_ininvdate(3).Field_name := 'Default_value';
L_tab_ininvdate(3).Str_value := L_rec_invhead.Inv_date;
-- Get The Invoice Date
Util_01_pck.Log_prc(
Pi_str_msg => 'Get Invoice Date'
);
L_tab_outinvdate := Cond_02_pck.Condfunct_fct(Pi_tab_invalues =>
L_tab_ininvdate
,Pi_str_functionality =>
'Invdate'
,Pi_str_condition1 =>
'Comp_code'
,Pi_str_param1 =>
Pi_str_compcode
);
-- Set The Invoice Date To Be Sent
For L_int_index In 1..L_tab_outinvdate.Last
Loop
If (L_tab_outinvdate(L_int_index).Field_name = 'Invdate') Then
L_rec_invsend.Inv_date := L_tab_outinvdate(L_int_index).Str_value;
End If;
End Loop;
*/
--
l_rec_invsend.inv_due_date := l_rec_invhead.inv_due_date;
l_rec_invsend.sales_date := l_rec_invhead.sales_date;
l_rec_invsend.inv_type := l_rec_invhead.inv_type;
--
-- Insert Invoiceamount From Invoice_sums_t
invo_04_pck.getinvsum_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => '0',
pi_str_sumcode => 'TOTAL',
po_rec_isum => l_rec_isums1);
--
invo_04_pck.getinvsum_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => '0',
pi_str_sumcode => 'PIA',
po_rec_isum => l_rec_isums2);
--
-- New Conditional Functionality Handling
-- Athe 2005-06-01
-- Check If There Is A Conditional Functionality
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'INVAMOUNT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_tab_condfunctmatrix := cfuncs_02_pck.initcondfunctmatrix_fct;
-- Set The In-Parameters
l_tab_condfunctmatrix (1).str_value := pi_str_compcode;
l_tab_condfunctmatrix (2).str_value := l_rec_invhead.acct_no;
IF l_bol_vatobliged
THEN
l_tab_condfunctmatrix (3).dbl_value :=
l_rec_isums1.amount_incl;
-- Inv. Amount
ELSE
l_tab_condfunctmatrix (3).dbl_value :=
l_rec_isums1.amount_excl;
-- Inv. Amount
END IF;
--
IF l_bol_executed
THEN
-- Get The Out Parameter
l_rec_invsend.inv_amount :=
l_tab_condfunctmatrix (5).dbl_value
* curr_02_pck.corrfact_fct (
pi_str_compcode => pi_str_compcode,
pi_str_idrstransaction => 'S3870002');
ELSE
appl_01_pck.raise_prc (
pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'INVAMOUNT',
pi_bol_raise => TRUE);
END IF;
ELSE
-- Take The Default
IF l_bol_vatobliged
THEN
l_rec_invsend.inv_amount := l_rec_isums1.amount_incl;
ELSE
l_rec_invsend.inv_amount := l_rec_isums1.amount_excl;
END IF;
END IF;
/*
-- Set Values For Call Of Companyspecific Invoice Amount
L_tab_invalues(1).Field_name := 'Inv_amount';
If L_bol_vatobliged Then
L_tab_invalues(1).Dbl_value := L_rec_isums1.Amount_incl;
Else
L_tab_invalues(1).Dbl_value := L_rec_isums1.Amount_excl;
End If;
L_tab_invalues(2).Field_name := 'Pia';
L_tab_invalues(2).Dbl_value := L_rec_isums2.Amount_incl;
L_tab_invalues(3).Field_name := 'Default_field';
L_tab_invalues(3).Str_value := 'Inv_amount';
L_tab_invalues(4).Field_name := 'Default_value';
If L_bol_vatobliged Then
L_tab_invalues(4).Dbl_value := L_rec_isums1.Amount_incl;
Else
L_tab_invalues(4).Dbl_value := L_rec_isums1.Amount_excl;
End If;
-- Get Invoice-Amount As Conditional Functionality
L_tab_outvalues := Cond_02_pck.Condfunct_fct(
Pi_tab_invalues => L_tab_invalues
,Pi_str_functionality => 'Invamount'
,Pi_str_condition1 => 'Comp_code'
,Pi_str_param1 => Pi_str_compcode
);
-- Read The Invoiceamount To Be Sent
For L_int_index In 1..L_tab_outvalues.Last
Loop
If (L_tab_outvalues(L_int_index).Field_name = 'Inv_amount') Then
L_rec_invsend.Inv_amount :=
L_tab_outvalues(L_int_index).Dbl_value *
-- ==========================================================================
-- Description : Insert Invoices Into O-Tables For Pam
-- Author : Carsten Kappler
-- Changes : Andreas Theimer, 2005-09-23, Added Handling Of Transport
-- <0049> Select Country Code Using Bapi
-- ==========================================================================
PROCEDURE inssendpam_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'InsSendPam_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_rec_invhead invoice_header_v%ROWTYPE;
l_rec_invsum1 invoice_sums_v%ROWTYPE;
--
l_rec_invsum2 invoice_sums_v%ROWTYPE;
--
l_cur_invsum3 invo_sums_pck.typ_cur;
l_rec_invsum3 invoice_sums_v%ROWTYPE;
l_dbl_invsum3amountexcl invoice_sums_v.amount_excl%TYPE := 0;
--
l_cur_invsum4 invo_sums_pck.typ_cur;
l_rec_invsum4 invoice_sums_v%ROWTYPE;
l_dbl_invsum4amountexcl invoice_sums_v.amount_excl%TYPE := 0;
--
l_cur_invsum5 invo_sums_pck.typ_cur;
l_rec_invsum5 invoice_sums_v%ROWTYPE;
l_dbl_invsum5amountexcl invoice_sums_v.amount_excl%TYPE := 0;
--
l_cur_invsum6 invo_sums_pck.typ_cur;
l_rec_invsum6 invoice_sums_v%ROWTYPE;
l_dbl_invsum6amountexcl invoice_sums_v.amount_excl%TYPE := 0;
--
l_cur_invsum7 invo_sums_pck.typ_cur;
l_rec_invsum7 invoice_sums_v%ROWTYPE;
l_dbl_invsum7amountexcl invoice_sums_v.amount_excl%TYPE := 0;
--
l_cur_invsum8 invo_sums_pck.typ_cur;
l_rec_invsum8 invoice_sums_v%ROWTYPE;
l_dbl_invsum8amountexcl invoice_sums_v.amount_excl%TYPE := 0;
--
l_cur_invsum9 invo_sums_pck.typ_cur;
l_rec_invsum9 invoice_sums_v%ROWTYPE;
l_dbl_invsum9amountexcl invoice_sums_v.amount_excl%TYPE := 0;
--
l_cur_invsum10 invo_sums_pck.typ_cur;
l_rec_invsum10 invoice_sums_v%ROWTYPE;
l_dbl_invsum10amountexcl invoice_sums_v.amount_excl%TYPE := 0;
--
l_cur_isumdisc invo_sums_pck.typ_cur;
l_rec_isumdisc invoice_sums_v%ROWTYPE;
l_tab_isumdisc typ_tab_discamount;
l_int_isumdiscmax INTEGER;
i INTEGER;
--
-- Countrycode <0012>
l_str_ctycode acct_global_parameter_v.cty_code%TYPE;
-- L_rec_countrycode Country_v%Rowtype;
--
l_rec_ivat invoice_vat_v%ROWTYPE;
l_rec_codataxcode pam_tax_codes_v%ROWTYPE;
l_rec_isum invoice_sums_v%ROWTYPE;
l_dbl_isumvatamount invoice_sums_v.vat%TYPE;
--
-- 0046 Alsc
l_rec_curdec currency_decimals_v%ROWTYPE;
-- <0045> Novg
l_dbl_isumvatamountaddserv invoice_sums_v.vat%TYPE;
-- <0052> Novg
l_dbl_isumvatamountspecart invoice_sums_v.vat%TYPE;
--
-- L_cur_ctycode Mtb_cty_pck.Typ_cur;
l_cur_codataxcode invo_pamx_pck.typ_cur;
l_cur_isum invo_sums_pck.typ_cur;
--
l_dbl_totalamount invoice_sums_v.amount_incl%TYPE;
l_bol_vatobliged BOOLEAN := TRUE;
--
l_str_refid o_pam_document_header_v.reference_identifier
%TYPE;
l_str_invno o_pam_document_header_v.invoice_number%TYPE;
l_str_curcode invoice_row_v.cur_code%TYPE;
-- L_str_ccselect Varchar2(1000);
l_str_debcreheader o_pam_document_header_v.credit_debit_indicator
%TYPE;
l_str_debcrecost o_pam_document_header_v.credit_debit_indicator
%TYPE;
l_str_debcrecostpia o_pam_document_header_v.credit_debit_indicator
%TYPE;
l_str_vatcode invoice_vat_v.vat_code%TYPE;
--
l_str_criteria VARCHAR2 (500);
l_str_codataxcode pam_tax_codes_v.coda_tax_code%TYPE;
l_str_sumvatcode invoice_row_v.row_vat_code%TYPE;
l_str_costtype o_pam_document_taxline_v.cost_type%TYPE;
--
l_tab_ininvno glob_01_pck.typ_condfunctmatrix;
l_tab_outinvno glob_01_pck.typ_condfunctmatrix;
l_tab_ininvdate glob_01_pck.typ_condfunctmatrix;
l_tab_outinvdate glob_01_pck.typ_condfunctmatrix;
l_tab_invalues glob_01_pck.typ_condfunctmatrix;
l_tab_outvalues glob_01_pck.typ_condfunctmatrix;
--
l_tab_condfunctmatrix cfuncs_01_pck.typ_condfunctmatrix;
l_bol_executed BOOLEAN := FALSE;
l_dbl_amount NUMBER;
--
-- <0043> Novg
l_str_mastercompcode coda_server_v.cmpcode%TYPE;
-- <0047>
l_str_noofdecimals VARCHAR2 (30);
l_int_noofdecimals currency_decimals_t.nof_decimals%TYPE;
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
-- Get Invoice Header Into Record
invo_06_pck.getinvhead_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
po_rec_ihead => l_rec_invhead);
--
-- IF l_rec_invhead.comp_code != '1206'
-- THEN
IF l_rec_invhead.inv_vat_obliged = 'Y'
THEN
l_bol_vatobliged := TRUE;
ELSE
l_bol_vatobliged := FALSE;
END IF;
--
-- Set Values For Call Of Company Specific Invoice Number
-- New Conditional Functionality Handling
-- Athe 2005-06-01
-- Check If There Is A Conditional Functionality
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'PAYREF',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_tab_condfunctmatrix := cfuncs_02_pck.initcondfunctmatrix_fct;
-- Set The In-Parameters
l_tab_condfunctmatrix (1).str_value := pi_str_invno;
l_tab_condfunctmatrix (2).str_value := l_rec_invhead.acct_no;
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'PAYREF',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode,
pio_tab_condfunctmatrix => l_tab_condfunctmatrix);
--
IF l_bol_executed
THEN
-- Get The Out Parameter
l_str_invno := l_tab_condfunctmatrix (3).str_value;
ELSE
appl_01_pck.raise_prc (pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'PAYREF',
pi_bol_raise => TRUE);
END IF;
ELSE
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'PAYREFAT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_str_invno :=
SUBSTR (l_rec_invhead.acct_no, 3) || ' ' || pi_str_invno;
ELSE
-- Take The Default
l_str_invno := pi_str_invno;
END IF;
END IF;
/*
-- Set Values For Call Of Company Specific Invoice Number
L_tab_ininvno(1).Field_name := 'Inv_no';
L_tab_ininvno(1).Str_value := Pi_str_invno;
L_tab_ininvno(2).Field_name := 'Acct_no';
L_tab_ininvno(2).Str_value := L_rec_invhead.Acct_no;
L_tab_ininvno(3).Field_name := 'Default_field';
L_tab_ininvno(3).Str_value := 'Inv_no';
L_tab_ininvno(4).Field_name := 'Default_value';
L_tab_ininvno(4).Str_value := Pi_str_invno;
--
-- Get The Invoice Number
L_tab_outinvno := Cond_02_pck.Condfunct_fct(Pi_tab_invalues =>
L_tab_ininvno
,Pi_str_functionality =>
'Payref'
,Pi_str_condition1 =>
'Comp_code'
,Pi_str_param1 =>
Pi_str_compcode);
-- Set The Invoice Number To Be Sent
For L_int_index In 1..L_tab_outinvno.Last
Loop
If (L_tab_outinvno(L_int_index).Field_name = 'Inv_no') Then
L_rec_invhead.Inv_no := L_tab_outinvno(L_int_index).Str_value;
End If;
End Loop;
*/
--
-- Set Values For Calls Of Company Specific Invoice Date
-- New Conditional Functionality Handling
-- Athe 2005-06-01
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'INVDATESALESDATE',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_rec_invhead.inv_date := l_rec_invhead.sales_date;
ELSIF cfuncs_02_pck.condfunctistrue_fct ( -- Novg <0056>
pi_str_functionality => 'INVDATEREGDATE',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
-- Sobha5:
-- Reg_date Should Now Be Present And Can Be Used Directly To Calculate
Due Date.
-- Otherwise The Reg_date Must Be Fetched From The I_invoice% Views Via
-- Invo_06_pck.Getinvregistrationdate_fct
IF l_rec_invhead.reg_date IS NOT NULL
THEN
l_rec_invhead.inv_date := l_rec_invhead.reg_date;
ELSE
l_rec_invhead.inv_date :=
invo_06_pck.getinvregistrationdate_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
END IF;
END IF;
/*
--
-- Set Values For Calls Of Company Specific Invoice Date
--
L_tab_ininvdate(1).Field_name := 'Sales_date';
L_tab_ininvdate(1).Str_value := L_rec_invhead.Sales_date;
L_tab_ininvdate(2).Field_name := 'Default_field';
L_tab_ininvdate(2).Str_value := 'Inv_date';
L_tab_ininvdate(3).Field_name := 'Default_value';
L_tab_ininvdate(3).Str_value := L_rec_invhead.Inv_date;
--
-- Get The Invoice Date
L_tab_outinvdate := Cond_02_pck.Condfunct_fct(Pi_tab_invalues =>
L_tab_ininvdate
,Pi_str_functionality =>
'Invdate'
,Pi_str_condition1 =>
'Comp_code'
,Pi_str_param1 =>
Pi_str_compcode
);
-- Set The Invoice Date To Be Sent
For L_int_index In 1..L_tab_outinvdate.Last
Loop
If (L_tab_outinvdate(L_int_index).Field_name = 'Inv_date') Then
L_rec_invhead.Inv_date := L_tab_outinvdate(L_int_index).Str_value;
End If;
End Loop;
*/
-- Create Reference_id
l_str_refid := l_rec_invhead.comp_code || '-' || l_str_invno;
--
-- Get Sums For Headerline And Costlines
invo_04_pck.getinvsum_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode => 'TOTAL',
po_rec_isum => l_rec_invsum1);
--
invo_04_pck.getinvsum_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode => 'PIA',
po_rec_isum => l_rec_invsum2);
--
IF l_bol_vatobliged
THEN -- 0046 Alsc
l_dbl_totalamount := l_rec_invsum1.amount_incl;
ELSE
l_dbl_totalamount := l_rec_invsum1.amount_excl;
END IF;
--
IF (l_dbl_totalamount > 0)
THEN
l_str_debcreheader := 'DEB';
l_str_debcrecost := 'CRE';
l_str_debcrecostpia := 'DEB';
ELSE
l_str_debcreheader := 'CRE';
l_str_debcrecost := 'DEB';
l_str_debcrecostpia := 'CRE';
END IF;
--
IF l_bol_executed
THEN
-- Get The Out Parameter
l_dbl_totalamount :=
l_tab_condfunctmatrix (5).dbl_value
* curr_02_pck.corrfact_fct (
pi_str_compcode => pi_str_compcode,
pi_str_idrstransaction => 'S3870002');
ELSE
appl_01_pck.raise_prc (
pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'INVAMOUNT',
pi_bol_raise => TRUE);
END IF;
END IF;
/*
--
-- Set Values For Call Of Companyspecific Invoice Amount
L_tab_invalues(1).Field_name := 'Inv_amount';
L_tab_invalues(1).Dbl_value := L_dbl_totalamount;
L_tab_invalues(2).Field_name := 'Pia';
L_tab_invalues(2).Dbl_value := L_rec_invsum2.Amount_incl;
L_tab_invalues(3).Field_name := 'Default_field';
L_tab_invalues(3).Str_value := 'Inv_amount';
L_tab_invalues(4).Field_name := 'Default_value';
L_tab_invalues(4).Dbl_value := L_dbl_totalamount;
--
-- Get Invoice-Amount As Conditional Functionality
L_tab_outvalues := Cond_02_pck.Condfunct_fct(
Pi_tab_invalues => L_tab_invalues
,Pi_str_functionality => 'Invamount'
,Pi_str_condition1 => 'Comp_code'
,Pi_str_param1 => Pi_str_compcode
);
--
-- Read The Invoiceamount To Be Sent
For L_int_index In 1..L_tab_outvalues.Last
Loop
If (L_tab_outvalues(L_int_index).Field_name = 'Inv_amount') Then
L_dbl_totalamount := L_tab_outvalues(L_int_index).Dbl_value *
IF l_bol_executed
THEN
l_dbl_totalamount := l_tab_condfunctmatrix (1).int_value;
ELSE
appl_01_pck.raise_prc (
pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'INVAMOUNTROUND',
pi_bol_raise => TRUE);
END IF;
END IF;
--
-- Get Currency_code
l_str_curcode :=
invo_12_pck.getcur_fct (pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode);
-- <0043> Novg
SELECT DISTINCT cmpcode
INTO l_str_mastercompcode
FROM (SELECT cmpcode
FROM coda_server_v cds
WHERE cds.coda_master_flag = 'Y'
AND cds.cmpcode = pi_str_compcode
UNION
SELECT DISTINCT mastercomp.cmpcode
FROM (SELECT *
FROM coda_server_v cds
WHERE cds.coda_master_flag = 'Y') mastercomp,
(SELECT *
FROM coda_server_v cds
WHERE cds.coda_master_flag = 'N'
AND cds.cmpcode = pi_str_compcode) slavecomp
WHERE mastercomp.cty_code = slavecomp.cty_code);
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'GETNOOFDECIMALS',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_str_noofdecimals :=
cfuncs_01_pck.getcondfuncs2_fct (
pi_str_functionality => 'GETNOOFDECIMALS',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode,
pi_str_condition2 => 'NOOFDECIMALS');
--
LOOP
FETCH l_cur_invsum3 INTO l_rec_invsum3;
CLOSE l_cur_invsum3;
--
-- Special Articles 1-4
--
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = 0'
|| ' AND SUBSTR(sum_code,1,7) = ''SPECART'''; -- <0052>
-- ' And Substr(Sum_code,1,8) = ''Specart1''';
invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invsum8);
--
LOOP
FETCH l_cur_invsum8 INTO l_rec_invsum8;
CLOSE l_cur_invsum8;
--
-- Freight
--
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = 0'
|| ' AND SUBSTR(sum_code,1,7) = ''FREIGHT''';
--
invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invsum4);
LOOP
FETCH l_cur_invsum4 INTO l_rec_invsum4;
CLOSE l_cur_invsum4;
--
-- According To Jeri And Mecl The Special Article Transport Shall Be
Handled As Freight
-- Athe 2005-09-23
-- Transport
--
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = 0'
|| ' AND SUBSTR(sum_code,1,9)= ''TRANSPORT''';
--
invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invsum9);
LOOP
FETCH l_cur_invsum9 INTO l_rec_invsum9;
CLOSE l_cur_invsum9;
--
-- Assembly
--
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = 0'
|| ' AND SUBSTR(sum_code,1,8) = ''ASSEMBLY''';
--
invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invsum5);
LOOP
FETCH l_cur_invsum5 INTO l_rec_invsum5;
CLOSE l_cur_invsum5;
--
-- Invoice Fee
--
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = 0'
|| ' AND SUBSTR(sum_code,1,7) = ''ADMCOST''';
--
invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invsum7);
LOOP
FETCH l_cur_invsum7 INTO l_rec_invsum7;
CLOSE l_cur_invsum7;
--
-- Additional Services
--
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = 0'
|| ' AND SUBSTR(sum_code,1,7) = ''ADDSERV''';
--
invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invsum10);
LOOP
FETCH l_cur_invsum10 INTO l_rec_invsum10;
CLOSE l_cur_invsum10;
--
-- Discount
--
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = 0'
|| ' AND SUBSTR(sum_code,1,8) = ''DISCOUNT''';
--
invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invsum6);
LOOP
FETCH l_cur_invsum6 INTO l_rec_invsum6;
CLOSE l_cur_invsum6;
--
--
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'INVAMOUNTROUND',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_tab_condfunctmatrix := cfuncs_02_pck.initcondfunctmatrix_fct;
-- Set The In-Parameters
l_tab_condfunctmatrix (1).param_name := 'TOTAL';
l_tab_condfunctmatrix (1).dbl_value := l_rec_invsum1.amount_incl;
l_tab_condfunctmatrix (1).int_value := 0;
l_tab_condfunctmatrix (2).param_name := 'PIA';
l_tab_condfunctmatrix (2).dbl_value := l_rec_invsum2.amount_incl;
l_tab_condfunctmatrix (2).int_value := 0;
l_tab_condfunctmatrix (3).param_name := 'GOODS';
l_tab_condfunctmatrix (3).dbl_value := l_dbl_invsum3amountexcl;
l_tab_condfunctmatrix (3).int_value := 0;
l_tab_condfunctmatrix (4).param_name := 'FREIGHT';
l_tab_condfunctmatrix (4).dbl_value := l_dbl_invsum4amountexcl;
l_tab_condfunctmatrix (4).int_value := 0;
l_tab_condfunctmatrix (5).param_name := 'ASSEMBLY';
l_tab_condfunctmatrix (5).dbl_value := l_dbl_invsum5amountexcl;
l_tab_condfunctmatrix (5).int_value := 0;
l_tab_condfunctmatrix (6).param_name := 'DISCOUNT';
l_tab_condfunctmatrix (6).dbl_value := l_dbl_invsum6amountexcl;
l_tab_condfunctmatrix (6).int_value := 0;
l_tab_condfunctmatrix (7).param_name := 'ADMCOST';
l_tab_condfunctmatrix (7).dbl_value := l_dbl_invsum7amountexcl;
l_tab_condfunctmatrix (7).int_value := 0;
l_tab_condfunctmatrix (8).param_name := 'SPECART';
l_tab_condfunctmatrix (8).dbl_value := l_dbl_invsum8amountexcl;
l_tab_condfunctmatrix (8).int_value := 0;
l_tab_condfunctmatrix (9).param_name := 'TRANSPORT';
l_tab_condfunctmatrix (9).dbl_value := l_dbl_invsum9amountexcl;
l_tab_condfunctmatrix (9).int_value := 0;
-- <0045> Novg
l_tab_condfunctmatrix (10).param_name := 'ADDSERV';
l_tab_condfunctmatrix (10).dbl_value := l_dbl_invsum10amountexcl;
l_tab_condfunctmatrix (10).int_value := 0;
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'INVAMOUNTROUND',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode,
pio_tab_condfunctmatrix => l_tab_condfunctmatrix);
IF l_bol_executed
THEN
l_rec_invsum1.amount_incl :=
l_tab_condfunctmatrix (1).int_value;
l_rec_invsum2.amount_incl :=
l_tab_condfunctmatrix (2).int_value;
l_dbl_invsum3amountexcl :=
l_tab_condfunctmatrix (3).int_value;
l_dbl_invsum4amountexcl :=
l_tab_condfunctmatrix (4).int_value;
l_dbl_invsum5amountexcl :=
l_tab_condfunctmatrix (5).int_value;
l_dbl_invsum6amountexcl :=
l_tab_condfunctmatrix (6).int_value;
l_dbl_invsum7amountexcl :=
l_tab_condfunctmatrix (7).int_value;
l_dbl_invsum8amountexcl :=
l_tab_condfunctmatrix (8).int_value;
l_dbl_invsum9amountexcl :=
l_tab_condfunctmatrix (9).int_value;
-- <0045> Novg
l_dbl_invsum10amountexcl :=
l_tab_condfunctmatrix (10).int_value;
ELSE
appl_01_pck.raise_prc (
pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'INVAMOUNTROUND',
pi_bol_raise => TRUE);
END IF;
--
END IF;
--
IF (l_rec_invsum2.amount_incl <> 0)
THEN
invo_31_pck.createcostline_prc (
pi_dbl_amount => ABS (NVL
(l_rec_invsum2.amount_incl, 0)),
pi_str_costtype => 'PREPYMT',
pi_str_creditdebitindicator => l_str_debcrecostpia,
pi_str_description => NULL,
pi_str_referenceidentifier => l_str_refid);
END IF;
--
-- 0030 Alsc
IF l_bol_100percdiscount
THEN
invo_31_pck.createcostline_prc (
pi_dbl_amount =>
0
+ ABS (NVL (l_dbl_invsum10amountexcl, 0)) -- <0045> Novg
+ ABS (NVL (l_dbl_invsum8amountexcl, 0)) -- <0052> Novg
,
pi_str_costtype => 'GOODS',
pi_str_creditdebitindicator => l_str_debcrecost,
pi_str_description => NULL,
pi_str_referenceidentifier => l_str_refid);
ELSIF (l_dbl_invsum3amountexcl <> 0)
THEN
invo_31_pck.createcostline_prc (
pi_dbl_amount =>
ABS (
NVL (l_dbl_invsum3amountexcl, 0)
+ NVL (l_dbl_invsum8amountexcl, 0) -- <0052> Novg
+ NVL (l_dbl_invsum10amountexcl, 0))
- -- Goods -- <0045> Novg
ABS (NVL (l_dbl_invsum6amountexcl, 0)) -- Discount
,
pi_str_costtype => 'GOODS',
pi_str_creditdebitindicator => l_str_debcrecost,
pi_str_description => NULL,
pi_str_referenceidentifier => l_str_refid);
END IF;
IF (l_dbl_invsum5amountexcl <> 0)
THEN
invo_31_pck.createcostline_prc (
pi_dbl_amount => ABS (NVL (l_dbl_invsum5amountexcl,
0)),
pi_str_costtype => 'ASMBLY',
pi_str_creditdebitindicator => l_str_debcrecost,
pi_str_description => NULL,
pi_str_referenceidentifier => l_str_refid);
END IF;
IF (l_dbl_invsum7amountexcl <> 0)
THEN
invo_31_pck.createcostline_prc (
pi_dbl_amount => ABS (NVL (l_dbl_invsum7amountexcl,
0)),
pi_str_costtype => 'ADMCOST',
pi_str_creditdebitindicator => l_str_debcrecost,
pi_str_description => NULL,
pi_str_referenceidentifier => l_str_refid);
END IF;
--
-- Create The Taxlines
-- First: Get All The Discountlines In An Array/Pl/Sql-Table, Ordered By
Vatcode
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = 0'
|| ' AND SUBSTR(sum_code,1,8) = ''DISCOUNT'''
|| ' ORDER BY SUBSTR(sum_code,9,1)';
LOOP
FETCH l_cur_isumdisc INTO l_rec_isumdisc;
i := i + 1;
END LOOP;
--
-- Second: Get All Sum-Lines For This Invoice
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = 0'
|| ' ORDER BY DECODE(SUBSTR(sum_code,1,7), ''ADDSERV'', 1,
DECODE(SUBSTR(sum_code,1,7), ''SPECART'', 2, 3))';
-- <0045>, <0052> Novg
l_dbl_isumvatamountaddserv := 0;
l_dbl_isumvatamountspecart := 0;
invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_isum);
--
LOOP
FETCH l_cur_isum INTO l_rec_isum;
--
-- Get Tax Values By Determining The Vatcode Of The Current Invoice-Sum
/* If (Substr(L_rec_isum.Sum_code,1,7) = 'Addserv') Then
L_str_sumvatcode := Substr(L_rec_isum.Sum_code,8,1);
L_str_costtype := 'Addserv';
Els*/
IF (SUBSTR (l_rec_isum.sum_code, 1, 7) = 'ADMCOST')
THEN
l_str_sumvatcode := SUBSTR (l_rec_isum.sum_code, 8, 1);
l_str_costtype := 'ADMCOST';
/* Elsif (Substr(L_rec_isum.Sum_code,1,8) = 'Discount') Then
L_str_sumvatcode := Substr(L_rec_isum.Sum_code,9,1);
L_str_costtype := 'Discount';
*/
ELSIF (SUBSTR (l_rec_isum.sum_code, 1, 8) = 'ASSEMBLY')
THEN
l_str_sumvatcode := SUBSTR (l_rec_isum.sum_code, 9, 1);
l_str_costtype := 'ASMBLY';
ELSIF (SUBSTR (l_rec_isum.sum_code, 1, 7) = 'FREIGHT')
THEN
l_str_sumvatcode := SUBSTR (l_rec_isum.sum_code, 8, 1);
l_str_costtype := 'FREIGHT';
-- According To Jeri And Mecl The Special Article Transport Shall Be
Handled As Freight
-- Athe 2005-09-23
ELSIF (SUBSTR (l_rec_isum.sum_code, 1, 9) = 'TRANSPORT')
THEN
l_str_sumvatcode := SUBSTR (l_rec_isum.sum_code, 10, 1);
l_str_costtype := 'FREIGHT';
ELSIF (SUBSTR (l_rec_isum.sum_code, 1, 7) = 'ADDSERV')
THEN -- <0045> Novg
l_str_sumvatcode := SUBSTR (l_rec_isum.sum_code, 8, 1);
l_str_costtype := 'ADDSERV';
ELSIF (SUBSTR (l_rec_isum.sum_code, 1, 5) = 'GOODS')
THEN
l_str_sumvatcode := SUBSTR (l_rec_isum.sum_code, 6, 1);
l_str_costtype := 'GOODS';
ELSIF (SUBSTR (l_rec_isum.sum_code, 1, 8) = 'SPECART1')
THEN -- <0052>
l_str_sumvatcode := SUBSTR (l_rec_isum.sum_code, 9, 1);
l_str_costtype := 'SPECART1';
ELSIF (SUBSTR (l_rec_isum.sum_code, 1, 8) = 'SPECART2')
THEN
l_str_sumvatcode := SUBSTR (l_rec_isum.sum_code, 9, 1);
l_str_costtype := 'SPECART2';
ELSIF (SUBSTR (l_rec_isum.sum_code, 1, 8) = 'SPECART3')
THEN
l_str_sumvatcode := SUBSTR (l_rec_isum.sum_code, 9, 1);
l_str_costtype := 'SPECART3';
ELSIF (SUBSTR (l_rec_isum.sum_code, 1, 8) = 'SPECART4')
THEN
l_str_sumvatcode := SUBSTR (l_rec_isum.sum_code, 9, 1);
l_str_costtype := 'SPECART4';
/* Elsif (Substr(L_rec_isum.Sum_code,1,9) = 'Transport') Then
L_str_sumvatcode := Substr(L_rec_isum.Sum_code,10,1);
L_str_costtype := 'Transport'; */
ELSE
l_str_sumvatcode := NULL;
l_str_costtype := NULL;
END IF;
--
-- For All Sumcodes Except 'Total', 'Pia' And '...' Write Taxlines
IF (l_str_costtype IS NOT NULL)
THEN
IF l_str_costtype NOT IN ('ADDSERV',
'SPECART1',
'SPECART2',
'SPECART3',
'SPECART4')
THEN -- <0052>
-- Get Coda_tax_code
l_str_codataxcode := 'vat_code = ' || l_str_sumvatcode;
--
invo_36_pck.getpamtax_prc (
po_ref_cur => l_cur_codataxcode,
pi_str_criteria => l_str_codataxcode);
--
l_int_isumdiscmax := NVL (l_tab_isumdisc.LAST, 0);
--
FETCH l_cur_codataxcode INTO l_rec_codataxcode;
CLOSE l_cur_codataxcode;
END IF;
--
--If (L_str_costtype = 'Goods') Then -- <0045> Novg
IF (l_str_costtype = 'GOODS')
THEN --
IF l_bol_vatobliged
THEN
l_dbl_isumvatamount := ABS (l_rec_isum.vat);
FOR i IN 1 .. l_int_isumdiscmax
LOOP
IF (l_tab_isumdisc (i).vat_code =
SUBSTR (l_rec_isum.sum_code, 6, 1))
THEN
l_dbl_isumvatamount :=
ABS (l_rec_isum.vat)
- ABS (l_tab_isumdisc (i).vat_amount);
END IF;
END LOOP;
IF l_bol_100percdiscount
THEN -- 0030 Alsc
l_dbl_isumvatamount := 0;
END IF;
ELSE
l_dbl_isumvatamount := 0;
END IF;
ELSE
IF l_bol_vatobliged
THEN
l_dbl_isumvatamount := ABS (l_rec_isum.vat);
ELSE
l_dbl_isumvatamount := 0;
END IF;
END IF;
--
-- For Japan...
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'INVAMOUNTROUND',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_tab_condfunctmatrix :=
cfuncs_02_pck.initcondfunctmatrix_fct;
-- Set The In-Parameters
l_tab_condfunctmatrix (1).param_name := l_str_costtype;
l_tab_condfunctmatrix (1).dbl_value :=
l_dbl_isumvatamount;
l_tab_condfunctmatrix (1).int_value := 0;
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'INVAMOUNTROUND',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode,
pio_tab_condfunctmatrix => l_tab_condfunctmatrix);
IF l_bol_executed
THEN
l_dbl_isumvatamount :=
l_tab_condfunctmatrix (1).int_value;
ELSE
appl_01_pck.raise_prc (
pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'INVAMOUNTROUND',
pi_bol_raise => TRUE);
END IF;
END IF;
--
--Insert Into O_pam_document_attribute_t
-- sobha5: RIMS-214 RIMS - Booking for Business
-- sobha5: RIMS-172 1) For purchases made with IKANO card logic of RIMS-214
should be applicable
-- 2) For purchases made with IKEA card the booking should
be on EL2 - BABUSINESS
IF l_rec_invhead.comp_code = '1206'
THEN
acct_01_pck.getaccount_prc (
pi_str_compcode => l_rec_invhead.comp_code,
pi_str_acctno => l_rec_invhead.acct_no,
po_rec_acct => l_rec_acct);
--
IF l_rec_acct.acct_stop_code = '95'
THEN
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute1',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => 'BABUSINESS');
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute2',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => '999');
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute5',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => 'COD');
ELSE
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute1',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value =>
SUBSTR (l_rec_invhead.acct_no, 3));
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute2',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.sto_no);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute5',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => 'INV');
END IF;
ELSE
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute1',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value =>
SUBSTR (l_rec_invhead.acct_no, 3));
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute2',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.sto_no);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute5',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => 'INV');
END IF;
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute3',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.order_no);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute4',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.sales_date);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute6',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.inv_type);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute7',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.pu_order_no);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute8',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => '');
--
-- If Extref2fi Is Active Then Invoice Number Is Sent As
Ha_headerattribute9
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'EXTREF2FI',
pi_str_condition1 => 'GENERAL',
pi_str_value1 => 'YES')
THEN
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute9',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.inv_no);
ELSE
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute9',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => '');
END IF;
-- END IF;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
--
-- Set Invoicestatus To 'H'
invo_12_pck.setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatsend);
END inssendpam_prc;
--
-- ==========================================================================
-- Description : Insert Invoices Into O-Tables For Pam For India
-- Author : Sobha5
-- ==========================================================================
PROCEDURE inssendpamtaxinv_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'InsSendPamTaxinv_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_rec_invhead invoice_header_v%ROWTYPE;
l_cur_invtaxinv invo_taxi_pck.typ_cur;
l_rec_invtaxinv invoice_taxinv_v%ROWTYPE;
l_rec_invsum1 invoice_sums_v%ROWTYPE;
--
l_rec_invsum2 invoice_sums_v%ROWTYPE;
--
l_str_invid invoice_taxinv_v.inv_id%TYPE;
l_dbl_totalamount invoice_sums_v.amount_incl%TYPE;
--
l_str_refid o_pam_document_header_v.reference_identifier
%TYPE;
l_str_debcreheader o_pam_document_header_v.credit_debit_indicator
%TYPE;
l_str_debcrecost o_pam_document_header_v.credit_debit_indicator
%TYPE;
l_str_debcrecostpia o_pam_document_header_v.credit_debit_indicator
%TYPE;
--
l_tab_condfunctmatrix cfuncs_01_pck.typ_condfunctmatrix;
l_bol_executed BOOLEAN := FALSE;
l_str_criteria VARCHAR2 (1000);
--RIMS-230 TDS for INDIA
l_str_debcrecosttds o_pam_document_header_v.credit_debit_indicator
%TYPE;
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
-- Get Invoice Header Into Record
invo_06_pck.getinvhead_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
po_rec_ihead => l_rec_invhead);
--
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| '''';
--
LOOP
FETCH l_cur_invtaxinv INTO l_rec_invtaxinv;
-- Create Reference_id
l_str_refid :=
l_rec_invhead.comp_code
|| '-'
|| l_rec_invhead.inv_no
|| '-'
|| l_rec_invtaxinv.seq_no;
--
-- Get Sums For Headerline And Costlines
invo_04_pck.getinvsum_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode => 'TOTAL',
po_rec_isum => l_rec_invsum1);
--
invo_04_pck.getinvsum_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode => 'PIA',
po_rec_isum => l_rec_invsum2);
--RIMS-230 TDS for INDIA
invo_04_pck.getinvsum_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode => 'TDS',
po_rec_isum => l_rec_invsum2);
--
IF l_bol_vatobliged
THEN -- 0046 Alsc
l_dbl_totalamount := l_rec_invsum1.amount_incl;
ELSE
l_dbl_totalamount := l_rec_invsum1.amount_excl;
END IF;
--
IF l_rec_invtaxinv.amount > 0
THEN
l_str_debcreheader := 'DEB';
l_str_debcrecost := 'CRE';
--RIMS-230 TDS for INDIA
l_str_debcrecosttds := 'DEB';
ELSE
l_str_debcreheader := 'CRE';
l_str_debcrecost := 'DEB';
--RIMS-230 TDS for INDIA
l_str_debcrecosttds := 'DEB';
END IF;
--
-- Create And Insert The Header
invo_32_pck.createheader_prc (
pi_str_authorizinguser => NULL,
pi_str_businesstype => 'RIMS',
pi_str_costbookingtype => 'COSTBOOK',
pi_str_creditdebitindicator => l_str_debcreheader,
pi_str_description => NULL,
pi_dat_duedate => l_rec_invhead.inv_due_date,
pi_str_invoicecurrency => l_rec_invtaxinv.cur_code,
pi_int_invoicecuralloweddec => 2,
pi_dat_invoicedate => l_rec_invhead.inv_date,
pi_dbl_invoicegrossamount => ABS (l_rec_invtaxinv.amount),
pi_str_invoicenumber => l_str_invno,
pi_int_paymentscenarioflag => 0,
pi_str_purchasesalesindicator => 'SALES',
pi_str_referenceidentifier => l_str_refid,
pi_str_taxcountry => 'IN',
pi_str_taxcurrency => NULL,
pi_str_taxcurrencyannualrate => NULL,
pi_str_taxindicator => 'DOM');
--
-- Create And Insert The Costlines
IF l_rec_invtaxinv.inv_id != '0'
THEN
invo_31_pck.createcostline_prc (
pi_dbl_amount => ABS (l_rec_invtaxinv.amount),
pi_str_costtype => 'GOODS',
pi_str_creditdebitindicator => l_str_debcrecost,
pi_str_description => NULL,
pi_str_referenceidentifier => l_str_refid);
ELSE
--RIMS-230 TDS for INDIA
IF (l_rec_invsum2.amount_incl <> 0)
THEN
invo_31_pck.createcostline_prc (
pi_dbl_amount =>
ABS (NVL (l_rec_invsum2.amount_incl, 0)),
pi_str_costtype => 'TDS',
pi_str_creditdebitindicator => l_str_debcrecosttds,
pi_str_description => NULL,
pi_str_referenceidentifier => l_str_refid);
END IF;
END IF;
--
--Insert Into O_pam_document_attribute_t
IF l_rec_invtaxinv.inv_id != '0'
THEN
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute1',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value =>
SUBSTR (l_rec_invhead.acct_no, 3));
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute2',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.sto_no);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute3',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.order_no);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute4',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.sales_date);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute5',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => 'INV');
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute6',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.inv_type);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute7',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.pu_order_no);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute8',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => '');
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute9',
pi_str_costtype => 'GROSS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invtaxinv.inv_id);
ELSE
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute1',
pi_str_costtype => 'TDS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value =>
SUBSTR (l_rec_invhead.acct_no, 3));
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute2',
pi_str_costtype => 'TDS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.sto_no);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute3',
pi_str_costtype => 'TDS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.order_no);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute4',
pi_str_costtype => 'TDS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.sales_date);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute5',
pi_str_costtype => 'TDS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => 'INV');
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute6',
pi_str_costtype => 'TDS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.inv_type);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute7',
pi_str_costtype => 'TDS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invhead.pu_order_no);
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute8',
pi_str_costtype => 'TDS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => '');
invo_29_pck.createattributes_prc (
pi_str_code => 'HA_HeaderAttribute9',
pi_str_costtype => 'TDS',
pi_str_referenceidentifier => l_str_refid,
pi_str_value => l_rec_invtaxinv.inv_id);
END IF;
--
CLOSE l_cur_invtaxinv;
END inssendpamtaxinv_prc;
--
-- ==========================================================================
-- Description : Contains Softswitch For Either Send Invoices To Coda
-- Directly Or Via Pam
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE inssend_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'InsSend_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_rec_cods company_dest_send_v%ROWTYPE;
BEGIN
--
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
-- Read Table Company_dest_send_t
comp_01_pck.gettransdest_prc (pi_str_compcode => pi_str_compcode,
pi_str_transaction => 'INVOICE',
po_rec_cods => l_rec_cods);
IF (l_rec_cods.destination = 'CODA')
THEN
util_01_pck.log_prc (pi_str_msg => 'Send Invoice TO CODA',
pi_bol_logverbose => TRUE);
-- Call Either Inssendcoda ...
inssendcoda_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
ELSIF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'TAXINVOICEIN',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
AND l_rec_cods.destination = 'PAM'
THEN
util_01_pck.log_prc (
pi_str_msg => 'Send Invoice OF India TO PAM',
pi_bol_logverbose => TRUE);
--
inssendpamtaxinv_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
ELSIF (l_rec_cods.destination = 'PAM')
THEN
util_01_pck.log_prc (pi_str_msg => 'Send Invoice TO PAM',
pi_bol_logverbose => TRUE);
-- ... Or Inssendpam
inssendpam_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
--RIMS-314
ELSIF (l_rec_cods.destination = 'SAP')
THEN
util_01_pck.log_prc (pi_str_msg => 'Send Invoice TO SAP',
pi_bol_logverbose => TRUE);
-- ... Or Inssendsap
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
END inssend_prc;
--
-- ==========================================================================
-- Description : Check For Controlnumber If Any Is Given And Write To
-- Event_log_t Should The Controlnumber In Invoice_header_t
-- Not Match That In Control_number_t
-- Also A Line Is Inserted Into Table Control_no_unauthorized_t
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE checkctrlno_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CheckCtrlNo_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_criteria VARCHAR2 (500);
--
l_rec_invsums invoice_sums_v%ROWTYPE;
--
l_int_foundctrlnorows NUMBER (5);
--
-- <0043> Novg
l_s_mastercomp_code coda_server_v.cmpcode%TYPE;
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT checkctrlno_begin;
--
-- <0043> Novg
SELECT DISTINCT cmpcode
INTO l_s_mastercomp_code
FROM (SELECT cmpcode
FROM coda_server_v cds
WHERE cds.coda_master_flag = 'Y'
AND cds.cmpcode = pi_str_compcode
UNION
SELECT DISTINCT mastercomp.cmpcode
FROM (SELECT *
FROM coda_server_v cds
WHERE cds.coda_master_flag = 'Y') mastercomp,
(SELECT *
FROM coda_server_v cds
WHERE cds.coda_master_flag = 'N'
AND cds.cmpcode = pi_str_compcode) slavecomp
WHERE mastercomp.cty_code = slavecomp.cty_code);
--
-- If The Controlnumber Is Correct:
IF ctrl_01_pck.foundctrlnos_fct (
pi_str_criteria => l_str_criteria,
po_int_rows => l_int_foundctrlnorows)
THEN
-- Get The Invoice'S Total Amount ...
invo_04_pck.getinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => '0',
pi_str_sumcode => 'TOTAL',
po_rec_isum => l_rec_invsums);
--
-- Insert The Faulty Controlnumber Into Table
Control_no_unauthorized_t
IF l_bol_vatobliged
THEN
ctrl_02_pck.createctrlnoun_prc (
pi_str_acctno => l_rec_invhead.acct_no,
pi_str_compcode => pi_str_compcode,
pi_int_controlno => l_rec_invhead.control_no,
pi_dat_utilizationdate => l_rec_invhead.sales_date,
pi_dbl_invamount => l_rec_invsums.amount_incl,
pi_dat_invdate => l_rec_invhead.inv_date,
pi_str_invno => pi_str_invno,
pi_str_stono => l_rec_invhead.sto_no,
pi_str_orderno => l_rec_invhead.order_no);
ELSE
ctrl_02_pck.createctrlnoun_prc (
pi_str_acctno => l_rec_invhead.acct_no,
pi_str_compcode => pi_str_compcode,
pi_int_controlno => l_rec_invhead.control_no,
pi_dat_utilizationdate => l_rec_invhead.sales_date,
pi_dbl_invamount => l_rec_invsums.amount_excl,
pi_dat_invdate => l_rec_invhead.inv_date,
pi_str_invno => pi_str_invno,
pi_str_stono => l_rec_invhead.sto_no,
pi_str_orderno => l_rec_invhead.order_no);
END IF;
--
IF l_bol_executed
THEN
-- Get The Out Parameter
--L_bol_success := L_tab_condfunctmatrix(4).Bol_value; -- <0057>
l_bol_success_condfuncmatr :=
l_tab_condfunctmatrix (4).bol_value;
-- <0057>
ELSE
appl_01_pck.raise_prc (
pi_int_msgcode => 20160,
pi_str_msgtext => '#1' || 'INVVATSPEC',
pi_bol_raise => TRUE);
END IF;
ELSE
-- L_bol_success := True; -- <0057>
l_bol_success_condfuncmatr := TRUE; -- <0057>
END IF;
--
-- If L_bol_success Then <0057>
IF l_bol_success_condfuncmatr
THEN -- <0057>
-- Set Invoicestatus To 'L'
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstativs);
ELSE
-- Write To Eventlog, That Problem Occurred In This Procedure
util_01_pck.log_prc (
pi_str_msg =>
c_str_prcname || ' ran on error for : ' || pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
EXCEPTION
WHEN OTHERS
THEN
-- Write To Eventlog, That Problem Occurred In This Procedure
ROLLBACK TO insivs_begin;
l_bol_success := FALSE; -- <0057>
util_01_pck.log_prc (
pi_str_msg =>
c_str_prcname || ' ran on error for : ' || pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
-- ==========================================================================
-- Description : Checks, Whether An Purchase-Order-Number Has To Be Inserted
And
-- Inserts If One Can Be Found In Control_no_t Or Otherwise
-- Marks The Invoice For To Be Completed With A Manual Purchase-
-- Order-Number
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE checkpono_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CheckPONo_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_str_criteria VARCHAR2 (500);
--
l_cur_ctrlno ctrl_ctln_pck.typ_cur;
l_rec_ctrlno control_no_v%ROWTYPE;
l_int_ctrlno_temp reference_text_ctrlno_t.control_no%TYPE;
--
-- Reference Texts Exit That Are Not Used
FUNCTION existsreftextsforctrlno_fct -- <0048>
RETURN BOOLEAN
IS
BEGIN
FOR i IN 1 .. 5
LOOP
IF invo_28_pck.foundreferencetextclno_prc (
pi_str_compcode => pi_str_compcode,
pi_str_acctno => l_rec_invhead.acct_no,
pi_str_acctusrno => l_rec_invhead.acct_usr_no,
pi_str_stono => l_rec_invhead.sto_no,
pi_int_controlno => l_rec_invhead.control_no,
pi_str_refrowno => TRIM (TO_CHAR (i)),
pi_dat_salesdate => l_rec_invhead.sales_date,
pi_str_status => NULL)
THEN
RETURN TRUE;
END IF;
-- Dbms_output.Put_line('Reftext For Ctrlno Exists?');
END LOOP;
RETURN FALSE;
END existsreftextsforctrlno_fct;
FOR i IN 1 .. 5
LOOP
invo_28_pck.changereferencetextclno_prc (
pi_str_compcode => pi_str_compcode,
pi_str_acctno => l_rec_invhead.acct_no,
pi_str_acctusrno => l_rec_invhead.acct_usr_no,
pi_str_stono => l_rec_invhead.sto_no,
pi_int_controlno => pi_int_ctrlno_temp,
pi_str_refrowno => i,
pi_dat_salesdate => l_rec_invhead.sales_date,
pi_str_text => NULL,
pi_dat_upddate => SYSDATE,
pi_str_status => 'M');
END LOOP;
END purchasereftextsmatch_prc;
BEGIN
-- Add Module Name To Module Hierarchy.
-- Dbms_output.Put_line('Pono' || Pi_str_invno);
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT checkpono_begin;
--
util_01_pck.log_prc (
pi_str_msg =>
'Purchase Order Required : ' || l_rec_acct.po_no_required);
--
-- Dbms_output.Put_line('Invno: '||L_rec_invhead.Inv_no);
IF l_rec_acct.po_no_required = glob_01_pck.c_str_yes
THEN
--
IF l_rec_invhead.control_no IS NOT NULL
THEN
DBMS_OUTPUT.put_line ('CtrlNo: ' || l_rec_invhead.control_no);
IF cfuncs_02_pck.condfunctistrue_fct ( -- <0048>
pi_str_functionality => 'NOCHECKCTRLNOINRIMS',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => glob_01_pck.getcompcode_fct)
THEN
-- <0048>
IF l_rec_invhead.inv_type = 'D'
THEN -- <0059>
LOCK TABLE reference_text_ctrlno_t IN EXCLUSIVE MODE;
IF existsreftextsforctrlno_fct
THEN
purchasereftextsmatch_prc (
pi_int_ctrlno_temp =>
l_rec_invhead.control_no);
ELSE
-- <0054> Novg
--
IF invo_28_pck.existsonlyonereftext_fct (
pi_str_compcode => pi_str_compcode,
pi_str_acctno => l_rec_invhead.acct_no,
pi_str_acctusrno =>
l_rec_invhead.acct_usr_no,
pi_str_stono => l_rec_invhead.sto_no,
pi_dat_salesdate =>
l_rec_invhead.sales_date,
po_int_ctrlno => l_int_ctrlno_temp)
THEN
-- Dbms_output.Put_line('Temp Controlno: '||
To_char(L_int_ctrlno_temp));
purchasereftextsmatch_prc (
pi_int_ctrlno_temp => l_int_ctrlno_temp);
ELSE
setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatpono -- 0061
<Novg> C_str_invstatponomiss
);
END IF;
END IF;
ELSE
setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatpono);
END IF;
ELSE
-- Po_no_required = 'Y' And Comp_code <> '1206' And Control-No
Is Not Null
-- Check If A Purchase-Order-Number Was Also Given With The
Control Number
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND control_no = '''
|| l_rec_invhead.control_no
|| ''''
|| ' AND acct_no = '''
|| l_rec_invhead.acct_no
|| ''''
|| -- Novg 27.04.2006
--' And Control_no_status = ''' ||
Glob_01_pck.C_str_ctrlnotinvced || ''''
' AND (control_no_status = '''
|| glob_01_pck.c_str_ctrlnotused
|| ''''
|| ' OR control_no_status = '''
|| glob_01_pck.c_str_ctrlnotinvced
|| ''')';
-- Get Pono From Control_no_t-Table
ctrl_01_pck.getctrlnos_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_ctrlno);
LOOP
-- Novg 04.01.2006
FETCH l_cur_ctrlno INTO l_rec_ctrlno;
IF l_cur_ctrlno%NOTFOUND
THEN
-- Dbms_output.Put_line(Pi_str_invno || '--1');
setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatponomiss);
--Raise No_data_found;
ELSIF l_rec_ctrlno.po_no IS NOT NULL
THEN
-- Insert The Pono Into Invoice_header_t ...
-- Dbms_output.Put_line(Pi_str_invno || '--2');
invo_06_pck.changeinvhead_prc (
pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
pi_str_puorderno => l_rec_ctrlno.po_no);
-- Set Inv_status To 'Q' (Successfully Added Pono)
setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatpono);
ELSE
-- Set Inv_status To 'Z' For The Pono-Screen To Pick Up
-- Dbms_output.Put_line(Pi_str_invno || '--3');
setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatponomiss);
END IF;
EXIT;
/*Exit When L_cur_ctrlno%Notfound;
Fetch L_cur_ctrlno Into L_rec_ctrlno;
If L_rec_ctrlno.Po_no Is Not Null Then
-- Insert The Pono Into Invoice_header_t ...
Invo_06_pck.Changeinvhead_prc(
Pi_str_invno => Pi_str_invno
,Pi_str_compcode => Pi_str_compcode
,Pi_str_puorderno => L_rec_ctrlno.Po_no
);
-- Set Inv_status To 'Q' (Successful Added Pono)
Setinvstatus_prc(
Pi_str_compcode => Pi_str_compcode
,Pi_str_invno => Pi_str_invno
,Pi_str_invstatus => C_str_invstatpono
);
--Dbms_output.Put_line('Pono-Q-' || Pi_str_invno);
Else
-- Set Inv_status To 'Z' For The Pono-Screen To Pick Up
Setinvstatus_prc(
Pi_str_compcode => Pi_str_compcode
,Pi_str_invno => Pi_str_invno
,Pi_str_invstatus => C_str_invstatponomiss
);
--Dbms_output.Put_line('Pono-Z-' || Pi_str_invno);
End If;*/
END LOOP;
END IF;
ELSE -- Po_no_required = 'Y' And Control_no Is Null
-- Set Invoicestatus To 'Z' (Add Pono By Screen)
IF cfuncs_02_pck.condfunctistrue_fct ( -- <0048>
pi_str_functionality => 'NOCHECKCTRLNOINRIMS',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => glob_01_pck.getcompcode_fct)
THEN
-- <0048>
IF l_rec_invhead.inv_type = 'D'
THEN -- <0059>
LOCK TABLE reference_text_ctrlno_t IN EXCLUSIVE MODE;
-- <0054> Novg
--
IF invo_28_pck.existsonlyonereftext_fct (
pi_str_compcode => pi_str_compcode,
pi_str_acctno => l_rec_invhead.acct_no,
pi_str_acctusrno => l_rec_invhead.acct_usr_no,
pi_str_stono => l_rec_invhead.sto_no,
pi_dat_salesdate => l_rec_invhead.sales_date,
po_int_ctrlno => l_int_ctrlno_temp)
THEN
purchasereftextsmatch_prc (
pi_int_ctrlno_temp => l_int_ctrlno_temp);
ELSE
setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatpono -- 0061
<Novg> C_str_invstatponomiss
);
END IF;
ELSE
setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatpono);
END IF;
ELSE
-- Correction Screen
setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatponomiss);
--Dbms_output.Put_line('Pono-Z-' || Pi_str_invno);
END IF;
END IF;
ELSE -- Po_no_required = 'N'
IF cfuncs_02_pck.condfunctistrue_fct ( -- <0048>
pi_str_functionality => 'NOCHECKCTRLNOINRIMS',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => glob_01_pck.getcompcode_fct)
THEN
IF l_rec_invhead.inv_type = 'D'
THEN -- <0059>
LOCK TABLE reference_text_ctrlno_t IN EXCLUSIVE MODE;
-- Novg 04.01.2006
IF l_cur_ctrlno%ISOPEN
THEN
CLOSE l_cur_ctrlno;
END IF;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
EXCEPTION
-- Novg 04.01.2006
-- When No_data_found Then
-- Null;
WHEN OTHERS
THEN
ROLLBACK TO checkpono_begin;
l_bol_success := FALSE; -- <0057>
-- Write To Eventlog, That Problem Occurred In This Procedure
util_01_pck.log_prc (
pi_str_msg =>
c_str_prcname || ' ran on error for : ' || pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
-- ==========================================================================
-- Description : Removes Rows From Table Pay_advance_t With The Same
-- Ordernumber.
-- Author : Alexandra Schuetz
-- ==========================================================================
PROCEDURE rempia_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'RemPIA_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
BEGIN
-- Add Module Name To Module Hierarchy.
-- Dbms_output.Put_line('Rempia' || Pi_str_invno);
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT rempia_begin;
--
IF l_rec_invhead.order_no IS NOT NULL
THEN
-- If Order Number Exists, Remove From Pia-Table
util_01_pck.log_prc (
pi_str_msg =>
'Remove Payment In Advance for '
|| l_rec_invhead.sto_no
|| '/'
|| l_rec_invhead.order_no);
purc_02_pck.removepaymentinadvance_prc (
pi_str_compcode => pi_str_compcode,
pi_str_orderno => l_rec_invhead.order_no,
pi_str_stono => l_rec_invhead.sto_no);
-- What If This Ordernumber Is Not In Pia-Table?
END IF;
IF ( l_rec_acct.acct_stop_code = '95'
AND l_rec_invhead.comp_code = '1206')
THEN
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatrempiade);
ELSE
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatrempia);
END IF;
--
-- ==========================================================================
-- Description : Update Bs Parameters For Sending To Coda
-- Author : Paul Hynes
-- ==========================================================================
PROCEDURE updatebsparams_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'UpdateBSParams_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_str_criteria VARCHAR2 (200);
l_rec_bsrb bus_serv_run_param_base_v%ROWTYPE;
l_crs_bsrb bsrv_base_pck.typ_cur;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
l_str_criteria := 'comp_code = ''' || pi_str_compcode || '''';
bsrv_01_pck.getbusservparmsbase_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_crs_bsrb);
--
FETCH l_crs_bsrb INTO l_rec_bsrb;
--
bsrv_01_pck.createbusservparm_prc (
pi_str_bscode => l_rec_bsrb.bs_code,
pi_str_bsname => l_rec_bsrb.bs_name,
pi_int_bsrunseqno => l_rec_bsrb.bs_run_seq_no,
pi_str_compcode => pi_str_compcode,
pi_str_ctycode => l_rec_bsrb.cty_code,
pi_str_idrseventno => l_rec_bsrb.idrs_event_no,
pi_str_idrsrecagrno => l_rec_bsrb.idrs_rec_agr_no,
pi_dat_insdate => SYSDATE,
pi_dat_previousrundate => SYSDATE,
pi_dat_rundate => '',
pi_str_runstate => 'SU',
pi_str_stono => '');
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK TO rempia_begin;
l_bol_success := FALSE; -- <0057>
-- Write To Eventlog, That Problem Occurred In This Procedure
util_01_pck.log_prc (
pi_str_msg => c_str_prcname || ' ran on error.',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
-- 2011-07-14 Athe
-- Hack To Avoid Error Message In Correction Screen
--2014-04-07 Rabha1
-- Pbi000000040127 : Fixing The Bug To Fill The Work_invoice_info_master_t
Properly
--Scs.Cmpcode = Glob_01_pck.Getcompcode_fct Changed To Mcs.Cmpcode =
Glob_01_pck.Getcompcode_fct
-- 04_Sep-2020 Rabha1
-- Moved as global procedure so it can be used outside the pacakge
PROCEDURE fill_work_invoice_info_tmp_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE)
IS
BEGIN
-- rabha1 29-Sep-2020 Set comp_code to pi_str_compcode. Required when
called from outside this package
-- Otherwise will take 1801 as default comp_code
glob_01_pck.setcompcode_prc (pi_str_compcode);
--
DELETE FROM work_invoice_info_master_t
WHERE comp_code IN
(SELECT scs.cmpcode
FROM coda_server_t mcs, coda_server_t scs
WHERE mcs.cmpcode = pi_str_compcode
AND mcs.coda_master_flag = 'Y'
AND mcs.cty_code = scs.cty_code);
--
--rabha1 RIMS-2826_Wrong user number in RIMS Invoice correction screen
(PRB1000028883)
INSERT INTO work_invoice_info_t_tmp (acct_no,
acct_usr_no,
reg_date,
sto_no,
sales_date,
cash_no,
receipt_no,
order_no,
tot_cust_no,
control_no,
art_no,
sold_qty,
sold_amount,
inv_adm_cost_fr,
vat_obliged,
cur_code,
orig_invo,
cusdel_no,
seq_no_sort,
group_id_prod,
group_id_txt,
cusdel_type,
vat_code,
vat_rate,
error_flag,
comp_code,
inv_type,
wiit_rowid,
source_system,
orig_date)
(SELECT acct_no,
CASE
WHEN LENGTH (tot_cust_no) = 10 THEN acct_usr_no
ELSE 'XX'
END acct_usr_no,
reg_date,
sto_no,
sales_date,
cash_no,
receipt_no,
order_no,
tot_cust_no,
control_no,
art_no,
sold_qty,
sold_amount,
inv_adm_cost_fr,
vat_obliged,
cur_code,
orig_invo,
cusdel_no,
seq_no_sort,
group_id_prod,
group_id_txt,
cusdel_type,
vat_code,
vat_rate,
error_flag,
comp_code,
inv_type,
wiit_rowid,
source_system,
orig_date
FROM cre_work_invoice_info_t_tmp_v);
--
--rabha1 RIMS-2826_Wrong user number in RIMS Invoice correction screen
(PRB1000028883)
INSERT INTO work_invoice_info_master_t (acct_no,
acct_usr_no,
sto_no,
sales_date,
reg_date,
cash_no,
receipt_no,
order_no,
tot_cust_no,
comp_code,
inv_type,
cur_code,
cusdel_no,
art_no,
source_system,
orig_date)
(SELECT acct_no,
CASE
WHEN LENGTH (tot_cust_no) = 10 THEN acct_usr_no
ELSE 'XX'
END acct_usr_no,
sto_no,
sales_date,
reg_date,
cash_no,
receipt_no,
order_no,
tot_cust_no,
comp_code,
inv_type,
cur_code,
cusdel_no,
art_no,
source_system,
orig_date
FROM cre_work_invoice_info_master_v);
--
COMMIT;
END fill_work_invoice_info_tmp_prc;
--
-- ==========================================================================
-- Description : Accumulates The Amounts Per Source System
-- And Inserts Those Values Into Table Invoice_sums_t
-- Author : Sobha5
-- ==========================================================================
PROCEDURE accumsourcesystems_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'AccumSourceSystems_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_discartno invoice_row_v.art_no%TYPE;
--
l_bol_delsrcsys BOOLEAN := FALSE;
l_bol_invsrcsys BOOLEAN := FALSE;
l_bol_proces BOOLEAN := TRUE;
--
-- Matrix For Delivery And Sourcesystem
TYPE typ_rec_srcsysinfodel IS RECORD
(
source_system invoice_row_v.source_system%TYPE,
amount_incl invoice_row_v.sold_amount%TYPE,
amount_excl invoice_row_v.sold_amount_excl%TYPE,
amount_vat invoice_row_v.row_vat_amount%TYPE,
delivery invoice_row_v.cusdel_no%TYPE
);
l_tab_srcsysinfodel typ_tab_srcsysinfodel;
l_int_srcsysinfodel INTEGER := 0;
l_bol_srcsysdelnotexists BOOLEAN := TRUE;
--
-- Matrix For Sourcesystem
TYPE typ_rec_srcsysinfo IS RECORD
(
source_system invoice_row_v.source_system%TYPE,
amount_incl invoice_row_v.sold_amount%TYPE,
amount_excl invoice_row_v.sold_amount_excl%TYPE,
amount_vat invoice_row_v.row_vat_amount%TYPE
);
-- Dbms_output.Put_line('0');
-- Fetch All Different Deliveries For This Invoice
util_01_pck.log_prc (
pi_str_msg => 'Calculate Amounts per Source System');
invo_07_pck.getinvrowsdel_prc (pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
po_ref_cur => l_cur_invdel);
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;
IF l_rec_invrowsdel.art_no = l_str_discartno
THEN
IF l_bol_invdisc
THEN
l_bol_proces := TRUE;
ELSE
l_bol_proces := FALSE;
END IF;
END IF;
IF l_bol_proces
THEN
-- Find This Sourcesystem In The Matrix
l_int_srcsysinfodel := NVL (l_tab_srcsysinfodel.LAST, 0);
--
-- Now Accumulate Amount For This Delivery
l_int_srcsysinfodel := NVL (l_tab_srcsysinfodel.LAST, 0);
l_tab_srcsysinfodel (l_int_indextable).amount_excl :=
l_tab_srcsysinfodel
(l_int_indextable).amount_excl
+ NVL (l_rec_invrowsdel.sold_amount_excl, 0);
l_tab_srcsysinfodel (l_int_indextable).amount_vat :=
l_tab_srcsysinfodel
(l_int_indextable).amount_incl
- l_tab_srcsysinfodel
(l_int_indextable).amount_excl;
-- Dbms_output.Put_line('-------------');
--
Dbms_output.Put_line(L_tab_srcsysinfodel(L_int_indextable).Source_system || '
Gross: '||L_tab_srcsysinfodel(L_int_indextable).Amount_incl);
--
Dbms_output.Put_line(L_tab_srcsysinfodel(L_int_indextable).Source_system || ' Net:
'||L_tab_srcsysinfodel(L_int_indextable).Amount_excl);
--
Dbms_output.Put_line( L_tab_srcsysinfodel(L_int_indextable).Source_system || 'Vat:
'||L_tab_srcsysinfodel(L_int_indextable).Amount_vat);
END IF;
END LOOP;
--
l_bol_delsrcsys := TRUE;
l_bol_invsrcsys := TRUE;
END IF;
END LOOP articles;
-- Dbms_output.Put_line('After Articles');
--
-- Write To Invoice_sums_t Goods Per Delivery And Sourcesystem
IF l_bol_delsrcsys
THEN
-- Dbms_output.Put_line('Write Srcsys For This Delivery To
Invoice_sums_t');
--
l_int_srcsysinfodel := NVL (l_tab_srcsysinfodel.LAST, 0);
--
-- Insert A Line For This Sourcesystem
IF l_bol_srcsysnotexists
THEN
--
Dbms_output.Put_line('-----------------------------------------------');
-- Dbms_output.Put_line('First Srcsysdelivery For This
Sourcesystem!');
l_tab_srcsysinfo (l_int_srcsysinfo + 1).source_system :=
l_tab_srcsysinfodel (l_int_indextable1).source_system;
/*L_tab_srcsysinfo (L_int_srcsysinfo + 1).Vat_rate :=
L_tab_srcsysinfodel (L_int_indextable1).Vat_rate; */
l_tab_srcsysinfo (l_int_srcsysinfo + 1).amount_incl :=
l_tab_srcsysinfodel (l_int_indextable1).amount_incl;
l_tab_srcsysinfo (l_int_srcsysinfo + 1).amount_excl :=
l_tab_srcsysinfodel (l_int_indextable1).amount_excl;
l_tab_srcsysinfo (l_int_srcsysinfo + 1).amount_vat :=
l_tab_srcsysinfodel (l_int_indextable1).amount_vat;
-- Dbms_output.Put_line('Amountincl: '||
L_tab_srcsysinfo(L_int_goodsinfo + 1).Amount_incl);
-- Dbms_output.Put_line('Amountexcl: '||
L_tab_srcsysinfo(L_int_goodsinfo + 1).Amount_excl);
-- Dbms_output.Put_line('Amountvat : '||
L_tab_srcsysinfo(L_int_goodsinfo + 1).Amount_vat);
END IF;
END LOOP;
--
CLOSE l_cur_invdel;
-- Write To Invoice_sums_t
IF l_bol_invsrcsys
THEN
-- Dbms_output.Put_line('Now Write To Table');
l_int_srcsysinfo := NVL (l_tab_srcsysinfo.LAST, 0);
--
-- ==========================================================================
-- Description : Creates All Sums For All Invoices For A Certain Companycode
-- Author : Alexandra Schuetz
--Modified: RIMS-271 RASHA16 03/01/2022
-- ==========================================================================
FUNCTION createinvoices_fct (
pi_str_compcode IN work_invoice_info_v.comp_code%TYPE)
RETURN BOOLEAN
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'CreateInvoices_fct' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_cur_invhead invo_head_pck.typ_cur;
l_cur_invrow invo_invr_pck.typ_cur;
--
l_rec_invrow invoice_row_v%ROWTYPE;
l_rec_globpar acct_global_parameter_v%ROWTYPE;
--
l_str_criteria1 VARCHAR2 (500);
l_str_criteria2 VARCHAR2 (500);
--
l_dat_rundate invoice_header_t.inv_date%TYPE;
--
l_bol_access BOOLEAN := FALSE;
l_bol_invdisc BOOLEAN := FALSE;
--
ispchandl NUMBER;
--
eunexpectederroroccured EXCEPTION;
--RIMS-2459
l_str_payref o_invoice_t.PAYMENT_REF%TYPE;
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Set Current Module
appl_02_pck.setcurrentmodule_prc (pi_str_module => c_str_addmodule);
--
-- Hotfix To Enlarge Buffer Size For Dbms_output
-- Athe 2007-01-18
DBMS_OUTPUT.enable (1000000);
--
batch_01_pck.logbeginstandardinfo_prc (
pi_str_module => c_str_addmodule || ' : Create Invoices');
l_bol_success := TRUE; -- <0057>
--
-- Check Uses Access On Level One
l_bol_access :=
sec_01_pck.checkaccesslevelone_fct (
pi_str_package => c_str_pckname,
pi_str_procedure => c_str_prcname,
pi_str_user => glob_01_pck.getuser_fct);
--
IF l_bol_access
THEN
--
-- Get The Delay Days
util_01_pck.log_prc (
pi_str_msg => 'Get Parameters for ' || pi_str_compcode,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
glpa_01_pck.getaccountglobpar_prc (
pi_str_compcode => pi_str_compcode,
po_rec_glpa => l_rec_globpar);
--
-- Set The Invoicedate For This Run
util_01_pck.log_prc (
pi_str_msg => 'Setting RunDate',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
l_dat_rundate :=
TO_DATE (TO_CHAR (SYSDATE, 'RRRRMMDD'), 'RRRRMMDD');
-- Read From Currency_decimals_t The Number Of Decimals
curr_01_pck.getcurdec_prc (
pi_str_compcode => pi_str_compcode,
pi_str_idrstransaction => 'I0470001',
po_rec_curdec => l_rec_curdec);
--
-- Update Corrected Invoice Lines
util_01_pck.log_prc (
pi_str_msg => 'Updating Corrected Invoice Lines',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
updcorrinvlines_prc (pi_str_compcode => pi_str_compcode);
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Accumulate Article Lines With The Same Article Of One Delivery
util_01_pck.log_prc (
pi_str_msg => 'Accumulating Article Lines',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
accumartlines_prc (pi_str_compcode => pi_str_compcode);
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Get Criteria And Cursor For Invoice Headers
util_01_pck.log_prc (
pi_str_msg => 'Getting Invoice Heads',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
l_str_criteria1 :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_status IS NOT NULL'
|| ' AND inv_status NOT IN ('''
|| c_str_invstatrempia
|| ''','''
|| c_str_invstatprinted
|| ''','''
|| c_str_invstatponomiss
|| ''','''
|| c_str_invstatctrlnomiss
|| ''','''
|| c_str_invstatuniterr
|| ''','''
|| c_str_invstatnoprocessat
|| ''','''
|| c_str_invstatnoprocesshash
|| ''','''
|| c_str_invstatdelftold
|| ''','''
|| c_str_invstatpiaonly
|| ''','''
|| c_str_invstatrempiade /* RIMS-172 */
|| ''')';
'*====================================================*');
util_01_pck.log_prc (
pi_str_msg =>
'*** In loop of invoiceheaders. Inv_no : '
|| l_rec_invhead.inv_no);
-- Reset 100%Discount Flag For Next Invoice
l_bol_100percdiscount := FALSE;
/*
--
-- Check Invoice Whether It Contains Only Pia-
Article Or Not
If Checkinvstatus_fct (Pi_str_compcode =>
L_rec_invhead.Comp_code,
Pi_str_invno =>
L_rec_invhead.Inv_no,
Pi_str_invstatus =>
C_str_invstatcop
)
Then
Util_01_pck.Log_prc
(Pi_str_msg => 'Check Invoice
For Pia-Article-Only',
Pi_str_logtype =>
Util_01_pck.C_str_logtypeapplication
);
Checkforpiaonly_prc (Pi_str_compcode =>
Pi_str_compcode,
Pi_str_invno =>
L_rec_invhead.Inv_no
);
End If;
--
If Not L_bol_success
Then
-- <0057>
Raise Eunexpectederroroccured;
End If;
*/
--
DBMS_OUTPUT.put_line (
'Account_t says: ' || l_rec_acct.acct_no);
IF (l_rec_acct.vat_appl = 'Y')
AND (l_rec_invhead.inv_vat_obliged = 'Y')
THEN
l_bol_vatobliged := TRUE;
invo_06_pck.changeinvhead_prc (
pi_str_invno => l_rec_invhead.inv_no,
pi_str_compcode => l_rec_invhead.comp_code,
pi_str_invvatobliged => 'Y');
ELSE
l_bol_vatobliged := FALSE;
invo_06_pck.changeinvhead_prc (
pi_str_invno => l_rec_invhead.inv_no,
pi_str_compcode => l_rec_invhead.comp_code,
pi_str_invvatobliged => 'N');
END IF;
--
-- Set Inv_date, Inv_batch_date
IF checkinvstatus_fct (
pi_str_compcode => l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatcop)
THEN
util_01_pck.log_prc (
pi_str_msg => 'Setting Dates');
setdates_prc (
pi_str_invno => l_rec_invhead.inv_no,
pi_str_compcode => l_rec_invhead.comp_code,
pi_dat_invdate => l_dat_rundate);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Invoice Has Reached Last Day Of Hold-Time
IF ( NVL (l_rec_invhead.inv_date, l_dat_rundate)
+ NVL (l_rec_globpar.inv_delay_day, 0)) <=
SYSDATE
THEN
--
-- Set Netamounts Of Articles
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatdat)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Setting Article Net Amounts');
setartnetamts_prc (
pi_str_invno => l_rec_invhead.inv_no,
pi_str_compcode =>
l_rec_invhead.comp_code);
END IF;
--
IF NOT l_bol_success
THEN
-- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Calculate Total Discount And Deliveries' Discount
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatnet)
THEN
util_01_pck.log_prc (
pi_str_msg => 'Calculating Discount');
calcdisc_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
ELSE
l_bol_invdisc := FALSE;
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Freight
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatdisc)
THEN
util_01_pck.log_prc (
pi_str_msg => 'Calculating Freight');
calcfreight_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Transport
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatfreight)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Calculating Transport Costs');
calctransport_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Additional Services
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus =>
c_str_invstattransport)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Calculating Additional Services');
calcaddserv_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Assembly
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstataddserv)
THEN
util_01_pck.log_prc (
pi_str_msg => 'Calculating Assembly');
calcassembly_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Special Article 1
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatassembly)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Calculating Special Article 1');
calcspecart1_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Special Article 2
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatspecart1)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Calculating Special Article 2');
calcspecart2_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Special Article 3
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatspecart2)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Calculating Special Article 3');
calcspecart3_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Special Article 4
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatspecart3)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Calculating Special Article 4');
calcspecart4_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Goods
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatspecart4)
THEN
util_01_pck.log_prc (
pi_str_msg => 'Calculating Goods');
calcgoods_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
util_01_pck.log_prc (
pi_str_msg => 'Setting Invoice Type');
setinvoicetype_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Lines Per Source System
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatgoods)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Sum up lines per Source System');
accumsourcesystems_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Calculate The Average Discount Per Invoice
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatsrcsys)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Calculating Average Discount for
Invoice');
calcinvdiscproc_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Advance Payment
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatdiscproc)
THEN
--RIMS-230 TDS for INDIA
IF l_rec_invhead.comp_code = '3600'
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Calculating TDS Amount');
calctdspay_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
ELSE
util_01_pck.log_prc (
pi_str_msg =>
'Calculating Advance Payment');
calcadvpay_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Invoice Fee
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatadvpay)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Calculating Administration Costs');
calcadmcost_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sum Up Totals
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatadmcost)
THEN
util_01_pck.log_prc (
pi_str_msg => 'Calculating Totals');
calctotals_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Calculate Duedate
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstattotals)
THEN
util_01_pck.log_prc (
pi_str_msg => 'Calculating Due Date');
calcduedate_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Calculate Vat
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatduedate)
THEN
util_01_pck.log_prc (
pi_str_msg => 'Calculating VAT');
calcvat_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Assign New Invoice Numbers
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_invstatus => c_str_invstatvat)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Assigning New Invoice No.');
assignnewinvno_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_rec_invhead.inv_no);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
-- Dummy Account Cu9999999 Leads To Program Abort
Because Account Number
-- Is Missing Group Codes.
IF cfuncs_02_pck.condfunctistrue_fct ( -- Novg
<0056>
pi_str_functionality =>
'DUMMYACCOUNT',
pi_str_condition1 => 'ACCT_NO',
pi_str_value1 =>
l_rec_invhead.acct_no)
THEN
-- Set The Invoice Status To '6'
setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno =>
l_rec_invhead.inv_no,
pi_str_invstatus =>
c_str_invstatdummyacct);
l_bol_success := TRUE;
ELSE
RAISE eunexpectederroroccured;
END IF;
END IF;
--
-- If Variable L_str_invno Is Null, That Means That
There Has Occurred
-- Some Error In Any Of The Procedures Above. As We
Don'T Want To Hand Null
-- To The Following Procedure-Calls, We Fill In Any
Data (Old Inv_no)
IF l_str_invno IS NULL
THEN
l_str_invno := l_rec_invhead.inv_no;
END IF;
--
-- Checking Control No
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno,
pi_str_invstatus => c_str_invstatasgn)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Checking Control No'
|| l_rec_invhead.comp_code
|| l_str_invno);
checkctrlno_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Writing Vat-Specification
util_01_pck.log_prc (pi_str_msg => 'Test2',
pi_bol_logverbose => TRUE);
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno,
pi_str_invstatus => c_str_invstatctrlno)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Writing VAT-Specification');
insivs_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Sobha5:
-- Reduce Potential Credit By The Order Amount If An
Invoice For The Order Is Processed
-- And Potential Credit Is Activated For The Company
-- Invoice Data Was Sent Sent To Pam/Coda
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno,
pi_str_invstatus => c_str_invstativs)
THEN
IF l_rec_invhead.inv_type = 'D'
AND l_rec_invhead.order_no IS NOT NULL
AND cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality =>
'USEPOTENTIALCREDIT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 =>
l_rec_invhead.comp_code)
--kiras1 RIMS-2457 Release potential credit when
booking confirmation is received from SAP_invo_12_pck_body
AND NOT cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality =>
'RELPOTENTIALCREDIT',
pi_str_condition1 =>
'COMP_CODE',
pi_str_value1 =>
l_rec_invhead.comp_code) --
kiras1
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Reducing Potential Credit');
potcred_prc (
pi_str_invno => l_rec_invhead.inv_no,
pi_str_compcode =>
l_rec_invhead.comp_code);
ELSE
-- Set Invstatus To '7' Anyway
setinvstatus_prc (
pi_str_invno => l_rec_invhead.inv_no,
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invstatus =>
c_str_potentialcredithandled);
END IF;
END IF;
--
IF NOT l_bol_success
THEN
RAISE eunexpectederroroccured;
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
-- Remove Lines From Table Pay_advance_t For This
Ordernumber
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno,
pi_str_invstatus => c_str_invstatpono)
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Removing Data from Payment In Advance
Table');
rempia_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno);
END IF;
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
l_str_invno := '';
--
END IF;
END IF;
--
UPDATE o_invoice_t
SET PAYMENT_REF = l_str_payref
WHERE REFERENCE_IDENTIFIER =
l_rec_invhead.comp_code || '-' || l_rec_invhead.inv_no;
UPDATE o_invoice_t
SET PAYMENT_REF = null
WHERE REFERENCE_IDENTIFIER =
l_rec_invhead.comp_code || '-' || l_rec_invhead.inv_no and
order_number is not null;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
Util_01_Pck.Log_prc (
pi_str_Msg =>
'Payment reference not found for the invoice '
|| l_rec_invhead.inv_no);
NULL;
END;
--
util_01_pck.log_prc (
pi_str_msg => l_cur_invhead%ROWCOUNT || ' Invoices Treated',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
-- Close Cursor
CLOSE l_cur_invhead;
--
util_01_pck.log_prc (
pi_str_msg => 'Updating BS Parameters',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
updatebsparams_prc (pi_str_compcode => pi_str_compcode);
--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;
--
ELSE
util_01_pck.log_prc (
pi_str_msg =>
'Access Denied to ' || c_str_addmodule || ' for ' || USER,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
l_bol_success := FALSE;
--
END IF;
-- 2011-07-14 Athe
--
-- ==========================================================================
-- Description : Mark All Lines Of An Invoice Are As "On Hold".
-- Author : Andreas Theimer
-- ==========================================================================
PROCEDURE markinvoicehold_prc
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'MarkInvoiceHold_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_cur_wiih invo_wiih_pck.typ_cur;
l_rec_wiih work_invoice_hold_v%ROWTYPE;
l_cur_invoicelines invo_winv_pck.typ_cur;
l_rec_invoicelines work_invoice_info_v%ROWTYPE;
l_str_criteria VARCHAR2 (500) DEFAULT NULL;
l_str_errorflag work_invoice_info_v.error_flag%TYPE;
l_bol_access BOOLEAN;
l_str_stmt VARCHAR2 (1000);
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Set Current Module
appl_02_pck.setcurrentmodule_prc (pi_str_module => c_str_addmodule);
--
batch_01_pck.logbeginstandardinfo_prc (
pi_str_module => c_str_addmodule || ' : Set Invoices on "Hold"');
-- Check Uses Access On Level One
l_bol_access :=
sec_01_pck.checkaccesslevelone_fct (
pi_str_package => c_str_pckname,
pi_str_procedure => c_str_prcname,
pi_str_user => glob_01_pck.getuser_fct);
--
IF l_bol_access
THEN
-- Get Invoice Hold Signal
util_01_pck.log_prc (
pi_str_msg => 'Getting Invoice Hold signals',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
l_str_criteria := ' trans_type = ''HOLD''';
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND processed = '''
|| invo_46_pck.c_str_invholdnew
|| '''';
invo_46_pck.getworkinvoicehold_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_wiih);
LOOP
-- Fetching Invoice Hold Signal
FETCH l_cur_wiih INTO l_rec_wiih;
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND SALES_DATE = '
|| ''''
|| l_rec_wiih.sales_date
|| '''';
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND STO_NO = '
|| ''''
|| l_rec_wiih.sto_no
|| '''';
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND TOT_CUST_NO = '
|| ''''
|| l_rec_wiih.tot_cust_no
|| '''';
l_str_criteria :=
l_str_criteria || CHR (10) || ' AND INV_TYPE = ''D''';
IF invo_02_pck.foundinvoicework_fct (
pi_str_criteria => l_str_criteria)
THEN
-- Get Actual Error_flag
invo_02_pck.getinvoicework_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invoicelines);
LOOP
-- Fetching Invoice Process Signal
FETCH l_cur_invoicelines INTO l_rec_invoicelines;
--
util_01_pck.log_prc (
pi_str_msg =>
l_cur_wiih%ROWCOUNT || ' Invoices Marked "On Hold"',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
CLOSE l_cur_wiih;
--
-- Set Processed = 'Y'
l_str_criteria := ' trans_type = ''HOLD''';
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND processed = '''
|| invo_46_pck.c_str_invholdnew
|| '''';
invo_46_pck.changeworkinvoicehold_prc (
pi_str_processed => invo_46_pck.c_str_invholdprocessed,
pi_str_criteria => l_str_criteria);
ELSE
-- Raise Error
appl_01_pck.raise_prc (
pi_int_msgcode => 20000,
pi_str_msgtext =>
'#1'
|| glob_01_pck.getuser_fct
|| '#2'
|| c_str_prcname
|| '#3'
|| c_str_pckname,
pi_bol_log => FALSE,
pi_bol_raise => FALSE);
END IF;
--
-- ==========================================================================
-- Description : Mark All Lines Of An Invoice Are As "Unhold".
-- Author : Andreas Theimer
-- ==========================================================================
PROCEDURE markinvoiceunhold_prc
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'MarkInvoiceUnhold_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_cur_wiih invo_wiih_pck.typ_cur;
l_rec_wiih work_invoice_hold_v%ROWTYPE;
l_cur_invoicelines invo_winv_pck.typ_cur;
l_rec_invoicelines work_invoice_info_v%ROWTYPE;
l_str_criteria VARCHAR2 (500) DEFAULT NULL;
l_str_errorflag work_invoice_info_v.error_flag%TYPE;
l_bol_access BOOLEAN;
l_bol_found BOOLEAN := FALSE;
l_str_stmt VARCHAR2 (1000);
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Set Current Module
appl_02_pck.setcurrentmodule_prc (pi_str_module => c_str_addmodule);
--
batch_01_pck.logbeginstandardinfo_prc (
pi_str_module =>
c_str_addmodule || ' : Set Invoices on "Unhold"');
-- Check Uses Access On Level One
l_bol_access :=
sec_01_pck.checkaccesslevelone_fct (
pi_str_package => c_str_pckname,
pi_str_procedure => c_str_prcname,
pi_str_user => glob_01_pck.getuser_fct);
--
IF l_bol_access
THEN
-- Get Invoice Unhold Signal
util_01_pck.log_prc (
pi_str_msg => 'Getting Invoice Unhold signals',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
l_str_criteria := ' trans_type = ''UNHOLD''';
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND processed = '''
|| invo_46_pck.c_str_invholdnew
|| '''';
invo_46_pck.getworkinvoicehold_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_wiih);
LOOP
-- Fetching Invoice Unhold Signal
FETCH l_cur_wiih INTO l_rec_wiih;
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND SALES_DATE = '
|| ''''
|| l_rec_wiih.sales_date
|| '''';
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND STO_NO = '
|| ''''
|| l_rec_wiih.sto_no
|| '''';
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND TOT_CUST_NO = '
|| ''''
|| l_rec_wiih.tot_cust_no
|| '''';
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND instr (ERROR_FLAG, ''H'') > 0 ';
IF invo_02_pck.foundinvoicework_fct (
pi_str_criteria => l_str_criteria)
THEN
-- Remove Order No.
-- Invo_02_pck.Changeinvoicework_prc Cannot Be Used Because
Tapi Does Not Supprt Setting
-- An Integer To Null
l_str_stmt := 'UPDATE work_invoice_info_t';
l_str_stmt :=
l_str_stmt || CHR (10) || ' SET order_no = NULL';
l_str_stmt :=
l_str_stmt || CHR (10) || ' WHERE ' || l_str_criteria;
--
-- Remove "Hold" Mark
l_str_errorflag := 'H';
invo_02_pck.correctinvoicework_prc (
pi_str_errorchar => l_str_errorflag,
pi_str_criteria => l_str_criteria);
ELSE
invo_47_pck.createinvoiceholdnohit_prc (
pi_int_cashno => l_rec_wiih.cash_no,
pi_str_compcode => l_rec_wiih.comp_code,
pi_str_estimatedcompleteddate =>
l_rec_wiih.estimated_completed_date,
pi_dat_insdate => l_rec_wiih.ins_date,
pi_int_orderno => l_rec_wiih.order_no,
pi_int_receiptno => l_rec_wiih.receipt_no,
pi_str_salesdate => l_rec_wiih.sales_date,
pi_str_stono => l_rec_wiih.sto_no,
pi_str_totcustno => l_rec_wiih.tot_cust_no,
pi_str_transtype => l_rec_wiih.trans_type,
pi_dat_upddate => l_rec_wiih.upd_date);
END IF;
--
END LOOP;
--
util_01_pck.log_prc (
pi_str_msg =>
l_cur_wiih%ROWCOUNT || ' Invoices Marked "Unhold"',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
CLOSE l_cur_wiih;
--
-- Set Processed = '3'
l_str_criteria := ' trans_type = ''UNHOLD''';
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND processed = '''
|| invo_46_pck.c_str_invholdnew
|| '''';
invo_46_pck.changeworkinvoicehold_prc (
pi_str_processed => invo_46_pck.c_str_invholdunhold,
pi_str_criteria => l_str_criteria);
ELSE
-- Raise Error
appl_01_pck.raise_prc (
pi_int_msgcode => 20000,
pi_str_msgtext =>
'#1'
|| glob_01_pck.getuser_fct
|| '#2'
|| c_str_prcname
|| '#3'
|| c_str_pckname,
pi_bol_log => FALSE,
pi_bol_raise => FALSE);
END IF;
--
IF l_bol_access
THEN
-- Get Invoice Process Signal
util_01_pck.log_prc (
pi_str_msg => 'Getting Invoice Process signals',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
l_str_criteria := 'trans_type = ''INVOICE''';
invo_46_pck.getworkinvoicehold_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_wiih);
LOOP
-- Fetching Invoice Process Signal
FETCH l_cur_wiih INTO l_rec_wiih;
EXIT WHEN l_cur_wiih%NOTFOUND;
-- Get Invoices To Set On Unhold
l_str_criteria_start :=
' CASH_NO = ' || TO_CHAR (l_rec_wiih.cash_no);
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND RECEIPT_NO = '
|| TO_CHAR (l_rec_wiih.receipt_no);
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND SALES_DATE = '
|| ''''
|| l_rec_wiih.sales_date
|| '''';
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND STO_NO = '
|| ''''
|| l_rec_wiih.sto_no
|| '''';
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND TOT_CUST_NO = '
|| ''''
|| l_rec_wiih.tot_cust_no
|| '''';
--
l_str_criteria :=
l_str_criteria_start
|| CHR (10)
|| ' AND instr (ERROR_FLAG, ''H'') > 0 ';
IF invo_02_pck.foundinvoicework_fct (
pi_str_criteria => l_str_criteria)
THEN
-- Get Inv_type Of Invoices "On Hold"
invo_02_pck.getinvoicework_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invoicelines);
LOOP
-- Fetching Invoice Process Signal
FETCH l_cur_invoicelines INTO l_rec_invoicelines;
--
-- Set Inv_type Of All Invoicelines Accordingly
invo_02_pck.changeinvoicework_prc (
pi_str_invtype => l_str_invtype,
pi_str_criteria => l_str_criteria_start);
--
-- Remove "Hold" Mark
l_str_errorflag := 'H';
invo_02_pck.correctinvoicework_prc (
pi_str_errorchar => l_str_errorflag,
pi_str_criteria => l_str_criteria);
ELSE
invo_47_pck.createinvoiceholdnohit_prc (
pi_int_cashno => l_rec_wiih.cash_no,
pi_str_compcode => l_rec_wiih.comp_code,
pi_str_estimatedcompleteddate =>
l_rec_wiih.estimated_completed_date,
pi_dat_insdate => l_rec_wiih.ins_date,
pi_int_orderno => l_rec_wiih.order_no,
pi_int_receiptno => l_rec_wiih.receipt_no,
pi_str_salesdate => l_rec_wiih.sales_date,
pi_str_stono => l_rec_wiih.sto_no,
pi_str_totcustno => l_rec_wiih.tot_cust_no,
pi_str_transtype => l_rec_wiih.trans_type,
pi_dat_upddate => l_rec_wiih.upd_date);
END IF;
--
END LOOP;
--
util_01_pck.log_prc (
pi_str_msg =>
l_cur_wiih%ROWCOUNT || ' Invoices to be processed',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
CLOSE l_cur_wiih;
--
-- Set Processed = 'Y'
l_str_criteria := 'trans_type = ''INVOICE''';
invo_46_pck.changeworkinvoicehold_prc (
pi_str_processed => invo_46_pck.c_str_invholdprocessed,
pi_str_criteria => l_str_criteria);
ELSE
-- Raise Error
appl_01_pck.raise_prc (
pi_int_msgcode => 20000,
pi_str_msgtext =>
'#1'
|| glob_01_pck.getuser_fct
|| '#2'
|| c_str_prcname
|| '#3'
|| c_str_pckname,
pi_bol_log => FALSE,
pi_bol_raise => FALSE);
END IF;
--
-- ==========================================================================
-- Description : Unmark All Lines Of An Invoice To Be Processed In Combination
-- With An Order.
-- Author : Andreas Theimer
-- ==========================================================================
FUNCTION markinvoiceprocess_fct (pi_str_criteria IN VARCHAR2)
RETURN VARCHAR2
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'MarkInvoiceProcess_fct' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_cur_wiih invo_wiih_pck.typ_cur;
l_rec_wiih work_invoice_hold_v%ROWTYPE;
l_cur_invoicelines invo_winv_pck.typ_cur;
l_rec_invoicelines work_invoice_info_v%ROWTYPE;
l_str_invtype work_invoice_info_v.inv_type%TYPE
DEFAULT NULL;
l_str_salesdate work_invoice_info_v.sales_date%TYPE
DEFAULT NULL;
l_str_errorflag work_invoice_info_v.error_flag%TYPE;
l_str_criteria VARCHAR2 (500) DEFAULT NULL;
l_str_criteria_hold VARCHAR2 (500) DEFAULT NULL;
l_str_criteria_potc VARCHAR2 (500) DEFAULT NULL;
l_bol_access BOOLEAN;
l_bol_found BOOLEAN := FALSE;
l_str_stmt VARCHAR2 (1000);
--
-- Sobha5: Object Type For Potential Credit
l_obj_processpotcred o_processpotcred;
l_str_compcode potential_credit_v.comp_code%TYPE;
l_str_orderno potential_credit_v.order_no%TYPE;
l_str_totcustno work_invoice_info_v.tot_cust_no%TYPE;
l_str_acctno potential_credit_v.acct_no%TYPE;
l_str_acctusrno account_user_v.acct_usr_no%TYPE;
l_str_checkdigit acct_usr_no_v.check_digit%TYPE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Set Current Module
appl_02_pck.setcurrentmodule_prc (pi_str_module => c_str_addmodule);
--
batch_01_pck.logbeginstandardinfo_prc (
pi_str_module =>
c_str_addmodule || ' : Set Invoices on "Process"');
--
l_bol_success := TRUE;
-- Check Uses Access On Level One
l_bol_access :=
sec_01_pck.checkaccesslevelone_fct (
pi_str_package => c_str_pckname,
pi_str_procedure => c_str_prcname,
pi_str_user => glob_01_pck.getuser_fct);
--
IF l_bol_access
THEN
l_str_criteria := pi_str_criteria;
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND instr (ERROR_FLAG, ''H'') > 0 ';
l_str_criteria :=
l_str_criteria || CHR (10) || ' AND inv_type = ''D''';
--
IF invo_02_pck.foundinvoicework_fct (
pi_str_criteria => l_str_criteria)
THEN
-- Get Inv_type And Sales_date Of Mhs- Invoices "On Hold"
invo_02_pck.getinvoicework_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invoicelines);
LOOP
-- Sobha5: Fetching Invoice Type, Sales Date And Data For
Potential Credit
FETCH l_cur_invoicelines INTO l_rec_invoicelines;
--
-- Sobha5: Mark Invoice As 'One Invoice' In Column Orig_invo (As
Part Of Cr Ikea00335530)
invo_02_pck.changeinvoicework_prc (
pi_str_invtype => l_str_invtype,
pi_str_salesdate => l_str_salesdate,
pi_str_oneinv => 'Y',
pi_str_criteria => pi_str_criteria);
--
/*-- Remove "Hold" Mark
L_str_errorflag := 'H';
Invo_02_pck.Correctinvoicework_prc (
Pi_str_errorchar => L_str_errorflag,
Pi_str_criteria => L_str_criteria); */
--
l_str_criteria_hold := pi_str_criteria;
-- Sobha5:
l_str_criteria_hold :=
l_str_criteria_hold
|| CHR (10)
|| ' AND trans_type = ''HOLD''';
l_str_criteria_hold :=
l_str_criteria_hold
|| CHR (10)
|| ' AND processed IN ('''
|| invo_46_pck.c_str_invholdprocessed
|| ''', '''
|| invo_46_pck.c_str_invholdorderwait
|| ''')';
-- Mark Invoice As 'One Invoice'
invo_02_pck.changeinvoicework_prc (
pi_str_invtype => l_str_invtype,
pi_str_salesdate => l_str_salesdate,
pi_str_oneinv => 'Y',
pi_str_criteria => pi_str_criteria);
--
-- If Potential Credit Is Enabled, Process The One Invoice Only
-- If The Order Is Already Fulfilled (The Signal Was Received From
Isell)
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'USEPOTENTIALCREDIT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => l_str_compcode)
THEN
--
-- Initialize Potential Credit Object
purc_21_pck.initializeprocesspotcred_prc (
pio_obj_processpotcred => l_obj_processpotcred);
-- Get Account Number From Tot_cust_no
l_bol_success :=
glob_01_pck.custnotoacctno_fct (
pi_str_custno => l_str_totcustno,
po_str_acctno => l_str_acctno,
po_str_acctusrno => l_str_acctusrno,
po_str_checkdigit => l_str_checkdigit);
--
IF NOT l_bol_success
THEN
-- Raise Error
appl_01_pck.raise_prc (
pi_int_msgcode => 20000,
pi_str_msgtext =>
'#1'
|| glob_01_pck.getuser_fct
|| '#2'
|| c_str_prcname
|| '#3'
|| c_str_pckname,
pi_bol_log => FALSE,
pi_bol_raise => FALSE);
l_str_salesdate := NULL;
END IF;
--
l_str_criteria_potc :=
'comp_code = '''
|| l_str_compcode
|| ''' and order_no = '''
|| l_str_orderno
|| ''' and acct_no = '''
|| l_str_acctno
|| '''';
--
-- Get Potential Credit For Company, Account And Order
l_bol_found :=
purc_21_pck.getpotentialcredit_fct (
pi_str_criteria => l_str_criteria_potc,
po_obj_processpotcred => l_obj_processpotcred);
IF l_bol_found
THEN
-- Check If Order Is Already Fulfilled According To The
Potential Credit Information From Isell
IF l_obj_processpotcred.status = 'F'
THEN
-- Order Is Fulfilled, Remove "Hold" Mark
l_str_errorflag := 'H';
invo_02_pck.correctinvoicework_prc (
pi_str_errorchar => l_str_errorflag,
pi_str_criteria => l_str_criteria);
-- Set Processed = '1' (Order Received)
invo_46_pck.changeworkinvoicehold_prc (
pi_str_processed =>
invo_46_pck.c_str_invholdreceivedorder,
pi_str_criteria => l_str_criteria_hold);
ELSE
-- Order Is Not Fulfilled Yet
-- Do Not Remove "Hold" Mark
invo_02_pck.changeinvoicework_prc (
pi_str_errorflag => 'H',
pi_str_oneinv => 'Y',
pi_str_criteria => pi_str_criteria);
-- Set Processed = '5' (Order Received, But Not Yet
Fulfilled)
invo_46_pck.changeworkinvoicehold_prc (
pi_str_processed =>
invo_46_pck.c_str_invholdorderwait,
pi_str_criteria => l_str_criteria_hold);
--
l_str_salesdate := NULL;
END IF;
ELSE
-- No Potential Credit Found
--
-- Remove "Hold" Mark
l_str_errorflag := 'H';
invo_02_pck.correctinvoicework_prc (
pi_str_errorchar => l_str_errorflag,
pi_str_criteria => l_str_criteria);
-- Set Processed = '1' (Order Received)
invo_46_pck.changeworkinvoicehold_prc (
pi_str_processed =>
invo_46_pck.c_str_invholdreceivedorder,
pi_str_criteria => l_str_criteria_hold);
END IF;
ELSE
-- Potential Credit Is Not Enabled
--
-- Remove "Hold" Mark
l_str_errorflag := 'H';
invo_02_pck.correctinvoicework_prc (
pi_str_errorchar => l_str_errorflag,
pi_str_criteria => l_str_criteria);
-- Set Processed = '1' (Order Received)
invo_46_pck.changeworkinvoicehold_prc (
pi_str_processed =>
invo_46_pck.c_str_invholdreceivedorder,
pi_str_criteria => l_str_criteria_hold);
END IF;
ELSE
l_str_salesdate := NULL;
END IF;
--
ELSE
-- Raise Error
appl_01_pck.raise_prc (
pi_int_msgcode => 20000,
pi_str_msgtext =>
'#1'
|| glob_01_pck.getuser_fct
|| '#2'
|| c_str_prcname
|| '#3'
|| c_str_pckname,
pi_bol_log => FALSE,
pi_bol_raise => FALSE);
l_str_salesdate := NULL;
END IF;
--
-- ==========================================================================
-- Description : Get All Entries Where The Estimated Completed Date Is Passed
-- Author : Holger Jobmann
-- ==========================================================================
PROCEDURE markestcompdatepassed_prc
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'MarkEstCompDatePassed_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_cur_wiih invo_wiih_pck.typ_cur;
l_rec_wiih work_invoice_hold_v%ROWTYPE;
l_cur_invoicelines invo_winv_pck.typ_cur;
l_rec_invoicelines work_invoice_info_v%ROWTYPE;
l_str_criteria_start VARCHAR2 (500) DEFAULT NULL;
l_str_criteria VARCHAR2 (500) DEFAULT NULL;
l_str_errorflag work_invoice_info_v.error_flag%TYPE;
l_bol_access BOOLEAN;
l_bol_found BOOLEAN := FALSE;
l_str_stmt VARCHAR2 (1000);
l_str_today VARCHAR2 (6);
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Set Current Module
appl_02_pck.setcurrentmodule_prc (pi_str_module => c_str_addmodule);
--
batch_01_pck.logbeginstandardinfo_prc (
pi_str_module =>
c_str_addmodule
|| ' : Get Invoices where EstCompDate is passed');
-- Check Uses Access On Level One
l_bol_access :=
sec_01_pck.checkaccesslevelone_fct (
pi_str_package => c_str_pckname,
pi_str_procedure => c_str_prcname,
pi_str_user => glob_01_pck.getuser_fct);
--
IF l_bol_access
THEN
SELECT TO_CHAR (SYSDATE, 'yymmdd') INTO l_str_today FROM DUAL;
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND estimated_completed_date < '''
|| l_str_today
|| '''';
--
invo_46_pck.getworkinvoicehold_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_wiih);
LOOP
-- Fetching Invoice Process Signal
FETCH l_cur_wiih INTO l_rec_wiih;
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND SALES_DATE = '
|| ''''
|| l_rec_wiih.sales_date
|| '''';
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND STO_NO = '
|| ''''
|| l_rec_wiih.sto_no
|| '''';
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND TOT_CUST_NO = '
|| ''''
|| l_rec_wiih.tot_cust_no
|| '''';
--
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND instr (ERROR_FLAG, ''H'') > 0 ';
IF invo_02_pck.foundinvoicework_fct (
pi_str_criteria => l_str_criteria_start)
THEN
-- Remove "Hold" Mark
l_str_errorflag := 'H';
invo_02_pck.correctinvoicework_prc (
pi_str_errorchar => l_str_errorflag,
pi_str_criteria => l_str_criteria_start);
ELSE
invo_47_pck.createinvoiceholdnohit_prc (
pi_int_cashno => l_rec_wiih.cash_no,
pi_str_compcode => l_rec_wiih.comp_code,
pi_str_estimatedcompleteddate =>
l_rec_wiih.estimated_completed_date,
pi_dat_insdate => l_rec_wiih.ins_date,
pi_int_orderno => l_rec_wiih.order_no,
pi_int_receiptno => l_rec_wiih.receipt_no,
pi_str_salesdate => l_rec_wiih.sales_date,
pi_str_stono => l_rec_wiih.sto_no,
pi_str_totcustno => l_rec_wiih.tot_cust_no,
pi_str_transtype => l_rec_wiih.trans_type,
pi_dat_upddate => l_rec_wiih.upd_date);
END IF;
--
END LOOP;
--
util_01_pck.log_prc (
pi_str_msg =>
l_cur_wiih%ROWCOUNT
|| ' Invoices where EstCompDate is passed',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
CLOSE l_cur_wiih;
--
-- Remove Data From Work_invoice_hold_t
/*
L_str_criteria := ' Trans_type = ''Hold''';
L_str_criteria :=
L_str_criteria
|| Chr (10)
|| ' And Processed = '''
|| Invo_46_pck.C_str_invholdprocessed
|| '''';
L_str_criteria :=
L_str_criteria
|| Chr (10)
|| ' And Estimated_completed_date < ''' ||
L_str_today || '''';
*/
--
IF invo_46_pck.foundworkinvoicehold_fct (
pi_str_criteria => l_str_criteria)
THEN
invo_46_pck.changeworkinvoicehold_prc (
pi_str_processed =>
invo_46_pck.c_str_invholdestcompdatepassed,
pi_str_criteria => l_str_criteria);
END IF;
ELSE
-- Raise Error
appl_01_pck.raise_prc (
pi_int_msgcode => 20000,
pi_str_msgtext =>
'#1'
|| glob_01_pck.getuser_fct
|| '#2'
|| c_str_prcname
|| '#3'
|| c_str_pckname,
pi_bol_log => FALSE,
pi_bol_raise => FALSE);
END IF;
util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);
--
END markestcompdatepassed_prc;
--
-- ==========================================================================
-- Description : Get All Entries Where The Maximum Number Of Days To Wait For A
Service Order Has Passed
-- Author : Andreas Theimer
-- ==========================================================================
PROCEDURE markmaxnofdayspassed_prc (
pi_str_compcode IN work_invoice_info_v.comp_code%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'MarkMaxNofDaysPassed_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_cur_wiih invo_wiih_pck.typ_cur;
l_rec_wiih work_invoice_hold_v%ROWTYPE;
l_cur_invoicelines invo_winv_pck.typ_cur;
l_rec_invoicelines work_invoice_info_v%ROWTYPE;
l_str_criteria_start VARCHAR2 (500) DEFAULT NULL;
l_str_criteria_hold VARCHAR2 (500) DEFAULT NULL;
l_str_criteria VARCHAR2 (500) DEFAULT NULL;
l_str_invtype work_invoice_info_v.inv_type%TYPE
DEFAULT NULL;
l_str_errorflag work_invoice_info_v.error_flag%TYPE;
l_bol_access BOOLEAN;
l_bol_found BOOLEAN := FALSE;
l_str_stmt VARCHAR2 (1000);
l_str_today VARCHAR2 (6);
--
l_str_maxnofdays VARCHAR2 (30);
l_int_maxnofdays INTEGER;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Set Current Module
appl_02_pck.setcurrentmodule_prc (pi_str_module => c_str_addmodule);
--
batch_01_pck.logbeginstandardinfo_prc (
pi_str_module =>
c_str_addmodule
|| ' : Get Invoices where MaxNofDays is passed');
-- Check Uses Access On Level One
l_bol_access :=
sec_01_pck.checkaccesslevelone_fct (
pi_str_package => c_str_pckname,
pi_str_procedure => c_str_prcname,
pi_str_user => glob_01_pck.getuser_fct);
--
IF l_bol_access
THEN
l_int_maxnofdays := 1;
--
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'PROCESSINVOICEHOLD',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_str_maxnofdays :=
cfuncs_01_pck.getcondfuncs2_fct (
pi_str_functionality => 'INVOICEHOLDMAXDAYS',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode,
pi_str_condition2 => 'NOFDAYS');
--
SELECT TO_CHAR (SYSDATE, 'yymmdd') INTO l_str_today FROM DUAL;
--
l_str_criteria_hold := ' trans_type = ''HOLD''';
l_str_criteria_hold :=
l_str_criteria_hold
|| CHR (10)
|| ' AND comp_code = '''
|| pi_str_compcode
|| '''';
l_str_criteria_hold :=
l_str_criteria_hold
|| CHR (10)
|| ' AND processed IN ('''
|| invo_46_pck.c_str_invholdprocessed
|| ''', '''
|| invo_46_pck.c_str_invholdorderwait
|| ''')';
l_str_criteria_hold :=
l_str_criteria_hold
|| CHR (10)
|| ' AND to_date (sales_date, ''YYMMDD'') + '
|| l_int_maxnofdays
|| ' < trunc (sysdate)';
--
invo_46_pck.getworkinvoicehold_prc (
pi_str_criteria => l_str_criteria_hold,
po_ref_cur => l_cur_wiih);
LOOP
-- Fetching Invoice Process Signal
FETCH l_cur_wiih INTO l_rec_wiih;
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND SALES_DATE = '
|| ''''
|| l_rec_wiih.sales_date
|| '''';
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND STO_NO = '
|| ''''
|| l_rec_wiih.sto_no
|| '''';
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND TOT_CUST_NO = '
|| ''''
|| l_rec_wiih.tot_cust_no
|| '''';
l_str_criteria_start :=
l_str_criteria_start
|| CHR (10)
|| ' AND COMP_CODE = '
|| ''''
|| l_rec_wiih.comp_code
|| '''';
--
l_str_criteria :=
l_str_criteria_start
|| CHR (10)
|| ' AND instr (ERROR_FLAG, ''H'') > 0 ';
IF invo_02_pck.foundinvoicework_fct (
pi_str_criteria => l_str_criteria)
THEN
-- Remove "Hold" Mark
l_str_errorflag := 'H';
invo_02_pck.correctinvoicework_prc (
pi_str_errorchar => l_str_errorflag,
pi_str_criteria => l_str_criteria);
ELSE
invo_47_pck.createinvoiceholdnohit_prc (
pi_int_cashno => l_rec_wiih.cash_no,
pi_str_compcode => l_rec_wiih.comp_code,
pi_str_estimatedcompleteddate =>
l_rec_wiih.estimated_completed_date,
pi_dat_insdate => l_rec_wiih.ins_date,
pi_int_orderno => l_rec_wiih.order_no,
pi_int_receiptno => l_rec_wiih.receipt_no,
pi_str_salesdate => l_rec_wiih.sales_date,
pi_str_stono => l_rec_wiih.sto_no,
pi_str_totcustno => l_rec_wiih.tot_cust_no,
pi_str_transtype => l_rec_wiih.trans_type,
pi_dat_upddate => l_rec_wiih.upd_date);
END IF;
--
END LOOP;
--
util_01_pck.log_prc (
pi_str_msg =>
l_cur_wiih%ROWCOUNT
|| ' Invoices where MaxNofDays is passed',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--
CLOSE l_cur_wiih;
--
-- Remove Data From Work_invoice_hold_t
invo_46_pck.changeworkinvoicehold_prc (
pi_str_processed =>
invo_46_pck.c_str_invholdmaxnofdayspassed,
pi_str_criteria => l_str_criteria_hold);
END IF;
ELSE
-- Raise Error
appl_01_pck.raise_prc (
pi_int_msgcode => 20000,
pi_str_msgtext =>
'#1'
|| glob_01_pck.getuser_fct
|| '#2'
|| c_str_prcname
|| '#3'
|| c_str_pckname,
pi_bol_log => FALSE,
pi_bol_raise => FALSE);
END IF;
--
-- ==========================================================================
-- Description : Reduce Potential Credit By The Order Amount
-- Author : Andreas Theimer
-- ==========================================================================
PROCEDURE potcred_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'PotCred_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_bol_found BOOLEAN := TRUE;
l_int_rows INTEGER := 0;
--
l_rec_invhead invoice_header_v%ROWTYPE;
--
--
-- Get Number Of Delieveries For The Actual Invoice Transaction From
Invoice_sums_t. For Every Delivery
-- A Separate Record Is Created In Potential_credit_history_t, But Only
One Record
-- In Potential_credit_t
l_obj_processpotcred.nofdel :=
invo_04_pck.invsumgetnofdel_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
LOOP
FETCH l_cur_invsums INTO l_rec_invsums;
CLOSE l_cur_invsums;
LOOP
FETCH l_cur_invsums INTO l_rec_invsums;
-- Call To Purc_21_pck.Changepotentialcredit_prc
l_num_transid :=
purc_21_pck.changepotentialcredit_fct (
pi_obj_processpotcred => l_obj_processpotcred);
--
l_obj_processpotcred.nofdel :=
l_obj_processpotcred.nofdel - 1;
CLOSE l_cur_invsums;
--
ELSIF l_int_rows = 0
THEN
util_01_pck.log_prc (
pi_str_msg =>
( 'No Potential Credit found. Account'
|| l_rec_invhead.acct_no
|| 'Company'
|| pi_str_compcode
|| 'Order '
|| l_rec_invhead.order_no
|| '!'));
ELSE
util_01_pck.log_prc (
pi_str_msg =>
( 'More than one Potential Credit found. Account '
|| l_rec_invhead.acct_no
|| ', Company '
|| pi_str_compcode
|| ', Order '
|| l_rec_invhead.order_no
|| '!'));
END IF;
IF l_obj_processpotcred.status = 'E'
THEN
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'HALTONPOTCREDERROR',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
-- Set Invstatus To '8'
setinvstatus_prc (
pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
pi_str_invstatus => c_str_potentialcrediterror);
END IF;
END IF;
--
--RIMS 314 Book invoice details to SAP
PROCEDURE inssendsap_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'inssendsaptst_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_bol_access BOOLEAN;
l_rec_invhead invoice_header_v%ROWTYPE;
l_rec_invcur currency_decimals_v%ROWTYPE;
l_rec_invsum1 invoice_sums_v%ROWTYPE;
l_tab_condfunctmatrix cfuncs_01_pck.typ_condfunctmatrix;
l_str_refid VARCHAR2 (1000);
l_bol_executed BOOLEAN := FALSE;
l_account_no VARCHAR2 (20);
l_str_credebindicator VARCHAR2 (3);
--RIMS-2459
l_str_ref_id o_invoice_t.reference_identifier%TYPE;
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
-- RIMS-2510 rabha1 28-May-24 Exceptional configuration for Austria in CODA
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'INVDATESALESDATE',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
l_rec_invhead.inv_date := l_rec_invhead.sales_date;
-------RIMS-2571 Tharani 18-Jun-24
ELSIF cfuncs_02_pck.condfunctistrue_fct ( -- Novg <0056>
pi_str_functionality => 'INVDATEREGDATE',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => pi_str_compcode)
THEN
-- Sobha5:
-- Reg_date Should Now Be Present And Can Be Used Directly To Calculate
Due Date.
-- Otherwise The Reg_date Must Be Fetched From The I_invoice% Views Via
-- Invo_06_pck.Getinvregistrationdate_fct
IF l_rec_invhead.reg_date IS NOT NULL
THEN
l_rec_invhead.inv_date := l_rec_invhead.reg_date;
ELSE
l_rec_invhead.inv_date :=
invo_06_pck.getinvregistrationdate_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
END IF;
END IF;
--
-- Get sums for headerline and costlines
invo_04_pck.getinvsum_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode => 'TOTAL',
po_rec_isum => l_rec_invsum1);
--
curr_01_pck.getcurdec_prc (pi_str_compcode => pi_str_compcode,
pi_str_idrstransaction => 'SALECOMP',
po_rec_curdec => l_rec_invcur);
--
l_str_refid := l_rec_invhead.comp_code || '-' || l_rec_invhead.inv_no;
--
IF l_rec_invhead.inv_type = 'D'
THEN
l_str_credebindicator := 'DEB';
ELSIF l_rec_invhead.inv_type = 'C'
THEN
l_str_credebindicator := 'CRE';
END IF;
--
invo_58_pck.createinv_prc (
pi_str_referenceidentifier => l_str_refid,
pi_str_acctno =>
SUBSTR (l_rec_invhead.acct_no, 3, 10),
pi_str_bookingdocumenttype => 'INV',
pi_str_businesstype => 'RIMS',
pi_str_bucode => l_rec_invhead.sto_no,
pi_str_creditdebitindicator => l_str_credebindicator,
pi_str_curcode => l_rec_invcur.base_currency,
pi_int_invoicecuralloweddec => l_rec_invcur.nof_decimals,
pi_dat_invdate => l_rec_invhead.inv_date,
pi_dbl_invgrossamount => ABS (l_rec_invsum1.amount_incl),
pi_str_invno => l_rec_invhead.inv_no,
pi_str_ordernumber => l_rec_invhead.order_no,
pi_str_paymentref =>
CFUNCS_03_PCK.CalcPayRefDK_fct (
pi_str_InvNo => l_rec_invhead.inv_no), /*RIMS-308*/
pi_str_purchaseordernumber =>
SUBSTR (l_rec_invhead.pu_order_no, 1, 20),
pi_str_status => 'C');
--
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
END inssendsap_prc;
--
-- Created for DM433
PROCEDURE createinvtax_prc (
pi_str_compcode IN invoice_header_v.comp_code%TYPE,
pi_str_invno IN invoice_header_v.inv_no%TYPE)
IS
BEGIN
-- Insert data into o_invoice_tax_t table
INSERT INTO o_invoice_tax_t (INV_NO,
INV_STATUS,
COMP_CODE,
TOTAL_NET_AMT,
TOTAL_VAT_AMT,
VAT0_VATAMT,
VAT0_VATCODE,
VAT0_RATE,
AMOUNT0_EXCL,
VAT1_VATAMT,
VAT1_VATCODE,
VAT1_RATE,
AMOUNT1_EXCL,
VAT2_VATAMT,
VAT2_VATCODE,
VAT2_RATE,
AMOUNT2_EXCL,
VAT3_VATAMT,
VAT3_VATCODE,
VAT3_RATE,
AMOUNT3_EXCL,
VAT4_VATAMT,
VAT4_VATCODE,
VAT4_RATE,
AMOUNT4_EXCL,
VAT5_VATAMT,
VAT5_VATCODE,
VAT5_RATE,
AMOUNT5_EXCL,
VAT6_VATAMT,
VAT6_VATCODE,
VAT6_RATE,
AMOUNT6_EXCL,
VAT7_VATAMT,
VAT7_VATCODE,
VAT7_RATE,
AMOUNT7_EXCL,
VAT8_VATAMT,
VAT8_VATCODE,
VAT8_RATE,
AMOUNT8_EXCL,
VAT9_VATAMT,
VAT9_VATCODE,
VAT9_RATE,
AMOUNT9_EXCL)
SELECT inv_no,
inv_status,
comp_code,
total_net_Amt,
CAST (
NVL (vat0_vatamt, 0)
+ NVL (vat1_vatamt, 0)
+ NVL (vat2_vatamt, 0)
+ NVL (vat3_vatamt, 0)
+ NVL (vat4_vatamt, 0)
+ NVL (vat5_vatamt, 0)
+ NVL (vat6_vatamt, 0)
+ NVL (vat7_vatamt, 0)
+ NVL (vat8_vatamt, 0)
+ NVL (vat9_vatamt, 0)
AS NUMBER (15, 2)) TOTAL_VAT_AMT,
CAST (vat0_vatamt AS NUMBER (15, 2)) vat0_vatamt,
CAST (vat0_vatcode AS NUMBER (15, 2)) vat0_vatcode,
CAST (vat0_rate AS NUMBER (15, 2)) vat0_rate,
CAST (vat0_amount_Excl AS NUMBER (15, 2)) amount0_excl,
CAST (vat1_vatamt AS NUMBER (15, 2)) vat1_vatamt,
CAST (vat1_vatcode AS NUMBER (15, 2)) vat1_vatcode,
CAST (vat1_rate AS NUMBER (15, 2)) vat1_rate,
CAST (vat1_amount_Excl AS NUMBER (15, 2)) amount1_excl,
CAST (vat2_vatamt AS NUMBER (15, 2)) vat2_vatamt,
CAST (vat2_vatcode AS NUMBER (15, 2)) vat2_vatcode,
CAST (vat2_rate AS NUMBER (15, 2)) vat2_rate,
CAST (vat2_amount_Excl AS NUMBER (15, 2)) amount2_excl,
CAST (vat3_vatamt AS NUMBER (15, 2)) vat3_vatamt,
CAST (vat3_vatcode AS NUMBER (15, 2)) vat3_vatcode,
CAST (vat3_rate AS NUMBER (15, 2)) vat3_rate,
CAST (vat3_amount_Excl AS NUMBER (15, 2)) amount3_excl,
CAST (vat4_vatamt AS NUMBER (15, 2)) vat4_vatamt,
CAST (vat4_vatcode AS NUMBER (15, 2)) vat4_vatcode,
CAST (vat4_rate AS NUMBER (15, 2)) vat4_rate,
CAST (vat4_amount_Excl AS NUMBER (15, 2)) amount4_excl,
CAST (vat5_vatamt AS NUMBER (15, 2)) vat5_vatamt,
CAST (vat5_vatcode AS NUMBER (15, 2)) vat5_vatcode,
CAST (vat5_rate AS NUMBER (15, 2)) vat5_rate,
CAST (vat5_amount_Excl AS NUMBER (15, 2)) amount5_excl,
CAST (vat6_vatamt AS NUMBER (15, 2)) vat6_vatamt,
CAST (vat6_vatcode AS NUMBER (15, 2)) vat6_vatcode,
CAST (vat6_rate AS NUMBER (15, 2)) vat6_rate,
CAST (vat6_amount_Excl AS NUMBER (15, 2)) amount6_excl,
CAST (vat7_vatamt AS NUMBER (15, 2)) vat7_vatamt,
CAST (vat7_vatcode AS NUMBER (15, 2)) vat7_vatcode,
CAST (vat7_rate AS NUMBER (15, 2)) vat7_rate,
CAST (vat7_amount_Excl AS NUMBER (15, 2)) amount7_excl,
CAST (vat8_vatamt AS NUMBER (15, 2)) vat8_vatamt,
CAST (vat8_vatcode AS NUMBER (15, 2)) vat8_vatcode,
CAST (vat8_rate AS NUMBER (15, 2)) vat8_rate,
CAST (vat8_amount_Excl AS NUMBER (15, 2)) amount8_excl,
CAST (vat9_vatamt AS NUMBER (15, 2)) vat9_vatamt,
CAST (vat9_vatcode AS NUMBER (15, 2)) vat9_vatcode,
CAST (vat9_rate AS NUMBER (15, 2)) vat9_rate,
CAST (vat9_amount_Excl AS NUMBER (15, 2)) amount9_excl
FROM (SELECT *
FROM ( SELECT inv_no,
inv_status,
comp_code,
SUM (vat) vat,
MIN (vat_code) vat_code,
MIN (vat_incl) vat_incl,
SUM (amount_excl) amount_excl,
ROW_NUMBER ()
OVER (PARTITION BY inv_no, comp_code
ORDER BY vat_code ASC)
- 1 rn1
FROM (SELECT s.inv_no,
v.inv_status,
s.comp_code,
s.vat,
v.vat_code,
v.vat_incl,
s.amount_excl,
ROW_NUMBER ()
OVER (
PARTITION BY s.inv_no,
s.comp_code
ORDER BY vat_code ASC)
- 1 rn1
FROM rims.invoice_Sums_T s,
(SELECT inv_no,
inv_status,
comp_code,
sales_date,
vat_code,
vat_incl,
vat_excl,
start_date
FROM (SELECT h.inv_no,
h.inv_status,
h.comp_code,
h.sales_date,
v.vat_code,
v.vat_incl,
v.vat_excl,
v.start_date,
TRUNC (
LAG (
v.start_date)
OVER (
PARTITION BY o.inv_no,
v.comp_code,
v.vat_code
ORDER BY
vat_code DESC,
start_date DESC)
- 1
/ 24
/ 60
/ 60) nxt
FROM rims.o_invoice_t o,
rims.invoice_header_t
h,
rims.rims_vat_t v
WHERE o.inv_no =
h.inv_no
AND SUBSTR (
o.reference_identifier,
1,
4) =
h.comp_code
AND h.comp_code =
v.comp_code
AND h.inv_no =
pi_str_invno
AND h.comp_code =
pi_str_compcode)
WHERE TRUNC (sales_date) BETWEEN
TRUNC (
start_date)
AND NVL
(
nxt,
'31-dec-9999'))
v
WHERE s.cusdel_no = '0'
AND (s.sum_code NOT LIKE 'ECO%')
AND REGEXP_REPLACE (
CASE
WHEN s.sum_code =
'PIA'
THEN
(SELECT 'PIA'
||
ro.row_Vat_code
FROM invoice_row_t
ro
WHERE ro.inv_no
=
s.inv_no
AND
ro.comp_code =
s.comp_code
AND art_no =
'70000087'
-- special handling for PIA cases
)
ELSE
s.sum_code
END,
'[^0-9]',
'') =
v.vat_code
AND s.comp_code = v.comp_code
AND v.inv_no = s.inv_no
AND s.inv_no = pi_str_invno
AND s.comp_code = pi_str_compcode
AND EXISTS
(SELECT 1
FROM
rims.company_dest_send_t
D
WHERE s.comp_code =
d.comp_code
AND d.destination =
'SAP'
AND d.transaction =
'INVOICE'))
GROUP BY inv_no,
inv_status,
comp_code,
vat_code)
PIVOT (
SUM (vat) vatamt,
MIN (vat_code) vatcode,
MIN (vat_incl) rate,
MIN (amount_excl) amount_excl
FOR rn1
IN (0 AS VAT0,
1 AS VAT1,
2 AS VAT2,
3 AS VAT3,
4 AS VAT4,
5 AS VAT5,
6 AS VAT6,
7 AS VAT7,
8 AS VAT8,
9 AS VAT9)) goods,
(SELECT t_inv_no, t_comp_code, total_net_amt
FROM (SELECT s.inv_no t_inv_no,
s.comp_code t_comp_code,
s.amount_excl total_net_amt
FROM rims.invoice_sums_t s,
rims.o_invoice_t o
WHERE s.cusdel_no = '0'
AND s.sum_code = 'TOTAL'
AND o.inv_no = s.inv_no
AND SUBSTR (
o.reference_identifier,
1,
4) =
s.comp_code)) total
WHERE total.t_inv_no = goods.inv_no
AND total.t_comp_code = goods.comp_Code);
END;
--
--