0% found this document useful (0 votes)
9 views263 pages

Invo 12

The document defines a PL/SQL package body for invoice processing, including constants for various invoice statuses and functions to mark faulty invoices and update corrected invoice lines. It contains detailed logic for fetching invoice data, checking for errors, and updating the status of invoices based on specific criteria. The code also includes logging and error handling mechanisms to ensure proper tracking and management of invoice processing operations.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views263 pages

Invo 12

The document defines a PL/SQL package body for invoice processing, including constants for various invoice statuses and functions to mark faulty invoices and update corrected invoice lines. It contains detailed logic for fetching invoice data, checking for errors, and updating the status of invoices based on specific criteria. The code also includes logging and error handling mechanisms to ensure proper tracking and management of invoice processing operations.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 263

create or replace PACKAGE BODY invo_12_pck

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;

EXIT WHEN l_cur_invoiceparam%NOTFOUND;


-- Create Where-Clause To Retrieve All Lines For One Invoice
l_str_criteria :=
'sto_no = '''
|| l_str_stono
|| ''''
|| ' AND sales_date = '''
|| l_str_salesdate
|| ''''
|| ' AND TRIM(tot_cust_no) = TRIM('''
|| l_str_totcustno
|| ''')';

IF l_int_orderno IS NOT NULL


THEN
l_str_criteria :=
l_str_criteria
|| ' AND order_no = '''
|| l_int_orderno
|| '''';
ELSE
l_str_criteria :=
l_str_criteria
|| ' AND cash_no = '''
|| l_int_cashno
|| ''''
|| ' AND receipt_no = '''
|| l_int_receiptno
|| '''';
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;

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;

EXIT WHEN l_cur_invoicelines%NOTFOUND;

-- Check One By One Whether Or Not There Exists An Errortext.


IF l_rec_invoicelines.error_flag IS NOT NULL
THEN
-- Set Flag If Invoice Is Faulty
l_bol_error := TRUE;
-- Set Flag If Any Invoice Is Faulty
l_bol_found := TRUE;
END IF;
END LOOP;

--
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;

EXIT WHEN l_cur_invoiceparam%NOTFOUND;


-- Create Where-Clause To Retrieve All Lines For One Invoice
l_str_criteria :=
'sto_no = '''
|| l_str_stono
|| ''''
|| ' AND sales_date = '''
|| l_str_salesdate
|| ''''
|| ' AND TRIM(tot_cust_no) = TRIM('''
|| l_str_totcustno
|| ''')';

IF l_int_orderno IS NOT NULL


THEN
l_str_criteria :=
l_str_criteria
|| ' AND order_no = '''
|| l_int_orderno
|| '''';
ELSE
l_str_criteria :=
l_str_criteria
|| ' AND cash_no = '''
|| l_int_cashno
|| ''''
|| ' AND receipt_no = '''
|| l_int_receiptno
|| '''';
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;

--
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;

EXIT WHEN l_cur_invoicelines%NOTFOUND;

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

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END updcorrinvlines_prc;

--
-- ==========================================================================
-- 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
);

c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE


:= 'AccumulateArtLines_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
l_cur_objgroup invo_winv_pck.typ_cur;
l_cur_artlines invo_winv_pck.typ_cur;
l_rec_objgroup objectgroup;
l_rec_artlines work_invoice_info_v%ROWTYPE;
--
l_str_criteria VARCHAR2 (500) DEFAULT NULL;
--
l_str_artno work_invoice_info_v.art_no%TYPE;
l_int_cashno work_invoice_info_v.cash_no%TYPE;
l_int_controlno work_invoice_info_v.control_no%TYPE;
l_str_curcode work_invoice_info_v.cur_code%TYPE;
l_int_cusdelno work_invoice_info_v.cusdel_no%TYPE;
l_str_cusdeltype work_invoice_info_v.cusdel_type%TYPE;
l_str_errorflag work_invoice_info_v.error_flag%TYPE;
l_int_groupidprod work_invoice_info_v.group_id_prod%TYPE;
l_int_groupidtxt work_invoice_info_v.group_id_txt%TYPE;
l_str_invadmcostfr work_invoice_info_v.inv_adm_cost_fr%TYPE;
l_str_inv_type work_invoice_info_v.inv_type%TYPE;
l_int_orderno work_invoice_info_v.order_no%TYPE;
l_str_originvo work_invoice_info_v.orig_invo%TYPE;
l_int_receiptno work_invoice_info_v.receipt_no%TYPE;
l_str_regdate work_invoice_info_v.reg_date%TYPE;
l_str_salesdate work_invoice_info_v.sales_date%TYPE;
l_int_seqnosort work_invoice_info_v.seq_no_sort%TYPE;
l_dbl_soldamount work_invoice_info_v.sold_amount%TYPE;
l_int_soldqty work_invoice_info_v.sold_qty%TYPE;
l_str_stono work_invoice_info_v.sto_no%TYPE;
l_str_totcustno work_invoice_info_v.tot_cust_no%TYPE;
l_str_vatcode work_invoice_info_v.vat_code%TYPE;
l_str_vatobliged work_invoice_info_v.vat_obliged%TYPE;
l_dbl_vatrate work_invoice_info_v.vat_rate%TYPE;
-- Sobha5: Handle The Additional Rows Of Work_invoice_info_t
l_str_compcode work_invoice_info_v.comp_code%TYPE;
l_str_puorderno work_invoice_info_v.pu_order_no%TYPE;
l_str_origdate work_invoice_info_v.orig_date%TYPE;
l_str_sourcesystem work_invoice_info_v.source_system%TYPE;
l_str_transactiontype work_invoice_info_v.transaction_type%TYPE;
l_str_oneinv work_invoice_info_v.one_inv%TYPE;
l_num_lineno work_invoice_info_v.line_no%TYPE;
l_num_lineorderno work_invoice_info_v.line_order_no%TYPE;
l_str_artdesc work_invoice_info_v.art_desc%TYPE;
l_dbl_vatamount work_invoice_info_v.vat_amount%TYPE;
l_str_taxtype1 work_invoice_info_v.tax_type1%TYPE;
l_dbl_taxrate1 work_invoice_info_v.tax_rate1%TYPE;
l_str_taxcode1 work_invoice_info_v.tax_code1%TYPE;
l_dbl_taxamount1 work_invoice_info_v.tax_amount1%TYPE;
l_str_taxtype2 work_invoice_info_v.tax_type2%TYPE;
l_dbl_taxrate2 work_invoice_info_v.tax_rate2%TYPE;
l_str_taxcode2 work_invoice_info_v.tax_code2%TYPE;
l_dbl_taxamount2 work_invoice_info_v.tax_amount2%TYPE;
l_str_unitofmeasure work_invoice_info_v.unit_of_measure%TYPE;
l_dbl_netamount work_invoice_info_v.net_amount%TYPE;
l_str_invid work_invoice_info_v.inv_id%TYPE;
l_str_invtypecode work_invoice_info_v.inv_type_code%TYPE;
l_str_invtypedate work_invoice_info_v.inv_type_date%TYPE;
l_str_invisoffline work_invoice_info_v.inv_is_offline%TYPE;
l_str_originvid work_invoice_info_v.orig_inv_id%TYPE;
l_str_originvtypecode work_invoice_info_v.orig_inv_type_code%TYPE;
l_str_originvtypedate work_invoice_info_v.orig_inv_type_date%TYPE;
l_dbl_totnetamount work_invoice_info_v.tot_net_amount%TYPE;
l_dbl_tottaxamount work_invoice_info_v.tot_tax_amount%TYPE;
l_dbl_totgrossamount work_invoice_info_v.tot_gross_amount%TYPE;
--
l_sum_flag NUMBER (3) := 0;
l_dbl_artamt work_invoice_info_v.sold_amount%TYPE := 0;
l_int_artqty work_invoice_info_v.sold_qty%TYPE := 0;
l_dbl_unitprice work_invoice_info_v.unit_price%TYPE := 0;
l_dbl_vatamt work_invoice_info_v.vat_amount%TYPE := 0;
l_dbl_taxamt1 work_invoice_info_v.tax_amount1%TYPE := 0;
l_dbl_taxamt2 work_invoice_info_v.tax_amount2%TYPE := 0;
l_str_stmt VARCHAR2 (1000);
--
-- <Change Novg 2007.08.08 Tracking Invoice Data Back To The Input Data>
l_int_seq work_invoice_info_v.seq%TYPE DEFAULT NULL;
l_int_workinvrowseq work_invoice_info_v.seq%TYPE DEFAULT NULL;
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT accumartlines_begin;
--
-- Fetching Groups
util_01_pck.log_prc (
pi_str_msg => 'Fetching Groups',
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, '
|| 'cusdel_no, '
|| 'art_no, '
|| 'group_id_prod, '
|| 'group_id_txt, '
|| 'source_system, '
|| 'inv_id '
|| 'FROM work_invoice_info_v '
|| 'WHERE comp_code = '''
|| pi_str_compcode
|| ''''
|| 'GROUP BY sto_no, '
|| 'tot_cust_no, '
|| 'sales_date, '
|| 'cash_no, '
|| 'receipt_no, '
|| 'inv_type, '
|| 'order_no, '
|| 'cusdel_no, '
|| 'art_no, '
|| 'group_id_prod, '
|| 'group_id_txt, '
|| 'source_system,'
|| 'inv_id';

-- Open Cursor
OPEN l_cur_objgroup FOR l_str_stmt;

--
LOOP
FETCH l_cur_objgroup INTO l_rec_objgroup;

EXIT WHEN l_cur_objgroup%NOTFOUND;


-- Fetching Article Lines
l_str_criteria :=
'sto_no = '''
|| l_rec_objgroup.sto_no
|| ''''
|| ' AND TRIM(tot_cust_no) = TRIM('''
|| l_rec_objgroup.tot_cust_no
|| ''')'
|| ' AND sales_date = '''
|| l_rec_objgroup.sales_date
|| '''';

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.group_id_prod IS NOT NULL


THEN
l_str_criteria :=
l_str_criteria
|| ' AND group_id_prod = '
|| l_rec_objgroup.group_id_prod;
ELSE -- 0050 Alsc
l_str_criteria :=
l_str_criteria || ' AND group_id_prod IS NULL';
END IF;

IF l_rec_objgroup.group_id_txt IS NOT NULL


THEN
l_str_criteria :=
l_str_criteria
|| ' AND group_id_txt = '
|| l_rec_objgroup.group_id_txt;
ELSE -- 0050 Alsc
l_str_criteria :=
l_str_criteria || ' AND group_id_txt IS NULL';
END IF;

--
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;

--

util_01_pck.log_prc (pi_str_msg => l_str_criteria,


pi_bol_logverbose => TRUE);

-- <Change Novg 2007.08.08 Tracking Invoice Data Back To The Input


Data>
SELECT winv_seq.NEXTVAL INTO l_int_seq FROM DUAL;

invo_winv_pck.sel_prc (po_ref_cur => l_cur_artlines,


pi_str_criteria => l_str_criteria);

LOOP
FETCH l_cur_artlines INTO l_rec_artlines;

EXIT WHEN l_cur_artlines%NOTFOUND;


-- Set Flag For 'Sum Up!' If There Is More Than One Articleline
l_sum_flag := l_sum_flag + 1;
-- Sum
l_dbl_artamt := Nvl(l_dbl_artamt,0) +
Nvl(l_rec_artlines.sold_amount,0);
l_int_artqty := NVL(l_int_artqty,0) +
NVL(l_rec_artlines.sold_qty,0);
l_dbl_unitprice :=
NVL(l_dbl_unitprice,0) + NVL(l_rec_artlines.unit_price,0);
l_dbl_vatamt := NVL(l_dbl_vatamt,0) +
NVL(l_rec_artlines.vat_amount,0);
l_dbl_taxamt1 := NVL(l_dbl_taxamt1,0) +
NVL(l_rec_artlines.tax_amount1,0);
l_dbl_taxamt2 := NVL(l_dbl_taxamt2,0) +
NVL(l_rec_artlines.tax_amount2,0);

l_dbl_netamount :=
NVL (l_dbl_netamount, 0) + nvl(l_rec_artlines.net_amount,0);

-- Fill Insert-Variables For Outer Loop


l_str_artno := l_rec_artlines.art_no;
l_int_cashno := l_rec_artlines.cash_no;
l_int_controlno := l_rec_artlines.control_no;
l_str_curcode := l_rec_artlines.cur_code;
l_int_cusdelno := l_rec_artlines.cusdel_no;
l_str_cusdeltype := l_rec_artlines.cusdel_type;
l_str_errorflag := l_rec_artlines.error_flag;
l_int_groupidprod := l_rec_artlines.group_id_prod;
l_int_groupidtxt := l_rec_artlines.group_id_txt;
l_str_invadmcostfr := l_rec_artlines.inv_adm_cost_fr;
l_int_orderno := l_rec_artlines.order_no;
l_str_originvo := l_rec_artlines.orig_invo;
l_int_receiptno := l_rec_artlines.receipt_no;
l_str_regdate := l_rec_artlines.reg_date;
l_str_salesdate := l_rec_artlines.sales_date;
l_int_seqnosort := l_rec_artlines.seq_no_sort;
l_str_inv_type := l_rec_artlines.inv_type;
l_dbl_soldamount := l_dbl_artamt;
l_int_soldqty := l_int_artqty;
l_str_stono := l_rec_artlines.sto_no;
l_str_totcustno := l_rec_artlines.tot_cust_no;
l_str_vatcode := l_rec_artlines.vat_code;
l_str_vatobliged := l_rec_artlines.vat_obliged;
l_dbl_vatrate := l_rec_artlines.vat_rate;
l_str_compcode := l_rec_artlines.comp_code;
l_int_workinvrowseq := l_rec_artlines.seq;
-- Sobha5: Handle The Additional Rows Of Work_invoice_info_t
l_str_puorderno := l_rec_artlines.pu_order_no;
l_str_origdate := l_rec_artlines.orig_date;
l_str_sourcesystem := l_rec_artlines.source_system;
l_str_transactiontype := l_rec_artlines.transaction_type;
l_str_oneinv := l_rec_artlines.one_inv;
l_num_lineno := l_rec_artlines.line_no;
l_num_lineorderno := l_rec_artlines.line_order_no;
l_str_artdesc := l_rec_artlines.art_desc;
l_dbl_vatamount := l_dbl_vatamt;
l_str_taxtype1 := l_rec_artlines.tax_type1;
l_dbl_taxrate1 := l_rec_artlines.tax_rate1;
l_str_taxcode1 := l_rec_artlines.tax_code1;
l_dbl_taxamount1 := l_dbl_taxamt1;
l_str_taxtype2 := l_rec_artlines.tax_type2;
l_dbl_taxrate2 := l_rec_artlines.tax_rate2;
l_str_taxcode2 := l_rec_artlines.tax_code2;
l_dbl_taxamount2 := l_dbl_taxamt2;
l_str_unitofmeasure := l_rec_artlines.unit_of_measure;
l_str_invid := l_rec_artlines.inv_id;
l_str_invtypecode := l_rec_artlines.inv_type_code;
l_str_invtypedate := l_rec_artlines.inv_type_date;
l_str_invisoffline := l_rec_artlines.inv_is_offline;
l_str_originvid := l_rec_artlines.orig_inv_id;
l_str_originvtypecode := l_rec_artlines.orig_inv_type_code;
l_str_originvtypedate := l_rec_artlines.orig_inv_type_date;
l_dbl_totnetamount := l_rec_artlines.tot_net_amount;
l_dbl_tottaxamount := l_rec_artlines.tot_tax_amount;
l_dbl_totgrossamount := l_rec_artlines.tot_gross_amount;

-- <Change Novg 2007.08.08 Tracking Invoice Data Back To The Input


Data>
IF NOT invo_trck_pck.exswhere_fct (
pi_str_criteria =>
' Work_Inv_Seq = '
|| TO_CHAR (l_rec_artlines.seq))
THEN
invo_trck_pck.ins_prc (
pi_int_invrowseq => -1,
pi_int_iinvseq => l_rec_artlines.iinv_seq,
pi_int_workinvseq => l_int_seq -- Neue Sequence F?E Winv
);
ELSE
-- Replace Old Winv Id Through The New
invo_trck_pck.updwhere_prc (
pi_int_workinvseq => l_int_seq -- Neue Sequence F?E Winv
,
pi_str_criteria =>
' WORK_INV_SEQ = '''
|| l_rec_artlines.seq
|| '''');
END IF;
END LOOP;

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

invo_winv_pck.delwhere_prc (pi_str_criteria => l_str_criteria);


-- Now Insert New Line With The Sums Of Qty And Amount
util_01_pck.log_prc (
pi_str_msg => 'Inserting into 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;

-- Reset Flags And Sums


l_dbl_artamt := 0;
l_int_artqty := 0;
l_sum_flag := 0;
l_dbl_unitprice := 0;
l_dbl_vatamt := 0;
l_dbl_taxamt1 := 0;
l_dbl_taxamt2 := 0;
l_dbl_netamount := 0;
-- And The Temporary Line-Variables
l_str_artno := NULL;
l_int_cashno := NULL;
l_int_controlno := NULL;
l_str_curcode := NULL;
l_int_cusdelno := 0;
l_str_cusdeltype := NULL;
l_str_errorflag := NULL;
l_int_groupidprod := NULL;
l_int_groupidtxt := NULL;
l_str_invadmcostfr := NULL;
l_str_inv_type := NULL;
l_int_orderno := NULL;
l_str_originvo := NULL;
l_int_receiptno := NULL;
l_str_regdate := NULL;
l_str_salesdate := NULL;
l_int_seqnosort := 0;
l_dbl_soldamount := 0;
l_int_soldqty := 0;
l_str_stono := NULL;
l_str_totcustno := NULL;
l_str_vatcode := NULL;
l_str_vatobliged := NULL;
l_dbl_vatrate := 0;
-- Sobha5: Handle The Additional Rows Of Work_invoice_info_t
l_str_puorderno := NULL;
l_str_origdate := NULL;
l_str_sourcesystem := NULL;
l_str_transactiontype := NULL;
l_str_oneinv := NULL;
l_num_lineno := 0;
l_num_lineorderno := 0;
l_str_artdesc := NULL;
l_dbl_unitprice := 0;
l_dbl_vatamount := 0;
l_str_taxtype1 := NULL;
l_dbl_taxrate1 := 0;
l_str_taxcode1 := NULL;
l_dbl_taxamount1 := 0;
l_str_taxtype2 := NULL;
l_dbl_taxrate2 := 0;
l_str_taxcode2 := NULL;
l_dbl_taxamount2 := 0;
l_str_unitofmeasure := NULL;
l_str_invid := NULL;
l_str_invisoffline := NULL;
l_str_invtypecode := NULL;
l_str_invtypedate := NULL;
l_str_originvid := NULL;
l_str_originvtypecode := NULL;
l_str_originvtypedate := NULL;
l_dbl_totnetamount := 0;
l_dbl_tottaxamount := 0;
l_dbl_totgrossamount := 0;
END LOOP;

--
CLOSE l_cur_objgroup;

-- 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 accumartlines_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
|| ' in delivery '
|| l_int_cusdelno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END accumartlines_prc;

--
-- ==========================================================================
-- 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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END setdates_prc;

--
-- ==========================================================================
-- 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;

-- Remove Module From The Module Hierarchy.


appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
RETURN l_bol_invstatus;
--
END checkinvstatus_fct;

--
-- ==========================================================================
-- 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);

-- Set Return Value


IF l_rec_acct.vat_appl = glob_01_pck.c_str_yes
THEN
l_bol_vatappl := TRUE;
ELSE
l_bol_vatappl := FALSE;
END IF;

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

-- Set Return Value


IF l_rec_invhead.inv_vat_obliged = glob_01_pck.c_str_yes
THEN
l_bol_vatobl := TRUE;
ELSE
l_bol_vatobl := FALSE;
END IF;

--
-- 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_str_criteria VARCHAR2 (2000) DEFAULT NULL;

l_rec_acctcustgrp ACCOUNT_CUST_GROUP_V%ROWTYPE;
l_rec_GroupDiscountRate DISCOUNT_GROUP_MAPPING_V%ROWTYPE;
l_rec_invhead invoice_header_v%ROWTYPE;

l_bol_realdiscfound BOOLEAN := FALSE;


--
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 =>
'Group Discount applicable for : ' || l_rec_acct.acct_no);
--
l_str_criteria :=
'ACCT_NO = '''
|| l_rec_acct.acct_no
|| ''''
|| ' AND comp_code = '''
|| pi_str_compcode
|| ''''; --sushmitha chaged
util_01_pck.log_prc (
pi_str_msg =>
'Group Discount applicable for : '
|| 'CHECKING FOR ERROR LINE1');

--
--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');

-- Find the group descount to be applied based on the customer group


account and Comp Code
LOOP
FETCH l_cur_acctcustgrp INTO l_rec_acctcustgrp;
EXIT WHEN l_cur_acctcustgrp%NOTFOUND;

IF SUBSTR (l_rec_acctcustgrp.CODE, 1, 5) = '2CUCD'


THEN --2CUCD
util_01_pck.log_prc (
pi_str_msg =>
'Group Discount applicable for : '
|| 'CHECKING FOR ERROR LINE4');
util_01_pck.log_prc (
pi_str_msg =>
'Group Discount applicable for : '
|| l_rec_invhead.sales_date);

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');

IF ((po_dbl_discrate IS NOT NULL) AND (po_dbl_discrate > 0))


THEN
l_bol_realdiscfound := TRUE;
ELSE
po_dbl_discrate := 0;
l_bol_realdiscfound := FALSE;
END IF;

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 ';

--|| 'Inv_id '; -- Open Cursor

OPEN l_cur_invoiceparam FOR l_str_stmt;

--
<<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;

EXIT WHEN l_cur_invoicerows%NOTFOUND;


--
-- Counter To Update The Salerow-Number: At The End Of Each
-- Deliveryblock Leave Six Salerownumbers 'Free' (For Five
Additional
-- Discountrows And One For Any Later Needs)
IF l_int_cusdelno <> NVL (l_rec_invrowwork.cusdel_no, 1)
THEN
l_int_rowcount := l_int_rowcount + 1 + 6;
ELSE
l_int_rowcount := l_int_rowcount + 1;
END IF;

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

/* Sobha5: Not Needed, It Only Needs To Be Checked Whther An


Article Is Sold By The Metre
Invo_05_pck.Getartdesc_prc
(Pi_str_artno =>
L_rec_invrowwork.Art_no,
Pi_str_ctycode =>
L_str_ctycode,
Pi_str_langcode =>
L_rec_acct.Lang_code,
Po_rec_iart =>
L_rec_iart
); */
/*If Invo_05_pck.Foundartbythemetre_fct (
Pi_str_artno => L_rec_invrowwork.Art_no)
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;*/
--
-- Sobha5:
-- Validate The Unit Of Measure
IF l_rec_invrowwork.unit_of_measure <> 'EA'
THEN
IF l_rec_invrowwork.unit_of_measure <> 'MTR'
THEN
IF l_rec_invrowwork.unit_of_measure <> 'LTR'
THEN
IF l_rec_invrowwork.unit_of_measure <> 'INH'
THEN
IF l_rec_invrowwork.unit_of_measure <>
'MMT'
THEN
IF l_rec_invrowwork.unit_of_measure <>
'GRM'
THEN
IF l_rec_invrowwork.unit_of_measure <>
'KGM'
THEN
IF l_rec_invrowwork.unit_of_measure
<>
'CMQ'
THEN
l_str_validunit := 'N';
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;

--
-- 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;

/*Pip Cannot Orig_inv_type_code. So The Inv_type_code For


The Corrsponding
Debit Transaction Will Be Used. */
-- Call Invo_57_pck.Getinvtaxinvorig_prc
IF l_rec_invrowwork.orig_inv_id IS NOT NULL
THEN
invo_57_pck.getinvtaxinvorig_prc (
pi_str_compcode =>
l_rec_invrowwork.comp_code,
pi_str_invid => l_rec_invrowwork.orig_inv_id,
po_rec_taxi => l_rec_invtaxinv_orig);
--
l_rec_invtaxinv.orig_inv_type_code :=
l_rec_invtaxinv_orig.inv_type_code;
END IF;

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;

-- Prepare Headerinfo For Writing In Outer Loop


l_rec_invheader.inv_no := l_str_invnotemp;
l_rec_invheader.comp_code := l_rec_invrowwork.comp_code;
l_rec_invheader.acct_no := l_str_acctno;
/* Wrong Result If Tot_cust_no Contains More Than 3 Blanks
(E.G. In Testing)
** Replaced By Function
** Athe 2005-07-25
L_rec_invheader.Acct_usr_no := Substr(

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;

-- Hotfix To Restrict Control Numbers To Max. 4 Digits


-- Athe 2005-12-06
IF (l_rec_invrowwork.control_no > 9999)
THEN
l_rec_invheader.control_no := 9999;
ELSE
l_rec_invheader.control_no :=
l_rec_invrowwork.control_no;
END IF;

--
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_str_invstatus IS NOT NULL


THEN
l_rec_invheader.inv_status := l_str_invstatus;
ELSE
l_rec_invheader.inv_status := c_str_invstatus;
END IF;

--
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;

-- 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 (SQLERRM);
DBMS_OUTPUT.PUT_LINE (DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
-- Dbms_output.Put_line('Copyworktodest_begin');
ROLLBACK TO copyworktodest_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
|| ' 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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END copyworktodest_prc;

--
-- ==========================================================================
-- 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);

l_str_artno := NVL (l_rec_sart.art_no, '00000000');


ELSE
l_str_artno := '00000000';
END IF;
ELSE
-- If Invoice Has Only Special Articles
-- Athe 2005-10-13
IF invo_07_pck.invoiceonlyspecart_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno)
THEN
l_str_artno := '00000000';
util_01_pck.log_prc (
pi_str_msg => 'Invoice has only Special Articles');
ELSE
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);

l_str_artno := NVL (l_rec_sart.art_no, '00000000');


ELSE
l_str_artno := '00000000';
END IF;
END IF;
END IF;

-- Remove Module From The Module Hierarchy.


appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
RETURN l_str_artno;
--
END checkspecart_fct;

--
-- ==========================================================================
-- 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
|| '''';

