Addressed #573 by modifying mip_quotation_document.pck so that the quotation page costs do not overlap.

git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@26040 248e525c-4dfb-0310-94bc-949c084e9493
This commit is contained in:
andrew.hardy
2010-09-02 14:42:01 +00:00
parent 04696f1008
commit 053ce6148a

View File

@@ -394,9 +394,10 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
,p_line_breaks IN NUMBER := 2) IS ,p_line_breaks IN NUMBER := 2) IS
l_caveats_counter NUMBER; l_caveats_counter NUMBER;
l_cell_margin NUMBER; l_cell_margin NUMBER;
l_margin NUMBER;
BEGIN BEGIN
cout_assert.isnotnull(p_vertical_offset cout_assert.isnotnull(p_vertical_offset
,p_message => 'veritcal offest null!'); ,p_message => 'vertical offset null!');
--set up the screen so we can have our size 4 spacing --set up the screen so we can have our size 4 spacing
l_cell_margin := plpdf.getcellmargin; l_cell_margin := plpdf.getcellmargin;
plpdf.setleftmargin(33.7); plpdf.setleftmargin(33.7);
@@ -417,6 +418,21 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
plpdf.setcellmargin(l_cell_margin); plpdf.setcellmargin(l_cell_margin);
plpdf.setleftmargin(31.7); plpdf.setleftmargin(31.7);
END print_caveats; END print_caveats;
FUNCTION sentence_case(p_in VARCHAR2) RETURN VARCHAR2 IS
BEGIN
IF SUBSTR(p_in
,1
,1) != ' ' THEN
RETURN upper(SUBSTR(p_in
,1
,1)) || SUBSTR(p_in
,2);
ELSE
RETURN ' ' || sentence_case(SUBSTR(p_in
,2));
END IF;
END sentence_case;
/* /*
FUNCTION glue_one_line_caveat FUNCTION glue_one_line_caveat
--Concats the supplied caveats into one line of text --Concats the supplied caveats into one line of text
@@ -429,7 +445,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
l_caveats_counter := 1; l_caveats_counter := 1;
WHILE p_caveats(l_caveats_counter) IS NOT NULL LOOP WHILE p_caveats(l_caveats_counter) IS NOT NULL LOOP
l_caveat_total_text := l_caveat_total_text || ' ' || l_caveat_total_text := l_caveat_total_text || ' ' ||
p_caveats(l_caveats_counter); sentence_case(p_caveats(l_caveats_counter));
l_caveats_counter := l_caveats_counter + 1; l_caveats_counter := l_caveats_counter + 1;
END LOOP; END LOOP;
RETURN ltrim(l_caveat_total_text); RETURN ltrim(l_caveat_total_text);
@@ -1313,6 +1329,11 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
l_cell_margin NUMBER; l_cell_margin NUMBER;
BEGIN BEGIN
plpdf.newpage; plpdf.newpage;
plpdf.crbookmark(p_txt => 'Covering Letter');
l_cell_margin := plpdf.getcellmargin;
plpdf.setcellmargin(0);
--set watermark if it exists --set watermark if it exists
IF p_watermark_blob IS NOT NULL THEN IF p_watermark_blob IS NOT NULL THEN
pl('watermark IS NOT null' pl('watermark IS NOT null'
@@ -1327,10 +1348,6 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
pl('watermark IS null' pl('watermark IS null'
,$$PLSQL_LINE); ,$$PLSQL_LINE);
END IF; END IF;
-- set margins
plpdf.setleftmargin(31.7);
plpdf.setrightmargin(31.7);
plpdf.settopmargin(25.4);
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,NULL ,NULL
@@ -1342,6 +1359,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
,10 ,10
,52 ,52
,18); ,18);
plpdf.printtext(140 plpdf.printtext(140
,10 ,10
,'4 Abbotts Lane '); ,'4 Abbotts Lane ');
@@ -1360,6 +1378,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
plpdf.printtext(170 plpdf.printtext(170
,16 ,16
,'www.nationalgrid.com'); ,'www.nationalgrid.com');
-- And Footer stuff -- And Footer stuff
plpdf.printtext(50 plpdf.printtext(50
,280 ,280
@@ -1367,6 +1386,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
plpdf.printtext(50 plpdf.printtext(50
,283 ,283
,'Registered Office: 1-3 Strand, London, WCZN 5EH. Registered in England and Wales, No. 3705992'); ,'Registered Office: 1-3 Strand, London, WCZN 5EH. Registered in England and Wales, No. 3705992');
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,NULL ,NULL
,10); -- set back to 10 pt ,10); -- set back to 10 pt
@@ -1388,9 +1408,12 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
,p_quote_data.supplier_address(addr_count)); ,p_quote_data.supplier_address(addr_count));
END IF; END IF;
END LOOP; END LOOP;
plpdf.printtext(p_indent plpdf.printtext(p_indent
,p_vertical_offset + 58 ,p_vertical_offset + 58
,'Date: ' || p_quote_data.current_date); ,'Date: ' || TO_CHAR(p_quote_data.current_date
,'FMddth Month YYYY'));
plpdf.printtext(p_indent plpdf.printtext(p_indent
,p_vertical_offset + 66 ,p_vertical_offset + 66
,'Quotation Contact: Non Standard Customer Service Team'); ,'Quotation Contact: Non Standard Customer Service Team');
@@ -1423,42 +1446,40 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
p_quote_data.site_address(7) p_quote_data.site_address(7)
,', ') ,', ')
,', ')); --site address ,', ')); --site address
l_note_text := 'Note: National Grid Metering are a service provider working on behalf of '; l_note_text := 'Note: National Grid Metering are a service provider working on behalf of ';
l_note_text := l_note_text || p_quote_data.mam; --mam l_note_text := l_note_text || p_quote_data.mam; --mam
l_note_text := l_note_text || l_note_text := l_note_text ||
', please direct all enquiries regarding this quote to National Grid Metering.'; ', please direct all enquiries regarding this quote to National Grid Metering.';
l_cell_margin := plpdf.getcellmargin;
plpdf.setleftmargin(33.7);
plpdf.setcellmargin(-2);
plpdf.setcurrenty(p_vertical_offset + 102); plpdf.setcurrenty(p_vertical_offset + 102);
plpdf.printflowingtext(4
,l_note_text); plpdf.printflowingtext(p_h => 4
,p_txt => l_note_text);
plpdf.linebreak; plpdf.linebreak;
plpdf.linebreak; plpdf.linebreak;
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,NULL ,NULL
,10); --unset bold ,10); --unset bold
plpdf.printflowingtext(4 plpdf.printflowingtext(p_h => 4
,'I am pleased to provide you with a quotation for works '); ,p_txt => 'I am pleased to provide you with a quotation for works');
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,'B' ,'B'
,10); --set bold ,10); --set bold
plpdf.printflowingtext(4 plpdf.printflowingtext(p_h => 4
,' on behalf of ' || p_quote_data.mam); ,p_txt => ' on behalf of ' || p_quote_data.mam);
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,NULL ,NULL
,10); --unset bold ,10); --unset bold
plpdf.printflowingtext(4 plpdf.printflowingtext(p_h => 4
,' and in accordance with their General Conditions of Contract for Transactional Meter Works Not Exceeding 7 Bar.'); ,p_txt => ' and in accordance with their General Conditions of Contract for Transactional Meter Works Not Exceeding 7 Bar.');
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,'B' ,'B'
,10); --set bold ,10); --set bold
plpdf.printflowingtext(4 plpdf.printflowingtext(p_h => 4
,' Please note, if you accept this quotation you are agreeing to be bound by the terms of the ' || ,p_txt => ' Please note, if you accept this quotation you are agreeing to be bound by the terms of the ' ||
p_quote_data.mam || p_quote_data.mam ||
' and General Conditions of Contract for Transactional Meter Works Not Exceeding 7 Bar, and all subsequent work will be performed in accordance with that contract.'); ' and General Conditions of Contract for Transactional Meter Works Not Exceeding 7 Bar, and all subsequent work will be performed in accordance with that contract.');
-- plpdf.setcellmargin(l_cell_margin);
plpdf.setleftmargin(33.7); --31.7
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,NULL ,NULL
,10); --unset bold ,10); --unset bold
@@ -1510,6 +1531,9 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
plpdf.printtext(p_indent plpdf.printtext(p_indent
,p_vertical_offset + 242 ,p_vertical_offset + 242
,'National Grid Metering'); ,'National Grid Metering');
plpdf.setcellmargin(l_cell_margin);
END build_covering_letter; END build_covering_letter;
/* /*
PROCEDURE build_costs_page PROCEDURE build_costs_page
@@ -1525,17 +1549,20 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
,p_indent IN NUMBER ,p_indent IN NUMBER
,p_vertical_offset IN NUMBER ,p_vertical_offset IN NUMBER
,p_watermark_blob BLOB) IS ,p_watermark_blob BLOB) IS
l_cell_margin NUMBER;
l_cost_line_counter NUMBER; l_cost_line_counter NUMBER;
l_vertical_offset_for_costs NUMBER := p_vertical_offset + 126;
l_works_counter NUMBER; l_works_counter NUMBER;
l_vertical_offset_for_works NUMBER := p_vertical_offset + 52; l_vertical_offset_for_works NUMBER := p_vertical_offset + 52;
l_ybefore NUMBER := 0; --used to adjust the vertical offest after contract sum caveat
l_cost_totals_offset NUMBER; --used to position the cost totals after the cost line items
l_caveat_desc_works_offset NUMBER; --used to position caveat_desc_works as running calculation in l_caveat_desc_works_offset NUMBER; --used to position caveat_desc_works as running calculation in
--function parameter causes error on pdf --function parameter causes error on pdf
BEGIN BEGIN
--Page 2 --Page 2
plpdf.newpage; plpdf.newpage;
plpdf.crbookmark(p_txt => 'Quotation');
l_cell_margin := plpdf.getcellmargin;
plpdf.setcellmargin(0);
--set watermark if it exists --set watermark if it exists
IF p_watermark_blob IS NOT NULL THEN IF p_watermark_blob IS NOT NULL THEN
plpdf.putimage('test watermark' plpdf.putimage('test watermark'
@@ -1545,10 +1572,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
,200 ,200
,200); ,200);
END IF; END IF;
-- set margins
plpdf.setleftmargin(31.7);
plpdf.setrightmargin(31.7);
plpdf.settopmargin(25.4);
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,'B' ,'B'
,10); --set bold ,10); --set bold
@@ -1570,7 +1594,8 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
,'MPRN: ' || TO_CHAR(p_quote_data.mprn)); ,'MPRN: ' || TO_CHAR(p_quote_data.mprn));
plpdf.printtext(p_indent plpdf.printtext(p_indent
,p_vertical_offset + 30 ,p_vertical_offset + 30
,'Date: ' || p_quote_data.current_date); ,'Date: ' || TO_CHAR(p_quote_data.current_date
,'FMddth Month YYYY'));
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,'B' ,'B'
,10); --set bold ,10); --set bold
@@ -1614,6 +1639,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
print_caveats(p_quote_data.caveat_desc_works print_caveats(p_quote_data.caveat_desc_works
,l_caveat_desc_works_offset + 1); ,l_caveat_desc_works_offset + 1);
END IF; END IF;
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,NULL ,NULL
,10); --unset bold ,10); --unset bold
@@ -1629,16 +1655,15 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,NULL ,NULL
,10); --unset bold ,10); --unset bold
l_ybefore := plpdf.getcurrenty;
l_vertical_offset_for_costs := l_vertical_offset_for_costs +
(plpdf.getcurrenty - l_ybefore);
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,NULL ,NULL
,10); --unset bold ,10); --unset bold
plpdf.setcurrenty(p_vertical_offset + 114); plpdf.setcurrenty(p_vertical_offset + 114);
print_costs(p_description => 'Contract sum (excluding V.A.T):' print_costs(p_description => 'Contract sum (excluding V.A.T):'
,p_cost => p_quote_data.total_cost ,p_cost => p_quote_data.total_cost
,p_suffix => glue_one_line_caveat(p_quote_data.caveat_cont_sum)); -- CONT_SUM caveat here ,p_suffix => ' ' ||
glue_one_line_caveat(p_quote_data.caveat_cont_sum)); -- CONT_SUM caveat here
plpdf.linebreak(20); -- line break, height is 20 plpdf.linebreak(20); -- line break, height is 20
print_costs(p_description => 'Analysis of Costs (all costs exclude V.A.T)'); print_costs(p_description => 'Analysis of Costs (all costs exclude V.A.T)');
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
@@ -1658,12 +1683,13 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
l_cost_line_counter := l_cost_line_counter + 1; l_cost_line_counter := l_cost_line_counter + 1;
END LOOP; END LOOP;
-- --
l_cost_totals_offset := l_vertical_offset_for_costs +
l_cost_line_counter * 4;
print_costs(p_description => 'Total costs:' print_costs(p_description => 'Total costs:'
,p_cost => p_quote_data.total_cost ,p_cost => p_quote_data.total_cost
,p_border => 'T' ,p_border => 'T'
,p_suffix => glue_one_line_caveat(p_quote_data.caveat_cont_sum)); -- CONT_SUM caveat here ,p_suffix => ' ' ||
glue_one_line_caveat(p_quote_data.caveat_cont_sum)); -- CONT_SUM caveat here
plpdf.setcellmargin(l_cell_margin);
END build_costs_page; END build_costs_page;
/* /*
@@ -1685,6 +1711,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
BEGIN BEGIN
--Page 3 --Page 3
plpdf.newpage; plpdf.newpage;
plpdf.crbookmark(p_txt => 'Meter housing details and caveats');
--set watermark if it exists --set watermark if it exists
IF p_watermark_blob IS NOT NULL THEN IF p_watermark_blob IS NOT NULL THEN
plpdf.putimage('test watermark' plpdf.putimage('test watermark'
@@ -1694,10 +1721,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
,200 ,200
,200); ,200);
END IF; END IF;
-- set margins
plpdf.setleftmargin(31.7);
plpdf.setrightmargin(31.7);
plpdf.settopmargin(25.4);
plpdf.setprintfont(p_font plpdf.setprintfont(p_font
,NULL ,NULL
,10); --set font to plain ,10); --set font to plain
@@ -1790,6 +1814,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
--Okay here come the pretty pictures, the technical spec for the module, house & base --Okay here come the pretty pictures, the technical spec for the module, house & base
--this will be page 4 for the quotation --this will be page 4 for the quotation
plpdf.newpage; plpdf.newpage;
plpdf.crbookmark(p_txt => 'Drawings');
--set watermark if it exists --set watermark if it exists
IF p_watermark_blob IS NOT NULL THEN IF p_watermark_blob IS NOT NULL THEN
plpdf.putimage('test watermark' plpdf.putimage('test watermark'
@@ -2257,6 +2282,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
BEGIN BEGIN
--this will be page 5 (part of the technical spec sheet) for the quotation --this will be page 5 (part of the technical spec sheet) for the quotation
plpdf.newpage; plpdf.newpage;
plpdf.crbookmark(p_txt => 'Technical specifications');
--set watermark if it exists --set watermark if it exists
IF p_watermark_blob IS NOT NULL THEN IF p_watermark_blob IS NOT NULL THEN
plpdf.putimage('test watermark' plpdf.putimage('test watermark'
@@ -2744,6 +2770,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
BEGIN BEGIN
---weeeeee last page ---weeeeee last page
plpdf.newpage; plpdf.newpage;
plpdf.crbookmark(p_txt => 'Acceptance Letter');
--set watermark if it exists --set watermark if it exists
IF p_watermark_blob IS NOT NULL THEN IF p_watermark_blob IS NOT NULL THEN
plpdf.putimage('test watermark' plpdf.putimage('test watermark'
@@ -2969,39 +2996,41 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
l_font VARCHAR2(40) := 'Arial'; --arial not daz l_font VARCHAR2(40) := 'Arial'; --arial not daz
l_quote_row quotes%ROWTYPE; l_quote_row quotes%ROWTYPE;
l_enqu_row enquiries%ROWTYPE; l_enqu_row enquiries%ROWTYPE;
CURSOR c_get_logo(cp_logo VARCHAR2) IS
SELECT blob_content
FROM wwv_flow_files
WHERE filename = cp_logo;
CURSOR c_get_signature(cp_signature VARCHAR2) IS
SELECT blob_content
FROM wwv_flow_files
WHERE filename = cp_signature;
CURSOR c_get_watermark(cp_watermark VARCHAR2) IS
SELECT blob_content
FROM wwv_flow_files
WHERE filename = cp_watermark
AND flow_id = apex_application.g_flow_id;
BEGIN BEGIN
IF NOT c_get_logo%ISOPEN THEN BEGIN
OPEN c_get_logo('quote_logo.jpg'); SELECT blob_content
END IF; INTO l_logo_blob
FETCH c_get_logo FROM wwv_flow_files
INTO l_logo_blob; WHERE filename = 'quote_logo.jpg'
CLOSE c_get_logo; AND rownum < 2;
IF NOT c_get_signature%ISOPEN THEN EXCEPTION
OPEN c_get_signature('quote_signature.jpg'); WHEN no_data_found THEN
END IF; NULL;
FETCH c_get_signature END;
INTO l_signature_blob;
CLOSE c_get_signature; BEGIN
IF NOT c_get_watermark%ISOPEN THEN SELECT blob_content
OPEN c_get_watermark('test_watermark.jpg'); INTO l_signature_blob
END IF; FROM wwv_flow_files
FETCH c_get_watermark WHERE filename = 'quote_signature.jpg'
INTO l_watermark_blob; AND rownum < 2;
CLOSE c_get_watermark; EXCEPTION
WHEN no_data_found THEN
NULL;
END;
BEGIN
SELECT blob_content
INTO l_watermark_blob
FROM wwv_flow_files
WHERE filename = 'test_watermark.jpg'
AND flow_id = apex_application.g_flow_id
AND rownum < 2;
EXCEPTION
WHEN no_data_found THEN
NULL;
END;
l_quote_row := get_quote_row(p_quote_id); l_quote_row := get_quote_row(p_quote_id);
l_enqu_row := get_enquiry_row(l_quote_row.enqu_id); l_enqu_row := get_enquiry_row(l_quote_row.enqu_id);
@@ -3013,6 +3042,19 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
l_module_blob := get_drawing(p_quote_data.module_diagram); l_module_blob := get_drawing(p_quote_data.module_diagram);
-- Initialize PDF -- Initialize PDF
plpdf.init; plpdf.init;
plpdf.setprotection(p_print_perm => TRUE
,p_copy_perm => TRUE);
-- set margins
plpdf.setleftmargin(31.7);
plpdf.setrightmargin(31.7);
plpdf.settopmargin(25.4);
plpdf.setdocauthor('National Grid Metering Online Quotation System');
plpdf.setdoctitle('Online Quotation Reference ' ||
p_quote_data.quote_ref || ' for enquiry ' ||
p_quote_data.enquiry_ref || '.');
--build the pages for the quote --build the pages for the quote
build_covering_letter(p_quote_data build_covering_letter(p_quote_data
,l_font ,l_font