diff --git a/Modules/mip_quotation_document.pck b/Modules/mip_quotation_document.pck index 3a9508d..4d1473d 100644 --- a/Modules/mip_quotation_document.pck +++ b/Modules/mip_quotation_document.pck @@ -6,7 +6,7 @@ CREATE OR REPLACE PACKAGE mip_quotation_document IS -- Public type declarations --type is ; - type caveat_texts_array is varray(20) of varchar2(4000); + type caveat_text is varray(20) of varchar2(4000); type img_props is record(width number, height number); type cost_line is record( @@ -28,8 +28,10 @@ CREATE OR REPLACE PACKAGE mip_quotation_document IS 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, @@ -39,7 +41,7 @@ CREATE OR REPLACE PACKAGE mip_quotation_document IS base_depth number, base_height number, outlet_termninal_size number, - quote_caveats caveats := caveats(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null), + 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), @@ -61,6 +63,7 @@ CREATE OR REPLACE PACKAGE mip_quotation_document IS module_inlet_orientation varchar2(80), module_outlet_orientation varchar2(80), 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) ); @@ -70,7 +73,35 @@ CREATE OR REPLACE PACKAGE mip_quotation_document IS END mip_quotation_document; / CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS - + /* + PROCEDURE print_caveats + --Prints the supplied caveats to the current PLPDF page + %param p_caveats - an array of caveat paragraphs to print + %param p_vertical_offset - how far down the page we start printing + %param p_line_spacing - the line spacing to use, defaults to 4 + */ + procedure print_caveats(p_caveats in caveat_text, p_vertical_offset in number, p_line_spacing in number :=4) 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)); + plpdf.LineBreak; + plpdf.LineBreak; + 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; /* FUNCTION scale_image_dimensions --The scale_image_dimensions provides the width and height of an image to @@ -90,7 +121,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS begin --Get the properties for the image from plpdf l_image_props:=plpdf_img.getimageprops(p_image_blob); - --if the image is too heigh cut it down to the limit and record the ratio + --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 l_new_height := p_req_height; @@ -362,24 +393,9 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS return l_quote_total_cost; end get_total_cost; - /* - FUNCTION determine_caveats - --This function should return a list of caveats, probably in an array, required for - --the quotation. It will need to be passed relevent data so that it can make the - --determinations - %param p_enquiryid - the current enquiry to make determinations against. - %param possibly a few more params to get the required data in - */ - FUNCTION determine_caveats(p_enquiryid in number) RETURN BOOLEAN is - - begin - null; - end determine_caveats; /* PROCEDURE set_quote_items --This procedure sets the data for each of the items associated with the quotation. - --may want to break it up a bit using individual functions for each type of items - --just to make it more legible(it's rather a large procedure) %param p_quote_data in out - The current data for this enquiry(what write our data values to) %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. @@ -421,11 +437,9 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS l_enqu_type := quote_item_rec.enty_code; end if; end loop; - - - --cycle through the quote items picking up each item to display on the - --description of works section - + + --cycle through the quote items picking up each item to store in the + --p_quote_data record l_counter := 0; FOR quote_item_rec IN c_get_quote_item(p_quoteid) LOOP --get the meter type, pressure and job type so we can @@ -599,6 +613,9 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS --add up all the addons and format the string l_works(4) := 'Add-Ons: '|| ltrim(l_addons, ','); p_quote_data.quote_works := l_works; + + --get caveats + end set_quote_items_data; /* @@ -612,49 +629,44 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS 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; - --CURSOR c_get_quote(cp_quote_id number) IS - -- SELECT * - -- FROM quotes - -- WHERE id = cp_quote_id; - --Enquiry data + l_quote_row quotes%ROWTYPE; + --Enquiry data l_enquiry_id number; l_enqu_row enquiries%ROWTYPE; - --CURSOR c_get_enquiry(cp_enqu_id number) IS - -- SELECT * - -- FROM enquiries - -- WHERE id = cp_enqu_id; - --supplier address data + --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; - --l_address_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); -/* IF NOT c_get_quote%ISOPEN THEN - OPEN c_get_quote(p_quoteid); - END IF; - - FETCH c_get_quote - INTO l_quote_row; - CLOSE c_get_quote;*/ --get the enquiry data l_enquiry_id := l_quote_row.enqu_id; @@ -723,7 +735,27 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS --get individual quote item details set_quote_items_data(l_quote_data, l_quote_row.id,l_enqu_row); --get caveats - --determine_caveats call (this could be a procedure, depends on what GW gives us) + 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 + 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_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_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_quote_data.caveat_cont_sum_qa(l_csqa_counter) := rec.text; + 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; @@ -822,11 +854,10 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS %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_caveat_texts caveat_texts_array) is + PROCEDURE build_costs_page(p_quote_data in quote_data, p_font in varchar2, p_indent in number, p_vertical_offset in number) is l_cost_line_counter number; l_vertical_offset_for_costs number := p_vertical_offset+110; l_works_counter number; - l_caveats_counter number; l_vertical_offset_for_works number := p_vertical_offset+52; l_cost_totals_offset number; --used to position the cost totals after the cost line items @@ -854,14 +885,10 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS plpdf.PrintText(p_indent,l_vertical_offset_for_works+(l_works_counter*4), p_quote_data.quote_works(l_works_counter)); l_works_counter := l_works_counter +1; end loop; - --PUT DESC_WORK caveat here - l_caveats_counter :=1; - while p_caveat_texts(l_caveats_counter) is not null - loop - plpdf.PrintText(p_indent,l_vertical_offset_for_works+(l_works_counter*4), p_caveat_texts(l_caveats_counter)); - l_caveats_counter := l_caveats_counter +1; - l_works_counter := l_works_counter +1; - 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_vertical_offset_for_works+(l_works_counter*4)); + end if; plpdf.SetPrintFont(p_font,null,10); --unset bold plpdf.PrintText(p_indent,p_vertical_offset+90, 'Indicative Lead Time from Acceptance to Physical Commencement: '); plpdf.SetPrintFont(p_font,'B',10); --set bold @@ -870,6 +897,10 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS plpdf.PrintText(p_indent,p_vertical_offset+98,'Contract sum (excluding V.A.T): '); plpdf.SetPrintFont(p_font,'B',10); --set bold plpdf.PrintText(85,p_vertical_offset+98,'£'||to_char(p_quote_data.total_cost,'FM999999D90')); + -- CONT_SUM caveat here + if p_quote_data.caveat_cont_sum is not null then + print_caveats(p_quote_data.caveat_cont_sum, p_vertical_offset+102); + end if; plpdf.SetPrintFont(p_font,null,10); --unset bold plpdf.PrintText(p_indent,p_vertical_offset+106,'Analysis of Costs (all costs exclude V.A.T)'); plpdf.SetPrintFont(p_font,'B',10); --set bold @@ -916,8 +947,11 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS plpdf.PrintText(p_indent+80,p_vertical_offset+50,'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+74,'Special Features/Terms/Conditions:'); - --Terms and condition CAVEATS GO HERE DUDES/DUDETTES 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+78); + 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 @@ -1100,7 +1134,8 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS 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 + --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); @@ -1185,6 +1220,10 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS 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,'£'||p_quote_data.total_cost||' excluding lifting gear if required.'); + -- CONT_SUM_QA caveat here + if p_quote_data.caveat_cont_sum_qa is not null then + print_caveats(p_quote_data.caveat_cont_sum_qa, p_vertical_offset+66); + end if; plpdf.SetPrintFont(p_font,null,10); --unset bold plpdf.PrintText(p_indent,p_vertical_offset+74,'* I confirm on behalf of my Company that I accept the above referenced quotation for the conduct'); plpdf.PrintText(p_indent,p_vertical_offset+78,'of works as detailed therein, and here by certify on behalf of my Company that no additional'); @@ -1224,22 +1263,16 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document 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_rec_counter number; - l_caveat_texts := caveat_texts_array(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null); l_logo_blob blob; l_signature_blob blob; - l_success boolean; --holds whether the quote was saved i nthe docuemnts tables or not + 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_desc_work_row caveat_texts%ROWTYPE; - l_term_cond_row caveat_texts%ROWTYPE; - l_cont_sum_row caveat_texts%ROWTYPE; - l_cont_sum_qa_row caveat_texts%ROWTYPE; + l_font varchar2(40) := 'Arial'; --arial not daz CURSOR c_get_logo(cp_logo varchar2) IS SELECT blob_content FROM wwv_flow_files @@ -1253,14 +1286,6 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS FROM quote_items WHERE qute_id = cp_quid and quit_type = 'LQI' ; - CURSOR c_get_caveats(cp_enty_code varchar2, cp_mety_code varchar2, cp_svcpt_code varchar2, cp_document_position 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 and document_position = cp_document_position - order by 2; - - ---built cursor above now need to get it into either separate variables or a record! - begin IF NOT c_get_logo%ISOPEN THEN OPEN c_get_logo('quote_logo.jpg'); @@ -1280,41 +1305,6 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS FETCH c_get_enty INTO l_enty_code; CLOSE c_get_enty; - --Get all the caveats - --Description of works caveats -/* IF NOT c_get_caveats%ISOPEN THEN - OPEN c_get_caveats(l_enty_code, p_quote_data.mety_code, p_quote_data.svcpt_code, 'DESC_WORK'); - END IF;*/ - l_rec_counter := 1; - for rec in c_get_caveats(l_enty_code, p_quote_data.mety_code, p_quote_data.svcpt_code, 'DESC_WORK') - loop - l_caveat_texts(l_rec_counter) := rec.text; - l_rec_counter := l_rec_counter +1; - end loop; - /* FETCH c_get_caveats - INTO l_desc_work_row; - CLOSE c_get_caveats; - --Terms and Conditions - IF NOT c_get_caveats%ISOPEN THEN - OPEN c_get_caveats(l_enty_code, p_quote_data.mety_code,p_quote_data.svcpt_code,'DESC_WORK'); - END IF; - FETCH c_get_caveats - INTO l_term_cond_row; - CLOSE c_get_caveats; - --Contract Sum - IF NOT c_get_caveats%ISOPEN THEN - OPEN c_get_caveats(l_enty_code, p_quote_data.mety_code,p_quote_data.svcpt_code,'CONT_SUM'); - END IF; - FETCH c_get_caveats - INTO l_cont_sum_row; - CLOSE c_get_caveats; - --Contract Sum Quote Acceptance - IF NOT c_get_caveats%ISOPEN THEN - OPEN c_get_caveats(l_enty_code, p_quote_data.mety_code,p_quote_data.svcpt_code,'CONT_SUM_QA'); - END IF; - FETCH c_get_caveats - INTO l_cont_sum_qa_row; - CLOSE c_get_caveats; */ --get the quote diagrams l_base_blob := get_drawing(p_quote_data.base_diagram); @@ -1324,7 +1314,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS 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);--1 - build_costs_page(p_quote_data,l_font,l_indent,l_vertical_offset, l_caveat_texts); --2 + build_costs_page(p_quote_data,l_font,l_indent,l_vertical_offset); --2 build_caveats_page(p_quote_data,l_font,l_indent,l_vertical_offset); --3 --OFMAT, Addon jobs don't have module diagrams if not (l_enty_code = 'OFMAT' or l_enty_code = 'AMR' or l_enty_code = 'EMS') then