invo_07_pck.getinvrows_prc (pi_str_criteria => l_str_criteria,


po_ref_cur => l_cur_invrows);

-- Dbms_output.Put_line('Check Piaonly: '||L_str_criteria);


-- Loop Through All Invoicerows And Add Up All Articles That Are Not
Advance Payments
-- And Separately Those For Advance Payments
LOOP
FETCH l_cur_invrows INTO l_rec_invrow;

EXIT WHEN l_cur_invrows%NOTFOUND;

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

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END checkforpiaonly_prc;

--
-- ==========================================================================
-- 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
|| '''';

invo_07_pck.getinvrows_prc (pi_str_criteria => l_str_criteria,


po_ref_cur => l_cur_invrows);

LOOP
FETCH l_cur_invrows INTO l_rec_invrow;

EXIT WHEN l_cur_invrows%NOTFOUND;

/*
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;

-- Set Invstatus To 'R'


setinvstatus_prc (pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
pi_str_invstatus => c_str_invstatnet);
--
-- 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('Setartnetamts_begin');
ROLLBACK TO setartnetamts_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END setartnetamts_prc;

--
-- ==========================================================================
-- 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;

IF (po_dbl_discrate <> 0) AND (po_dbl_discrate IS NOT NULL)


THEN
l_bol_realdiscfound := TRUE;
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;
*/

-- Remove Module From The Module Hierarchy.


appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
RETURN l_bol_realdiscfound;
--
END checkcustdisc_fct;

--
-- ==========================================================================
-- 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
);

TYPE typ_rec_vatinfo IS RECORD


(
vat_code invoice_row_v.row_vat_code%TYPE,
vat_rate invoice_row_v.row_vat%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
);

TYPE typ_tab_vatinfodel IS TABLE OF typ_rec_vatinfodel NOT NULL


INDEX BY BINARY_INTEGER;

TYPE typ_tab_vatinfo IS TABLE OF typ_rec_vatinfo NOT NULL


INDEX BY BINARY_INTEGER;

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');

/*-- -- Removed as per RIMS 433 SWVAR1


26-May-2023
-- Does There Exist A Customer'S Discount?
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;

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

-- <START> RIMS-433 SWVAR1 26-May-2023


--
-- Check if Group Customer Discount active for the company
--RIMS-1138 rasha16

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;

--

-- <END> RIMS-433 SWVAR1 26-May-2023


--
-- Get Country Code To Get The Eco-Fee, If There Is One
l_str_ctycode :=
glob_01_pck.getctycode_fct (
pi_str_compcode => pi_str_compcode);
--
-- 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);

-- 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;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Dbms_output.Put_line('2');
-- Dbms_output.Put_line('Current Delivery Is '||L_str_cusdelno);
-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

-- Dbms_output.Put_line('3');
--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;

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

IF l_dbl_ecofeeamountexcl IS NOT NULL


THEN
-- Eco-Fee For All Items Of The Articleline
l_dbl_ecofeeamountexcl :=
l_dbl_ecofeeamountexcl
* l_rec_invrowsdel.sold_qty;
-- rabha1 25-Jun-24 RIMS-2573 Fees Calculation and
Reporting for France in RIMS. Tax on eco fee removed
l_dbl_ecofeeamountincl := l_dbl_ecofeeamountexcl;
END IF;

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

FOR l_int_indextable IN 1 .. l_int_vatinfodel


LOOP
IF (l_tab_vatinfodel (l_int_indextable).vat_code =
l_rec_invrowsdel.row_vat_code)
AND (l_tab_vatinfodel (l_int_indextable).delivery =
l_rec_invrowsdel.cusdel_no)
THEN
l_bol_vatdelnotexists := FALSE;
END IF;
END LOOP;

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

FOR l_int_indextable IN 1 .. l_int_vatinfodel


LOOP
-- Dbms_output.Put_line('9');
IF (l_tab_vatinfodel (l_int_indextable).vat_code =
l_rec_invrowsdel.row_vat_code)
AND (l_tab_vatinfodel (l_int_indextable).delivery =
l_rec_invrowsdel.cusdel_no)
THEN
l_tab_vatinfodel
(l_int_indextable).goods_amount_incl :=
l_tab_vatinfodel
(l_int_indextable).goods_amount_incl
+ l_rec_invrowsdel.sold_amount;

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;

-- Close Cursor For Articles


CLOSE l_cur_invrowsdel;

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

FOR l_int_indextable IN 1 .. l_int_vatinfodel


LOOP
IF (l_tab_vatinfodel (l_int_indextable).delivery =
l_str_cusdelno)
THEN
-- Dbms_output.Put_line('Vatcode : '||
L_tab_vatinfodel(L_int_indextable).Vat_code);
-- Dbms_output.Put_line('Goodsamount Incl: '||
L_tab_vatinfodel(L_int_indextable).Goods_amount_incl);
-- Dbms_output.Put_line('Goodsamount Excl: '||
L_tab_vatinfodel(L_int_indextable).Goods_amount_excl);
l_dbl_goodsamtdelincl :=
l_dbl_goodsamtdelincl
+ l_tab_vatinfodel
(l_int_indextable).goods_amount_incl;
l_dbl_goodsamtdelexcl :=
l_dbl_goodsamtdelexcl
+ l_tab_vatinfodel
(l_int_indextable).goods_amount_excl;
--
-- Accumulated Goods Amounts Excluding Eco-Fee
l_dbl_goodsamtdelnoecoincl :=
l_dbl_goodsamtdelnoecoincl
+ l_tab_vatinfodel
(l_int_indextable).goods_amount_noeco_incl;
l_dbl_goodsamtdelnoecoexcl :=
l_dbl_goodsamtdelnoecoexcl
+ l_tab_vatinfodel
(l_int_indextable).goods_amount_noeco_excl;
END IF;
END LOOP;

-- 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;

FOR l_int_indextable IN 1 .. l_int_vatinfodel


LOOP
-- Dbms_output.Put_line('14');
IF (l_tab_vatinfodel (l_int_indextable).delivery =
l_str_cusdelno)
THEN
-- Dbms_output.Put_line('15');
-- Calculate Discount Incl For This Delivery And
Vatcode
-- ... But Only If There Is Some Goods To Substract
Discount From
IF l_tab_vatinfodel
(l_int_indextable).goods_amount_incl =
0
THEN -- <0039> Novg
-- This Means There Exists Discount But No Goods.
This Invoice
-- Should Not Be Processed Further!!!
setinvstatzerototals;
RETURN;
--
L_tab_vatinfodel(L_int_indextable).Disc_amount_incl := 0; -- 0042 Alsc
ELSE
--
L_tab_vatinfodel(L_int_indextable).Goods_amount_incl <> 0
-- All Discount Is Calculated Without Eco-Fee
l_tab_vatinfodel
(l_int_indextable).disc_amount_incl :=
( l_tab_vatinfodel
(l_int_indextable).goods_amount_noeco_incl
/ l_dbl_goodsamtdelnoecoincl)
* l_dbl_discamtdel;

--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_int_indextable).disc_amount_incl) -- RIMS-1138 added - l_tab_vatinfodel


(l_int_indextable).disc_amount_incl to subsctract the discount article
/ l_dbl_goodsamtdelnoecoincl)
* l_dbl_discgroupcustamtdel;

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;

-- Dbms_output.Put_line('Discountincl For This Delivery


And Vatcode '||L_tab_vatinfodel(L_int_indextable).Vat_code||
-- ' Is '||
To_char(L_tab_vatinfodel(L_int_indextable).Disc_amount_incl));
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)));
-- Dbms_output.Put_line('Discountexcl For This Delivery
And Vatcode '||L_tab_vatinfodel(L_int_indextable).Vat_code||
-- ' Is '||
To_char(L_tab_vatinfodel(L_int_indextable).Disc_amount_excl));
ELSE
l_tab_vatinfodel
(l_int_indextable).disc_amount_excl :=
l_tab_vatinfodel
(l_int_indextable).disc_amount_incl;
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;

-- 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;

--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;

-- Accumulate For This Invoice


l_dbl_discamtincl :=
l_dbl_discamtincl
+ l_tab_vatinfodel
(l_int_indextable).disc_amount_incl;
l_dbl_discamtexcl :=
l_dbl_discamtexcl
+ l_tab_vatinfodel
(l_int_indextable).disc_amount_excl;
END IF;
END LOOP;

-- 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;

-- Create New Invoicerow And Insert It

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

FOR l_int_indextable IN 1 .. l_int_vatinfodel


LOOP
-- Dbms_output.Put_line('25');
IF (l_tab_vatinfodel (l_int_indextable).delivery =
l_str_cusdelno)
THEN
-- Dbms_output.Put_line('26');
-- Calculate Discount Incl For This Delivery And
Vatcode
-- On Goods Amount Excluding Eco-Fee
IF l_tab_vatinfodel
(l_int_indextable).goods_amount_incl =
0
THEN -- <0039> Novg
l_tab_vatinfodel
(l_int_indextable).disc_amount_incl :=
0;
ELSE
--
L_tab_vatinfodel(L_int_indextable).Goods_amount_incl <> 0
IF l_dbl_goodsamtdelincl = 0
THEN
setinvstatzerototals;
RETURN;
ELSE
-- All Discount Is Calculated Without Eco-Fee
l_tab_vatinfodel
(l_int_indextable).disc_amount_incl :=
( l_tab_vatinfodel (

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;

--rasha1 RIMS-2823 ECO Fee not showing in INVOICE_SUMS_T


l_int_vatinfodel := NVL (l_tab_vatinfodel.LAST, 0);

FOR l_int_indextable IN 1 .. l_int_vatinfodel


LOOP
-- Dbms_output.Put_line('31');
-- Dbms_output.Put_line('Matrixdelivery: '||
L_tab_vatinfodel(L_int_indextable).Delivery);
IF (l_tab_vatinfodel (l_int_indextable).delivery =
l_str_cusdelno)
THEN
-- Eco-Fee For Delivery
IF l_bol_ecofeecty
THEN
Util_01_Pck.Log_prc (
pi_str_Msg =>
'Required Message for l_bol_ecofeecty in 1st
place is true');
l_dbl_ecofeeamountexcl :=
l_tab_vatinfodel
(l_int_indextable).goods_amount_excl
- l_tab_vatinfodel
(l_int_indextable).goods_amount_noeco_excl;
l_dbl_ecofeeamountincl :=
l_tab_vatinfodel
(l_int_indextable).goods_amount_incl
- l_tab_vatinfodel
(l_int_indextable).goods_amount_noeco_incl;
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 =>
'ECOFEEDEL'
|| l_tab_vatinfodel
(l_int_indextable).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 IF;
END LOOP;

-- Write All Discountlines Per Delivery To Invoice_sums_t


-- If There Exists Any Discount-Per-Delivery
l_int_vatinfodel := NVL (l_tab_vatinfodel.LAST, 0);

FOR l_int_indextable IN 1 .. l_int_vatinfodel


LOOP
-- Dbms_output.Put_line('31');
-- Dbms_output.Put_line('Matrixdelivery: '||
L_tab_vatinfodel(L_int_indextable).Delivery);
IF (l_tab_vatinfodel (l_int_indextable).delivery =
l_str_cusdelno)
THEN
-- Dbms_output.Put_line('32');
IF l_bol_invdiscdel OR l_bol_custdisc
THEN
-- Dbms_output.Put_line('32.5');
-- Discount For Delivery
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 =>
'DISCOUNTDEL'
|| l_tab_vatinfodel
(l_int_indextable).vat_code,
pi_dbl_amountexcl =>
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
(-1)
* l_tab_vatinfodel (

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_indextable1 IN 1 .. l_int_vatinfodel


LOOP
--
-- Dbms_output.Put_line('36');
l_int_indextable2max := NVL (l_tab_vatinfo.LAST, 0);
l_bol_vatinfonotexists := TRUE;

--
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;

-- Accumulate Goods Amounts Excluding Eco-Fee


-- Dbms_output.Put_line('Goodsamounts Excluding Eco-Fee Per
Vatcode '||To_char(L_int_indextable2)||' Are Accumulated');
l_tab_vatinfo
(l_int_indextable2).goods_amount_noeco_incl :=
l_tab_vatinfo
(l_int_indextable2).goods_amount_noeco_incl
+ l_tab_vatinfodel
(l_int_indextable1).goods_amount_noeco_incl;
--
l_tab_vatinfo
(l_int_indextable2).goods_amount_noeco_excl :=
l_tab_vatinfo
(l_int_indextable2).goods_amount_noeco_excl
+ l_tab_vatinfodel
(l_int_indextable1).goods_amount_noeco_excl;
--
-- Accumulate Goods Amounts
-- Dbms_output.Put_line('Goodsamounts Per Vatcode '||
To_char(L_int_indextable2)||' Are Accumulated');
l_tab_vatinfo (l_int_indextable2).goods_amount_incl :=
l_tab_vatinfo (l_int_indextable2).goods_amount_incl
+ l_tab_vatinfodel
(l_int_indextable1).goods_amount_incl;
--
l_tab_vatinfo (l_int_indextable2).goods_amount_excl :=
l_tab_vatinfo (l_int_indextable2).goods_amount_excl
+ l_tab_vatinfodel
(l_int_indextable1).goods_amount_excl;
--
l_tab_vatinfo (l_int_indextable2).goods_amount_vat :=
l_tab_vatinfo (l_int_indextable2).goods_amount_vat
+ l_tab_vatinfodel
(l_int_indextable1).goods_amount_vat;
--
l_bol_vatinfonotexists := FALSE;
END IF;
END LOOP;
-- Dbms_output.Put_line('39');
--
-- Insert A Line For This Vatcode
IF l_bol_vatinfonotexists
THEN
-- Dbms_output.Put_line('39.5');
l_tab_vatinfo (l_int_indextable2max + 1).vat_code :=
l_tab_vatinfodel (l_int_indextable1).vat_code;
l_tab_vatinfo (l_int_indextable2max + 1).vat_rate :=
l_tab_vatinfodel (l_int_indextable1).vat_rate;
l_tab_vatinfo (l_int_indextable2max + 1).disc_amount_incl :=
l_tab_vatinfodel (l_int_indextable1).disc_amount_incl;
l_tab_vatinfo (l_int_indextable2max + 1).disc_amount_excl :=
l_tab_vatinfodel (l_int_indextable1).disc_amount_excl;
l_tab_vatinfo (l_int_indextable2max + 1).disc_amount_vat :=
l_tab_vatinfodel (l_int_indextable1).disc_amount_vat;
l_tab_vatinfo (l_int_indextable2max + 1).goods_amount_incl :=
l_tab_vatinfodel (l_int_indextable1).goods_amount_incl;
l_tab_vatinfo (l_int_indextable2max + 1).goods_amount_excl :=
l_tab_vatinfodel (l_int_indextable1).goods_amount_excl;
l_tab_vatinfo (l_int_indextable2max + 1).goods_amount_vat :=
l_tab_vatinfodel (l_int_indextable1).goods_amount_vat;
l_tab_vatinfo (l_int_indextable2max +
1).goods_amount_noeco_incl :=
l_tab_vatinfodel
(l_int_indextable1).goods_amount_noeco_incl;
l_tab_vatinfo (l_int_indextable2max +
1).goods_amount_noeco_excl :=
l_tab_vatinfodel
(l_int_indextable1).goods_amount_noeco_excl;
END IF;
END LOOP;

-- 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;

FOR l_int_indextable2 IN 1 .. l_int_vatinfo


LOOP
-- Dbms_output.Put_line('41');
IF l_bol_invdisc
THEN
-- Dbms_output.Put_line('42');
-- Write To Table Invoice_sums_t The Discount Per Invoice
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'DISCOUNT'
|| l_tab_vatinfo (l_int_indextable2).vat_code,
pi_dbl_amountexcl =>
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
(-1)
* l_tab_vatinfo
(l_int_indextable2).disc_amount_excl),
pi_dbl_amountincl =>
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
(-1)
* l_tab_vatinfo
(l_int_indextable2).disc_amount_incl),
pi_dbl_vat =>
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
(-1)
* l_tab_vatinfo
(l_int_indextable2).disc_amount_incl)
- roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
(-1)
* l_tab_vatinfo
(l_int_indextable2).disc_amount_excl));
END IF;
END LOOP;
END IF; -- ... Otherwise Just Go To The Next Special Article

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

FOR l_int_indextable4 IN 1 .. l_int_vatinfo


LOOP
l_dbl_totgoodsincl :=
l_dbl_totgoodsincl
+ l_tab_vatinfo (l_int_indextable4).goods_amount_incl;
END LOOP;

-- ... And Now Decide If The Invoice May Be Processed Further


IF l_dbl_totspecartincl = 0 AND -- 0042 Alsc
l_dbl_totgoodsincl = 0
THEN -- <0039> Novg
setinvstatzerototals;
RETURN;
END IF;

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

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcdisc_prc;

--
-- ==========================================================================
-- 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);

-- If Country Uses This Special Article, Calculate The Sum ...


--rabha1 02-Mar-2022
--RIMS-291 Print special articles description for Germany
IF ( l_str_artnofreight <> '00000000'
OR l_str_artnofreight1 <> '00000000'
OR l_str_artnofreight2 <> '00000000'
OR l_str_artnofreight3 <> '00000000'
OR l_str_artnofreight4 <> '00000000')
THEN
-- 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);

-- 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;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;

--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;

-- Accumulate Freight For This Invoice


l_dbl_invfreight := l_dbl_invfreight + l_dbl_invdelfreight;
l_dbl_invfreightexcl :=
l_dbl_invfreightexcl + l_dbl_invdelfreightexcl;
l_dbl_invfreightvat :=
l_dbl_invfreight - l_dbl_invfreightexcl;
-- Reset Per-Delivery Variables
l_dbl_invdelfreight := 0;
l_dbl_invdelfreightexcl := 0;
l_bol_delfreight := FALSE;

-- Close Cursor For Articles


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

--
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

-- Set Invoicestatus To 'F'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatfreight);
--
-- 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('Calcfreight_begin');
ROLLBACK TO calcfreight_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcfreight_prc;

--
-- ==========================================================================
-- 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);

-- If Country Uses This Special Article, Calculate The Sum ...


IF l_str_artnotransport <> '00000000'
THEN
-- 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);

-- 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;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;

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;

-- Accumulate Transport For This Invoice


l_dbl_invtransport :=
l_dbl_invtransport + l_dbl_invdeltransport;
l_dbl_invtransportexcl :=
l_dbl_invtransportexcl + l_dbl_invdeltransportexcl;
l_dbl_invtransportvat :=
l_dbl_invtransport - l_dbl_invtransportexcl;
-- Reset Per-Delivery Variables
l_dbl_invdeltransport := 0;
l_dbl_invdeltransportexcl := 0;
l_bol_deltransport := FALSE;

-- Close Cursor For Articles


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

--
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

-- Set Invoicestatus To 'T'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstattransport);
--
-- 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('Calctransport_begin');
ROLLBACK TO calctransport_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calctransport_prc;

--
-- ==========================================================================
-- 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);

-- If Country Uses This Special Article, Calculate The Sum ...


IF l_str_artnoassembly <> '00000000'
THEN
-- 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);

-- 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;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;


IF l_rec_invrowsdel.art_no = l_str_artnoassembly
THEN
-- Accumulate Assembly For This Delivery
l_dbl_invdelassembly :=
l_dbl_invdelassembly
+ l_rec_invrowsdel.sold_amount;
l_dbl_invdelassemblyexcl :=
l_dbl_invdelassemblyexcl
+ l_rec_invrowsdel.sold_amount_excl;
l_dbl_invdelassemblyvat :=
l_dbl_invdelassembly - l_dbl_invdelassemblyexcl;
l_str_invdelassemblyvatcode :=
l_rec_invrowsdel.row_vat_code;
l_bol_delassembly := TRUE;
l_bol_invassembly := TRUE;
END IF;
END LOOP articles;

-- 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;

-- Accumulate Assembly For This Invoice


l_dbl_invassembly := l_dbl_invassembly + l_dbl_invdelassembly;
l_dbl_invassemblyexcl :=
l_dbl_invassemblyexcl + l_dbl_invdelassemblyexcl;
l_dbl_invassemblyvat :=
l_dbl_invassembly - l_dbl_invassemblyexcl;
-- Reset Per-Delivery Variables
l_dbl_invdelassembly := 0;
l_dbl_invdelassemblyexcl := 0;
l_bol_delassembly := FALSE;

-- Close Cursor For Articles


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

--
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

-- Set Invoicestatus To 'Y'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatassembly);
--
-- 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('Calcassembly_begin');
ROLLBACK TO calcassembly_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);
batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);
util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcassembly_prc;

--
-- ==========================================================================
-- 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);

-- If Country Uses This Special Article, Calculate The Sum ...


IF l_str_artnoaddserv <> '00000000'
THEN
-- 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);

-- 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;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;

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;

-- Accumulate Additional Services For This Invoice


l_dbl_invaddserv := l_dbl_invaddserv + l_dbl_invdeladdserv;
l_dbl_invaddservexcl :=
l_dbl_invaddservexcl + l_dbl_invdeladdservexcl;
l_dbl_invaddservvat :=
l_dbl_invaddserv - l_dbl_invaddservexcl;
-- Reset Per-Delivery Variables
l_dbl_invdeladdserv := 0;
l_dbl_invdeladdservexcl := 0;
l_bol_deladdserv := FALSE;

-- Close Cursor For Articles


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

--
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

-- Set Invoicestatus To 'A'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstataddserv);
--
-- 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('Calcaddserv_begin');
ROLLBACK TO calcaddserv_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcaddserv_prc;

--
-- ==========================================================================
-- 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);

-- If Country Uses Special Article 1, Calculate The Sum ...


IF l_str_spec1artno <> '00000000'
THEN
-- 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);

-- 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;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;

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;

-- Accumulate Special Article 1 For This Invoice


l_dbl_invspecart1 := l_dbl_invspecart1 + l_dbl_invdelspecart1;
l_dbl_invspecart1excl :=
l_dbl_invspecart1excl + l_dbl_invdelspecart1excl;
l_dbl_invspecart1vat :=
l_dbl_invspecart1 - l_dbl_invspecart1excl;
-- Reset Per-Delivery Variables
l_dbl_invdelspecart1 := 0;
l_dbl_invdelspecart1excl := 0;
l_bol_delspecart1 := FALSE;

-- Close Cursor For Articles


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

--
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

-- Set Invoicestatus To '1'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatspecart1);
--
-- 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('Calcspecart1_begin');
ROLLBACK TO calcspecart1_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcspecart1_prc;

--
-- ==========================================================================
-- 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);

-- If Country Uses Special Article 2, Calculate The Sum ...


IF l_str_spec2artno <> '00000000'
THEN
-- 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);

-- 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;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;

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;

-- Accumulate Special Article 1 For This Invoice


l_dbl_invspecart2 := l_dbl_invspecart2 + l_dbl_invdelspecart2;
l_dbl_invspecart2excl :=
l_dbl_invspecart2excl + l_dbl_invdelspecart2excl;
l_dbl_invspecart2vat :=
l_dbl_invspecart2 - l_dbl_invspecart2excl;
-- Reset Per-Delivery Variables
l_dbl_invdelspecart2 := 0;
l_dbl_invdelspecart2excl := 0;
l_bol_delspecart2 := FALSE;

-- Close Cursor For Articles


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

--
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

-- Set Invoicestatus To '2'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatspecart2);
--
-- 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('Calcspecart2_begin');
ROLLBACK TO calcspecart2_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcspecart2_prc;

--
-- ==========================================================================
-- 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);

-- If Country Uses Special Article 3, Calculate The Sum ...


IF l_str_spec3artno <> '00000000'
THEN
-- 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);

-- 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;

EXIT WHEN l_cur_invdel%NOTFOUND;


util_01_pck.log_prc (
pi_str_msg =>
'Fetch Articles for Delivery ' || l_str_cusdelno);
-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;

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 Cursor For Articles


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

--
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

-- Set Invoicestatus To '3'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatspecart3);
--
-- 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('Calcspecart3_begin');
ROLLBACK TO calcspecart3_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcspecart3_prc;

--
-- ==========================================================================
-- 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);

-- If Country Uses Special Article 4, Calculate The Sum ...


IF l_str_spec4artno <> '00000000'
THEN
-- 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);

-- 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;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;

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;

-- Accumulate Special Article 4 For This Invoice


l_dbl_invspecart4 := l_dbl_invspecart4 + l_dbl_invdelspecart4;
l_dbl_invspecart4excl :=
l_dbl_invspecart4excl + l_dbl_invdelspecart4excl;
l_dbl_invspecart4vat :=
l_dbl_invspecart4 - l_dbl_invspecart4excl;
-- Reset Per-Delivery Variables
l_dbl_invdelspecart4 := 0;
l_dbl_invdelspecart4excl := 0;
l_bol_delspecart4 := FALSE;

-- Close Cursor For Articles


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

--
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

-- Set Invoicestatus To '4'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatspecart4);
--
-- 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('Calcspecart4_begin');
ROLLBACK TO calcspecart4_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcspecart4_prc;

--
-- ==========================================================================
-- 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
);

TYPE typ_tab_goodsinfodel IS TABLE OF typ_rec_goodsinfodel NOT NULL


INDEX BY BINARY_INTEGER;

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

TYPE typ_tab_goodsinfo IS TABLE OF typ_rec_goodsinfo NOT NULL


INDEX BY BINARY_INTEGER;

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

-- Now Go Through The Different Deliveries One By One


-- Dbms_output.Put_line('1');
<<deliveries>>
LOOP
FETCH l_cur_invdel
INTO l_str_compcode, l_str_invno, l_str_cusdelno;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Dbms_output.Put_line('Delivery: '||L_str_cusdelno);
-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;


-- Dbms_output.Put_line('Article: '||L_rec_invrowsdel.Art_no);
l_bol_goodsdelnotexists := TRUE;

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

FOR l_int_indextable IN 1 .. l_int_goodsinfodel


LOOP
IF (l_tab_goodsinfodel (l_int_indextable).vat_code =
l_rec_invrowsdel.row_vat_code)
AND (l_tab_goodsinfodel (l_int_indextable).delivery =
l_rec_invrowsdel.cusdel_no)
THEN
-- Dbms_output.Put_line('Vatcode Already Exists In
Matrix : '||L_rec_invrowsdel.Row_vat_code);
l_bol_goodsdelnotexists := FALSE;
END IF;
END LOOP;

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

FOR l_int_indextable IN 1 .. l_int_goodsinfodel


LOOP
IF (l_tab_goodsinfodel (l_int_indextable).vat_code =
l_rec_invrowsdel.row_vat_code)
AND (l_tab_goodsinfodel (l_int_indextable).delivery =
l_rec_invrowsdel.cusdel_no)
THEN
-- Dbms_output.Put_line('Accumulating For This Delivery
And Vatcode: '|| L_rec_invrowsdel.Row_vat_code);
l_tab_goodsinfodel (l_int_indextable).amount_incl :=
l_tab_goodsinfodel (l_int_indextable).amount_incl
+ l_rec_invrowsdel.sold_amount;

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

-- Dbms_output.Put_line('Size Of Delivery Matrix '||


L_int_goodsinfodel);
FOR l_int_indextable IN 1 .. l_int_goodsinfodel
LOOP
-- Dbms_output.Put_line('In Loop...');
IF (l_tab_goodsinfodel (l_int_indextable).delivery =
l_str_cusdelno)
THEN
-- Dbms_output.Put_line('...Found Vatcode For This
Delivery');
--
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 =>
'GOODSDEL'
|| l_tab_goodsinfodel (l_int_indextable).vat_code,
pi_dbl_amountexcl =>
l_tab_goodsinfodel (l_int_indextable).amount_excl,
pi_dbl_amountincl =>
l_tab_goodsinfodel (l_int_indextable).amount_incl,
pi_dbl_vat =>
l_tab_goodsinfodel (l_int_indextable).amount_vat);
END IF;
END LOOP;
END IF;

-- Close Cursor For Deliveries


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

-- Dbms_output.Put_line('End Loop Deliveries');


--
-- Accumulate Goods Amounts Over All Deliveries But Per Vatcode
l_int_goodsinfodel := NVL (l_tab_goodsinfodel.LAST, 0);

-- Dbms_output.Put_line('Matrix Has Size Of : '||L_int_goodsinfodel);


FOR l_int_indextable1 IN 1 .. l_int_goodsinfodel
LOOP
--
-- Dbms_output.Put_line('In Outer Loop');
l_int_goodsinfo := NVL (l_tab_goodsinfo.LAST, 0);
l_bol_goodsnotexists := TRUE;

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

FOR l_int_indextable IN 1 .. l_int_goodsinfo


LOOP
-- Dbms_output.Put_line('Write To Table For Vatcode '||
L_tab_goodsinfo(L_int_indextable).Vat_code);
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
'GOODS'
|| l_tab_goodsinfo (l_int_indextable).vat_code,
pi_dbl_amountexcl =>
l_tab_goodsinfo (l_int_indextable).amount_excl,
pi_dbl_amountincl =>
l_tab_goodsinfo (l_int_indextable).amount_incl,
pi_dbl_vat =>
l_tab_goodsinfo (l_int_indextable).amount_vat);
END LOOP;
END IF;

-- Dbms_output.Put_line('Now Set Invoice-Status');


-- Set Invoicestatus To 'G'
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatgoods);
--
-- 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('Calcgoods_begin');
ROLLBACK TO calcgoods_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcgoods_prc;

--
-- ==========================================================================
-- 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;

EXIT WHEN l_cur_invsumsvat%NOTFOUND;


-- Presign Is The Same As For Not Vatobliged, Therefor No Branching
Here
l_dbl_goodsamountincl :=
l_dbl_goodsamountincl + l_rec_invsumsvat.amount_incl;
END LOOP;

--
IF l_dbl_goodsamountincl >= 0
THEN
l_str_invtype := 'D';
ELSE
l_str_invtype := 'C';
END IF;

--
CLOSE l_cur_invsumsvat;

-- Dbms_output.Put_line ('Invoice Type Is: ' || L_str_invtype);


--
-- Set The Invoice Type
invo_06_pck.changeinvhead_prc (
pi_str_invno => l_rec_invhead.inv_no,
pi_str_compcode => l_rec_invhead.comp_code,
pi_str_invtype => l_str_invtype);

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

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- Novg 04.01.2006
-- L_bol_success := False; -- <0057>
--
END setinvoicetype_prc;
--
-- ==========================================================================
-- Description : Calculates The Percentage Of Discount Per Invoice
-- Author : Alexandra Schuetz
-- Changed : Xyz
-- Handling Discount For Articles With Eco-Fee
-- ==========================================================================
PROCEDURE calcinvdiscproc_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
:= 'InvDiscProc_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_cur_isum invo_sums_pck.typ_cur;
l_rec_isum invoice_sums_v%ROWTYPE;
--
l_str_criteria VARCHAR2 (500) := NULL;
--
l_dbl_invgoodsamt invoice_sums_v.amount_incl%TYPE := 0;
l_dbl_invdiscamt invoice_sums_v.amount_incl%TYPE := 0;
l_dbl_invdiscproc invoice_header_v.inv_disc_proc%TYPE := 0;
--
-- Eco-Fee
l_dbl_invecoamt invoice_sums_v.amount_incl%TYPE := 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcinvdiscproc_begin;
--
util_01_pck.log_prc (pi_str_msg => 'Get Sum of Goods and Discount');
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND ((SUBSTR(sum_code,1,8) = ''DISCOUNT'') '
|| ' OR (SUBSTR(sum_code,1,5) = ''GOODS'') '
|| ' OR (SUBSTR(sum_code,1,6) = ''ECOFEE'')) '
|| ' AND cusdel_no = 0';
--
-- Get The Sums For Goods And Discount For This Invoice ...
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;

EXIT WHEN l_cur_isum%NOTFOUND;

--
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;

-- ... And Write It To Invoice_header_t


invo_06_pck.changeinvhead_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_dbl_invdiscproc => l_dbl_invdiscproc);
-- Set Invoicestatus To 'K'
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatdiscproc);
--
-- 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 calcinvdiscproc_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcinvdiscproc_prc;

--
-- ==========================================================================
-- 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);

-- If Country Uses This Special Article, Calculate The Sum ...


IF l_str_advartno <> '00000000'
THEN
--
-- Fetch Presign Of Goods For Setting Of Correct Sign For Pia
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;

EXIT WHEN l_cur_invsumsvat%NOTFOUND;


-- No Branching Into Vatobliged Or Not, As The Presign Is Still The
Same
l_dbl_goodsamountincl :=
l_dbl_goodsamountincl + l_rec_invsumsvat.amount_incl;
END LOOP;

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

-- 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;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;

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;

-- Accumulate Advance Payments For This Invoice


l_dbl_invadvpay := l_dbl_invadvpay + l_dbl_deladvpay;
-- Reset Per-Delivery Variables
l_dbl_deladvpay := 0;
l_bol_deladvpay := FALSE;

-- Close Cursor For Articles


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

--
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

-- Set Invoicestatus To 'P'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatadvpay);
--
-- 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('Calcadvpay_begin');
ROLLBACK TO calcadvpay_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcadvpay_prc;

--
-- ==========================================================================
-- 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);

-- If Country Uses This Special Article, Calculate The Sum ...


IF l_str_tdsartno <> '00000000'
THEN
--
-- Fetch Presign Of Goods For Setting Of Correct Sign For Pia
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;

EXIT WHEN l_cur_invsumsvat%NOTFOUND;


-- No Branching Into Vatobliged Or Not, As The Presign Is Still The
Same
l_dbl_goodsamountincl :=
l_dbl_goodsamountincl + l_rec_invsumsvat.amount_incl;
END LOOP;

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

-- 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;
EXIT WHEN l_cur_invdel%NOTFOUND;
-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (
pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;

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;

-- Accumulate Advance Payments For This Invoice


l_dbl_invtdspay := l_dbl_invtdspay + l_dbl_deltdspay;
-- Reset Per-Delivery Variables
l_dbl_deltdspay := 0;
l_bol_deltdspay := FALSE;

-- Close Cursor For Articles


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

--
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

-- Set Invoicestatus To 'P'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatadvpay);
--
-- 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('Calcadvpay_begin');
ROLLBACK TO calctdspay_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calctdspay_prc;

--
-- ==========================================================================
-- 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;

c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE


:= 'CalcAdmCost_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_bol_invadmcost BOOLEAN := FALSE;
l_rec_sart special_articles_v%ROWTYPE;
l_dbl_admcostvat invoice_sums_t.vat%TYPE := 0;
--
l_rec_rvat rims_vat_v%ROWTYPE;
l_crs_vatrates mtb_rvat_pck.typ_cur;
l_str_stmt VARCHAR2 (500);
l_tab_vatrates typ_tab_vatrates;
l_bol_dummy BOOLEAN;
--
l_rec_invoicefee invoice_fee_v%ROWTYPE;
--
l_str_compcode invoice_row_v.comp_code%TYPE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcadmcost_begin;
--
util_01_pck.log_prc (
pi_str_msg => 'Account Invoice Fee : ' || l_rec_acct.inv_fee);

-- 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''))';

OPEN l_crs_vatrates FOR l_str_stmt;

--
LOOP
FETCH l_crs_vatrates INTO l_rec_rvat;

EXIT WHEN l_crs_vatrates%NOTFOUND;


-- (For More Intuitive Array Have Vatcode As Index)
l_tab_vatrates (l_rec_rvat.vat_code) := l_rec_rvat;
--
END LOOP;

CLOSE l_crs_vatrates;

-- Calculate Vat For Invoicefee


l_dbl_admcostvat :=
roundcur_fct (
pi_str_compcode => pi_str_compcode,
pi_dbl_amount =>
( l_rec_invoicefee.inv_fee_amount
* l_tab_vatrates (l_rec_sart.vat_code).vat_incl
/ 100));
-- ... Write It To Invoice_sums_t
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode => 'ADMCOST' || l_rec_sart.vat_code,
pi_dbl_amountexcl => l_rec_invoicefee.inv_fee_amount,
pi_dbl_amountincl =>
l_rec_invoicefee.inv_fee_amount + l_dbl_admcostvat,
pi_dbl_vat => l_dbl_admcostvat);
ELSE
-- ...Or Without Vat
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode => 'ADMCOST',
pi_dbl_amountexcl => l_rec_invoicefee.inv_fee_amount,
pi_dbl_amountincl => l_rec_invoicefee.inv_fee_amount,
pi_dbl_vat => 0);
END IF;
END IF;

-- Set Invoicestatus To 'E'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatadmcost);
--
-- 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('Calcadmcost_begin');
ROLLBACK TO calcadmcost_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcadmcost_prc;

--
-- ==========================================================================
-- 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);

-- Use Default Value


--If Cfuncs_02_pck.Condfunctistrue_fct( -- <0055>
-- Pi_str_functionality => 'Invduedatesalesdate'
-- ,Pi_str_condition1 => 'Comp_code'
-- ,Pi_str_value1 => L_rec_invhead.Comp_code)
Then
-- L_rec_invhead.Inv_due_date := L_rec_invhead.Sales_date +
--
L_rec_payterms.Pay_term_value;
IF cfuncs_02_pck.condfunctistrue_fct ( -- Novg <0056>
pi_str_functionality => 'INVDUEDATEREGDATE',
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
+ l_rec_payterms.pay_term_value;
ELSE
l_rec_invhead.inv_due_date :=
invo_06_pck.getinvregistrationdate_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno)
+ l_rec_payterms.pay_term_value;
END IF;
ELSE
l_rec_invhead.inv_due_date :=
l_rec_invhead.inv_date
+ NVL (l_rec_payterms.pay_term_value, 0);
END IF;

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

IF ( TO_CHAR (l_rec_invhead.inv_due_date, 'DY') = 'SUN'


AND l_rec_globpar.due_date_weekday = 'Y')
THEN
l_rec_invhead.inv_due_date := l_rec_invhead.inv_due_date + 1;
ELSIF ( TO_CHAR (l_rec_invhead.inv_due_date, 'DY') = 'SAT'
AND l_rec_globpar.due_date_weekday = 'Y')
THEN
l_rec_invhead.inv_due_date := l_rec_invhead.inv_due_date + 2;
END IF;
END IF;

-- ... Write The Duedate To Invoice_header_t


invo_06_pck.changeinvhead_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_dat_invduedate => l_rec_invhead.inv_due_date);
-- Set Invoicestatus To 'U'
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatduedate);
--
-- 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('Calcduedate_begin');
ROLLBACK TO calcduedate_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcduedate_prc;

--
-- ==========================================================================
-- 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);

-- Now Go Through The Different Deliveries One By One


<<deliveries>>
LOOP
FETCH l_cur_invsums
INTO l_str_compcode, l_str_invno, l_str_cusdelno;

EXIT WHEN l_cur_invsums%NOTFOUND;

--
-- 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;

EXIT WHEN l_cur_invsumsdel%NOTFOUND;

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;

-- Reset Per-Delivery Variables


l_dbl_deltotals := 0;
l_dbl_deltotalsexcl := 0;
l_dbl_deltotalsvat := 0;
-- Close Cursor For Articles
END LOOP deliveries;

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

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calctotals_prc;

--
-- ==========================================================================
-- 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);

--

-- New Conditional Functionality Handling


-- Athe 2005-06-01
-- Check If There Is A Conditional Functionality
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'INVNO',
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 := l_str_invno;
l_tab_condfunctmatrix (2).str_value := l_rec_invnode.sto_no;
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'INVNO',
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' || '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;

EXIT WHEN l_cur_invrow%NOTFOUND;


-- Recreate Every Single Invoice Row
l_rec_invrow.inv_no := l_str_invno;
--
-- <Change Novg 2007.08.14> Interchange Remove And Delete
--
invo_07_pck.removeinvrow_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => l_str_oldinvno,
pi_int_salerowno => l_rec_invrow.sale_row_no);
--
invo_07_pck.createinvrow_prc (pi_rec_invr => l_rec_invrow);
END LOOP;

-- 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;

EXIT WHEN l_cur_invsums%NOTFOUND;


-- Recreate Every Single Invoice Sum
l_rec_invsums.inv_no := l_str_invno;
--
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => l_str_invno,
pi_int_cusdelno => l_rec_invsums.cusdel_no,
pi_str_sumcode => l_rec_invsums.sum_code,
pi_dbl_amountexcl => l_rec_invsums.amount_excl,
pi_dbl_amountincl => l_rec_invsums.amount_incl,
pi_dbl_vat => l_rec_invsums.vat);
--
invo_04_pck.removeinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => l_str_oldinvno,
pi_int_cusdelno => l_rec_invsums.cusdel_no,
pi_str_sumcode => l_rec_invsums.sum_code);
END LOOP;

-- 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;

EXIT WHEN l_cur_invtaxinv%NOTFOUND;


--
l_rec_invtaxinv.inv_no := l_str_invno;
invo_57_pck.createinvtaxinv_prc (
pi_rec_intaxi => l_rec_invtaxinv);
--
invo_57_pck.removeinvtaxinv_prc (
pi_str_criteria => l_str_criteria);
--
END LOOP;

--
CLOSE l_cur_invtaxinv;
END IF;

-- ... And In Table Invoice_vat_t ...


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;

EXIT WHEN l_cur_invvat%NOTFOUND;


-- Recreate Every Single Invoice Vat Amount
l_rec_invvat.inv_no := l_str_invno;
invo_16_pck.createinvvat_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => l_str_invno,
pi_str_vatcode => l_rec_invvat.vat_code,
pi_dbl_vatrate => l_rec_invvat.vat_rate,
pi_dbl_amount => l_rec_invvat.amount);

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;

EXIT WHEN l_cur_invenvtax%NOTFOUND;


-- Recreate Every Single Invoice Vat Amount
l_rec_invenvtax.inv_no := l_str_invno;
envt_iret_pck.ins_prc (
pi_str_compcode => l_rec_invenvtax.comp_code,
pi_str_invno => l_str_invno,
pi_int_salerowno => l_rec_invenvtax.sale_row_no,
pi_str_artno => l_rec_invenvtax.art_no,
pi_str_codeeco => l_rec_invenvtax.code_eco,
pi_int_codevat => l_rec_invenvtax.code_vat,
pi_dbl_ecorowcalctotal =>
l_rec_invenvtax.eco_row_calc_total,
pi_dbl_ecovalue => l_rec_invenvtax.eco_value,
pi_int_qtyrate => l_rec_invenvtax.qty_rate,
pi_dbl_ecorowcalctotalexcl =>
l_rec_invenvtax.eco_row_calc_total_excl,
pi_dbl_ecorowcalcexcl =>
l_rec_invenvtax.eco_row_calc_excl,
pi_dbl_vatvalue => l_rec_invenvtax.vat_value -- <0053>
);

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;

-- Set The Invoice Status To 'W'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => l_str_invno,
pi_str_invstatus => c_str_invstatasgn);
-- 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 no_inv_no_found_exception
THEN -- 0038 Alsc
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
ROLLBACK TO assignnewinvno_begin;
l_bol_success := FALSE; -- <0057>
util_01_pck.log_prc (
pi_str_msg =>
'No new invoicenumber found for : '
|| pi_str_compcode
|| ' and '
|| pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
--L_bol_success := False; -- <0057>
WHEN OTHERS
THEN
-- Dbms_output.Put_line('Assignnewinvno_begin');
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
ROLLBACK TO assignnewinvno_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END assignnewinvno_prc;

--
-- ==========================================================================
-- 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;

c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE


:= 'CalcVAT_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_str_criteria VARCHAR2 (500);
l_cur_isums invo_sums_pck.typ_cur;
l_rec_isums invoice_sums_v%ROWTYPE;
--
l_tab_accumvat typ_invvatamtmatrix;
l_int_dummy NUMBER (1);
i NUMBER (1) := 0;
j NUMBER (1) := 0;
k NUMBER (1) := 0;
l_bol_vatfound BOOLEAN DEFAULT FALSE;
--
l_str_criteriavatrate VARCHAR2 (500);
l_str_stmt VARCHAR2 (500);
l_int_next NUMBER (1);
l_int_current NUMBER (1);
l_crs_vatrates mtb_rvat_pck.typ_cur;
l_rec_vatrates rims_vat_v%ROWTYPE;
l_tab_vatrates typ_tab_vatrates;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
-- Add Up For The Different Vatcodes
SAVEPOINT calcvat_begin;

--
-- 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;

EXIT WHEN l_crs_vatrates%NOTFOUND;


--
l_tab_vatrates (l_rec_vatrates.vat_code) :=
l_rec_vatrates;
END LOOP;

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;

EXIT WHEN l_cur_isums%NOTFOUND;


-- Reset Vatfound-Flag For New Line
l_bol_vatfound := FALSE;

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

-- If No Lines Exists In Matrix (L_tab... .Last Is Null)


-- The Loop Has To Abort Without Producing An Error
IF NVL (l_int_dummy, 0) <> 0
THEN
FOR i IN 1 .. l_int_dummy
LOOP
-- Dbms_output.Put_line('Check If Current Vatcode:
'||To_char(I));
IF (SUBSTR (l_rec_isums.sum_code, -1, 1) =
l_tab_accumvat (i).vat_code)
THEN
IF l_bol_100percdiscount
AND -- 0032 Alsc
( SUBSTR (l_rec_isums.sum_code,
1,
5) =
'GOODS'
OR SUBSTR (l_rec_isums.sum_code,
1,
8) =
'DISCOUNT')
THEN
-- Dbms_output.Put_line('Adding '||
L_rec_isums.Sum_code);
l_bol_vatfound := TRUE;
ELSE
l_tab_accumvat (i).vat_amount :=
l_tab_accumvat (i).vat_amount
+ l_rec_isums.vat;

l_bol_vatfound := TRUE;
END IF;
END IF;

j := i;
END LOOP;
END IF;

-- ... If Not, Then Create It


IF NOT l_bol_vatfound
THEN
IF l_bol_100percdiscount
AND -- 0032 Alsc
( SUBSTR (l_rec_isums.sum_code, 1, 5) =
'GOODS'
OR SUBSTR (l_rec_isums.sum_code, 1, 8) =
'DISCOUNT'
OR SUBSTR (l_rec_isums.sum_code, 1, 5) =
'ISELL')
THEN
l_tab_accumvat (j + 1).vat_amount := 0;
-- Dbms_output.Put_line('Setting Vat To Zero For 100%
Discount Invoices');
ELSE
l_tab_accumvat (j + 1).vat_amount :=
l_rec_isums.vat;
END IF;

l_tab_accumvat (j + 1).vat_code :=
SUBSTR (l_rec_isums.sum_code, -1, 1);

l_tab_accumvat (j + 1).cusdel_no := '0';


--
l_tab_accumvat (j + 1).vat_rate :=
l_tab_vatrates (
SUBSTR (l_rec_isums.sum_code, -1, 1)).vat_incl;
END IF; -- Not L_bol_vatfound
END IF;
END LOOP;

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;

-- Set Invoicestatus To 'V'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatvat);
--
-- 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 calcvat_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END calcvat_prc;

--
-- ==========================================================================
-- 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;

EXIT WHEN l_cur_acctcodes%NOTFOUND;


po_rec_acctcodes := l_rec_acctcodes;
END LOOP;

--
-- 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;

EXIT WHEN l_cur_invvat%NOTFOUND;


l_dbl_invvat := l_dbl_invvat + l_rec_invvat.amount;
END LOOP;
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
RETURN l_dbl_invvat;
--
END getinvvat_fct;

--
-- ==========================================================================
-- 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;

l_tab_condfunctmatrix (4).dbl_value := l_rec_isums2.amount_incl;


-- Pia
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'INVAMOUNT',
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_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 *

Curr_02_pck.Corrfact_fct(Pi_str_compcode => Pi_str_compcode,

Pi_str_idrstransaction => 'S3870002');


End If;
End Loop;
*/
--
-- Insert Values From Invoice_row_t
l_rec_invsend.inv_cur :=
getcur_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
-- Only Vat_1 Is To Be Filled From Invoice_vat_t (With The All-Over Vat)
-- Vat_2 And Vat_3 Remain Empty
l_rec_invsend.vat_1 :=
getinvvat_fct (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
l_rec_invsend.vat_2 := NULL;
l_rec_invsend.vat_3 := NULL;
--
-- Insert Pay_type From Account_t
l_rec_invsend.pay_type := SUBSTR (l_rec_acct.payment_type, 2, 1);
--
-- Acct_code, Acct_code_debit From Company_account_codes_t
getacctcodes_prc (pi_str_compcode => pi_str_compcode,
po_rec_acctcodes => l_rec_acctcodes);
l_rec_invsend.acct_code := l_rec_acctcodes.acct_code;
l_rec_invsend.acct_code_debit := l_rec_acctcodes.acct_code_debit;
--
-- Constant 'Inv'
l_rec_invsend.inv_src := c_str_invsource;
--
-- Field Info1 Is Only Used In Fr To Send The Creditlimit
l_rec_invsend.info1 := NULL;
--
-- Now Write The Record To The O-Table
--
invo_30_pck.createoutgoinginvoice_prc (
pi_str_acctcode => l_rec_invsend.acct_code,
pi_str_acctcodedebit => l_rec_invsend.acct_code_debit,
pi_str_compcode => l_rec_invsend.comp_code,
pi_str_custno => l_rec_invsend.cust_no,
pi_str_info1 => l_rec_invsend.info1,
pi_dbl_invamount => l_rec_invsend.inv_amount,
pi_str_invcur => l_rec_invsend.inv_cur,
pi_dat_invdate => l_rec_invsend.inv_date,
pi_dbl_invdelamount => l_rec_invsend.inv_del_amount,
pi_dat_invduedate => l_rec_invsend.inv_due_date,
pi_str_invno => l_rec_invsend.inv_no,
pi_str_invsrc => l_rec_invsend.inv_src,
pi_str_invtype => l_rec_invsend.inv_type,
pi_str_orderno => l_rec_invsend.order_no,
pi_str_paytype => l_rec_invsend.pay_type,
pi_dat_salesdate => l_rec_invsend.sales_date,
pi_str_stono => l_rec_invsend.sto_no,
pi_dbl_vat1 => l_rec_invsend.vat_1,
pi_dbl_vat2 => l_rec_invsend.vat_2,
pi_dbl_vat3 => l_rec_invsend.vat_3);
--
-- Set Invoicestatus To 'H'
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatsend);
--
-- 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('Inssendcoda_begin');
ROLLBACK TO inssendcoda_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END inssendcoda_prc;

-- ==========================================================================
-- 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;

TYPE typ_rec_discamount IS RECORD


(
vat_amount invoice_row_v.sold_amount%TYPE,
vat_code invoice_row_v.row_vat_code%TYPE
);

TYPE typ_tab_discamount IS TABLE OF typ_rec_discamount


INDEX BY BINARY_INTEGER;

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;

-- 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;
l_tab_condfunctmatrix (3).dbl_value := l_dbl_totalamount;
-- Inv. Amount
l_tab_condfunctmatrix (4).dbl_value :=
NVL (l_rec_invsum2.amount_incl, 0);
-- Pia
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'INVAMOUNT',
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_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 *

Curr_02_pck.Corrfact_fct(Pi_str_compcode => Pi_str_compcode,

Pi_str_idrstransaction => 'S3870002');


End If;
End Loop;
*/
--
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_dbl_totalamount;
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_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);

-- <0049> Athe 2008-05-09


-- Select Country Code Using Bapi
l_str_ctycode :=
UPPER (
glob_01_pck.getctycode_fct (
pi_str_compcode => l_str_mastercompcode));
/*
--
-- Create Select Statement For Country Code
L_str_ccselect := 'Select Cty_code,Cty_name,Ins_date'||
',Upd_date,Delete_date,Ident_create'||
',Ident_update,Comp_code'||
' From Country_t'||
' Where Comp_code = ''' || L_str_mastercompcode ||
'''';
--
-- Open Cursor
Open L_cur_ctycode For L_str_ccselect;
Fetch L_cur_ctycode Into L_rec_countrycode;
*/
--
-- 0046 Alsc
-- Get Correct Number Of Decimals
curr_01_pck.getcurdec_prc (pi_str_compcode =>
l_str_mastercompcode,
pi_str_idrstransaction => 'S3870002',
po_rec_curdec => l_rec_curdec);
-- Overwrite Number Of Decimals In Case Of
-- Conditional Functionality Exists
l_int_noofdecimals := l_rec_curdec.nof_decimals;

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');

l_int_noofdecimals := TO_NUMBER (l_str_noofdecimals);


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_str_curcode,
pi_int_invoicecuralloweddec => l_int_noofdecimals --
L_rec_curdec.Nof_decimals
,
pi_dat_invoicedate => l_rec_invhead.inv_date,
pi_dbl_invoicegrossamount => ABS (l_dbl_totalamount),
pi_str_invoicenumber => l_str_invno,
pi_int_paymentscenarioflag => 0,
pi_str_purchasesalesindicator => 'SALES',
pi_str_referenceidentifier => l_str_refid,
pi_str_taxcountry => l_str_ctycode,
pi_str_taxcurrency => NULL,
pi_str_taxcurrencyannualrate => NULL,
pi_str_taxindicator => 'DOM');
--
-- Create And Insert The Costlines
-- 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_invsum3);

--
LOOP
FETCH l_cur_invsum3 INTO l_rec_invsum3;

EXIT WHEN l_cur_invsum3%NOTFOUND;


l_dbl_invsum3amountexcl :=
l_dbl_invsum3amountexcl + l_rec_invsum3.amount_excl;
END LOOP;

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;

EXIT WHEN l_cur_invsum8%NOTFOUND;


l_dbl_invsum8amountexcl :=
l_dbl_invsum8amountexcl + l_rec_invsum8.amount_excl;
END LOOP;

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;

EXIT WHEN l_cur_invsum4%NOTFOUND;


l_dbl_invsum4amountexcl :=
l_dbl_invsum4amountexcl + l_rec_invsum4.amount_excl;
END LOOP;

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;

EXIT WHEN l_cur_invsum9%NOTFOUND;


l_dbl_invsum9amountexcl :=
l_dbl_invsum9amountexcl + l_rec_invsum9.amount_excl;
END LOOP;

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;

EXIT WHEN l_cur_invsum5%NOTFOUND;


l_dbl_invsum5amountexcl :=
l_dbl_invsum5amountexcl + l_rec_invsum5.amount_excl;
END LOOP;

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;

EXIT WHEN l_cur_invsum7%NOTFOUND;


l_dbl_invsum7amountexcl :=
l_dbl_invsum7amountexcl + l_rec_invsum7.amount_excl;
END LOOP;

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;

EXIT WHEN l_cur_invsum10%NOTFOUND;


l_dbl_invsum10amountexcl :=
l_dbl_invsum10amountexcl + l_rec_invsum10.amount_excl;
END LOOP;

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;

EXIT WHEN l_cur_invsum6%NOTFOUND;


l_dbl_invsum6amountexcl :=
l_dbl_invsum6amountexcl + l_rec_invsum6.amount_excl;
END LOOP;

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;

-- According To Jeri And Mecl The Special Article Transport Shall Be


Handled As Freight
-- Athe 2005-09-23
IF (l_dbl_invsum4amountexcl <> 0) OR (l_dbl_invsum9amountexcl <> 0)
THEN
invo_31_pck.createcostline_prc (
pi_dbl_amount =>
ABS (NVL (l_dbl_invsum4amountexcl, 0))
+ -- Freight
ABS (NVL (l_dbl_invsum9amountexcl, 0)) -- Transport
,
pi_str_costtype => 'FREIGHT',
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)';

invo_04_pck.getinvsums_prc (pi_str_criteria => l_str_criteria,


po_ref_cur => l_cur_isumdisc);
-- For Non-Vatobliged Invoices These Discountlines Will Have Vat = 0
i := 1;

LOOP
FETCH l_cur_isumdisc INTO l_rec_isumdisc;

EXIT WHEN l_cur_isumdisc%NOTFOUND;


l_tab_isumdisc (i).vat_amount := l_rec_isumdisc.vat;
l_tab_isumdisc (i).vat_code :=
SUBSTR (l_rec_isumdisc.sum_code, 9, 1);

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;

EXIT WHEN l_cur_isum%NOTFOUND;

--
-- 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;

-- <0045> , <0052> Novg


IF l_str_costtype = 'ADDSERV'
THEN
l_dbl_isumvatamountaddserv := l_dbl_isumvatamount;
ELSIF l_str_costtype IN ('SPECART1',
'SPECART2',
'SPECART3',
'SPECART4')
THEN
l_dbl_isumvatamountspecart :=
l_dbl_isumvatamountspecart + l_dbl_isumvatamount;
ELSIF l_str_costtype = 'GOODS'
THEN
l_dbl_isumvatamount :=
NVL (l_dbl_isumvatamount, 0)
+ NVL (l_dbl_isumvatamountaddserv, 0)
+ NVL (l_dbl_isumvatamountspecart, 0);

l_dbl_isumvatamountaddserv := 0; -- <0060> Novg


l_dbl_isumvatamountspecart := 0;
END IF;

--If L_str_costtype <> 'Addserv' Then -- <0045> Novg


IF l_str_costtype NOT IN ('ADDSERV',
'SPECART1',
'SPECART2',
'SPECART3',
'SPECART4')
THEN -- <0045>, <0052> Novg
-- Insert Into O_pam_document_taxline_t
invo_33_pck.createtaxline_prc (
pi_str_costtype => l_str_costtype,
pi_str_creditdebitindicator => l_str_debcrecost,
pi_str_referenceidentifier => l_str_refid,
pi_dbl_taxamountininvoicecur => l_dbl_isumvatamount,
pi_dbl_taxamountintaxcurrency => NULL,
pi_str_taxmastercode =>
l_rec_codataxcode.coda_tax_code,
pi_dbl_taxrate =>
l_rec_codataxcode.vat_rate,
pi_str_taxstate => NULL,
pi_str_taxtype => 'DOM');
END IF;
END IF;
END LOOP;

--
--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
|| '''';

