Files
mip/Data/BulkLoad/EFT/Nominations/plsql/caco_utilities.bdy

1399 lines
44 KiB
Plaintext

CREATE OR REPLACE PACKAGE BODY caco_utilities IS
g_header CONSTANT VARCHAR2(160) := '$Header: /Isle Of Grain/database/PLSQL/caco_utilities.pck 1 7/01/05 12:54 Gilberta $';
g_revision CONSTANT VARCHAR2(160) := '$Revision: 1 $';
/*
* $History: caco_utilities.pck $
*
* ***************** Version 1 *****************
* User: Gilberta Date: 7/01/05 Time: 12:54
* Created in $/Isle Of Grain/database/PLSQL
* Initial Version
*
* -- Based on CALMS revision 11 --
*/
--
-- Constants for the hash functions
--
c_hash_base CONSTANT NUMBER := 0;
c_hash_size CONSTANT NUMBER := POWER(2
,30);
--
-- Log Error
--
PROCEDURE log_error(p_error_rec IN error_logs%ROWTYPE) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
--
INSERT INTO error_logs
(error_type
,SOURCE
,severity
,ERROR_CODE
,error_message
,error_date
,error_status)
VALUES
(p_error_rec.error_type
,p_error_rec.SOURCE
,p_error_rec.severity
,p_error_rec.ERROR_CODE
,p_error_rec.error_message
,p_error_rec.error_date
,p_error_rec.error_status);
--
COMMIT;
--
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20000
,caco_utilities.get_system_name || ' ' ||
SQLERRM
,TRUE);
ROLLBACK;
END log_error;
--
-- Record Field
--
-- Created as a varchar returning function as should work for all file elements allowing data conversion later.
-- p_string is the entire comma delimited to be used and p_field_number is the field element to be returned.
--
FUNCTION record_field(p_string IN VARCHAR2
,p_delimiter IN VARCHAR2
,p_field_number IN NUMBER) RETURN VARCHAR2 IS
v_field_value VARCHAR2(2000);
--
c_start_position CONSTANT NUMBER := 1;
--
BEGIN
--
v_field_value := NULL;
--
IF p_field_number > 1
AND instr(p_string
,p_delimiter
,c_start_position
,p_field_number) > 0 THEN
v_field_value := substr(p_string
,instr(p_string
,p_delimiter
,c_start_position
,p_field_number - 1) + 1
,instr(p_string
,p_delimiter
,c_start_position
,p_field_number) -
(instr(p_string
,p_delimiter
,c_start_position
,p_field_number - 1) + 1));
ELSIF p_field_number > 1
AND instr(p_string
,p_delimiter
,c_start_position
,p_field_number) = 0 THEN
--
-- Need to handle final field diffently as no delimiter at end of record.
--
v_field_value := substr(p_string
,instr(p_string
,p_delimiter
,c_start_position
,p_field_number - 1) + 1
,length(p_string) -
instr(p_string
,p_delimiter
,c_start_position
,p_field_number - 1) + 1);
ELSE
--
-- Need to handle field 1 differently as no delimiter at start of record.
--
IF nvl(instr(p_string
,p_delimiter
,c_start_position
,p_field_number) - 1
,0) > 0 THEN
v_field_value := substr(p_string
,c_start_position
,instr(p_string
,p_delimiter
,c_start_position
,p_field_number) - 1);
ELSE
-- No delimiter.
v_field_value := substr(p_string
,c_start_position
,length(p_string));
END IF;
END IF;
--
RETURN(v_field_value);
--
END record_field;
--
-- Delimiter to table
--
FUNCTION delimiter_to_table(p_string IN VARCHAR2
,p_delimiter IN VARCHAR2
,p_error_msg OUT VARCHAR2) RETURN t_vc_table IS
v_num_of_fields NUMBER;
tbl_empty t_vc_table;
tbl_of_values t_vc_table;
BEGIN
--
tbl_of_values := tbl_empty;
v_num_of_fields := 0;
--
-- Need to add one to this value as there is always one more field than delimeters
--
v_num_of_fields := (length(p_string) -
length(REPLACE(p_string
,p_delimiter))) + 1;
FOR v_position IN 1 .. v_num_of_fields LOOP
--
tbl_of_values(v_position) := record_field(p_string => p_string
,p_delimiter => p_delimiter
,p_field_number => v_position);
--
END LOOP;
--
RETURN(tbl_of_values);
--
EXCEPTION
WHEN OTHERS THEN
p_error_msg := 'Error in delimiter_to_table : ' || SQLERRM;
END delimiter_to_table;
--
--
-- Disassemble file name
--
PROCEDURE disassemble_file_name(p_file_name IN VARCHAR2
,p_file_prefix OUT VARCHAR2
,p_date_created OUT VARCHAR2
,p_file_suffix OUT VARCHAR2
,p_error_msg OUT VARCHAR2) IS
l_string VARCHAR2(255);
l_file_prefix VARCHAR2(10);
l_date_created VARCHAR2(20);
l_file_suffix VARCHAR2(10);
c_file_prefix_length CONSTANT NUMBER := 4;
c_file_delimiter CONSTANT VARCHAR(1) := '.';
c_suffix_length CONSTANT NUMBER := 3;
BEGIN
l_string := NULL;
l_file_prefix := NULL;
l_date_created := NULL;
l_file_suffix := NULL;
--
-- Get the file suffix (1st piece) and remove it.
--
l_string := p_file_name;
l_file_prefix := substr(l_string
,1
,c_file_prefix_length);
l_string := substr(l_string
,c_file_prefix_length + 1);
--
-- Get the serial Number (2nd piece and remove it).
--
l_date_created := substr(l_string
,1
,instr(l_string
,c_file_delimiter) - 1);
l_string := substr(l_string
,instr(l_string
,c_file_delimiter) + 1);
--
-- Final piece should just be the date and suffix of the file name, we need the last two characters of the suffix
-- which should be the stream number.
--
l_file_suffix := substr(l_string
,-c_suffix_length
,c_suffix_length);
--
-- Assign the out parameters.
--
p_file_prefix := l_file_prefix;
p_date_created := l_date_created;
p_file_suffix := l_file_suffix;
--
EXCEPTION
WHEN OTHERS THEN
p_error_msg := 'ERROR in disassemble_file_name : ' || SQLERRM;
END disassemble_file_name;
--
PROCEDURE get_user_data(p_reload IN BOOLEAN DEFAULT FALSE) IS
--
--
BEGIN
--
IF caco_security.g_current_syus_id IS NULL
OR caco_security.g_current_cust_id IS NULL
OR caco_security.g_current_inte_id IS NULL
OR caco_security.g_client_id IS NULL
OR p_reload THEN
--
caco_security.get_session_data;
--
END IF;
--
END get_user_data;
FUNCTION get_system_customer RETURN NUMBER IS
BEGIN
--
RETURN cout_system_configuration.get_configuration_item('CUST_ID');
--
END get_system_customer;
--
FUNCTION get_system_intermediary RETURN NUMBER IS
BEGIN
--
RETURN cout_system_configuration.get_configuration_item('INTE_ID');
--
END get_system_intermediary;
--
FUNCTION get_system_name RETURN VARCHAR2 IS
BEGIN
--
RETURN nvl(cout_system_configuration.get_configuration_item('NAME')
,'No Name');
--
END get_system_name;
--
FUNCTION get_sypr_name(p_sypr_id IN system_profiles.sypr_id%TYPE
,p_default IN VARCHAR2 DEFAULT 'No Profile Name')
RETURN system_profiles.NAME%TYPE IS
--
v_return VARCHAR2(100);
--
BEGIN
--
FOR v_sypr IN (SELECT NAME
FROM system_profiles
WHERE sypr_id = p_sypr_id) LOOP
v_return := v_sypr.NAME;
END LOOP;
--
RETURN nvl(v_return
,p_default);
--
END get_sypr_name;
FUNCTION get_syus_id RETURN system_users.syus_id%TYPE IS
--
--
BEGIN
--
get_user_data;
--
RETURN nvl(caco_security.g_current_syus_id
,get_system_user);
--
EXCEPTION
WHEN OTHERS THEN
RETURN get_system_user;
END get_syus_id;
--
FUNCTION get_cust_id RETURN customers.cust_id%TYPE IS
--
--
BEGIN
--
get_user_data;
--
RETURN caco_security.g_current_cust_id;
--
END get_cust_id;
FUNCTION get_system_user RETURN NUMBER IS
BEGIN
--
RETURN cout_system_configuration.get_configuration_item('SYUS_ID');
--
END get_system_user;
--
--
FUNCTION get_inte_id RETURN intermediaries.inte_id%TYPE IS
--
--
BEGIN
--
get_user_data;
--
RETURN caco_security.g_current_inte_id;
--
END get_inte_id;
--
FUNCTION get_syus_name(p_syus_id IN system_users.syus_id%TYPE DEFAULT NULL)
RETURN system_users.db_username%TYPE IS
--
CURSOR cur_syus(p_syus_id IN system_users.syus_id%TYPE) IS
SELECT syus.db_username
FROM system_users syus
WHERE syus.syus_id = p_syus_id;
--
v_return system_users.db_username%TYPE;
v_syus_id system_users.syus_id%TYPE;
--
BEGIN
--
IF p_syus_id IS NOT NULL THEN
--
v_syus_id := p_syus_id;
--
ELSE
--
v_syus_id := get_syus_id;
--
END IF;
--
OPEN cur_syus(v_syus_id);
FETCH cur_syus
INTO v_return;
CLOSE cur_syus;
--
RETURN nvl(v_return
,'No User Name');
--
END get_syus_name;
--
FUNCTION get_syus_lang(p_syus_id IN system_users.syus_id%TYPE DEFAULT NULL)
RETURN system_users.LANGUAGE%TYPE IS
--
CURSOR cur_syus(p_syus_id IN system_users.syus_id%TYPE) IS
SELECT syus.LANGUAGE
FROM system_users syus
WHERE syus.syus_id = p_syus_id;
--
v_return system_users.LANGUAGE%TYPE;
v_syus_id system_users.syus_id%TYPE;
--
BEGIN
--
IF p_syus_id IS NOT NULL THEN
--
v_syus_id := p_syus_id;
--
ELSE
--
v_syus_id := get_syus_id;
--
END IF;
--
OPEN cur_syus(v_syus_id);
FETCH cur_syus
INTO v_return;
CLOSE cur_syus;
--
RETURN(v_return);
--
END get_syus_lang;
--
FUNCTION get_cust_name(p_cust_id IN customers.cust_id%TYPE DEFAULT NULL
,p_default IN VARCHAR2 DEFAULT 'No Customer Name')
RETURN customers.NAME%TYPE IS
--
v_return customers.NAME%TYPE;
v_cust_id customers.cust_id%TYPE;
--
BEGIN
--
IF p_cust_id IS NULL THEN
--
v_cust_id := get_cust_id;
--
ELSE
--
v_cust_id := p_cust_id;
--
END IF;
--
FOR v_cust IN (SELECT NAME
FROM customers
WHERE cust_id = v_cust_id) LOOP
v_return := v_cust.NAME;
END LOOP;
--
RETURN nvl(v_return
,p_default);
--
END get_cust_name;
--
FUNCTION get_inte_name(p_inte_id IN intermediaries.inte_id%TYPE DEFAULT NULL
,p_default IN VARCHAR2 DEFAULT 'No Intermediary Name')
RETURN intermediaries.NAME%TYPE IS
--
v_return intermediaries.NAME%TYPE;
v_inte_id intermediaries.inte_id%TYPE;
--
BEGIN
--
v_inte_id := nvl(p_inte_id
,get_inte_id);
FOR v_inte IN (SELECT NAME
FROM intermediaries
WHERE inte_id = v_inte_id) LOOP
v_return := v_inte.NAME;
END LOOP;
--
RETURN nvl(v_return
,p_default);
--
END get_inte_name;
--
-- Get hash value
--
FUNCTION get_hash_value(p_hash_key IN t_hash_key) RETURN t_hash_value IS
v_hash_value t_hash_value;
BEGIN
v_hash_value := dbms_utility.get_hash_value(p_hash_key
,c_hash_base
,c_hash_size);
RETURN v_hash_value;
END get_hash_value;
--
-- Get Exception Message
--
PROCEDURE get_exception_message(p_exception_number IN exception_messages.exception_number%TYPE
,p_message IN OUT exception_messages.message%TYPE
,p_exme_type IN OUT exception_messages.exme_type%TYPE
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list
,p_language IN system_users.language%TYPE DEFAULT caco_utilities.get_syus_lang) IS
--
l_index PLS_INTEGER;
l_def_lang VARCHAR2(2) := 'EN';
--
BEGIN
--
BEGIN
--
SELECT TO_CHAR(ABS(exception_number)) || ': ' || message
,exme_type
INTO p_message
,p_exme_type
FROM exception_messages
WHERE exception_number = p_exception_number
AND language = NVL(p_language, l_def_lang);
--
EXCEPTION
WHEN no_data_found THEN
p_message := 'UNABLE TO FIND MESSAGE FOR EXCEPTION ' ||
to_char(p_exception_number);
p_exme_type := 'E';
END;
--
l_index := p_substitution_list.FIRST;
--
LOOP
--
EXIT WHEN l_index IS NULL;
p_message := REPLACE(p_message
,'<p' || l_index || '>'
,p_substitution_list(l_index));
l_index := p_substitution_list.NEXT(l_index);
--
END LOOP;
--
END get_exception_message;
--
PROCEDURE raise_exception_error(p_exception_number IN exception_messages.exception_number%TYPE
,p_substitution_list IN g_t_substitution_list DEFAULT c_empty_substitution_list) IS
v_message exception_messages.message%TYPE;
v_exme_type exception_messages.exme_type%TYPE;
BEGIN
get_exception_message(p_exception_number => p_exception_number
,p_message => v_message
,p_exme_type => v_exme_type
,p_substitution_list => p_substitution_list);
raise_application_error(p_exception_number
,caco_utilities.get_system_name || v_exme_type || ' ' ||
v_message
,TRUE);
END raise_exception_error;
--
PROCEDURE raise_exception_error(p_exception_number IN exception_messages.exception_number%TYPE
,p_additional_message IN VARCHAR2) IS
v_message exception_messages.message%TYPE;
v_exme_type exception_messages.exme_type%TYPE;
BEGIN
get_exception_message(p_exception_number => p_exception_number
,p_message => v_message
,p_exme_type => v_exme_type);
raise_application_error(p_exception_number
,caco_utilities.get_system_name || v_exme_type || ' ' ||
v_message || ':' || p_additional_message
,TRUE);
END raise_exception_error;
--
-- Generic error reporting procedure which will replace up to five
-- characters ('<pn>') in message text with parameter values.
--
PROCEDURE raise_exception_error_param(p_exception_number IN exception_messages.exception_number%TYPE
,p_substitution_list IN g_t_substitution_list DEFAULT c_empty_substitution_list) IS
--
v_message exception_messages.message%TYPE;
v_exme_type exception_messages.exme_type%TYPE;
--
BEGIN
--
get_exception_message(p_exception_number => p_exception_number
,p_message => v_message
,p_exme_type => v_exme_type
,p_substitution_list => p_substitution_list);
raise_application_error(p_exception_number
,caco_utilities.get_system_name || v_exme_type || ' ' ||
v_message
,TRUE);
--
END raise_exception_error_param;
--
FUNCTION raise_error(p_error_number IN exception_messages.exception_number%TYPE
,p_substitution_list IN g_t_substitution_list DEFAULT c_empty_substitution_list)
RETURN BOOLEAN IS
--
v_message exception_messages.message%TYPE;
v_exme_type exception_messages.exme_type%TYPE;
--
BEGIN
--
get_exception_message(p_exception_number => p_error_number
,p_message => v_message
,p_exme_type => v_exme_type
,p_substitution_list => p_substitution_list);
cg$errors.push(msg => v_message
,error => v_exme_type
,msg_type => ''
,msgid => p_error_number
,loc => 'APPLICATION');
RETURN FALSE;
--
END raise_error;
FUNCTION get_ints(p_how_many IN NUMBER) RETURN t_int_array AS
v_int_array t_int_array := t_int_array();
BEGIN
FOR v_index IN 1 .. p_how_many LOOP
v_int_array.EXTEND;
v_int_array(v_index) := v_index;
END LOOP;
RETURN v_int_array;
END get_ints;
FUNCTION cgrefvalue(p_domain IN cg_ref_codes.rv_domain%TYPE
,p_meaning IN cg_ref_codes.rv_meaning%TYPE)
RETURN VARCHAR2 IS
CURSOR c_cgrc IS
SELECT rv_low_value
FROM cg_ref_codes
WHERE rv_domain = p_domain
AND rv_meaning = p_meaning;
v_value cg_ref_codes.rv_low_value%TYPE;
BEGIN
FOR r_cgrc IN c_cgrc LOOP
v_value := r_cgrc.rv_low_value;
END LOOP;
RETURN v_value;
END cgrefvalue;
FUNCTION cgrefmeaning(p_domain IN cg_ref_codes.rv_domain%TYPE
,p_value IN cg_ref_codes.rv_low_value%TYPE)
RETURN VARCHAR2 IS
CURSOR c_cgrc IS
SELECT rv_meaning
FROM cg_ref_codes
WHERE rv_domain = p_domain
AND rv_low_value = p_value;
v_meaning cg_ref_codes.rv_meaning%TYPE;
BEGIN
FOR r_cgrc IN c_cgrc LOOP
v_meaning := r_cgrc.rv_meaning;
END LOOP;
RETURN v_meaning;
END cgrefmeaning;
--
-- Function to return value of global package defined variable g_global_date
--
FUNCTION get_global_date RETURN DATE IS
BEGIN
--
RETURN g_global_date;
--
END get_global_date;
--
FUNCTION get_syus_first_last_db_names(p_syus_id IN system_users.syus_id%TYPE)
RETURN VARCHAR2 IS
v_first_name system_users.first_name%TYPE;
v_last_name system_users.last_name%TYPE;
v_db_username system_users.db_username%TYPE;
BEGIN
SELECT first_name
,last_name
,db_username
INTO v_first_name
,v_last_name
,v_db_username
FROM system_users
WHERE syus_id = p_syus_id;
RETURN v_first_name || ' ' || v_last_name || ' ' || v_db_username;
EXCEPTION
WHEN no_data_found THEN
RETURN 'ERROR- get_syus_first_last_db_names - syus_id ' || p_syus_id || ' NOT FOUND';
END get_syus_first_last_db_names;
FUNCTION chk_overlap(p_requested_start IN DATE
,p_requested_end IN DATE
,p_existing_start IN DATE
,p_existing_end IN DATE) RETURN VARCHAR2 IS
BEGIN
IF ((p_requested_start >= p_existing_start AND
p_requested_start < p_existing_end) OR
(p_requested_end > p_existing_start AND
p_requested_end <= p_existing_end) OR
(p_existing_start >= p_requested_start AND
p_existing_start < p_requested_end) OR
(p_existing_end > p_requested_start AND
p_existing_end <= p_requested_end)) THEN
RETURN 'TRUE'; -- periods overlap
ELSE
RETURN 'FALSE'; -- no overlap
END IF;
END chk_overlap;
--
--
FUNCTION get_module_text(p_text_number IN NUMBER
,p_language IN system_users.LANGUAGE%TYPE DEFAULT caco_utilities.get_syus_lang)
RETURN VARCHAR IS
--
v_return VARCHAR2(1000);
v_def_lang VARCHAR2(2) := 'EN';
--
CURSOR cur_mt(p_text_number IN NUMBER, p_language IN system_users.LANGUAGE%TYPE) IS
SELECT mt.text
FROM module_text mt
WHERE mt.text_number = p_text_number
AND mt.LANGUAGE = p_language;
--
BEGIN
--
OPEN cur_mt(p_text_number
,nvl(p_language
,v_def_lang));
FETCH cur_mt
INTO v_return;
--
IF cur_mt%NOTFOUND THEN
--
v_return := '***Text Not Found***';
--
END IF;
--
CLOSE cur_mt;
--
RETURN v_return;
--
END get_module_text;
--
PROCEDURE string_to_table(p_string IN VARCHAR2
,p_delimiter IN VARCHAR2 := ','
,p_table OUT t_string_table
,p_count OUT NUMBER) IS
-- v_string VARCHAR2(2000) := p_string;
v_delimiter_string VARCHAR2(80) := substr(p_delimiter
,1
,80);
v_delimiter VARCHAR2(1);
v_from NUMBER := 1;
v_to NUMBER;
v_count NUMBER := 1;
v_continue BOOLEAN := TRUE;
FUNCTION instr_delimiter(p_string IN VARCHAR2
,p_pos IN NUMBER
,p_delimiter_string IN VARCHAR2
,p_delimiter_found OUT VARCHAR2) RETURN NUMBER IS
v_return_delimiter VARCHAR2(1);
v_return_pos NUMBER := 0;
v_delimiter VARCHAR2(1);
v_pos NUMBER := 0;
BEGIN
FOR v_index IN 1 .. length(p_delimiter_string) LOOP
v_delimiter := substr(p_delimiter_string
,v_index
,1);
v_pos := instr(p_string
,v_delimiter
,p_pos);
IF v_pos > 0
AND (v_pos < v_return_pos OR v_return_pos = 0) THEN
v_return_pos := v_pos;
v_return_delimiter := v_delimiter;
END IF;
END LOOP;
p_delimiter_found := v_return_delimiter;
RETURN v_return_pos;
END instr_delimiter;
BEGIN
p_count := 0;
IF p_string IS NULL
OR v_delimiter_string IS NULL THEN
-- missing parameters
p_table.DELETE;
ELSIF instr_delimiter(p_string => p_string
,p_pos => 1
,p_delimiter_string => v_delimiter_string
,p_delimiter_found => v_delimiter) = 0 THEN
--
-- there are no delimiters in the given string
--
p_table(1).stringpart := p_string;
p_table(1).delimiter := NULL;
p_count := 1;
ELSE
-- string and delimiter valid.
BEGIN
WHILE v_continue LOOP
v_to := instr_delimiter(p_string => p_string
,p_pos => v_from
,p_delimiter_string => v_delimiter_string
,p_delimiter_found => v_delimiter);
IF v_to = 0 THEN
v_to := length(p_string) + 1;
v_continue := FALSE;
END IF;
p_table(v_count).stringpart := substr(p_string
,v_from
,(v_to - v_from));
p_table(v_count).delimiter := v_delimiter;
v_from := v_to + 1;
v_count := v_count + 1;
END LOOP;
p_count := v_count - 1;
END;
IF instr(v_delimiter_string
,substr(p_string
,length(p_string)
,1)) < 1 THEN
--
-- the last string did not end with a delimiter
--
p_table(p_count).delimiter := NULL;
END IF;
END IF;
END string_to_table;
FUNCTION translate_lang(p_text IN VARCHAR2
,p_language_source IN VARCHAR2 DEFAULT 'EN'
,p_language_destination IN VARCHAR2 DEFAULT 'EN')
RETURN VARCHAR2 IS
v_string_table t_string_table;
v_string_count NUMBER;
v_return_string VARCHAR2(32767);
FUNCTION translate_string(p_text IN VARCHAR2
,p_language_source IN module_text.LANGUAGE%TYPE DEFAULT 'EN'
,p_language_destination IN module_text.LANGUAGE%TYPE DEFAULT 'EN')
RETURN module_text.text%TYPE IS
v_trans_string VARCHAR2(4000);
BEGIN
SELECT utl_http.request('http://translate.google.com/translate_t?text=' ||
REPLACE(p_text
,' '
,'%20') || '&langpair=' ||
p_language_source || '%7C' ||
lower(p_language_destination) ||
'&hl=en&ie=ISO-8859-1'
,'heat:8080')
INTO v_trans_string
FROM dual;
v_trans_string := substr(v_trans_string
,instr(v_trans_string
,'PHYSICAL>') + 9
,instr(substr(v_trans_string
,instr(v_trans_string
,'PHYSICAL>') + 9)
,'</textarea>') - 1);
RETURN v_trans_string;
END translate_string;
BEGIN
string_to_table(p_string => p_text
,p_delimiter => ':;"'
,p_table => v_string_table
,p_count => v_string_count);
FOR v_index IN 1 .. v_string_count LOOP
IF NOT v_string_table(v_index).stringpart IS NULL THEN
v_return_string := v_return_string ||
translate_string(p_text => v_string_table(v_index)
.stringpart
,p_language_source => p_language_source
,p_language_destination => p_language_destination) ||
v_string_table(v_index).delimiter;
ELSE
v_return_string := v_return_string || v_string_table(v_index)
.delimiter;
END IF;
END LOOP;
RETURN v_return_string;
END translate_lang;
FUNCTION add_module_text(p_text IN module_text.text%TYPE
,p_language IN module_text.LANGUAGE%TYPE)
RETURN module_text.text_number%TYPE IS
v_text_number module_text.text_number%TYPE;
v_text_already_exists BOOLEAN DEFAULT TRUE;
v_text module_text.text%TYPE;
BEGIN
BEGIN
SELECT text_number
INTO v_text_number
FROM module_text
WHERE text = p_text
AND LANGUAGE = p_language;
EXCEPTION
WHEN no_data_found THEN
--
-- need to add the text
--
v_text_already_exists := FALSE;
END;
IF NOT v_text_already_exists THEN
INSERT INTO module_text
(text_number
,text
,LANGUAGE)
VALUES
(mtxt_num_seq.NEXTVAL
,p_text
,p_language)
RETURNING text_number INTO v_text_number;
END IF;
DELETE FROM module_text
WHERE text_number = v_text_number
AND LANGUAGE <> p_language;
FOR v_languages IN (SELECT rv_low_value LANGUAGE
FROM cg_ref_codes
WHERE rv_domain = 'LANGUAGE'
AND rv_low_value <> p_language) LOOP
v_text := substr(translate_lang(p_text => p_text
,p_language_source => p_language
,p_language_destination => v_languages.LANGUAGE)
,1
,500);
INSERT INTO module_text
(text_number
,text
,LANGUAGE)
VALUES
(v_text_number
,v_text
,v_languages.LANGUAGE);
END LOOP;
RETURN v_text_number;
END add_module_text;
PROCEDURE html_email(p_to IN VARCHAR2 DEFAULT cout_system_configuration.get_configuration_item('CONTACT_EMAIL')
,p_from IN VARCHAR2 DEFAULT caco_utilities.get_system_name
,p_subject IN VARCHAR2 DEFAULT 'Fax Message from ' ||
caco_utilities.get_system_name
,p_text IN VARCHAR2 DEFAULT NULL
,p_html IN VARCHAR2 DEFAULT NULL
,p_smtp_hostname IN VARCHAR2 DEFAULT cout_system_configuration.get_configuration_item('SYSTEM_SMTP_SERVER')
,p_smtp_portnum IN VARCHAR2 DEFAULT cout_system_configuration.get_configuration_item('SYSTEM_SMTP_PORT')) IS
--
l_boundary VARCHAR2(255) DEFAULT 'a1b2c3d4e3f2g1';
l_connection utl_smtp.connection;
l_body_html CLOB := empty_clob; --This LOB will be the email message
l_offset NUMBER;
l_ammount NUMBER;
l_temp VARCHAR2(32767) DEFAULT NULL;
--
BEGIN
--
l_connection := utl_smtp.open_connection(p_smtp_hostname
,p_smtp_portnum);
utl_smtp.helo(l_connection
,p_smtp_hostname);
utl_smtp.mail(l_connection
,p_from);
utl_smtp.rcpt(l_connection
,p_to);
--
l_temp := l_temp || 'MIME-Version: 1.0' || chr(13) || chr(10);
l_temp := l_temp || 'To: ' || p_to || chr(13) || chr(10);
l_temp := l_temp || 'From: ' || p_from || chr(13) || chr(10);
l_temp := l_temp || 'Subject: ' || p_subject || chr(13) || chr(10);
l_temp := l_temp || 'Reply-To: ' || p_from || chr(13) || chr(10);
l_temp := l_temp || 'Content-Type: multipart/alternative; boundary=' ||
chr(34) || l_boundary || chr(34) || chr(13) || chr(10);
-- Write the headers
dbms_lob.createtemporary(l_body_html
,FALSE
,10);
dbms_lob.WRITE(l_body_html
,length(l_temp)
,1
,l_temp);
-- Write the text boundary
l_offset := dbms_lob.getlength(l_body_html) + 1;
l_temp := '--' || l_boundary || chr(13) || chr(10);
l_temp := l_temp || 'content-type: text/plain; charset=us-ascii' ||
chr(13) || chr(10) || chr(13) || chr(10);
dbms_lob.WRITE(l_body_html
,length(l_temp)
,l_offset
,l_temp);
-- Write the plain text portion of the email
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.WRITE(l_body_html
,length(p_text)
,l_offset
,p_text);
-- Write the HTML boundary
l_temp := chr(13) || chr(10) || chr(13) || chr(10) || '--' ||
l_boundary || chr(13) || chr(10);
l_temp := l_temp || 'content-type: text/html;' || chr(13) || chr(10) ||
chr(13) || chr(10);
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.WRITE(l_body_html
,length(l_temp)
,l_offset
,l_temp);
-- Write the HTML portion of the message
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.WRITE(l_body_html
,length(p_html)
,l_offset
,p_html);
-- Write the final html boundary
l_temp := chr(13) || chr(10) || '--' || l_boundary || '--' || chr(13);
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.WRITE(l_body_html
,length(l_temp)
,l_offset
,l_temp);
-- Send the email in 1900 byte chunks to UTL_SMTP
l_offset := 1;
l_ammount := 1900;
utl_smtp.open_data(l_connection);
WHILE l_offset < dbms_lob.getlength(l_body_html) LOOP
utl_smtp.write_data(l_connection
,dbms_lob.substr(l_body_html
,l_ammount
,l_offset));
l_offset := l_offset + l_ammount;
l_ammount := least(1900
,dbms_lob.getlength(l_body_html) - l_ammount);
END LOOP;
utl_smtp.close_data(l_connection);
utl_smtp.quit(l_connection);
dbms_lob.freetemporary(l_body_html);
--
END html_email;
--
FUNCTION convert_date_to_gas_day(p_date IN DATE) RETURN DATE IS
BEGIN
--
RETURN(cout_dates.convert_date_to_gas_day(p_date => p_date));
--
END convert_date_to_gas_day;
--
-- Pass in the gas day and get the number of hours in it
--
FUNCTION get_dst_hours(p_gas_day IN DATE) RETURN NUMBER IS
--
BEGIN
--
RETURN(cout_dates.get_dst_hours(p_gas_day => p_gas_day));
--
END get_dst_hours;
--
FUNCTION get_hours(p_gas_day IN DATE) RETURN t_int_array AS
--
BEGIN
RETURN(cout_dates.get_hours(trunc(p_gas_day)));
--
END get_hours;
--
-- Check sequential dates
--
FUNCTION check_dates(p_period_start IN DATE
,p_period_end IN DATE
,p_check_past IN BOOLEAN) RETURN BOOLEAN IS
--
l_ret_val BOOLEAN;
--
BEGIN
--
IF p_period_start < trunc(SYSDATE)
AND p_check_past THEN
--
l_ret_val := caco_utilities.raise_error(-20007);
--
ELSIF p_period_end < p_period_start THEN
--
l_ret_val := caco_utilities.raise_error(-20008);
--
ELSE
--
l_ret_val := TRUE;
--
END IF;
--
RETURN l_ret_val;
--
END check_dates;
---
-- C U T Y C O D E F O R C U S T
---
FUNCTION cuty_code_for_cust(p_cust_id IN customers.cust_id%TYPE) RETURN customer_types.code%TYPE IS
--
CURSOR c_cuty IS
SELECT cuty.code
FROM customer_types cuty,
customers cust
WHERE cuty.cuty_id = cust.cuty_id
AND cust.cuty_id = p_cust_id;
--
l_cuty_code customer_types.code%TYPE;
--
BEGIN
--
OPEN c_cuty;
FETCH c_cuty INTO l_cuty_Code;
CLOSE c_cuty;
---
-- Will return NULL if no data found.
---
RETURN (l_cuty_code);
--
END;
---
-- C U T Y C O D E F O R U S E R
---
FUNCTION cuty_code_for_user RETURN customer_types.code%TYPE IS
--
CURSOR c_cuty IS
SELECT cuty.code
FROM customer_types cuty,
customers cust
WHERE cuty.cuty_id = cust.cuty_id
AND cust.cust_id = caco_utilities.get_cust_id; -- Gets the customer the user is acting for
--
l_cuty_code customer_types.code%TYPE;
--
BEGIN
--
OPEN c_cuty;
FETCH c_cuty INTO l_cuty_Code;
CLOSE c_cuty;
---
-- Will return NULL if no data found.
---
RETURN (l_cuty_code);
--
END;
---
-- C U T Y I D F O R U S E R
---
FUNCTION cuty_id_for_user RETURN customer_types.cuty_id%TYPE IS
--
CURSOR c_cuty IS
SELECT cuty.cuty_id
FROM customer_types cuty,
customers cust
WHERE cuty.cuty_id = cust.cuty_id
AND cust.cust_id = caco_utilities.get_cust_id; -- Gets the customer the user is acting for
--
l_cuty_id customer_types.cuty_id%TYPE;
--
BEGIN
--
OPEN c_cuty;
FETCH c_cuty INTO l_cuty_id;
CLOSE c_cuty;
---
-- Will return NULL if no data found.
---
RETURN (l_cuty_id);
--
EXCEPTION
WHEN others THEN
RETURN NULL;
END;
---
-- U S E R H A S S Y S T E M
---
FUNCTION user_has_system RETURN VARCHAR2 IS
--
CURSOR c_system_user IS
SELECT COUNT(1)
FROM user_profiles uspr,
system_profiles sypr
WHERE sypr.sypr_id = uspr.sypr_id
AND uspr.syus_id = caco_utilities.get_syus_id
AND sypr.name = 'SYSTEM';
--
l_count NUMBER;
l_flag VARCHAR2(1);
--
BEGIN
--
l_flag := NULL;
--
OPEN c_system_user;
FETCH c_system_user INTO l_count;
CLOSE c_system_user;
--
IF (l_count > 0) THEN
--
l_flag := C_Yes;
--
ELSE
--
l_flag := C_No;
--
END IF;
--
RETURN (l_flag);
--
END ;
---
--
---
FUNCTION user_has_EFT_admin RETURN VARCHAR2 IS
--
CURSOR c_EFT_admin_user IS
SELECT COUNT(1)
FROM user_profiles uspr,
system_profiles sypr
WHERE sypr.sypr_id = uspr.sypr_id
AND uspr.syus_id = caco_utilities.get_syus_id
AND UPPER(sypr.name) IN ('EFT ADMIN', 'USER ADMIN');
--
l_count NUMBER;
l_flag VARCHAR2(1);
--
BEGIN
--
l_flag := NULL;
--
OPEN c_EFT_admin_user;
FETCH c_EFT_admin_user INTO l_count;
CLOSE c_EFT_admin_user;
--
IF (l_count > 0) THEN
--
l_flag := C_Yes;
--
ELSE
--
l_flag := C_No;
--
END IF;
--
RETURN (l_flag);
--
END;
--
FUNCTION get_nepo_name(p_nepo_id IN network_points.nepo_id%TYPE DEFAULT NULL)
RETURN network_points.name%TYPE IS
--
CURSOR cur_nepo(p_nepo_id IN network_points.nepo_id%TYPE) IS
SELECT nepo.name
FROM network_points nepo
WHERE nepo.nepo_id = p_nepo_id;
--
v_return network_points.name%TYPE;
--
BEGIN
--
OPEN cur_nepo(p_nepo_id);
FETCH cur_nepo
INTO v_return;
CLOSE cur_nepo;
--
RETURN nvl(v_return
,'No Network Point Name');
--
END get_nepo_name;
--
FUNCTION to_thousand_separated(p_val IN VARCHAR2)
RETURN VARCHAR2 IS
BEGIN
RETURN REPLACE(to_char(to_number(p_val),g_number_format),',',g_thousand_separator);
--
EXCEPTION
WHEN OTHERS THEN
--
cout_err.report_and_stop(p_exception_message => sqlerrm||' IN caco_utilities.to_thousand_separated(varchar2)');
--
END to_thousand_separated;
--
FUNCTION to_thousand_separated(p_val IN NUMBER)
RETURN VARCHAR2 IS
BEGIN
RETURN REPLACE(to_char(p_val,g_number_format),',',g_thousand_separator);
--
EXCEPTION
WHEN OTHERS THEN
--
cout_err.report_and_stop(p_exception_message => sqlerrm||' IN caco_utilities.to_thousand_separated(number)');
--
END to_thousand_separated;
--
FUNCTION thousand_separated_to_num(p_val IN VARCHAR2)
RETURN NUMBER IS
BEGIN
RETURN to_number(REPLACE(p_val,g_thousand_separator,NULL));
--
EXCEPTION
WHEN OTHERS THEN
--
cout_err.report_and_stop(p_exception_message => sqlerrm||' IN caco_utilities.thousand_separated_to_num');
--
END thousand_separated_to_num;
--
FUNCTION thousand_separated_to_char(p_val IN VARCHAR2)
RETURN VARCHAR2 IS
BEGIN
RETURN REPLACE(p_val,g_thousand_separator,NULL);
--
EXCEPTION
WHEN OTHERS THEN
--
cout_err.report_and_stop(p_exception_message => sqlerrm||' IN caco_utilities.thousand_separated_to_char');
--
END thousand_separated_to_char;
--
FUNCTION thousand_separated_to_char(p_val IN owa_util.vc_arr)
RETURN owa_util.vc_arr IS
--
l_return owa_util.vc_arr;
--
BEGIN
--
FOR i IN 1..p_val.COUNT LOOP
l_return(i) := REPLACE(p_val(i),g_thousand_separator,NULL);
END LOOP;
--
RETURN l_return;
--
EXCEPTION
WHEN OTHERS THEN
--
cout_err.report_and_stop(p_exception_message => sqlerrm||' IN caco_utilities.thousand_separated_to_char(owa_util.vc_arr)');
--
END thousand_separated_to_char;
--
PROCEDURE thousand_separator_js IS
BEGIN
htp.p('
function thousandSeparator(x,sValue)
{
var sRegExp = new RegExp(''(-?[0-9]+)([0-9]{3})'')
var sep = " "
while(sRegExp.test(sValue)) {
sValue = sValue.replace(sRegExp, ''$1''+sep+''$2'')
}
document.getElementById(x).value= sValue
}');
END thousand_separator_js;
--
FUNCTION output_form_buttons RETURN VARCHAR2 IS
BEGIN
--
RETURN '<SCRIPT><!--
document.write (''<input type=hidden name="Z_ACTION">'')
//-->
</SCRIPT>
<SCRIPT><!--
document.write (''<input type=submit value="'||caco_utilities.get_module_text(836)||'" onClick="this.form.Z_ACTION.value=\''REQUERY\''">'')
//-->
</SCRIPT>
<NOSCRIPT>
<INPUT TYPE="submit" NAME="Z_ACTION" VALUE="ReQuery" ID="ReQuery">
</NOSCRIPT>
<SCRIPT><!--
document.write (''<input type=submit value="'||caco_utilities.get_module_text(845)||'" onClick="this.form.Z_ACTION.value=\''COUNT\''">'')
//-->
</SCRIPT>
<NOSCRIPT>
<INPUT TYPE="submit" NAME="Z_ACTION" VALUE="Count" ID="Count">
</NOSCRIPT>
<P>
<SCRIPT><!--
document.write (''<input type=submit value="'||caco_utilities.get_module_text(852)||'" onClick="this.form.Z_ACTION.value=\''QUERY\''">'')
//-->
</SCRIPT>
<NOSCRIPT>
<INPUT TYPE="submit" NAME="Z_ACTION" VALUE="Query" ID="Query">
</NOSCRIPT>
<SCRIPT><!--
document.write (''<input type=submit value="'||caco_utilities.get_module_text(851)||'" onClick="this.form.Z_ACTION.value=\''INSERT\''">'')
//-->
</SCRIPT>
<NOSCRIPT>
<INPUT TYPE="submit" NAME="Z_ACTION" VALUE="New" ID="New">
</NOSCRIPT>
<INPUT TYPE="hidden" NAME="Z_CHK" VALUE="0">
</FORM>';
END output_form_buttons;
--
FUNCTION efnow010_output_form_buttons RETURN VARCHAR2 IS
BEGIN
--
RETURN ' <FORM ACTION="efnow010$cate.querylist" METHOD="POST" NAME="efnow010$cate$LForm">
<INPUT TYPE="hidden" NAME="P_CODE" VALUE="">
<INPUT TYPE="hidden" NAME="P_NAME" VALUE="">
<INPUT TYPE="hidden" NAME="P_INTERUPTIBLE" VALUE="">
<INPUT TYPE="hidden" NAME="P_UNITS" VALUE="">
<INPUT TYPE="hidden" NAME="P_NUMBER_FORMAT" VALUE="">
<INPUT TYPE="hidden" NAME="P_DISPLAY_SEQUENCE" VALUE="">
<INPUT TYPE="hidden" NAME="Z_START" VALUE="1">'||output_form_buttons;
END efnow010_output_form_buttons;
--
FUNCTION efnow020_output_form_buttons RETURN VARCHAR2 IS
BEGIN
--
RETURN ' <FORM ACTION="efnow020$para.querylist" METHOD="POST" NAME="efnow020$para$LForm">
<INPUT TYPE="hidden" NAME="P_CODE" VALUE="">
<INPUT TYPE="hidden" NAME="P_NAME" VALUE="">
<INPUT TYPE="hidden" NAME="Z_START" VALUE="1">'||output_form_buttons;
END efnow020_output_form_buttons;
--
END caco_utilities;
/