From ac40cb550d4d61c38e78c4c6688cf0efe3ea9dc6 Mon Sep 17 00:00:00 2001 From: "jamie.priest" Date: Tue, 11 Aug 2009 15:07:23 +0000 Subject: [PATCH] altered PDF output to fall in-line with FDS ahead of MIP Purging changes git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@12215 248e525c-4dfb-0310-94bc-949c084e9493 --- Modules/mip_quotation_document.pck | 3446 ++++++++++++++++++++-------- 1 file changed, 2444 insertions(+), 1002 deletions(-) diff --git a/Modules/mip_quotation_document.pck b/Modules/mip_quotation_document.pck index d761842..14cd54a 100644 --- a/Modules/mip_quotation_document.pck +++ b/Modules/mip_quotation_document.pck @@ -6,84 +6,237 @@ CREATE OR REPLACE PACKAGE mip_quotation_document IS -- Public type declarations --type is ; - type caveat_text is varray(20) of varchar2(4000); - type img_props is record(width number, - height number); - type cost_line is record( - cost_description varchar2(80), - cost_price number); + TYPE caveat_text IS VARRAY(20) OF VARCHAR2(4000); + TYPE img_props IS RECORD( + width NUMBER + ,height NUMBER); + TYPE cost_line IS RECORD( + cost_description VARCHAR2(80) + ,cost_price NUMBER); - type address is varray(7) of varchar2(160); - type works is varray(20) of varchar2(160); - type costs is varray(20) of cost_line; - type caveats is varray(20) of varchar2(2000); - type dimensions is varray(10) of number; - type quote_data is record - (enquiry_ref NUMBER, - quote_ref NUMBER, - transaction_ref VARCHAR2(80), - mprn number(30), - supplier_address address := address(null,null,null,null,null,null,null), - current_date DATE, - agent_first_name varchar2(80), - site_address address := address(null,null,null,null,null,null,null), - mam varchar2(80), - quote_works works := works(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null), - caveat_desc_works caveat_text:= caveat_text(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null), - lead_time number, - total_cost number, - caveat_cont_sum caveat_text:= caveat_text(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null), - quote_costs costs := costs(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null), - house_length number, - house_depth number, - house_height number, - house_ventilation number, - base_length number, - base_depth number, - base_height number, - outlet_termninal_size number, - caveat_term_cond caveat_text:= caveat_text(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null), - liquid_damage_day number, - liquid_damage_cap number, - base_dimensions dimensions := dimensions(null,null,null,null,null,null,null,null,null,null), - base_diagram varchar2(80), - house_dimensions dimensions := dimensions(null,null,null,null,null,null,null,null,null,null), - house_diagram varchar2(80), - module_dimensions dimensions := dimensions(null,null,null,null,null,null,null,null,null,null), - module_reference varchar2(80), - module_diagram varchar2(80), - requested_qmax number, - module_qmax number, - module_qmin number, - module_inlet_height number, - module_outlet_height number, - module_inlet_size number, - module_outlet_size number, - module_inlet_type varchar2(80), - module_outlet_type varchar2(80), - module_inlet_orientation varchar2(80), - module_outlet_orientation varchar2(80), - meter_reference varchar(80), - existing_meter_reference varchar(80), - caveat_cont_sum_qa caveat_text:= caveat_text(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null), - mety_code varchar(80), - svcpt_code varchar(10), - show_lifting_gear boolean - ); + TYPE address IS VARRAY(7) OF VARCHAR2(160); + TYPE works IS VARRAY(20) OF VARCHAR2(160); + TYPE costs IS VARRAY(20) OF cost_line; + TYPE caveats IS VARRAY(20) OF VARCHAR2(2000); + TYPE dimensions IS VARRAY(10) OF NUMBER; + TYPE quote_data IS RECORD( + enquiry_ref NUMBER + ,quote_ref NUMBER + ,transaction_ref VARCHAR2(80) + ,mprn NUMBER(30) + ,supplier_address address := address(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,current_date DATE + ,agent_first_name VARCHAR2(80) + ,site_address address := address(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,mam VARCHAR2(80) + ,quote_works works := works(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,caveat_desc_works caveat_text := caveat_text(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,lead_time NUMBER + ,total_cost NUMBER + ,caveat_cont_sum caveat_text := caveat_text(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,quote_costs costs := costs(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,house_length NUMBER + ,house_depth NUMBER + ,house_height NUMBER + ,house_ventilation NUMBER + ,base_length NUMBER + ,base_depth NUMBER + ,base_height NUMBER + ,outlet_termninal_size NUMBER + ,caveat_term_cond caveat_text := caveat_text(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,liquid_damage_day NUMBER + ,liquid_damage_cap NUMBER + ,base_dimensions dimensions := dimensions(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,base_diagram VARCHAR2(80) + ,house_dimensions dimensions := dimensions(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,house_diagram VARCHAR2(80) + ,module_dimensions dimensions := dimensions(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,module_reference VARCHAR2(80) + ,module_diagram VARCHAR2(80) + ,requested_qmax NUMBER + ,module_qmax NUMBER + ,module_qmin NUMBER + ,module_inlet_height NUMBER + ,module_outlet_height NUMBER + ,module_inlet_size NUMBER + ,module_outlet_size NUMBER + ,module_inlet_type VARCHAR2(80) + ,module_outlet_type VARCHAR2(80) + ,module_inlet_orientation VARCHAR2(80) + ,module_outlet_orientation VARCHAR2(80) + ,meter_reference VARCHAR(80) + ,existing_meter_reference VARCHAR(80) + ,caveat_cont_sum_qa caveat_text := caveat_text(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL) + ,mety_code VARCHAR(80) + ,svcpt_code VARCHAR(10) + ,show_lifting_gear BOOLEAN); - FUNCTION generate_quote_pdf(p_quote_id in number) RETURN VARCHAR2; + FUNCTION generate_quote_pdf(p_quote_id IN NUMBER) RETURN VARCHAR2; END mip_quotation_document; / CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS -PROCEDURE pl(p_in IN VARCHAR2 + PROCEDURE pl(p_in IN VARCHAR2 ,p_line IN NUMBER DEFAULT NULL) IS BEGIN $IF mip_debug_constants.debugging $THEN mip_debug.pl(p_unit => $$PLSQL_UNIT - ,p_line => p_line - ,p_in => p_in); + ,p_line => p_line + ,p_in => p_in); $END NULL; END pl; @@ -92,22 +245,23 @@ PROCEDURE pl(p_in IN VARCHAR2 --recives a meter code and returns the corresponding meter type description %param p_meter_type_code - the meter type code you want the description for */ - function get_meter_type_code_desc(p_meter_type_code varchar2) return varchar2 is + FUNCTION get_meter_type_code_desc(p_meter_type_code VARCHAR2) + RETURN VARCHAR2 IS --Meter Description - CURSOR c_get_meter_type_desc(cp_metertypecode varchar2) IS + CURSOR c_get_meter_type_desc(cp_metertypecode VARCHAR2) IS SELECT description - FROM meter_types - WHERE code = cp_metertypecode; + FROM meter_types + WHERE code = cp_metertypecode; l_meter_type_desc meter_types.description%TYPE; --The description of the meter - begin - IF NOT c_get_meter_type_desc%ISOPEN THEN - OPEN c_get_meter_type_desc(p_meter_type_code); - END IF; - FETCH c_get_meter_type_desc - INTO l_meter_type_desc; - CLOSE c_get_meter_type_desc; - return l_meter_type_desc; - end get_meter_type_code_desc; + BEGIN + IF NOT c_get_meter_type_desc%ISOPEN THEN + OPEN c_get_meter_type_desc(p_meter_type_code); + END IF; + FETCH c_get_meter_type_desc + INTO l_meter_type_desc; + CLOSE c_get_meter_type_desc; + RETURN l_meter_type_desc; + END get_meter_type_code_desc; /* PROCEDURE print_caveats --Prints the supplied caveats to the current PLPDF page @@ -116,32 +270,34 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_line_spacing - the line spacing to use, defaults to 4 %param p_line_breaks - the number or line breaks between caveat texts */ - procedure print_caveats(p_caveats in caveat_text, p_vertical_offset in number, p_line_spacing in number :=4, p_line_breaks in number := 2) is - l_caveats_counter number; - l_cell_margin number; - begin + PROCEDURE print_caveats(p_caveats IN caveat_text + ,p_vertical_offset IN NUMBER + ,p_line_spacing IN NUMBER := 4 + ,p_line_breaks IN NUMBER := 2) IS + l_caveats_counter NUMBER; + l_cell_margin NUMBER; + BEGIN --set up the screen so we can have our size 4 spacing - l_cell_margin:= plpdf.GetCellMargin; - plpdf.SetLeftMargin(33.7); - plpdf.SetCellMargin(-2); - plpdf.SetCurrentY(p_vertical_offset); - - l_caveats_counter :=1; - while p_caveats(l_caveats_counter) is not null - loop - plpdf.PrintFlowingText(p_line_spacing, p_caveats(l_caveats_counter)); - for l_index in 1 .. p_line_breaks - loop - plpdf.LineBreak; - end loop; - l_caveats_counter := l_caveats_counter +1; - end loop; - + l_cell_margin := plpdf.getcellmargin; + plpdf.setleftmargin(33.7); + plpdf.setcellmargin(-2); + plpdf.setcurrenty(p_vertical_offset); + + l_caveats_counter := 1; + WHILE p_caveats(l_caveats_counter) IS NOT NULL LOOP + plpdf.printflowingtext(p_line_spacing + ,p_caveats(l_caveats_counter)); + FOR l_index IN 1 .. p_line_breaks LOOP + plpdf.linebreak; + END LOOP; + l_caveats_counter := l_caveats_counter + 1; + END LOOP; + --revert back to the original screen settings - plpdf.SetCellMargin(l_cell_margin); - plpdf.SetLeftMargin(31.7); - end print_caveats; -/* + plpdf.setcellmargin(l_cell_margin); + plpdf.setleftmargin(31.7); + END print_caveats; + /* PROCEDURE print_one_line_caveats --Prints the supplied caveats to the current PLPDF page on one line %param p_caveats - an array of caveat paragraphs to print @@ -149,34 +305,35 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_horizontal_offset - how far across the page we start printing %param p_line_spacing - the line spacing to use, defaults to 4 */ - procedure print_one_line_caveats(p_caveats in caveat_text, - p_vertical_offset in number, - p_horizontal_offset in number, - p_line_spacing in number :=4) is - l_caveats_counter number; - l_cell_margin number; - l_caveat_total_text varchar2(5000); - begin + PROCEDURE print_one_line_caveats(p_caveats IN caveat_text + ,p_vertical_offset IN NUMBER + ,p_horizontal_offset IN NUMBER + ,p_line_spacing IN NUMBER := 4) IS + l_caveats_counter NUMBER; + l_cell_margin NUMBER; + l_caveat_total_text VARCHAR2(5000); + BEGIN --set up the screen so we can have our size 4 spacing - l_cell_margin:= plpdf.GetCellMargin; - plpdf.SetLeftMargin(33.7); - plpdf.SetCellMargin(-2); - plpdf.SetCurrentY(p_vertical_offset); - plpdf.SetCurrentX(p_horizontal_offset); - l_caveats_counter :=1; - l_caveat_total_text :=''; - - while p_caveats(l_caveats_counter) is not null - loop - l_caveat_total_text := l_caveat_total_text||' '||p_caveats(l_caveats_counter); - l_caveats_counter := l_caveats_counter +1; - end loop; - plpdf.PrintFlowingText(p_line_spacing, l_caveat_total_text); - plpdf.LineBreak; + l_cell_margin := plpdf.getcellmargin; + plpdf.setleftmargin(33.7); + plpdf.setcellmargin(-2); + plpdf.setcurrenty(p_vertical_offset); + plpdf.setcurrentx(p_horizontal_offset); + l_caveats_counter := 1; + l_caveat_total_text := ''; + + WHILE p_caveats(l_caveats_counter) IS NOT NULL LOOP + l_caveat_total_text := l_caveat_total_text || ' ' || + p_caveats(l_caveats_counter); + l_caveats_counter := l_caveats_counter + 1; + END LOOP; + plpdf.printflowingtext(p_line_spacing + ,l_caveat_total_text); + plpdf.linebreak; --revert back to the original screen settings - plpdf.SetCellMargin(l_cell_margin); - plpdf.SetLeftMargin(31.7); - end print_one_line_caveats; + plpdf.setcellmargin(l_cell_margin); + plpdf.setleftmargin(31.7); + END print_one_line_caveats; /* FUNCTION scale_image_dimensions --The scale_image_dimensions provides the width and height of an image to @@ -186,39 +343,41 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_image_blob - The image we may need to scale down %return img_props - the new width and height of the image */ - function scale_image_dimensions(p_req_width in number, p_req_height in number, p_image_blob in blob) return img_props is - l_new_width number; - l_ratio number; - l_new_height number; - l_cur_width number; - l_image_props plpdf_type.t_imageprops; + FUNCTION scale_image_dimensions(p_req_width IN NUMBER + ,p_req_height IN NUMBER + ,p_image_blob IN BLOB) RETURN img_props IS + l_new_width NUMBER; + l_ratio NUMBER; + l_new_height NUMBER; + l_cur_width NUMBER; + l_image_props plpdf_type.t_imageprops; l_new_dimensions img_props; - begin + BEGIN --Get the properties for the image from plpdf - l_image_props:=plpdf_img.getimageprops(p_image_blob); + l_image_props := plpdf_img.getimageprops(p_image_blob); --if the image is too high cut it down to the limit and record the ratio --and cutting the width by the recored ratio - if l_image_props.height > p_req_height then + IF l_image_props.height > p_req_height THEN l_new_height := p_req_height; - l_ratio := l_image_props.height/p_req_height; - l_cur_width := l_image_props.width/l_ratio; - else + l_ratio := l_image_props.height / p_req_height; + l_cur_width := l_image_props.width / l_ratio; + ELSE l_new_height := l_image_props.height; - l_cur_width := l_image_props.width; - end if; + l_cur_width := l_image_props.width; + END IF; --if it's too wide then cut it down to the limit and record the ratio --and cutting the height by the recored ratio - if l_cur_width > p_req_width then - l_new_width := p_req_width; - l_ratio := l_cur_width/p_req_width; - l_new_height := l_new_height/l_ratio; - else + IF l_cur_width > p_req_width THEN + l_new_width := p_req_width; + l_ratio := l_cur_width / p_req_width; + l_new_height := l_new_height / l_ratio; + ELSE l_new_width := l_cur_width; - end if; - l_new_dimensions.width := l_new_width; + END IF; + l_new_dimensions.width := l_new_width; l_new_dimensions.height := l_new_height; - return l_new_dimensions; - end scale_image_dimensions; + RETURN l_new_dimensions; + END scale_image_dimensions; /* FUNCTION get_drawing @@ -226,96 +385,96 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_drwg_code - the code of the drawing you want the blob of. %return blob the drawing image */ - function get_drawing(p_drwg_code varchar2) return blob is - l_blob blob; - CURSOR c_get_drawing(cp_drwg varchar2) IS - SELECT blob_content - FROM wwv_flow_files - WHERE name = (SELECT uri - FROM documents - WHERE (SELECT docu_id - FROM document_roles - WHERE cp_drwg = drwg_code)=id); - begin - IF NOT c_get_drawing%ISOPEN THEN + FUNCTION get_drawing(p_drwg_code VARCHAR2) RETURN BLOB IS + l_blob BLOB; + CURSOR c_get_drawing(cp_drwg VARCHAR2) IS + SELECT blob_content + FROM wwv_flow_files + WHERE NAME = (SELECT uri + FROM documents + WHERE (SELECT docu_id + FROM document_roles + WHERE cp_drwg = drwg_code) = id); + BEGIN + IF NOT c_get_drawing%ISOPEN THEN OPEN c_get_drawing(p_drwg_code); END IF; FETCH c_get_drawing INTO l_blob; CLOSE c_get_drawing; - return l_blob; - end get_drawing; + RETURN l_blob; + END get_drawing; /* FUNCTION get_mam --The get_mam function returns a meter asset manager description for the supplied region code. %param p_region_code - the code of the region you want to get the mam description of. %return varchar(80)description of the supplied regions code mam */ - function get_mam(p_region_code varchar2) return varchar2 is - l_mam_desc varchar2(80); - CURSOR c_get_mam(cp_region_code varchar2) IS + FUNCTION get_mam(p_region_code VARCHAR2) RETURN VARCHAR2 IS + l_mam_desc VARCHAR2(80); + CURSOR c_get_mam(cp_region_code VARCHAR2) IS SELECT quotation_text - FROM regions - WHERE code = cp_region_code; - begin + FROM regions + WHERE code = cp_region_code; + BEGIN IF NOT c_get_mam%ISOPEN THEN OPEN c_get_mam(p_region_code); END IF; FETCH c_get_mam INTO l_mam_desc; CLOSE c_get_mam; - return l_mam_desc; - end get_mam; + RETURN l_mam_desc; + END get_mam; /* FUNCTION get_enquiry_row --The get_enquiry_row function returns an enquiry record for the supplied enquiry id. %param p_enquiry_id - the id of the enquiry you want to get a record of. %return enquiry row of the supplied enquiry id */ - function get_enquiry_row(p_enquiry_id number) return enquiries%ROWTYPE is + FUNCTION get_enquiry_row(p_enquiry_id NUMBER) RETURN enquiries%ROWTYPE IS --Enquiry data - l_enqu_row enquiries%ROWTYPE; - CURSOR c_get_enquiry(cp_enqu_id number) IS - SELECT * - FROM enquiries - WHERE id = cp_enqu_id; - begin + l_enqu_row enquiries%ROWTYPE; + CURSOR c_get_enquiry(cp_enqu_id NUMBER) IS + SELECT * + FROM enquiries + WHERE id = cp_enqu_id; + BEGIN --get the enquiry data IF NOT c_get_enquiry%ISOPEN THEN OPEN c_get_enquiry(p_enquiry_id); END IF; - + FETCH c_get_enquiry INTO l_enqu_row; CLOSE c_get_enquiry; - - return l_enqu_row; - end get_enquiry_row; + + RETURN l_enqu_row; + END get_enquiry_row; /* FUNCTION get_quote_row --The get_quote_row funcdsf sdfsdfsd fsdfsdfsdftion returns an enquiry record for the supplied enquiry id. %param p_enquiry_id - the id of the enquiry you want to get a record of. %return enquiry row of the supplied enquiry id */ - function get_quote_row(p_quote_id number) return quotes%ROWTYPE is + FUNCTION get_quote_row(p_quote_id NUMBER) RETURN quotes%ROWTYPE IS --Quote data l_quote_row quotes%ROWTYPE; - CURSOR c_get_quote(cp_quote_id number) IS - SELECT * - FROM quotes - WHERE id = cp_quote_id; - begin + CURSOR c_get_quote(cp_quote_id NUMBER) IS + SELECT * + FROM quotes + WHERE id = cp_quote_id; + BEGIN --get the quote data IF NOT c_get_quote%ISOPEN THEN OPEN c_get_quote(p_quote_id); END IF; - + FETCH c_get_quote INTO l_quote_row; CLOSE c_get_quote; - - return l_quote_row; - end get_quote_row; + + RETURN l_quote_row; + END get_quote_row; /* FUNCTION get_meter_row @@ -323,84 +482,84 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_code - the code of the meter you want to get a record of. %return meters row of the supplied meter code */ - function get_meter_row(p_code varchar2) return meters%ROWTYPE is + FUNCTION get_meter_row(p_code VARCHAR2) RETURN meters%ROWTYPE IS l_meter_row meters%ROWTYPE; - CURSOR c_get_meter(cp_meter_code varchar2) IS + CURSOR c_get_meter(cp_meter_code VARCHAR2) IS SELECT * - FROM meters - WHERE code = cp_meter_code; - begin + FROM meters + WHERE code = cp_meter_code; + BEGIN IF NOT c_get_meter%ISOPEN THEN OPEN c_get_meter(p_code); END IF; FETCH c_get_meter INTO l_meter_row; CLOSE c_get_meter; - return l_meter_row; - end get_meter_row; + RETURN l_meter_row; + END get_meter_row; /* FUNCTION get_module_row --The get_module_row function returns a module record for the supplied module code. %param p_code - the code of the module you want to get a record of. %return modules row of the supplied module code */ - function get_module_row(p_code varchar2) return modules%ROWTYPE is + FUNCTION get_module_row(p_code VARCHAR2) RETURN modules%ROWTYPE IS l_module_row modules%ROWTYPE; - CURSOR c_get_module(cp_module_code varchar2) IS + CURSOR c_get_module(cp_module_code VARCHAR2) IS SELECT * - FROM modules - WHERE code = cp_module_code; - begin + FROM modules + WHERE code = cp_module_code; + BEGIN IF NOT c_get_module%ISOPEN THEN OPEN c_get_module(p_code); END IF; FETCH c_get_module INTO l_module_row; CLOSE c_get_module; - return l_module_row; - end get_module_row; + RETURN l_module_row; + END get_module_row; /* FUNCTION get_housing_row --The get_housing_row function returns a housing record for the supplied housing code. %param p_code - the code of the housing you want to get a record of. %return housings row of the supplied housing code */ - function get_housing_row(p_code varchar2) return housings%ROWTYPE is + FUNCTION get_housing_row(p_code VARCHAR2) RETURN housings%ROWTYPE IS l_housing_row housings%ROWTYPE; - CURSOR c_get_housing(cp_housing_code varchar2) IS + CURSOR c_get_housing(cp_housing_code VARCHAR2) IS SELECT * - FROM housings - WHERE code = cp_housing_code; - begin + FROM housings + WHERE code = cp_housing_code; + BEGIN IF NOT c_get_housing%ISOPEN THEN OPEN c_get_housing(p_code); END IF; FETCH c_get_housing INTO l_housing_row; CLOSE c_get_housing; - return l_housing_row; - end get_housing_row; + RETURN l_housing_row; + END get_housing_row; /* FUNCTION get_base_row --The get_base_row function returns a base record for the supplied base code. %param p_code - the code of the base you want to get a record of. %return bases row of the supplied base code */ - function get_base_row(p_code varchar2) return bases%ROWTYPE is + FUNCTION get_base_row(p_code VARCHAR2) RETURN bases%ROWTYPE IS l_base_row bases%ROWTYPE; - CURSOR c_get_base(cp_base_code varchar2) IS + CURSOR c_get_base(cp_base_code VARCHAR2) IS SELECT * - FROM bases - WHERE code = cp_base_code; - begin + FROM bases + WHERE code = cp_base_code; + BEGIN IF NOT c_get_base%ISOPEN THEN OPEN c_get_base(p_code); END IF; FETCH c_get_base INTO l_base_row; CLOSE c_get_base; - return l_base_row; - end get_base_row; + RETURN l_base_row; + END get_base_row; /* FUNCTION get_additional_item --The get_additional_item function returns an additional_item record for the supplied additional @@ -408,24 +567,25 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_code - the code of the additional item you want to get a record of. %return additional_items row of the supplied item code */ - function get_additional_item(p_code varchar2) return additional_items%ROWTYPE is - --Additional Items - l_add_item_row additional_items%ROWTYPE; - CURSOR c_get_add_item(cp_additid varchar2) IS - SELECT * - FROM additional_items - WHERE code = cp_additid; - begin + FUNCTION get_additional_item(p_code VARCHAR2) + RETURN additional_items%ROWTYPE IS + --Additional Items + l_add_item_row additional_items%ROWTYPE; + CURSOR c_get_add_item(cp_additid VARCHAR2) IS + SELECT * + FROM additional_items + WHERE code = cp_additid; + BEGIN --get additional item IF NOT c_get_add_item%ISOPEN THEN OPEN c_get_add_item(p_code); END IF; - + FETCH c_get_add_item INTO l_add_item_row; CLOSE c_get_add_item; - return l_add_item_row; - end get_additional_item; + RETURN l_add_item_row; + END get_additional_item; /* FUNCTION get_max_lead_time --The get_max lead_time function returns the contracted lead time for the provided quotation. @@ -434,39 +594,42 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_quoteid - the id of the quote you want to get the lead time. %return number the maximum contacted lead time for the supplied quotation */ - function get_max_lead_time(p_quoteid number) return number is - l_quote_item_maxlt number; - CURSOR c_get_max_lead_time (cp_id number) is - SELECT MAX(lead_time) - FROM quote_items - WHERE qute_id = cp_id; - begin + FUNCTION get_max_lead_time(p_quoteid NUMBER) RETURN NUMBER IS + l_quote_item_maxlt NUMBER; + CURSOR c_get_max_lead_time(cp_id NUMBER) IS + SELECT MAX(lead_time) + FROM quote_items + WHERE qute_id = cp_id; + BEGIN IF NOT c_get_max_lead_time%ISOPEN THEN OPEN c_get_max_lead_time(p_quoteid); END IF; FETCH c_get_max_lead_time INTO l_quote_item_maxlt; CLOSE c_get_max_lead_time; - return l_quote_item_maxlt; - end get_max_lead_time; + RETURN l_quote_item_maxlt; + END get_max_lead_time; /* FUNCTION get_total_cost --The get_total_cost function returns the total cost for a quotation (excluding lifting gear) %param p_quoteid - the id of the quote you want to get the total cost for. %return number the total cost */ - function get_total_cost(p_quoteid number) return number is - l_quote_total_cost number; - - begin - - SELECT SUM(selling_price + nvl(delivery_price,0)) - into l_quote_total_cost - FROM quote_items - WHERE qute_id = p_quoteid and not (quit_type = 'AQI' and adit_code in ('LIFTING GEAR','PURGING')); - - return l_quote_total_cost; - end get_total_cost; + FUNCTION get_total_cost(p_quoteid NUMBER) RETURN NUMBER IS + l_quote_total_cost NUMBER; + + BEGIN + + SELECT SUM(selling_price + nvl(delivery_price + ,0)) + INTO l_quote_total_cost + FROM quote_items + WHERE qute_id = p_quoteid + AND NOT + (quit_type = 'AQI' AND adit_code IN ('LIFTING GEAR', 'PURGING')); + + RETURN l_quote_total_cost; + END get_total_cost; /* PROCEDURE set_quote_items @@ -475,67 +638,127 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_quoteid - used to list all the quote items. %param p_enqu_row - the current enquiry row to get data only available in the enquiry. */ - procedure set_quote_items_data (p_quote_data in out quote_data, p_quoteid number, p_enqu_row enquiries%ROWTYPE) is - --Enquiry type - l_enqu_type_row enquiry_types%ROWTYPE; - CURSOR c_get_enquiry_type(cp_enty_code varchar2) IS - SELECT * - FROM enquiry_types - WHERE code = cp_enty_code; - --Quote Items - CURSOR c_get_quote_item(cp_quoteid number) IS - SELECT * - FROM quote_items - WHERE qute_id = cp_quoteid; - --Module data - l_module_row modules%ROWTYPE; - --Additional Items - l_add_item_row additional_items%ROWTYPE; - l_works works := works(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null); --list of works for the quote - l_works_counter number; - l_works_tidy works := works(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null); --list of works for the quote - l_works_tidy_counter number; - l_costs_counter number; - l_costs_tidy costs := costs(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null); - l_quote_cost_tidy_counter number; - l_addons varchar(300); --list of addons for the quote - l_housing_row housings%ROWTYPE; - l_base_row bases%ROWTYPE; - l_meter_row meters%ROWTYPE; -- used to get the qmax and qmin of the meter - l_total_cost number; --used to figure out the liquidated damages costs - l_counter number; - l_service_pressure varchar2(80); --these three used to determine whether to set - l_meter_type varchar2(80); --the lifting gear item or not - l_enqu_type varchar2(80); - begin - --get the pressure + PROCEDURE set_quote_items_data(p_quote_data IN OUT quote_data + ,p_quoteid NUMBER + ,p_enqu_row enquiries%ROWTYPE) IS + --Enquiry type + l_enqu_type_row enquiry_types%ROWTYPE; + CURSOR c_get_enquiry_type(cp_enty_code VARCHAR2) IS + SELECT * + FROM enquiry_types + WHERE code = cp_enty_code; + --Quote Items + CURSOR c_get_quote_item(cp_quoteid NUMBER) IS + SELECT * + FROM quote_items + WHERE qute_id = cp_quoteid; + --Module data + l_module_row modules%ROWTYPE; + --Additional Items + l_add_item_row additional_items%ROWTYPE; + l_works works := works(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL); --list of works for the quote + l_works_counter NUMBER; + l_works_tidy works := works(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL); --list of works for the quote + l_works_tidy_counter NUMBER; + l_costs_counter NUMBER; + l_costs_tidy costs := costs(NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL + ,NULL); + l_quote_cost_tidy_counter NUMBER; + l_addons VARCHAR(300); --list of addons for the quote + l_housing_row housings%ROWTYPE; + l_base_row bases%ROWTYPE; + l_meter_row meters%ROWTYPE; -- used to get the qmax and qmin of the meter + l_total_cost NUMBER; --used to figure out the liquidated damages costs + l_counter NUMBER; + l_service_pressure VARCHAR2(80); --these three used to determine whether to set + l_meter_type VARCHAR2(80); --the lifting gear item or not + l_enqu_type VARCHAR2(80); + BEGIN + --get the pressure l_service_pressure := p_enqu_row.required_svcp_code; - + --cycle through the quote items picking up each item to store in the --p_quote_data record - l_counter := 0; - p_quote_data.show_lifting_gear := false; --ensure by default we don't show the lifting gear caveat + l_counter := 0; + p_quote_data.show_lifting_gear := FALSE; --ensure by default we don't show the lifting gear caveat FOR quote_item_rec IN c_get_quote_item(p_quoteid) LOOP --get the meter type and job type (we test each line) - if not quote_item_rec.mety_code is null then + IF NOT quote_item_rec.mety_code IS NULL THEN l_meter_type := quote_item_rec.mety_code; - end if; - if not quote_item_rec.enty_code is null then + END IF; + IF NOT quote_item_rec.enty_code IS NULL THEN l_enqu_type := quote_item_rec.enty_code; - end if; - + END IF; + l_counter := l_counter + 1; - case quote_item_rec.quit_type - when 'BQI' then --base item + CASE quote_item_rec.quit_type + WHEN 'BQI' THEN + --base item l_addons := l_addons || ', Base'; --Set the costs p_quote_data.quote_costs(l_counter).cost_description := 'Base Materials cost'; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.selling_price; - if not (quote_item_rec.delivery_price is null) then - l_counter:=l_counter +1; + IF NOT (quote_item_rec.delivery_price IS NULL) THEN + l_counter := l_counter + 1; p_quote_data.quote_costs(l_counter).cost_description := 'Base Delivery cost'; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.delivery_price; - end if; + END IF; --get base technical details p_quote_data.base_dimensions(1) := l_base_row.depth; p_quote_data.base_dimensions(2) := l_base_row.dim_a; @@ -548,58 +771,66 @@ PROCEDURE pl(p_in IN VARCHAR2 p_quote_data.base_dimensions(9) := l_base_row.dim_h; p_quote_data.base_dimensions(10) := l_base_row.dim_i; p_quote_data.base_diagram := l_base_row.drwg_code; - when 'HQI' then --housing item + WHEN 'HQI' THEN + --housing item l_addons := l_addons || ', Housing'; --Set up the costs p_quote_data.quote_costs(l_counter).cost_description := 'Housing Materials cost'; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.selling_price; - if not (quote_item_rec.delivery_price is null) then - l_counter:=l_counter +1; + IF NOT (quote_item_rec.delivery_price IS NULL) THEN + l_counter := l_counter + 1; p_quote_data.quote_costs(l_counter).cost_description := 'Housing Delivery cost'; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.delivery_price; - end if; + END IF; --get housing technical details p_quote_data.house_dimensions(1) := l_housing_row.dim_l; p_quote_data.house_dimensions(2) := l_housing_row.dim_w; p_quote_data.house_dimensions(3) := l_housing_row.dim_h; p_quote_data.house_dimensions(4) := l_housing_row.weight; p_quote_data.house_diagram := l_housing_row.drwg_code; - - when 'AQI' then --add-on item + + WHEN 'AQI' THEN + --add-on item --Get costs l_add_item_row := get_additional_item(quote_item_rec.adit_code); --only show the lifting gears description, not the materials bit - if quote_item_rec.adit_code = 'LIFTING GEAR' then + IF quote_item_rec.adit_code = 'LIFTING GEAR' THEN p_quote_data.quote_costs(l_counter).cost_description := l_add_item_row.description; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.selling_price; - else - if quote_item_rec.adit_code <> 'AMR' then - p_quote_data.quote_costs(l_counter).cost_description := l_add_item_row.description||' Materials cost'; + ELSE + IF quote_item_rec.adit_code <> 'AMR' THEN + p_quote_data.quote_costs(l_counter).cost_description := l_add_item_row.description || + ' Materials cost'; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.selling_price; - end if; - end if; - if not(quote_item_rec.delivery_price is null) then - l_counter:=l_counter +1; - p_quote_data.quote_costs(l_counter).cost_description := l_add_item_row.description||' Delivery cost'; + END IF; + END IF; + IF NOT (quote_item_rec.delivery_price IS NULL) THEN + l_counter := l_counter + 1; + p_quote_data.quote_costs(l_counter).cost_description := l_add_item_row.description || + ' Delivery cost'; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.delivery_price; - end if; + END IF; --set the list of add-ons for this quote, but don't add lifting gear or purging - if quote_item_rec.adit_code <> 'LIFTING GEAR' and not quote_item_rec.adit_code is null then - l_addons := l_addons || ', '||l_add_item_row.description; - end if; - when 'MQI' then --module item + IF quote_item_rec.adit_code <> 'LIFTING GEAR' + AND NOT quote_item_rec.adit_code IS NULL THEN + l_addons := l_addons || ', ' || l_add_item_row.description; + END IF; + WHEN 'MQI' THEN + --module item --get costs p_quote_data.quote_costs(l_counter).cost_description := 'Module Materials cost'; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.selling_price; - if not(quote_item_rec.delivery_price is null) then - l_counter:=l_counter +1; + IF NOT (quote_item_rec.delivery_price IS NULL) THEN + l_counter := l_counter + 1; p_quote_data.quote_costs(l_counter).cost_description := 'Module Delivery cost'; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.delivery_price; - end if; + END IF; --other module details - l_module_row := get_module_row (quote_item_rec.modu_code); - - l_works(3) := 'Meter Type: '|| get_meter_type_code_desc(l_meter_type) || ' ' || p_quote_data.meter_reference; + l_module_row := get_module_row(quote_item_rec.modu_code); + + l_works(3) := 'Meter Type: ' || + get_meter_type_code_desc(l_meter_type) || ' ' || + p_quote_data.meter_reference; p_quote_data.outlet_termninal_size := l_module_row.outlet_size; --module technical details p_quote_data.module_dimensions(1) := l_module_row.dim_a; @@ -623,105 +854,115 @@ PROCEDURE pl(p_in IN VARCHAR2 p_quote_data.module_outlet_orientation := l_module_row.outlet_cnor_code; p_quote_data.module_diagram := l_module_row.drwg_code; --get meters qmax/qmin tech specs - l_meter_row := get_meter_row(l_module_row.metr_code); + l_meter_row := get_meter_row(l_module_row.metr_code); p_quote_data.module_qmax := l_module_row.qmax; p_quote_data.module_qmin := l_meter_row.qmin; - p_quote_data.mety_code := l_meter_row.mety_code; + p_quote_data.mety_code := l_meter_row.mety_code; --get the min base details for this module - l_base_row := get_base_row(l_module_row.bas_code); + l_base_row := get_base_row(l_module_row.bas_code); p_quote_data.base_length := l_base_row.dim_a; - p_quote_data.base_depth := l_base_row.dim_b; + p_quote_data.base_depth := l_base_row.dim_b; p_quote_data.base_height := l_base_row.depth; --get the min housing details for this module - l_housing_row := get_housing_row(l_module_row.hou_code); - p_quote_data.house_length := l_housing_row.dim_l; - p_quote_data.house_depth := l_housing_row.dim_w; - p_quote_data.house_height := l_housing_row.dim_h; - p_quote_data.house_ventilation := ((l_housing_row.dim_l*l_housing_row.dim_w)/100)*3; - - when 'LQI' then --Labour cost + l_housing_row := get_housing_row(l_module_row.hou_code); + p_quote_data.house_length := l_housing_row.dim_l; + p_quote_data.house_depth := l_housing_row.dim_w; + p_quote_data.house_height := l_housing_row.dim_h; + p_quote_data.house_ventilation := ((l_housing_row.dim_l * + l_housing_row.dim_w) / 100) * 3; + + WHEN 'LQI' THEN + --Labour cost --get costs p_quote_data.quote_costs(l_counter).cost_description := 'Labour Costs'; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.selling_price; - if not(quote_item_rec.delivery_price is null) then - l_counter:=l_counter +1; + IF NOT (quote_item_rec.delivery_price IS NULL) THEN + l_counter := l_counter + 1; p_quote_data.quote_costs(l_counter).cost_description := 'Labour Delivery cost'; p_quote_data.quote_costs(l_counter).cost_price := quote_item_rec.delivery_price; - end if; - - end case; - + END IF; + + END CASE; + --get existing meter if appropriate - if quote_item_rec.enty_code is not null then - if quote_item_rec.enty_code <>'INSTALL' and quote_item_rec.enty_code <>'STD INSTALL' then - l_works(5) := 'Existing Meter Type: '|| p_enqu_row.existing_mesc_code ||' '||get_meter_type_code_desc(p_enqu_row.existing_mety_code)||', Model: '||p_enqu_row.existing_metr_code||', MSN: '||p_enqu_row.existing_meter_serial_no ; - end if; + IF quote_item_rec.enty_code IS NOT NULL THEN + IF quote_item_rec.enty_code <> 'INSTALL' + AND quote_item_rec.enty_code <> 'STD INSTALL' THEN + l_works(5) := 'Existing Meter Type: ' || + p_enqu_row.existing_mesc_code || ' ' || + get_meter_type_code_desc(p_enqu_row.existing_mety_code) || + ', Model: ' || p_enqu_row.existing_metr_code || + ', MSN: ' || p_enqu_row.existing_meter_serial_no; + END IF; --if it's not an install or exchange get the existing meter type (will overwrite --current value if already set in the code above) - if quote_item_rec.enty_code not in('STD EXCHANGE','EXCHANGE','INSTALL','STD INSTALL') then + IF quote_item_rec.enty_code NOT IN + ('STD EXCHANGE', 'EXCHANGE', 'INSTALL', 'STD INSTALL') THEN p_quote_data.mety_code := p_enqu_row.existing_mety_code; - end if; - if quote_item_rec.enty_code <> 'OFMAT' and quote_item_rec.enty_code <> 'ADVERSARIAL' then + END IF; + IF quote_item_rec.enty_code <> 'OFMAT' + AND quote_item_rec.enty_code <> 'ADVERSARIAL' THEN l_total_cost := p_quote_data.total_cost; - if l_total_cost <= 1000 then + IF l_total_cost <= 1000 THEN p_quote_data.liquid_damage_day := 20; p_quote_data.liquid_damage_cap := 200; - else - p_quote_data.liquid_damage_day := (l_total_cost/100)*2.5; - p_quote_data.liquid_damage_cap := (l_total_cost/100)*25; - end if; - end if; - end if; - + ELSE + p_quote_data.liquid_damage_day := (l_total_cost / 100) * 2.5; + p_quote_data.liquid_damage_cap := (l_total_cost / 100) * 25; + END IF; + END IF; + END IF; + END LOOP; --get type of enquiry to display as works type IF NOT c_get_enquiry_type%ISOPEN THEN - OPEN c_get_enquiry_type(l_enqu_type ); + OPEN c_get_enquiry_type(l_enqu_type); END IF; - + FETCH c_get_enquiry_type INTO l_enqu_type_row; CLOSE c_get_enquiry_type; - - l_works(1) := 'Works Type: '||l_enqu_type_row.description; + + l_works(1) := 'Works Type: ' || l_enqu_type_row.description; --get service pressure - l_works(2) := 'Service Pressure: '|| l_service_pressure; + l_works(2) := 'Service Pressure: ' || l_service_pressure; -- --add up all the addons and format the string - if l_addons is not null then - l_works(4) := 'Add-Ons: '|| ltrim(l_addons, ','); - end if; + IF l_addons IS NOT NULL THEN + l_works(4) := 'Add-Ons: ' || ltrim(l_addons + ,','); + END IF; --tidy up l_works so there are no blank entries --create an l_works_tidy variable and copy all --non null array entries into it - l_works_counter := l_works.first; + l_works_counter := l_works.FIRST; l_works_tidy_counter := 1; - loop - exit when l_works_counter is null; - if not l_works(l_works_counter) is null then - l_works_tidy(l_works_tidy_counter):=l_works(l_works_counter); - l_works_tidy_counter := l_works_tidy_counter +1; - end if; - l_works_counter := l_works.next(l_works_counter); - end loop; + LOOP + EXIT WHEN l_works_counter IS NULL; + IF NOT l_works(l_works_counter) IS NULL THEN + l_works_tidy(l_works_tidy_counter) := l_works(l_works_counter); + l_works_tidy_counter := l_works_tidy_counter + 1; + END IF; + l_works_counter := l_works.NEXT(l_works_counter); + END LOOP; p_quote_data.quote_works := l_works_tidy; --tidy up quote costs -- -- - l_costs_counter := p_quote_data.quote_costs.first; + l_costs_counter := p_quote_data.quote_costs.FIRST; l_quote_cost_tidy_counter := 1; - loop - exit when l_costs_counter is null; - if not p_quote_data.quote_costs(l_costs_counter).cost_description is null then - l_costs_tidy(l_quote_cost_tidy_counter):=p_quote_data.quote_costs(l_costs_counter); - l_quote_cost_tidy_counter := l_quote_cost_tidy_counter +1; - end if; - l_costs_counter := p_quote_data.quote_costs.next(l_costs_counter); - end loop; + LOOP + EXIT WHEN l_costs_counter IS NULL; + IF NOT p_quote_data.quote_costs(l_costs_counter) + .cost_description IS NULL THEN + l_costs_tidy(l_quote_cost_tidy_counter) := p_quote_data.quote_costs(l_costs_counter); + l_quote_cost_tidy_counter := l_quote_cost_tidy_counter + 1; + END IF; + l_costs_counter := p_quote_data.quote_costs.NEXT(l_costs_counter); + END LOOP; p_quote_data.quote_costs := l_costs_tidy; - - - end set_quote_items_data; + + END set_quote_items_data; /* FUNCTION get_detailed_quote_data @@ -731,99 +972,109 @@ PROCEDURE pl(p_in IN VARCHAR2 %param possibly a few more params to get the required data in or change format of pdf %return return the quote data in the quote_data reocrd type */ - FUNCTION get_detailed_quote_data(p_quoteid in number) RETURN quote_data is - --Quote data - l_quote_data quote_data; - l_quote_row quotes%ROWTYPE; - --Enquiry data - l_enquiry_id number; - l_enqu_row enquiries%ROWTYPE; - --Address data - l_addr_row v_current_party_addresses%ROWTYPE; - CURSOR c_get_address(cp_party_id number, cp_rt_type varchar2) IS - SELECT * - FROM v_current_party_addresses - WHERE id = cp_party_id and rt_code=cp_rt_type; - l_supplier_id number; - l_agent_id number; - --Party name - l_party_row parties%ROWTYPE; - CURSOR c_get_party(cp_party_id number) IS - SELECT * - FROM parties - WHERE id = cp_party_id; - --The caveats - CURSOR c_get_caveats(cp_enty_code varchar2, cp_mety_code varchar2, cp_svcpt_code varchar2) IS - select * - from caveat_texts t - where enty_code = cp_enty_code and mety_code = cp_mety_code and svcpt_code = cp_svcpt_code - order by 1,2,3,4,5; - --Agent Name - l_agent_first_name varchar2(80); - l_agent_last_name varchar2(80); - --suppler name - l_supplier_name varchar2(80); - --caveat counters - l_dw_counter number; - l_tc_counter number; - l_cs_counter number; - l_csqa_counter number; - - begin + FUNCTION get_detailed_quote_data(p_quoteid IN NUMBER) RETURN quote_data IS + --Quote data + l_quote_data quote_data; + l_quote_row quotes%ROWTYPE; + --Enquiry data + l_enquiry_id NUMBER; + l_enqu_row enquiries%ROWTYPE; + --Address data + l_addr_row v_current_party_addresses%ROWTYPE; + CURSOR c_get_address(cp_party_id NUMBER, cp_rt_type VARCHAR2) IS + SELECT * + FROM v_current_party_addresses + WHERE id = cp_party_id + AND rt_code = cp_rt_type; + l_supplier_id NUMBER; + l_agent_id NUMBER; + --Party name + l_party_row parties%ROWTYPE; + CURSOR c_get_party(cp_party_id NUMBER) IS + SELECT * + FROM parties + WHERE id = cp_party_id; + --The caveats + CURSOR c_get_caveats(cp_enty_code VARCHAR2, cp_mety_code VARCHAR2, cp_svcpt_code VARCHAR2) IS + SELECT * + FROM caveat_texts t + WHERE enty_code = cp_enty_code + AND mety_code = cp_mety_code + AND svcpt_code = cp_svcpt_code + ORDER BY 1 + ,2 + ,3 + ,4 + ,5; + --Agent Name + l_agent_first_name VARCHAR2(80); + l_agent_last_name VARCHAR2(80); + --suppler name + l_supplier_name VARCHAR2(80); + --caveat counters + l_dw_counter NUMBER; + l_tc_counter NUMBER; + l_cs_counter NUMBER; + l_csqa_counter NUMBER; + + BEGIN --get the quote's data record l_quote_row := get_quote_row(p_quoteid); - + --get the enquiry data l_enquiry_id := l_quote_row.enqu_id; - l_enqu_row := get_enquiry_row(l_enquiry_id); - + l_enqu_row := get_enquiry_row(l_enquiry_id); + --get current supplier and agent ids for enquiry - l_supplier_id := mip_enquiry.get_enquiry_role(l_enqu_row.id,'ENQ SUPP'); - l_agent_id := mip_enquiry.get_enquiry_role(l_enqu_row.id,'ENQ OWN'); - + l_supplier_id := mip_enquiry.get_enquiry_role(l_enqu_row.id + ,'ENQ SUPP'); + l_agent_id := mip_enquiry.get_enquiry_role(l_enqu_row.id + ,'ENQ OWN'); + --get the latest agent address IF NOT c_get_address%ISOPEN THEN - OPEN c_get_address(l_agent_id,'OFFICE'); + OPEN c_get_address(l_agent_id + ,'OFFICE'); END IF; - + FETCH c_get_address INTO l_addr_row; CLOSE c_get_address; - + --supplier IF NOT c_get_party%ISOPEN THEN OPEN c_get_party(l_supplier_id); END IF; - + FETCH c_get_party INTO l_party_row; CLOSE c_get_party; - l_supplier_name := l_party_row.name; + l_supplier_name := l_party_row.NAME; --agent IF NOT c_get_party%ISOPEN THEN OPEN c_get_party(l_agent_id); END IF; - + FETCH c_get_party INTO l_party_row; CLOSE c_get_party; - - + l_agent_first_name := l_party_row.first_name; - l_agent_last_name := l_party_row.last_name; - + l_agent_last_name := l_party_row.last_name; + l_quote_data.enquiry_ref := l_enquiry_id; l_quote_data.quote_ref := l_quote_row.id; l_quote_data.transaction_ref := l_enqu_row.transaction_reference; l_quote_data.mprn := l_enqu_row.mprn; - l_quote_data.supplier_address(1) := l_agent_first_name||' '||l_agent_last_name; + l_quote_data.supplier_address(1) := l_agent_first_name || ' ' || + l_agent_last_name; l_quote_data.supplier_address(2) := l_supplier_name; l_quote_data.supplier_address(3) := l_addr_row.sub_building; l_quote_data.supplier_address(4) := l_addr_row.building; l_quote_data.supplier_address(5) := l_addr_row.street; l_quote_data.supplier_address(6) := l_addr_row.city; l_quote_data.supplier_address(7) := l_addr_row.postcode; - l_quote_data.current_date := sysdate; + l_quote_data.current_date := SYSDATE; l_quote_data.agent_first_name := l_agent_first_name; l_quote_data.site_address(1) := l_enqu_row.install_sub_building; l_quote_data.site_address(2) := l_enqu_row.install_building; @@ -831,42 +1082,48 @@ PROCEDURE pl(p_in IN VARCHAR2 l_quote_data.site_address(4) := l_enqu_row.install_city; l_quote_data.site_address(5) := l_enqu_row.install_postcode; --need get the mam - l_quote_data.mam := get_mam(mip_regions.get_region_for_postcode(l_enqu_row.install_postcode)); - l_quote_data.lead_time := get_max_lead_time(l_quote_row.id); - l_quote_data.total_cost := get_total_cost(l_quote_row.id); + l_quote_data.mam := get_mam(mip_regions.get_region_for_postcode(l_enqu_row.install_postcode)); + l_quote_data.lead_time := get_max_lead_time(l_quote_row.id); + l_quote_data.total_cost := get_total_cost(l_quote_row.id); l_quote_data.requested_qmax := l_enqu_row.qmax; - if l_enqu_row.required_svcp_code = 'LP' then + IF l_enqu_row.required_svcp_code = 'LP' THEN l_quote_data.svcpt_code := 'LP'; - else + ELSE l_quote_data.svcpt_code := 'MP'; - end if; + END IF; --get individual quote item details - set_quote_items_data(l_quote_data, l_quote_row.id,l_enqu_row); + set_quote_items_data(l_quote_data + ,l_quote_row.id + ,l_enqu_row); --get caveats - l_dw_counter := 1; - l_tc_counter := 1; - l_cs_counter := 1; + l_dw_counter := 1; + l_tc_counter := 1; + l_cs_counter := 1; l_csqa_counter := 1; - for rec in c_get_caveats(l_enqu_row.enty_code, l_quote_data.mety_code, l_quote_data.svcpt_code) - loop - case rec.document_position - when 'TERM_COND' then --terms and conditions/specialfeatures caveat point + FOR rec IN c_get_caveats(l_enqu_row.enty_code + ,l_quote_data.mety_code + ,l_quote_data.svcpt_code) LOOP + CASE rec.document_position + WHEN 'TERM_COND' THEN + --terms and conditions/specialfeatures caveat point l_quote_data.caveat_term_cond(l_tc_counter) := rec.text; - l_tc_counter := l_tc_counter +1; - when 'DESC_WORK' then --description of works caveat point + l_tc_counter := l_tc_counter + 1; + WHEN 'DESC_WORK' THEN + --description of works caveat point l_quote_data.caveat_desc_works(l_dw_counter) := rec.text; - l_dw_counter := l_dw_counter +1; - when 'CONT_SUM' then --description of works caveat point + l_dw_counter := l_dw_counter + 1; + WHEN 'CONT_SUM' THEN + --description of works caveat point l_quote_data.caveat_cont_sum(l_cs_counter) := rec.text; - l_cs_counter := l_cs_counter +1; - when 'CONT_SUM_QA' then --description of works caveat point + l_cs_counter := l_cs_counter + 1; + WHEN 'CONT_SUM_QA' THEN + --description of works caveat point l_quote_data.caveat_cont_sum_qa(l_csqa_counter) := rec.text; - l_csqa_counter := l_csqa_counter +1; - end case; - end loop; + l_csqa_counter := l_csqa_counter + 1; + END CASE; END LOOP; --phew, lets return all that lovely data we captured then... - return l_quote_data; - end get_detailed_quote_data; + RETURN l_quote_data; + END get_detailed_quote_data; /* PROCEDURE build_covering_letter --This procedure builds the covering letter for the quotation, it writes data @@ -878,98 +1135,225 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_logo_blob - the logo(image) to display at the top of the page %param p_signature_blob - the signature(image) to display at the bottom of the page */ - PROCEDURE build_covering_letter(p_quote_data in quote_data, p_font in varchar2, p_indent in number, p_vertical_offset in number,p_logo_blob blob,p_signature_blob blob,p_watermark_blob blob) is - l_note_text varchar2(500); - l_cell_margin number; - begin - plpdf.NewPage; + PROCEDURE build_covering_letter(p_quote_data IN quote_data + ,p_font IN VARCHAR2 + ,p_indent IN NUMBER + ,p_vertical_offset IN NUMBER + ,p_logo_blob BLOB + ,p_signature_blob BLOB + ,p_watermark_blob BLOB) IS + l_note_text VARCHAR2(500); + l_cell_margin NUMBER; + BEGIN + plpdf.newpage; --set watermark if it exists - if p_watermark_blob is not null THEN - pl('watermark IS NOT null',$$plsql_line); - plpdf.PutImage('test watermark',p_watermark_blob,50,50,200,200); - ELSE - pl('watermark IS null',$$plsql_line); - end if; + IF p_watermark_blob IS NOT NULL THEN + pl('watermark IS NOT null' + ,$$PLSQL_LINE); + plpdf.putimage('test watermark' + ,p_watermark_blob + ,50 + ,50 + ,200 + ,200); + ELSE + pl('watermark IS null' + ,$$PLSQL_LINE); + END IF; -- set margins - plpdf.SetLeftMargin(31.7); - plpdf.SetRightMargin(31.7); - plpdf.SetTopMargin(25.4); - - plpdf.SetPrintFont(p_font,null,7); + plpdf.setleftmargin(31.7); + plpdf.setrightmargin(31.7); + plpdf.settopmargin(25.4); + + plpdf.setprintfont(p_font + ,NULL + ,7); -- Set header stuff up - plpdf.PutImage('ngmlogo',p_logo_blob,p_indent,10,52,18); - plpdf.PrintText(140,10,'4 Abbotts Lane '); - plpdf.PrintText(140,13,'Coventry'); - plpdf.PrintText(140,16,'CV1 4AY'); - plpdf.PrintText(170,10,'T +44 (0) 24 7628 6000'); - plpdf.PrintText(170,13,'F +44 (0) 24 7628 6022'); - plpdf.PrintText(170,16,'www.nationalgrid.com'); + plpdf.putimage('ngmlogo' + ,p_logo_blob + ,p_indent + ,10 + ,52 + ,18); + plpdf.printtext(140 + ,10 + ,'4 Abbotts Lane '); + plpdf.printtext(140 + ,13 + ,'Coventry'); + plpdf.printtext(140 + ,16 + ,'CV1 4AY'); + plpdf.printtext(170 + ,10 + ,'T +44 (0) 24 7628 6000'); + plpdf.printtext(170 + ,13 + ,'F +44 (0) 24 7628 6022'); + plpdf.printtext(170 + ,16 + ,'www.nationalgrid.com'); -- And Footer stuff - plpdf.PrintText(50,280,'National Grid Metering is the trading name for National Grid Metering Ltd.'); - plpdf.PrintText(50,283,'Registered Office: 1-3 Strand, London, WCZN 5EH. Registered in England and Wales, No. 3705992'); - plpdf.SetPrintFont(p_font,null,10); -- set back to 10 pt - plpdf.PrintText(p_indent,p_vertical_offset+10,'National Grid Metering''s Ref: '|| to_char(p_quote_data.enquiry_ref)); - plpdf.PrintText(p_indent,p_vertical_offset+14,'Customer Reference: '|| p_quote_data.transaction_ref); - plpdf.PrintText(p_indent,p_vertical_offset+18,'MPRN: '|| to_char(p_quote_data.mprn)); + plpdf.printtext(50 + ,280 + ,'National Grid Metering is the trading name for National Grid Metering Ltd.'); + plpdf.printtext(50 + ,283 + ,'Registered Office: 1-3 Strand, London, WCZN 5EH. Registered in England and Wales, No. 3705992'); + plpdf.setprintfont(p_font + ,NULL + ,10); -- set back to 10 pt + plpdf.printtext(p_indent + ,p_vertical_offset + 10 + ,'Online Quotation Reference: ' || + TO_CHAR(p_quote_data.enquiry_ref)); + plpdf.printtext(p_indent + ,p_vertical_offset + 14 + ,'Customer Reference: ' || p_quote_data.transaction_ref); + plpdf.printtext(p_indent + ,p_vertical_offset + 18 + ,'MPRN: ' || TO_CHAR(p_quote_data.mprn)); --print supplier address with no blank lines - for addr_count in 1 ..7 - loop - if not (p_quote_data.supplier_address(addr_count) is null) then - plpdf.PrintText(p_indent,p_vertical_offset+22+(addr_count*4),p_quote_data.supplier_address(addr_count)); - end if; - end loop; - plpdf.PrintText(p_indent,p_vertical_offset+58,'Date: '||p_quote_data.current_date); - plpdf.PrintText(p_indent,p_vertical_offset+66,'Quotation Contact: Non Standard Customer Service Team'); - plpdf.PrintText(p_indent,p_vertical_offset+70,'Mailbox ; ic.nonstandard1@uk.ngrid.com'); - plpdf.PrintText(p_indent,p_vertical_offset+74,'Hunt Group 02476 286322'); - plpdf.PrintText(p_indent,p_vertical_offset+78,'Fax 02476 286044'); - plpdf.PrintText(p_indent,p_vertical_offset+90,'Dear '|| p_quote_data.agent_first_name); --agent first name - plpdf.SetPrintFont(p_font,'B',10); --set bold - plpdf.PrintText(p_indent,p_vertical_offset+98,'Re: '||rtrim(ltrim(p_quote_data.site_address(1)||', '||p_quote_data.site_address(2)||', '||p_quote_data.site_address(3)||', '||p_quote_data.site_address(4)||', '||p_quote_data.site_address(5)||', '||p_quote_data.site_address(6)||', '||p_quote_data.site_address(7),', '),', ')); --site address - 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 || ', 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+106); - plpdf.PrintFlowingText(4,l_note_text); - plpdf.LineBreak; - plpdf.LineBreak; - plpdf.SetPrintFont(p_font,null,10); --unset bold - plpdf.PrintFlowingText(4,'I am pleased to provide you with a quotation for works '); - plpdf.SetPrintFont(p_font,'B',10); --set bold - plpdf.PrintFlowingText(4,' on behalf of '||p_quote_data.mam); - plpdf.SetPrintFont(p_font,null,10); --unset bold - plpdf.PrintFlowingText(4,' and in accordance with their General Conditions of Contract for Transactional Meter Works Not Exceeding 7 Bar.'); - plpdf.SetPrintFont(p_font,'B',10); --set bold - plpdf.PrintFlowingText(4,' Please note, if you accept this quotation you are agreeing to be bound by the terms of the '||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.'); - plpdf.SetCellMargin(l_cell_margin); - plpdf.SetLeftMargin(31.7); - plpdf.SetPrintFont(p_font,null,10); --unset bold - plpdf.PrintText(p_indent,p_vertical_offset+148,'This quotation is produced on the basis that, the information provided in the request is correct.'); - plpdf.PrintText(p_indent,p_vertical_offset+152,'Your acceptance of the quotation will be taken to mean that you also accept that the stated'); - plpdf.PrintText(p_indent,p_vertical_offset+156,'assumptions are correct. If it is later determined, by either party prior to works commencing on'); - plpdf.PrintText(p_indent,p_vertical_offset+160,'site, that any stated assumption is significantly incorrect, National Grid Metering will determine'); - plpdf.PrintText(p_indent,p_vertical_offset+164,'whether the quotation shall be varied or withdrawn. Works will only then commence if any'); - plpdf.PrintText(p_indent,p_vertical_offset+168,'variation is agreed in line with the relevant General Conditions of Contract.'); + FOR addr_count IN 1 .. 7 LOOP + IF NOT (p_quote_data.supplier_address(addr_count) IS NULL) THEN + plpdf.printtext(p_indent + ,p_vertical_offset + 22 + (addr_count * 4) + ,p_quote_data.supplier_address(addr_count)); + END IF; + END LOOP; + plpdf.printtext(p_indent + ,p_vertical_offset + 58 + ,'Date: ' || p_quote_data.current_date); + plpdf.printtext(p_indent + ,p_vertical_offset + 66 + ,'Quotation Contact: Non Standard Customer Service Team'); + plpdf.printtext(p_indent + ,p_vertical_offset + 70 + ,'Mailbox ; ic.nonstandard1@uk.ngrid.com'); + plpdf.printtext(p_indent + ,p_vertical_offset + 74 + ,'Hunt Group 02476 286322'); + plpdf.printtext(p_indent + ,p_vertical_offset + 78 + ,'Fax 02476 286044'); + plpdf.printtext(p_indent + ,p_vertical_offset + 90 + ,'Dear ' || p_quote_data.agent_first_name); --agent first name + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold + plpdf.printtext(p_indent + ,p_vertical_offset + 98 + ,'Re: ' || rtrim(ltrim(p_quote_data.site_address(1) || ', ' || + p_quote_data.site_address(2) || ', ' || + p_quote_data.site_address(3) || ', ' || + p_quote_data.site_address(4) || ', ' || + p_quote_data.site_address(5) || ', ' || + p_quote_data.site_address(6) || ', ' || + p_quote_data.site_address(7) + ,', ') + ,', ')); --site address + 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 || + ', 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 + 106); + plpdf.printflowingtext(4 + ,l_note_text); + plpdf.linebreak; + plpdf.linebreak; + plpdf.setprintfont(p_font + ,NULL + ,10); --unset bold + plpdf.printflowingtext(4 + ,'I am pleased to provide you with a quotation for works '); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold + plpdf.printflowingtext(4 + ,' on behalf of ' || p_quote_data.mam); + plpdf.setprintfont(p_font + ,NULL + ,10); --unset bold + plpdf.printflowingtext(4 + ,' and in accordance with their General Conditions of Contract for Transactional Meter Works Not Exceeding 7 Bar.'); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold + plpdf.printflowingtext(4 + ,' Please note, if you accept this quotation you are agreeing to be bound by the terms of the ' || + 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.'); + plpdf.setcellmargin(l_cell_margin); + plpdf.setleftmargin(31.7); + plpdf.setprintfont(p_font + ,NULL + ,10); --unset bold + plpdf.printtext(p_indent + ,p_vertical_offset + 148 + ,'This quotation is produced on the basis that, the information provided in the request is correct.'); + plpdf.printtext(p_indent + ,p_vertical_offset + 152 + ,'Your acceptance of the quotation will be taken to mean that you also accept that the stated'); + plpdf.printtext(p_indent + ,p_vertical_offset + 156 + ,'assumptions are correct. If it is later determined, by either party prior to works commencing on'); + plpdf.printtext(p_indent + ,p_vertical_offset + 160 + ,'site, that any stated assumption is significantly incorrect, National Grid Metering will determine'); + plpdf.printtext(p_indent + ,p_vertical_offset + 164 + ,'whether the quotation shall be varied or withdrawn. Works will only then commence if any'); + plpdf.printtext(p_indent + ,p_vertical_offset + 168 + ,'variation is agreed in line with the relevant General Conditions of Contract.'); -- - plpdf.PrintText(p_indent,p_vertical_offset+176,'To accept the quotation please submit a work request via IX, as outlined in the Rainbow Manual,'); - plpdf.PrintText(p_indent,p_vertical_offset+180,'or complete the enclosed Acceptance Form and return it to the above National Grid Metering'''); - plpdf.PrintText(p_indent,p_vertical_offset+184,'office.'); + plpdf.printtext(p_indent + ,p_vertical_offset + 176 + ,'To accept the quotation please submit acceptance using the Online Quotation System, as'); + plpdf.printtext(p_indent + ,p_vertical_offset + 180 + ,'outlined in the Rainbow Manual, or complete the enclosed Acceptance Form and return it to'); + plpdf.printtext(p_indent + ,p_vertical_offset + 184 + ,'the above National Grid Metering'' office.'); -- - plpdf.PrintText(p_indent,p_vertical_offset+192,'Please note that this quotation is valid for 90 days from the date specified in the quotation.'); - plpdf.PrintText(p_indent,p_vertical_offset+196,'Please use National Grid Metering''s Reference, which is at the top of the letter, on any future'); - plpdf.PrintText(p_indent,p_vertical_offset+200,'correspondence relating to this request.'); + plpdf.printtext(p_indent + ,p_vertical_offset + 192 + ,'Please note that this quotation is valid for 90 days from the date specified in the quotation.'); + plpdf.printtext(p_indent + ,p_vertical_offset + 196 + ,'Please use the Online Quotation Reference, which is at the top of the letter, on any future'); + plpdf.printtext(p_indent + ,p_vertical_offset + 200 + ,'correspondence relating to this request.'); -- - plpdf.PrintText(p_indent,p_vertical_offset+208,'If you have any queries, please contact the team on the number above.'); - plpdf.PrintText(p_indent,p_vertical_offset+216,'Yours sincerely'); + plpdf.printtext(p_indent + ,p_vertical_offset + 208 + ,'If you have any queries, please contact the team on the number above.'); + plpdf.printtext(p_indent + ,p_vertical_offset + 216 + ,'Yours sincerely'); --put on daves signature - plpdf.PutImage('dhsignature',p_signature_blob,p_indent,248,44,11); - plpdf.PrintText(p_indent,p_vertical_offset+234,'David Harper'); - plpdf.PrintText(p_indent,p_vertical_offset+238,'I&C Technical Manager'); - plpdf.PrintText(p_indent,p_vertical_offset+242,'National Grid Metering'); - end build_covering_letter; + plpdf.putimage('dhsignature' + ,p_signature_blob + ,p_indent + ,248 + ,44 + ,11); + plpdf.printtext(p_indent + ,p_vertical_offset + 234 + ,'David Harper'); + plpdf.printtext(p_indent + ,p_vertical_offset + 238 + ,'I&C Technical Manager'); + plpdf.printtext(p_indent + ,p_vertical_offset + 242 + ,'National Grid Metering'); + END build_covering_letter; /* PROCEDURE build_costs_page --This procedure builds the costs page for the quotation, it writes data @@ -979,91 +1363,186 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_indent - the left margin measurement. %param p_vertical_offset - the top margin measurement. */ - PROCEDURE build_costs_page(p_quote_data in quote_data, p_font in varchar2, p_indent in number, p_vertical_offset in number,p_watermark_blob blob) is - l_cost_line_counter number; - l_vertical_offset_for_costs number := p_vertical_offset+126; - l_works_counter number; - 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 - --function parameter causes error on pdf - begin + PROCEDURE build_costs_page(p_quote_data IN quote_data + ,p_font IN VARCHAR2 + ,p_indent IN NUMBER + ,p_vertical_offset IN NUMBER + ,p_watermark_blob BLOB) IS + l_cost_line_counter NUMBER; + l_vertical_offset_for_costs NUMBER := p_vertical_offset + 126; + l_works_counter NUMBER; + 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 + --function parameter causes error on pdf + BEGIN --Page 2 - plpdf.NewPage; + plpdf.newpage; --set watermark if it exists - if p_watermark_blob is not null then - plpdf.PutImage('test watermark',p_watermark_blob,50,50,200,200); - end if; + IF p_watermark_blob IS NOT NULL THEN + plpdf.putimage('test watermark' + ,p_watermark_blob + ,50 + ,50 + ,200 + ,200); + END IF; -- set margins - plpdf.SetLeftMargin(31.7); - plpdf.SetRightMargin(31.7); - plpdf.SetTopMargin(25.4); - plpdf.SetPrintFont(p_font,'B',10); --set bold - plpdf.PrintText(p_indent,p_vertical_offset+10,'QUOTATION'); - plpdf.SetPrintFont(p_font,null,10); --unset bold - plpdf.PrintText(p_indent,p_vertical_offset+18,'National Grid Metering''s Ref: '|| to_char(p_quote_data.enquiry_ref)); - plpdf.PrintText(p_indent,p_vertical_offset+22,'Customer Reference: '|| p_quote_data.transaction_ref); - plpdf.PrintText(p_indent,p_vertical_offset+26,'MPRN: '|| to_char(p_quote_data.mprn)); - plpdf.PrintText(p_indent,p_vertical_offset+30,'Date: '||p_quote_data.current_date); - plpdf.SetPrintFont(p_font,'B',10); --set bold - plpdf.PrintText(p_indent,p_vertical_offset+38,'Re: '||rtrim(ltrim(p_quote_data.site_address(1)||', '||p_quote_data.site_address(2)||', '||p_quote_data.site_address(3)||', '||p_quote_data.site_address(4)||', '||p_quote_data.site_address(5)||', '||p_quote_data.site_address(6)||', '||p_quote_data.site_address(7),', '),', ')); --site address - plpdf.SetPrintFont(p_font,'U',10); --set underline - plpdf.PrintText(p_indent,p_vertical_offset+48,'Full Description of Works to be carried out by National Grid Metering:'); - plpdf.SetPrintFont(p_font,'B',10); --set bold - l_works_counter := p_quote_data.quote_works.first; - loop - exit when l_works_counter is null; - if not p_quote_data.quote_works(l_works_counter) is null then - plpdf.PrintText(p_indent,l_vertical_offset_for_works+(l_works_counter*4), p_quote_data.quote_works(l_works_counter)); - l_caveat_desc_works_offset := l_vertical_offset_for_works+(l_works_counter*4); - end if; - l_works_counter := p_quote_data.quote_works.next(l_works_counter); - end loop; + plpdf.setleftmargin(31.7); + plpdf.setrightmargin(31.7); + plpdf.settopmargin(25.4); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold + plpdf.printtext(p_indent + ,p_vertical_offset + 10 + ,'QUOTATION'); + plpdf.setprintfont(p_font + ,NULL + ,10); --unset bold + plpdf.printtext(p_indent + ,p_vertical_offset + 18 + ,'Online Quotation Reference: ' || + TO_CHAR(p_quote_data.enquiry_ref)); + plpdf.printtext(p_indent + ,p_vertical_offset + 22 + ,'Customer Reference: ' || p_quote_data.transaction_ref); + plpdf.printtext(p_indent + ,p_vertical_offset + 26 + ,'MPRN: ' || TO_CHAR(p_quote_data.mprn)); + plpdf.printtext(p_indent + ,p_vertical_offset + 30 + ,'Date: ' || p_quote_data.current_date); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold + plpdf.printtext(p_indent + ,p_vertical_offset + 38 + ,'Re: ' || rtrim(ltrim(p_quote_data.site_address(1) || ', ' || + p_quote_data.site_address(2) || ', ' || + p_quote_data.site_address(3) || ', ' || + p_quote_data.site_address(4) || ', ' || + p_quote_data.site_address(5) || ', ' || + p_quote_data.site_address(6) || ', ' || + p_quote_data.site_address(7) + ,', ') + ,', ')); --site address + plpdf.setprintfont(p_font + ,'U' + ,10); --set underline + plpdf.printtext(p_indent + ,p_vertical_offset + 48 + ,'Full Description of Works to be carried out by National Grid Metering:'); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold + l_works_counter := p_quote_data.quote_works.FIRST; + LOOP + EXIT WHEN l_works_counter IS NULL; + IF NOT p_quote_data.quote_works(l_works_counter) IS NULL THEN + plpdf.printtext(p_indent + ,l_vertical_offset_for_works + + (l_works_counter * 4) + ,p_quote_data.quote_works(l_works_counter)); + l_caveat_desc_works_offset := l_vertical_offset_for_works + + (l_works_counter * 4); + END IF; + l_works_counter := p_quote_data.quote_works.NEXT(l_works_counter); + END LOOP; -- DESC_WORK caveat here - if p_quote_data.caveat_desc_works is not null then - print_caveats(p_quote_data.caveat_desc_works, l_caveat_desc_works_offset+1); - end if; - plpdf.SetPrintFont(p_font,null,10); --unset bold - plpdf.PrintText(p_indent,p_vertical_offset+106, 'Indicative Lead Time from Acceptance to Physical Commencement: '); - plpdf.SetPrintFont(p_font,'B',10); --set bold - plpdf.PrintText(140,p_vertical_offset+106, p_quote_data.lead_time||' working days'); - plpdf.SetPrintFont(p_font,null,10); --unset bold - plpdf.PrintText(p_indent,p_vertical_offset+114,'Contract sum (excluding V.A.T): '); - plpdf.SetPrintFont(p_font,'B',10); --set bold + IF p_quote_data.caveat_desc_works IS NOT NULL THEN + print_caveats(p_quote_data.caveat_desc_works + ,l_caveat_desc_works_offset + 1); + END IF; + plpdf.setprintfont(p_font + ,NULL + ,10); --unset bold + plpdf.printtext(p_indent + ,p_vertical_offset + 106 + ,'Indicative Lead Time from Acceptance to Physical Commencement: '); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold + plpdf.printtext(140 + ,p_vertical_offset + 106 + ,p_quote_data.lead_time || ' working days'); + plpdf.setprintfont(p_font + ,NULL + ,10); --unset bold + plpdf.printtext(p_indent + ,p_vertical_offset + 114 + ,'Contract sum (excluding V.A.T): '); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold --only show the lifing gear caveat if we give a price for lifting gear --if p_quote_data.show_lifting_gear = true then -- plpdf.PrintText(85,p_vertical_offset+114,'£'||to_char(p_quote_data.total_cost,'FM999999D90')||' excluding lifting gear if required.'); --else - plpdf.PrintText(85,p_vertical_offset+114,'£'||to_char(p_quote_data.total_cost,'FM999999D90')); + plpdf.printtext(85 + ,p_vertical_offset + 114 + ,'£' || TO_CHAR(p_quote_data.total_cost + ,'FM999999D90')); --end if; - l_ybefore := plpdf.GetCurrentY; - + l_ybefore := plpdf.getcurrenty; + -- CONT_SUM caveat here - if p_quote_data.caveat_cont_sum is not null then - print_one_line_caveats(p_quote_data.caveat_cont_sum, p_vertical_offset+111,plpdf.GetCurrentY+8,4); - end if; - l_vertical_offset_for_costs := l_vertical_offset_for_costs+(plpdf.GetCurrentY-l_ybefore); - plpdf.SetPrintFont(p_font,null,10); --unset bold - plpdf.PrintText(p_indent,plpdf.GetCurrentY+4,'Analysis of Costs (all costs exclude V.A.T)'); - plpdf.SetPrintFont(p_font,'B',10); --set bold - - l_cost_line_counter:=1; - while p_quote_data.quote_costs(l_cost_line_counter).cost_description is not null - loop - plpdf.PrintText(p_indent,l_vertical_offset_for_costs+l_cost_line_counter*4,p_quote_data.quote_costs(l_cost_line_counter).cost_description); - plpdf.PrintText(120,l_vertical_offset_for_costs+l_cost_line_counter*4,'£'||to_char(p_quote_data.quote_costs(l_cost_line_counter).cost_price,'FM999999D90')); - l_cost_line_counter := l_cost_line_counter +1; - end loop; - l_cost_totals_offset := l_vertical_offset_for_costs+l_cost_line_counter*4; - plpdf.DrawLine(p_indent,l_cost_totals_offset+2,185,l_cost_totals_offset+2); - plpdf.PrintText(p_indent,l_cost_totals_offset+6,'Total costs:'); - plpdf.PrintText(120,l_cost_totals_offset+6,'£'||to_char(p_quote_data.total_cost,'FM999999D90')); + IF p_quote_data.caveat_cont_sum IS NOT NULL THEN + print_one_line_caveats(p_quote_data.caveat_cont_sum + ,p_vertical_offset + 111 + ,plpdf.getcurrenty + 8 + ,4); + END IF; + l_vertical_offset_for_costs := l_vertical_offset_for_costs + + (plpdf.getcurrenty - l_ybefore); + plpdf.setprintfont(p_font + ,NULL + ,10); --unset bold + plpdf.printtext(p_indent + ,plpdf.getcurrenty + 4 + ,'Analysis of Costs (all costs exclude V.A.T)'); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold + + l_cost_line_counter := 1; + WHILE p_quote_data.quote_costs(l_cost_line_counter) + .cost_description IS NOT NULL LOOP + plpdf.printtext(p_indent + ,l_vertical_offset_for_costs + + l_cost_line_counter * 4 + , p_quote_data.quote_costs(l_cost_line_counter) + .cost_description); + plpdf.printtext(120 + ,l_vertical_offset_for_costs + + l_cost_line_counter * 4 + ,'£' || TO_CHAR(p_quote_data.quote_costs(l_cost_line_counter) + .cost_price + ,'FM999999D90')); + l_cost_line_counter := l_cost_line_counter + 1; + END LOOP; + l_cost_totals_offset := l_vertical_offset_for_costs + + l_cost_line_counter * 4; + plpdf.drawline(p_indent + ,l_cost_totals_offset + 2 + ,185 + ,l_cost_totals_offset + 2); + plpdf.printtext(p_indent + ,l_cost_totals_offset + 6 + ,'Total costs:'); + plpdf.printtext(120 + ,l_cost_totals_offset + 6 + ,'£' || TO_CHAR(p_quote_data.total_cost + ,'FM999999D90')); -- CONT_SUM caveat here - if p_quote_data.caveat_cont_sum is not null then - print_one_line_caveats(p_quote_data.caveat_cont_sum, l_cost_totals_offset+2.8,plpdf.GetCurrentY,4); - end if; - end build_costs_page; + IF p_quote_data.caveat_cont_sum IS NOT NULL THEN + print_one_line_caveats(p_quote_data.caveat_cont_sum + ,l_cost_totals_offset + 2.8 + ,plpdf.getcurrenty + ,4); + END IF; + END build_costs_page; /* PROCEDURE build_caveats_page --This procedure builds the caveats page for the quotation, it writes data @@ -1073,58 +1552,104 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_indent - the left margin measurement. %param p_vertical_offset - the top margin measurement. */ - PROCEDURE build_caveats_page(p_quote_data in quote_data, p_font in varchar2, p_indent in number, p_vertical_offset in number,p_watermark_blob blob, p_logger_caveat_required in boolean) is - l_cell_margin number; - begin + PROCEDURE build_caveats_page(p_quote_data IN quote_data + ,p_font IN VARCHAR2 + ,p_indent IN NUMBER + ,p_vertical_offset IN NUMBER + ,p_watermark_blob BLOB + ,p_logger_caveat_required IN BOOLEAN) IS + l_cell_margin NUMBER; + BEGIN --Page 3 - plpdf.NewPage; + plpdf.newpage; --set watermark if it exists - if p_watermark_blob is not null then - plpdf.PutImage('test watermark',p_watermark_blob,50,50,200,200); - end if; + IF p_watermark_blob IS NOT NULL THEN + plpdf.putimage('test watermark' + ,p_watermark_blob + ,50 + ,50 + ,200 + ,200); + END IF; -- set margins - plpdf.SetLeftMargin(31.7); - plpdf.SetRightMargin(31.7); - plpdf.SetTopMargin(25.4); - plpdf.SetPrintFont(p_font,null,10); --set font to plain + plpdf.setleftmargin(31.7); + plpdf.setrightmargin(31.7); + plpdf.settopmargin(25.4); + plpdf.setprintfont(p_font + ,NULL + ,10); --set font to plain --house - plpdf.PrintText(p_indent,p_vertical_offset+10,'Meter Housing Details (if required):'); - plpdf.PrintText(p_indent,p_vertical_offset+18,'Length: '||p_quote_data.house_length||' mm'); - plpdf.PrintText(p_indent+40,p_vertical_offset+18,'Depth: '||p_quote_data.house_depth||' mm'); - plpdf.PrintText(p_indent+80,p_vertical_offset+18,'Height: '||p_quote_data.house_height||' mm'); + plpdf.printtext(p_indent + ,p_vertical_offset + 10 + ,'Meter Housing Details (if required):'); + plpdf.printtext(p_indent + ,p_vertical_offset + 18 + ,'Length: ' || p_quote_data.house_length || ' mm'); + plpdf.printtext(p_indent + 40 + ,p_vertical_offset + 18 + ,'Depth: ' || p_quote_data.house_depth || ' mm'); + plpdf.printtext(p_indent + 80 + ,p_vertical_offset + 18 + ,'Height: ' || p_quote_data.house_height || ' mm'); --plpdf.PrintText(p_indent,p_vertical_offset+26,'Minimum Ventilation: '||p_quote_data.house_ventilation/10||' sq. cm'); --base - plpdf.PrintText(p_indent,p_vertical_offset+34,'Meter Housing Base (if required):'); - plpdf.PrintText(p_indent,p_vertical_offset+42,'Length: '||p_quote_data.base_length||' mm'); - plpdf.PrintText(p_indent+40,p_vertical_offset+42,'Depth: '||p_quote_data.base_depth||' mm'); - plpdf.PrintText(p_indent+80,p_vertical_offset+42,'Height: '||p_quote_data.base_height||' mm'); + plpdf.printtext(p_indent + ,p_vertical_offset + 34 + ,'Meter Housing Base (if required):'); + plpdf.printtext(p_indent + ,p_vertical_offset + 42 + ,'Length: ' || p_quote_data.base_length || ' mm'); + plpdf.printtext(p_indent + 40 + ,p_vertical_offset + 42 + ,'Depth: ' || p_quote_data.base_depth || ' mm'); + plpdf.printtext(p_indent + 80 + ,p_vertical_offset + 42 + ,'Height: ' || p_quote_data.base_height || ' mm'); --plpdf.PrintText(p_indent,p_vertical_offset+58,'Minimum Ventilation: '||p_quote_data.outlet_termninal_size||' mm'); - plpdf.PrintText(p_indent,p_vertical_offset+58,'Special Features/Terms/Conditions:'); - plpdf.SetPrintFont(p_font,'B',10); --set bold + plpdf.printtext(p_indent + ,p_vertical_offset + 58 + ,'Special Features/Terms/Conditions:'); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold -- TERM_COND caveat here - if p_quote_data.caveat_term_cond is not null then - print_caveats(p_quote_data.caveat_term_cond, p_vertical_offset+62); - end if; - if p_logger_caveat_required then + IF p_quote_data.caveat_term_cond IS NOT NULL THEN + print_caveats(p_quote_data.caveat_term_cond + ,p_vertical_offset + 62); + END IF; + IF p_logger_caveat_required THEN --set up the screen so we can have our size 4 spacing - l_cell_margin:= plpdf.GetCellMargin; - plpdf.SetLeftMargin(33.7); - plpdf.SetCellMargin(-2); - plpdf.PrintFlowingText(4, 'This quote does not include the removal of the Datalogger. Please make the necessary arrangements with the Gas Transporter.'); + l_cell_margin := plpdf.getcellmargin; + plpdf.setleftmargin(33.7); + plpdf.setcellmargin(-2); + plpdf.printflowingtext(4 + ,'This quote does not include the removal of the Datalogger. Please make the necessary arrangements with the Gas Transporter.'); --revert back to the original screen settings - plpdf.SetCellMargin(l_cell_margin); - plpdf.SetLeftMargin(31.7); - end if; - + plpdf.setcellmargin(l_cell_margin); + plpdf.setleftmargin(31.7); + END IF; + --the caveats will be looped in so the positioning of the the following items will --need to be dynamic (see the quote costs code above for an example) - plpdf.SetPrintFont(p_font,null,10); --unset bold - plpdf.PrintText(p_indent,p_vertical_offset+230,'Liquidated Damages (sum per day)(excluding V.A.T):'); - plpdf.PrintText(130,p_vertical_offset+230,'£'||to_char(p_quote_data.liquid_damage_day,'FM999999D90')); - plpdf.PrintText(p_indent,p_vertical_offset+238,'Liquidated Damages (monetary cap)(excluding V.A.T):'); - plpdf.PrintText(130,p_vertical_offset+238,'£'||to_char(p_quote_data.liquid_damage_cap,'FM999999D90')); - - end build_caveats_page; + plpdf.setprintfont(p_font + ,NULL + ,10); --unset bold + plpdf.printtext(p_indent + ,p_vertical_offset + 230 + ,'Liquidated Damages (sum per day)(excluding V.A.T):'); + plpdf.printtext(130 + ,p_vertical_offset + 230 + ,'£' || TO_CHAR(p_quote_data.liquid_damage_day + ,'FM999999D90')); + plpdf.printtext(p_indent + ,p_vertical_offset + 238 + ,'Liquidated Damages (monetary cap)(excluding V.A.T):'); + plpdf.printtext(130 + ,p_vertical_offset + 238 + ,'£' || TO_CHAR(p_quote_data.liquid_damage_cap + ,'FM999999D90')); + + END build_caveats_page; /* PROCEDURE build_drawings_page --This procedure builds the drawings page for the quotation, it writes data @@ -1137,109 +1662,469 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_house_blob - the image of the house %param p_module_blob - the image of the module */ - PROCEDURE build_drawings_page(p_quote_data in quote_data, p_font in varchar2, p_indent in number, p_vertical_offset in number, p_base_blob blob, p_house_blob blob, p_module_blob blob,p_watermark_blob blob) is - l_img_props img_props; - begin + PROCEDURE build_drawings_page(p_quote_data IN quote_data + ,p_font IN VARCHAR2 + ,p_indent IN NUMBER + ,p_vertical_offset IN NUMBER + ,p_base_blob BLOB + ,p_house_blob BLOB + ,p_module_blob BLOB + ,p_watermark_blob BLOB) IS + l_img_props img_props; + BEGIN --Okay here come the pretty pictures, the technical spec for the module, house & base --this will be page 4 for the quotation - plpdf.NewPage; + plpdf.newpage; --set watermark if it exists - if p_watermark_blob is not null then - plpdf.PutImage('test watermark',p_watermark_blob,50,50,200,200); - end if; + IF p_watermark_blob IS NOT NULL THEN + plpdf.putimage('test watermark' + ,p_watermark_blob + ,50 + ,50 + ,200 + ,200); + END IF; -- set margins - plpdf.SetLeftMargin(31.7); - plpdf.SetRightMargin(31.7); - plpdf.SetTopMargin(25.4); - plpdf.SetPrintFont(p_font,'B',18); --set bold and 18pt - plpdf.PrintText(p_indent,p_vertical_offset,'Technical Specification for '||p_quote_data.enquiry_ref); - plpdf.SetPrintFont(p_font,'B',10); --set back to 10pt - plpdf.PrintText(p_indent,p_vertical_offset+6,'Re: '||rtrim(ltrim(p_quote_data.site_address(1)||', '||p_quote_data.site_address(2)||', '||p_quote_data.site_address(3)||', '||p_quote_data.site_address(4)||', '||p_quote_data.site_address(5)||', '||p_quote_data.site_address(6)||', '||p_quote_data.site_address(7),', '),', ')); --site address --Base Details + plpdf.setleftmargin(31.7); + plpdf.setrightmargin(31.7); + plpdf.settopmargin(25.4); + plpdf.setprintfont(p_font + ,'B' + ,18); --set bold and 18pt + plpdf.printtext(p_indent + ,p_vertical_offset + ,'Technical Specification for ' || + p_quote_data.enquiry_ref); + plpdf.setprintfont(p_font + ,'B' + ,10); --set back to 10pt + plpdf.printtext(p_indent + ,p_vertical_offset + 6 + ,'Re: ' || rtrim(ltrim(p_quote_data.site_address(1) || ', ' || + p_quote_data.site_address(2) || ', ' || + p_quote_data.site_address(3) || ', ' || + p_quote_data.site_address(4) || ', ' || + p_quote_data.site_address(5) || ', ' || + p_quote_data.site_address(6) || ', ' || + p_quote_data.site_address(7) + ,', ') + ,', ')); --site address --Base Details --Base Details - plpdf.SetPrintFont(p_font,'BU',12); --set bold,underline and 12pt - plpdf.PrintText(p_indent,p_vertical_offset+12,'Floor Area/Base Requirements'); - plpdf.SetPrintFont(p_font,null,10); --set back to 10pt plain - plpdf.SetCurrentXY(p_indent,p_vertical_offset+25); - plpdf.PrintCell(15,6,'Depth:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.base_dimensions(1),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim A:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.base_dimensions(2),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim B:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.base_dimensions(3),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim C:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.base_dimensions(4),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim D:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.base_dimensions(5),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim E:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.base_dimensions(6),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim F:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.base_dimensions(7),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim G:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.base_dimensions(8),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim H:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.base_dimensions(9),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim I:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.base_dimensions(10),1,1,'R',0); - if p_base_blob is null then - plpdf.PrintText(p_indent+50,p_vertical_offset+50,'No Base Diagram Available'); - else - l_img_props := scale_image_dimensions(100, 60, p_base_blob ); - plpdf.PutImage('base',p_base_blob,p_indent+50,p_vertical_offset+25,l_img_props.width,l_img_props.height); - end if; + plpdf.setprintfont(p_font + ,'BU' + ,12); --set bold,underline and 12pt + plpdf.printtext(p_indent + ,p_vertical_offset + 12 + ,'Floor Area/Base Requirements'); + plpdf.setprintfont(p_font + ,NULL + ,10); --set back to 10pt plain + plpdf.setcurrentxy(p_indent + ,p_vertical_offset + 25); + plpdf.printcell(15 + ,6 + ,'Depth:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.base_dimensions(1) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim A:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.base_dimensions(2) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim B:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.base_dimensions(3) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim C:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.base_dimensions(4) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim D:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.base_dimensions(5) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim E:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.base_dimensions(6) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim F:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.base_dimensions(7) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim G:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.base_dimensions(8) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim H:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.base_dimensions(9) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim I:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.base_dimensions(10) + ,1 + ,1 + ,'R' + ,0); + IF p_base_blob IS NULL THEN + plpdf.printtext(p_indent + 50 + ,p_vertical_offset + 50 + ,'No Base Diagram Available'); + ELSE + l_img_props := scale_image_dimensions(100 + ,60 + ,p_base_blob); + plpdf.putimage('base' + ,p_base_blob + ,p_indent + 50 + ,p_vertical_offset + 25 + ,l_img_props.width + ,l_img_props.height); + END IF; --House Details - plpdf.SetPrintFont(p_font,'BU',12); --set bold,underline and 12pt - plpdf.PrintText(p_indent,p_vertical_offset+100,'Housing / Work Area'); - plpdf.SetPrintFont(p_font,null,10); --set back to 10pt plain - plpdf.SetCurrentXY(p_indent,p_vertical_offset+108); - plpdf.PrintCell(15,6,'Length:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.house_dimensions(1),1,1,'R',0); - plpdf.PrintCell(15,6,'Width:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.house_dimensions(2),1,1,'R',0); - plpdf.PrintCell(15,6,'Height:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.house_dimensions(3),1,1,'R',0); - plpdf.PrintCell(15,6,'Weight:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.house_dimensions(4),1,1,'R',0); - if p_house_blob is null then - plpdf.PrintText(p_indent+50,p_vertical_offset+132,'No Housing Diagram Available'); - else - - l_img_props := scale_image_dimensions(100, 60, p_house_blob ); - plpdf.PutImage('house',p_house_blob,p_indent+50,p_vertical_offset+108,l_img_props.width,l_img_props.height); - end if; + plpdf.setprintfont(p_font + ,'BU' + ,12); --set bold,underline and 12pt + plpdf.printtext(p_indent + ,p_vertical_offset + 100 + ,'Housing / Work Area'); + plpdf.setprintfont(p_font + ,NULL + ,10); --set back to 10pt plain + plpdf.setcurrentxy(p_indent + ,p_vertical_offset + 108); + plpdf.printcell(15 + ,6 + ,'Length:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.house_dimensions(1) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Width:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.house_dimensions(2) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Height:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.house_dimensions(3) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Weight:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.house_dimensions(4) + ,1 + ,1 + ,'R' + ,0); + IF p_house_blob IS NULL THEN + plpdf.printtext(p_indent + 50 + ,p_vertical_offset + 132 + ,'No Housing Diagram Available'); + ELSE + + l_img_props := scale_image_dimensions(100 + ,60 + ,p_house_blob); + plpdf.putimage('house' + ,p_house_blob + ,p_indent + 50 + ,p_vertical_offset + 108 + ,l_img_props.width + ,l_img_props.height); + END IF; --Module details - plpdf.SetPrintFont(p_font,'BU',12); --set bold,underline and 12pt - plpdf.PrintText(p_indent,p_vertical_offset+168,'Module Dimensions'); - plpdf.SetPrintFont(p_font,null,10); --set back to 10pt plain - plpdf.SetCurrentXY(p_indent,p_vertical_offset+180); - plpdf.PrintCell(15,6,'Dim A:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.module_dimensions(1),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim B:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.module_dimensions(2),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim C:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.module_dimensions(3),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim D:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.module_dimensions(4),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim E:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.module_dimensions(5),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim H:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.module_dimensions(6),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim I:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.module_dimensions(7),1,1,'R',0); - plpdf.PrintCell(15,6,'Dim O:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.module_dimensions(8),1,1,'R',0); - plpdf.PrintCell(15,6,'Weight:',1,0,'L',0); - plpdf.PrintCell(15,6,p_quote_data.module_dimensions(9),1,1,'R',0); - if p_module_blob is null then - plpdf.PrintText(p_indent+50,p_vertical_offset+205,'No Module Diagram Available'); - else - l_img_props := scale_image_dimensions(100, 60, p_module_blob ); - plpdf.PutImage('module',p_module_blob,p_indent+50,p_vertical_offset+180,l_img_props.width,l_img_props.height); - end if; - plpdf.SetPrintFont(p_font,null,9); --set to 9pt - plpdf.PrintText(p_indent,p_vertical_offset+245,'Note: All weights are in kg and all dimensions in mm Module Ref: '||p_quote_data.module_reference); - plpdf.PrintText(p_indent,p_vertical_offset+260,'National Grid Metering, Abbotts Lane, Coventry, West Midlands, CV1 4AY Tel 02476 286000 Fax 02476 286022'); - - end build_drawings_page; + plpdf.setprintfont(p_font + ,'BU' + ,12); --set bold,underline and 12pt + plpdf.printtext(p_indent + ,p_vertical_offset + 168 + ,'Module Dimensions'); + plpdf.setprintfont(p_font + ,NULL + ,10); --set back to 10pt plain + plpdf.setcurrentxy(p_indent + ,p_vertical_offset + 180); + plpdf.printcell(15 + ,6 + ,'Dim A:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.module_dimensions(1) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim B:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.module_dimensions(2) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim C:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.module_dimensions(3) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim D:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.module_dimensions(4) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim E:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.module_dimensions(5) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim H:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.module_dimensions(6) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim I:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.module_dimensions(7) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Dim O:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.module_dimensions(8) + ,1 + ,1 + ,'R' + ,0); + plpdf.printcell(15 + ,6 + ,'Weight:' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(15 + ,6 + ,p_quote_data.module_dimensions(9) + ,1 + ,1 + ,'R' + ,0); + IF p_module_blob IS NULL THEN + plpdf.printtext(p_indent + 50 + ,p_vertical_offset + 205 + ,'No Module Diagram Available'); + ELSE + l_img_props := scale_image_dimensions(100 + ,60 + ,p_module_blob); + plpdf.putimage('module' + ,p_module_blob + ,p_indent + 50 + ,p_vertical_offset + 180 + ,l_img_props.width + ,l_img_props.height); + END IF; + plpdf.setprintfont(p_font + ,NULL + ,9); --set to 9pt + plpdf.printtext(p_indent + ,p_vertical_offset + 245 + ,'Note: All weights are in kg and all dimensions in mm Module Ref: ' || + p_quote_data.module_reference); + plpdf.printtext(p_indent + ,p_vertical_offset + 260 + ,'National Grid Metering, Abbotts Lane, Coventry, West Midlands, CV1 4AY Tel 02476 286000 Fax 02476 286022'); + + END build_drawings_page; /* PROCEDURE build_module_specs_page --This procedure builds the module specification page for the quotation, it writes data @@ -1249,115 +2134,479 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_indent - the left margin measurement. %param p_vertical_offset - the top margin measurement. */ - PROCEDURE build_module_specs_page(p_quote_data in quote_data, p_font in varchar2, p_indent in number, p_vertical_offset in number,p_watermark_blob blob) is - begin + PROCEDURE build_module_specs_page(p_quote_data IN quote_data + ,p_font IN VARCHAR2 + ,p_indent IN NUMBER + ,p_vertical_offset IN NUMBER + ,p_watermark_blob BLOB) IS + BEGIN --this will be page 5 (part of the technical spec sheet) for the quotation - plpdf.NewPage; + plpdf.newpage; --set watermark if it exists - if p_watermark_blob is not null then - plpdf.PutImage('test watermark',p_watermark_blob,50,50,200,200); - end if; + IF p_watermark_blob IS NOT NULL THEN + plpdf.putimage('test watermark' + ,p_watermark_blob + ,50 + ,50 + ,200 + ,200); + END IF; -- set margins - plpdf.SetLeftMargin(31.7); - plpdf.SetRightMargin(31.7); - plpdf.SetTopMargin(25.4); - plpdf.SetPrintFont(p_font,'B',18); --set bold and 18pt - plpdf.PrintText(p_indent,p_vertical_offset,'Technical Specification for '||p_quote_data.enquiry_ref); - plpdf.SetPrintFont(p_font,'B',10); --set back to 10pt - plpdf.PrintText(p_indent,p_vertical_offset+6,'Re: '||rtrim(ltrim(p_quote_data.site_address(1)||', '||p_quote_data.site_address(2)||', '||p_quote_data.site_address(3)||', '||p_quote_data.site_address(4)||', '||p_quote_data.site_address(5)||', '||p_quote_data.site_address(6)||', '||p_quote_data.site_address(7),', '),', ')); --site address - plpdf.SetPrintFont(p_font,null,10); --set back to plain - plpdf.PrintText(p_indent,p_vertical_offset+14,'The supply point must be of a suitable size and capacity to provide the specified Lowest'); - plpdf.PrintText(p_indent,p_vertical_offset+18,'Operating Pressure(LOP-from table1) at the Emergency Control Valve(ECV) outlet'); - plpdf.PrintText(p_indent,p_vertical_offset+22,'under the requested Q Max load as detailed below in table 2'); + plpdf.setleftmargin(31.7); + plpdf.setrightmargin(31.7); + plpdf.settopmargin(25.4); + plpdf.setprintfont(p_font + ,'B' + ,18); --set bold and 18pt + plpdf.printtext(p_indent + ,p_vertical_offset + ,'Technical Specification for ' || + p_quote_data.enquiry_ref); + plpdf.setprintfont(p_font + ,'B' + ,10); --set back to 10pt + plpdf.printtext(p_indent + ,p_vertical_offset + 6 + ,'Re: ' || rtrim(ltrim(p_quote_data.site_address(1) || ', ' || + p_quote_data.site_address(2) || ', ' || + p_quote_data.site_address(3) || ', ' || + p_quote_data.site_address(4) || ', ' || + p_quote_data.site_address(5) || ', ' || + p_quote_data.site_address(6) || ', ' || + p_quote_data.site_address(7) + ,', ') + ,', ')); --site address + plpdf.setprintfont(p_font + ,NULL + ,10); --set back to plain + plpdf.printtext(p_indent + ,p_vertical_offset + 14 + ,'The supply point must be of a suitable size and capacity to provide the specified Lowest'); + plpdf.printtext(p_indent + ,p_vertical_offset + 18 + ,'Operating Pressure(LOP-from table1) at the Emergency Control Valve(ECV) outlet'); + plpdf.printtext(p_indent + ,p_vertical_offset + 22 + ,'under the requested Q Max load as detailed below in table 2'); --table 1 - plpdf.SetCurrentXY(p_indent,p_vertical_offset+30); - plpdf.SetPrintFont(p_font,'B',10); --set to bold - plpdf.PrintCell(90,6,'Table 1',1,0,'L',0); - plpdf.PrintCell(30,6,'ECV Outlet (u)',1,0,'C',0); - plpdf.PrintCell(40,6,'Consumer Outlet (c)',1,1,'C',0); - plpdf.SetPrintFont(p_font,null,10); --set back to plain - if p_quote_data.svcpt_code = 'LP' then - plpdf.PrintCell(90,6,'Design Minimum Pressure (DMP)',1,0,'L',0); - plpdf.PrintCell(30,6,'19 mbar',1,0,'C',0); - plpdf.PrintCell(40,6,'15 mbar',1,1,'C',0); - plpdf.PrintCell(90,6,'Lowest Operating Pressure (LOP)',1,0,'L',0); - plpdf.PrintCell(30,6,'25 mbar',1,0,'C',0); - plpdf.PrintCell(40,6,'21 mbar',1,1,'C',0); - plpdf.PrintCell(90,6,'Pressure Tier',1,0,'L',0); - plpdf.PrintCell(30,6,'75 mbar',1,0,'C',0); - plpdf.PrintCell(40,6,'21 mbar',1,1,'C',0); - else --for MP - plpdf.PrintCell(90,6,'Design Minimum Pressure (DMP)',1,0,'L',0); - plpdf.PrintCell(30,6,'270 mbar',1,0,'C',0); - plpdf.PrintCell(40,6,'21 mbar',1,1,'C',0); - plpdf.PrintCell(90,6,'Lowest Operating Pressure (LOP)',1,0,'L',0); - plpdf.PrintCell(30,6,'270 mbar',1,0,'C',0); - plpdf.PrintCell(40,6,'21 mbar',1,1,'C',0); - plpdf.PrintCell(90,6,'Pressure Tier',1,0,'L',0); - plpdf.PrintCell(30,6,'2000 mbar',1,0,'C',0); - plpdf.PrintCell(40,6,'21 mbar',1,1,'C',0); - end if; + plpdf.setcurrentxy(p_indent + ,p_vertical_offset + 30); + plpdf.setprintfont(p_font + ,'B' + ,10); --set to bold + plpdf.printcell(90 + ,6 + ,'Table 1' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(30 + ,6 + ,'ECV Outlet (u)' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(40 + ,6 + ,'Consumer Outlet (c)' + ,1 + ,1 + ,'C' + ,0); + plpdf.setprintfont(p_font + ,NULL + ,10); --set back to plain + IF p_quote_data.svcpt_code = 'LP' THEN + plpdf.printcell(90 + ,6 + ,'Design Minimum Pressure (DMP)' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(30 + ,6 + ,'19 mbar' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(40 + ,6 + ,'15 mbar' + ,1 + ,1 + ,'C' + ,0); + plpdf.printcell(90 + ,6 + ,'Lowest Operating Pressure (LOP)' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(30 + ,6 + ,'25 mbar' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(40 + ,6 + ,'21 mbar' + ,1 + ,1 + ,'C' + ,0); + plpdf.printcell(90 + ,6 + ,'Pressure Tier' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(30 + ,6 + ,'75 mbar' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(40 + ,6 + ,'21 mbar' + ,1 + ,1 + ,'C' + ,0); + ELSE + --for MP + plpdf.printcell(90 + ,6 + ,'Design Minimum Pressure (DMP)' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(30 + ,6 + ,'270 mbar' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(40 + ,6 + ,'21 mbar' + ,1 + ,1 + ,'C' + ,0); + plpdf.printcell(90 + ,6 + ,'Lowest Operating Pressure (LOP)' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(30 + ,6 + ,'270 mbar' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(40 + ,6 + ,'21 mbar' + ,1 + ,1 + ,'C' + ,0); + plpdf.printcell(90 + ,6 + ,'Pressure Tier' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(30 + ,6 + ,'2000 mbar' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(40 + ,6 + ,'21 mbar' + ,1 + ,1 + ,'C' + ,0); + END IF; --table 2 - plpdf.SetCurrentXY(p_indent,p_vertical_offset+60); - plpdf.SetPrintFont(p_font,'B',10); --set to bold - plpdf.PrintCell(90,6,'Table 2',1,0,'L',0); - plpdf.PrintCell(70,6,'Meter Module Design',1,1,'C',0); - plpdf.SetPrintFont(p_font,null,10); --set back to plain - plpdf.PrintCell(90,6,'Requested Q Max (kw/h)',1,0,'L',0); - plpdf.PrintCell(70,6,p_quote_data.requested_qmax,1,1,'C',0); - plpdf.PrintCell(90,6,'Q Max of the meter module (kw/h)',1,0,'L',0); - plpdf.PrintCell(70,6,p_quote_data.module_qmax,1,1,'C',0); - plpdf.PrintCell(90,6,'Q Min of the meter module (kw/h)',1,0,'L',0); - plpdf.PrintCell(70,6,p_quote_data.module_qmin,1,1,'C',0); + plpdf.setcurrentxy(p_indent + ,p_vertical_offset + 60); + plpdf.setprintfont(p_font + ,'B' + ,10); --set to bold + plpdf.printcell(90 + ,6 + ,'Table 2' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(70 + ,6 + ,'Meter Module Design' + ,1 + ,1 + ,'C' + ,0); + plpdf.setprintfont(p_font + ,NULL + ,10); --set back to plain + plpdf.printcell(90 + ,6 + ,'Requested Q Max (kw/h)' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(70 + ,6 + ,p_quote_data.requested_qmax + ,1 + ,1 + ,'C' + ,0); + plpdf.printcell(90 + ,6 + ,'Q Max of the meter module (kw/h)' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(70 + ,6 + ,p_quote_data.module_qmax + ,1 + ,1 + ,'C' + ,0); + plpdf.printcell(90 + ,6 + ,'Q Min of the meter module (kw/h)' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(70 + ,6 + ,p_quote_data.module_qmin + ,1 + ,1 + ,'C' + ,0); --table 3 - plpdf.SetCurrentXY(p_indent,p_vertical_offset+90); - plpdf.SetPrintFont(p_font,'B',10); --set to bold - plpdf.PrintCell(90,6,'Table 3',1,0,'L',0); - plpdf.PrintCell(70,6,'Module Design Parameters',1,1,'C',0); - plpdf.SetPrintFont(p_font,null,10); --set back to plain - plpdf.PrintMultilineCell(60,6,'Note: Inlet connection size and location details must be checked against supply point details supplied by GT to ensure compatibility ',1,'L',0); + plpdf.setcurrentxy(p_indent + ,p_vertical_offset + 90); + plpdf.setprintfont(p_font + ,'B' + ,10); --set to bold + plpdf.printcell(90 + ,6 + ,'Table 3' + ,1 + ,0 + ,'L' + ,0); + plpdf.printcell(70 + ,6 + ,'Module Design Parameters' + ,1 + ,1 + ,'C' + ,0); + plpdf.setprintfont(p_font + ,NULL + ,10); --set back to plain + plpdf.printmultilinecell(60 + ,6 + ,'Note: Inlet connection size and location details must be checked against supply point details supplied by GT to ensure compatibility ' + ,1 + ,'L' + ,0); --Multi line cell thing is a bit annoying the printcell will not wrap to --the edge of the multi-line cell so we have to set the cursor for the --remaining parts of the table, have found a fix for this will do if we --have any time - plpdf.SetCurrentXY(91.7,p_vertical_offset+96); - plpdf.PrintCell(30,6,'',1,0,'C',0); - plpdf.PrintCell(35,6,'Inlet',1,0,'C',0); - plpdf.PrintCell(35,6,'Outlet',1,1,'C',0); - plpdf.SetCurrentX(91.7); - plpdf.PrintCell(30,6,'Height',1,0,'C',0); - plpdf.PrintCell(35,6,p_quote_data.module_inlet_height||'mm',1,0,'C',0); - plpdf.PrintCell(35,6,p_quote_data.module_outlet_height||'mm',1,1,'C',0); - plpdf.SetCurrentX(91.7); - plpdf.PrintCell(30,6,'Size',1,0,'C',0); - plpdf.PrintCell(35,6,p_quote_data.module_inlet_size||'mm',1,0,'C',0); - plpdf.PrintCell(35,6,p_quote_data.module_outlet_size||'mm',1,1,'C',0); - plpdf.SetCurrentX(91.7); - plpdf.PrintCell(30,6,'Type',1,0,'C',0); - plpdf.PrintCell(35,6,p_quote_data.module_inlet_type,1,0,'C',0); - plpdf.PrintCell(35,6,p_quote_data.module_outlet_type,1,1,'C',0); - plpdf.SetCurrentX(91.7); - plpdf.PrintCell(30,6,'Orientation',1,0,'C',0); - plpdf.PrintCell(35,6,p_quote_data.module_inlet_orientation,1,0,'C',0); - plpdf.PrintCell(35,6,p_quote_data.module_outlet_orientation,1,1,'C',0); - plpdf.PrintText(p_indent,p_vertical_offset+134,'The meter module offered is a single stream supply with only a nominal maintenance'); - plpdf.PrintText(p_indent,p_vertical_offset+138,'bypass facility. The bypass connections are for use during maintenance, and are only'); - plpdf.PrintText(p_indent,p_vertical_offset+142,'sized to maintain gas pressure downstream under no load conditions. Therefore'); - plpdf.PrintText(p_indent,p_vertical_offset+146,'during maintenance it will be necessary to disrupt supplies.'); + plpdf.setcurrentxy(91.7 + ,p_vertical_offset + 96); + plpdf.printcell(30 + ,6 + ,'' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(35 + ,6 + ,'Inlet' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(35 + ,6 + ,'Outlet' + ,1 + ,1 + ,'C' + ,0); + plpdf.setcurrentx(91.7); + plpdf.printcell(30 + ,6 + ,'Height' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(35 + ,6 + ,p_quote_data.module_inlet_height || 'mm' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(35 + ,6 + ,p_quote_data.module_outlet_height || 'mm' + ,1 + ,1 + ,'C' + ,0); + plpdf.setcurrentx(91.7); + plpdf.printcell(30 + ,6 + ,'Size' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(35 + ,6 + ,p_quote_data.module_inlet_size || 'mm' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(35 + ,6 + ,p_quote_data.module_outlet_size || 'mm' + ,1 + ,1 + ,'C' + ,0); + plpdf.setcurrentx(91.7); + plpdf.printcell(30 + ,6 + ,'Type' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(35 + ,6 + ,p_quote_data.module_inlet_type + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(35 + ,6 + ,p_quote_data.module_outlet_type + ,1 + ,1 + ,'C' + ,0); + plpdf.setcurrentx(91.7); + plpdf.printcell(30 + ,6 + ,'Orientation' + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(35 + ,6 + ,p_quote_data.module_inlet_orientation + ,1 + ,0 + ,'C' + ,0); + plpdf.printcell(35 + ,6 + ,p_quote_data.module_outlet_orientation + ,1 + ,1 + ,'C' + ,0); + plpdf.printtext(p_indent + ,p_vertical_offset + 134 + ,'The meter module offered is a single stream supply with only a nominal maintenance'); + plpdf.printtext(p_indent + ,p_vertical_offset + 138 + ,'bypass facility. The bypass connections are for use during maintenance, and are only'); + plpdf.printtext(p_indent + ,p_vertical_offset + 142 + ,'sized to maintain gas pressure downstream under no load conditions. Therefore'); + plpdf.printtext(p_indent + ,p_vertical_offset + 146 + ,'during maintenance it will be necessary to disrupt supplies.'); --next para - plpdf.PrintText(p_indent,p_vertical_offset+154,'Electric Connections to gas meters are subject to the assesment of the hazardous'); - plpdf.PrintText(p_indent,p_vertical_offset+158,'area around the meter, this is largely affected by the ventilation of the housing. Should'); - plpdf.PrintText(p_indent,p_vertical_offset+162,'the ventilation be found to be inadequate, the connection will not be made and the'); - plpdf.PrintText(p_indent,p_vertical_offset+166,'requirements to allow the connection reported to you. The quotation does not include'); - plpdf.PrintText(p_indent,p_vertical_offset+170,'the provision of a separate instrumentation cabinet.'); - plpdf.SetPrintFont(p_font,null,7); --set to 7 pt - plpdf.PrintText(p_indent,p_vertical_offset+178,'Definitions'); - plpdf.PrintText(p_indent,p_vertical_offset+182,'DMP - The minimum pressure that may occur at the point of reference at the time of system design flow rate under extreme gas supply conditions'); - plpdf.PrintText(p_indent,p_vertical_offset+186,'LOP - The lowest pressure that may occur under normal operating conditions'); - plpdf.PrintText(p_indent,p_vertical_offset+190,'Conversion calculations are based on an average CV of 38.4 MJ/m3'); - plpdf.SetPrintFont(p_font,null,9); --set to 9 pt - plpdf.PrintText(p_indent,p_vertical_offset+260,'National Grid Metering, Abbotts Lane, Coventry, West Midlands, CV1 4AY Tel 02476 286000 Fax 02476 286022'); - end build_module_specs_page; + plpdf.printtext(p_indent + ,p_vertical_offset + 154 + ,'Electric Connections to gas meters are subject to the assesment of the hazardous'); + plpdf.printtext(p_indent + ,p_vertical_offset + 158 + ,'area around the meter, this is largely affected by the ventilation of the housing. Should'); + plpdf.printtext(p_indent + ,p_vertical_offset + 162 + ,'the ventilation be found to be inadequate, the connection will not be made and the'); + plpdf.printtext(p_indent + ,p_vertical_offset + 166 + ,'requirements to allow the connection reported to you. The quotation does not include'); + plpdf.printtext(p_indent + ,p_vertical_offset + 170 + ,'the provision of a separate instrumentation cabinet.'); + plpdf.setprintfont(p_font + ,NULL + ,7); --set to 7 pt + plpdf.printtext(p_indent + ,p_vertical_offset + 178 + ,'Definitions'); + plpdf.printtext(p_indent + ,p_vertical_offset + 182 + ,'DMP - The minimum pressure that may occur at the point of reference at the time of system design flow rate under extreme gas supply conditions'); + plpdf.printtext(p_indent + ,p_vertical_offset + 186 + ,'LOP - The lowest pressure that may occur under normal operating conditions'); + plpdf.printtext(p_indent + ,p_vertical_offset + 190 + ,'Conversion calculations are based on an average CV of 38.4 MJ/m3'); + plpdf.setprintfont(p_font + ,NULL + ,9); --set to 9 pt + plpdf.printtext(p_indent + ,p_vertical_offset + 260 + ,'National Grid Metering, Abbotts Lane, Coventry, West Midlands, CV1 4AY Tel 02476 286000 Fax 02476 286022'); + END build_module_specs_page; /* PROCEDURE build_acceptance_page --This procedure builds the acceptance form page for the quotation, it writes data @@ -1368,86 +2617,219 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_vertical_offset - the top margin measurement. %param p_logo_blob - the logo(image) to display at the top of the page */ - PROCEDURE build_acceptance_page(p_quote_data in quote_data, p_font in varchar2, p_indent in number, p_vertical_offset in number,p_logo_blob blob,p_watermark_blob blob) is - l_vertical_offset number := 0; - l_ybefore number := 0; - - begin + PROCEDURE build_acceptance_page(p_quote_data IN quote_data + ,p_font IN VARCHAR2 + ,p_indent IN NUMBER + ,p_vertical_offset IN NUMBER + ,p_logo_blob BLOB + ,p_watermark_blob BLOB) IS + l_vertical_offset NUMBER := 0; + l_ybefore NUMBER := 0; + + BEGIN ---weeeeee last page - plpdf.NewPage; + plpdf.newpage; --set watermark if it exists - if p_watermark_blob is not null then - plpdf.PutImage('test watermark',p_watermark_blob,50,50,200,200); - end if; + IF p_watermark_blob IS NOT NULL THEN + plpdf.putimage('test watermark' + ,p_watermark_blob + ,50 + ,50 + ,200 + ,200); + END IF; -- set margins - plpdf.SetLeftMargin(31.7); - plpdf.SetRightMargin(31.7); - plpdf.SetTopMargin(25.4); + plpdf.setleftmargin(31.7); + plpdf.setrightmargin(31.7); + plpdf.settopmargin(25.4); -- Set header stuff up - plpdf.PutImage('ngmlogo',p_logo_blob,p_indent,10,52,18); - plpdf.SetPrintFont(p_font,null,7); - plpdf.PrintText(140,10,'4 Abbotts Lane '); - plpdf.PrintText(140,13,'Coventry'); - plpdf.PrintText(140,16,'CV1 4AY'); - plpdf.PrintText(170,10,'T +44 (0) 24 7628 6000'); - plpdf.PrintText(170,13,'F +44 (0) 24 7628 6022'); - plpdf.PrintText(170,16,'www.nationalgrid.com'); + plpdf.putimage('ngmlogo' + ,p_logo_blob + ,p_indent + ,10 + ,52 + ,18); + plpdf.setprintfont(p_font + ,NULL + ,7); + plpdf.printtext(140 + ,10 + ,'4 Abbotts Lane '); + plpdf.printtext(140 + ,13 + ,'Coventry'); + plpdf.printtext(140 + ,16 + ,'CV1 4AY'); + plpdf.printtext(170 + ,10 + ,'T +44 (0) 24 7628 6000'); + plpdf.printtext(170 + ,13 + ,'F +44 (0) 24 7628 6022'); + plpdf.printtext(170 + ,16 + ,'www.nationalgrid.com'); -- And Footer stuff - plpdf.PrintText(50,280,'National Grid Metering is the trading name for National Grid Metering Ltd.'); - plpdf.PrintText(50,283,'Registered Office: 1-3 Strand, London, WCZN 5EH. Registered in England and Wales, No. 3705992'); - plpdf.SetPrintFont(p_font,null,10); -- big text please - plpdf.PrintText(p_indent,p_vertical_offset+10,'National Grid Metering''s Ref: '|| to_char(p_quote_data.enquiry_ref)); - plpdf.PrintText(p_indent,p_vertical_offset+14,'Customer Reference: '|| p_quote_data.transaction_ref); - plpdf.PrintText(p_indent,p_vertical_offset+18,'MPRN: '|| to_char(p_quote_data.mprn)); - plpdf.PrintText(p_indent,p_vertical_offset+26,'F.A.O'); - plpdf.PrintText(p_indent,p_vertical_offset+30,'I&C Work Planning Team'); - plpdf.PrintText(p_indent,p_vertical_offset+34,'National Grid Metering Ltd'); - plpdf.PrintText(p_indent,p_vertical_offset+38,'Abbott''s Lane'); - plpdf.PrintText(p_indent,p_vertical_offset+42,'Coventry'); - plpdf.PrintText(p_indent,p_vertical_offset+46,'CV1 4AY'); - plpdf.SetPrintFont(p_font,'B',10); --set bold - plpdf.PrintText(p_indent,p_vertical_offset+54,'Re: '||rtrim(ltrim(p_quote_data.site_address(1)||', '||p_quote_data.site_address(2)||', '||p_quote_data.site_address(3)||', '||p_quote_data.site_address(4)||', '||p_quote_data.site_address(5)||', '||p_quote_data.site_address(6)||', '||p_quote_data.site_address(7),', '),', ')); --site address - plpdf.SetPrintFont(p_font,null,10); --unset bold - plpdf.PrintText(p_indent,p_vertical_offset+62,'Contract sum (excluding V.A.T): '); - plpdf.SetPrintFont(p_font,'B',10); --set bold - plpdf.PrintText(85,p_vertical_offset+62,'£'||to_char(p_quote_data.total_cost,'FM999999D90')); - plpdf.SetCurrentY(66); - l_ybefore := plpdf.GetCurrentY; + plpdf.printtext(50 + ,280 + ,'National Grid Metering is the trading name for National Grid Metering Ltd.'); + plpdf.printtext(50 + ,283 + ,'Registered Office: 1-3 Strand, London, WCZN 5EH. Registered in England and Wales, No. 3705992'); + plpdf.setprintfont(p_font + ,NULL + ,10); -- big text please + plpdf.printtext(p_indent + ,p_vertical_offset + 10 + ,'Online Quotation Reference: ' || + TO_CHAR(p_quote_data.enquiry_ref)); + plpdf.printtext(p_indent + ,p_vertical_offset + 14 + ,'Customer Reference: ' || p_quote_data.transaction_ref); + plpdf.printtext(p_indent + ,p_vertical_offset + 18 + ,'MPRN: ' || TO_CHAR(p_quote_data.mprn)); + plpdf.printtext(p_indent + ,p_vertical_offset + 26 + ,'F.A.O'); + plpdf.printtext(p_indent + ,p_vertical_offset + 30 + ,'I&C Work Planning Team'); + plpdf.printtext(p_indent + ,p_vertical_offset + 34 + ,'National Grid Metering Ltd'); + plpdf.printtext(p_indent + ,p_vertical_offset + 38 + ,'Abbott''s Lane'); + plpdf.printtext(p_indent + ,p_vertical_offset + 42 + ,'Coventry'); + plpdf.printtext(p_indent + ,p_vertical_offset + 46 + ,'CV1 4AY'); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold + plpdf.printtext(p_indent + ,p_vertical_offset + 54 + ,'Re: ' || rtrim(ltrim(p_quote_data.site_address(1) || ', ' || + p_quote_data.site_address(2) || ', ' || + p_quote_data.site_address(3) || ', ' || + p_quote_data.site_address(4) || ', ' || + p_quote_data.site_address(5) || ', ' || + p_quote_data.site_address(6) || ', ' || + p_quote_data.site_address(7) + ,', ') + ,', ')); --site address + plpdf.setprintfont(p_font + ,NULL + ,10); --unset bold + plpdf.printtext(p_indent + ,p_vertical_offset + 62 + ,'Contract sum (excluding V.A.T): '); + plpdf.setprintfont(p_font + ,'B' + ,10); --set bold + plpdf.printtext(85 + ,p_vertical_offset + 62 + ,'£' || TO_CHAR(p_quote_data.total_cost + ,'FM999999D90')); + plpdf.setcurrenty(66); + l_ybefore := plpdf.getcurrenty; -- CONT_SUM_QA caveat here - if p_quote_data.caveat_cont_sum_qa is not null then + IF p_quote_data.caveat_cont_sum_qa IS NOT NULL THEN --print_caveats(p_quote_data.caveat_cont_sum_qa, p_vertical_offset+63,4,1); - print_one_line_caveats(p_quote_data.caveat_cont_sum_qa, p_vertical_offset+59,plpdf.GetCurrentY+40,4); - end if; - l_vertical_offset := l_vertical_offset+(plpdf.GetCurrentY-l_ybefore); - plpdf.SetPrintFont(p_font,null,10); --unset bold - plpdf.PrintText(p_indent,l_vertical_offset+74,'* I confirm on behalf of my Company that I accept the above referenced quotation for the conduct'); - plpdf.PrintText(p_indent,l_vertical_offset+78,'of works as detailed therein, and here by certify on behalf of my Company that no additional'); - plpdf.PrintText(p_indent,l_vertical_offset+82,'terms and conditions (other than those set out in the quotation) are required.'); - plpdf.PrintText(p_indent,l_vertical_offset+90,'OR'); - plpdf.PrintText(p_indent,l_vertical_offset+98,'* I confirm on behalf of my Company that the above referenced quotation for the conduct or works'); - plpdf.PrintText(p_indent,l_vertical_offset+102,'as detailed therein is acceptable to my Company provided that (in addition to the conditions set'); - plpdf.PrintText(p_indent,l_vertical_offset+106,'out in the quotation [if any]) the General Conditions of Contract for Transactional Meter Works'); - plpdf.PrintText(p_indent,l_vertical_offset+110,'Not Exceeding 7 Bar in respect of the works are modified by the incorporation of the terms and'); - plpdf.PrintText(p_indent,l_vertical_offset+114,'conditions annexed hereto.'); - plpdf.PrintText(p_indent,l_vertical_offset+122,'(* Delete as appropriate)'); - plpdf.PrintText(p_indent,l_vertical_offset+130,'Save as set out above, I confirm that my Company agrees to be bound in connection with the'); - plpdf.PrintText(p_indent,l_vertical_offset+134,'works by the General Conditions of Contract for Transactional Meter Works Not'); - plpdf.PrintText(p_indent,l_vertical_offset+138,'Exceeding 7 Bar (as ammended by the quotation).'); - plpdf.PrintText(p_indent,l_vertical_offset+146,'Commencement'); - plpdf.PrintText(p_indent,l_vertical_offset+154,'Permission to organise directly with site contact'); - plpdf.PrintText(p_indent+120,l_vertical_offset+154,'Yes / No'); - plpdf.PrintText(p_indent,l_vertical_offset+162,'Earliest date site ready for work to commence'); - plpdf.PrintText(p_indent+120,l_vertical_offset+162,'___/___/___'); - plpdf.PrintText(p_indent,l_vertical_offset+170,'Anticipated date gas required on site'); - plpdf.PrintText(p_indent+120,l_vertical_offset+170,'___/___/___'); - plpdf.PrintText(p_indent,l_vertical_offset+178,'Signed on behalf of the Company'); - plpdf.PrintText(p_indent,l_vertical_offset+186,'Name:________________________________'); - plpdf.PrintText(p_indent+85,l_vertical_offset+186,'Position:____________________________'); - plpdf.PrintText(p_indent,l_vertical_offset+194,'Company:_____________________________'); - plpdf.PrintText(p_indent+85,l_vertical_offset+194,'Date:_______________________________'); - plpdf.PrintText(p_indent,l_vertical_offset+202,'Signature:_____________________________________________________________________'); - - end build_acceptance_page; + print_one_line_caveats(p_quote_data.caveat_cont_sum_qa + ,p_vertical_offset + 59 + ,plpdf.getcurrenty + 40 + ,4); + END IF; + l_vertical_offset := l_vertical_offset + + (plpdf.getcurrenty - l_ybefore); + plpdf.setprintfont(p_font + ,NULL + ,10); --unset bold + plpdf.printtext(p_indent + ,l_vertical_offset + 74 + ,'* I confirm on behalf of my Company that I accept the above referenced quotation for the conduct'); + plpdf.printtext(p_indent + ,l_vertical_offset + 78 + ,'of works as detailed therein, and here by certify on behalf of my Company that no additional'); + plpdf.printtext(p_indent + ,l_vertical_offset + 82 + ,'terms and conditions (other than those set out in the quotation) are required.'); + plpdf.printtext(p_indent + ,l_vertical_offset + 90 + ,'OR'); + plpdf.printtext(p_indent + ,l_vertical_offset + 98 + ,'* I confirm on behalf of my Company that the above referenced quotation for the conduct or works'); + plpdf.printtext(p_indent + ,l_vertical_offset + 102 + ,'as detailed therein is acceptable to my Company provided that (in addition to the conditions set'); + plpdf.printtext(p_indent + ,l_vertical_offset + 106 + ,'out in the quotation [if any]) the General Conditions of Contract for Transactional Meter Works'); + plpdf.printtext(p_indent + ,l_vertical_offset + 110 + ,'Not Exceeding 7 Bar in respect of the works are modified by the incorporation of the terms and'); + plpdf.printtext(p_indent + ,l_vertical_offset + 114 + ,'conditions annexed hereto.'); + plpdf.printtext(p_indent + ,l_vertical_offset + 122 + ,'(* Delete as appropriate)'); + plpdf.printtext(p_indent + ,l_vertical_offset + 130 + ,'Save as set out above, I confirm that my Company agrees to be bound in connection with the'); + plpdf.printtext(p_indent + ,l_vertical_offset + 134 + ,'works by the General Conditions of Contract for Transactional Meter Works Not'); + plpdf.printtext(p_indent + ,l_vertical_offset + 138 + ,'Exceeding 7 Bar (as ammended by the quotation).'); + plpdf.printtext(p_indent + ,l_vertical_offset + 146 + ,'Commencement'); + plpdf.printtext(p_indent + ,l_vertical_offset + 154 + ,'Permission to organise directly with site contact'); + plpdf.printtext(p_indent + 120 + ,l_vertical_offset + 154 + ,'Yes / No'); + plpdf.printtext(p_indent + ,l_vertical_offset + 162 + ,'Earliest date site ready for work to commence'); + plpdf.printtext(p_indent + 120 + ,l_vertical_offset + 162 + ,'___/___/___'); + plpdf.printtext(p_indent + ,l_vertical_offset + 170 + ,'Anticipated date gas required on site'); + plpdf.printtext(p_indent + 120 + ,l_vertical_offset + 170 + ,'___/___/___'); + plpdf.printtext(p_indent + ,l_vertical_offset + 178 + ,'Signed on behalf of the Company'); + plpdf.printtext(p_indent + ,l_vertical_offset + 186 + ,'Name:________________________________'); + plpdf.printtext(p_indent + 85 + ,l_vertical_offset + 186 + ,'Position:____________________________'); + plpdf.printtext(p_indent + ,l_vertical_offset + 194 + ,'Company:_____________________________'); + plpdf.printtext(p_indent + 85 + ,l_vertical_offset + 194 + ,'Date:_______________________________'); + plpdf.printtext(p_indent + ,l_vertical_offset + 202 + ,'Signature:_____________________________________________________________________'); + + END build_acceptance_page; /* FUNCTION generate_detailed_quote_pdf --The generate_detailed_quote_pdf builds the pdf document for the quotation from @@ -1455,36 +2837,39 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_quote_data - the data to build into the quote. %return - l_pdf_id the id of the pdf file we have created */ - FUNCTION generate_detailed_quote_pdf(p_quote_data in quote_data,p_quote_id in number) RETURN VARCHAR2 is - l_blob blob; - l_enty_code varchar2(80); --the type of enquiry - l_logo_blob blob; - l_signature_blob blob; - l_watermark_blob blob; - l_success boolean; --holds whether the quote was saved in the docuemnts tables or not - l_base_blob blob; --the base drawing - l_house_blob blob; --the house drawing - l_module_blob blob; --the module drawing - l_pdf_name varchar2(90); -- the id of the quote we generate - l_indent number := 31.7; - l_vertical_offset number := 30; - l_font varchar2(40) := 'Arial'; --arial not daz - l_quote_row quotes%ROWTYPE; - l_enqu_row enquiries%ROWTYPE; - CURSOR c_get_logo(cp_logo varchar2) IS + FUNCTION generate_detailed_quote_pdf(p_quote_data IN quote_data + ,p_quote_id IN NUMBER) + RETURN VARCHAR2 IS + l_blob BLOB; + l_enty_code VARCHAR2(80); --the type of enquiry + l_logo_blob BLOB; + l_signature_blob BLOB; + l_watermark_blob BLOB; + l_success BOOLEAN; --holds whether the quote was saved in the docuemnts tables or not + l_base_blob BLOB; --the base drawing + l_house_blob BLOB; --the house drawing + l_module_blob BLOB; --the module drawing + l_pdf_name VARCHAR2(90); -- the id of the quote we generate + l_indent NUMBER := 31.7; + l_vertical_offset NUMBER := 30; + l_font VARCHAR2(40) := 'Arial'; --arial not daz + l_quote_row quotes%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 + 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 + 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 + FROM wwv_flow_files + WHERE filename = cp_watermark + AND flow_id = apex_application.g_flow_id; + + BEGIN IF NOT c_get_logo%ISOPEN THEN OPEN c_get_logo('quote_logo.jpg'); END IF; @@ -1497,58 +2882,115 @@ PROCEDURE pl(p_in IN VARCHAR2 FETCH c_get_signature INTO l_signature_blob; CLOSE c_get_signature; - IF NOT c_get_watermark%ISOPEN THEN + IF NOT c_get_watermark%ISOPEN THEN OPEN c_get_watermark('test_watermark.jpg'); END IF; FETCH c_get_watermark INTO l_watermark_blob; CLOSE c_get_watermark; - + 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); l_enty_code := l_enqu_row.enty_code; - + --get the quote diagrams - l_base_blob := get_drawing(p_quote_data.base_diagram); - l_house_blob := get_drawing(p_quote_data.house_diagram); + l_base_blob := get_drawing(p_quote_data.base_diagram); + l_house_blob := get_drawing(p_quote_data.house_diagram); l_module_blob := get_drawing(p_quote_data.module_diagram); -- Initialize PDF plpdf.init; --build the pages for the quote - build_covering_letter(p_quote_data,l_font,l_indent,l_vertical_offset,l_logo_blob, l_signature_blob, l_watermark_blob);--1 - build_costs_page(p_quote_data,l_font,l_indent,l_vertical_offset,l_watermark_blob); --2 + build_covering_letter(p_quote_data + ,l_font + ,l_indent + ,l_vertical_offset + ,l_logo_blob + ,l_signature_blob + ,l_watermark_blob); --1 + build_costs_page(p_quote_data + ,l_font + ,l_indent + ,l_vertical_offset + ,l_watermark_blob); --2 --only display the data logger caveat if the user has selected it - if (l_enty_code = 'REMOVE' or l_enty_code = 'STD REMOVE' or l_enty_code = 'ADVERSARIAL') and l_enqu_row.existing_logger = 'YES' then - build_caveats_page(p_quote_data,l_font,l_indent,l_vertical_offset,l_watermark_blob, true); --3 - else - build_caveats_page(p_quote_data,l_font,l_indent,l_vertical_offset,l_watermark_blob, false); --3 - end if; + IF (l_enty_code = 'REMOVE' OR l_enty_code = 'STD REMOVE' OR + l_enty_code = 'ADVERSARIAL') + AND l_enqu_row.existing_logger = 'YES' THEN + build_caveats_page(p_quote_data + ,l_font + ,l_indent + ,l_vertical_offset + ,l_watermark_blob + ,TRUE); --3 + ELSE + build_caveats_page(p_quote_data + ,l_font + ,l_indent + ,l_vertical_offset + ,l_watermark_blob + ,FALSE); --3 + END IF; --OFMAT, Addon jobs, Std removal, removal, adversarials don't have module diagrams - if not (l_enty_code = 'OFMAT' or l_enty_code = 'AMR' or l_enty_code = 'EMS' or l_enty_code = 'REMOVE' or l_enty_code = 'STD REMOVE' or l_enty_code = 'ADVERSARIAL') then - build_drawings_page(p_quote_data,l_font,l_indent,l_vertical_offset, l_base_blob, l_house_blob, l_module_blob,l_watermark_blob); --4 - end if; + IF NOT (l_enty_code = 'OFMAT' OR l_enty_code = 'AMR' OR + l_enty_code = 'EMS' OR l_enty_code = 'REMOVE' OR + l_enty_code = 'STD REMOVE' OR l_enty_code = 'ADVERSARIAL') THEN + build_drawings_page(p_quote_data + ,l_font + ,l_indent + ,l_vertical_offset + ,l_base_blob + ,l_house_blob + ,l_module_blob + ,l_watermark_blob); --4 + END IF; --No need for 2nd tech specs page for removal type jobs - if not (l_enty_code = 'REMOVE' or l_enty_code = 'STD REMOVE' or l_enty_code = 'ADVERSARIAL') then - build_module_specs_page(p_quote_data,l_font,l_indent,l_vertical_offset,l_watermark_blob); --5 - end if; - build_acceptance_page(p_quote_data,l_font,l_indent,l_vertical_offset,l_logo_blob,l_watermark_blob); --6 + IF NOT (l_enty_code = 'REMOVE' OR l_enty_code = 'STD REMOVE' OR + l_enty_code = 'ADVERSARIAL') THEN + build_module_specs_page(p_quote_data + ,l_font + ,l_indent + ,l_vertical_offset + ,l_watermark_blob); --5 + END IF; + build_acceptance_page(p_quote_data + ,l_font + ,l_indent + ,l_vertical_offset + ,l_logo_blob + ,l_watermark_blob); --6 --get our beautiful pdf into the local var l_blob - plpdf.SendDoc(l_blob); + plpdf.senddoc(l_blob); --punt the created pdf into the APEX files table - insert into wwv_flow_files( name, title, mime_type, flow_id, doc_size ,description, blob_content ) - values ( sys_guid()||'/quote_'||p_quote_data.quote_ref||'.pdf', 'Quotation - '||p_quote_data.quote_ref, 'application/pdf', apex_application.g_flow_id, DBMS_LOB.GETLENGTH(l_blob),'this is an auto generated quotation from mip_quotation_document.generate_detailed_quote for quotation '||p_quote_data.quote_ref, l_blob) - returning name into l_pdf_name; + INSERT INTO wwv_flow_files + (NAME + ,title + ,mime_type + ,flow_id + ,doc_size + ,description + ,blob_content) + VALUES + (sys_guid() || '/quote_' || p_quote_data.quote_ref || '.pdf' + ,'Quotation - ' || p_quote_data.quote_ref + ,'application/pdf' + ,apex_application.g_flow_id + ,dbms_lob.getlength(l_blob) + ,'this is an auto generated quotation from mip_quotation_document.generate_detailed_quote for quotation ' || + p_quote_data.quote_ref + ,l_blob) + RETURNING NAME INTO l_pdf_name; --set up the file associations within our documents tables - l_success:= mip_files.set_file_association(l_pdf_name, - 'Automatically Generated Quotation for quote '||p_quote_data.quote_ref, - 'INDO', - 'GENERATED QUOTATION', - p_quote_data.quote_ref, - null, - null, - 'QUDO'); - return l_pdf_name; -- return the id of the newly created blob pdf record - end generate_detailed_quote_pdf; + l_success := mip_files.set_file_association(l_pdf_name + ,'Automatically Generated Quotation for quote ' || + p_quote_data.quote_ref + ,'INDO' + ,'GENERATED QUOTATION' + ,p_quote_data.quote_ref + ,NULL + ,NULL + ,'QUDO'); + RETURN l_pdf_name; -- return the id of the newly created blob pdf record + END generate_detailed_quote_pdf; /* FUNCTION generate_quote_pdf --The generate_detailed_quote_pdf builds the pdf document for the quotation from @@ -1556,13 +2998,13 @@ PROCEDURE pl(p_in IN VARCHAR2 %param p_quote_id - the id of the quote you want to build a pdf for. %return - the name of the pdf file we have created. This is a unique value within the wwv_flow_files table */ - FUNCTION generate_quote_pdf(p_quote_id in number) RETURN VARCHAR2 is + FUNCTION generate_quote_pdf(p_quote_id IN NUMBER) RETURN VARCHAR2 IS l_quote_data quote_data; - begin + BEGIN l_quote_data := get_detailed_quote_data(p_quote_id); - return generate_detailed_quote_pdf(l_quote_data, p_quote_id); - end generate_quote_pdf; - + RETURN generate_detailed_quote_pdf(l_quote_data + ,p_quote_id); + END generate_quote_pdf; BEGIN -- Initialization