-- Get Tax Invoice Into Cursor


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;

EXIT WHEN l_cur_invtaxinv%NOTFOUND;


--
l_rec_invhead.inv_date :=
invo_06_pck.getinvregistrationdate_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);

-- 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;

-- Create The Taxlines


-- Insert Into O_pam_document_taxline_t
IF l_rec_invtaxinv.inv_id != '0'
THEN
invo_33_pck.createtaxline_prc (
pi_str_costtype => 'GOODS',
pi_str_creditdebitindicator => l_str_debcrecost,
pi_str_referenceidentifier => l_str_refid,
pi_dbl_taxamountininvoicecur => 0,
pi_dbl_taxamountintaxcurrency => NULL,
pi_str_taxmastercode => NULL,
pi_dbl_taxrate => NULL,
pi_str_taxstate => NULL,
pi_str_taxtype => 'DOM');
ELSE
--RIMS-230 TDS for INDIA
IF (l_rec_invsum2.amount_incl <> 0)
THEN
invo_33_pck.createtaxline_prc (
pi_str_costtype => 'TDS',
pi_str_creditdebitindicator => l_str_debcrecosttds,
pi_str_referenceidentifier => l_str_refid,
pi_dbl_taxamountininvoicecur => 0,
pi_dbl_taxamountintaxcurrency => NULL,
pi_str_taxmastercode => NULL,
pi_dbl_taxrate => NULL,
pi_str_taxstate => NULL,
pi_str_taxtype => 'DOM');
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;

