diff --git a/html/admin/setup.php b/html/admin/setup.php index 80398f667..e243bda8f 100644 --- a/html/admin/setup.php +++ b/html/admin/setup.php @@ -407,6 +407,9 @@ if ( DEBUG=='false' ) ob_start(); if ( GetVersion($db) == 8 ) { ExecuteScript($db,'sql/patch/upgrade8.sql'); } // version == 9 + if ( GetVersion($db) == 9 ) { + ExecuteScript($db,'sql/patch/upgrade9.sql'); + } // version == 8->9 if ( DEBUG == 'false') ob_end_clean(); }//for @@ -463,6 +466,11 @@ if (DEBUG == 'false' ) ob_start(); if ( GetVersion($db) == 8 ) { ExecuteScript($db,'sql/patch/upgrade8.sql'); } // version == 9 + // update to the version 10 + //-- + if ( GetVersion($db) == 9 ) { + ExecuteScript($db,'sql/patch/upgrade9.sql'); + } // version == 9 if ( DEBUG == 'false') ob_end_clean(); } diff --git a/html/admin/sql/patch/upgrade9.sql b/html/admin/sql/patch/upgrade9.sql new file mode 100644 index 000000000..c19c06e1b --- /dev/null +++ b/html/admin/sql/patch/upgrade9.sql @@ -0,0 +1,306 @@ +begin; +-- index needed +create unique index attr_value_jft_id on attr_value (jft_id); +-- add quick code +insert into attr_def (ad_text) values('Quick Code'); +-- update existing card & template +insert into attr_min select frd_id,23 from fiche_def_ref; +insert into jnt_fic_attr select fd_id,23 from fiche_Def; +insert into jnt_fic_att_value(f_id,ad_id) select f_id,23 from fiche; +-- generate a quick code +insert into attr_value select jft_id,'FID'||f_id from jnt_fic_att_value join fiche using(f_id) where ad_id=23; +-- add quick code to jrnx +alter table jrnx add j_qcode text; + +update jrnx set j_qcode = B.av_text from + (select f_id,av_text from attr_value join jnt_fic_att_value using (jft_id) + where ad_id=5) as A + join ( select f_id,av_text from attr_value join jnt_fic_att_value using (jft_id) + where ad_id=23) as B using(f_id) where j_poste=a.av_text; + +create or replace function insert_jrnx ( + p_date varchar, + p_montant jrnx.j_montant%TYPE, + p_poste jrnx.j_poste%TYPE, + p_grpt jrnx.j_grpt%type, + p_jrn_def jrnx.j_jrn_def%type, + p_debit jrnx.j_debit%type, + p_tech_user jrnx.j_tech_user%type, + p_tech_per jrnx.j_tech_per%type, + p_qcode jrnx.j_qcode%type +) returns void +as +$body$ +declare + sCode varchar; + nCount_qcode integer; +begin + sCode=trim(p_qcode); + + -- if p_qcode is empty try to find one + if length(sCode) = 0 or p_qcode is null then + + select count(*) into nCount_qcode + from vw_poste_qcode where j_poste=p_poste; + -- if we find only one q_code for a accountancy account + -- then retrieve it + if nCount_qcode = 1 then + select j_qcode into sCode + from vw_poste_qcode where j_poste=p_poste; + else + sCode=NULL; + end if; + + end if; + + insert into jrnx + ( + j_date, + j_montant, + j_poste, + j_grpt, + j_jrn_def, + j_debit, + j_tech_user, + j_tech_per, + j_qcode + ) values + ( + to_date(p_date,'DD.MM.YYYY'), + p_montant, + p_poste, + p_grpt, + p_jrn_def, + p_debit, + p_tech_user, + p_tech_per, + sCode + ); + +return; +end; +$body$ +language plpgsql; + + + +-- Function: update_quick_code(njft_id int4, tav_text text) + +-- DROP FUNCTION update_quick_code(int4, text); + +CREATE OR REPLACE FUNCTION update_quick_code(njft_id int4,tav_text text) + RETURNS int4 AS +$BODY$ + + declare + ns integer; + nExist integer; + tText text; + old_qcode varchar; + begin + -- get current value + select av_text into old_qcode from attr_value where jft_id=njft_id; + -- av_text didn't change so no update + if tav_text = upper( trim(old_qcode)) then + return 0; + end if; + + tText := trim(upper(tav_text)); + tText := replace(tText,' ',''); + if length ( tText) = 0 or tText is null then + return 0; + end if; + + ns := njft_id; + + loop + -- av_text already used ? + select count(*) into nExist + from jnt_fic_att_value join attr_value using (jft_id) + where + ad_id=23 and av_text=upper(tText); + + if nExist = 0 then + exit; + end if; + if tText = 'FID'||ns then + -- take the next sequence + select nextval('s_jnt_fic_att_value') into ns; + end if; + tText :='FID'||ns; + + end loop; + update attr_value set av_text = tText where jft_id=njft_id; + update jrnx set j_qcode=tText where j_qcode = old_qcode; + return ns; + end; +$BODY$ + LANGUAGE 'plpgsql' VOLATILE; + + + + + +-- View: "vw_fiche_def" + +DROP VIEW vw_fiche_def; + +CREATE OR REPLACE VIEW vw_fiche_def AS + SELECT jnt_fic_attr.fd_id, jnt_fic_attr.ad_id, + attr_def.ad_text, + attr_value.av_text, + fiche_def.fd_class_base, + fiche_def.fd_label, fiche_def.fd_create_account, fiche_def.frd_id + FROM jnt_fic_att_value + JOIN attr_value using (jft_id) + join fiche using (f_id) + join jnt_fic_attr using (fd_id) + JOIN attr_def on (attr_def.ad_id=jnt_fic_attr.ad_id) + JOIN fiche_def USING (fd_id); + +COMMENT ON VIEW vw_fiche_def IS 'all the attributs for card family'; + + + +create or replace function insert_quant_sold ( + p_internal quant_sold.qs_internal%type, + p_fiche varchar, + p_quant quant_sold.qs_quantite%type, + p_price quant_sold.qs_price%type, + p_vat quant_sold.qs_vat%type, + p_vat_code quant_sold.qs_vat_code%type, + p_client varchar) returns void as +$body$ +declare + fid_client integer; + fid_good integer; +begin + select f_id into fid_client from + attr_value join jnt_fic_att_value using (jft_id) where ad_id=23 and av_text=p_client; + + select f_id into fid_good from + attr_value join jnt_fic_att_value using (jft_id) where ad_id=23 and av_text=p_fiche; + + + insert into quant_sold + (qs_internal,qs_fiche,qs_quantite,qs_price,qs_vat,qs_vat_code,qs_client) + values + (p_internal,fid_good,p_quant,p_price,p_vat,p_vat_code,fid_client); + return; +end; +$body$ + LANGUAGE 'plpgsql' VOLATILE; + + + +-- Function: insert_quick_code(nf_id int4, tav_text text) + +-- DROP FUNCTION insert_quick_code(int4, text); + +CREATE OR REPLACE FUNCTION insert_quick_code(nf_id int4, tav_text text) + RETURNS int4 AS +$BODY$ + declare + ns integer; + nExist integer; + tText text; + begin + tText := upper(trim(tav_text)); + tText := replace(tText,' ',''); + + loop + -- take the next sequence + select nextval('s_jnt_fic_att_value') into ns; + if length (tText) = 0 or tText is null then + tText := 'FID'||ns; + end if; + -- av_text already used ? + select count(*) into nExist + from jnt_fic_att_value join attr_value using (jft_id) + where + ad_id=23 and av_text=upper(tText); + + if nExist = 0 then + exit; + end if; + tText:='FID'||ns; + end loop; + -- insert into table jnt_fic_att_value + insert into jnt_fic_att_value values (ns,nf_id,23); + -- insert value into attr_value + insert into attr_value values (ns,upper(tText)); + return ns; + end; +$BODY$ + LANGUAGE 'plpgsql' VOLATILE; +ALTER FUNCTION insert_quick_code(int4, text) OWNER TO dany; + + + +create view vw_fiche_attr as +SELECT a.f_id, a.fd_id, a.av_text AS vw_name, b.av_text AS vw_sell, c.av_text AS vw_buy, d.av_text AS tva_code, tva_rate.tva_id, tva_rate.tva_rate, tva_rate.tva_label, e.av_text AS vw_addr, f.av_text AS vw_cp, j.av_text as quick_code,fiche_def.frd_id + FROM ( SELECT fiche.f_id, fiche.fd_id, attr_value.av_text + FROM fiche + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + JOIN attr_def USING (ad_id) + WHERE jnt_fic_att_value.ad_id = 1) a + LEFT JOIN ( SELECT fiche.f_id, attr_value.av_text + FROM fiche + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + JOIN attr_def USING (ad_id) + WHERE jnt_fic_att_value.ad_id = 6) b ON a.f_id = b.f_id + LEFT JOIN ( SELECT fiche.f_id, attr_value.av_text + FROM fiche + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + JOIN attr_def USING (ad_id) + WHERE jnt_fic_att_value.ad_id = 7) c ON a.f_id = c.f_id + LEFT JOIN ( SELECT fiche.f_id, attr_value.av_text + FROM fiche + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + JOIN attr_def USING (ad_id) + WHERE jnt_fic_att_value.ad_id = 2) d ON a.f_id = d.f_id + LEFT JOIN ( SELECT fiche.f_id, attr_value.av_text + FROM fiche + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + JOIN attr_def USING (ad_id) + WHERE jnt_fic_att_value.ad_id = 14) e ON a.f_id = e.f_id + LEFT JOIN ( SELECT fiche.f_id, attr_value.av_text + FROM fiche + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + JOIN attr_def USING (ad_id) + WHERE jnt_fic_att_value.ad_id = 15) f ON a.f_id = f.f_id + LEFT JOIN ( SELECT fiche.f_id, attr_value.av_text + FROM fiche + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + JOIN attr_def USING (ad_id) + WHERE jnt_fic_att_value.ad_id = 23) j ON a.f_id = j.f_id + LEFT JOIN tva_rate ON d.av_text = tva_rate.tva_id::text + JOIN fiche_def USING (fd_id); + + + +create view vw_poste_qcode + as + select A.f_id,a.av_text as j_poste,b.av_text as j_qcode + from (select f_id,av_text from attr_value join jnt_fic_att_value using (jft_id) + where ad_id=5) as A + join ( select f_id,av_text from attr_value join jnt_fic_att_value using (jft_id) + where ad_id=23) as B using(f_id) +; + + + + + + + + +update version set val=10; +commit; \ No newline at end of file