-- 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 LOOP;

--
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

inssendsap_prc (pi_str_compcode => pi_str_compcode,


pi_str_invno => pi_str_invno);
--DM443 rasha16 18-Apr-2024
createinvtax_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno);
ELSE
util_01_pck.log_prc (pi_str_msg => 'Send Invoice TO NOWHERE');
END IF;

--
-- 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 l_rec_invhead.control_no IS NOT NULL


AND l_rec_invhead.control_no != 0
AND NOT cfuncs_02_pck.condfunctistrue_fct ( -- <0048>
pi_str_functionality => 'NOCHECKCTRLNOINRIMS',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => glob_01_pck.getcompcode_fct)
THEN
--
-- Check If This Controlnumber Was Given For This Customer
l_str_criteria :=
'comp_code = '''
|| l_s_mastercomp_code
|| ''''
|| -- <0043> Novg
' 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
|| ''')';

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

-- ... And Write To Table Control_no_t


IF l_bol_vatobliged
THEN
ctrl_01_pck.changectrlno_prc (
pi_str_compcode => l_s_mastercomp_code -- <0043>
Novg Pi_str_compcode
,
pi_int_controlno => l_rec_invhead.control_no,
pi_int_controlnostatus =>
glob_01_pck.c_str_ctrlinvoiced,
pi_dbl_invamount => l_rec_invsums.amount_incl,
pi_dat_invdate => l_rec_invhead.inv_date,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_orderno => l_rec_invhead.order_no);
ELSE
ctrl_01_pck.changectrlno_prc (
pi_str_compcode => l_s_mastercomp_code -- <0043>
Novg Pi_str_compcode
,
pi_int_controlno => l_rec_invhead.control_no,
pi_int_controlnostatus =>
glob_01_pck.c_str_ctrlinvoiced,
pi_dbl_invamount => l_rec_invsums.amount_excl,
pi_dat_invdate => l_rec_invhead.inv_date,
pi_str_invno => l_rec_invhead.inv_no,
pi_str_orderno => l_rec_invhead.order_no);
END IF;

-- Set Invoicestatus To 'I'


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatctrlno);
ELSE
-- If A Controlnumber Was Given, But Is Not Correct
-- Write To The Errorlog.
util_01_pck.log_prc (
pi_str_msg =>
'ControlNumbers in CONTROL_NO_T and in '
|| 'INVOICE_HEADER_T do not match (for InvNo : '
|| pi_str_invno
|| ')'
|| ' or status doesn''t allow it''s use.',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);
-- 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;

-- Set Invoicestatus To 'M'


setinvstatus_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatctrlnomiss);
END IF;
ELSE -- No Controlnumber Given
-- Set Invoicestatus To 'I'
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatctrlno);
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;
-- Dbms_output.Put_line('No Data In Checkctrlno');
WHEN OTHERS
THEN
-- Dbms_output.Put_line('Checkctrlno_begin');
ROLLBACK TO checkctrlno_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END checkctrlno_prc;
--
-- ==========================================================================
-- Description : For Some Companies (Be, Es, It) A Sumline For Each Invoice
-- Is Inserted In A Special Table For The Vat-Reports.
-- Author : Andreas Theimer
-- ==========================================================================
PROCEDURE insivs_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
:= 'InsIvs_prc' ;
c_str_addmodule CONSTANT appl_elog_v.module_hierarchy%TYPE
:= c_str_pckname || '.' || c_str_prcname ;
--
l_tab_condfunctmatrix cfuncs_01_pck.typ_condfunctmatrix;
l_bol_executed BOOLEAN := FALSE;
--
l_bol_success_condfuncmatr BOOLEAN; -- <0057>
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
SAVEPOINT insivs_begin;
--
util_01_pck.log_prc (
pi_str_msg => 'Check for writing to VAT-Specification table');

-- New Conditional Functionality Handling


-- Athe 2005-06-01
-- Check If There Is A Conditional Functionality
IF cfuncs_01_pck.foundcondfuncs_fct (
pi_str_functionality => 'INVVATSPEC',
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 := pi_str_invno;
l_tab_condfunctmatrix (3).bol_value := l_bol_vatobliged;
l_bol_executed :=
cfuncs_02_pck.executecondfunct_fct (
pi_str_functionality => 'INVVATSPEC',
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_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


END IF;

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

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


--L_bol_success := False; -- <0057>
--
END insivs_prc;

--
-- ==========================================================================
-- 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;

PROCEDURE purchasereftextsmatch_prc ( -- <0048>


pi_int_ctrlno_temp reference_text_ctrlno_t.control_no%TYPE)
IS
BEGIN
IF NOT invo_reft_pck.exs_fct (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno)
THEN
-- Dbms_output.Put_line('Insert Into Invoice_header_reftext_t');
invo_reft_pck.ins_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_controlno => pi_int_ctrlno_temp);
ELSE
-- Dbms_output.Put_line('Update Invoice_header_reftext_t');
invo_reft_pck.upd_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_controlno => pi_int_ctrlno_temp);
END IF;

-- Dbms_output.Put_line('Set The Invoicestatus To Z Or Q');


setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatpono);

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;

IF l_rec_invhead.control_no IS NOT NULL


THEN
-- <0048>
IF existsreftextsforctrlno_fct
THEN
-- Set Invoicestatus To 'Q' (Continue Processing Of
Invoice)
purchasereftextsmatch_prc (
pi_int_ctrlno_temp =>
l_rec_invhead.control_no);
ELSE
-- <0054> Novg
--
IF invo_28_pck.existsonlyonereftext_fct ( --<0051>
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
-- Set Invoicestatus To 'Q' (Continue Processing Of
Invoice)
purchasereftextsmatch_prc (
pi_int_ctrlno_temp => l_int_ctrlno_temp);
ELSIF NOT invo_28_pck.existsreftexts_fct ( --<0051>
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)
THEN
-- Set Invoicestatus To 'Q' (Continue Processing Of
Invoice)
setinvstatus_prc ( -- <0051>
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatpono);
ELSE
-- Correction Screen
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
-- <0054> Novg
--
-- Set Invoicestatus To 'Q' (Continue Processing Of Invoice)
IF invo_28_pck.existsonlyonereftext_fct ( --<0051>
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
-- Set Invoicestatus To 'Q' (Continue Processing Of
Invoice)
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);
END IF;
END IF;
ELSE
-- Set Invoicestatus To 'Q' (Continue Processing Of Invoice)
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatpono);
END IF;
-- Dbms_output.Put_line('Pono-Q-' || Pi_str_invno);
END IF;

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

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END checkpono_prc;

--
-- ==========================================================================
-- 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;

-- Set Invoicestatus To 'J'


-- RIMS-172
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'
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;

-- 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 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 for : ' || pi_str_invno,
pi_str_logtype => util_01_pck.c_str_logtypeapplication);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END rempia_prc;

--
-- ==========================================================================
-- 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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END updatebsparams_prc;

--
-- 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_t_tmp


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

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

TYPE typ_tab_srcsysinfodel IS TABLE OF typ_rec_srcsysinfodel NOT NULL


INDEX BY BINARY_INTEGER;

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

TYPE typ_tab_srcsysinfo IS TABLE OF typ_rec_srcsysinfo NOT NULL


INDEX BY BINARY_INTEGER;
l_tab_srcsysinfo typ_tab_srcsysinfo;
l_int_srcsysinfo INTEGER := 0;
l_bol_srcsysnotexists 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 Srcsys Per Delivery ...
l_dbl_delsrcsys invoice_row_v.sold_amount%TYPE := 0;
l_dbl_delsrcsysexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_delsrcsysvat invoice_row_v.sold_amount%TYPE := 0;
-- ... Or Invoice
l_dbl_invsrcsys invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invsrcsysexcl invoice_row_v.sold_amount%TYPE := 0;
l_dbl_invsrcsysvat invoice_row_v.sold_amount%TYPE := 0;
l_dbl_custdiscrate discount_rate_v.disc_rate%TYPE := 0;
l_bol_custdisc BOOLEAN := FALSE;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT calcsrcsys_begin;
--
-- Does Discount Exist?
l_str_discartno :=
checkspecart_fct (pi_str_compcode => pi_str_compcode,
pi_str_functionality => 'DISCOUNT');

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

-- Now Go Through The Different Deliveries One By One


-- Dbms_output.Put_line('1');
<<deliveries>>
LOOP
FETCH l_cur_invdel
INTO l_str_compcode, l_str_invno, l_str_cusdelno;

EXIT WHEN l_cur_invdel%NOTFOUND;


-- Dbms_output.Put_line('Delivery: '||L_str_cusdelno);
-- Create Where-Clause For Retrieval Of Articles Per Delivery
l_str_criteria :=
'comp_code = '''
|| l_str_compcode
|| ''''
|| ' AND inv_no = '''
|| l_str_invno
|| ''''
|| ' AND cusdel_no = '''
|| l_str_cusdelno
|| ''''
|| ' ORDER BY sale_row_no';
--
invo_07_pck.getinvrows_prc (pi_str_criteria => l_str_criteria,
po_ref_cur => l_cur_invrowsdel);

--
-- Go Through All Articles For This Delivery
<<articles>>
LOOP
FETCH l_cur_invrowsdel INTO l_rec_invrowsdel;

EXIT WHEN l_cur_invrowsdel%NOTFOUND;


-- Dbms_output.Put_line('Article: '||L_rec_invrowsdel.Art_no);
l_bol_srcsysdelnotexists := TRUE;

-- Skip Discount Article If Discount Is On Customer Level


l_bol_proces := TRUE;

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

FOR l_int_indextable IN 1 .. l_int_srcsysinfodel


LOOP
IF (l_tab_srcsysinfodel
(l_int_indextable).source_system =
l_rec_invrowsdel.source_system)
AND (l_tab_srcsysinfodel (l_int_indextable).delivery =
l_rec_invrowsdel.cusdel_no)
THEN
-- Dbms_output.Put_line('Sourcesystem Already Exists In
Matrix : '||L_rec_invrowsdel.Row_source_system);
l_bol_srcsysdelnotexists := FALSE;
END IF;
END LOOP;

-- If It Doesn'T Already Exist There


-- New Sourcesystem Is Added To The Sourcesystem-Matrix
IF l_bol_srcsysdelnotexists
THEN
-- Dbms_output.Put_line('New Sourcesystem! Adding To Matrix
'||L_rec_invrowsdel.Row_source_system);
l_tab_srcsysinfodel (l_int_srcsysinfodel + 1).source_system
:=
l_rec_invrowsdel.source_system;
l_tab_srcsysinfodel (l_int_srcsysinfodel + 1).delivery :=
l_rec_invrowsdel.cusdel_no;
l_tab_srcsysinfodel (l_int_srcsysinfodel +
1).amount_incl :=
0;
l_tab_srcsysinfodel (l_int_srcsysinfodel +
1).amount_excl :=
0;
l_tab_srcsysinfodel (l_int_srcsysinfodel + 1).amount_vat :=
0;
END IF;

--
-- Now Accumulate Amount For This Delivery
l_int_srcsysinfodel := NVL (l_tab_srcsysinfodel.LAST, 0);

FOR l_int_indextable IN 1 .. l_int_srcsysinfodel


LOOP
IF (l_tab_srcsysinfodel
(l_int_indextable).source_system =
l_rec_invrowsdel.source_system)
AND (l_tab_srcsysinfodel (l_int_indextable).delivery =
l_rec_invrowsdel.cusdel_no)
THEN
-- Dbms_output.Put_line('Accumulating For This Delivery
And Sourcesystem: '|| L_rec_invrowsdel.Row_source_system);
l_tab_srcsysinfodel (l_int_indextable).amount_incl :=
l_tab_srcsysinfodel
(l_int_indextable).amount_incl
+ NVL (l_rec_invrowsdel.sold_amount, 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);

-- Dbms_output.Put_line('Size Of Delivery Matrix '||


L_int_goodsinfodel);
FOR l_int_indextable IN 1 .. l_int_srcsysinfodel
LOOP
-- Dbms_output.Put_line('In Loop...');
IF (l_tab_srcsysinfodel (l_int_indextable).delivery =
l_str_cusdelno)
THEN
-- Dbms_output.Put_line('...Found Sourcesystem For This
Delivery');
--
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 =>
l_tab_srcsysinfodel
(l_int_indextable).source_system
|| 'DEL',
pi_dbl_amountexcl =>
l_tab_srcsysinfodel (l_int_indextable).amount_excl,
pi_dbl_amountincl =>
l_tab_srcsysinfodel (l_int_indextable).amount_incl,
pi_dbl_vat =>
l_tab_srcsysinfodel (l_int_indextable).amount_vat);
END IF;
END LOOP;
END IF;

-- Close Cursor For Deliveries


CLOSE l_cur_invrowsdel;
END LOOP deliveries;

-- Dbms_output.Put_line('End Loop Deliveries');


--
-- Accumulate Srcsys Amounts Over All Deliveries But Per Sourcesystem
l_int_srcsysinfodel := NVL (l_tab_srcsysinfodel.LAST, 0);

-- Dbms_output.Put_line('Matrix Has Size Of : '||L_int_goodsinfodel);


FOR l_int_indextable1 IN 1 .. l_int_srcsysinfodel
LOOP
--
-- Dbms_output.Put_line('In Outer Loop');
l_int_srcsysinfo := NVL (l_tab_srcsysinfo.LAST, 0);
l_bol_srcsysnotexists := TRUE;
--
FOR l_int_indextable2 IN 1 .. l_int_srcsysinfo
LOOP
-- Dbms_output.Put_line('In Inner Loop');
IF (l_tab_srcsysinfodel (l_int_indextable1).source_system =
l_tab_srcsysinfo (l_int_indextable2).source_system)
THEN
--
Dbms_output.Put_line('-----------------------------------------------');
-- Dbms_output.Put_line('Accumulating For Sourcesystem '||
L_tab_srcsysinfodel(L_int_indextable1).Source_system||
-- ' Over Delivery '||
L_tab_srcsysinfodel(L_int_indextable1).Delivery);
--
-- Accumulate Srcsys Amounts
l_tab_srcsysinfo (l_int_indextable2).amount_incl :=
l_tab_srcsysinfo (l_int_indextable2).amount_incl
+ l_tab_srcsysinfodel (l_int_indextable1).amount_incl;
--
l_tab_srcsysinfo (l_int_indextable2).amount_excl :=
l_tab_srcsysinfo (l_int_indextable2).amount_excl
+ l_tab_srcsysinfodel (l_int_indextable1).amount_excl;
--
l_tab_srcsysinfo (l_int_indextable2).amount_vat :=
l_tab_srcsysinfo (l_int_indextable2).amount_vat
+ l_tab_srcsysinfodel (l_int_indextable1).amount_vat;
-- Dbms_output.Put_line('Amountincl: '||
L_tab_srcsysinfo(L_int_indextable2).Amount_incl);
-- Dbms_output.Put_line('Amountexcl: '||
L_tab_srcsysinfo(L_int_indextable2).Amount_excl);
-- Dbms_output.Put_line('Amountvat : '||
L_tab_srcsysinfo(L_int_indextable2).Amount_vat);
--
l_bol_srcsysnotexists := FALSE;
END IF;
END LOOP;

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

FOR l_int_indextable IN 1 .. l_int_srcsysinfo


LOOP
-- Dbms_output.Put_line('Write To Table For Sourcesystem '||
L_tab_srcsysinfo(L_int_indextable).Source_system);
invo_04_pck.createinvsum_prc (
pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_int_cusdelno => 0,
pi_str_sumcode =>
l_tab_srcsysinfo (l_int_indextable).source_system,
pi_dbl_amountexcl =>
l_tab_srcsysinfo (l_int_indextable).amount_excl,
pi_dbl_amountincl =>
l_tab_srcsysinfo (l_int_indextable).amount_incl,
pi_dbl_vat =>
l_tab_srcsysinfo (l_int_indextable).amount_vat);
END LOOP;
END IF;

-- Dbms_output.Put_line('Now Set Invoice-Status');


-- Set Invoicestatus To '9'
setinvstatus_prc (pi_str_compcode => pi_str_compcode,
pi_str_invno => pi_str_invno,
pi_str_invstatus => c_str_invstatsrcsys);
--
-- 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('Calcgoods_begin');
ROLLBACK TO calcsrcsys_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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
-- L_bol_success := False; -- <0057>
--
END accumsourcesystems_prc;

--
-- ==========================================================================
-- 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>

SELECT COUNT (*)


INTO ispchandl
FROM special_handling_t
WHERE c = 'Y';
IF ispchandl > 0
THEN
batch_01_pck.logendstandardinfo_prc;
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
RETURN l_bol_success;
END IF;

--
-- 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;

--Commit; -- Novg <Change>


--Return True; -- Novg Novg <Change>
--
-- Write Invoice Information To Destination Tables And Create Temporary
Invoice Number
util_01_pck.log_prc (
pi_str_msg => 'Copy Data to Destination Tables',
pi_str_logtype => util_01_pck.c_str_logtypeapplication);

--RASHA16 RIMS-271 03/02/2022


-- Hack To Avoid Error Message In Correction Screen
fill_work_invoice_info_tmp_prc (
pi_str_compcode => glob_01_pck.getcompcode_fct);
copyworktodest_prc (pi_str_compcode => pi_str_compcode);

--
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 => l_str_criteria1,


pi_bol_logverbose => TRUE);
invo_06_pck.getinvheads_prc (pi_str_criteria => l_str_criteria1,
po_ref_cur => l_cur_invhead);

-- Loop Over All Found Invoice Headers For This Company


<<perinvoiceloop>>
LOOP
BEGIN --kiras1 RIMS-2118 PRB1000022548 - 26-MAR-2024
FETCH l_cur_invhead INTO l_rec_invhead;

EXIT WHEN l_cur_invhead%NOTFOUND;


util_01_pck.log_prc (
pi_str_msg =>

'*====================================================*');
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;
*/

-- Get The Pay-Terms-Code For This Accountnumber


util_01_pck.log_prc (
pi_str_msg =>
'Get Account ' || l_rec_invhead.acct_no);
DBMS_OUTPUT.put_line (
'Current InvNo: ' || l_rec_invhead.inv_no);
DBMS_OUTPUT.put_line (
'Current CompCode: ' || l_rec_invhead.comp_code);
DBMS_OUTPUT.put_line (
'Current Account Number: ' || l_rec_invhead.acct_no);

-- Does This Account Exist?


IF acct_01_pck.foundaccount_fct (
pi_str_compcode => pi_str_compcode,
pi_str_acctno => l_rec_invhead.acct_no)
THEN
DBMS_OUTPUT.put_line ('Have found the account!');
acct_01_pck.getaccount_prc (
pi_str_compcode => pi_str_compcode,
pi_str_acctno => l_rec_invhead.acct_no,
po_rec_acct => l_rec_acct);

--
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;

util_01_pck.log_prc (pi_str_msg => 'Test1',


pi_bol_logverbose => TRUE);

--
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;

util_01_pck.log_prc (pi_str_msg => 'Test3',


pi_bol_logverbose => TRUE);

--

-- 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;

-- Write The Invoices Into The Sendingtable To Coda


-- Novg Don'T Send Invoice Data To Pam For Plusfinance
--RIMS-354 rasha16 28/04/2022
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno,
pi_str_invstatus =>
c_str_potentialcredithandled)
OR /*kira1 19-03-24 RIMS-2328 - Invoice are not sent
to coda */
checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno,
pi_str_invstatus =>
c_str_invstatctrlno)
THEN
/* --RIMS-172 Removed this IF and replaced with
the next one
IF NOT cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality =>
'INVNOTTOPAM',
pi_str_condition1 =>
'COMP_CODE',
pi_str_value1 =>
l_rec_invhead.comp_code)*/
util_01_pck.log_prc (
pi_str_msg =>
'Writing Invoice in Sending Table for
CODA/PAM');
inssend_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno);
invo_12_pck.setinvstatus_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno,
pi_str_invstatus => c_str_invstatsend);
END IF;

--
IF NOT l_bol_success
THEN -- <0057>
RAISE eunexpectederroroccured;
END IF;

-- Put Invoices That Lack Needed Purchase-Order-No Out


Of The Running
IF checkinvstatus_fct (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno,
pi_str_invstatus => c_str_invstatsend)
THEN
-- Sobha5:
-- Purchase Order Number Will Be Sent From Ipos And
Shall Be Available
-- In Invoice_header_t. So, If Pu_order_no Is
Present It Is Not
-- Necessary To Call Checkpono_prc.
IF l_rec_invhead.pu_order_no IS NOT NULL
THEN
util_01_pck.log_prc (
pi_str_msg =>
'Purchase Order Number is Present, no
check',
pi_bol_logverbose => TRUE);
-- Set Invoice Status To Q (Continue Invoice
Processing)
setinvstatus_prc (
pi_str_compcode =>
l_rec_invhead.comp_code,
pi_str_invno => l_str_invno,
pi_str_invstatus =>
c_str_invstatpono);
ELSE
util_01_pck.log_prc (
pi_str_msg =>
'Check Purchase Order No.');
checkpono_prc (
pi_str_invno => l_str_invno,
pi_str_compcode =>
l_rec_invhead.comp_code);
END IF;
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;

-- Commit This Invoice, Whether It Ran On Error Or Not.


This Makes
-- Sure That:
-- - Faulty Invoices Are Taken Out Of The Running,
-- - Have The Last Working Procedure'S Inv_status
-- - All Other Invoices Will Be Produced Nonetheless
COMMIT;
--
ELSE -- Account Not Found
util_01_pck.log_prc (
pi_str_msg =>
'Account '
|| pi_str_compcode
|| '/'
|| l_rec_invhead.acct_no
|| ' not found for Invoice '
|| l_rec_invhead.inv_no,
pi_str_logtype =>
util_01_pck.c_str_logtypeapplication);
END IF;

-- Fill Invoice reference


-- rabha1 RIMS-2459 IPOS reference as payment reference
-- rasha16 Fix for updating payment_ref for RIMS-2459 IPOS reference as
payment reference
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'IPOSREFTEXTMAND',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => l_rec_invhead.comp_code)
THEN
MERGE INTO invoice_pay_ref_text_t ir
USING i_sales_pay_ref_t sr
ON ( ir.sto_no = sr.sto_no
AND ir.cash_no = sr.cash_no
AND ir.receipt_no = sr.receipt_no
AND ir.sales_date =
TO_CHAR (
TO_DATE (SUBSTR (sr.sales_date, 1, 10),
'YYYY-MM-DD'),
'YYYY-MM-DD'))
WHEN MATCHED
THEN
UPDATE SET ir.ref_text = sr.ref_text
WHEN NOT MATCHED
THEN
INSERT (comp_code,
inv_no,
sto_no,
cash_no,
receipt_no,
sales_date,
ref_text)
VALUES (l_rec_invhead.comp_code,
l_rec_invhead.inv_no,
sr.sto_no,
sr.cash_no,
sr.receipt_no,
sr.sales_date,
sr.ref_text)
WHERE sr.sto_no = l_rec_invhead.sto_no
AND sr.cash_no = l_rec_invhead.cash_no
AND sr.receipt_no = l_rec_invhead.receipt_no
AND TO_DATE (SUBSTR (sr.sales_date, 1, 10),
'YYYY-MM-DD') =
l_rec_invhead.sales_date;

END IF;

-- Update payment reference in o_invoice_T


BEGIN
SELECT ref_text
INTO l_str_payref
FROM INVOICE_PAY_REF_TEXT_T
WHERE comp_code = l_rec_invhead.comp_code
AND inv_no = l_rec_invhead.inv_no;

--
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;

EXCEPTION --kiras1 RIMS-2118 PRB1000022548 - 26-MAR-2024


WHEN OTHERS
THEN
ROLLBACK;
batch_01_pck.logerrorstandardinfo_prc (
pi_str_sqlerror => SQLERRM);
END; ---kiras1 RIMS-2118 PRB1000022548 - 26-MAR-2024
--
END LOOP perinvoiceloop;

--
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

-- Standard End Logging


batch_01_pck.logendstandardinfo_prc;
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
RETURN l_bol_success;
--
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);
RETURN FALSE;
--
END createinvoices_fct;

--
-- ==========================================================================
-- 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;

EXIT WHEN l_cur_wiih%NOTFOUND;


-- Get Invoices To Set On Hold
l_str_criteria :=
' CASH_NO = ' || TO_CHAR (l_rec_wiih.cash_no);
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND RECEIPT_NO = '
|| TO_CHAR (l_rec_wiih.receipt_no);

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;

EXIT WHEN l_cur_invoicelines%NOTFOUND;


--
l_str_errorflag := l_rec_invoicelines.error_flag;
EXIT;
END LOOP;

-- Set Order No.And "Hold" Mark


l_str_errorflag := l_str_errorflag || 'H';
invo_02_pck.changeinvoicework_prc (
pi_str_errorflag => l_str_errorflag,
pi_int_orderno => l_rec_wiih.order_no,
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 "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;

-- Standard End Logging


batch_01_pck.logendstandardinfo_prc;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
COMMIT;
--
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
--
END markinvoicehold_prc;

--
-- ==========================================================================
-- 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;

EXIT WHEN l_cur_wiih%NOTFOUND;


-- Get Invoices To Set On Unhold
l_str_criteria :=
' CASH_NO = ' || TO_CHAR (l_rec_wiih.cash_no);
l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND RECEIPT_NO = '
|| TO_CHAR (l_rec_wiih.receipt_no);

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;

EXECUTE IMMEDIATE l_str_stmt;

--
-- 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;

-- Standard End Logging


batch_01_pck.logendstandardinfo_prc;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
COMMIT;
--
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
--
END markinvoiceunhold_prc;
--
-- ==========================================================================
-- Description : Unmark All Lines Of An Invoice To Be Processed In Combination
-- With An Order.
-- Author : Andreas Theimer
-- ==========================================================================
PROCEDURE markinvoiceprocess_prc
IS
c_str_prcname CONSTANT appl_elog_v.module_hierarchy%TYPE
:= 'MarkInvoiceProcess_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_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);
--
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"');
-- 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 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;

EXIT WHEN l_cur_invoicelines%NOTFOUND;


--
l_str_invtype := l_rec_invoicelines.inv_type;
EXIT;
END LOOP;

--
-- 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;

-- Standard End Logging


batch_01_pck.logendstandardinfo_prc;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
COMMIT;
--
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
--
END markinvoiceprocess_prc;

--
-- ==========================================================================
-- 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;

EXIT WHEN l_cur_invoicelines%NOTFOUND;


--
l_str_invtype := l_rec_invoicelines.inv_type;
l_str_salesdate := l_rec_invoicelines.sales_date;
l_str_compcode := l_rec_invoicelines.comp_code;
l_str_orderno :=
l_rec_invoicelines.sto_no
|| l_rec_invoicelines.order_no;
l_str_totcustno := TRIM (l_rec_invoicelines.tot_cust_no);
EXIT;
END LOOP;

--
-- 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;

-- Standard End Logging


batch_01_pck.logendstandardinfo_prc;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
COMMIT;
--
RETURN l_str_salesdate;
--
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
l_str_salesdate := NULL;
-- 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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
--
RETURN l_str_salesdate;
--
END markinvoiceprocess_fct;

--
-- ==========================================================================
-- 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 := ' trans_type = ''HOLD''';


l_str_criteria :=
l_str_criteria
|| CHR (10)
|| ' AND processed IN ('''
|| invo_46_pck.c_str_invholdprocessed
|| ''', '''
|| invo_46_pck.c_str_invholdorderwait
|| ''')';

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;

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_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;

-- Standard End Logging


batch_01_pck.logendstandardinfo_prc;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
COMMIT;
--
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
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);

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');

l_int_maxnofdays := TO_NUMBER (l_str_maxnofdays);

--
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;

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_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;

-- Standard End Logging


batch_01_pck.logendstandardinfo_prc;
--
-- Remove Module From The Module Hierarchy.
appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
--
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
-- 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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
--
END markmaxnofdayspassed_prc;

--
-- ==========================================================================
-- 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;
--

l_str_criteria VARCHAR2 (500) := NULL;


l_cur_invsums invo_sums_pck.typ_cur;
l_rec_invsums invoice_sums_v%ROWTYPE;
-- Object Types For Processing Potential Credit
l_obj_processpotcred o_processpotcred;
--
l_num_transid potential_credit_v.act_trans_id%TYPE := 0;
l_dbl_orderamount potential_credit_history_v.order_amount%TYPE
:= 0;
--
BEGIN
-- Add Module Name To Module Hierarchy.
appl_02_pck.addmodulehierarchy_prc (
pi_str_addmodule => c_str_addmodule);
--
SAVEPOINT potentialcredit_begin;
--
-- Initialize Process Potential Credit Object
purc_21_pck.initializeprocesspotcred_prc (
pio_obj_processpotcred => l_obj_processpotcred);
--
l_obj_processpotcred.compcode := pi_str_compcode;
l_obj_processpotcred.invno := pi_str_invno;
l_obj_processpotcred.upddate := SYSDATE;
--
-- 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 order_no = '''
|| l_rec_invhead.order_no
|| ''' and acct_no = '''
|| l_rec_invhead.acct_no
|| '''';
--
-- Get Potential Credit For Company, Account And Order
l_bol_found :=
purc_21_pck.getpotentialcredit_fct (
pi_str_criteria => l_str_criteria,
po_obj_processpotcred => l_obj_processpotcred);
IF l_bol_found
THEN
CASE
WHEN l_obj_processpotcred.status = 'C'
THEN
-- Error, Order Is Already Cancelled
l_obj_processpotcred.status := 'E';
WHEN l_obj_processpotcred.status = 'M'
THEN
-- Error, Potential Credit Has Already Been Cleared Manually
l_obj_processpotcred.status := 'E';
WHEN l_obj_processpotcred.status = 'F'
THEN
-- Invoice For Order Is Created
l_obj_processpotcred.status := 'X';
WHEN l_obj_processpotcred.status = 'X'
THEN
-- Error, Final Status Has Already Been Reached
l_obj_processpotcred.status := 'E';
WHEN l_obj_processpotcred.status = 'E'
THEN
-- Error Remains Error
l_obj_processpotcred.status := 'E';
NULL;
ELSE
l_obj_processpotcred.status := 'D';
END CASE;

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

-- Get Amount For Order From Invoice_sums_t By Calling


Invo_04_pck.Getinvsums_prc
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = ''0'' '
|| ' AND SUBSTR(sum_code,1,5) = ''ISELL'' ';

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;

EXIT WHEN l_cur_invsums%NOTFOUND;


l_dbl_orderamount := 0 - l_rec_invsums.amount_incl;
l_obj_processpotcred.orderamount :=
l_obj_processpotcred.orderamount
- l_rec_invsums.amount_incl;
END LOOP;

CLOSE l_cur_invsums;

-- Loop Over Invoice_sums_t For The Actual Invoice Transaction To Get


Total Amount Of Each Delivery
-- For One Invoice Transaction, Only The Isell Delivery Should Be Shown
-- As Del_amount And Not Totaldel
IF l_rec_invhead.one_inv = 'Y'
THEN
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND cusdel_no = ''0'' '
|| ' AND SUBSTR(sum_code,1,5) = ''ISELL'' ';
ELSE
l_str_criteria :=
'comp_code = '''
|| pi_str_compcode
|| ''''
|| ' AND inv_no = '''
|| pi_str_invno
|| ''''
|| ' AND SUBSTR(sum_code,1,8) = ''TOTALDEL'' ';
END IF;

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;

EXIT WHEN l_cur_invsums%NOTFOUND;


l_obj_processpotcred.delamount :=
0 - l_rec_invsums.amount_incl;
l_obj_processpotcred.cusdelno := l_rec_invsums.cusdel_no;

-- 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;

-- Update Order_amount With The Total Order Amount Of All


Deliveries
-- That Are Processed Together For One Order
purc_21_pck.updpotcredhisttotamount_prc (
pi_num_transid => l_num_transid,
pi_dbl_orderamount => l_dbl_orderamount);
END LOOP;

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;

-- Set Invstatus To '7'


setinvstatus_prc (pi_str_invno => pi_str_invno,
pi_str_compcode => pi_str_compcode,
pi_str_invstatus => c_str_potentialcredithandled);

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;

-- Remove Module From The Module Hierarchy.


appl_02_pck.removemodulehierarchy_prc (
pi_str_removemodule => c_str_addmodule);
EXCEPTION
WHEN OTHERS
THEN
-- Dbms_output.Put_line('Setinvoicetype_begin');
ROLLBACK TO potentialcredit_begin;
l_bol_success := FALSE;
-- 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);

batch_01_pck.logerrorstandardinfo_prc (pi_str_sqlerror => SQLERRM);


util_01_pck.log_prc (
pi_str_msg => 'Rollback in ' || c_str_prcname);
--
END potcred_prc;

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

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

--
-- 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;

--
--

--kiras1 08-JULY-2024 RIMS-2457 Release potential credit when booking


confirmation is received from SAP.
PROCEDURE RELPOTENTIALCREDIT_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 ;
BEGIN
-- Add module name to module hierarchy.
Appl_02_Pck.AddModuleHierarchy_prc (
pi_str_AddModule => c_str_AddModule);

FOR rec IN (SELECT *


FROM company_dest_send_t
WHERE destination = 'SAP' AND TRANSACTION = 'INVOICE')
LOOP
-- Check if RELPOTENTIALCREDIT is enabled for the company
IF cfuncs_02_pck.condfunctistrue_fct (
pi_str_functionality => 'RELPOTENTIALCREDIT',
pi_str_condition1 => 'COMP_CODE',
pi_str_value1 => rec.comp_code)
THEN
FOR inv
IN (SELECT *
FROM o_invoice_t
WHERE SUBSTR (reference_identifier, 1, 4) =
rec.comp_code
AND status = 'B'
AND pot_cred_upd_date IS NULL)
LOOP
-- Call the procedure invo_12_pck.potcred_prc with invoice
number and company code
invo_12_pck.potcred_prc (
pi_str_invno => inv.inv_no,
pi_str_compcode => rec.comp_code);

-- Update the pot_cred_upd_date to the current date


UPDATE o_invoice_t
SET pot_cred_upd_date = SYSDATE
WHERE REFERENCE_IDENTIFIER = inv.REFERENCE_IDENTIFIER;
END LOOP;
END IF;

-- Commit after processing each company for SAP coutries


COMMIT;
END LOOP;

-- ** Remove module from the module hierarchy


Appl_02_Pck.RemoveModuleHierarchy_prc (
pi_str_RemoveModule => c_str_AddModule);
EXCEPTION
WHEN OTHERS
THEN
-- Log the error message and details for the entire procedure for SAP
coutries.
DBMS_OUTPUT.PUT_LINE (
'Error in RELPOTENTIALCREDIT_PRC: ' || SQLERRM);
-- Rollback the entire transaction if an error occurs for SAP coutries.
ROLLBACK;
END RELPOTENTIALCREDIT_PRC;
END invo_12_pck;

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy