From b43f4c87b470f7ce28b3d7528ba77a8cd187eea4 Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Wed, 10 Feb 2010 18:38:16 +0000 Subject: [PATCH] Merged revisions 2905-2938 via svnmerge from svn+ssh://danydb@svn/svn/phpcompta/branches/rel500 ........ r2906 | danydb | 2010-01-27 15:16:08 +0100 (Wed, 27 Jan 2010) | 2 lines Cosmetic for html popup ........ r2907 | danydb | 2010-01-27 15:28:03 +0100 (Wed, 27 Jan 2010) | 5 lines Fix typo translation Fix Bug : cannot save extension in IE, probably because the same scripts are included several times ........ r2908 | danydb | 2010-01-28 13:56:37 +0100 (Thu, 28 Jan 2010) | 5 lines Fix Bug In getNodeText when retrieving data for Internet Explorer, it fails if the xmlNode.firstChild.nodeValue does not contains data. It is directly set to undefined ........ r2909 | danydb | 2010-01-29 12:20:24 +0100 (Fri, 29 Jan 2010) | 2 lines Generate invoice : update the comment of the entry only if there were no comment ........ r2910 | danydb | 2010-01-29 19:39:11 +0100 (Fri, 29 Jan 2010) | 6 lines Improve User ============ Status only plugin means that the user can use only the plugin and can't access to anything else. ........ r2911 | danydb | 2010-01-29 19:42:38 +0100 (Fri, 29 Jan 2010) | 1 line Bug import Dexia ........ r2912 | danydb | 2010-01-31 16:24:22 +0100 (Sun, 31 Jan 2010) | 3 lines For insert_jrnx, the desc is now in the function, we don't need anymore to update after inserting ........ r2913 | danydb | 2010-01-31 16:33:55 +0100 (Sun, 31 Jan 2010) | 4 lines Fix bug : cannot see operation in quick_writing cause : the p_action must be set to ALL, it wasn't for quick_writing ........ r2914 | danydb | 2010-02-02 14:52:37 +0100 (Tue, 02 Feb 2010) | 4 lines Code cleaning Bug : in ledger of sale, we have twice the possibility to add~ or generate document, and only for invoice (type 4) Solution : fix the function Acc_Ledger_Purchase::extra_info (type of document = 10), remove extra code ........ r2915 | danydb | 2010-02-05 01:01:11 +0100 (Fri, 05 Feb 2010) | 4 lines Improve : search_card you can also find a card thanks is tva_num Documentation doxygen improved ........ r2916 | danydb | 2010-02-05 11:18:36 +0100 (Fri, 05 Feb 2010) | 2 lines when inserting into ledger_sold the test to check the attach was wrong ........ r2917 | danydb | 2010-02-05 14:45:33 +0100 (Fri, 05 Feb 2010) | 2 lines Extension : add the possibility to use ajax ........ r2918 | danydb | 2010-02-06 14:25:22 +0100 (Sat, 06 Feb 2010) | 1 line rewrite the function encodeJSON, hide and show for doxygen ........ r2919 | danydb | 2010-02-06 14:26:07 +0100 (Sat, 06 Feb 2010) | 1 line remove error where _SESSION is expired ........ r2920 | danydb | 2010-02-06 14:26:49 +0100 (Sat, 06 Feb 2010) | 1 line In ITva_Select add the display ........ r2921 | danydb | 2010-02-06 14:27:47 +0100 (Sat, 06 Feb 2010) | 1 line Cosmetic ........ r2922 | danydb | 2010-02-06 14:27:49 +0100 (Sat, 06 Feb 2010) | 1 line IPopup add a new property drag to make the ipopup dragguable or not ........ r2923 | danydb | 2010-02-06 14:35:28 +0100 (Sat, 06 Feb 2010) | 5 lines Middle of payment ================= Feature : add or remove middle of payment ........ r2924 | danydb | 2010-02-06 18:17:15 +0100 (Sat, 06 Feb 2010) | 7 lines Card ---- A same card can now have 2 different sides (debit or credit) usefull to have only one card for a customer and a supplier ........ r2925 | danydb | 2010-02-06 18:23:03 +0100 (Sat, 06 Feb 2010) | 1 line Add the sql script for the double accounting ........ r2926 | danydb | 2010-02-06 19:29:29 +0100 (Sat, 06 Feb 2010) | 2 lines Update documentation ........ r2927 | danydb | 2010-02-06 20:37:12 +0100 (Sat, 06 Feb 2010) | 4 lines Fiche_def ======== Permit to have 2 accouting as class_base ........ r2928 | danydb | 2010-02-06 20:56:00 +0100 (Sat, 06 Feb 2010) | 1 line Bug : FK from stock prevent the removal of a card ........ r2929 | danydb | 2010-02-06 21:14:10 +0100 (Sat, 06 Feb 2010) | 1 line removeless useless test ........ r2930 | danydb | 2010-02-07 00:55:03 +0100 (Sun, 07 Feb 2010) | 1 line Improve appearance extension ........ r2931 | danydb | 2010-02-07 00:56:28 +0100 (Sun, 07 Feb 2010) | 2 lines remove debug ........ r2932 | danydb | 2010-02-07 01:16:51 +0100 (Sun, 07 Feb 2010) | 1 line Improve appearance extension ........ r2933 | danydb | 2010-02-07 01:19:08 +0100 (Sun, 07 Feb 2010) | 1 line Improve appearance extension ........ r2934 | danydb | 2010-02-07 01:30:31 +0100 (Sun, 07 Feb 2010) | 1 line Improve appearance extension ........ r2935 | danydb | 2010-02-07 02:36:25 +0100 (Sun, 07 Feb 2010) | 1 line Version PHP5.3 : split is obsolete and replace by explode ........ r2936 | danydb | 2010-02-07 04:56:17 +0100 (Sun, 07 Feb 2010) | 1 line remove owner ........ r2937 | danydb | 2010-02-08 22:34:07 +0100 (Mon, 08 Feb 2010) | 1 line typo ........ r2938 | danydb | 2010-02-08 22:34:28 +0100 (Mon, 08 Feb 2010) | 1 line Start translation for Dutch ........ --- contrib/document_test/facture.html | 1 + dev/extract_text.sh | 1 + doc/manuel-fr.odt | Bin 61095 -> 55544 bytes html/access.php | 12 +- html/admin/sql/patch/upgrade63.sql | 62 + html/admin/sql/patch/upgrade64.sql | 67 + html/admin/sql/patch/upgrade65.sql | 4 + html/admin/sql/patch/upgrade66.sql | 134 ++ html/admin/sql/patch/upgrade67.sql | 177 ++ html/ajax.php | 38 + html/ajax_extension.php | 4 +- html/commercial.php | 22 +- html/compta.php | 2 +- html/comptanalytic.php | 2 +- html/extension.php | 12 +- html/js/extension.js | 33 +- html/js/scripts.js | 15 +- html/js/todo_list.js | 5 +- html/lang/en_US/LC_MESSAGES/messages.po | 334 +++- html/lang/nl_NL/LC_MESSAGES/messages.po | 2370 ++++++++++++++++++++++- html/modify_op.php | 2 +- html/priv_user.php | 33 +- html/style-color.css | 4 +- html/style-light.css | 6 +- html/style.css | 6 +- html/user_compta.php | 4 +- html/user_login.php | 1 - include/ac_common.php | 132 +- include/argenta_be.inc.php | 4 +- include/cbc_be.inc.php | 2 +- include/class_acc_account_ledger.php | 6 +- include/class_acc_ledger.php | 43 +- include/class_acc_ledger_fin.php | 67 +- include/class_acc_ledger_purchase.php | 123 +- include/class_acc_ledger_sold.php | 65 +- include/class_acc_operation.php | 107 +- include/class_acc_payment.php | 53 +- include/class_acc_reconciliation.php | 2 +- include/class_acc_tva.php | 2 +- include/class_fiche.php | 447 ++--- include/class_fiche_def.php | 44 +- include/class_icard.php | 11 + include/class_idate.php | 8 +- include/class_ipopup.php | 21 +- include/class_itva_select.php | 13 +- include/class_user.php | 188 +- include/constant.php | 2 +- include/contact.inc.php | 32 +- include/dexia.inc.php | 2 +- include/dexia_be.inc.php | 38 +- include/dossier.inc.php | 50 +- include/eub_be.inc.php | 2 +- include/ext_inc.php | 4 +- include/extension.inc.php | 5 - include/fiche.inc.php | 4 +- include/fortis_be.inc.php | 2 +- include/impress_inc.php | 2 +- include/ing_be.inc.php | 2 +- include/keytrade_be.inc.php | 2 +- include/param_jrn_detail.inc.php | 4 +- include/payment_middle.inc.php | 41 +- include/template/extension-detail.php | 4 +- include/template/fiche_def_input.php | 4 +- include/template/new_mod_payment.php | 51 + include/user_common.php | 49 +- include/user_menu.php | 18 +- sql/upgrade.sql | 111 -- 67 files changed, 4220 insertions(+), 898 deletions(-) create mode 100644 html/admin/sql/patch/upgrade63.sql create mode 100644 html/admin/sql/patch/upgrade64.sql create mode 100644 html/admin/sql/patch/upgrade65.sql create mode 100644 html/admin/sql/patch/upgrade66.sql create mode 100644 html/admin/sql/patch/upgrade67.sql create mode 100644 html/ajax.php create mode 100644 include/template/new_mod_payment.php diff --git a/contrib/document_test/facture.html b/contrib/document_test/facture.html index f1639fa5d..addb2c08e 100644 --- a/contrib/document_test/facture.html +++ b/contrib/document_test/facture.html @@ -12,6 +12,7 @@ Adresse <>
<> <>

+

FACTURE

Détail

diff --git a/dev/extract_text.sh b/dev/extract_text.sh index 0ae02084c..08cce71f7 100644 --- a/dev/extract_text.sh +++ b/dev/extract_text.sh @@ -8,3 +8,4 @@ echo "Extract" cd .. xgettext -L PHP -j --from-code=UTF-8 -p html/lang/en_US/LC_MESSAGES/ html/*.php include/*.php include/template/*.php +xgettext -L PHP -j --from-code=UTF-8 -p html/lang/nl_NL/LC_MESSAGES/ html/*.php include/*.php include/template/*.php diff --git a/doc/manuel-fr.odt b/doc/manuel-fr.odt index ae507e4c12f272c856f65d4ced298e72d6d9c0cb..2e7d53634ff9fe867a22b348396c6de9ba66aca3 100644 GIT binary patch delta 53679 zcmYg$1yCMKvvzQIcY?dS1PJc#?j9hxE>415aCdii3GVLhL0;VD&pH2h?{{~rW_q4} zwx_FRwsy9=i#H%1Yax)7WFa6iKmBuMrb)#i$w2(=5=g*4Cv5ydMEFMq`}h7w6|eTM zD(8*Bd}1S zW>VT%g6-PaL9bOu{9CQ>lR~eDZxq*6fgA`4k0XOQ-JLs7S2TEGR|5%A)muKbPgZ-} ziXSlmAT>GFuk6U9ATdDk<7Pq`{phlr*oVk6?DaGuiYy8RLkOY1e>od+#rO-KT#-mc z7hl8Hmx8WG=_KF>_IrjwQ}<-h!&4r~Ui)P8`^v81+}Qon-aOEJJoL!KQ1dCIBWJ?Myt5M_7Mz(F!FK}5YqLF$hq*bFgn9~mJC7c=dD{e* zXQPj{9qmfFejmuA$5BO5v-e4dVdlC|O|NejgNENGNP0nm$8^K}afWl4E8!q&^Le@L>1*0o=A>RjtzTHvRVE3B_v-rRpI{F zyDlvs?-V;Ii*l@eS@|Kqllkm)xN~a}UG{47AX>i&ex&Z@5WuNe*jX56p}a{p?@7R> z<relc?SLU!ynzXf@+9CLa+^r|A%#k^By z@S}ATFmdUAseGV|luZ8lz}C?+-nliUw>+92VfPfqfI`(Q+Sk)$@?Qd?BZa|G6 zZ2Be71U>n%7o~hI?uf0t^ZY$_a8js9q~WBihJATu^ZgFp^sVEq_TrudF)@g0Fb#IDVxA`<-?c-d( zOuTuV6`P8N_r7$91s5b+>_~dNU2(WKX#2FCSmu&UJtFD5Dqm&+`WY5<@q;SPrMe0k zs1wTHrW_&|P^N@REDjWLeS82gr0$@EOS8T8n7W+aV|V@)I9uy-je`N0<|W3|?P^7? zuMKuldf#&ngEcJPt4_o>wR{X-=t)0%-GFK|A`%ywp=ei&_C>aOIC70a!Zcmnm|P*x z%yh|@*`ga$)j+`IXpZpqf!O`a#E`q-#QD2p_l-7kQ*tVm^-qVeH3uMuSBJ*-cgO+y zw*)wpqY4nLen8c)tN@uU~)u4RggIdgt3neQzNGEi472d+BX;Azc1-1-W?4(xCK z;JeUVNEIi)5rNgX-T^>fj9NmQV}LA zZOJV!mI-N&SB6@R1);9-QzoJRVd3{FdGT3c>4#qRLI3N&haVj5@WHidU7Ccz)KrLs7{bXlWMIwA;XW_VS*nl+~VQR-O3GdpgkEjXf$3cZ|Yv!B3}OpIn@An zrpz=39F(d%-K&5$l;rrsP2prILd%gyQO)OzJd76SpwxP4q@&hEDVvRvN8}AR1R9$^ zgI{>IHaFL7{Y=X(K@_h$3_l0$H}}@7o?E-_4wro7QJ$gx7cu(g}^ z^B&-8yHf~mzWo&r)jks!UR`Rf?HRcqwN*zEN$s+=r%>%#%!U_C19doOUR|-R z%^5L1e|55H-eXUVIHz7+xOL4L`H$}@IQK~=KXxMQ^-i?~Xv$jnCqcL`?OE-UkyB!

m|MQL~T}6bJ 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 W6UeY_E*e?@Enu4n0N9_r?EM!Fg1yoJ delta 59242 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 N7}fjaERX(<{vR1!50C%= diff --git a/html/access.php b/html/access.php index 1e8b311d0..d97ae8cae 100644 --- a/html/access.php +++ b/html/access.php @@ -20,7 +20,7 @@ // Copyright Author Dany De Bontridder ddebontridder@yahoo.fr -/*!\file +/*!\file * \brief first page */ require_once("class_idate.php"); @@ -40,7 +40,9 @@ require_once('class_acc_ledger.php'); $cn=new Database(dossier::id()); $user=new User($cn); $user->Check(); -$user->check_dossier(dossier::id()); +if ( $user->check_dossier(dossier::id()) == 'P') { + redirect("extension.php?".dossier::get(),0); +} html_page_start($_SESSION['g_theme']); /* Check Browser version if < IE6 then unsupported */ @@ -80,7 +82,7 @@ echo '

'; echo '
'; -/* +/* * Mini Report */ $report=$user->get_mini_report(); @@ -101,7 +103,7 @@ if ( $report != 0 ) { } else { $periode=new Periode($cn); $limit=$periode->limit_year($exercice); - + $result=$rapport->get_row($limit['start'],$limit['end'],'periode'); $ix=0; echo '
'; @@ -125,7 +127,7 @@ if ( $report != 0 ) { echo ''; echo ''; } -/* +/* * Todo list */ echo JS_TODO; diff --git a/html/admin/sql/patch/upgrade63.sql b/html/admin/sql/patch/upgrade63.sql new file mode 100644 index 000000000..afaf0b8bd --- /dev/null +++ b/html/admin/sql/patch/upgrade63.sql @@ -0,0 +1,62 @@ +begin; + +DROP FUNCTION insert_jrnx(character varying, numeric, poste_comptable, integer, integer, boolean, text, integer, text); + +CREATE OR REPLACE FUNCTION insert_jrnx(p_date character varying, p_montant numeric, p_poste poste_comptable, p_grpt integer, p_jrn_def integer, p_debit boolean, p_tech_user text, p_tech_per integer, p_qcode text,p_comment text) + 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::text; + -- if we find only one q_code for a accountancy account + -- then retrieve it + if nCount_qcode = 1 then + select j_qcode::text into sCode + from vw_poste_qcode where j_poste=p_poste::text; + else + sCode=NULL; + end if; + + end if; + + insert into jrnx + ( + j_date, + j_montant, + j_poste, + j_grpt, + j_jrn_def, + j_debit, + j_text, + 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_comment, + p_tech_user, + p_tech_per, + sCode + ); + +return; +end; +$BODY$ +LANGUAGE plpgsql; + +update version set val=64; + +commit; diff --git a/html/admin/sql/patch/upgrade64.sql b/html/admin/sql/patch/upgrade64.sql new file mode 100644 index 000000000..a580f8402 --- /dev/null +++ b/html/admin/sql/patch/upgrade64.sql @@ -0,0 +1,67 @@ +begin; + +DROP VIEW vw_fiche_attr; + +CREATE OR REPLACE 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, h.av_text AS vw_description, i.av_text AS tva_num, 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 ( 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 = 9) h ON a.f_id = h.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 = 13) i ON a.f_id = i.f_id + LEFT JOIN tva_rate ON d.av_text = tva_rate.tva_id::text + JOIN fiche_def USING (fd_id); + +update version set val=65; + +commit; + diff --git a/html/admin/sql/patch/upgrade65.sql b/html/admin/sql/patch/upgrade65.sql new file mode 100644 index 000000000..b1d1ce290 --- /dev/null +++ b/html/admin/sql/patch/upgrade65.sql @@ -0,0 +1,4 @@ +begin; +SELECT setval('public.mod_payment_mp_id_seq', 10, true); +update version set val=66; +commit; \ No newline at end of file diff --git a/html/admin/sql/patch/upgrade66.sql b/html/admin/sql/patch/upgrade66.sql new file mode 100644 index 000000000..219a1d7b2 --- /dev/null +++ b/html/admin/sql/patch/upgrade66.sql @@ -0,0 +1,134 @@ +begin; + +drop function account_insert(p_f_id integer, p_account poste_comptable); + +CREATE OR REPLACE FUNCTION account_insert(p_f_id integer, p_account text) + RETURNS integer AS +$BODY$ +declare +nParent tmp_pcmn.pcm_val_parent%type; +sName varchar; +nNew tmp_pcmn.pcm_val%type; +bAuto bool; +nFd_id integer; +nCount integer; +first text; +second text; +begin + + if length(trim(p_account)) != 0 then + -- if there is coma in p_account, treat normally + if position (',' in p_account) = 0 then + raise info 'p_account is not empty'; + select count(*) into nCount from tmp_pcmn where pcm_val=p_account; + raise notice 'found in tmp_pcm %',nCount; + if nCount !=0 then + raise info 'this account exists in tmp_pcmn '; + perform attribut_insert(p_f_id,5,p_account); + else + -- account doesn't exist, create it + select av_text into sName from + attr_value join jnt_fic_att_value using (jft_id) + where + ad_id=1 and f_id=p_f_id; + + nParent:=account_parent(p_account::poste_comptable); + insert into tmp_pcmn(pcm_val,pcm_lib,pcm_val_parent) values (p_account::poste_comptable,sName,nParent); + perform attribut_insert(p_f_id,5,p_account); + + end if; + else + raise info 'presence of a comma'; + -- there is 2 accounts separated by a comma + first := split_part(p_account,',',1); + second := split_part(p_account,',',2); + -- check there is no other coma + raise info 'first value % second value %', first, second; + + if position (',' in first) != 0 or position (',' in second) != 0 then + raise exception 'Too many comas, invalid account'; + end if; + perform attribut_insert(p_f_id,5,p_account); + end if; + else + raise info 'p_account is empty'; + select fd_id into nFd_id from fiche where f_id=p_f_id; + bAuto:= account_auto(nFd_id); + if bAuto = true then + raise notice 'account generated automatically'; + nNew:=account_compute(p_f_id); + raise notice 'nNew %', nNew; + select av_text into sName from + attr_value join jnt_fic_att_value using (jft_id) + where + ad_id=1 and f_id=p_f_id; + nParent:=account_parent(nNew); + perform account_add (nNew,sName); + perform attribut_insert(p_f_id,5,to_char(nNew,'999999999999999999999999')); + + else + -- if there is an account_base then it is the default + select fd_class_base::text into nNew from fiche_def join fiche using (fd_id) where f_id=p_f_id; + if nNew is null or length(trim(nNew)) = 0 then + raise notice 'count is null'; + perform attribut_insert(p_f_id,5,null); + else + perform attribut_insert(p_f_id,5,to_char(nNew,'999999999999999999999999')); + end if; + end if; + end if; + +return 0; +end; +$BODY$ +LANGUAGE 'plpgsql'; + +drop function account_update(p_f_id integer, p_account poste_comptable); + +CREATE OR REPLACE FUNCTION account_update(p_f_id integer, p_account text) + RETURNS integer AS +$BODY$ +declare +nMax fiche.f_id%type; +nCount integer; +nParent tmp_pcmn.pcm_val_parent%type; +sName varchar; +nJft_id attr_value.jft_id%type; +first text; +second text; +begin + + if length(trim(p_account)) != 0 then + if position (',' in p_account) = 0 then + select count(*) into nCount from tmp_pcmn where pcm_val=p_account; + if nCount = 0 then + select av_text into sName from + attr_value join jnt_fic_att_value using (jft_id) + where + ad_id=1 and f_id=p_f_id; + nParent:=account_parent(p_account::poste_comptable); + insert into tmp_pcmn(pcm_val,pcm_lib,pcm_val_parent) values (p_account::poste_comptable,sName,nParent); + end if; + else + raise info 'presence of a comma'; + -- there is 2 accounts separated by a comma + first := split_part(p_account,',',1); + second := split_part(p_account,',',2); + -- check there is no other coma + raise info 'first value % second value %', first, second; + + if position (',' in first) != 0 or position (',' in second) != 0 then + raise exception 'Too many comas, invalid account'; + end if; + end if; + end if; + select jft_id into njft_id from jnt_fic_att_value where f_id=p_f_id and ad_id=5; + update attr_value set av_text=p_account where jft_id=njft_id; + +return njft_id; +end; +$BODY$ +LANGUAGE 'plpgsql'; + +update version set val=67; +commit; \ No newline at end of file diff --git a/html/admin/sql/patch/upgrade67.sql b/html/admin/sql/patch/upgrade67.sql new file mode 100644 index 000000000..203b1b516 --- /dev/null +++ b/html/admin/sql/patch/upgrade67.sql @@ -0,0 +1,177 @@ +begin; + +DROP VIEW vw_fiche_def; +DROP VIEW vw_supplier; +DROP VIEW vw_client; + +alter table fiche_def alter fd_class_base type text; +CREATE OR REPLACE VIEW vw_fiche_def AS + SELECT jnt_fic_attr.fd_id, jnt_fic_attr.ad_id, attr_def.ad_text, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def.frd_id + FROM fiche_def + JOIN jnt_fic_attr USING (fd_id) + JOIN attr_def ON attr_def.ad_id = jnt_fic_attr.ad_id; + +COMMENT ON VIEW vw_fiche_def IS 'all the attributs for card family'; + +CREATE OR REPLACE VIEW vw_supplier AS + SELECT a.f_id, a.av_text AS name, a1.av_text AS quick_code, b.av_text AS tva_num, c.av_text AS poste_comptable, d.av_text AS rue, e.av_text AS code_postal, f.av_text AS pays, g.av_text AS telephone, h.av_text AS email + FROM ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 1) a + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 13) b USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 23) a1 USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 5) c USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 14) d USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 15) e USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 16) f USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 17) g USING (f_id) + LEFT JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 18) h USING (f_id) + WHERE a.frd_id = 8; +CREATE OR REPLACE VIEW vw_client AS + SELECT a.f_id, a.av_text AS name, a1.av_text AS quick_code, b.av_text AS tva_num, c.av_text AS poste_comptable, d.av_text AS rue, e.av_text AS code_postal, f.av_text AS pays, g.av_text AS telephone, h.av_text AS email + FROM ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 1) a + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 13) b USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 23) a1 USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 5) c USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 14) d USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 15) e USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 16) f USING (f_id) + JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 17) g USING (f_id) + LEFT JOIN ( SELECT jnt_fic_att_value.jft_id, fiche.f_id, fiche_def.frd_id, fiche.fd_id, fiche_def.fd_class_base, fiche_def.fd_label, fiche_def.fd_create_account, fiche_def_ref.frd_text, fiche_def_ref.frd_class_base, jnt_fic_att_value.ad_id, attr_value.av_text + FROM fiche + JOIN fiche_def USING (fd_id) + JOIN fiche_def_ref USING (frd_id) + JOIN jnt_fic_att_value USING (f_id) + JOIN attr_value USING (jft_id) + WHERE jnt_fic_att_value.ad_id = 18) h USING (f_id) + WHERE a.frd_id = 9; + + +CREATE OR REPLACE FUNCTION fiche_def_ins_upd() + RETURNS "trigger" AS +$BODY$ +begin + +if position (',' in NEW.fd_class_base) != 0 then + NEW.fd_create_account='f'; + +end if; +return NEW; +end;$BODY$ +LANGUAGE 'plpgsql'; + +CREATE TRIGGER fiche_def_ins_upd + BEFORE INSERT OR UPDATE + ON fiche_def + FOR EACH ROW + EXECUTE PROCEDURE fiche_def_ins_upd(); + +ALTER TABLE stock_goods DROP CONSTRAINT fk_stock_good_f_id; + +ALTER TABLE stock_goods + ADD CONSTRAINT fk_stock_good_f_id FOREIGN KEY (f_id) + REFERENCES fiche (f_id) MATCH SIMPLE + ON UPDATE cascade ON DELETE cascade; + +update version set val=68; +commit; diff --git a/html/ajax.php b/html/ajax.php new file mode 100644 index 000000000..4f1702488 --- /dev/null +++ b/html/ajax.php @@ -0,0 +1,38 @@ +check(true); + +/* if a code has been asked */ +if (isset($_REQUEST['code']) ) { + + $ext=new Extension($cn); + $ext->search('code',$_REQUEST['code']); + if ( $ext->get_parameter('id') != 0 ) { + /* security */ + if ( !isset ($_SESSION['g_user']) || $ext->can_request($_SESSION['g_user']) == 0 ) { + exit(); + } + /* call the ajax script */ + require_once('ext'.DIRECTORY_SEPARATOR.dirname(trim($ext->get_parameter('filepath'))).DIRECTORY_SEPARATOR.'ajax.php'); + } else { + alert(j(_("Cette extension n'existe pas "))); + exit(); + } + +} +?> \ No newline at end of file diff --git a/html/ajax_extension.php b/html/ajax_extension.php index 4f8f4b699..fdea35465 100644 --- a/html/ajax_extension.php +++ b/html/ajax_extension.php @@ -85,7 +85,7 @@ switch($action) { $enable->selected=$ext->get_parameter('enable'); $str_enable=$enable->input(); $r.='
'; - $r.='
'; + $r.=''; $r.=dossier::hidden().HtmlInput::phpsessid(); /* property of the extension */ ob_start(); @@ -142,7 +142,7 @@ switch($action) { $enable->selected='Y'; $str_enable=$enable->input(); $r.='
'; - $r.=''; + $r.=''; $r.=dossier::hidden().HtmlInput::phpsessid(); ob_start(); require_once('template/extension-detail.php'); diff --git a/html/commercial.php b/html/commercial.php index 2bc3b7221..7fba13b00 100644 --- a/html/commercial.php +++ b/html/commercial.php @@ -22,7 +22,7 @@ // Copyright Author Dany De Bontridder ddebontridder@yahoo.fr /*! \file * \brief Base of the module "Gestion", the p_action indicates what - * file must included and this file will manage the request + * file must included and this file will manage the request * (customer, supplier, contact,...) */ include_once ("ac_common.php"); @@ -41,7 +41,7 @@ $rep=new Database($gDossier); require_once ("class_user.php"); $User=new User($rep); $User->Check(); -$User->check_dossier($gDossier); +if ($User->check_dossier($gDossier)=='P')exit(); //----------------------------------------------------- // update preference @@ -132,14 +132,14 @@ echo JS_AJAX_FICHE; //----------------------------------------------------- // p_action == pref //----------------------------------------------------- -if ( $p_action == "pref" ) +if ( $p_action == "pref" ) { require_once("pref.inc.php"); } //----------------------------------------------------- // p_action == impression //----------------------------------------------------- -if ( $p_action == "impress" ) +if ( $p_action == "impress" ) { require_once("impress.inc.php"); } @@ -148,7 +148,7 @@ if ( $p_action == "impress" ) //----------------------------------------------------- // p_action == adm //----------------------------------------------------- -if ( $p_action == "adm" ) +if ( $p_action == "adm" ) { $User->can_request(GEADM,1); require_once("adm.inc.php"); @@ -156,7 +156,7 @@ if ( $p_action == "adm" ) //----------------------------------------------------- // p_action == client //----------------------------------------------------- -if ( $p_action == "client" ) +if ( $p_action == "client" ) { $User->can_request(GECUST,1); require_once("client.inc.php"); @@ -164,7 +164,7 @@ if ( $p_action == "client" ) // $p_action == fournisseur //----------------------------------------------------- // Fournisseur -if ( $p_action == 'supplier') +if ( $p_action == 'supplier') { $User->can_request(GESUPPL,1); require_once("supplier.inc.php"); @@ -172,20 +172,20 @@ if ( $p_action == 'supplier') //----------------------------------------------------- // action -if ( $p_action == 'suivi_courrier') +if ( $p_action == 'suivi_courrier') { $User->can_request(GECOUR,1); require_once("action.inc.php"); } //----------------------------------------------------- // Contact -if ( $p_action == 'fiche') +if ( $p_action == 'fiche') { require_once("fiche.inc.php"); } //----------------------------------------------------- // Impression -if ( $p_action == 'impress') +if ( $p_action == 'impress') { if ( $User->check_action(IMPRAP)==1 || $User->check_action(IMPJRN)==1 || @@ -215,7 +215,7 @@ if ( $p_action=='central') { } //----------------------------------------------------- // Expense -if ( $p_action == 'defreport') +if ( $p_action == 'defreport') { $User->can_request(PARPREDE,1); require_once("report.inc.php"); diff --git a/html/compta.php b/html/compta.php index d64eeec92..5a65f766f 100644 --- a/html/compta.php +++ b/html/compta.php @@ -45,7 +45,7 @@ $cn=new Database($gDossier); require_once ('class_user.php'); $User=new User($cn); $User->Check(); -$User->check_dossier($gDossier); +if ($User->check_dossier($gDossier)=='P') exit(); html_page_start($_SESSION['g_theme']); diff --git a/html/comptanalytic.php b/html/comptanalytic.php index 70fe243f8..9ddfb2fcf 100644 --- a/html/comptanalytic.php +++ b/html/comptanalytic.php @@ -38,7 +38,7 @@ require_once ("class_user.php"); require_once ('user_menu.php'); $User=new User($cn); $User->Check(); -$User->check_dossier($gDossier); +if ($User->check_dossier($gDossier) == 'P') exit(); html_page_start($_SESSION['g_theme']); diff --git a/html/extension.php b/html/extension.php index bd1d933ba..55012d8b1 100644 --- a/html/extension.php +++ b/html/extension.php @@ -35,11 +35,11 @@ require_once('class_iselect.php'); require_once ('constant.security.php'); require_once ('class_user.php'); -html_page_start($_SESSION['g_theme']); +@html_page_start($_SESSION['g_theme']); $cn=new Database(dossier::id()); $user=new User($cn); $user->check(); -$user->check_dossier(dossier::id()); +$only_plugin=$user->check_dossier(dossier::id()); /* javascript file */ @@ -58,16 +58,20 @@ echo JS_INFOBULLE; /* show button to return to access */ echo "

".dossier::name()."

"; +if ( $only_plugin != 'P' ) { + // user with only plugin cannot go back to the dashboard /* return button */ $msg=_('Retour au tableau de bord'); $hidden=dossier::hidden().HtmlInput::phpsessid(); echo << +
+ $hidden +
EOF; - +} /* show all the extension we can access */ $a=new ISelect('code'); $a->value=Extension::make_array($cn); diff --git a/html/js/extension.js b/html/js/extension.js index 2158dfa29..d6b792c08 100644 --- a/html/js/extension.js +++ b/html/js/extension.js @@ -90,25 +90,32 @@ function extDetail(req){ /** *@brief save the extension (add or update) */ -function extension_save(p_obj){ +function extension_save(p_obj_form){ + try{ var dossier=$("gDossier").value; var phpsessid=$('phpsessid').value; var queryString='?gDossier='+dossier; queryString+='&PHPSESSID='+phpsessid; queryString+='&action=se'; // se save extension - // Data must be taken here - var data=p_obj.serialize(false); + // Data must be taken here + try{ + var data=$(p_obj_form).serialize(false); + } catch(f){ + var sType=p_obj_form.tagName; + var sName=p_obj_form.id; + var nbElement=p_obj_form.elements.length; + alert("Message"+sName+" "+sType+" Nb Element"+nbElement+" "+f.message+"\n"); + throw (f); + } queryString+='&'+data; - $(content).innerHTML=''; - var action=new Ajax.Request ( 'ajax_extension.php', - { - method:'POST', - parameters:queryString, - onFailure:errorExtension, - onSuccess:successSave - } - ); - hideIPopup('dtext'); + $("dtext_content").innerHTML=''; + var action=new Ajax.Request ( 'ajax_extension.php', { method:'POST', parameters:queryString,onFailure:errorExtension, + onSuccess:successSave } ); + + hideIPopup('dtext'); + } catch(e) { + alert("Probleme extension_save "+e._message+"\n"+e.description); + } } function errorExtension(){ alert('Ajax extension failed'); diff --git a/html/js/scripts.js b/html/js/scripts.js index 379e35c79..b634d58d9 100644 --- a/html/js/scripts.js +++ b/html/js/scripts.js @@ -74,10 +74,11 @@ function refresh_window() { } /** + *@fn encodeJSON(obj) *@brief we receive a json object as parameter and the function returns the string * with the format variable=value&var2=val2... */ -var encodeJSON=function(obj) { +function encodeJSON(obj) { if (typeof obj != 'object') {alert('encodeParameter obj n\'est pas un objet');} try{ var str='';var e=0; @@ -89,10 +90,10 @@ var encodeJSON=function(obj) { return str; } catch(e){alert('encodeParameter '+e.message);} } -var hide=function(p_param){ +function hide(p_param){ g(p_param).style.display='none'; } -var show=function(p_param){ +function show(p_param){ g(p_param).style.display='block'; } @@ -215,8 +216,9 @@ function unescape_xml(code_html) { function getNodeText(xmlNode) { if(!xmlNode) return ''; - if(typeof(xmlNode.textContent) != "undefined") return xmlNode.textContent; - return xmlNode.firstChild.nodeValue; + if(typeof(xmlNode.textContent) != "undefined") { return xmlNode.textContent; } + if ( xmlNode.firstChild && xmlNode.firstChild.nodeValue ) return xmlNode.firstChild.nodeValue; + return ""; } /** *@brief change the periode in the calendar of the dashboard @@ -248,7 +250,8 @@ function change_month_success(req) { } +function loading() { return '';} function ajax_misc_failure() { alert('Ajax Misc failed'); -} \ No newline at end of file +} diff --git a/html/js/todo_list.js b/html/js/todo_list.js index 13241bb6f..d79dff51a 100644 --- a/html/js/todo_list.js +++ b/html/js/todo_list.js @@ -28,7 +28,7 @@ function todo_list_show(p_id) { var gDossier=$('gDossier').value; var phpsessid=$('phpsessid').value; - + try { var action=new Ajax.Request( 'todo_list.php', { @@ -38,6 +38,9 @@ function todo_list_show(p_id) { onSuccess:todo_list_show_success } ); + } catch (e) { + alert(" Envoi ajax non possible" + e.message); + } return false; } function todo_list_show_success(req) { diff --git a/html/lang/en_US/LC_MESSAGES/messages.po b/html/lang/en_US/LC_MESSAGES/messages.po index 9e63ca435..ead3ea115 100644 --- a/html/lang/en_US/LC_MESSAGES/messages.po +++ b/html/lang/en_US/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-21 16:16+0100\n" +"POT-Creation-Date: 2010-02-08 22:29+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -76,6 +76,8 @@ msgstr "Dashboard" #: include/class_acc_ledger_sold.php:1033 #: include/class_acc_ledger_sold.php:494 #: include/class_acc_ledger_sold.php:1035 +#: include/class_acc_ledger_sold.php:547 +#: include/class_acc_ledger_sold.php:1088 msgid "Client" msgstr "Customer" @@ -90,6 +92,8 @@ msgstr "Customer" #: include/class_acc_ledger_purchase.php:934 #: include/class_acc_ledger_purchase.php:865 #: include/class_acc_ledger_purchase.php:938 +#: include/class_acc_ledger_purchase.php:943 +#: include/class_acc_ledger_purchase.php:1016 msgid "Fournisseur" msgstr "Supplier" @@ -114,6 +118,7 @@ msgstr "Stock" #: include/template/security_list_action.php:59 include/impress.inc.php:34 #: include/action.common.inc.php:265 include/user_menu.php:185 #: include/template/detail-action.php:160 +#: include/template/detail-action.php:178 include/user_menu.php:195 msgid "Fiche" msgstr "Card" @@ -142,7 +147,7 @@ msgid "Aucune période trouvéee !!!" msgstr "No period found" #: include/class_user.php:631 include/class_user.php:660 -#: include/class_user.php:664 +#: include/class_user.php:664 include/class_user.php:668 msgid "Dossier non accessible" msgstr "Folder not accessible" @@ -220,43 +225,53 @@ msgid "Retour" msgstr "Return" #: include/user_menu.php:186 include/user_menu.php:178 +#: include/user_menu.php:188 msgid "Grand Livre" msgstr "Ledger" #: include/user_menu.php:186 include/user_menu.php:178 +#: include/user_menu.php:188 msgid "Grand livre : toutes les opérations" msgstr "Ledger : all entries" #: include/user_menu.php:187 include/user_menu.php:179 +#: include/class_acc_payment.php:343 include/user_menu.php:189 msgid "Vente" msgstr "Sale" #: include/user_menu.php:187 include/user_menu.php:179 +#: include/user_menu.php:189 msgid "Journal de vente / produit" msgstr "Ledger of sales" #: include/user_menu.php:188 include/class_anticipation.php:198 #: include/class_anticipation.php:192 include/user_menu.php:180 +#: include/user_menu.php:190 msgid "Dépense" msgstr "Purchase" #: include/user_menu.php:188 include/user_menu.php:180 +#: include/user_menu.php:190 msgid "Journaux de dépense, d'achat" msgstr "Ledger of purchase" #: include/user_menu.php:189 include/user_menu.php:181 +#: include/user_menu.php:191 msgid "Financier" msgstr "Financial" #: include/user_menu.php:189 include/user_menu.php:181 +#: include/user_menu.php:191 msgid "Journaux financiers: les banques, la caisse" msgstr "Financial ledger : bank,.." #: include/user_menu.php:190 include/user_menu.php:182 +#: include/user_menu.php:192 msgid "Ecriture directe" msgstr "Direct Writing" #: include/user_menu.php:190 include/user_menu.php:182 +#: include/user_menu.php:192 msgid "Ecriture directe dans les journaux" msgstr "Write directly in a ledger" @@ -268,144 +283,151 @@ msgstr "Write directly in a ledger" #: include/template/security_list_action.php:65 #: include/template/security_list_action.php:73 include/compta_ach.inc.php:60 #: include/compta_ven.inc.php:59 include/user_menu.php:184 +#: include/user_menu.php:194 msgid "Impression" msgstr "Print" #: include/user_menu.php:193 include/user_menu.php:185 +#: include/user_menu.php:195 msgid "Ajouter, modifier ou effacer des fiches" msgstr "Add,modifier or remove card" #: include/user_menu.php:194 include/user_menu.php:186 +#: include/user_menu.php:196 msgid "Avancé" msgstr "Advanced" #: include/user_menu.php:194 include/user_menu.php:186 +#: include/user_menu.php:196 msgid "Opérations délicates" msgstr "Advanced operation" #: include/user_menu.php:355 include/user_menu.php:223 -#: include/user_menu.php:215 +#: include/user_menu.php:215 include/user_menu.php:225 msgid "Ecritures definies" msgstr "Defined entries" #: include/user_menu.php:356 include/user_menu.php:224 -#: include/user_menu.php:216 +#: include/user_menu.php:216 include/user_menu.php:226 msgid "Periode" msgstr "Period" #: include/user_menu.php:356 include/user_menu.php:224 -#: include/user_menu.php:216 +#: include/user_menu.php:216 include/user_menu.php:226 msgid "Gestion des periodes" msgstr "Period management" #: include/user_menu.php:357 include/user_menu.php:225 -#: include/user_menu.php:217 +#: include/user_menu.php:217 include/user_menu.php:227 msgid "Centralise" msgstr "Centralize" #: include/user_menu.php:357 include/user_menu.php:225 -#: include/user_menu.php:217 +#: include/user_menu.php:217 include/user_menu.php:227 msgid "Centralisation" msgstr "Centralization" #: include/user_menu.php:359 include/user_menu.php:227 -#: include/user_menu.php:219 +#: include/user_menu.php:219 include/user_menu.php:229 msgid "Gestion des stocks" msgstr "Stock control" #: include/user_menu.php:360 include/user_menu.php:228 #: include/impress.inc.php:35 include/user_menu.php:220 +#: include/user_menu.php:230 msgid "Rapport" msgstr "Report" #: include/user_menu.php:361 include/user_menu.php:229 -#: include/user_menu.php:221 +#: include/user_menu.php:221 include/user_menu.php:231 msgid "Import Banque" msgstr "Bank import" #: include/user_menu.php:361 include/template/form_ledger_fin.php:6 #: include/user_menu.php:229 include/class_anticipation.php:198 #: include/class_anticipation.php:192 include/user_menu.php:221 +#: include/user_menu.php:231 msgid "Banque" msgstr "Bank" #: include/user_menu.php:362 include/user_menu.php:230 -#: include/user_menu.php:222 +#: include/user_menu.php:222 include/user_menu.php:232 msgid "Ecriture ouverture" msgstr "Opening entries" #: include/user_menu.php:363 include/user_menu.php:231 -#: include/user_menu.php:223 +#: include/user_menu.php:223 include/user_menu.php:233 msgid "Vérification" msgstr "Check in" #: include/user_menu.php:437 include/user_menu.php:305 -#: include/user_menu.php:297 +#: include/user_menu.php:297 include/user_menu.php:307 msgid "Utilisateurs" msgstr "Users" #: include/user_menu.php:437 include/user_menu.php:305 -#: include/user_menu.php:297 +#: include/user_menu.php:297 include/user_menu.php:307 msgid "Gestion des utilisateurs" msgstr "Users managements" #: include/user_menu.php:438 include/user_menu.php:306 -#: include/user_menu.php:298 +#: include/user_menu.php:298 include/user_menu.php:308 msgid "Dossiers" msgstr "Folders" #: include/user_menu.php:438 include/user_menu.php:306 -#: include/user_menu.php:298 +#: include/user_menu.php:298 include/user_menu.php:308 msgid "Gestion des dossiers" msgstr "Folders managements" #: include/user_menu.php:439 include/user_menu.php:307 -#: include/user_menu.php:299 +#: include/user_menu.php:299 include/user_menu.php:309 msgid "Modèles" msgstr "Template" #: include/user_menu.php:439 include/user_menu.php:307 -#: include/user_menu.php:299 +#: include/user_menu.php:299 include/user_menu.php:309 msgid "Gestion des modèles" msgstr "Template management" #: include/user_menu.php:440 include/user_menu.php:308 -#: include/user_menu.php:300 +#: include/user_menu.php:300 include/user_menu.php:310 msgid "Restaure" msgstr "Restore" #: include/user_menu.php:440 include/user_menu.php:308 -#: include/user_menu.php:300 +#: include/user_menu.php:300 include/user_menu.php:310 msgid "Restaure une base de données" msgstr "Restore a folder" #: include/user_menu.php:441 include/user_menu.php:575 #: include/user_menu.php:309 include/user_menu.php:301 +#: include/user_menu.php:311 msgid "Accueil" msgstr "Homepage" #: include/user_menu.php:442 include/user_menu.php:310 -#: include/user_menu.php:302 +#: include/user_menu.php:302 include/user_menu.php:312 msgid "Sortie" msgstr "Logout" #: include/user_menu.php:466 include/user_menu.php:334 -#: include/user_menu.php:326 +#: include/user_menu.php:326 include/user_menu.php:336 msgid "Sociétés" msgstr "Company" #: include/user_menu.php:466 include/user_menu.php:334 -#: include/user_menu.php:326 +#: include/user_menu.php:326 include/user_menu.php:336 msgid "Parametre societe" msgstr "Company parametes" #: include/user_menu.php:467 include/user_menu.php:335 -#: include/user_menu.php:327 +#: include/user_menu.php:327 include/user_menu.php:337 msgid "Divers" msgstr "Miscelleanous" #: include/user_menu.php:467 include/user_menu.php:335 -#: include/user_menu.php:327 +#: include/user_menu.php:327 include/user_menu.php:337 msgid "Devise, moyen de paiement" msgstr "Currency, " @@ -492,7 +514,7 @@ msgstr "Creation and modification of ledger" #: include/user_menu.php:494 include/user_menu.php:362 #: include/user_menu.php:361 include/user_menu.php:254 #: include/user_menu.php:360 include/user_menu.php:246 -#: include/user_menu.php:352 +#: include/user_menu.php:352 include/user_menu.php:256 msgid "Création" msgstr "Creation" @@ -536,7 +558,7 @@ msgstr "Other folder" #: include/user_menu.php:579 html/user_login.php:73 html/user_login.php:74 #: include/user_menu.php:447 html/user_login.php:82 include/user_menu.php:446 -#: include/user_menu.php:445 include/user_menu.php:437 +#: include/user_menu.php:445 include/user_menu.php:437 html/user_login.php:81 msgid "Deconnexion" msgstr "Disconnect" @@ -564,6 +586,8 @@ msgstr "Management" #: include/class_acc_ledger_sold.php:507 include/class_acc_ledger_sold.php:509 #: include/user_menu.php:449 include/class_acc_ledger_purchase.php:958 #: include/class_acc_ledger_sold.php:511 include/user_menu.php:441 +#: include/class_acc_ledger_purchase.php:1036 +#: include/class_acc_ledger_sold.php:564 msgid "Compt. Analytique" msgstr "Cost Accounting" @@ -575,11 +599,11 @@ msgstr "Budget" msgid " Cette action ne vous est pas autorisée Contactez votre responsable" msgstr "This action is not authorized contact your administrator" -#: html/access.php:71 html/access.php:72 html/access.php:73 +#: html/access.php:71 html/access.php:72 html/access.php:73 html/access.php:75 msgid "Votre base de données n'est pas à jour" msgstr "Your database is not updated" -#: html/access.php:72 html/access.php:73 html/access.php:74 +#: html/access.php:72 html/access.php:73 html/access.php:74 html/access.php:76 msgid "cliquez ici pour appliquer le patch" msgstr "Click here to apply the patch" @@ -603,13 +627,16 @@ msgstr "Todo list" #: include/class_acc_ledger_purchase.php:924 #: include/class_acc_ledger_sold.php:480 include/class_acc_ledger_sold.php:482 #: include/class_acc_ledger_purchase.php:928 -#: include/class_acc_ledger_sold.php:484 +#: include/class_acc_ledger_sold.php:484 html/access.php:158 +#: include/class_acc_ledger_purchase.php:1006 +#: include/class_acc_ledger_sold.php:537 msgid "Date" msgstr "Date" #: html/access.php:110 include/template/detail-action.php:132 #: html/access.php:111 html/access.php:157 #: include/template/detail-action.php:136 +#: include/template/detail-action.php:150 html/access.php:159 msgid "Titre" msgstr "Title" @@ -633,6 +660,9 @@ msgstr "Title" #: include/class_acc_ledger_sold.php:491 #: include/template/detail-action.php:133 #: include/template/detail-action.php:161 +#: include/template/detail-action.php:179 html/access.php:160 +#: include/class_acc_ledger_purchase.php:1013 +#: include/class_acc_ledger_sold.php:544 msgid "Description" msgstr "Description" @@ -642,48 +672,59 @@ msgstr "Description" #: html/access.php:162 html/ajax_extension.php:117 html/ajax_extension.php:174 #: html/parametre.php:283 include/payment_middle.inc.php:57 #: html/ajax_extension.php:111 html/ajax_extension.php:168 -#: html/parametre.php:289 +#: html/parametre.php:289 html/access.php:164 +#: include/payment_middle.inc.php:58 msgid "Sauve" msgstr "Save" #: html/access.php:116 html/access.php:117 html/access.php:163 #: include/detail_adm.inc.php:68 include/detail_client.inc.php:68 #: include/detail_supplier.inc.php:68 include/fiche.inc.php:292 -#: include/fiche.inc.php:380 +#: include/fiche.inc.php:380 html/access.php:165 include/fiche.inc.php:290 +#: include/fiche.inc.php:378 msgid "Annuler" msgstr "Cancel" #: html/access.php:120 html/access.php:121 html/access.php:167 +#: html/access.php:169 include/payment_middle.inc.php:164 msgid "Ajout" msgstr "Add" #: html/access.php:161 html/access.php:162 html/access.php:100 +#: html/access.php:102 msgid "Aucune periode par defaut" msgstr "There is no default period" #: html/access.php:184 html/access.php:185 html/access.php:123 +#: html/access.php:125 msgid "Aucun rapport défini" msgstr "No report defined" #: html/access.php:185 html/access.php:186 html/access.php:124 +#: html/access.php:126 msgid "Cliquez ici pour mettre à jour vos préférences" msgstr "Click here to update your preference" #: html/user_login.php:77 html/user_login.php:78 html/user_login.php:86 +#: html/user_login.php:85 msgid "Bienvenue" msgstr "Welcome" #: html/user_login.php:77 html/user_login.php:78 html/user_login.php:86 +#: html/user_login.php:85 msgid "dans PhpCompta" msgstr "in PhpCompta" #: html/user_login.php:83 html/user_login.php:84 html/user_login.php:92 #: include/class_acc_ledger_fin.php:763 include/class_acc_ledger.php:2176 #: include/fiche.inc.php:74 include/class_acc_ledger_fin.php:764 +#: html/user_login.php:91 include/class_acc_ledger_fin.php:819 +#: include/class_acc_ledger.php:2195 include/fiche.inc.php:72 msgid "Rechercher" msgstr "Search" #: html/user_login.php:92 html/user_login.php:93 html/user_login.php:101 +#: html/user_login.php:100 msgid "Donnez une partie du nom du dossier à rechercher" msgstr "Give the a part of the folder name " @@ -739,6 +780,7 @@ msgid "Aide" msgstr "Help" #: html/user_login.php:72 html/user_login.php:73 html/user_login.php:81 +#: html/user_login.php:80 msgid "Préférence" msgstr "Preference" @@ -839,6 +881,7 @@ msgid "Nom" msgstr "Name" #: include/dossier.inc.php:267 include/payment_middle.inc.php:93 +#: include/payment_middle.inc.php:128 msgid "Modifie" msgstr "Modify" @@ -872,7 +915,7 @@ msgid "" "navigateur à jour" msgstr "For a better web experience, take the time to update your brower" -#: html/user_login.php:79 html/user_login.php:87 +#: html/user_login.php:79 html/user_login.php:87 html/user_login.php:86 msgid "Choississez votre dossier" msgstr "Select your folder" @@ -941,6 +984,10 @@ msgstr "You have to create first a category of card in the card menu" #: include/class_acc_ledger_fin.php:172 include/class_acc_ledger.php:1240 #: include/class_acc_ledger_purchase.php:592 #: include/class_acc_ledger_sold.php:773 include/class_action.php:260 +#: include/class_action.php:261 include/class_acc_ledger_fin.php:192 +#: include/class_acc_ledger_purchase.php:663 +#: include/class_acc_ledger_purchase.php:670 +#: include/class_acc_ledger_sold.php:819 include/class_acc_ledger_sold.php:826 msgid "Créer une nouvelle fiche" msgstr "Add a new card" @@ -1004,6 +1051,7 @@ msgstr "Account. Item" #: include/class_acc_ledger.php:1151 include/class_acc_ledger.php:1310 #: include/class_acc_ledger.php:1150 include/class_acc_ledger.php:1309 #: include/class_anticipation.php:304 include/class_anticipation.php:298 +#: html/annulation.php:414 msgid "Débit" msgstr "Debit" @@ -1014,7 +1062,8 @@ msgstr "Receipt" #: include/class_acc_ledger.php:1382 include/class_acc_ledger.php:1308 #: include/class_acc_ledger.php:1307 include/payment_middle.inc.php:87 -#: include/template/forecast-detail.php:10 +#: include/template/forecast-detail.php:10 include/payment_middle.inc.php:122 +#: include/template/new_mod_payment.php:7 msgid "Libellé" msgstr "Label" @@ -1059,7 +1108,7 @@ msgid "Balance incorrecte " msgstr "wrong balance" #: include/class_acc_ledger.php:2254 include/class_acc_ledger.php:2180 -#: include/class_acc_ledger.php:2187 +#: include/class_acc_ledger.php:2187 include/class_acc_ledger.php:2206 msgid "Afficher recherche" msgstr "Display search" @@ -1147,7 +1196,8 @@ msgstr "Caution, the receipt number already exists and has been changed" #: include/class_acc_ledger_purchase.php:1223 #: include/class_acc_ledger_sold.php:750 include/compta_ach.inc.php:308 #: include/compta_ach.inc.php:364 include/compta_ven.inc.php:321 -#: include/compta_ven.inc.php:380 +#: include/compta_ven.inc.php:380 include/class_acc_ledger_purchase.php:1278 +#: include/class_acc_ledger_sold.php:803 msgid "Mise à jour paiement" msgstr "Update payment" @@ -1196,6 +1246,8 @@ msgstr "Entry saved" #: include/class_acc_ledger_sold.php:1044 #: include/class_acc_ledger_purchase.php:874 #: include/class_acc_ledger_sold.php:1046 +#: include/class_acc_ledger_purchase.php:952 +#: include/class_acc_ledger_sold.php:1099 msgid "Ajout article" msgstr "Add item" @@ -1267,12 +1319,13 @@ msgid "Ajout d'une ligne" msgstr "Add a row" #: include/quick_writing.inc.php:110 include/fiche.inc.php:114 -#: include/quick_writing.inc.php:114 +#: include/quick_writing.inc.php:114 include/fiche.inc.php:112 msgid "Sauvez" msgstr "Save" #: include/quick_writing.inc.php:113 include/quick_writing.inc.php:117 #: include/class_anticipation.php:305 include/class_anticipation.php:299 +#: html/annulation.php:429 msgid "Crédit" msgstr "Credit" @@ -1304,6 +1357,8 @@ msgstr "" #: include/class_acc_ledger_sold.php:484 include/class_acc_ledger_sold.php:486 #: include/class_acc_ledger_purchase.php:932 #: include/class_acc_ledger_sold.php:488 +#: include/class_acc_ledger_purchase.php:1010 +#: include/class_acc_ledger_sold.php:541 msgid "Journal" msgstr "Ledger" @@ -1330,6 +1385,8 @@ msgstr "Card containing" #: html/ajax_poste.php:75 html/search_ca.php:48 html/search_ca.php:56 #: include/class_anc_balance_double.php:280 include/quick_writing.inc.php:177 #: include/user_menu.php:247 include/user_menu.php:467 +#: include/class_acc_payment.php:263 include/user_menu.php:257 +#: include/user_menu.php:477 msgid "Recherche" msgstr "Search" @@ -1338,14 +1395,17 @@ msgid "Vous devez choisir une catgorie" msgstr "You must use a category" #: include/class_fiche_def.php:409 include/class_fiche_def.php:413 +#: include/class_fiche_def.php:407 msgid "Label" msgstr "Label" #: include/class_fiche_def.php:418 include/class_fiche_def.php:422 +#: include/class_fiche_def.php:416 msgid "Poste Comptable de base" msgstr "Accounting item of base" #: include/class_fiche_def.php:424 include/class_fiche_def.php:428 +#: include/class_fiche_def.php:422 msgid "Chaque fiche aura automatiquement son propre poste comptable : " msgstr "Each card will automatically have his own accounting item" @@ -1378,33 +1438,34 @@ msgstr "Otherwise the programm may have misfunctions" #: include/fiche.inc.php:106 include/forecast.inc.php:239 #: include/forecast.inc.php:254 include/forecast.inc.php:274 -#: include/forecast.inc.php:312 +#: include/forecast.inc.php:312 include/fiche.inc.php:104 msgid "Sauver" msgstr "Save" -#: include/fiche.inc.php:113 +#: include/fiche.inc.php:113 include/fiche.inc.php:111 msgid "Ajoutez cet élément" msgstr "Add this item" -#: include/fiche.inc.php:115 +#: include/fiche.inc.php:115 include/fiche.inc.php:113 msgid "Effacer cette catégorie" msgstr "Remove this categorie" -#: include/fiche.inc.php:115 +#: include/fiche.inc.php:115 include/fiche.inc.php:113 msgid "Vous confirmez ?" msgstr "Do you confirm ?" -#: include/fiche.inc.php:118 +#: include/fiche.inc.php:118 include/fiche.inc.php:116 msgid "Enleve les éléments cochés" msgstr "Remove the checked items" -#: include/fiche.inc.php:121 +#: include/fiche.inc.php:121 include/fiche.inc.php:119 msgid "" "Attention : il n'y aura pas de demande de confirmation pour enlever les \n" "attributs sélectionnés. Il ne sera pas possible de revenir en arrière" msgstr "" #: include/fiche.inc.php:215 include/template/security_list_action.php:4 +#: include/fiche.inc.php:213 msgid "Pas d'accès" msgstr "No access" @@ -1485,7 +1546,7 @@ msgid "Fiches Crédit" msgstr "Card at the credit" #: include/class_fiche_def.php:190 include/class_fiche_def.php:191 -#: include/class_fiche_def.php:187 +#: include/class_fiche_def.php:187 include/class_fiche_def.php:184 msgid "Vous devez choisir une categorie" msgstr "You must select a category" @@ -1552,10 +1613,12 @@ msgid "Ajout Action" msgstr "Add action" #: include/class_fiche.php:305 include/class_fiche.php:345 +#: include/class_fiche.php:356 msgid "Rappel: Poste créé automatiquement à partir de " msgstr "Warning : accounting item create automatically from " #: include/class_fiche.php:312 include/class_fiche.php:352 +#: include/class_fiche.php:363 msgid "Rappel: Poste par défaut sera " msgstr "Warning : by default, the accounting item will be " @@ -1661,16 +1724,19 @@ msgstr "Responsible" #: include/template/detail-action.php:137 #: include/template/form_ledger_fin.php:21 #: include/template/detail-action.php:141 +#: include/template/detail-action.php:155 msgid "Commentaire" msgstr "Comment" #: include/template/detail-action.php:145 #: include/template/detail-action.php:149 +#: include/template/detail-action.php:167 msgid "Détail des articles" msgstr "Item details" #: include/template/detail-action.php:158 #: include/template/detail-action.php:162 +#: include/template/detail-action.php:180 msgid "prix unitaire" msgstr "Price unit" @@ -1691,11 +1757,16 @@ msgstr "Price unit" #: include/class_acc_ledger_purchase.php:955 #: include/class_acc_ledger_sold.php:505 #: include/template/detail-action.php:163 +#: include/template/detail-action.php:181 +#: include/class_acc_ledger_purchase.php:1029 +#: include/class_acc_ledger_purchase.php:1033 +#: include/class_acc_ledger_sold.php:558 msgid "quantité" msgstr "quantity" #: include/template/detail-action.php:160 #: include/template/detail-action.php:164 +#: include/template/detail-action.php:182 msgid "Code TVA" msgstr "VAT Code" @@ -1711,21 +1782,27 @@ msgstr "VAT Code" #: include/class_acc_ledger_purchase.php:952 #: include/class_acc_ledger_sold.php:508 #: include/template/detail-action.php:165 +#: include/template/detail-action.php:183 +#: include/class_acc_ledger_purchase.php:1030 +#: include/class_acc_ledger_sold.php:561 msgid "Montant TVA" msgstr "Amount VAT " #: include/template/detail-action.php:162 #: include/template/detail-action.php:166 +#: include/template/detail-action.php:184 msgid "Montant TVAC" msgstr "Amount VAT included" #: include/template/detail-action.php:188 #: include/template/detail-action.php:192 +#: include/template/detail-action.php:210 msgid "Montrer les détails" msgstr "Show details" #: include/template/detail-action.php:189 #: include/template/detail-action.php:193 +#: include/template/detail-action.php:211 msgid "Cacher les détails" msgstr "Hide details" @@ -1737,12 +1814,14 @@ msgstr "Hide details" #: include/template/form_ledger_detail.php:63 #: include/class_acc_ledger_purchase.php:865 include/compta_ach.inc.php:229 #: include/compta_ven.inc.php:239 include/template/detail-action.php:199 +#: include/template/detail-action.php:217 msgid "Actualiser" msgstr "Refresh" #: include/template/detail-action.php:228 #: include/template/detail-action.php:229 #: include/template/detail-action.php:233 +#: include/template/detail-action.php:251 #, php-format msgid "Voulez-vous effacer le document" msgstr "Would you remove this document" @@ -1750,6 +1829,7 @@ msgstr "Would you remove this document" #: include/template/detail-action.php:247 #: include/template/detail-action.php:248 #: include/template/detail-action.php:252 +#: include/template/detail-action.php:270 msgid "Je ne peux pas ajouter de fichier" msgstr "I can't add this file" @@ -1764,6 +1844,8 @@ msgstr "I can't add this file" #: include/class_acc_ledger_sold.php:481 include/class_acc_ledger_sold.php:483 #: include/class_acc_ledger_purchase.php:929 #: include/class_acc_ledger_sold.php:485 +#: include/class_acc_ledger_purchase.php:1007 +#: include/class_acc_ledger_sold.php:538 msgid "Echeance" msgstr "Limit date" @@ -1782,6 +1864,8 @@ msgstr "Receipt #" #: include/class_acc_ledger_sold.php:498 include/class_acc_ledger_sold.php:500 #: include/class_acc_ledger_purchase.php:946 #: include/class_acc_ledger_sold.php:502 +#: include/class_acc_ledger_purchase.php:1024 +#: include/class_acc_ledger_sold.php:555 msgid "Dénomination" msgstr "Name" @@ -1793,6 +1877,7 @@ msgstr "price/unit without vat" #: include/class_acc_ledger_sold.php:565 include/class_acc_ledger_sold.php:497 #: include/class_acc_ledger_sold.php:499 include/class_acc_ledger_sold.php:500 #: include/class_acc_ledger_sold.php:502 include/class_acc_ledger_sold.php:504 +#: include/class_acc_ledger_sold.php:557 msgid "tva" msgstr "vat" @@ -1808,6 +1893,7 @@ msgstr "tot. vat" #: include/template/form_ledger_detail.php:80 #: include/class_acc_ledger_purchase.php:1049 #: include/class_acc_ledger_purchase.php:1053 +#: include/class_acc_ledger_purchase.php:1131 msgid "Total HTVA" msgstr "Total VAT excluded" @@ -1818,6 +1904,7 @@ msgstr "Total VAT excluded" #: include/template/form_ledger_detail.php:81 #: include/class_acc_ledger_purchase.php:1056 #: include/class_acc_ledger_purchase.php:1060 +#: include/class_acc_ledger_purchase.php:1138 msgid "Total TVA" msgstr "Total VAT" @@ -1828,6 +1915,7 @@ msgstr "Total VAT" #: include/template/form_ledger_detail.php:82 #: include/class_acc_ledger_purchase.php:1059 #: include/class_acc_ledger_purchase.php:1063 +#: include/class_acc_ledger_purchase.php:1141 msgid "Total TVAC" msgstr "Total VAT included" @@ -1837,6 +1925,7 @@ msgstr "Total VAT included" #: include/template/form_ledger_detail.php:84 #: include/class_acc_ledger_purchase.php:952 #: include/class_acc_ledger_purchase.php:956 +#: include/class_acc_ledger_purchase.php:1034 msgid "Total" msgstr "Total" @@ -1909,6 +1998,7 @@ msgid "Comptabilité Analytique" msgstr "Cost Accounting" #: html/access.php:102 html/access.php:103 html/access.php:149 +#: html/access.php:151 msgid "Pense-Bête" msgstr "Todo List" @@ -1918,6 +2008,7 @@ msgstr "Todo List" #: include/class_acc_ledger_sold.php:477 include/class_acc_ledger_sold.php:789 #: include/class_acc_ledger_sold.php:479 include/class_acc_ledger_sold.php:791 #: include/class_acc_ledger_sold.php:481 include/class_acc_ledger_sold.php:793 +#: include/class_acc_ledger_sold.php:534 include/class_acc_ledger_sold.php:846 msgid "En-tête facture client" msgstr "Header invoice customer" @@ -1931,6 +2022,8 @@ msgstr "Header invoice customer" #: include/class_acc_ledger_sold.php:482 include/class_acc_ledger_sold.php:484 #: include/class_acc_ledger_purchase.php:930 #: include/class_acc_ledger_sold.php:486 +#: include/class_acc_ledger_purchase.php:1008 +#: include/class_acc_ledger_sold.php:539 msgid "Période Comptable" msgstr "Accounting Periode" @@ -1940,6 +2033,7 @@ msgstr "Accounting Periode" #: include/class_acc_ledger_sold.php:494 include/class_acc_ledger_sold.php:919 #: include/class_acc_ledger_sold.php:496 include/class_acc_ledger_sold.php:921 #: include/class_acc_ledger_sold.php:498 include/class_acc_ledger_sold.php:923 +#: include/class_acc_ledger_sold.php:551 include/class_acc_ledger_sold.php:976 msgid "Détail articles vendus" msgstr "Detail sold items" @@ -1947,7 +2041,7 @@ msgstr "Detail sold items" #: include/class_acc_ledger_sold.php:496 #: include/template/extension-detail.php:16 #: include/class_acc_ledger_sold.php:497 include/class_acc_ledger_sold.php:499 -#: include/class_acc_ledger_sold.php:501 +#: include/class_acc_ledger_sold.php:501 include/class_acc_ledger_sold.php:554 msgid "Code" msgstr "Code" @@ -1961,6 +2055,8 @@ msgstr "Code" #: include/class_acc_ledger_sold.php:499 include/class_acc_ledger_sold.php:501 #: include/class_acc_ledger_purchase.php:947 #: include/class_acc_ledger_sold.php:503 +#: include/class_acc_ledger_purchase.php:1025 +#: include/class_acc_ledger_sold.php:556 msgid "prix" msgstr "price" @@ -1974,12 +2070,15 @@ msgstr "price" #: include/class_acc_ledger_sold.php:505 include/class_acc_ledger_sold.php:507 #: include/class_acc_ledger_purchase.php:953 #: include/class_acc_ledger_sold.php:509 +#: include/class_acc_ledger_purchase.php:1031 +#: include/class_acc_ledger_sold.php:562 msgid "Montant HTVA" msgstr "Amount without VAT" #: include/class_acc_ledger_sold.php:627 include/class_acc_ledger_sold.php:559 #: include/class_acc_ledger_sold.php:561 include/class_acc_ledger_sold.php:562 #: include/class_acc_ledger_sold.php:564 include/class_acc_ledger_sold.php:566 +#: include/class_acc_ledger_sold.php:619 msgid "Attention Différence" msgstr "Warning difference" @@ -1993,6 +2092,8 @@ msgstr "Warning difference" #: include/class_acc_ledger_sold.php:589 include/class_acc_ledger_sold.php:591 #: include/class_acc_ledger_purchase.php:1046 #: include/class_acc_ledger_sold.php:593 +#: include/class_acc_ledger_purchase.php:1124 +#: include/class_acc_ledger_sold.php:646 msgid "verifie CA" msgstr "Check CA" @@ -2004,6 +2105,8 @@ msgstr "Check CA" #: include/class_acc_ledger_sold.php:818 include/class_acc_ledger_sold.php:820 #: include/class_acc_ledger_purchase.php:645 #: include/class_acc_ledger_sold.php:822 +#: include/class_acc_ledger_purchase.php:723 +#: include/class_acc_ledger_sold.php:875 msgid "Aucune période ouverte" msgstr "No periode opened" @@ -2015,6 +2118,8 @@ msgstr "No periode opened" #: include/class_acc_ledger_sold.php:823 include/class_acc_ledger_sold.php:825 #: include/class_acc_ledger_purchase.php:652 #: include/class_acc_ledger_sold.php:827 +#: include/class_acc_ledger_purchase.php:730 +#: include/class_acc_ledger_sold.php:880 msgid "Période comptable" msgstr "Accounting periode" @@ -2028,7 +2133,9 @@ msgstr "Accounting periode" #: include/class_acc_ledger_sold.php:833 include/class_acc_ledger_sold.php:835 #: include/class_acc_ledger_fin.php:732 #: include/class_acc_ledger_purchase.php:662 -#: include/class_acc_ledger_sold.php:837 +#: include/class_acc_ledger_sold.php:837 include/class_acc_ledger_fin.php:787 +#: include/class_acc_ledger_purchase.php:740 +#: include/class_acc_ledger_sold.php:890 msgid "Pas de journal disponible" msgstr "No available ledger" @@ -2055,6 +2162,8 @@ msgstr "Remove" #: include/class_acc_ledger_sold.php:1052 #: include/class_acc_ledger_sold.php:1054 #: include/class_acc_ledger_purchase.php:887 +#: include/class_acc_ledger_purchase.php:965 +#: include/class_acc_ledger_sold.php:1107 msgid "Payé par" msgstr "Paid by" @@ -2068,6 +2177,7 @@ msgid "Fiche contenant" msgstr "Card containing" #: include/class_ipopup.php:94 include/class_ipopup.php:96 +#: include/class_ipopup.php:100 #, php-format msgid "Fermer" msgstr "close" @@ -2082,7 +2192,7 @@ msgid "Vous n'avez pas donné de fournisseur" msgstr "You haven't give any supplier" #: include/class_acc_ledger_purchase.php:68 -#: include/class_acc_ledger_sold.php:68 +#: include/class_acc_ledger_sold.php:68 html/annulation.php:134 msgid "Date invalide" msgstr "Invalid date" @@ -2127,6 +2237,12 @@ msgstr "You cannot enter an accounting entry" #: include/class_acc_ledger_sold.php:106 include/class_acc_ledger_sold.php:118 #: include/class_acc_ledger_sold.php:129 include/class_acc_ledger_sold.php:131 #: include/class_acc_ledger_sold.php:137 include/class_acc_ledger_sold.php:147 +#: include/class_acc_ledger_purchase.php:127 +#: include/class_acc_ledger_purchase.php:143 +#: include/class_acc_ledger_purchase.php:145 +#: include/class_acc_ledger_purchase.php:172 +#: include/class_acc_ledger_sold.php:140 include/class_acc_ledger_sold.php:142 +#: include/class_acc_ledger_sold.php:148 include/class_acc_ledger_sold.php:167 msgid "La fiche " msgstr "The card" @@ -2136,6 +2252,8 @@ msgstr "The card" #: include/class_acc_ledger_purchase.php:105 #: include/class_acc_ledger_purchase.php:141 #: include/class_acc_ledger_sold.php:106 include/class_acc_ledger_sold.php:137 +#: include/class_acc_ledger_purchase.php:151 +#: include/class_acc_ledger_sold.php:148 msgid "n'a pas de poste comptable" msgstr "has no accounting entry" @@ -2145,6 +2263,9 @@ msgstr "has no accounting entry" #: include/class_acc_ledger_purchase.php:110 #: include/class_acc_ledger_purchase.php:145 #: include/class_acc_ledger_sold.php:111 include/class_acc_ledger_sold.php:141 +#: include/class_acc_ledger_purchase.php:120 +#: include/class_acc_ledger_purchase.php:166 +#: include/class_acc_ledger_sold.php:122 include/class_acc_ledger_sold.php:161 msgid "Pour la fiche " msgstr "For the card" @@ -2152,6 +2273,8 @@ msgstr "For the card" #: include/class_acc_ledger_sold.php:110 include/class_acc_ledger_sold.php:140 #: include/class_acc_ledger_purchase.php:110 #: include/class_acc_ledger_sold.php:111 include/class_acc_ledger_sold.php:141 +#: include/class_acc_ledger_purchase.php:120 +#: include/class_acc_ledger_sold.php:122 include/class_acc_ledger_sold.php:161 msgid " le poste comptable [" msgstr " The accounting item [" @@ -2161,6 +2284,9 @@ msgstr " The accounting item [" #: include/class_acc_ledger_purchase.php:110 #: include/class_acc_ledger_purchase.php:145 #: include/class_acc_ledger_sold.php:141 +#: include/class_acc_ledger_purchase.php:120 +#: include/class_acc_ledger_purchase.php:166 +#: include/class_acc_ledger_sold.php:161 msgid "n'existe pas" msgstr "does not exist" @@ -2170,21 +2296,27 @@ msgstr "does not exist" #: include/class_acc_ledger_purchase.php:117 #: include/class_acc_ledger_purchase.php:151 #: include/class_acc_ledger_sold.php:118 include/class_acc_ledger_sold.php:147 +#: include/class_acc_ledger_purchase.php:127 +#: include/class_acc_ledger_purchase.php:172 +#: include/class_acc_ledger_sold.php:129 include/class_acc_ledger_sold.php:167 msgid "n'est pas accessible à ce journal" msgstr "is not allowed for this ledger" #: include/class_acc_ledger_purchase.php:136 #: include/class_acc_ledger_purchase.php:133 +#: include/class_acc_ledger_purchase.php:143 msgid "a un montant invalide" msgstr "has an invalid amount" #: include/class_acc_ledger_purchase.php:138 #: include/class_acc_ledger_purchase.php:135 +#: include/class_acc_ledger_purchase.php:145 msgid "a une quantité invalide" msgstr "has an invalid quantity" #: include/class_acc_ledger_purchase.php:148 #: include/class_acc_ledger_purchase.php:145 +#: include/class_acc_ledger_purchase.php:166 msgid " le poste comptable" msgstr " the accounting item" @@ -2192,6 +2324,8 @@ msgstr " the accounting item" #: include/class_acc_ledger_sold.php:150 #: include/class_acc_ledger_purchase.php:155 #: include/class_acc_ledger_sold.php:151 +#: include/class_acc_ledger_purchase.php:176 +#: include/class_acc_ledger_sold.php:171 msgid "Il n'y a aucune marchandise" msgstr "There is no item" @@ -2208,6 +2342,8 @@ msgstr "All the purchase ledgers" #: include/class_acc_ledger_purchase.php:921 #: include/class_acc_ledger_purchase.php:612 #: include/class_acc_ledger_purchase.php:925 +#: include/class_acc_ledger_purchase.php:690 +#: include/class_acc_ledger_purchase.php:1003 msgid "En-tête facture fournisseur" msgstr "Header invoice supplier" @@ -2215,6 +2351,7 @@ msgstr "Header invoice supplier" #: include/class_acc_ledger_purchase.php:609 #: include/class_acc_ledger_purchase.php:606 #: include/class_acc_ledger_purchase.php:613 +#: include/class_acc_ledger_purchase.php:691 msgid "Détail articles acheté" msgstr "Details item" @@ -2222,6 +2359,7 @@ msgstr "Details item" #: include/class_acc_ledger_purchase.php:717 #: include/class_acc_ledger_purchase.php:714 #: include/class_acc_ledger_purchase.php:721 +#: include/class_acc_ledger_purchase.php:799 msgid "Fournisseur " msgstr "Supplier" @@ -2230,6 +2368,7 @@ msgstr "Supplier" #: include/class_acc_ledger_purchase.php:941 #: include/class_acc_ledger_purchase.php:938 #: include/class_acc_ledger_purchase.php:942 +#: include/class_acc_ledger_purchase.php:1020 msgid "Détail articles achetés" msgstr "Detail items" @@ -2238,6 +2377,7 @@ msgstr "Detail items" #: include/class_acc_ledger_purchase.php:1058 #: include/class_acc_ledger_purchase.php:1055 #: include/class_acc_ledger_purchase.php:1059 +#: include/class_acc_ledger_purchase.php:1137 msgid "TVA à " msgstr "VAT " @@ -2251,6 +2391,8 @@ msgstr "VAT " #: include/class_acc_ledger_sold.php:687 include/class_acc_ledger_sold.php:689 #: include/class_acc_ledger_purchase.php:1164 #: include/class_acc_ledger_sold.php:691 +#: include/class_acc_ledger_purchase.php:1219 +#: include/class_acc_ledger_sold.php:744 msgid "Ajoutez une pièce justificative " msgstr "Add a receipt" @@ -2272,6 +2414,8 @@ msgstr "or generate an expense report" #: include/class_acc_ledger_sold.php:735 include/class_acc_ledger_sold.php:737 #: include/class_acc_ledger_purchase.php:1212 #: include/class_acc_ledger_sold.php:739 +#: include/class_acc_ledger_purchase.php:1267 +#: include/class_acc_ledger_sold.php:792 msgid "Echeance dépassée" msgstr "Missed deadline" @@ -2285,6 +2429,8 @@ msgstr "Missed deadline" #: include/class_acc_ledger_sold.php:737 include/class_acc_ledger_sold.php:739 #: include/class_acc_ledger_purchase.php:1214 #: include/class_acc_ledger_sold.php:741 +#: include/class_acc_ledger_purchase.php:1269 +#: include/class_acc_ledger_sold.php:794 msgid "Non Payée" msgstr "Not paid" @@ -2302,20 +2448,24 @@ msgid " vous ne pouvez pas encoder à une date antérieure" msgstr " You can not enter an entry before the last operation" #: include/class_acc_ledger_sold.php:110 include/class_acc_ledger_sold.php:111 +#: include/class_acc_ledger_sold.php:122 msgid "] n'existe pas" msgstr "] doesn't exist" #: include/class_acc_ledger_sold.php:128 include/class_acc_ledger_sold.php:129 +#: include/class_acc_ledger_sold.php:140 msgid "a un montant invalide [" msgstr "has an invalid amount" #: include/class_acc_ledger_sold.php:130 include/class_acc_ledger_sold.php:131 +#: include/class_acc_ledger_sold.php:142 msgid "a une quantité invalide [" msgstr " has an invalid quantity" #: include/class_acc_ledger_sold.php:759 include/class_acc_ledger_sold.php:691 #: include/class_acc_ledger_sold.php:693 include/class_acc_ledger_sold.php:694 #: include/class_acc_ledger_sold.php:696 include/class_acc_ledger_sold.php:698 +#: include/class_acc_ledger_sold.php:751 msgid "ou générer une facture" msgstr "or generate an invoice" @@ -2324,6 +2474,8 @@ msgstr "or generate an invoice" #: include/class_acc_ledger_sold.php:707 #: include/class_acc_ledger_purchase.php:1182 #: include/class_acc_ledger_sold.php:709 +#: include/class_acc_ledger_purchase.php:1237 +#: include/class_acc_ledger_sold.php:762 msgid "Numero de bon de commande : " msgstr "Number of ordering" @@ -2332,12 +2484,15 @@ msgstr "Number of ordering" #: include/class_acc_ledger_sold.php:708 #: include/class_acc_ledger_purchase.php:1183 #: include/class_acc_ledger_sold.php:710 +#: include/class_acc_ledger_purchase.php:1238 +#: include/class_acc_ledger_sold.php:763 msgid "Autre information : " msgstr "Other info" #: include/class_acc_ledger_sold.php:861 include/class_acc_ledger_sold.php:793 #: include/class_acc_ledger_sold.php:795 include/class_acc_ledger_sold.php:796 #: include/class_acc_ledger_sold.php:798 include/class_acc_ledger_sold.php:800 +#: include/class_acc_ledger_sold.php:853 msgid "Echéance" msgstr "Date Limit" @@ -2390,7 +2545,7 @@ msgid "" " la cause la plus probable est deux fois le même nom de dossier" msgstr "" -#: include/fiche_def.inc.php:67 +#: include/fiche_def.inc.php:67 include/fiche_def.inc.php:68 msgid "" "sinon le programme fonctionnera mal, utiliser uniquement des chiffres pour " "la classe de base ou rien" @@ -2464,12 +2619,15 @@ msgstr "Except if you give another accounting item when you create the card" #: include/template/detail-action.php:213 #: include/class_acc_ledger_purchase.php:1160 #: include/template/detail-action.php:217 +#: include/template/detail-action.php:235 +#: include/class_acc_ledger_purchase.php:1215 msgid "Document à générer" msgstr "Document to generate" #: include/template/detail-action.php:220 #: include/template/detail-action.php:221 #: include/template/detail-action.php:225 +#: include/template/detail-action.php:243 msgid "Pièces attachées" msgstr "Attachment" @@ -2477,7 +2635,7 @@ msgstr "Attachment" msgid "Aucune periode trouvée" msgstr "No period found" -#: html/ajax_card.php:131 +#: html/ajax_card.php:131 html/ajax_card.php:125 msgid "Aucune catégorie de fiche ne correspondant à votre demande" msgstr "" @@ -2510,7 +2668,7 @@ msgstr "You are disconnected" msgid "Retour au tableau de bord" msgstr "return to the dashboard" -#: html/extension.php:78 html/extension.php:76 +#: html/extension.php:78 html/extension.php:76 html/extension.php:80 msgid "Aucune extension disponible" msgstr "No available plugin" @@ -2518,11 +2676,12 @@ msgstr "No available plugin" #: include/template/security_list_action.php:110 #: include/template/security_list_action.php:92 include/user_menu.php:337 #: include/user_menu.php:450 html/extension.php:84 include/user_menu.php:329 -#: include/user_menu.php:442 +#: include/user_menu.php:442 html/extension.php:88 include/user_menu.php:339 +#: include/user_menu.php:452 msgid "Extension" msgstr "Plugin" -#: html/extension.php:86 html/extension.php:84 +#: html/extension.php:86 html/extension.php:84 html/extension.php:88 msgid "Choix de l'extension" msgstr "Choice of the plugin" @@ -2531,7 +2690,8 @@ msgid "" "Vous ne pouvez pas utiliser cette extension. Contactez votre responsable" msgstr "You cannot use this plugin, contact your administrator" -#: html/extension.php:107 include/ext_inc.php:18 +#: html/extension.php:107 include/ext_inc.php:18 html/ajax.php:33 +#: include/ext_inc.php:20 msgid "Cette extension n'existe pas " msgstr "This plugin do not exist" @@ -2679,7 +2839,7 @@ msgid "Liste opérations" msgstr "Operation list" #: include/class_action.php:372 include/class_action.php:376 -#: include/class_action.php:386 +#: include/class_action.php:386 include/class_action.php:387 msgid "Génére le document" msgstr "Generate the document" @@ -2755,7 +2915,7 @@ msgstr "Saterday" msgid "Dimanche" msgstr "Sunday" -#: include/class_fiche.php:304 +#: include/class_fiche.php:304 include/class_fiche.php:315 msgid "Cette categorie de card n'existe pas" msgstr "This category do not exist" @@ -2765,11 +2925,12 @@ msgstr "the name cannot be empty" #: include/extension.inc.php:52 include/template/extension-detail.php:4 #: include/extension.inc.php:51 include/extension.inc.php:50 +#: include/extension.inc.php:45 msgid "Détail extension" msgstr "Plugin detail" #: include/extension.inc.php:60 include/extension.inc.php:59 -#: include/extension.inc.php:58 +#: include/extension.inc.php:58 include/extension.inc.php:53 msgid "Nouvelle extension" msgstr "New plugin" @@ -2793,19 +2954,21 @@ msgstr "Modify items" msgid "Vous confirmez l\\' effacement ?" msgstr "Do you confirm the removal ?" -#: include/payment_middle.inc.php:58 +#: include/payment_middle.inc.php:58 include/payment_middle.inc.php:60 +#: include/payment_middle.inc.php:95 msgid "Retour sans sauvez" msgstr "Return without saving" -#: include/payment_middle.inc.php:87 +#: include/payment_middle.inc.php:87 include/payment_middle.inc.php:122 +#: include/template/new_mod_payment.php:16 msgid "Type de fiche" msgstr "Type of card" -#: include/payment_middle.inc.php:88 +#: include/payment_middle.inc.php:88 include/payment_middle.inc.php:123 msgid "enregistré dans le journal" msgstr "recorded in the ledger" -#: include/payment_middle.inc.php:89 +#: include/payment_middle.inc.php:89 include/payment_middle.inc.php:124 msgid " Avec la fiche" msgstr " With the card" @@ -2837,7 +3000,7 @@ msgstr "description" msgid "chemin et nom de fichier" msgstr "Path and name of the file" -#: include/template/extension.php:18 +#: include/template/extension.php:18 include/template/extension-detail.php:39 msgid "Activé" msgstr "Activated" @@ -2924,6 +3087,7 @@ msgid "Vous n'avez pas donné de banque" msgstr "You didn't give any bank" #: include/class_acc_ledger_fin.php:734 include/class_acc_ledger_fin.php:735 +#: include/class_acc_ledger_fin.php:790 msgid "Tous les journaux financiers" msgstr "All the financial ledgers" @@ -2961,11 +3125,14 @@ msgstr "Modify the account base, attributes...." #: include/class_acc_ledger_sold.php:355 #: include/class_acc_ledger_purchase.php:478 #: include/class_acc_ledger_sold.php:357 +#: include/class_acc_ledger_purchase.php:546 +#: include/class_acc_ledger_sold.php:400 msgid "Document généré" msgstr "Generated document" #: include/class_acc_ledger_purchase.php:475 #: include/class_acc_ledger_purchase.php:479 +#: include/class_acc_ledger_purchase.php:547 msgid "Note de frais" msgstr "Note of free" @@ -3011,9 +3178,56 @@ msgid "les actions fermées aussi:" msgstr "The closed items" #: include/class_acc_ledger_purchase.php:1171 +#: include/class_acc_ledger_purchase.php:1226 msgid "ou générer un document" msgstr "or generate a document" #: include/compta_ach.inc.php:59 msgid "Fournisseurs" msgstr "Suppliers" + +#: html/annulation.php:143 +msgid "Période ou date incorrecte" +msgstr "" + +#: html/annulation.php:149 +msgid "Cette période est fermée" +msgstr "" + +#: include/class_acc_payment.php:342 +msgid "Achat" +msgstr "" + +#: include/payment_middle.inc.php:47 +msgid "Vous confirmez" +msgstr "" + +#: include/payment_middle.inc.php:59 +msgid "Efface" +msgstr "" + +#: include/payment_middle.inc.php:93 +msgid "Enregistre" +msgstr "" + +#: include/template/fiche_def_input.php:12 +msgid "" +"Création automatique du poste comptable uniquement s'il n\\y a qu'un seul " +"poste" +msgstr "" + +#: include/template/new_mod_payment.php:2 +msgid "Nouveau moyen de paiement" +msgstr "" + +#: include/template/new_mod_payment.php:25 +msgid "Pour le type de journal" +msgstr "" + +#: include/template/new_mod_payment.php:34 +msgid "Paiement enregistré dans " +msgstr "" + +#: include/template/new_mod_payment.php:43 +msgid "Avec la fiche" +msgstr "" diff --git a/html/lang/nl_NL/LC_MESSAGES/messages.po b/html/lang/nl_NL/LC_MESSAGES/messages.po index f506d3b96..316528b4c 100644 --- a/html/lang/nl_NL/LC_MESSAGES/messages.po +++ b/html/lang/nl_NL/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-10 15:17+0100\n" +"POT-Creation-Date: 2010-02-08 22:29+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,30 +16,2384 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: test.php:228 +#: test.php:228 html/test.php:195 msgid "Bienvenu sur mon site" msgstr "Welkom op my website" -#: test.php:229 +#: test.php:229 html/test.php:196 msgid "Essayer de vous y amuser" msgstr "Probeer het" -#: test.php:233 +#: test.php:233 html/test.php:200 msgid "Choississez votre langue" msgstr "kies uw taal" -#: test.php:234 +#: test.php:234 html/test.php:201 include/pref.inc.php:201 msgid "Français" msgstr "Frans" -#: test.php:235 +#: test.php:235 html/test.php:202 include/pref.inc.php:202 msgid "Anglais" msgstr "Engels" -#: test.php:236 +#: test.php:236 html/test.php:203 include/pref.inc.php:203 msgid "Néerlandais" msgstr "Nederlands" -#: test.php:245 +#: test.php:245 html/test.php:212 msgid "Change de langue" msgstr "Verander het taal" + +#: html/access.php:75 +msgid "Votre base de données n'est pas à jour" +msgstr "" + +#: html/access.php:76 +msgid "cliquez ici pour appliquer le patch" +msgstr "" + +#: html/access.php:102 +msgid "Aucune periode par defaut" +msgstr "" + +#: html/access.php:125 +msgid "Aucun rapport défini" +msgstr "" + +#: html/access.php:126 +msgid "Cliquez ici pour mettre à jour vos préférences" +msgstr "" + +#: html/access.php:151 +msgid "Pense-Bête" +msgstr "" + +#: html/access.php:158 include/class_acc_ledger.php:497 +#: include/class_acc_ledger.php:1141 include/class_acc_ledger.php:1263 +#: include/class_acc_ledger_purchase.php:1006 +#: include/class_acc_ledger_sold.php:537 include/class_anc_listing.php:73 +#: include/template/detail-action.php:15 +#: include/template/form_ledger_detail.php:13 +#: include/template/form_ledger_fin.php:3 +msgid "Date" +msgstr "" + +#: html/access.php:159 include/template/detail-action.php:150 +msgid "Titre" +msgstr "" + +#: html/access.php:160 include/class_acc_ledger.php:498 +#: include/class_acc_ledger.php:1142 include/class_acc_ledger.php:1266 +#: include/class_acc_ledger_purchase.php:1013 +#: include/class_acc_ledger_sold.php:544 include/class_anc_account.php:266 +#: include/class_anc_listing.php:75 include/class_anc_plan.php:125 +#: include/dossier.inc.php:235 include/dossier.inc.php:264 +#: include/template/detail-action.php:133 +#: include/template/detail-action.php:179 +#: include/template/form_ledger_detail.php:17 +msgid "Description" +msgstr "" + +#: html/access.php:164 html/ajax_card.php:271 html/ajax_extension.php:111 +#: html/ajax_extension.php:168 html/parametre.php:289 +#: include/compta_fin.inc.php:165 include/payment_middle.inc.php:58 +#: include/report.inc.php:123 include/report.inc.php:138 +msgid "Sauve" +msgstr "" + +#: html/access.php:165 include/detail_adm.inc.php:68 +#: include/detail_client.inc.php:68 include/detail_supplier.inc.php:68 +#: include/fiche.inc.php:290 include/fiche.inc.php:378 +msgid "Annuler" +msgstr "" + +#: html/access.php:169 include/payment_middle.inc.php:164 +msgid "Ajout" +msgstr "" + +#: html/ajax_card.php:107 html/ajax_card.php:158 html/ajax_card.php:278 +#: html/ajax_card.php:309 +msgid "Action interdite" +msgstr "" + +#: html/ajax_card.php:125 +msgid "Aucune catégorie de fiche ne correspondant à votre demande" +msgstr "" + +#: html/ajax_card.php:171 +msgid "Fiche contenant" +msgstr "" + +#: html/ajax_card.php:173 html/ajax_poste.php:75 html/search_ca.php:48 +#: html/search_ca.php:56 include/class_acc_payment.php:263 +#: include/class_anc_balance_double.php:280 include/quick_writing.inc.php:177 +#: include/user_menu.php:257 include/user_menu.php:477 +msgid "Recherche" +msgstr "" + +#: html/ajax_card.php:237 +msgid " de clients" +msgstr "" + +#: html/ajax_card.php:241 +msgid " de fournisseurs" +msgstr "" + +#: html/ajax_card.php:245 +msgid " d'administration" +msgstr "" + +#: html/ajax_card.php:251 include/adm.inc.php:45 include/adm.inc.php:129 +#: include/client.inc.php:44 include/client.inc.php:128 +#: include/supplier.inc.php:44 include/supplier.inc.php:128 +msgid "Ajout d'une catégorie" +msgstr "" + +#: html/ajax_card.php:261 include/class_acc_report.php:142 +msgid "Recherche poste" +msgstr "" + +#: html/ajax_card.php:296 +msgid "Catégorie existe déjà" +msgstr "" + +#: html/ajax_card.php:298 +msgid "Catégorie sauvée" +msgstr "" + +#: html/ajax_card.php:301 +msgid "Le nom et la classe base ne peuvent être vide" +msgstr "" + +#: html/ajax_extension.php:81 html/ajax_extension.php:138 +#: html/parametre.php:242 +msgid "Oui" +msgstr "" + +#: html/ajax_extension.php:82 html/ajax_extension.php:139 +#: html/parametre.php:241 +msgid "Non" +msgstr "" + +#: html/ajax_extension.php:96 html/ajax_extension.php:153 +#: include/template/extension-sec.php:9 +#: include/template/security_list_action.php:5 +msgid "Accès" +msgstr "" + +#: html/ajax_extension.php:97 html/ajax_extension.php:154 +msgid "Interdit" +msgstr "" + +#: html/ajax.php:33 include/ext_inc.php:20 +msgid "Cette extension n'existe pas " +msgstr "" + +#: html/annulation.php:134 include/class_acc_ledger_purchase.php:68 +#: include/class_acc_ledger_sold.php:68 +msgid "Date invalide" +msgstr "" + +#: html/annulation.php:143 +msgid "Période ou date incorrecte" +msgstr "" + +#: html/annulation.php:149 +msgid "Cette période est fermée" +msgstr "" + +#: html/annulation.php:414 include/class_acc_ledger.php:1150 +#: include/class_acc_ledger.php:1309 include/class_anticipation.php:298 +#: include/quick_writing.inc.php:116 +msgid "Débit" +msgstr "" + +#: html/annulation.php:429 include/class_anticipation.php:299 +#: include/quick_writing.inc.php:117 +msgid "Crédit" +msgstr "" + +#: html/commercial.php:65 +msgid "Vous devez choisir un dossier " +msgstr "" + +#: html/commercial.php:113 include/class_acc_ledger_sold.php:547 +#: include/class_acc_ledger_sold.php:1088 +msgid "Client" +msgstr "" + +#: html/commercial.php:114 include/class_acc_ledger_purchase.php:943 +#: include/class_acc_ledger_purchase.php:1016 +msgid "Fournisseur" +msgstr "" + +#: html/commercial.php:115 +msgid "Administration" +msgstr "" + +#: html/commercial.php:116 include/compta_ach.inc.php:60 +#: include/compta_fin.inc.php:58 include/compta_ven.inc.php:59 +#: include/user_menu.php:194 include/template/security_list_action.php:73 +msgid "Impression" +msgstr "" + +#: html/commercial.php:117 include/template/security_list_action.php:81 +msgid "Stock" +msgstr "" + +#: html/commercial.php:118 include/action.common.inc.php:265 +#: include/adm_card.inc.php:70 include/client_card.inc.php:70 +#: include/impress.inc.php:34 include/supplier_card.inc.php:70 +#: include/user_menu.php:195 include/template/detail-action.php:178 +#: include/template/security_list_action.php:59 +msgid "Fiche" +msgstr "" + +#: html/commercial.php:119 +msgid "Prevision" +msgstr "" + +#: html/commercial.php:120 include/adm_card.inc.php:71 +#: include/client_card.inc.php:71 include/supplier_card.inc.php:71 +msgid "Suivi" +msgstr "" + +#: html/compta.php:34 +msgid " Vous êtes déconnecté" +msgstr "" + +#: html/extension.php:64 +msgid "Retour au tableau de bord" +msgstr "" + +#: html/extension.php:80 +msgid "Aucune extension disponible" +msgstr "" + +#: html/extension.php:88 include/user_menu.php:339 include/user_menu.php:452 +#: include/template/security_list_action.php:92 +msgid "Extension" +msgstr "" + +#: html/extension.php:88 +msgid "Choix de l'extension" +msgstr "" + +#: html/import.php:103 +msgid "Choississez la période à transfèrer" +msgstr "" + +#: html/parametre.php:135 +msgid "Moyen de paiement" +msgstr "" + +#: html/parametre.php:136 +msgid "Tva" +msgstr "" + +#: html/parametre.php:136 +msgid "Taux et poste comptable tva" +msgstr "" + +#: html/parametre.php:137 include/template/forecast-detail.php:8 +msgid "Poste Comptable" +msgstr "" + +#: html/parametre.php:137 +msgid "Poste comptable constant" +msgstr "" + +#: html/parametre.php:138 +msgid "Catégorie de fiche" +msgstr "" + +#: html/parametre.php:138 +msgid "Modifie les classe de base, les attribut,..." +msgstr "" + +#: html/parametre.php:236 +msgid "obligatoire" +msgstr "" + +#: html/parametre.php:237 +msgid "optionnel" +msgstr "" + +#: html/parametre.php:238 +msgid "non utilisé" +msgstr "" + +#: html/parametre.php:271 +msgid "Nom société" +msgstr "" + +#: html/parametre.php:272 +msgid "Téléphone" +msgstr "" + +#: html/parametre.php:273 +msgid "Fax" +msgstr "" + +#: html/parametre.php:274 +msgid "Rue " +msgstr "" + +#: html/parametre.php:275 +msgid "Numéro" +msgstr "" + +#: html/parametre.php:276 +msgid "Code Postal" +msgstr "" + +#: html/parametre.php:277 +msgid "Commune" +msgstr "" + +#: html/parametre.php:278 +msgid "Pays" +msgstr "" + +#: html/parametre.php:279 +msgid "Numéro de Tva" +msgstr "" + +#: html/parametre.php:281 +msgid "Utilisation de la compta. analytique" +msgstr "" + +#: html/parametre.php:283 +msgid "Utilisation du mode strict " +msgstr "" + +#: html/parametre.php:285 +msgid "Assujetti à la tva" +msgstr "" + +#: html/parametre.php:286 +msgid "Suggérer le numéro de pièce justificative" +msgstr "" + +#: html/parametre.php:287 +msgid "Afficher la période comptable pour éviter les erreurs de date" +msgstr "" + +#: html/recherche.php:45 html/user_advanced.php:57 include/action.inc.php:38 +#: include/adm.inc.php:50 include/client.inc.php:49 +#: include/compta_ach.inc.php:45 include/compta_fin.inc.php:47 +#: include/compta_ven.inc.php:45 include/forecast.inc.php:229 +#: include/forecast.inc.php:302 include/import_inc.php:48 +#: include/impress_poste.inc.php:51 include/quick_writing.inc.php:54 +#: include/report.inc.php:53 include/supplier.inc.php:49 +#: include/user_action_gl.php:44 +msgid "Recherche de fiche" +msgstr "" + +#: html/test.php:220 +msgid "Fin de programme" +msgstr "" + +#: html/user_login.php:46 +msgid "Vous utilisez un navigateur dépassé depuis près de 8 ans!" +msgstr "" + +#: html/user_login.php:47 +msgid "" +"Pour une meilleure expérience web, prenez le temps de mettre votre " +"navigateur à jour" +msgstr "" + +#: html/user_login.php:80 +msgid "Préférence" +msgstr "" + +#: html/user_login.php:81 include/user_menu.php:447 +msgid "Deconnexion" +msgstr "" + +#: html/user_login.php:85 +msgid "Bienvenue" +msgstr "" + +#: html/user_login.php:85 +msgid "dans PhpCompta" +msgstr "" + +#: html/user_login.php:86 +msgid "Choississez votre dossier" +msgstr "" + +#: html/user_login.php:91 include/class_acc_ledger_fin.php:819 +#: include/class_acc_ledger.php:2195 include/fiche.inc.php:72 +msgid "Rechercher" +msgstr "" + +#: html/user_login.php:100 +msgid "Donnez une partie du nom du dossier à rechercher" +msgstr "" + +#: include/ac_common.php:272 +msgid "Cette action ne vous est pas autorisée Contactez votre responsable" +msgstr "" + +#: include/ac_common.php:278 +msgid " Cette action ne vous est pas autorisée Contactez votre responsable" +msgstr "" + +#: include/action.common.inc.php:90 +msgid "Action sauvée" +msgstr "" + +#: include/action.common.inc.php:121 include/action.common.inc.php:204 +#: include/compta_ach.inc.php:230 include/compta_ven.inc.php:240 +msgid "Enregistrer" +msgstr "" + +#: include/action.common.inc.php:122 +msgid "Génère le document" +msgstr "" + +#: include/action.common.inc.php:150 +msgid "Ajoute une action à celle-ci" +msgstr "" + +#: include/action.common.inc.php:151 +msgid "Efface cette action" +msgstr "" + +#: include/action.common.inc.php:151 +msgid "Vous confirmez l'effacement" +msgstr "" + +#: include/action.common.inc.php:170 +msgid "Action " +msgstr "" + +#: include/action.common.inc.php:170 +msgid " effacée" +msgstr "" + +#: include/action.common.inc.php:235 +msgid "Recherche avancée" +msgstr "" + +#: include/action.common.inc.php:266 +#, php-format +msgid "Titre ou référence" +msgstr "" + +#: include/action.common.inc.php:273 +msgid "Tous les types" +msgstr "" + +#: include/action.common.inc.php:282 +msgid "les actions fermées aussi:" +msgstr "" + +#: include/action.common.inc.php:285 +msgid "affecté à d'autre:" +msgstr "" + +#: include/action.common.inc.php:287 +msgid "recherche" +msgstr "" + +#: include/action.common.inc.php:300 +msgid "Ajout Action" +msgstr "" + +#: include/action.common.inc.php:304 include/action.common.inc.php:318 +msgid "Afficher Recherche" +msgstr "" + +#: include/action.common.inc.php:304 include/action.common.inc.php:318 +msgid "Cache Recherche" +msgstr "" + +#: include/action.inc.php:44 include/dossier.inc.php:242 +#: include/dossier.inc.php:268 include/dossier.inc.php:286 +#: include/pref.inc.php:225 +msgid "Retour" +msgstr "" + +#: include/adm_card.inc.php:70 include/client_card.inc.php:70 +#: include/supplier_card.inc.php:70 +msgid "Détail de la fiche" +msgstr "" + +#: include/adm_card.inc.php:71 +msgid "Suivi adm, devis, bon de commande, courrier" +msgstr "" + +#: include/adm_card.inc.php:72 include/client_card.inc.php:72 +#: include/supplier_card.inc.php:72 include/template/detail-action.php:51 +msgid "Contact" +msgstr "" + +#: include/adm_card.inc.php:72 +msgid "Liste de contacts de cette administration" +msgstr "" + +#: include/adm_card.inc.php:73 include/client_card.inc.php:73 +#: include/supplier_card.inc.php:73 include/template/form_ledger_fin.php:17 +msgid "Opérations" +msgstr "" + +#: include/adm_card.inc.php:73 include/client_card.inc.php:73 +#: include/supplier_card.inc.php:73 +msgid "Toutes les opérations" +msgstr "" + +#: include/adm_card.inc.php:74 include/client_card.inc.php:74 +#: include/supplier_card.inc.php:74 +msgid "Retour liste" +msgstr "" + +#: include/adm_card.inc.php:74 +msgid "Retour à la liste des administration" +msgstr "" + +#: include/adm_card.inc.php:116 include/client_card.inc.php:116 +#: include/supplier_card.inc.php:116 +msgid "Vous devez aller dans fiche et créer une catégorie pour les contacts" +msgstr "" + +#: include/adm_card.inc.php:122 include/adm.inc.php:118 +#: include/class_acc_ledger_fin.php:192 include/class_acc_ledger.php:1240 +#: include/class_acc_ledger_purchase.php:663 +#: include/class_acc_ledger_purchase.php:670 +#: include/class_acc_ledger_sold.php:819 include/class_acc_ledger_sold.php:826 +#: include/class_action.php:261 include/client_card.inc.php:122 +#: include/client.inc.php:117 include/supplier_card.inc.php:122 +#: include/supplier.inc.php:117 +msgid "Créer une nouvelle fiche" +msgstr "" + +#: include/anc_imp.inc.php:36 +msgid "Listing" +msgstr "" + +#: include/anc_imp.inc.php:36 +msgid "Listing des opérations" +msgstr "" + +#: include/anc_imp.inc.php:37 +msgid "Balance simple" +msgstr "" + +#: include/anc_imp.inc.php:37 +msgid "Balance simple d'un plan analytique" +msgstr "" + +#: include/anc_imp.inc.php:38 +msgid "Balance croisée" +msgstr "" + +#: include/anc_imp.inc.php:38 +msgid "Balance croisée de 2 plans analytiques" +msgstr "" + +#: include/anc_od.inc.php:39 +msgid "Aucun plan analytique défini" +msgstr "" + +#: include/anc_od.inc.php:52 include/class_anticipation.php:187 +msgid "Nouveau" +msgstr "" + +#: include/anc_od.inc.php:55 +msgid "Liste opérations" +msgstr "" + +#: include/anc_od.inc.php:114 include/compta_ach.inc.php:160 +#: include/compta_ven.inc.php:169 +msgid "Opération sauvée" +msgstr "" + +#: include/class_acc_ledger_fin.php:54 +#: include/class_acc_ledger_purchase.php:60 +#: include/class_acc_ledger_sold.php:60 +msgid "Double Encodage" +msgstr "" + +#: include/class_acc_ledger_fin.php:58 +msgid "Vous n'avez pas donné de banque" +msgstr "" + +#: include/class_acc_ledger_fin.php:72 +#: include/class_acc_ledger_purchase.php:80 +#: include/class_acc_ledger_sold.php:80 +msgid "Date et periode ne correspondent pas" +msgstr "" + +#: include/class_acc_ledger_fin.php:78 +#: include/class_acc_ledger_purchase.php:85 +#: include/class_acc_ledger_sold.php:89 +msgid "Periode fermee" +msgstr "" + +#: include/class_acc_ledger_fin.php:86 +#: include/class_acc_ledger_purchase.php:94 +msgid "Vous utilisez le mode strict la dernière operation est à la date du " +msgstr "" + +#: include/class_acc_ledger_fin.php:87 include/class_acc_ledger_sold.php:98 +msgid " vous ne pouvez pas encoder à une date antérieure" +msgstr "" + +#: include/class_acc_ledger_fin.php:787 +#: include/class_acc_ledger_purchase.php:740 +#: include/class_acc_ledger_sold.php:890 +msgid "Pas de journal disponible" +msgstr "" + +#: include/class_acc_ledger_fin.php:790 +msgid "Tous les journaux financiers" +msgstr "" + +#: include/class_acc_ledger.php:499 include/class_acc_ledger.php:1149 +#: include/class_acc_ledger.php:1308 include/class_anc_account.php:260 +#: include/class_anc_listing.php:76 include/template/forecast-detail.php:11 +#: include/template/form_ledger_fin.php:22 +msgid "Montant" +msgstr "" + +#: include/class_acc_ledger.php:500 +msgid "PJ" +msgstr "" + +#: include/class_acc_ledger.php:501 +msgid "Ech" +msgstr "" + +#: include/class_acc_ledger.php:594 +msgid "Aucun enregistrement trouvé" +msgstr "" + +#: include/class_acc_ledger.php:612 +msgid "Payé" +msgstr "" + +#: include/class_acc_ledger.php:614 +msgid "Op. Concernée" +msgstr "" + +#: include/class_acc_ledger.php:616 +msgid "Action" +msgstr "" + +#: include/class_acc_ledger.php:617 include/user_menu.php:342 +msgid "Document" +msgstr "" + +#: include/class_acc_ledger.php:744 include/compta_fin.inc.php:166 +#: include/dossier.inc.php:183 include/dossier.inc.php:285 +#: include/forecast.inc.php:333 +msgid "Effacer" +msgstr "" + +#: include/class_acc_ledger.php:999 +msgid "Parametres journaux non trouves" +msgstr "" + +#: include/class_acc_ledger.php:1143 +msgid "PJ Num" +msgstr "" + +#: include/class_acc_ledger.php:1147 +msgid "Quick Code ou" +msgstr "" + +#: include/class_acc_ledger.php:1148 include/class_acc_ledger.php:1306 +#: include/impress.inc.php:33 +msgid "Poste" +msgstr "" + +#: include/class_acc_ledger.php:1286 +msgid "Pièce" +msgstr "" + +#: include/class_acc_ledger.php:1307 include/payment_middle.inc.php:122 +#: include/template/forecast-detail.php:10 +#: include/template/new_mod_payment.php:7 +msgid "Libellé" +msgstr "" + +#: include/class_acc_ledger.php:1451 +msgid "Pas dans la periode active" +msgstr "" + +#: include/class_acc_ledger.php:1470 +msgid "Vous utilisez le mode strict la dernière operation est la date du " +msgstr "" + +#: include/class_acc_ledger.php:1471 +msgid "vous ne pouvez pas encoder à une date antérieure" +msgstr "" + +#: include/class_acc_ledger.php:1503 +msgid "Le poste" +msgstr "" + +#: include/class_acc_ledger.php:1503 +msgid "n'est pas dans ce journal" +msgstr "" + +#: include/class_acc_ledger.php:1505 +msgid "Poste invalide" +msgstr "" + +#: include/class_acc_ledger.php:1507 +msgid "Poste Inexistant" +msgstr "" + +#: include/class_acc_ledger.php:1515 +msgid "Balance incorrecte " +msgstr "" + +#: include/class_acc_ledger.php:2206 +msgid "Afficher recherche" +msgstr "" + +#: include/class_acc_ledger_purchase.php:64 +msgid "Vous n'avez pas donné de fournisseur" +msgstr "" + +#: include/class_acc_ledger_purchase.php:95 +msgid " vous ne pouvez pas encoder à une date antérieure dans ce journal" +msgstr "" + +#: include/class_acc_ledger_purchase.php:105 +#: include/class_acc_ledger_purchase.php:127 +#: include/class_acc_ledger_purchase.php:143 +#: include/class_acc_ledger_purchase.php:145 +#: include/class_acc_ledger_purchase.php:151 +#: include/class_acc_ledger_purchase.php:172 +#: include/class_acc_ledger_sold.php:106 include/class_acc_ledger_sold.php:129 +#: include/class_acc_ledger_sold.php:140 include/class_acc_ledger_sold.php:142 +#: include/class_acc_ledger_sold.php:148 include/class_acc_ledger_sold.php:167 +msgid "La fiche " +msgstr "" + +#: include/class_acc_ledger_purchase.php:105 +#: include/class_acc_ledger_purchase.php:151 +#: include/class_acc_ledger_sold.php:106 include/class_acc_ledger_sold.php:148 +msgid "n'a pas de poste comptable" +msgstr "" + +#: include/class_acc_ledger_purchase.php:120 +#: include/class_acc_ledger_purchase.php:166 +#: include/class_acc_ledger_sold.php:122 include/class_acc_ledger_sold.php:161 +msgid "Pour la fiche " +msgstr "" + +#: include/class_acc_ledger_purchase.php:120 +#: include/class_acc_ledger_sold.php:122 include/class_acc_ledger_sold.php:161 +msgid " le poste comptable [" +msgstr "" + +#: include/class_acc_ledger_purchase.php:120 +#: include/class_acc_ledger_purchase.php:166 +#: include/class_acc_ledger_sold.php:161 +msgid "n'existe pas" +msgstr "" + +#: include/class_acc_ledger_purchase.php:127 +#: include/class_acc_ledger_purchase.php:172 +#: include/class_acc_ledger_sold.php:129 include/class_acc_ledger_sold.php:167 +msgid "n'est pas accessible à ce journal" +msgstr "" + +#: include/class_acc_ledger_purchase.php:143 +msgid "a un montant invalide" +msgstr "" + +#: include/class_acc_ledger_purchase.php:145 +msgid "a une quantité invalide" +msgstr "" + +#: include/class_acc_ledger_purchase.php:166 +msgid " le poste comptable" +msgstr "" + +#: include/class_acc_ledger_purchase.php:176 +#: include/class_acc_ledger_sold.php:171 +msgid "Il n'y a aucune marchandise" +msgstr "" + +#: include/class_acc_ledger_purchase.php:546 +#: include/class_acc_ledger_sold.php:400 +msgid "Document généré" +msgstr "" + +#: include/class_acc_ledger_purchase.php:547 +msgid "Note de frais" +msgstr "" + +#: include/class_acc_ledger_purchase.php:690 +#: include/class_acc_ledger_purchase.php:1003 +msgid "En-tête facture fournisseur" +msgstr "" + +#: include/class_acc_ledger_purchase.php:691 +msgid "Détail articles acheté" +msgstr "" + +#: include/class_acc_ledger_purchase.php:723 +#: include/class_acc_ledger_sold.php:875 +msgid "Aucune période ouverte" +msgstr "" + +#: include/class_acc_ledger_purchase.php:730 +#: include/class_acc_ledger_sold.php:880 +msgid "Période comptable" +msgstr "" + +#: include/class_acc_ledger_purchase.php:799 +msgid "Fournisseur " +msgstr "" + +#: include/class_acc_ledger_purchase.php:952 +#: include/class_acc_ledger_sold.php:1099 include/compta_fin.inc.php:164 +msgid "Ajout article" +msgstr "" + +#: include/class_acc_ledger_purchase.php:965 +#: include/class_acc_ledger_sold.php:1107 +msgid "Payé par" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1007 +#: include/class_acc_ledger_sold.php:538 +#: include/template/form_ledger_detail.php:13 +msgid "Echeance" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1008 +#: include/class_acc_ledger_sold.php:539 +msgid "Période Comptable" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1010 +#: include/class_acc_ledger_sold.php:541 include/import_inc.php:139 +#: include/import_inc.php:402 include/quick_writing.inc.php:154 +#: include/template/form_ledger_detail.php:15 +msgid "Journal" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1020 +msgid "Détail articles achetés" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1024 +#: include/class_acc_ledger_sold.php:555 +#: include/template/form_ledger_detail.php:27 +msgid "Dénomination" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1025 +#: include/class_acc_ledger_sold.php:556 +msgid "prix" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1029 +#: include/class_acc_ledger_purchase.php:1033 +#: include/class_acc_ledger_sold.php:558 +#: include/template/detail-action.php:181 +#: include/template/form_ledger_detail.php:29 +msgid "quantité" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1030 +#: include/class_acc_ledger_sold.php:561 +#: include/template/detail-action.php:183 +msgid "Montant TVA" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1031 +#: include/class_acc_ledger_sold.php:562 +msgid "Montant HTVA" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1034 +#: include/template/form_ledger_detail.php:84 +msgid "Total" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1036 +#: include/class_acc_ledger_sold.php:564 include/user_menu.php:451 +msgid "Compt. Analytique" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1124 +#: include/class_acc_ledger_sold.php:646 +msgid "verifie CA" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1131 +#: include/template/form_ledger_detail.php:30 +#: include/template/form_ledger_detail.php:80 +msgid "Total HTVA" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1137 +msgid "TVA à " +msgstr "" + +#: include/class_acc_ledger_purchase.php:1138 +#: include/template/form_ledger_detail.php:81 +msgid "Total TVA" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1141 +#: include/template/form_ledger_detail.php:82 +msgid "Total TVAC" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1215 +#: include/template/detail-action.php:235 +msgid "Document à générer" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1219 +#: include/class_acc_ledger_sold.php:744 +msgid "Ajoutez une pièce justificative " +msgstr "" + +#: include/class_acc_ledger_purchase.php:1226 +msgid "ou générer un document" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1237 +#: include/class_acc_ledger_sold.php:762 +msgid "Numero de bon de commande : " +msgstr "" + +#: include/class_acc_ledger_purchase.php:1238 +#: include/class_acc_ledger_sold.php:763 +msgid "Autre information : " +msgstr "" + +#: include/class_acc_ledger_purchase.php:1267 +#: include/class_acc_ledger_sold.php:792 +msgid "Echeance dépassée" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1269 +#: include/class_acc_ledger_sold.php:794 +msgid "Non Payée" +msgstr "" + +#: include/class_acc_ledger_purchase.php:1278 +#: include/class_acc_ledger_sold.php:803 include/compta_ach.inc.php:308 +#: include/compta_ach.inc.php:364 include/compta_ven.inc.php:321 +#: include/compta_ven.inc.php:380 +msgid "Mise à jour paiement" +msgstr "" + +#: include/class_acc_ledger_sold.php:64 +msgid "Vous n'avez pas donné de client" +msgstr "" + +#: include/class_acc_ledger_sold.php:97 +msgid "Vous utilisez le mode strict la dernière operation est date du " +msgstr "" + +#: include/class_acc_ledger_sold.php:122 +msgid "] n'existe pas" +msgstr "" + +#: include/class_acc_ledger_sold.php:140 +msgid "a un montant invalide [" +msgstr "" + +#: include/class_acc_ledger_sold.php:142 +msgid "a une quantité invalide [" +msgstr "" + +#: include/class_acc_ledger_sold.php:534 include/class_acc_ledger_sold.php:846 +msgid "En-tête facture client" +msgstr "" + +#: include/class_acc_ledger_sold.php:551 include/class_acc_ledger_sold.php:976 +msgid "Détail articles vendus" +msgstr "" + +#: include/class_acc_ledger_sold.php:554 +#: include/template/extension-detail.php:16 +msgid "Code" +msgstr "" + +#: include/class_acc_ledger_sold.php:557 +#: include/template/form_ledger_detail.php:32 +msgid "tva" +msgstr "" + +#: include/class_acc_ledger_sold.php:619 +msgid "Attention Différence" +msgstr "" + +#: include/class_acc_ledger_sold.php:751 +msgid "ou générer une facture" +msgstr "" + +#: include/class_acc_ledger_sold.php:853 +msgid "Echéance" +msgstr "" + +#: include/class_acc_payment.php:342 +msgid "Achat" +msgstr "" + +#: include/class_acc_payment.php:343 include/user_menu.php:189 +msgid "Vente" +msgstr "" + +#: include/class_action.php:387 +msgid "Génére le document" +msgstr "" + +#: include/class_anc_account.php:255 include/class_anc_listing.php:74 +#: include/class_anc_plan.php:124 include/dossier.inc.php:259 +#: include/template/extension-detail.php:8 +#: include/template/extension-sec.php:8 include/template/forecast_cat.php:9 +msgid "Nom" +msgstr "" + +#: include/class_anc_account.php:271 +msgid "Plan Analytique" +msgstr "" + +#: include/class_anc_account.php:276 +msgid "Groupe" +msgstr "" + +#: include/class_anc_balance_double.php:288 +msgid "" +"Selectionnez le plan qui vous intéresse avant de cliquer sur Recherche" +msgstr "" + +#: include/class_anc_group_operation.php:71 +msgid "Operation non equilibrée" +msgstr "" + +#: include/class_anc_listing.php:70 +msgid "aucune donnée" +msgstr "" + +#: include/class_anc_listing.php:77 +msgid "D/C" +msgstr "" + +#: include/class_anc_print.php:89 +msgid "Aucun plan défini" +msgstr "" + +#: include/class_anc_print.php:114 +msgid "Les dates sont en format DD.MM.YYYY" +msgstr "" + +#: include/class_anc_print.php:136 +msgid "Selectionnez le plan qui vous intéresse avant de cliquer sur Recherche" +msgstr "" + +#: include/class_anticipation.php:155 +msgid "Modification" +msgstr "" + +#: include/class_anticipation.php:192 +msgid "Ventes" +msgstr "" + +#: include/class_anticipation.php:192 include/user_menu.php:190 +msgid "Dépense" +msgstr "" + +#: include/class_anticipation.php:192 include/user_menu.php:231 +#: include/template/form_ledger_fin.php:6 +msgid "Banque" +msgstr "" + +#: include/class_anticipation.php:234 +msgid "Elements" +msgstr "" + +#: include/class_calendar.php:87 +msgid "Dimanche" +msgstr "" + +#: include/class_calendar.php:87 +msgid "Lundi" +msgstr "" + +#: include/class_calendar.php:87 +msgid "Mardi" +msgstr "" + +#: include/class_calendar.php:87 +msgid "Mercredi" +msgstr "" + +#: include/class_calendar.php:87 +msgid "Jeudi" +msgstr "" + +#: include/class_calendar.php:87 +msgid "Vendredi" +msgstr "" + +#: include/class_calendar.php:87 +msgid "Samedi" +msgstr "" + +#: include/class_document.php:258 +msgid "Ne peut pas sauver " +msgstr "" + +#: include/class_fiche_def.php:184 +msgid "Vous devez choisir une categorie" +msgstr "" + +#: include/class_fiche_def.php:407 +msgid "Label" +msgstr "" + +#: include/class_fiche_def.php:416 +msgid "Poste Comptable de base" +msgstr "" + +#: include/class_fiche_def.php:422 +msgid "Chaque fiche aura automatiquement son propre poste comptable : " +msgstr "" + +#: include/class_fiche.php:315 +msgid "Cette categorie de card n'existe pas" +msgstr "" + +#: include/class_fiche.php:356 +msgid "Rappel: Poste créé automatiquement à partir de " +msgstr "" + +#: include/class_fiche.php:363 +msgid "Rappel: Poste par défaut sera " +msgstr "" + +#: include/class_forecast.php:62 +msgid "Le nom ne peut pas être vide" +msgstr "" + +#: include/class_iperiod.php:106 +msgid "Aucune periode trouvée" +msgstr "" + +#: include/class_ipopup.php:100 +#, php-format +msgid "Fermer" +msgstr "" + +#: include/class_user.php:45 +msgid "Session expirée
Utilisateur déconnecté" +msgstr "" + +#: include/class_user.php:156 +msgid "Utilisateur ou mot de passe incorrect" +msgstr "" + +#: include/class_user.php:339 +msgid "Aucune période trouvéee !!!" +msgstr "" + +#: include/class_user.php:668 +msgid "Dossier non accessible" +msgstr "" + +#: include/client_card.inc.php:71 +msgid "Suivi client, devis, bon de commande, courrier" +msgstr "" + +#: include/client_card.inc.php:72 +msgid "Liste de contacts de ce client" +msgstr "" + +#: include/client_card.inc.php:74 +msgid "Retour à la liste des clients" +msgstr "" + +#: include/compta_ach.inc.php:56 include/compta_ach.inc.php:173 +msgid "Nouvelle dépense" +msgstr "" + +#: include/compta_ach.inc.php:56 +msgid "Nouvel achat ou dépense" +msgstr "" + +#: include/compta_ach.inc.php:57 +msgid "Liste achat" +msgstr "" + +#: include/compta_ach.inc.php:57 +msgid "Liste des achats" +msgstr "" + +#: include/compta_ach.inc.php:58 +msgid "Liste dépenses non payées" +msgstr "" + +#: include/compta_ach.inc.php:58 include/compta_ven.inc.php:57 +msgid "Liste des ventes non payées" +msgstr "" + +#: include/compta_ach.inc.php:59 +msgid "Fournisseurs" +msgstr "" + +#: include/compta_ach.inc.php:124 include/compta_ven.inc.php:127 +msgid "Enregistrement" +msgstr "" + +#: include/compta_ach.inc.php:125 include/compta_fin.inc.php:118 +#: include/compta_ven.inc.php:128 +msgid "Corriger" +msgstr "" + +#: include/compta_ach.inc.php:164 include/compta_ven.inc.php:173 +#: include/quick_writing.inc.php:276 +msgid "Attention numéro pièce existante, elle a du être adaptée" +msgstr "" + +#: include/compta_ach.inc.php:229 include/compta_ven.inc.php:239 +#: include/template/detail-action.php:217 +#: include/template/form_ledger_detail.php:63 +msgid "Actualiser" +msgstr "" + +#: include/compta_ach.inc.php:231 include/compta_ven.inc.php:241 +msgid "Effacer " +msgstr "" + +#: include/compta_fin.inc.php:55 include/compta_fin.inc.php:140 +msgid "Nouvel extrait" +msgstr "" + +#: include/compta_fin.inc.php:55 +msgid "Encodage d'un nouvel extrait" +msgstr "" + +#: include/compta_fin.inc.php:56 +msgid "Liste" +msgstr "" + +#: include/compta_fin.inc.php:56 +msgid "Liste opération bancaire" +msgstr "" + +#: include/compta_fin.inc.php:57 +msgid "Solde" +msgstr "" + +#: include/compta_fin.inc.php:57 +msgid "Solde des comptes" +msgstr "" + +#: include/compta_fin.inc.php:117 +msgid "Confirmer" +msgstr "" + +#: include/compta_fin.inc.php:139 +msgid "Opération sauvée" +msgstr "" + +#: include/compta_ven.inc.php:55 include/compta_ven.inc.php:183 +msgid "Nouvelle vente" +msgstr "" + +#: include/compta_ven.inc.php:56 +msgid "Liste ventes" +msgstr "" + +#: include/compta_ven.inc.php:56 +msgid "Liste des ventes" +msgstr "" + +#: include/compta_ven.inc.php:57 +msgid "Liste vente non payées" +msgstr "" + +#: include/compta_ven.inc.php:58 +msgid "Clients" +msgstr "" + +#: include/compta_ven.inc.php:124 +msgid "Sauvez cette opération comme modèle ?" +msgstr "" + +#: include/detail_adm.inc.php:67 include/detail_client.inc.php:67 +#: include/detail_supplier.inc.php:67 +msgid "Sauver les modifications" +msgstr "" + +#: include/detail_client.inc.php:50 include/detail_supplier.inc.php:50 +msgid "Information sauvée" +msgstr "" + +#: include/detail_client.inc.php:69 include/detail_supplier.inc.php:69 +msgid "Effacer cette fiche" +msgstr "" + +#: include/dossier.inc.php:47 +msgid "Le nom du dossier est vide" +msgstr "" + +#: include/dossier.inc.php:53 +msgid "Désolé vous devez migrer ce modèle en unicode" +msgstr "" + +#: include/dossier.inc.php:55 +msgid "le modele " +msgstr "" + +#: include/dossier.inc.php:55 +msgid " doit être migré en unicode." +msgstr "" + +#: include/dossier.inc.php:56 +msgid "" +"Pour le passer en unicode, faites-en un backup puis restaurez le fichier reçu" +msgstr "" + +#: include/dossier.inc.php:69 +msgid "" +"Desole la creation de ce dossier a echoue,\n" +" la cause la plus probable est deux fois le même nom de dossier" +msgstr "" + +#: include/dossier.inc.php:87 +msgid " est une année invalide" +msgstr "" + +#: include/dossier.inc.php:104 +msgid " Base de donnée " +msgstr "" + +#: include/dossier.inc.php:105 include/dossier.inc.php:310 +msgid "est accèdée, déconnectez-vous d'abord" +msgstr "" + +#: include/dossier.inc.php:153 +msgid "Rafraîchir" +msgstr "" + +#: include/dossier.inc.php:154 +msgid "Ajouter" +msgstr "" + +#: include/dossier.inc.php:185 +msgid "Modifier" +msgstr "" + +#: include/dossier.inc.php:188 +msgid "Backup" +msgstr "" + +#: include/dossier.inc.php:215 +msgid "pas de modèle disponible" +msgstr "" + +#: include/dossier.inc.php:233 +msgid "Nom du dossier" +msgstr "" + +#: include/dossier.inc.php:237 +msgid "Modèle" +msgstr "" + +#: include/dossier.inc.php:240 +msgid "Creation Dossier" +msgstr "" + +#: include/dossier.inc.php:267 include/payment_middle.inc.php:128 +msgid "Modifie" +msgstr "" + +#: include/dossier.inc.php:280 +msgid "Etes vous sûr et certain de vouloir effacer " +msgstr "" + +#: include/dossier.inc.php:283 +msgid "Cochez la case si vous êtes sûr de vouloir effacer ce dossier" +msgstr "" + +#: include/dossier.inc.php:293 +msgid "Désolé, vous n'avez pas coché la case" +msgstr "" + +#: include/dossier.inc.php:300 +msgid "inexistant" +msgstr "" + +#: include/dossier.inc.php:309 +msgid "Base de donnée " +msgstr "" + +#: include/extension.inc.php:45 include/template/extension-detail.php:4 +msgid "Détail extension" +msgstr "" + +#: include/extension.inc.php:53 +msgid "Nouvelle extension" +msgstr "" + +#: include/ext_inc.php:11 +msgid "" +"Vous ne pouvez pas utiliser cette extension. Contactez votre responsable" +msgstr "" + +#: include/fiche_def.inc.php:64 +msgid "Voulez-vous modifier ?" +msgstr "" + +#: include/fiche_def.inc.php:66 +msgid "Attention, ne changer pas la signification de ce poste." +msgstr "" + +#: include/fiche_def.inc.php:67 +msgid "par exemple ne pas changer Client par fournisseur" +msgstr "" + +#: include/fiche_def.inc.php:68 +msgid "" +"sinon le programme fonctionnera mal, utiliser uniquement des chiffres pour " +"la classe de base ou rien" +msgstr "" + +#: include/fiche.inc.php:104 include/forecast.inc.php:239 +#: include/forecast.inc.php:254 include/forecast.inc.php:274 +#: include/forecast.inc.php:312 +msgid "Sauver" +msgstr "" + +#: include/fiche.inc.php:111 +msgid "Ajoutez cet élément" +msgstr "" + +#: include/fiche.inc.php:112 include/quick_writing.inc.php:114 +msgid "Sauvez" +msgstr "" + +#: include/fiche.inc.php:113 +msgid "Effacer cette catégorie" +msgstr "" + +#: include/fiche.inc.php:113 +msgid "Vous confirmez ?" +msgstr "" + +#: include/fiche.inc.php:116 +msgid "Enleve les éléments cochés" +msgstr "" + +#: include/fiche.inc.php:119 +msgid "" +"Attention : il n'y aura pas de demande de confirmation pour enlever les \n" +"attributs sélectionnés. Il ne sera pas possible de revenir en arrière" +msgstr "" + +#: include/fiche.inc.php:213 include/template/security_list_action.php:4 +msgid "Pas d'accès" +msgstr "" + +#: include/forecast.inc.php:197 +msgid "Ajout prévision" +msgstr "" + +#: include/forecast.inc.php:197 +msgid "Ajout d'une prévision" +msgstr "" + +#: include/forecast.inc.php:330 +msgid "Modifier nom ou catégories" +msgstr "" + +#: include/forecast.inc.php:331 +msgid "Modifier éléments" +msgstr "" + +#: include/forecast.inc.php:333 +msgid "Vous confirmez l\\' effacement" +msgstr "" + +#: include/import_inc.php:79 +msgid "Importation terminée" +msgstr "" + +#: include/import_inc.php:115 +msgid "op. concernée" +msgstr "" + +#: include/import_inc.php:139 +msgid "poste comptable Destination" +msgstr "" + +#: include/import_inc.php:167 +msgid "Enlever" +msgstr "" + +#: include/import_inc.php:183 +msgid " opérations à complèter" +msgstr "" + +#: include/import_inc.php:212 include/import_inc.php:271 +msgid "Vous devez selectionner votre période dans vos préférences" +msgstr "" + +#: include/import_inc.php:227 +msgid "opérations à transfèrer" +msgstr "" + +#: include/import_inc.php:245 +msgid "Commencer le transfert" +msgstr "" + +#: include/import_inc.php:323 +msgid "Poste comptable erronné pour l'opération " +msgstr "" + +#: include/import_inc.php:373 +msgid "Tranfert de l'opération " +msgstr "" + +#: include/import_inc.php:373 +msgid " effectué" +msgstr "" + +#: include/import_inc.php:412 +msgid "Import fiche" +msgstr "" + +#: include/impress.inc.php:32 include/user_menu.php:343 +msgid "Journaux" +msgstr "" + +#: include/impress.inc.php:35 include/user_menu.php:230 +msgid "Rapport" +msgstr "" + +#: include/impress.inc.php:36 +msgid "Balance des comptes" +msgstr "" + +#: include/impress.inc.php:37 +msgid "Bilan" +msgstr "" + +#: include/impress.inc.php:38 +msgid "Liste Clients Assujettis" +msgstr "" + +#: include/impress_poste.inc.php:114 +msgid "Depuis" +msgstr "" + +#: include/impress_poste.inc.php:115 +msgid "Jusque " +msgstr "" + +#: include/param_jrn_add.inc.php:61 include/param_jrn_detail.inc.php:77 +msgid "Un paramètre manque" +msgstr "" + +#: include/param_jrn_add.inc.php:67 +msgid "Un journal de ce nom existe déjà" +msgstr "" + +#: include/param_jrn_detail.inc.php:57 +msgid "Journal inexistant" +msgstr "" + +#: include/param_jrn_detail.inc.php:68 +msgid "" +"Impossible d\\'effacer ce journal.\n" +" Il est utilisé\n" +msgstr "" + +#: include/payment_middle.inc.php:47 +msgid "Vous confirmez" +msgstr "" + +#: include/payment_middle.inc.php:59 +msgid "Efface" +msgstr "" + +#: include/payment_middle.inc.php:60 include/payment_middle.inc.php:95 +msgid "Retour sans sauvez" +msgstr "" + +#: include/payment_middle.inc.php:93 +msgid "Enregistre" +msgstr "" + +#: include/payment_middle.inc.php:122 include/template/new_mod_payment.php:16 +msgid "Type de fiche" +msgstr "" + +#: include/payment_middle.inc.php:123 +msgid "enregistré dans le journal" +msgstr "" + +#: include/payment_middle.inc.php:124 +msgid " Avec la fiche" +msgstr "" + +#: include/pref.inc.php:52 +msgid "Mot de passe est modifiée" +msgstr "" + +#: include/pref.inc.php:61 +msgid "Changez vos préférences" +msgstr "" + +#: include/pref.inc.php:69 +msgid "Options Générales" +msgstr "" + +#: include/pref.inc.php:100 +msgid "Thème" +msgstr "" + +#: include/pref.inc.php:134 +msgid "" +"Attention cette période est fermée, vous ne pourrez rien modifier dans le " +"module comptable" +msgstr "" + +#: include/pref.inc.php:149 include/template/forecast_result.php:21 +msgid "Période" +msgstr "" + +#: include/pref.inc.php:160 +msgid "Taille des pages" +msgstr "" + +#: include/pref.inc.php:169 include/pref.inc.php:171 +msgid "Illimité" +msgstr "" + +#: include/pref.inc.php:184 +msgid "Options pour la page d'accueil" +msgstr "" + +#: include/pref.inc.php:185 +msgid "Mini-Rapport : " +msgstr "" + +#: include/pref.inc.php:188 +msgid "Aucun mini rapport" +msgstr "" + +#: include/pref.inc.php:194 +msgid "Le mini rapport est un rapport qui s'affiche sur votre page d'accueil" +msgstr "" + +#: include/pref.inc.php:199 +msgid "Langue" +msgstr "" + +#: include/pref.inc.php:200 +msgid "Selectionnez votre langue" +msgstr "" + +#: include/pref.inc.php:217 +msgid "Valider" +msgstr "" + +#: include/quick_writing.inc.php:66 +msgid "Encoder une Operation" +msgstr "" + +#: include/quick_writing.inc.php:67 +msgid "Encoder une operation dans ce journal" +msgstr "" + +#: include/quick_writing.inc.php:68 +msgid "Voir Operation" +msgstr "" + +#: include/quick_writing.inc.php:69 +msgid "Voir les operations de ce journal" +msgstr "" + +#: include/quick_writing.inc.php:71 +msgid "Autre journal" +msgstr "" + +#: include/quick_writing.inc.php:72 +msgid "Choisir un autre journal" +msgstr "" + +#: include/quick_writing.inc.php:97 +msgid "Utilisez une operation " +msgstr "" + +#: include/quick_writing.inc.php:99 +msgid "Utilisez une operation" +msgstr "" + +#: include/quick_writing.inc.php:112 +msgid "Ajout d'une ligne" +msgstr "" + +#: include/quick_writing.inc.php:118 +msgid "Difference" +msgstr "" + +#: include/quick_writing.inc.php:144 +msgid "Choix du journal" +msgstr "" + +#: include/quick_writing.inc.php:150 +msgid "" +"L'acces a ce journal est interdit, \n" +" contactez votre responsable" +msgstr "" + +#: include/quick_writing.inc.php:205 +msgid "Vous ne pouvez pas accèder à ce journal, contactez votre responsable" +msgstr "" + +#: include/quick_writing.inc.php:215 +msgid "Désolé mais cette periode est fermee pour ce journal" +msgstr "" + +#: include/quick_writing.inc.php:279 +msgid "Autre opération dans ce journal" +msgstr "" + +#: include/report.inc.php:117 +msgid "Définition" +msgstr "" + +#: include/report.inc.php:125 include/report.inc.php:140 +#: include/report.inc.php:162 +msgid "Les lignes vides seront effacées" +msgstr "" + +#: include/report.inc.php:136 +msgid "Importer ce rapport" +msgstr "" + +#: include/report.inc.php:153 +msgid "Mise a jour" +msgstr "" + +#: include/report.inc.php:154 +msgid "Effacement" +msgstr "" + +#: include/supplier_card.inc.php:71 +msgid "Suivi Fournisseur, devis, bon de commande, courrier" +msgstr "" + +#: include/supplier_card.inc.php:72 +msgid "Liste de contacts de ce fournisseur" +msgstr "" + +#: include/supplier_card.inc.php:74 +msgid "Retour à la liste des fournisseurs" +msgstr "" + +#: include/user.inc.php:81 +msgid "Ajout d'utilisateur" +msgstr "" + +#: include/user_menu.php:188 +msgid "Grand Livre" +msgstr "" + +#: include/user_menu.php:188 +msgid "Grand livre : toutes les opérations" +msgstr "" + +#: include/user_menu.php:189 +msgid "Journal de vente / produit" +msgstr "" + +#: include/user_menu.php:190 +msgid "Journaux de dépense, d'achat" +msgstr "" + +#: include/user_menu.php:191 +msgid "Financier" +msgstr "" + +#: include/user_menu.php:191 +msgid "Journaux financiers: les banques, la caisse" +msgstr "" + +#: include/user_menu.php:192 +msgid "Ecriture directe" +msgstr "" + +#: include/user_menu.php:192 +msgid "Ecriture directe dans les journaux" +msgstr "" + +#: include/user_menu.php:195 +msgid "Ajouter, modifier ou effacer des fiches" +msgstr "" + +#: include/user_menu.php:196 +msgid "Avancé" +msgstr "" + +#: include/user_menu.php:196 +msgid "Opérations délicates" +msgstr "" + +#: include/user_menu.php:225 +msgid "Ecritures definies" +msgstr "" + +#: include/user_menu.php:226 +msgid "Periode" +msgstr "" + +#: include/user_menu.php:226 +msgid "Gestion des periodes" +msgstr "" + +#: include/user_menu.php:227 +msgid "Centralise" +msgstr "" + +#: include/user_menu.php:227 +msgid "Centralisation" +msgstr "" + +#: include/user_menu.php:229 +msgid "Gestion des stocks" +msgstr "" + +#: include/user_menu.php:231 +msgid "Import Banque" +msgstr "" + +#: include/user_menu.php:232 +msgid "Ecriture ouverture" +msgstr "" + +#: include/user_menu.php:233 +msgid "Vérification" +msgstr "" + +#: include/user_menu.php:256 include/user_menu.php:362 +msgid "Création" +msgstr "" + +#: include/user_menu.php:307 +msgid "Utilisateurs" +msgstr "" + +#: include/user_menu.php:307 +msgid "Gestion des utilisateurs" +msgstr "" + +#: include/user_menu.php:308 +msgid "Dossiers" +msgstr "" + +#: include/user_menu.php:308 +msgid "Gestion des dossiers" +msgstr "" + +#: include/user_menu.php:309 +msgid "Modèles" +msgstr "" + +#: include/user_menu.php:309 +msgid "Gestion des modèles" +msgstr "" + +#: include/user_menu.php:310 +msgid "Restaure" +msgstr "" + +#: include/user_menu.php:310 +msgid "Restaure une base de données" +msgstr "" + +#: include/user_menu.php:311 +msgid "Accueil" +msgstr "" + +#: include/user_menu.php:312 +msgid "Sortie" +msgstr "" + +#: include/user_menu.php:336 +msgid "Sociétés" +msgstr "" + +#: include/user_menu.php:336 +msgid "Parametre societe" +msgstr "" + +#: include/user_menu.php:337 +msgid "Divers" +msgstr "" + +#: include/user_menu.php:337 +msgid "Devise, moyen de paiement" +msgstr "" + +#: include/user_menu.php:338 +msgid "Plan Comptable" +msgstr "" + +#: include/user_menu.php:338 +msgid "Modification du plan comptable" +msgstr "" + +#: include/user_menu.php:340 include/template/extension-sec.php:3 +msgid "Sécurité" +msgstr "" + +#: include/user_menu.php:340 +msgid "securite" +msgstr "" + +#: include/user_menu.php:341 +msgid "Ecritures définies" +msgstr "" + +#: include/user_menu.php:342 +msgid "Facture, lettre de rappel, proposition..." +msgstr "" + +#: include/user_menu.php:343 +msgid "Creation et modification de journaux" +msgstr "" + +#: include/user_menu.php:394 +msgid " Immobilisé" +msgstr "" + +#: include/user_menu.php:395 +msgid "Actif a un an au plus" +msgstr "" + +#: include/user_menu.php:396 +msgid "Stock et commande" +msgstr "" + +#: include/user_menu.php:397 +msgid "Compte tiers" +msgstr "" + +#: include/user_menu.php:398 +msgid "Actif" +msgstr "" + +#: include/user_menu.php:399 +msgid "Charges" +msgstr "" + +#: include/user_menu.php:400 +msgid "Produits" +msgstr "" + +#: include/user_menu.php:401 include/user_menu.php:402 +msgid "Hors Comptabilité" +msgstr "" + +#: include/user_menu.php:416 +msgid "Importer CSV" +msgstr "" + +#: include/user_menu.php:417 +msgid "Verif CSV" +msgstr "" + +#: include/user_menu.php:418 +msgid "Transfert CSV" +msgstr "" + +#: include/user_menu.php:443 +msgid "Tableau de bord" +msgstr "" + +#: include/user_menu.php:444 +msgid "Preference" +msgstr "" + +#: include/user_menu.php:445 include/template/security_list_action.php:51 +msgid "Paramètre" +msgstr "" + +#: include/user_menu.php:446 +msgid "Autre Dossier" +msgstr "" + +#: include/user_menu.php:449 +msgid "Compta Générale" +msgstr "" + +#: include/user_menu.php:450 include/template/security_list_action.php:98 +msgid "Gestion" +msgstr "" + +#: include/template/account_result.php:2 include/template/card_result.php:2 +msgid "Résultats" +msgstr "" + +#: include/template/account_result.php:21 +msgid "Nombre d'enregistrements" +msgstr "" + +#: include/template/account_search.php:1 +msgid "Partie du poste comptable ou du libellé" +msgstr "" + +#: include/template/category_of_card.php:3 +msgid "Nom de la catégorie de fiche" +msgstr "" + +#: include/template/category_of_card.php:7 +#: include/template/fiche_def_input.php:7 +msgid "Classe de base" +msgstr "" + +#: include/template/category_of_card.php:14 +msgid "Création automatique du poste comptable" +msgstr "" + +#: include/template/category_of_card.php:18 +msgid "" +"Si vous utilisez la création automatique de poste, chaque nouvelle fiche de " +"cette catégorie aura son propre poste comptable. Ce poste comptable sera la " +"classe de base augmenté de 1." +msgstr "" + +#: include/template/category_of_card.php:21 +msgid "" +"Si vous n'utilisez pas la création automatique, toutes les nouvelles fiches " +"auront par défaut le même poste comptable. Ce poste comptable par défaut est " +"la classe de base." +msgstr "" + +#: include/template/category_of_card.php:24 +msgid " A moins qu'en créant la fiche, vous forcez un autre poste comptable" +msgstr "" + +#: include/template/dashboard.php:3 include/template/detail-action.php:90 +msgid "Calendrier" +msgstr "" + +#: include/template/dashboard.php:10 +msgid "Dernières opérations" +msgstr "" + +#: include/template/dashboard.php:40 +msgid "Dernières actions" +msgstr "" + +#: include/template/detail-action.php:3 +msgid "Informations générales" +msgstr "" + +#: include/template/detail-action.php:24 +msgid "Heure" +msgstr "" + +#: include/template/detail-action.php:33 +msgid "Reference" +msgstr "" + +#: include/template/detail-action.php:42 +msgid "Destinataire" +msgstr "" + +#: include/template/detail-action.php:71 +msgid "Concerne" +msgstr "" + +#: include/template/detail-action.php:80 +msgid "Type" +msgstr "" + +#: include/template/detail-action.php:99 +msgid "Etat" +msgstr "" + +#: include/template/detail-action.php:109 +msgid "Priorité" +msgstr "" + +#: include/template/detail-action.php:119 +msgid "Affecté" +msgstr "" + +#: include/template/detail-action.php:155 +#: include/template/form_ledger_fin.php:21 +msgid "Commentaire" +msgstr "" + +#: include/template/detail-action.php:167 +msgid "Détail des articles" +msgstr "" + +#: include/template/detail-action.php:180 +msgid "prix unitaire" +msgstr "" + +#: include/template/detail-action.php:182 +msgid "Code TVA" +msgstr "" + +#: include/template/detail-action.php:184 +msgid "Montant TVAC" +msgstr "" + +#: include/template/detail-action.php:210 +msgid "Montrer les détails" +msgstr "" + +#: include/template/detail-action.php:211 +msgid "Cacher les détails" +msgstr "" + +#: include/template/detail-action.php:243 +msgid "Pièces attachées" +msgstr "" + +#: include/template/detail-action.php:251 +#, php-format +msgid "Voulez-vous effacer le document" +msgstr "" + +#: include/template/detail-action.php:270 +msgid "Je ne peux pas ajouter de fichier" +msgstr "" + +#: include/template/extension-detail.php:23 +msgid "description" +msgstr "" + +#: include/template/extension-detail.php:31 +msgid "chemin et nom de fichier" +msgstr "" + +#: include/template/extension-detail.php:39 include/template/extension.php:18 +msgid "Activé" +msgstr "" + +#: include/template/extension.php:18 +msgid "Désactivé" +msgstr "" + +#: include/template/extension.php:23 +msgid "Effacer extension" +msgstr "" + +#: include/template/extension.php:24 +msgid "Confirmez effacement de l'extension ??" +msgstr "" + +#: include/template/extension-sec.php:6 +msgid "login" +msgstr "" + +#: include/template/extension-sec.php:7 +msgid "Prénom" +msgstr "" + +#: include/template/fiche_def_input.php:12 +msgid "" +"Création automatique du poste comptable uniquement s'il n\\y a qu'un seul " +"poste" +msgstr "" + +#: include/template/forecast_cat.php:5 +msgid "Catégories" +msgstr "" + +#: include/template/forecast_cat.php:8 +msgid "Ordre" +msgstr "" + +#: include/template/forecast-detail.php:7 +msgid "Catégorie" +msgstr "" + +#: include/template/forecast-detail.php:9 +msgid "QuickCode" +msgstr "" + +#: include/template/forecast-detail.php:12 +msgid "Débit ou Crédit" +msgstr "" + +#: include/template/forecast_result.php:27 +msgid "Totaux" +msgstr "" + +#: include/template/forecast_result.php:32 +msgid "Estimé" +msgstr "" + +#: include/template/forecast_result.php:67 +msgid "Réel" +msgstr "" + +#: include/template/forecast_result.php:81 +#: include/template/forecast_result.php:125 +msgid "Différence" +msgstr "" + +#: include/template/forecast_result.php:93 +msgid "Diff. cumul." +msgstr "" + +#: include/template/forecast_result.php:119 +msgid "Total Catégorie estimé" +msgstr "" + +#: include/template/forecast_result.php:122 +msgid "Total Catégorie réel" +msgstr "" + +#: include/template/form_ledger_detail.php:18 +msgid "Num Pj" +msgstr "" + +#: include/template/form_ledger_detail.php:28 +msgid "prix/unité htva" +msgstr "" + +#: include/template/form_ledger_detail.php:33 +msgid "tot.tva" +msgstr "" + +#: include/template/form_ledger_detail.php:34 +msgid "tvac" +msgstr "" + +#: include/template/form_ledger_fin.php:11 +msgid "Extrait de compte" +msgstr "" + +#: include/template/form_ledger_fin.php:12 +msgid "Numéro extrait" +msgstr "" + +#: include/template/form_ledger_fin.php:13 +msgid "Solde début" +msgstr "" + +#: include/template/form_ledger_fin.php:14 +msgid "Solde Fin" +msgstr "" + +#: include/template/form_ledger_fin.php:23 +msgid "Op. Concernée(s)" +msgstr "" + +#: include/template/ledger_search.php:1 +msgid "Critères de Recherche" +msgstr "" + +#: include/template/ledger_search.php:5 +msgid "Dans le journal" +msgstr "" + +#: include/template/ledger_search.php:14 +msgid "Et Compris entre les date" +msgstr "" + +#: include/template/ledger_search.php:17 include/template/ledger_search.php:35 +msgid "et" +msgstr "" + +#: include/template/ledger_search.php:23 +msgid "Et contenant dans la description, pièce justificative ou n° interne" +msgstr "" + +#: include/template/ledger_search.php:32 +msgid "Et compris entre les montants" +msgstr "" + +#: include/template/ledger_search.php:40 +msgid "Et utilisant la fiche (quick code)" +msgstr "" + +#: include/template/ledger_search.php:48 +msgid "Et utilisant le poste comptable" +msgstr "" + +#: include/template/ledger_search.php:58 +msgid "Et uniquement non payées" +msgstr "" + +#: include/template/new_mod_payment.php:2 +msgid "Nouveau moyen de paiement" +msgstr "" + +#: include/template/new_mod_payment.php:25 +msgid "Pour le type de journal" +msgstr "" + +#: include/template/new_mod_payment.php:34 +msgid "Paiement enregistré dans " +msgstr "" + +#: include/template/new_mod_payment.php:43 +msgid "Avec la fiche" +msgstr "" + +#: include/template/param_jrn.php:4 +msgid "Nom journal" +msgstr "" + +#: include/template/param_jrn.php:8 +msgid "Postes utilisables journal (débit/crédit)" +msgstr "" + +#: include/template/param_jrn.php:22 +msgid "Type de journal" +msgstr "" + +#: include/template/param_jrn.php:28 +msgid "Préfixe code interne" +msgstr "" + +#: include/template/param_jrn.php:32 +msgid "Préfixe pièce justificative" +msgstr "" + +#: include/template/param_jrn.php:36 +msgid "Le préfixe des pièces peut être différent pour chaque journal" +msgstr "" + +#: include/template/param_jrn.php:40 +msgid "N° pièce justificative" +msgstr "" + +#: include/template/param_jrn.php:44 +msgid "La numérotation est propre à chaque journal" +msgstr "" + +#: include/template/param_jrn.php:53 +msgid "Fiches Débit" +msgstr "" + +#: include/template/param_jrn.php:54 +msgid "Fiches Crédit" +msgstr "" + +#: include/template/security_list_action.php:65 +msgid "Comptabilité Analytique" +msgstr "" + +#: include/template/security_list_action.php:87 +msgid "Prévision" +msgstr "" diff --git a/html/modify_op.php b/html/modify_op.php index 6a87f6a31..29969000c 100644 --- a/html/modify_op.php +++ b/html/modify_op.php @@ -215,7 +215,7 @@ if ( isset($_POST['update_record']) ) { if ( strpos($_POST['rapt'],',') != 0 ) { - $aRapt=split(',',$_POST['rapt']); + $aRapt=explode(',',$_POST['rapt']); /* reconcialition */ foreach ($aRapt as $rRapt) { diff --git a/html/priv_user.php b/html/priv_user.php index 89a4648d4..00e41aec6 100644 --- a/html/priv_user.php +++ b/html/priv_user.php @@ -18,7 +18,7 @@ */ // Copyright Author Dany De Bontridder ddebontridder@yahoo.fr /*! \file - * \brief Users Security + * \brief Users Security */ include_once("ac_common.php"); require_once('class_database.php'); @@ -57,7 +57,7 @@ echo '
'; echo '

Gestion Utilisateurs

'; -// User is valid and you're an admin +// User is valid and you're an admin ?> @@ -76,23 +76,23 @@ if ( isset ( $_GET['reset_passwd']) ){ if ( isset ($_POST['SAVE']) ){ $uid = $_POST['UID']; - // Update User + // Update User $cn=new Database(); $last_name=$_POST['fname']; $first_name=$_POST['lname']; $UserChange=new User($cn,$uid); - if ( $UserChange->load()==-1) { - alert("Cet utilisateur n'existe pas");} + if ( $UserChange->load()==-1) { + alert("Cet utilisateur n'existe pas");} else { $UserChange->first_name=$first_name; $UserChange->last_name=$last_name; $UserChange->active=$_POST['Actif']; $UserChange->admin=$_POST['Admin']; $UserChange->save(); - + // Update Priv on Folder foreach ($_POST as $name=>$elem) - { + { echo_debug('priv_user.php',__LINE__,"_POST $name $elem"); if ( substr_count($name,'PRIV')!=0 ) { @@ -100,7 +100,7 @@ if ( isset ($_POST['SAVE']) ){ $db_id=substr($name,4); $cn=new Database(); $UserChange->set_folder_access($db_id,$elem); - + } } @@ -132,7 +132,7 @@ $UserChange->load();
-prénom @@ -146,9 +146,9 @@ if ( $UserChange->active == 1 ) { $ACT="UNCHECKED";$NACT="CHECKED"; } echo ""; ?>
',$UserChange->name); ?>
+prénom ',$UserChange->first_name); ?>
"; -printf(' Actif',$ACT); +printf(' Actif',$ACT); echo ""; -printf(' Non Actif',$NACT); +printf(' Non Actif',$NACT); echo "
@@ -162,9 +162,9 @@ if ( $UserChange->admin == 1 ) { $ACT="UNCHECKED";$NACT="CHECKED"; } echo ""; -printf(' Administrateur global',$ACT); +printf(' Administrateur global',$ACT); echo ""; -printf(' Pas administrateur global ',$NACT); +printf(' Pas administrateur global ',$NACT); echo ""; ?> @@ -178,10 +178,11 @@ echo ""; Les autres droits doivent être réglés dans les dossiers (paramètre->sécurité)

-'X','label'=>'Aucun Accès'), array('value'=>'R','label'=>'Utilisateur normal'), + array('value'=>'P','label'=>'Utilisateur uniquement extension'), array('value'=>'L','label'=>'Administrateur local(Tous les droits)') ); $repo=new Dossier(0); @@ -198,7 +199,7 @@ foreach ( $Dossier as $rDossier) { $priv=$mod_user->get_folder_access($rDossier['dos_id']); printf("",h($rDossier['dos_name'])); - + $select=new ISelect(); $select->table=1; $select->name=sprintf('PRIV%s',$rDossier['dos_id']); @@ -212,7 +213,7 @@ foreach ( $Dossier as $rDossier) {
Dossier : %s
diff --git a/html/style-color.css b/html/style-color.css index f4e8de981..f54fa042f 100644 --- a/html/style-color.css +++ b/html/style-color.css @@ -616,12 +616,12 @@ div.popup_border_notitle { div.popup_content { position:absolute; - top:10%; + top:5%; bottom:0; left:0; right:0; width:100%; - height:90%; + height:95%; overflow: auto; background-color:lightblue; font-size:10px ; diff --git a/html/style-light.css b/html/style-light.css index f4e8de981..c21ae7ba1 100644 --- a/html/style-light.css +++ b/html/style-light.css @@ -4,6 +4,8 @@ BODY { background-color:#EDF3FF; font-size:12px; font-family:arial,sans-serif; + padding:0; + margin:0; } .notice { color:red; @@ -616,12 +618,12 @@ div.popup_border_notitle { div.popup_content { position:absolute; - top:10%; + top:5%; bottom:0; left:0; right:0; width:100%; - height:90%; + height:95%; overflow: auto; background-color:lightblue; font-size:10px ; diff --git a/html/style.css b/html/style.css index 424895d5b..c9a7d2e21 100644 --- a/html/style.css +++ b/html/style.css @@ -4,6 +4,8 @@ BODY { background-color:#C2D4D7; font-size:0.7em; font-family:Arial, Helvetica, sans-serif; + padding:0; + margin:0; } .notice { color:red; @@ -600,12 +602,12 @@ div.popup_border_notitle { div.popup_content { position:absolute; - top:10%; + top:5%; bottom:0; left:0; right:0; width:100%; - height:90%; + height:95%; overflow: auto; background-color:lightblue; font-size:12px ; diff --git a/html/user_compta.php b/html/user_compta.php index bc5cfc5ed..4fdc7743a 100644 --- a/html/user_compta.php +++ b/html/user_compta.php @@ -39,9 +39,9 @@ echo_debug('user_compta.php',__LINE__,"user is ".$_SESSION['g_user']); // Get The priv on the selected folder if ( $User->admin == 0 && $User->is_local_admin(dossier::id()) == 0 ) { - + $r=$User->get_folder_access($gDossier); - if ($r == 'X' ){ + if ($r == 'X' ||$r=='P'){ /* Cannot Access */ NoAccess(1); } diff --git a/html/user_login.php b/html/user_login.php index 11c95018a..0dd34e177 100644 --- a/html/user_login.php +++ b/html/user_login.php @@ -77,7 +77,6 @@ $result.=''; if ( $User->Admin() == 1 ) { $result.="
Administration "; } -$result.=''._('Aide').' '; $result.=''._('Préférence').''; $result.=''._('Deconnexion').''; $result.=""; diff --git a/include/ac_common.php b/include/ac_common.php index 2f6249a9a..e63a56d08 100644 --- a/include/ac_common.php +++ b/include/ac_common.php @@ -1,4 +1,4 @@ -'.htmlspecialchars($p_string).'';} function hb($p_string) { return ''.htmlspecialchars($p_string).'';} function th($p_string) { return ''.htmlspecialchars($p_string).'';} -/*!\brief surrond the string with td +/*!\brief surrond the string with td *\param string *\param class to use * \return string surrounded by td @@ -43,15 +43,15 @@ function th($p_string) { return ''.htmlspecialchars($p_string).'';} function td($p_string,$p_class=''){ return ''.$p_string.'';} /*!\brief escape correctly php string to javascript */ function j($p_string) { $a=preg_replace("/\r?\n/", "\\n", addslashes($p_string)); return $a;} -/*! +/*! * \brief log error into the /tmp/phpcompta_error.log it doesn't work on windows * * \param p_log message * \param p_line line number * \param p_message is the message - * + * * \return nothing - * + * */ function echo_error ($p_log, $p_line="", $p_message="") { echo "ERREUR :".$p_log." ".$p_line." ".$p_message; @@ -62,15 +62,15 @@ function echo_error ($p_log, $p_line="", $p_message="") { echo_debug($p_log,$p_line,$p_message); } } - -/*! + +/*! * \brief Compare 2 dates - * \param p_date + * \param p_date * \param p_date_oth - * - * \return + * + * \return * - == 0 les dates sont identiques - * - > 0 date1 > date2 + * - > 0 date1 > date2 * - < 0 date1 < date2 */ function cmpDate ($p_date,$p_date_oth) { @@ -88,12 +88,12 @@ function cmpDate ($p_date,$p_date_oth) { // si $p_date > $p_date_oth return > 0 return $l_mkdate-$l2_mkdate; } -/*! +/*! * \brief check if the argument is a number * * \param $p_int number to test * - * \return + * \return * - 1 it's a number * - 0 it is not */ @@ -107,16 +107,16 @@ function isNumber(&$p_int) { } -/*! +/*! * \brief Verifie qu'une date est bien formaté * en d.m.y et est valable * \param $p_date - * + * * \return * - null si la date est invalide ou malformaté * - $p_date si tout est bon * - */ + */ function isDate ( $p_date) { if ( strlen (trim($p_date)) == 0 ) return null; @@ -141,9 +141,9 @@ function isDate ( $p_date) { }// !ereg return $p_date; } -/*! +/*! * \brief Default page header for each page - * + * * \param p_theme default theme * \param $p_script * \param $p_script2 another js script @@ -151,13 +151,13 @@ function isDate ( $p_date) { * \return none */ function html_page_start($p_theme="",$p_script="",$p_script2="") -{ +{ $cn=new Database(); if ( $p_theme != "") { $Res=$cn->exec_sql("select the_filestyle from theme where the_name='".$p_theme."'"); - if (Database::num_row($Res)==0) + if (Database::num_row($Res)==0) $style="style.css"; else { $s=Database::fetch_array($Res,0); @@ -172,7 +172,7 @@ function html_page_start($p_theme="",$p_script="",$p_script2="") if ( $p_script2 != "" ) $p_script2=''; - echo " + echo " PhpCompta @@ -198,9 +198,9 @@ function html_page_start($p_theme="",$p_script="",$p_script2="") } } -/*! +/*! * \brief Minimal page header for each page, used for small popup window - * + * * \param p_theme default theme * \param $p_script * \param $p_script2 another js script @@ -208,13 +208,13 @@ function html_page_start($p_theme="",$p_script="",$p_script2="") * \return none */ function html_min_page_start($p_theme="",$p_script="",$p_script2="") -{ +{ $cn=new Database(); if ( $p_theme != "") { $Res=$cn->exec_sql("select the_filestyle from theme where the_name='".$p_theme."'"); - if (Database::num_row($Res)==0) + if (Database::num_row($Res)==0) $style="style.css"; else { $s=Database::fetch_array($Res,0); @@ -230,7 +230,7 @@ function html_min_page_start($p_theme="",$p_script="",$p_script2="") if ( $p_script2 != "" ) $p_script2=''; - echo " + echo " PhpCompta @@ -248,31 +248,31 @@ function html_min_page_start($p_theme="",$p_script="",$p_script2="") } -/*! - * \brief end tag - * +/*! + * \brief end tag + * */ function html_page_stop() { echo ""; echo ""; } -/*! - * \brief Echo no access and stop - * +/*! + * \brief Echo no access and stop + * * \return nothing */ -function NoAccess($js=1) +function NoAccess($js=1) { - if ( $js == 1 ) + if ( $js == 1 ) { echo ""; } - else + else { echo '
'; echo '

'._(' Cette action ne vous est pas autorisée Contactez votre responsable').'

'; @@ -280,13 +280,13 @@ function NoAccess($js=1) } exit -1; } -/*! +/*! * \brief Fix the problem with the quote char for the database - * - * \param $p_string + * + * \param $p_string * \return a string which won't let strange char for the database */ -function FormatString($p_string) +function FormatString($p_string) { $p_string=trim($p_string); if (strlen($p_string) == 0 ) return null; @@ -296,10 +296,10 @@ function FormatString($p_string) return $p_string; } -/*! -/* \brief store the string which print - * the content of p_array in a table - * used to display the menu +/*! +/* \brief store the string which print + * the content of p_array in a table + * used to display the menu * \param $p_array array like ( HREF reference, visible item (name),Help(opt), * selected (opt) * \param $p_dir direction of the menu (H Horizontal V vertical) @@ -317,9 +317,9 @@ function ShowItem($p_array,$p_dir='V',$class="mtitle",$class_ref="mtitle",$defau foreach ($p_array as $all=>$href){ $title=""; $set="XX"; - if ( isset ($href[2] )) + if ( isset ($href[2] )) $title=$href[2]; - if ( isset($href[3] )) + if ( isset($href[3] )) $set=$href[3]; if ( $set == $default ) @@ -336,7 +336,7 @@ function ShowItem($p_array,$p_dir='V',$class="mtitle",$class_ref="mtitle",$defau $title=""; $set="A"; - if ( isset ($href[2] )) + if ( isset ($href[2] )) $title=$href[2]; if ( isset($href[3])) @@ -356,31 +356,31 @@ function ShowItem($p_array,$p_dir='V',$class="mtitle",$class_ref="mtitle",$defau $ret.=""; return $ret; } -/*! +/*! * \brief warns - * + * * \param p_string error message * gen : * - none * \return: * - none */ -function echo_warning($p_string) +function echo_warning($p_string) { echo '

'.$p_string."

"; } -/*! +/*! * \brief Show the periode which found thanks its id - * - * - * \param $p_cn database connection + * + * + * \param $p_cn database connection * \param p_id * \param pos Start or end * * \return: string */ function getPeriodeName($p_cn,$p_id,$pos='p_start') { - if ( $pos != 'p_start' and + if ( $pos != 'p_start' and $pos != 'p_end') echo_error('ac_common.php'."-".__LINE__.' UNDEFINED PERIODE'); $ret=$p_cn->get_value("select to_char($pos,'Mon YYYY') as t from parm_periode where p_id=$p_id"); @@ -388,10 +388,10 @@ function getPeriodeName($p_cn,$p_id,$pos='p_start') { } -/*! - * \brief Return the period corresponding to the +/*! + * \brief Return the period corresponding to the * date - * + * * \param p_cn database connection * \param p_date the month + year 'MM.YYYY' * @@ -401,7 +401,7 @@ function getPeriodeName($p_cn,$p_id,$pos='p_start') { function getPeriodeFromMonth($p_cn,$p_date) { $R=$p_cn->get_value("select p_id from parm_periode where to_char(p_start,'DD.MM.YYYY') = '01.$p_date'"); - if ( $R == "" ) + if ( $R == "" ) return -1; return $R; } @@ -422,13 +422,13 @@ function Decode($p_html){ * \param $p_from start date (date) * \param $p_to end date (date) * \param $p_form if the p_from and p_to are date or p_id - * \param $p_field column name + * \param $p_field column name * \return a string containg the query */ function sql_filter_per($p_cn,$p_from,$p_to,$p_form='p_id',$p_field='jr_tech_per') { - if ( $p_form != 'p_id' && + if ( $p_form != 'p_id' && $p_form != 'date' ) { echo_error (__FILE__,__LINE__,'Mauvais parametres '); @@ -444,22 +444,22 @@ function sql_filter_per($p_cn,$p_from,$p_to,$p_form='p_id',$p_field='jr_tech_per throw new Exception(__FILE__.__LINE__.'Attention periode '. ' non trouvee periode p_from='.$p_from. 'p_to_periode = '.$p_to); - + $p_from=$a_start['p_start']; $p_to=$a_end['p_end']; - } - if ( $p_from == $p_to ) + } + if ( $p_from == $p_to ) $periode=" $p_field = (select p_id from parm_periode ". " where ". - " p_start = to_date('$p_from','DD.MM.YYYY')) "; + " p_start = to_date('$p_from','DD.MM.YYYY')) "; else $periode = "$p_field in (select p_id from parm_periode ". " where p_start >= to_date('$p_from','DD.MM.YYYY') and p_end <= to_date('$p_to','DD.MM.YYYY')) "; return $periode; } -/*!\brief alert in javascript +/*!\brief alert in javascript *\param $p_msg is the message *\param $buffer if false, echo directly and execute the javascript, if $buffer is true, the alert javascript * is in the return string @@ -482,7 +482,7 @@ function alert($p_msg,$buffer=false) function set_language() { $dir=""; $dir=setlocale(LC_MESSAGES,$_SESSION['g_lang']); - + if ( $dir == "") { $dir=setlocale(LC_MESSAGES,"fr_FR.utf8"); echo ''.$_SESSION['g_lang'].'domaine non supporté'; diff --git a/include/argenta_be.inc.php b/include/argenta_be.inc.php index a2ff3c4a4..a23fb0320 100644 --- a/include/argenta_be.inc.php +++ b/include/argenta_be.inc.php @@ -34,7 +34,7 @@ while (($data = fgetcsv($handle, 2000,"!")) !== FALSE) { $num = count($data); for ($c=0; $c < $num; $c++) { if ( $line==1) { - $row=split(';',$data[$c]); + $row=explode(';',$data[$c]); $num_compte=$row[1]; } if ( $line < 2 ) @@ -42,7 +42,7 @@ while (($data = fgetcsv($handle, 2000,"!")) !== FALSE) { //----------------------------------------------------- // Parsing CSV comes here //----------------------------------------------------- - $row=split(';',$data[$c]); + $row=explode(';',$data[$c]); echo 'ici sizeof $row = '.sizeof($row); echo_debug('argenta',__LINE__,'$row = '.var_export($row,true)); echo_debug('argenta',__LINE__,'sizeof($row)'.sizeof($row)); diff --git a/include/cbc_be.inc.php b/include/cbc_be.inc.php index 8594e1b3c..1fa1d052e 100644 --- a/include/cbc_be.inc.php +++ b/include/cbc_be.inc.php @@ -36,7 +36,7 @@ while (($data = fgetcsv($handle, 2000,'@')) !== FALSE) { //----------------------------------------------------- // Parsing CSV comes here //----------------------------------------------------- - $row=split(';',$data[$c]); + $row=explode(';',$data[$c]); echo_debug('cbc_be',__LINE__,'$row = '.var_export($row,true)); echo_debug('cbc_be',__LINE__,'sizeof($row)'.sizeof($row)); if ( sizeof ($row) < 13 ) diff --git a/include/class_acc_account_ledger.php b/include/class_acc_account_ledger.php index b5b8d5846..1596ad779 100644 --- a/include/class_acc_account_ledger.php +++ b/include/class_acc_account_ledger.php @@ -243,7 +243,7 @@ function get_solde_detail($p_cond="") { { if ( $line_tva['tva_poste'] == '' ) continue; - list($tva_deb,$tva_cred)=split(',',$line_tva['tva_poste']); + list($tva_deb,$tva_cred)=explode(',',$line_tva['tva_poste']); if ( $this->id == $tva_deb || $this->id == $tva_cred ) { @@ -368,7 +368,7 @@ function get_solde_detail($p_cond="") { if ( trim ($filter) == '') return 0; - $valid_cred=split(" ",$filter); + $valid_cred=explode(" ",$filter); $sql="select count(*) as poste from tmp_pcmn where "; // Creation query $or=""; @@ -403,7 +403,7 @@ function get_solde_detail($p_cond="") { $l=new Acc_Ledger($this->db,$p_jrn); $row=$l->get_propertie(); if ( strlen(trim($row['jrn_def_class_deb'])) == 0 ) return array(); - $valid_account=split(" ",$row['jrn_def_class_deb']); + $valid_account=explode(" ",$row['jrn_def_class_deb']); return $valid_account; } /*!\brief build a sql statement thanks a array found with get_account_ledger diff --git a/include/class_acc_ledger.php b/include/class_acc_ledger.php index b0d109f4e..8d23e7464 100644 --- a/include/class_acc_ledger.php +++ b/include/class_acc_ledger.php @@ -910,7 +910,7 @@ jr_comment||' ('||c_internal||')'||case when jr_pj_number is not null and jr_pj_ { echo_debug('class_acc_ledger',__LINE__,'ICI'); echo_debug('class_acc_ledger',__LINE__,'Montant TVA = '.$p_array['AMOUNT_TVA']); - list($tva_deb,$tva_cred)=split(',',$line_tva['tva_poste']); + list($tva_deb,$tva_cred)=explode(',',$line_tva['tva_poste']); if ( $code['j_poste'] == $tva_deb || $code['j_poste'] == $tva_cred ) { @@ -1578,7 +1578,14 @@ jr_comment||' ('||c_internal||')'||case when jr_pj_number is not null and jr_pj_ if ( isset(${'qc_'.$i})) { $qc=new fiche($this->db); $qc->get_by_qcode(${'qc_'.$i},false); - $poste=$qc->strAttribut(ATTR_DEF_ACCOUNT); + $sposte=$qc->strAttribut(ATTR_DEF_ACCOUNT); + /* if there are 2 accounts take following the deb or cred */ + if (strpos($sposte,',') != 0 ){ + $array=explode(",",$sposte); + $poste=(isset(${'ck'.$i}))?$array[0]:$array[1]; + } else { + $poste=$sposte; + } $quick_code=${'qc_'.$i}; } else { @@ -1588,6 +1595,8 @@ jr_comment||' ('||c_internal||')'||case when jr_pj_number is not null and jr_pj_ // compute the periode is do not check it if ($check_periode == false ) $acc_op->periode=$oPeriode->p_id; $acc_op->desc=$desc; + if ( strlen(trim(${'ld'.$i})) != 0 ) + $acc_op->desc=${'ld'.$i}; $acc_op->amount=round(${'amount'.$i},2); $acc_op->grpt=$seq; $acc_op->poste=$poste; @@ -1595,8 +1604,6 @@ jr_comment||' ('||c_internal||')'||case when jr_pj_number is not null and jr_pj_ $acc_op->type=(isset (${'ck'.$i}))?'d':'c'; $acc_op->qcode=$quick_code; $j_id=$acc_op->insert_jrnx(); - if ( strlen(trim(${'ld'.$i})) != 0 ) - $acc_op->update_comment(${'ld'.$i}); $tot_amount+=round($acc_op->amount,2); $tot_deb+=($acc_op->type=='d')?$acc_op->amount:0; $tot_cred+=($acc_op->type=='c')?$acc_op->amount:0; @@ -1851,9 +1858,11 @@ function get_last_date() $str_file=$doc->Generate(); // Move the document to the jrn $doc->MoveDocumentPj($internal); - // Update the comment with invoice number - $sql="update jrn set jr_comment=' document ".$doc->d_number."' where jr_internal='$internal'"; - $this->db->exec_sql($sql); + // Update the comment with invoice number, if the comment is empty + if ( ! isset ($e_comm) || strlen(trim($e_comm))== 0 ) { + $sql="update jrn set jr_comment=' document ".$doc->d_number."' where jr_internal='$internal'"; + $this->db->exec_sql($sql); + } return '

'.$str_file.'

'; } @@ -1870,7 +1879,16 @@ function get_last_date() if ( $empl->empty_attribute(ATTR_DEF_ACCOUNT)== true) { throw new Exception('Celui qui paie n\' a pas de poste comptable',20); } - $poste=new Acc_Account_Ledger($this->db,$empl->strAttribut(ATTR_DEF_ACCOUNT)); + /* get the account and explode if necessary */ + $sposte=$empl->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the debit one for customer + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[0]; + } else { + $poste_val=$sposte; + } + $poste=new Acc_Account_Ledger($this->db,$poste_val); if ( $poste->load() == false ){ throw new Exception('Pour la fiche'.$empl->quick_code.' le poste comptable ['.$poste->id.'n\'existe pas',9); @@ -2075,9 +2093,10 @@ function get_last_date() if ( $p_action == 'client') $p_action='ALL'; if ( $p_action == 'fournisseur') $p_action='ALL'; if ( $p_action == 'adm') $p_action='ALL'; + if ( $p_action == 'quick_writing') $p_action='ALL'; - $fil_ledger=$user->get_ledger_sql($p_action,2); + $fil_ledger=$user->get_ledger_sql($p_action,3); $and=' and '; } else if ( $p_jrn != 0 ){ $fil_ledger = ' jrn_def_id = '.$p_jrn; @@ -2300,10 +2319,10 @@ function get_last_date() $array=$this->db->get_array($sql); return $array; } - /** + /** *@brief retreive the jr_grpt_id from a ledger *@param $p_what the column to seek - * possible values are + * possible values are * - internal *@param $p_value the value of the col. */ @@ -2312,7 +2331,7 @@ function get_last_date() case 'internal': return $this->db->get_value('select jr_grpt_id from jrn where jr_internal=$1', array($p_value)); - + } } } diff --git a/include/class_acc_ledger_fin.php b/include/class_acc_ledger_fin.php index b9899fa28..d27ef810f 100644 --- a/include/class_acc_ledger_fin.php +++ b/include/class_acc_ledger_fin.php @@ -95,8 +95,19 @@ class Acc_Ledger_Fin extends Acc_Ledger { if ( $fiche->empty_attribute(ATTR_DEF_ACCOUNT) == true) throw new Exception('La fiche '.$e_bank_account.'n\'a pas de poste comptable',8); + /* get the account and explode if necessary */ + $sposte=$fiche->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the debit one for customer + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[0]; + } else { + $poste_val=$sposte; + } + + $acc_pay=new Acc_Operation($this->db); /* The account exists */ - $poste=new Acc_Account_Ledger($this->db,$fiche->strAttribut(ATTR_DEF_ACCOUNT)); + $poste=new Acc_Account_Ledger($this->db,$poste_val); if ( $poste->load() == false ){ throw new Exception('Pour la fiche '.$e_bank_account.' le poste comptable ['.$poste->id.'] n\'existe pas',9); } @@ -126,8 +137,17 @@ class Acc_Ledger_Fin extends Acc_Ledger { $fiche->get_by_qcode(${'e_other'.$i}); if ( $fiche->empty_attribute(ATTR_DEF_ACCOUNT) == true) throw new Exception('La fiche '.${'e_other'.$i}.'n\'a pas de poste comptable',8); + + $sposte=$fiche->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the debit one for customer + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[1]; + } else { + $poste_val=$sposte; + } /* The account exists */ - $poste=new Acc_Account_Ledger($this->db,$fiche->strAttribut(ATTR_DEF_ACCOUNT)); + $poste=new Acc_Account_Ledger($this->db,$poste_val); if ( $poste->load() == false ){ throw new Exception('Pour la fiche '.${'e_other'.$i}.' le poste comptable ['.$poste->id.'n\'existe pas',9); } @@ -554,7 +574,16 @@ class Acc_Ledger_Fin extends Acc_Ledger { $exercice=$pPeriode->get_exercice(); $filter_year=" j_tech_per in (select p_id from parm_periode where p_exercice='".$exercice."')"; - $acc_account=new Acc_Account_Ledger($this->db,$fBank->strAttribut(ATTR_DEF_ACCOUNT)); + $sposte=$fBank->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the debit one for customer + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[0]; + } else { + $poste_val=$sposte; + } + + $acc_account=new Acc_Account_Ledger($this->db,$poste_val); $solde=$acc_account->get_solde($filter_year); $new_solde=$solde; @@ -580,7 +609,20 @@ class Acc_Ledger_Fin extends Acc_Ledger { $acc_operation=new Acc_Operation($this->db); $acc_operation->date=$e_date; - $acc_operation->poste=$fPoste->strAttribut(ATTR_DEF_ACCOUNT); + $sposte=$fPoste->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + if ( ${"e_other$i"."_amount"} < 0 ) + $poste_val=$array[0]; + else + $poste_val=$array[1]; + } else { + $poste_val=$sposte; + } + + + $acc_operation->poste=$poste_val; $acc_operation->amount=${"e_other$i"."_amount"}*(-1); $acc_operation->grpt=$seq; $acc_operation->jrn=$p_jrn; @@ -600,7 +642,20 @@ class Acc_Ledger_Fin extends Acc_Ledger { $acc_operation=new Acc_Operation($this->db); $acc_operation->date=$e_date; - $acc_operation->poste=$fBank->strAttribut(ATTR_DEF_ACCOUNT); + $sposte=$fBank->strAttribut(ATTR_DEF_ACCOUNT); + + // if 2 accounts + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + if ( ${"e_other$i"."_amount"} < 0 ) + $poste_val=$array[1]; + else + $poste_val=$array[0]; + } else { + $poste_val=$sposte; + } + + $acc_operation->poste=$poste_val; $acc_operation->amount=${"e_other$i"."_amount"}; $acc_operation->grpt=$seq; $acc_operation->jrn=$p_jrn; @@ -635,7 +690,7 @@ class Acc_Ledger_Fin extends Acc_Ledger { if ( trim(${"e_concerned".$i}) != "" ) { if ( strpos(${"e_concerned".$i},',') != 0 ) { - $aRapt=split(',',${"e_concerned".$i}); + $aRapt=explode(',',${"e_concerned".$i}); foreach ($aRapt as $rRapt) { // Add a "concerned operation to bound these op.together // diff --git a/include/class_acc_ledger_purchase.php b/include/class_acc_ledger_purchase.php index 52725bafe..dc4358c4a 100644 --- a/include/class_acc_ledger_purchase.php +++ b/include/class_acc_ledger_purchase.php @@ -104,8 +104,18 @@ class Acc_Ledger_Purchase extends Acc_Ledger { if ( $fiche->empty_attribute(ATTR_DEF_ACCOUNT) == true) throw new Exception(_('La fiche ').$e_client._('n\'a pas de poste comptable'),8); + /* get the account and explode if necessary */ + $sposte=$fiche->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the credit one for supplier + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[1]; + } else { + $poste_val=$sposte; + } + /* The account exists */ - $poste=new Acc_Account_Ledger($this->db,$fiche->strAttribut(ATTR_DEF_ACCOUNT)); + $poste=new Acc_Account_Ledger($this->db,$poste_val); if ( $poste->load() == false ){ throw new Exception(_('Pour la fiche ').$e_client._(' le poste comptable [').$poste->id.'] '._('n\'existe pas'),9); } @@ -139,8 +149,19 @@ class Acc_Ledger_Purchase extends Acc_Ledger { $fiche->get_by_qcode(${'e_march'.$i}); if ( $fiche->empty_attribute(ATTR_DEF_ACCOUNT) == true) throw new Exception(_('La fiche ').${'e_march'.$i}._('n\'a pas de poste comptable'),8); + + /* get the account and explode if necessary */ + $sposte=$fiche->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the debit + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[0]; + } else { + $poste_val=$sposte; + } + /* The account exists */ - $poste=new Acc_Account_Ledger($this->db,$fiche->strAttribut(ATTR_DEF_ACCOUNT)); + $poste=new Acc_Account_Ledger($this->db,$poste_val); if ( $poste->load() == false ){ throw new Exception(_('Pour la fiche ').${'e_march'.$i}._(' le poste comptable').' ['.$poste->id._('n\'existe pas'),9); } @@ -160,8 +181,37 @@ class Acc_Ledger_Purchase extends Acc_Ledger { } /*!\brief insert into the database, it calls first the verify function - * change the value of this->jr_id and this->jr_internal + * change the value of this->jr_id and this->jr_internal. + * It generates the document and save the middle of payment, if 'gen_invoice is set + * and e_mp *\param $p_array is usually $_POST or a predefined operation +\verbatim + Array +( + + [e_client] =>BELGACOM + [nb_item] =>9 + [p_jrn] =>3 + [period] =>117 + [e_comm] =>Frais de téléphone + [e_date] =>01.09.2009 + [e_ech] => + [jrn_type] =>ACH + [e_pj] =>ACH53 + [e_pj_suggest] =>ACH53 + [mt] =>1265318941.39 + [e_mp] =>0 + [e_march0] =>TEL + [e_march0_price] =>63.6700 + [e_march0_tva_id] =>1 + [e_march0_tva_amount] =>13.3700 + [e_quant0] =>1.000 + ... + [bon_comm] => + [other_info] => + [record] =>Enregistrement +) +\endverbatim *\return string *\note throw an Exception */ @@ -179,7 +229,15 @@ class Acc_Ledger_Purchase extends Acc_Ledger { $cust=new fiche($this->db); $cust->get_by_qcode($e_client); - $poste=$cust->strAttribut(ATTR_DEF_ACCOUNT); + $sposte=$cust->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the credit Supplier + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste=$array[1]; + } else { + $poste=$sposte; + } + $oPeriode=new Periode($this->db); $check_periode=$this->check_periode(); @@ -276,7 +334,17 @@ class Acc_Ledger_Purchase extends Acc_Ledger { $acc_amount->correct(); $tot_amount+=$amount; - $acc_operation->poste=$fiche->strAttribut(ATTR_DEF_ACCOUNT); + /* get the account and explode if necessary */ + $sposte=$fiche->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the debit one for customer + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[0]; + } else { + $poste_val=$sposte; + } + + $acc_operation->poste=$poste_val; $acc_operation->amount=$acc_amount->amount; $acc_operation->qcode=${"e_march".$i}; if( $acc_amount->amount > 0 ) $tot_debit=bcadd($tot_debit,$acc_amount->amount); @@ -504,7 +572,17 @@ class Acc_Ledger_Purchase extends Acc_Ledger { /* Insert paid by */ $acc_pay=new Acc_Operation($this->db); $acc_pay->date=$e_date; - $acc_pay->poste=$acfiche->strAttribut(ATTR_DEF_ACCOUNT); + + /* get the account and explode if necessary */ + $sposte=$acfiche->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the debit one for customer + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[1]; + } else { + $poste_val=$sposte; + } + $acc_pay->poste=$poste_val; $acc_pay->qcode=$fqcode; $acc_pay->amount=abs(round($tot_debit,2)); $acc_pay->desc=$e_comm; @@ -872,7 +950,7 @@ class Acc_Ledger_Purchase extends Acc_Ledger { // Set correctly the REQUEST param for jrn_type $r.= HtmlInput::hidden('jrn_type','ACH'); $r.= HtmlInput::button('add_item',_('Ajout article'), ' onClick="ledger_add_row()"'); - + /* if we suggest the pj n# the run the script */ @@ -1119,32 +1197,9 @@ class Acc_Ledger_Purchase extends Acc_Ledger { } // check for upload piece -/** -*@todo clean dead code -*/ - /* $file=new IFile(); - $file->table=0; - $r.=_("Ajoutez une pièce justificative "); - $r.=$file->input("pj",""); - */ $r.=HtmlInput::warnbulle(12); $r.=$this->extra_info(); - /* Propose to generate a note of fee */ - if ( $this->db->count_sql("select md_id,md_name from document_modele where md_type=10") > 0 && - $e_mp != 0) - { - - - $r.=_('ou générer une note de frais').' '; - // We propose to generate the invoice and some template - $doc_gen=new ISelect(); - $doc_gen->name="gen_doc"; - $doc_gen->value=$this->db->make_array( - "select md_id,md_name from document_modele where md_type=10"); - $r.=$doc_gen->input().'
'; - } - return $r; } @@ -1152,7 +1207,7 @@ class Acc_Ledger_Purchase extends Acc_Ledger { * - add a attachment * - generate an invoice * - insert extra info - *\return string + *\return html string */ public function extra_info() { $r=""; @@ -1164,17 +1219,17 @@ class Acc_Ledger_Purchase extends Acc_Ledger { $r.=_("Ajoutez une pièce justificative "); $r.=$file->input("pj",""); - if ( $this->db->count_sql("select md_id,md_name from document_modele where md_type=4") > 0 ) + if ( $this->db->count_sql("select md_id,md_name from document_modele where md_type=10") > 0 ) { - + $r.='
'; $r.=_('ou générer un document').' '; // We propose to generate the note of fee $doc_gen=new ISelect(); $doc_gen->name="gen_doc"; $doc_gen->value=$this->db->make_array( "select md_id,md_name ". - " from document_modele where md_type=4"); + " from document_modele where md_type=10"); $r.=$doc_gen->input().'
'; } $r.='
'; diff --git a/include/class_acc_ledger_sold.php b/include/class_acc_ledger_sold.php index f70143387..1e674e4a7 100644 --- a/include/class_acc_ledger_sold.php +++ b/include/class_acc_ledger_sold.php @@ -105,8 +105,19 @@ class Acc_Ledger_Sold extends Acc_Ledger { if ( $fiche->empty_attribute(ATTR_DEF_ACCOUNT) == true) throw new Exception(_('La fiche ').$e_client._('n\'a pas de poste comptable'),8); + /* get the account and explode if necessary */ + $sposte=$fiche->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the debit one for customer + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[0]; + } else { + $poste_val=$sposte; + } /* The account exists */ - $poste=new Acc_Account_Ledger($this->db,$fiche->strAttribut(ATTR_DEF_ACCOUNT)); + + $poste=new Acc_Account_Ledger($this->db,$poste_val); + if ( $poste->load() == false ){ throw new Exception(_('Pour la fiche ').$e_client._(' le poste comptable [').$poste->id._('] n\'existe pas'),9); } @@ -136,7 +147,16 @@ class Acc_Ledger_Sold extends Acc_Ledger { if ( $fiche->empty_attribute(ATTR_DEF_ACCOUNT) == true) throw new Exception(_('La fiche ').${'e_march'.$i}._('n\'a pas de poste comptable'),8); /* The account exists */ - $poste=new Acc_Account_Ledger($this->db,$fiche->strAttribut(ATTR_DEF_ACCOUNT)); + $sposte=$fiche->strAttribut(ATTR_DEF_ACCOUNT); + + // if 2 accounts, take only the credit one + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[1]; + } else { + $poste_val=$sposte; + } + $poste=new Acc_Account_Ledger($this->db,$poste_val); if ( $poste->load() == false ){ throw new Exception(_('Pour la fiche ').${'e_march'.$i}._(' le poste comptable [').$poste->id._('n\'existe pas'),9); } @@ -162,11 +182,14 @@ class Acc_Ledger_Sold extends Acc_Ledger { /*!\brief insert into the database, it calls first the verify function, * change the value of this->jr_id and this->jr_internal + * * It generates the document if gen_invoice is set and save the middle of payment if any ($e_mp) + * *\param $p_array is usually $_POST or a predefined operation *\return string *\note throw an Exception */ public function insert($p_array) { + extract ($p_array); $this->verify($p_array) ; @@ -187,7 +210,17 @@ class Acc_Ledger_Sold extends Acc_Ledger { $cust=new fiche($this->db); $cust->get_by_qcode($e_client); - $poste=$cust->strAttribut(ATTR_DEF_ACCOUNT); + $sposte=$cust->strAttribut(ATTR_DEF_ACCOUNT); + + // if 2 accounts, take only the debit one for the customer + // + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste=$array[0]; + } else { + $poste=$sposte; + } + bcscale(4); try { $tot_amount=0; @@ -207,7 +240,17 @@ class Acc_Ledger_Sold extends Acc_Ledger { $tot_amount+=$amount; $acc_operation=new Acc_Operation($this->db); $acc_operation->date=$e_date; - $acc_operation->poste=$fiche->strAttribut(ATTR_DEF_ACCOUNT); + $sposte=$fiche->strAttribut(ATTR_DEF_ACCOUNT); + + // if 2 accounts, take only the credit one + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[1]; + } else { + $poste_val=$sposte; + } + + $acc_operation->poste=$poste_val; $acc_operation->amount=$amount; $acc_operation->grpt=$seq; $acc_operation->jrn=$p_jrn; @@ -347,7 +390,7 @@ class Acc_Ledger_Sold extends Acc_Ledger { " jr_grpt_id = ".$seq); /* Save the attachment or generate doc*/ - if ( isset ($_FILES)) { + if ( isset ($_FILES['pj'])) { if ( strlen(trim($_FILES['pj']['name'])) != 0 ) $this->db->save_upload_document($seq); else @@ -379,7 +422,17 @@ class Acc_Ledger_Sold extends Acc_Ledger { /* Insert paid by */ $acc_pay=new Acc_Operation($this->db); $acc_pay->date=$e_date; - $acc_pay->poste=$acfiche->strAttribut(ATTR_DEF_ACCOUNT); + /* get the account and explode if necessary */ + $sposte=$acfiche->strAttribut(ATTR_DEF_ACCOUNT); + // if 2 accounts, take only the debit one for customer + if ( strpos($sposte,',') != 0 ) { + $array=explode(',',$sposte); + $poste_val=$array[0]; + } else { + $poste_val=$sposte; + } + + $acc_pay->poste=$poste_val; $acc_pay->qcode=$fqcode; $acc_pay->amount=abs(round($tot_debit,2)); $acc_pay->desc=$e_comm; diff --git a/include/class_acc_operation.php b/include/class_acc_operation.php index d991eb4e0..c495c4ce9 100644 --- a/include/class_acc_operation.php +++ b/include/class_acc_operation.php @@ -22,14 +22,14 @@ /*!\file * \brief this file match the tables jrn & jrnx the purpose is to - * remove or save accountant writing to these table. + * remove or save accountant writing to these table. */ require_once ('class_user.php'); /*! \brief this file match the tables jrn & jrnx the purpose is to - * remove or save accountant writing to these table. + * remove or save accountant writing to these table. * */ -class Acc_Operation +class Acc_Operation { var $db; /*!< database connx */ var $jr_id; /*!< pk of jrn */ @@ -42,7 +42,7 @@ var $jr_id; /*!< pk of jrn */ var $periode; /*!< periode to use */ var $amount; /*!< amount of the operatoin */ var $grpt; /*!< the group id */ -/*! +/*! * \brief constructor set automatically the attributes user and periode * \param $p_cn the databse connection */ @@ -54,12 +54,21 @@ var $jr_id; /*!< pk of jrn */ $this->periode=$user->get_periode(); $this->jr_id=0; } - /* ************************************************** - *\brief Insert into the table Jrn - * - * - * \return nothing - * + /** + *@brief Insert into the table Jrn + *The needed data are : + * - this->date + * - this->amount + * - this->poste + * - this->grpt + * - this->jrn + * - this->type ( debit or credit) + * - this->user + * - this->periode + * - this->qcode + * - this->desc optional + *@note if the amount is less than 0 then side changes, for example debit becomes + *a credit and vice versa */ function insert_jrnx() @@ -71,23 +80,24 @@ var $jr_id; /*!< pk of jrn */ } $this->amount=abs($this->amount); $debit=($this->type=='c')?'false':'true'; - + $this->desc=(isset($this->desc))?$this->desc:''; $Res=$this->db->exec_sql("select insert_jrnx - ($1::text,abs($2)::numeric,$3::poste_comptable,$4::integer,$5::integer,$6::bool,$7::text,$8::integer,upper($9))", + ($1::text,abs($2)::numeric,$3::poste_comptable,$4::integer,$5::integer,$6::bool,$7::text,$8::integer,upper($9),$10::text)", array( - $this->date, - round($this->amount,2), - $this->poste, - $this->grpt, - $this->jrn, - $debit, - $this->user, - $this->periode, - $this->qcode)); + $this->date, //$1 + round($this->amount,2), //$2 + $this->poste, //$3 + $this->grpt, //$4 + $this->jrn, //$5 + $debit, //$6 + $this->user, //$7 + $this->periode, //$8 + $this->qcode, // $9 + $this->desc)); //$10 if ( $Res==false) return $Res; $this->jrnx_id=$this->db->get_current_seq('s_jrn_op'); return $this->jrnx_id; - + } /*!\brief set the pj of a operation in jrn. the jr_id must be set *\note if the jr_id it fails @@ -120,10 +130,10 @@ var $jr_id; /*!< pk of jrn */ /* check if the new pj numb exist */ $c=$this->db->count_sql("select jr_id from jrn where jr_pj_number=$1 and jr_def_id=$2", array($this->pj,$this->jrn) - ); + ); if ( $c == 0 ) { $flag=1; break;} $limit--; - } + } /* a pj numb is found */ if ( $flag == 1 ) { $sql="update jrn set jr_pj_number=$1 where jr_id=$2"; @@ -134,12 +144,11 @@ var $jr_id; /*!< pk of jrn */ } /*! - ************************************************** - *\brief Insert into the table Jrn, the amount is computed from jrnx thanks the + *\brief Insert into the table Jrn, the amount is computed from jrnx thanks the * group id ($p_grpt) - * - * \return sequence - * + * + * \return sequence of jr_id + * */ function insert_jrn() @@ -148,7 +157,7 @@ var $jr_id; /*!< pk of jrn */ $diff=$this->db->get_value("select check_balance ($1)",array($this->grpt)); if ( $diff != 0 ) { - + echo "Erreur : balance incorrecte :diff = $diff"; return false; } @@ -158,7 +167,7 @@ var $jr_id; /*!< pk of jrn */ $this->mt=microtime(true); } // if amount == -1then the triggers will throw an error - // + // $Res=$this->db->exec_sql("insert into jrn (jr_def_id,jr_montant,jr_comment,". "jr_date,jr_ech,jr_grpt_id,jr_tech_per,jr_mt) values (". "$1,$2,$3,". @@ -177,7 +186,7 @@ var $jr_id; /*!< pk of jrn */ * */ function get_internal() { - if ( ! isset($this->jr_id) ) + if ( ! isset($this->jr_id) ) throw new Exception('jr_id is not set',1); $Res=$this->db->exec_sql("select jr_internal from jrn where jr_id=".$this->jr_id); if ( Database::num_row($Res) == 0 ) return null; @@ -196,7 +205,7 @@ function get_internal() { $this->jr_id=Database::fetch_result($Res,0,0); return 0; } - /*!\brief retrieve data from jrnx + /*!\brief retrieve data from jrnx * \return an array */ function get_jrnx_detail() { @@ -231,7 +240,7 @@ function get_internal() { return $row; } /*!\brief display_jrnx_detail : get the data from get_jrnx_data and - return a string with HTML code + return a string with HTML code * \param table(=0 no code for table,1 code for table,2 code for CSV) */ @@ -253,7 +262,7 @@ function get_internal() { $r.=$a; $csv.='"'.$a.'";'; $r.=''; - + $r.=''; $a=$l['j_poste']; $r_notable.=$a; @@ -268,14 +277,14 @@ function get_internal() { $r.=h($a); $csv.='"'.$a.'";'; $r.=''; - + $r.=''; $a=$l['j_montant']; $r_notable.=$a; $r.=$a; $csv.=$a.';'; $r.=''; - + $r.=''; $a=$l['debit']; $r_notable.=$a; @@ -284,7 +293,7 @@ function get_internal() { $csv.="\r\n"; $r.=''; - + $r.=''; } switch ($p_table) { @@ -299,9 +308,9 @@ function get_internal() { } return "ERROR PARAMETRE"; } -/*! +/*! * @brief Get data from jrnx where p_grpt=jrnx(j_grpt) - * + * * @param connection * @return array of 3 elements * - First Element is an array @@ -312,27 +321,27 @@ Array [class_cred0] => 7000008 [mont_cred0] => 8880.0000 [op_cred0] => 754 - [text_cred0] => + [text_cred0] => [jr_internal] => 23VEN-01-302 - [comment] => - [ech] => + [comment] => + [ech] => [jr_id] => 302 [jr_def_id] => 2 [class_deb0] => 4000005 [mont_deb0] => 10744.8000 - [text_deb0] => + [text_deb0] => [op_deb0] => 755 [class_cred1] => 4511 [mont_cred1] => 1864.8000 [op_cred1] => 756 - [text_cred1] => + [text_cred1] => ) @endverbatim - * - Second : number of line with debit + * - Second : number of line with debit * - Third : number of line with credit - */ + */ function get_data ($p_grpt) { - $Res=$this->db->exec_sql("select + $Res=$this->db->exec_sql("select to_char(j_date,'DD.MM.YYYY') as j_date, j_text, j_debit, @@ -349,7 +358,7 @@ Array if ( $MaxLine == 0 ) return null; $deb=0;$cred=0; for ( $i=0; $i < $MaxLine; $i++) { - + $l_line=Database::fetch_array($Res,$i); $l_array['op_date']=$l_line['j_date']; if ( $l_line['j_debit'] == 't' ) { diff --git a/include/class_acc_payment.php b/include/class_acc_payment.php index 36a3c28e0..fcf994d5b 100644 --- a/include/class_acc_payment.php +++ b/include/class_acc_payment.php @@ -94,6 +94,15 @@ class Acc_Payment public function insert() { if ( $this->verify() != 0 ) return; + $sql='INSERT INTO mod_payment( + mp_lib, mp_jrn_def_id, mp_type, mp_fd_id, mp_qcode) + VALUES ($1, $2, $3, $4, upper($5)) returning mp_id'; + $this->mp_id=$this->cn->exec_sql($sql,array( + $this->mp_lib, + $this->mp_jrn_def_id, + $this->mp_type, + $this->mp_fd_id, + $this->mp_qcode)); } public function update() { @@ -140,8 +149,12 @@ class Acc_Payment $row=Database::fetch_array($res,0); foreach ($row as $idx=>$value) { $this->$idx=$value; } } + /** + *@brief remove a middle of payment + */ public function delete() { - + $sql="delete from mod_payment where mp_id=$1"; + $this->cn->exec_sql($sql,array($this->mp_id)); } /*!\brief retrieve all the data for a certain type *\param non @@ -314,9 +327,45 @@ class Acc_Payment */ public function from_array($p_array) { $idx=array('mp_id','mp_lib','mp_fd_id','mp_jrn_def_id','mp_qcode','mp_type'); - foreach ($idx as $l) + foreach ($idx as $l) if (isset($p_array[$l])) $this->$l=$p_array[$l]; } + /** + *@brief return an html with a form to add a new middle of payment + */ + public function blank() { + //label + $lib=new IText('mp_lib'); + $f_lib=$lib->input(); + // Type of ledger + $tledger=new ISelect('mp_type'); + $tledger->value=array(array ('value'=>'ACH','label'=>_('Achat')), + array ('value'=>'VEN','label'=>_('Vente'))); + $f_type=$tledger->input(); + + // type of card + $tcard=new ISelect('mp_fd_id'); + $tcard->value=$this->cn->make_array('select fd_id,fd_label from fiche_def join fiche_def_ref '. + ' using (frd_id) where frd_id in (25,4) order by fd_label'); + $f_type_fiche=$tcard->input(); + $ledger_record=new ISelect('mp_jrn_def_id'); + $ledger_record->value=$this->cn->make_array("select jrn_def_id,jrn_Def_name from + jrn_def where jrn_def_type in ('ODS','FIN')"); + $f_ledger_record=$ledger_record->input(); + + // the card + $qcode=new ICard(); + $qcode->noadd=true; + $qcode->name='mp_qcode'; + $list=$this->cn->make_list('select fd_id from fiche_def where frd_id in (25,4)'); + $qcode->extra=$list; + $f_qcode=$qcode->input(); + ob_start(); + require_once('template/new_mod_payment.php'); + $r=ob_get_contents(); + ob_end_clean(); + return $r; + } /*!\brief test function */ static function test_me() { diff --git a/include/class_acc_reconciliation.php b/include/class_acc_reconciliation.php index 454a28d82..581519cb8 100644 --- a/include/class_acc_reconciliation.php +++ b/include/class_acc_reconciliation.php @@ -68,7 +68,7 @@ class Acc_Reconciliation { return; if ( strpos($jr_id2,',') !== 0 ) { - $aRapt=split(',',$jr_id2); + $aRapt=explode(',',$jr_id2); foreach ($aRapt as $rRapt) { if ( isNumber($rRapt) == 1 ) { diff --git a/include/class_acc_tva.php b/include/class_acc_tva.php index 124d099e0..6d8a82821 100644 --- a/include/class_acc_tva.php +++ b/include/class_acc_tva.php @@ -131,7 +131,7 @@ class Acc_Tva */ public function get_side($p_side) { if ( strlen($this->tva_poste) == 0 ) $this->load(); - list($deb,$cred)=split(",",$this->tva_poste); + list($deb,$cred)=explode(",",$this->tva_poste); switch ($p_side) { case 'd': return $deb; diff --git a/include/class_fiche.php b/include/class_fiche.php index d8ce4b893..7e49a788d 100644 --- a/include/class_fiche.php +++ b/include/class_fiche.php @@ -1,4 +1,4 @@ -quick_code; $p_qcode=trim($p_qcode); - $sql="select f_id from jnt_fic_att_value join attr_value + $sql="select f_id from jnt_fic_att_value join attr_value using (jft_id) where ad_id=23 and av_text=upper($1)"; $this->id=$this->cn->get_value($sql,array($p_qcode)); if ( $this->cn->count()==0) { @@ -93,9 +93,9 @@ class fiche { if ( $this->id == 0){ return; } - $sql="select * - from jnt_fic_att_value - natural join fiche + $sql="select * + from jnt_fic_att_value + natural join fiche natural join attr_value join jnt_fic_attr on (jnt_fic_attr.fd_id=fiche.fd_id and jnt_fic_attr.ad_id=jnt_fic_att_value.ad_id) join attr_def on (attr_def.ad_id=jnt_fic_att_value.ad_id) where f_id=".$this->id. @@ -122,10 +122,10 @@ class fiche { foreach ($e->attribut as $f ) { $flag=0; foreach ($this->attribut as $g ) { - if ( $g->ad_id == $f->ad_id ) + if ( $g->ad_id == $f->ad_id ) $flag=1; } - if ( $flag == 0 ) { + if ( $flag == 0 ) { // there's a missing one, we insert it $t=new Attribut ($f->ad_id); $t->av_text=""; @@ -135,15 +135,26 @@ class fiche { $Max++; } // if flag == 0 - }// foreach + }// foreach $this->attribut=SortAttributeById($this->attribut); }//missing attribut } + /** + * @brief find the card with the p_attribut equal to p_value, it is not case sensitive + * @param $p_attribut attribute to find see table attr_def + * @param $p_value value in attr_value.av_text + * @return return ARRAY OF jft_id,f_id,fd_id,ad_id,av_text + */ + function seek($p_attribut,$p_value){ + $sql="select jft_id,f_id,fd_id,ad_id,av_text from fiche join jnt_fic_att_value using (f_id) join attr_value + using (jft_id) where ad_id=$1 and upper(av_text)=upper($2)"; + $res=$this->cn->get_array($sql,array($p_attribut,$p_value)); + return $res; + } - -/*! +/*! * \brief give the size of a card object * * \return size @@ -156,10 +167,10 @@ class fiche { } -/*! +/*! ************************************************** * \brief Return array of card from the frd family - * + * * \param $p_frd_id the fiche_def_ref.frd_id * \param $p_search p_search is a filter on the name * \param $p_sql extra sql condition @@ -167,11 +178,11 @@ class fiche { * \return array of fiche object */ function CountByDef($p_frd_id,$p_search="",$p_sql="") { - $sql="select * + $sql="select * from fiche join fiche_Def using (fd_id) where frd_id=".$p_frd_id; - if ( $p_search != "" ) + if ( $p_search != "" ) { $a=FormatString($p_search); $sql="select * from vw_fiche_attr where frd_id=".$p_frd_id. @@ -179,14 +190,14 @@ class fiche { } $Ret=$this->cn->exec_sql($sql.$p_sql); - + return Database::num_row($Ret) ; } -/*! +/*! ************************************************** * \brief Return array of card from the frd family - * - * + * + * * \param $p_frd_id the fiche_def_ref.frd_id * \param $p_offset * \param $p_search is an optional filter @@ -194,17 +205,17 @@ class fiche { * \return array of fiche object */ function GetByDef($p_frd_id,$p_offset=-1,$p_search="") { - if ( $p_offset == -1 ) + if ( $p_offset == -1 ) { - $sql="select * + $sql="select * from fiche join fiche_Def using (fd_id) where frd_id=".$p_frd_id." $p_search order by f_id"; - } - else + } + else { $limit=($_SESSION['g_pagesize']!=-1)?"limit ".$_SESSION['g_pagesize']:""; - $sql="select * + $sql="select * from fiche join fiche_Def using (fd_id) where frd_id=".$p_frd_id." $p_search order by f_id " @@ -235,17 +246,17 @@ class fiche { " ". $this->attribut_def.""; } -/*! +/*! ************************************************** * \brief return the string of the given attribute - * (attr_def.ad_id) + * (attr_def.ad_id) * \param $p_ad_id the AD_ID from attr_def.ad_id * \see constant.php * \return string */ - function strAttribut($p_ad_id) + function strAttribut($p_ad_id) { - if ( sizeof ($this->attribut) == 0 ) + if ( sizeof ($this->attribut) == 0 ) { if ($this->id==0) return '- ERROR -'; @@ -255,15 +266,15 @@ class fiche { $Res=$this->cn->exec_sql($sql); $row=Database::fetch_all($Res); // if not found return error - if ( $row == false ) + if ( $row == false ) return ' - ERROR -'; - + return $row[0]['av_text']; } foreach ($this->attribut as $e) { - if ( $e->ad_id == $p_ad_id ) + if ( $e->ad_id == $p_ad_id ) return $e->av_text; } return '- ERROR -'; @@ -276,15 +287,15 @@ Example Array ( [av_text1] => Nom - [av_text12] => Personne de contact + [av_text12] => Personne de contact [av_text5] => Poste Comptable - [av_text13] => numéro de tva - [av_text14] => Adresse + [av_text13] => numéro de tva + [av_text14] => Adresse [av_text15] => code postal [av_text24] => Ville - [av_text16] => pays - [av_text17] => téléphone - [av_text18] => email + [av_text16] => pays + [av_text17] => téléphone + [av_text18] => email [av_text23] => Quick Code ) @@ -310,15 +321,15 @@ Array return $array; } -/*! +/*! * \brief insert a new record * show a blank card to be filled - * + * * \param $p_fiche_def is the fiche_def.fd_id - * + * * \return HTML Code */ - function blank($p_fiche_def) + function blank($p_fiche_def) { // array = array of attribute object sorted on ad_id $f=new fiche_def($this->cn,$p_fiche_def); @@ -328,7 +339,7 @@ Array foreach ($array as $attr) { $msg=""; - if ( $attr->ad_id == ATTR_DEF_ACCOUNT) + if ( $attr->ad_id == ATTR_DEF_ACCOUNT) { $w=new IPoste("av_text".$attr->ad_id); $w->set_attribute('ipopup','ipop_account'); @@ -340,26 +351,26 @@ Array $a=Database::fetch_array($ret_sql,0); $label=new ISpan(); $label->name="av_text".$attr->ad_id."_label"; - + if ( $a['account_auto'] == 't' ) $msg.="".$label->input()."
"._("Rappel: Poste créé automatiquement à partir de ").$f->class_base." "; - else + else { // if there is a class base in fiche_def_ref, this account will be the // the default one - if ( strlen(trim($f->class_base)) != 0 ) + if ( strlen(trim($f->class_base)) != 0 ) { $msg.="".$label->input()."
"._("Rappel: Poste par défaut sera "). $f->class_base. " ! "; $w->value=$f->class_base; } - + } $r.="".td("Poste Comptable","input_text").td($w->input())."$msg "; continue; } - elseif ( $attr->ad_id == ATTR_DEF_TVA) + elseif ( $attr->ad_id == ATTR_DEF_TVA) { $r.=JS_SHOW_TVA; $w=new ITva(); @@ -370,7 +381,7 @@ Array $r.=JS_LEDGER; $w=new ICard(); // filter on frd_id - $sql=' select fd_id from fiche_def where frd_id in ('.FICHE_TYPE_CLIENT.','.FICHE_TYPE_FOURNISSEUR.','.FICHE_TYPE_ADM_TAX.')'; + $sql=' select fd_id from fiche_def where frd_id in ('.FICHE_TYPE_CLIENT.','.FICHE_TYPE_FOURNISSEUR.','.FICHE_TYPE_ADM_TAX.')'; $filter=$this->cn->make_list($sql); $w->extra=$filter; $w->extra2=0; @@ -393,16 +404,16 @@ Array return $r; } - -/*! + +/*! * \brief Display object instance, getAttribute * sort the attribute and add missing ones * \param $p_readonly true= if can not modify, otherwise false - * + * * * \return string to display */ - function Display($p_readonly) + function Display($p_readonly) { $this->GetAttribut(); $attr=$this->attribut; @@ -411,21 +422,21 @@ Array if ( empty ($attr) ) { return "Fiche non trouvée"; } - foreach ( $attr as $r) + foreach ( $attr as $r) { $msg=""; $bulle=""; - if ( $p_readonly) + if ( $p_readonly) { $w=new IText(); $w->table=1; $w->readOnly=true; - + } if ($p_readonly==false) { - if ( $r->ad_id == ATTR_DEF_ACCOUNT) + if ( $r->ad_id == ATTR_DEF_ACCOUNT) { $w=new IPoste("av_text".$r->ad_id); $w->set_attribute('ipopup','ipop_account'); @@ -443,7 +454,7 @@ Array $bulle.=HtmlInput::warnbulle(11); } - elseif ( $r->ad_id == ATTR_DEF_TVA) + elseif ( $r->ad_id == ATTR_DEF_TVA) { $ret.=JS_SHOW_TVA; $w=new ITva(); @@ -455,16 +466,16 @@ Array $ret.=JS_LEDGER; $w=new ISearch(); // filter on frd_id - $w->extra=FICHE_TYPE_CLIENT.','.FICHE_TYPE_FOURNISSEUR.','.FICHE_TYPE_ADM_TAX; + $w->extra=FICHE_TYPE_CLIENT.','.FICHE_TYPE_FOURNISSEUR.','.FICHE_TYPE_ADM_TAX; $w->extra2=0; // jrn = 0 $w->table=1; - + $label=new ISpan(); $label->name="av_text".$r->ad_id."_label"; $msg=$label->input(); } - - else + + else { $w=new IText(); $w->table=1; @@ -480,42 +491,42 @@ Array $ret.=""; return $ret; } - /*! + /*! * \brief Save a card, call insert or update - * + * * \param p_fiche_def (default 0) */ - function Save($p_fiche_def=0) + function Save($p_fiche_def=0) { // new card or only a update ? - if ( $this->id == 0 ) + if ( $this->id == 0 ) $this->insert($p_fiche_def); else $this->update(); } -/*! +/*! * \brief insert a new record - * + * * \param p_fiche_def fiche_def.fd_id * \param p_array is the array containing the data */ - function insert($p_fiche_def,$p_array=null) + function insert($p_fiche_def,$p_array=null) { if ( $p_array == null) $p_array=$_POST; - + $fiche_id=$this->cn->get_next_seq('s_fiche'); $this->id=$fiche_id; // first we create the card $this->cn->start(); - try + try { - $sql=sprintf("insert into fiche(f_id,fd_id)". + $sql=sprintf("insert into fiche(f_id,fd_id)". " values (%d,%d)", $fiche_id,$p_fiche_def); $Ret=$this->cn->exec_sql($sql); // parse the $p_array array - foreach ($p_array as $name=>$value ) + foreach ($p_array as $name=>$value ) { echo_debug ("class_fiche",__LINE__,"Name = $name value $value") ; /* avoid the button for searching an accounting item */ @@ -523,10 +534,10 @@ Array list ($id) = sscanf ($name,"av_text%d"); if ( $id == null ) continue; echo_debug("class_fiche",__LINE__,"add $id"); - + // Special traitement // quickcode - if ( $id == ATTR_DEF_QUICKCODE) + if ( $id == ATTR_DEF_QUICKCODE) { echo_debug("Modify ATTR_DEF_QUICKCODE"); $sql=sprintf("select insert_quick_code(%d,'%s')", @@ -534,7 +545,7 @@ Array $this->cn->exec_sql($sql); continue; } - // stock + // stock if ( $id == ATTR_DEF_STOCK ) { $st=$this->cn->count_sql('select * from stock_goods where '. " upper(sg_code)=upper('$value')"); @@ -548,32 +559,30 @@ Array 'initial', FormatString($value), $exercice); - + $this->cn->exec_sql($str_stock); } } // name - if ( $id == ATTR_DEF_NAME ) + if ( $id == ATTR_DEF_NAME ) { echo_debug("Modify ATTR_DEF_NAME"); if ( strlen(trim($value)) == 0 ) $value="pas de nom"; - + } // account - if ( $id == ATTR_DEF_ACCOUNT ) + if ( $id == ATTR_DEF_ACCOUNT ) { echo_debug("insert ATTR_DEF_ACCOUNT"); $v=FormatString($value); try { - if ( - isNumber($v) == 1 - ) + if (isNumber($v) == 1 || strpos($v,',') != 0) { - $sql=sprintf("select account_insert(%d,%f)", + $sql=sprintf("select account_insert(%d,'%s')", $this->id,$v); } - else + else { $sql=sprintf("select account_insert(%d,null)", $this->id); @@ -588,13 +597,13 @@ Array continue; } // TVA - if ( $id == ATTR_DEF_TVA ) + if ( $id == ATTR_DEF_TVA ) { echo_debug("Modify ATTR_DEF_TVA"); // Verify if the rate exists, if not then do not update - if ( strlen(trim($value)) != 0 ) + if ( strlen(trim($value)) != 0 ) { - if ( $this->cn->count_sql("select * from tva_rate where tva_id=".$value) == 0) + if ( $this->cn->count_sql("select * from tva_rate where tva_id=".$value) == 0) { echo_debug("class_fiche",__LINE__,"Tva invalide $value"); continue; @@ -602,25 +611,25 @@ Array } } // The contact has a company attribut - if ( $id == ATTR_DEF_COMPANY ) + if ( $id == ATTR_DEF_COMPANY ) { $exist=$this->cn->count_sql("select f_id from fiche join fiche_def using (fd_id) ". " join jnt_fic_att_value using (f_id) join attr_value using (jft_id) ". " where frd_id in (8,9,14) and ad_id=".ATTR_DEF_QUICKCODE. " and av_text='".FormatString($value)."'"); - if ( $exist == 0 && FormatString($value) != null ) + if ( $exist == 0 && FormatString($value) != null ) { $value=""; } } // Normal traitement $value2=FormatString($value); - + $sql=sprintf("select attribut_insert(%d,%d,'%s')", $fiche_id,$id,trim($value2)); $this->cn->exec_sql($sql); } - } catch (Exception $e) + } catch (Exception $e) { $this->cn->rollback(); throw ($e); @@ -630,11 +639,11 @@ Array return; } - + /*!\brief update a card */ - function update($p_array=null) + function update($p_array=null) { if ( $p_array == null) $p_array=$_POST; @@ -642,13 +651,13 @@ Array try { $this->cn->start(); // parse the $p_array array - foreach ($p_array as $name=>$value ) + foreach ($p_array as $name=>$value ) { echo_debug ("class_fiche",__LINE__,"Name = $name value $value") ; list ($id) = sscanf ($name,"av_text%d"); if ( $id == null ) continue; echo_debug("class_fiche",__LINE__,"modify $id"); - + // retrieve jft_id to update table attr_value $sql=" select jft_id from jnt_fic_att_value where ad_id=$id and f_id=$this->id"; $Ret=$this->cn->exec_sql($sql); @@ -656,23 +665,23 @@ Array // we need to insert this new attribut echo_debug ("class_fiche ".__LINE__." adding id !!! "); $jft_id=$this->cn->get_next_seq('s_jnt_fic_att_value'); - + $sql2=sprintf("insert into jnt_fic_att_value(jft_id,ad_id,f_id) values (%s,%s,%s)", $jft_id,$id,$this->id); - + $ret2=$this->cn->exec_sql($sql2); // insert a null value for this attribut $sql3=sprintf("insert into attr_value(jft_id,av_text) values (%s,null)", $jft_id); $ret3=$this->cn->exec_sql($sql3); - } else + } else { $tmp=Database::fetch_array($Ret,0); $jft_id=$tmp['jft_id']; } // Special traitement // quickcode - if ( $id == ATTR_DEF_QUICKCODE) + if ( $id == ATTR_DEF_QUICKCODE) { echo_debug("Modify ATTR_DEF_QUICKCODE"); $sql=sprintf("select update_quick_code(%d,'%s')", @@ -681,13 +690,13 @@ Array continue; } // name - if ( $id == ATTR_DEF_NAME ) + if ( $id == ATTR_DEF_NAME ) { echo_debug("Modify ATTR_DEF_NAME"); if ( strlen(trim($value)) == 0 ) continue; - - + + } if ( $id == ATTR_DEF_STOCK ) { $st=$this->cn->count_sql('select * from stock_goods where '. @@ -714,30 +723,24 @@ Array } // account - if ( $id == ATTR_DEF_ACCOUNT ) + if ( $id == ATTR_DEF_ACCOUNT ) { echo_debug("Modify ATTR_DEF_ACCOUNT"); $v=FormatString($value); echo_debug("Value = $v"); - if ( isNumber($v) == 1 ) + if ( isNumber($v) == 1 || strpos($v,',') != 0 ) { - $sql=sprintf("select account_update(%d,%d)", + $sql=sprintf("select account_update(%d,'%s')", $this->id,$v); try { $this->cn->exec_sql($sql); - /* update also the jrnx */ - $sql='update jrnx set j_poste=$1 where j_qcode in (select quick_code from vw_fiche_attr where f_id=$2)'; - $this->cn->exec_sql( - $sql, - array($v,$this->id)); - } catch (Exception $e) { throw new Exception(__LINE__."Erreur : ce compte [$v] n'a pas de compte parent.". "L'opération est annulée"); } - continue; + continue; } - if ( strlen (trim($v)) == 0 ) + if ( strlen (trim($v)) == 0 ) { $sql=sprintf("select account_update(%d,null)", @@ -760,33 +763,33 @@ Array } } // TVA - if ( $id == ATTR_DEF_TVA ) + if ( $id == ATTR_DEF_TVA ) { echo_debug("Modify ATTR_DEF_TVA"); // Verify if the rate exists, if not then do not update - if ( strlen(trim($value)) != 0 ) + if ( strlen(trim($value)) != 0 ) { - if ( $this->cn->count_sql("select * from tva_rate where tva_id=".$value) == 0) + if ( $this->cn->count_sql("select * from tva_rate where tva_id=".$value) == 0) { echo_debug("class_fiche",__LINE__,"Tva invalide $value"); continue; } } } - if ( $id == ATTR_DEF_COMPANY ) + if ( $id == ATTR_DEF_COMPANY ) { $exist=$this->cn->count_sql("select f_id from fiche join fiche_def using (fd_id) ". " join jnt_fic_att_value using (f_id) join attr_value using (jft_id) ". " where frd_id in (8,9,14) and ad_id=".ATTR_DEF_QUICKCODE. " and av_text='".FormatString($value)."'"); - - - if ( $exist == 0 && FormatString($value) != null ) + + + if ( $exist == 0 && FormatString($value) != null ) { $value="Attention : pas de société "; } } - + // Normal traitement $value2=FormatString($value); $sql=sprintf("update attr_value set av_text='%s' where jft_id=%d", @@ -802,11 +805,11 @@ Array } $this->cn->commit(); return; - + } /*!\brief remove a card */ - function remove() + function remove() { if ( $this->id==0 ) return; // verify if that card has not been used is a ledger @@ -821,7 +824,7 @@ Array if ( $this->cn->count_sql("select * from jrnx where j_qcode='".Database::escape_string($qcode)."'") != 0) { - alert('Impossible cette fiche est utilisée dans un journal'); + alert('Impossible cette fiche est utilisée dans un journal'); return; } @@ -832,9 +835,9 @@ Array if ( trim(strlen($class)) != 0 && isNumber($class) == 1 ) $is_used_jrnx= $this->cn->count_sql("select * from jrnx where j_poste=$class"); // if class is not NULL and if we use it before, we can't remove it - if (FormatString($class) != null && $is_used_jrnx != 0 ) + if (FormatString($class) != null && $is_used_jrnx != 0 ) { - alert('Impossible ce poste est utilisée dans un journal'); + alert('Impossible ce poste est utilisée dans un journal'); return; } else @@ -843,22 +846,22 @@ Array { $this->cn->exec_sql("delete from tmp_pcmn where pcm_val=$class"); } - + } $this->delete(); } /*!\brief return the name of a card - * + * */ - function getName() + function getName() { - $sql="select av_text from jnt_fic_att_value join attr_value + $sql="select av_text from jnt_fic_att_value join attr_value using (jft_id) where ad_id=1 and f_id=".$this->id; $Res=$this->cn->exec_sql($sql); $r=Database::fetch_all($Res); - if ( sizeof($r) == 0 ) + if ( sizeof($r) == 0 ) return 1; return $r[0]['av_text']; } @@ -866,20 +869,20 @@ Array /*!\brief return the quick_code of a card * \return null if not quick_code is found */ - function get_quick_code() + function get_quick_code() { - $sql="select av_text from jnt_fic_att_value join attr_value + $sql="select av_text from jnt_fic_att_value join attr_value using (jft_id) where ad_id=23 and f_id=".$this->id; $Res=$this->cn->exec_sql($sql); $r=Database::fetch_all($Res); - if ( sizeof($r) == 0 ) + if ( sizeof($r) == 0 ) return null; return $r[0]['av_text']; } /*!\brief Synonum of fiche::getAttribut */ - function Get() + function Get() { echo_debug('class_client',__LINE__,'Get'); fiche::getAttribut(); @@ -887,9 +890,9 @@ Array /*!\brief get all the card thanks the fiche_def_ref * \param $p_offset (default =-1) * \param $p_search sql condition - * \return array of fiche object + * \return array of fiche object */ - function GetAll($p_offset=-1,$p_search="") + function GetAll($p_offset=-1,$p_search="") { return fiche::GetByDef($this->fiche_def_ref,$p_offset,$p_search); } @@ -897,12 +900,12 @@ Array * card (bank, purchase...) * (fiche_def_ref primary key) */ - function get_fiche_def_ref_id() + function get_fiche_def_ref_id() { $result=$this->cn->get_array("select frd_id from fiche join fiche_Def using (fd_id) where f_id=".$this->id); if ( $result == null ) return null; - + return $result[0]['frd_id']; } /** @@ -926,18 +929,18 @@ Array $this->row=$array; return array($array,$tot_deb,$tot_cred); } - /*! - * \brief Get data for poste - * + /*! + * \brief Get data for poste + * * \param $p_from periode from * \param $p_to end periode * \return double array (j_date,deb_montant,cred_montant,description,jrn_name,j_debit,jr_internal) * (tot_deb,tot_credit * - */ + */ function get_row_date($p_from,$p_to) { - if ( $this->id == 0 ) + if ( $this->id == 0 ) { echo_error("class_fiche",__LINE__,"id is 0"); return; @@ -959,18 +962,18 @@ Array return $this->get_row_result($Res); } - /*! - * \brief Get data for poste - * + /*! + * \brief Get data for poste + * * \param $p_from periode from * \param $p_to end periode * \return double array (j_date,deb_montant,cred_montant,description,jrn_name,j_debit,jr_internal) * (tot_deb,tot_credit * - */ + */ function get_row($p_from,$p_to) { - if ( $this->id == 0 ) + if ( $this->id == 0 ) { echo_error("class_fiche",__LINE__,"id is 0"); return; @@ -988,28 +991,28 @@ Array " where j_qcode='".$qcode."' and ".$periode. " order by j_date::date"); return $this->get_row_result($Res); - + } - /*! + /*! * \brief HtmlTable, display a HTML of a card for the asked period * \return none */ function HtmlTableDetail($p_array=null) - { + { if ( $p_array == null) $p_array=$_REQUEST; $name=$this->getName(); - + list($array,$tot_deb,$tot_cred)=$this->get_row_date( $p_array['from_periode'], $p_array['to_periode'] ); - - if ( count($this->row ) == 0 ) + + if ( count($this->row ) == 0 ) return; - + $rep=""; - + echo '

'.$this->id." ".$name.'

'; echo ""; echo "". @@ -1019,8 +1022,8 @@ Array "". "". ""; - - foreach ( $this->row as $op ) { + + foreach ( $this->row as $op ) { echo "". "". "". @@ -1031,7 +1034,7 @@ Array $ac=new Acc_Operation($this->cn); $ac->jr_id=$op['jr_id']; echo $ac->display_jrnx_detail(1); - + } $solde_type=($tot_deb>$tot_cred)?"solde débiteur":"solde créditeur"; $diff=round(abs($tot_deb-$tot_cred),2); @@ -1042,31 +1045,31 @@ Array "". "". ""; - + echo "
Montant Débit/Crédit
".$op['jr_internal']."".$op['j_date']."$tot_deb$tot_cred
"; - + return; } - /*! + /*! * \brief HtmlTable, display a HTML of a card for the asked period - * \param $p_array default = null keys = from_periode, to_periode + * \param $p_array default = null keys = from_periode, to_periode */ function HtmlTable($p_array=null) - { + { if ( $p_array == null) $p_array=$_REQUEST; $name=h($this->getName()); - + list($array,$tot_deb,$tot_cred)=$this->get_row_date( $p_array['from_periode'], $p_array['to_periode'] ); - - if ( count($this->row ) == 0 ) + + if ( count($this->row ) == 0 ) return; - + $rep=""; - + echo '

'.$this->id." ".$name.'

'; echo ""; echo "". @@ -1076,8 +1079,8 @@ Array "". "". ""; - - foreach ( $this->row as $op ) { + + foreach ( $this->row as $op ) { echo "". "". "". @@ -1085,7 +1088,7 @@ Array "". "". ""; - + } $solde_type=($tot_deb>$tot_cred)?"solde débiteur":"solde créditeur"; $diff=round(abs($tot_deb-$tot_cred),2); @@ -1096,12 +1099,12 @@ Array "". "". ""; - + echo "
Débit Crédit
".$op['jr_internal']."".$op['j_date_fmt']."".$op['deb_montant']."".$op['cred_montant']."
$tot_deb$tot_cred
"; - + return; } - /*! + /*! * \brief Display HTML Table Header (button) * * \return none @@ -1115,12 +1118,12 @@ Array echo '
'; echo ""; echo ''; - + echo '"; - + echo '"; - + echo '"; echo "
'. HtmlInput::submit('bt_other',"Autre poste"). dossier::hidden(). $hid->input("type","poste").$hid->input('p_action','impress')."
'. HtmlInput::submit('bt_pdf',"Export PDF"). dossier::hidden(). @@ -1134,7 +1137,7 @@ Array echo $hid->input('oper_detail','on'); echo "
'. HtmlInput::submit('bt_csv',"Export CSV"). dossier::hidden(). @@ -1145,36 +1148,36 @@ Array $hid->input("to_periode",$p_array['to_periode']); if (isset($p_array['oper_detail'])) echo $hid->input('oper_detail','on'); - + echo "
"; echo '
'; - + } - /*! + /*! * \brief give the balance of an card * \return * balance of the card * - */ + */ function get_solde_detail($p_cond="") { if ( $this->id == 0 ) exit('fiche->id est nul'); $qcode=$this->strAttribut(ATTR_DEF_QUICKCODE); if ( $p_cond != "") $p_cond=" and ".$p_cond; - $Res=$this->cn->exec_sql("select sum(deb) as sum_deb, sum(cred) as sum_cred from - ( select j_poste, - case when j_debit='t' then j_montant else 0 end as deb, - case when j_debit='f' then j_montant else 0 end as cred - from jrnx - where + $Res=$this->cn->exec_sql("select sum(deb) as sum_deb, sum(cred) as sum_cred from + ( select j_poste, + case when j_debit='t' then j_montant else 0 end as deb, + case when j_debit='f' then j_montant else 0 end as cred + from jrnx + where j_qcode = ('$qcode'::text) $p_cond ) as m "); $Max=Database::num_row($Res); if ($Max==0) return 0; $r=Database::fetch_array($Res,0); - + return array('debit'=>$r['sum_deb'], 'credit'=>$r['sum_cred'], 'solde'=>abs($r['sum_deb']-$r['sum_cred'])); @@ -1185,8 +1188,8 @@ function get_solde_detail($p_cond="") { */ function empty_attribute($p_attr) { $sql="select av_text - from jnt_fic_att_value - natural join fiche + from jnt_fic_att_value + natural join fiche natural join attr_value left join attr_def using (ad_id) where f_id=".$this->id. " and ad_id = ".$p_attr. @@ -1196,24 +1199,24 @@ function empty_attribute($p_attr) { $text=Database::fetch_result($res,0,0); return (strlen(trim($text)) > 0)?false:true; - + } /*! Summary * \brief show the default screen - * - * \param p_search (filter) + * + * \param p_search (filter) * \param p_action show the action column - * + * * \return: string to display */ - function Summary($p_search="",$p_action="") + function Summary($p_search="",$p_action="") { $str_dossier=dossier::get(); $p_search=FormatString($p_search); $script=$_SERVER['PHP_SELF']; // Creation of the nav bar // Get the max numberRow - $all_tiers=$this->CountByDef($this->fiche_def_ref,$p_search); + $all_tiers=$this->CountByDef($this->fiche_def_ref,$p_search); // Get offset and page variable $offset=( isset ($_REQUEST['offset'] )) ?$_REQUEST['offset']:0; $page=(isset($_REQUEST['page']))?$_REQUEST['page']:1; @@ -1230,8 +1233,8 @@ function empty_attribute($p_attr) { if ( trim($p_search) != "" ) { $search=" and f_id in -(select f_id from jnt_fic_att_value - join fiche using (f_id) +(select f_id from jnt_fic_att_value + join fiche using (f_id) join attr_value using (jft_id) where ad_id=1 and av_text ~* '$p_search')"; @@ -1275,7 +1278,7 @@ $r.=''; $r.=sprintf(' %15.2f€',$a['credit']); $r.=sprintf(' %15.2f€',$a['solde']); - + $r.=""; } @@ -1283,10 +1286,10 @@ $r.=''; $r.=$bar; return $r; } -/*! +/*! * \brief get the fd_id of the card : fd_id, it set the attribute fd_id */ - function get_categorie() + function get_categorie() { if ( $this->id == 0 ) exit('class_fiche : f_id = 0 '); $sql='select fd_id from fiche where f_id='.$this->id; @@ -1296,39 +1299,39 @@ $r.=''; else $this->fd_id=$R; } -/*! +/*! *************************************************** * \brief Check if a fiche is used by a jrn * return 1 if the fiche is in the range otherwise 0, the quick_code * or the id must be set - * - * + * + * * \param $p_jrn journal_id * \param $p_type : deb or cred default empty - * + * * \return 1 if the fiche is in the range otherwise < 1 * -1 the card doesn't exist * -2 the ledger has no card to check - * + * */ function belong_ledger($p_jrn,$p_type="") { // check if we have a quick_code or a f_id - if (($this->quick_code==null || $this->quick_code == "" ) + if (($this->quick_code==null || $this->quick_code == "" ) && $this->id == 0 ) { echo 'erreur ni quick_code ni f_id ne sont donnes'; exit(); } //retrieve the quick_code - if ( $this->quick_code=="") + if ( $this->quick_code=="") $this->quick_code=$this->get_quick_code(); - if ( $this->quick_code==null) + if ( $this->quick_code==null) return -1; - if ( $this->id == 0 ) + if ( $this->id == 0 ) if ( $this->get_by_qcode(null,false) == 1) return -1; @@ -1343,10 +1346,10 @@ function belong_ledger($p_jrn,$p_type="") $Res=$this->cn->exec_sql("select $get as fiche from jrn_def where jrn_def_id=$p_jrn"); } else { // Get all the fiche type (deb and cred) - $Res=$this->cn->exec_sql(" select jrn_def_fiche_cred as fiche + $Res=$this->cn->exec_sql(" select jrn_def_fiche_cred as fiche from jrn_def where jrn_def_id=$p_jrn union - select jrn_def_fiche_deb + select jrn_def_fiche_deb from jrn_def where jrn_def_id=$p_jrn" ); } @@ -1372,12 +1375,12 @@ function belong_ledger($p_jrn,$p_type="") $sql="select * from fiche - where + where fd_id in (".$str_list.") and f_id= ".$this->id; $Res=$this->cn->exec_sql($sql); $Max=Database::num_row($Res); - if ($Max==0 ) + if ($Max==0 ) return 0; else return 1; @@ -1404,22 +1407,22 @@ function is_used() { $qcode=$this->strAttribut(ATTR_DEF_QUICKCODE); $sql='select count(*) as c from jrnx where j_qcode=$1'; $count=$this->cn->get_value($sql,array($qcode)); - if ( $count == 0 ) return false; + if ( $count == 0 ) return false; return true; } /*\brief remove a card without verification */ function delete() { // Remove from attr_value - $Res=$this->cn->exec_sql("delete from attr_value - where jft_id in (select jft_id - from jnt_fic_att_value + $Res=$this->cn->exec_sql("delete from attr_value + where jft_id in (select jft_id + from jnt_fic_att_value natural join fiche where f_id=".$this->id.")"); // Remove from jnt_fic_att_value $Res=$this->cn->exec_sql("delete from jnt_fic_att_value where f_id=".$this->id); - + // Remove from fiche $Res=$this->cn->exec_sql("delete from fiche where f_id=".$this->id); - + } /*!\brief create the sql statement for retrieving all * the card @@ -1473,7 +1476,7 @@ function is_used() { $and=" and "; if (isset($query)){ $query=FormatString($query); - $filter_query=$and."(vw_name ilike '%$query%' or quick_code ilike ('%$query%') or vw_description ilike '%$query%')"; + $filter_query=$and."(vw_name ilike '%$query%' or quick_code ilike ('%$query%') or vw_description ilike '%$query%' or tva_num ilike '%$query%')"; } $sql="select * from vw_fiche_attr where ".$filter_fd_id.$filter_query; return $sql; diff --git a/include/class_fiche_def.php b/include/class_fiche_def.php index 6f698f820..ab6ebc511 100644 --- a/include/class_fiche_def.php +++ b/include/class_fiche_def.php @@ -52,17 +52,20 @@ function input () { $ref=$this->cn->get_array("select * from fiche_def_ref order by frd_text"); $iradio=new IRadio(); - $p_js=" SearchPosteFilter('".$_REQUEST['PHPSESSID']."','".dossier::id()."','class_base','all','','class_base_label')"; + /* the accounting item */ + $class_base=new IPoste('class_base'); + $class_base->set_attribute('ipopup','ipop_account'); + $class_base->set_attribute('account','class_base'); + $class_base->set_attribute('label','acc_label'); + $f_class_base=$class_base->input(); require_once ('template/fiche_def_input.php'); return; } /*! - ************************************************** * \brief Get attribut of a fiche_def * * \return string value of the attribute - * none */ function GetAttribut() { $sql="select * from jnt_fic_attr ". @@ -84,7 +87,6 @@ function input () } /*! - ************************************************** * \brief Get attribut of the fiche_def * */ @@ -173,11 +175,6 @@ function input () // Format correctly the name of the cat. of card $p_nom_mod=FormatString($p_nom_mod); - // Format the p_class_base - // must be an integer - if ( isNumber($p_class_base) == 0 && FormatString($p_class_base) != null ) { - echo_error ('p_class_base is NOT a number'); - } // Name can't be empty if ( strlen(trim($p_nom_mod)) == 0 ) return; @@ -212,25 +209,26 @@ function input () $p_create='false'; // Class is valid ? - if ( FormatString($p_class_base) != null) { + if ( FormatString($p_class_base) != null || strpos(',',$p_class_base) != 0 ) { // p_class is a valid number - $sql=sprintf("insert into fiche_def(fd_label,fd_class_base,frd_id,fd_create_account) - values ('%s',%s,%d,'%s')", - $p_nom_mod,$p_class_base,$p_FICHE_REF,$p_create); - $Res=$this->cn->exec_sql($sql); - - // p_class must be added to tmp_pcmn - $sql=sprintf("select account_add(%d,'%s')", - $p_class_base,$p_nom_mod); - - $Res=$this->cn->exec_sql($sql); - + $sql="insert into fiche_def(fd_label,fd_class_base,frd_id,fd_create_account) + values ($1,$2,$3,$4)"; + + $Res=$this->cn->exec_sql($sql,array($p_nom_mod,$p_class_base,$p_FICHE_REF,$p_create)); + + // p_class must be added to tmp_pcmn if it is a single accounting + if ( strpos(',',$p_class_base) ==0) { + $sql=sprintf("select account_add(%d,'%s')", + $p_class_base,$p_nom_mod); + + $Res=$this->cn->exec_sql($sql); + } + // Get the fd_id $fd_id=$this->cn->get_current_seq('s_fdef'); - // Add the class_base if needed - + // update jnt_fic_attr $sql=sprintf("insert into jnt_fic_attr(fd_id,ad_id,jnt_order) values (%d,%d,10)",$fd_id,ATTR_DEF_ACCOUNT); $Res=$this->cn->exec_sql($sql); diff --git a/include/class_icard.php b/include/class_icard.php index 49559c060..71883e8df 100644 --- a/include/class_icard.php +++ b/include/class_icard.php @@ -231,6 +231,17 @@ class ICard extends HtmlInput * - typecard (deb, cred, filter or list of value) * will be set * if ICard is in readOnly, the button disappears, so the return string is empty +\code + // search ipopup +$search_card=new IPopup('ipop_card'); +$search_card->title=_('Recherche de fiche'); +$search_card->value=''; +echo $search_card->input(); + +$a=new ICard('test'); +$a->search(); + +\endcode *\see ajax_card.php *\note the ipopup id is hard coded : ipop_card *@return HTML string with the button diff --git a/include/class_idate.php b/include/class_idate.php index 9dd93de5f..0049af2a0 100644 --- a/include/class_idate.php +++ b/include/class_idate.php @@ -20,8 +20,8 @@ // Copyright Author Dany De Bontridder ddebontridder@yahoo.fr -/*!\file - * \brief Html Input +/*!\file + * \brief Html Input */ require_once('class_html_input.php'); class IDate extends HtmlInput @@ -50,14 +50,14 @@ require_once('class_html_input.php'); singleClick : true }); -'; +'; return $r; } /*!\brief print in html the readonly value of the widget*/ public function display() { - $r=" Date : ".$this->value; + $r=" : ".$this->value; $r.=''; diff --git a/include/class_ipopup.php b/include/class_ipopup.php index ecf4c9b76..9312c3dec 100644 --- a/include/class_ipopup.php +++ b/include/class_ipopup.php @@ -31,23 +31,24 @@ require_once('class_html_input.php'); class IPopup extends HtmlInput { var $name; /*!< name name and id of the div */ - function __construct($p_name) + function __construct($p_name) { $this->name=$p_name; $this->parameter=''; $this->attribute=array(); + $this->drag=true; } function set_width($p_val) { $js=sprintf('$("%s'.'_border").style.width="%s";', $this->name,$p_val); $this->parameter.=$js; - + } function set_height($p_val) { $js=sprintf('$("%s'.'_border").style.height="%s";', $this->name,$p_val); $this->parameter.=$js; - + } function set_zindex($p_val) { @@ -55,7 +56,10 @@ class IPopup extends HtmlInput $this->name,$p_val); $js=sprintf('$("%s'.'_content").style.zIndex=%d;', $this->name,$p_val); - $this->parameter.=$js; + $this->parameter.=$js; + } + function set_dragguable($p_value){ + $this->drag=$p_value; } /*!\brief set the attribute thanks javascript as the width, the position ... *\param $p_name attribute name @@ -99,10 +103,10 @@ class IPopup extends HtmlInput $this->name, $this->name, $this->value); - + /* Add properties at the widget */ $attr=$this->parameter; - for ($i=0;$i< count($this->attribute);$i++){ + for ($i=0;$i< count($this->attribute);$i++){ list($name,$value)=$this->attribute[$i]; $tmp1=sprintf("$('%s').%s='%s';", $this->name, @@ -110,12 +114,15 @@ class IPopup extends HtmlInput $value); $attr.=$tmp1; } - + $draggable=''; + if ($this->drag==true){ /* add draggable possibility */ $draggable=sprintf(" new Draggable('%s_border',{starteffect:function(){ new Effect.Highlight('%s_border',{scroll:window,queue:'end'}); } });" ,$this->name ,$this->name); + + } $attr=create_script($attr.$draggable); $r.=$attr; return $r; diff --git a/include/class_itva_select.php b/include/class_itva_select.php index 0ada9acdc..9c9d784d1 100644 --- a/include/class_itva_select.php +++ b/include/class_itva_select.php @@ -20,8 +20,8 @@ // Copyright Author Dany De Bontridder ddebontridder@yahoo.fr -/*!\file - * \brief Html Input +/*!\file + * \brief Html Input */ require_once('class_iselect.php'); class ITva_Select extends ISelect @@ -39,15 +39,18 @@ require_once('class_iselect.php'); $this->value=$select_tva; $r=parent::input(); return $r; - + } /*!\brief print in html the readonly value of the widget*/ public function display() { - throw new Exception ("Pas de function display pour la TVA",1); + $select_tva=$this->db->make_array("select tva_id,tva_label from tva_rate order by tva_label asc",0); + $this->value=$select_tva; + $r=parent::display(); + return $r; } static public function test_me() { - + } } diff --git a/include/class_user.php b/include/class_user.php index 73c6bf5fd..9f0770285 100644 --- a/include/class_user.php +++ b/include/class_user.php @@ -1,4 +1,4 @@ -'._('Session expirée
Utilisateur déconnecté').''; redirect('index.php',1); exit(); @@ -55,21 +55,21 @@ class User { $this->id=-1; if ( isset($_SESSION['g_theme']) ) $this->theme=$_SESSION['g_theme']; - + $this->admin=( isset($_SESSION['use_admin']) )?$_SESSION['use_admin']:0; - + if ( isset($_SESSION['use_name']) ) $this->name=$_SESSION['use_name']; if ( isset($_SESSION['use_first_name']) ) $this->first_name=$_SESSION['use_first_name']; $this->load(); - } + } else // if p_id is set get data of another user { $this->id=$p_id; $this->db=$p_cn; $this->load(); - } + } } /*!\brief load data from database. * if this->id == -1, it is unknown so we have to retrieve it @@ -93,7 +93,7 @@ class User { use_active, use_admin from ac_users "; - $cn=new Database(); + $cn=new Database(); $Res=$cn->exec_sql($sql.$sql_cond,$sql_array); if (($Max=Database::num_row($Res)) == 0 ) return -1; $row=Database::fetch_array($Res,0); @@ -105,30 +105,30 @@ class User { $this->admin=$row['use_admin']; } function save() { - + $Sql="update ac_users set use_first_name=$1, use_name=$2 ,use_active=$3,use_admin=$4 where use_id=$5"; - $cn=new Database(); + $cn=new Database(); $Res=$cn->exec_sql($Sql,array($this->first_name,$this->last_name,$this->active,$this->admin,$this->id)); } /*! * \brief Check if user is active and exists in therepository * Automatically redirect, it doesn't check if a user can access a folder *\param $silent false, echo an error message and exit, true : exit without warning - * default is false - * + * default is false + * ++*/ function Check($silent=false) { - + $res=0; $pass5=md5($this->pass); $cn=new Database(); $sql="select ac_users.use_login,ac_users.use_active, ac_users.use_pass, use_admin,use_first_name,use_name - from ac_users - where ac_users.use_id='$this->id' + from ac_users + where ac_users.use_id='$this->id' and ac_users.use_active=1 and ac_users.use_pass='$pass5'"; echo_debug('class_user.php',__LINE__,"Sql = $sql"); @@ -141,33 +141,33 @@ class User { $_SESSION['use_name']=$r['use_name']; $_SESSION['use_first_name']=$r['use_first_name']; $_SESSION['isValid']=1; - + $this->admin=$_SESSION['use_admin']; $this->name=$_SESSION['use_name']; $this->first_name=$_SESSION['use_first_name']; $this->load_global_pref(); - + } - + if ( $res == 0 ) { if ( ! $silent) { alert(_('Utilisateur ou mot de passe incorrect')); redirect('index.html'); } session_unset(); - exit -1; + exit -1; } else { $this->valid=1; } - + return $ret; - + } - /*!\brief return the access to a folder, + /*!\brief return the access to a folder, * \param $p_dossier id if it is == 0 then we take the value from $_SESSION - *\return the priv_priv + *\return the priv_priv * - X no access * - R has access (normal user) * - L Local Admin @@ -186,8 +186,8 @@ where use_id=$1 and dos_id=$2"; if ( $res=='') return 'X'; return $res; } - /*\brief save the access of a folder - *\param $db_id the dossier id + /*\brief save the access of a folder + *\param $db_id the dossier id *\param $priv the priv. to set */ function set_folder_access($db_id,$priv) { @@ -197,16 +197,16 @@ where use_id=$1 and dos_id=$2"; if ( $cn->size() == 0 ) { - $Res=$cn->exec_sql("insert into jnt_use_dos(dos_id,use_id) values($1,$2)",array($db_id,$this->id)); + $Res=$cn->exec_sql("insert into jnt_use_dos(dos_id,use_id) values($1,$2)",array($db_id,$this->id)); $jnt=$cn->get_value("select jnt_id from jnt_use_dos where dos_id=$1 and use_id=$2",array($db_id,$this->id)); $Res=$cn->exec_sql("insert into priv_user (priv_priv,priv_jnt) values($1,$2)",array($priv,$jnt)); } $Res=$cn->exec_sql("update priv_user set priv_priv=$1 where priv_jnt=$2",array($priv,$jnt)); - + } /*!\brief check that a user is valid and the access to the folder * \param $p_ledger the ledger to check - *\return the priv_priv + *\return the priv_priv * - O only predefined operation * - W write * - R read only @@ -227,7 +227,7 @@ where use_id=$1 and dos_id=$2"; return $res; } - /*! + /*! * \brief get all the available ledgers for the current user * \param $p_type = ALL or the type of the ledger (ACH,VEN,FIN,ODS) * \param $p_access =3 for Read or WRITE, 2 write, 1 for readonly @@ -249,13 +249,13 @@ where use_id=$1 and dos_id=$2"; $sql_access=" and uj_priv = 'R'"; break; - } + } $sql="select jrn_def_id,jrn_def_type, jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, jrn_deb_max_line,jrn_cred_max_line from jrn_def join jrn_type on jrn_def_type=jrn_type_id - join user_sec_jrn on uj_jrn_id=jrn_def_id + join user_sec_jrn on uj_jrn_id=jrn_def_id where uj_login='".$this->login."'". $sql_type.$sql_access. @@ -264,7 +264,7 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, $sql_type=($p_type=='ALL')?'':"where jrn_def_type=upper('".FormatString($p_type)."')"; $sql="select jrn_def_id,jrn_def_type,jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_deb_max_line,jrn_cred_max_line, jrn_type_id,jrn_desc,'W' as uj_priv - from jrn_def join jrn_type on jrn_def_type=jrn_type_id + from jrn_def join jrn_type on jrn_def_type=jrn_type_id $sql_type order by jrn_Def_id"; @@ -291,9 +291,9 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, $sql.='-1)'; return $sql; } - /*! + /*! * \brief Check if an user is an admin - * + * * \return 1 for yes 0 for no */ function Admin() { @@ -301,23 +301,23 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, $pass5=md5($this->pass); $sql="select use_admin from ac_users where use_login=$1 and use_active=1 "; - + $cn=new Database(); $res=$cn->exec_sql($sql,array($this->login)); if ( Database::num_row($res)==0) exit(__FILE__." ".__LINE__." aucun resultat"); $this->admin=Database::fetch_result($res,0); - } + } else $this->admin=1; - + return $this->admin; } - /*! + /*! * \brief Set the selected periode in the user's preferences - * - * \param $p_periode periode + * + * \param $p_periode periode * \param - $p_user * - */ + */ function set_periode($p_periode) { $sql="update user_local_pref set parameter_value='$p_periode' where user_id='$this->id' and parameter_type='PERIODE'"; $Res=$this->db->exec_sql($sql); @@ -343,24 +343,24 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, $pid=Database::fetch_result($Res2,0,0); } - $sql=sprintf("insert into user_local_pref (user_id,parameter_value,parameter_type) + $sql=sprintf("insert into user_local_pref (user_id,parameter_value,parameter_type) values ('%s','%d','PERIODE')", $this->id,$pid); $Res=$this->db->exec_sql($sql); } - /*! + /*! * \brief Get the default periode from the user's preferences - * - * \return the default periode - * * - */ + * \return the default periode + * + * + */ function get_periode() { $array=$this->get_preference(); - if ( ! isset ($array['PERIODE'])) { + if ( ! isset ($array['PERIODE'])) { $this->set_default_periode(); $array=$this->get_preference(); } @@ -373,7 +373,7 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, $array=$this->get_preference(); $fr_id=(isset($array['MINIREPORT']))?$array['MINIREPORT']:0; return $fr_id; - + } /*!\brief set the mini rapport to display on the welcome page @@ -394,10 +394,10 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, } - /*! + /*! * \brief Get the default user's preferences * \return array of (parameter_type => parameter_value) - */ + */ function get_preference () { $sql="select parameter_type,parameter_value from user_local_pref where user_id='".$this->id."'"; @@ -412,20 +412,20 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, return $l_array; } - /*! + /*! * \brief Check if an user is allowed to do an action - * \param p_action_id + * \param p_action_id * \return * - 0 no priv * - 1 priv granted * - */ + */ function check_action ( $p_action_id) { if ( $this->Admin()==1 ) return 1; if ( $this->is_local_admin(dossier::id()) == 1 ) return 1; - + $Res=$this->db->exec_sql( "select * from user_sec_act where ua_login=$1 and ua_act_id=$2", array($this->login,$p_action_id)); @@ -435,18 +435,18 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, echo "

Action Invalide !!! $Count select * from user_sec_act where ua_login='$p_login' and ua_act_id=$p_action_id

"; exit(); } - /*! + /*! * \brief Get the global preferences from user_global_pref * in the account_repository db * * \note set $SESSION[g_variable] */ - function load_global_pref() + function load_global_pref() { echo_debug('class_user.php',__LINE__,"function load_global_pref"); $cn=new Database(); // Load everything in an array - $Res=$cn->exec_sql ("select parameter_type,parameter_value from + $Res=$cn->exec_sql ("select parameter_type,parameter_value from user_global_pref where user_id='".$this->login."'"); $Max=Database::num_row($Res); @@ -459,7 +459,7 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, $line=array(); for ($i=0;$i<$Max;$i++) { $row=Database::fetch_array($Res,$i); - $type=$row['parameter_type']; + $type=$row['parameter_type']; $line[$type]=$row['parameter_value'];; } // save array into g_ variable @@ -470,14 +470,14 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, $this->insert_default_global_pref($parameter); $this->load_global_pref(); return; - } + } $_SESSION[$name]=$line[$parameter]; } } - /*! + /*! * \brief insert default pref - * if no parameter are given insert all the existing + * if no parameter are given insert all the existing * parameter otherwise only the requested * \param $p_type parameter's type or nothing * \param $p_value parameter value @@ -492,7 +492,7 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, 'TOPMENU'=>'TEXT', 'LANG'=>'fr_FR.utf8'); $cn=new Database(); - $Sql="insert into user_global_pref(user_id,parameter_type,parameter_value) + $Sql="insert into user_global_pref(user_id,parameter_type,parameter_value) values ('%s','%s','%s')"; if ( $p_type == "" ) { foreach ( $default_parameter as $name=>$value) { @@ -509,11 +509,11 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, } - /*! + /*! * \brief update default pref * if value is not given then use the default value * - * \param $p_type parameter's type + * \param $p_type parameter's type * \param $p_value parameter's value value of the type */ function update_global_pref($p_type,$p_value="") { @@ -522,8 +522,8 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, "LANG"=>'fr_FR.utf8', 'TOPMENU'=>'SELECT'); $cn=new Database(); - $Sql="update user_global_pref set parameter_value=$1 - where parameter_type=$2 and + $Sql="update user_global_pref set parameter_value=$1 + where parameter_type=$2 and user_id=$3"; $value=($p_value=="")?$default_parameter[$p_type]:$p_value; $cn->exec_sql($Sql,array($value,$p_type,$this->login)); @@ -537,17 +537,17 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, { $sql="select p_exercice from parm_periode where p_id=".$this->get_periode(); $Ret=$this->db->exec_sql($sql); - if (Database::num_row($Ret) == 1) + if (Database::num_row($Ret) == 1) { $r=Database::fetch_array($Ret,0); return $r['p_exercice']; } - else + else return 0; } - /*!\brief Check if the user can access + /*!\brief Check if the user can access * otherwise warn and exit * \param $p_action requested action * \param $p_js = 1 javascript, or 0 just a text @@ -562,7 +562,7 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, echo ""; - + } else { @@ -575,19 +575,19 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, } } - - /*! + + /*! * \brief Check if an user is an local administrator - * - * + * + * * \param $p_dossier : dossier_id - * + * * \return * - 0 if no * - 1 if yes * - */ - function is_local_admin($p_dossier=-1) + */ + function is_local_admin($p_dossier=-1) { if ($p_dossier==-1) { $p_dossier=dossier::id(); @@ -599,7 +599,7 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, " where priv_priv='L' and use_login='".$this->login."' and dos_id=$p_dossier"; $cn=new Database(); - + $isAdmin=$cn->count_sql($sql); @@ -615,24 +615,24 @@ jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, * array indices * - use_id (id ) * - use_login (login of the user) - * - use_name + * - use_name * - use_first_name * *\exception throw an exception if nobody can access */ static function get_list($p_dossier) { - $sql="select distinct use_id,use_login,use_first_name,use_name from ac_users - left outer join jnt_use_dos using (use_id) -where + $sql="select distinct use_id,use_login,use_first_name,use_name from ac_users + left outer join jnt_use_dos using (use_id) +where (dos_id=$1 or use_admin=1) and use_active=1"; $repo=new Database(); $array=$repo->get_array($sql,array($p_dossier)); if ( $repo->size() == 0 ) throw new Exception ('Error inaccessible folder'); return $array; } - /*! + /*! * \brief check the access of an user on a ledger - * + * * \param $p_jrn the ledger id * \return * - O only predefined operation @@ -640,9 +640,9 @@ where * - R read only * - X no access * - */ + */ - function check_jrn($p_jrn) + function check_jrn($p_jrn) { return $this->get_ledger_access($p_jrn); } @@ -650,9 +650,13 @@ where * and exit *\param the folder if *\param $silent false, echo an error message and exit, true : exit without warning - * default is false + * default is false + * \return + * - L for administrator (local and global) + * - P for extension only + * - R regular user */ - function check_dossier($p_dossier_id,$silent=false) + function check_dossier($p_dossier_id,$silent=false) { $this->Admin(); if ( $this->admin==1 || $this->is_local_admin($p_dossier_id)==1) return 'L'; @@ -664,7 +668,9 @@ where if ( ! $silent) alert(_('Dossier non accessible')); exit(); } + return $dossier; } - + + } ?> diff --git a/include/constant.php b/include/constant.php index 4b3c3519b..bcf1c1760 100644 --- a/include/constant.php +++ b/include/constant.php @@ -26,7 +26,7 @@ require_once ('config.inc.php'); require_once('constant.security.php'); -define ("DBVERSION",63); +define ("DBVERSION",68); define ("MAX_COMPTE",4); define ('MAX_ARTICLE',9); diff --git a/include/contact.inc.php b/include/contact.inc.php index cc4d37ce8..dce8ad9e3 100644 --- a/include/contact.inc.php +++ b/include/contact.inc.php @@ -1,4 +1,4 @@ -',urldecode($_REQUEST['url'])); } -else -{ +else +{ $retour=""; $h_url=""; } // Menu // Remove a card -if ( isset ($_POST['delete']) ) +if ( isset ($_POST['delete']) ) { $f_id=$_REQUEST['f_id']; $fiche=new contact($cn,$f_id); $fiche->remove(); - $sub_action="list"; + $sub_action="list"; } //----------------------------------------------------- // Add card @@ -75,7 +75,7 @@ if ( $sub_action=="insert" ) //----------------------------------------------------- // Save modification -if ( isset ($_POST['mod'])) +if ( isset ($_POST['mod'])) { // modification is asked $f_id=$_REQUEST['f_id']; @@ -85,11 +85,11 @@ if ( isset ($_POST['mod'])) $sub_action="list"; } // by default open liste -if ( $sub_action == "" ) +if ( $sub_action == "" ) $sub_action="list"; //----------------------------------------------------- -//Display a blank card -if ( $sub_action=="blank") +//Display a blank card +if ( $sub_action=="blank") { $retour_action=HtmlInput::button_anchor('Retour', "commercial.php?p_action=contact&$str_dossier"); @@ -118,7 +118,7 @@ if ( $sub_action == "list" )
', $a); @@ -130,7 +130,7 @@ if ( $sub_action == "list" ) - +> -name="fd_id"; $w->value= $cn->make_array("select fd_id,fd_label from fiche_def where ". @@ -178,7 +178,7 @@ if ( $sub_action == "list" )
-'; $contact=new contact($cn,$f_id); echo $retour; - echo '
'; + echo ''; echo dossier::hidden(); echo $contact->Display(false); $w=new IHidden(); diff --git a/include/dexia.inc.php b/include/dexia.inc.php index 8ec811ae7..457820d37 100644 --- a/include/dexia.inc.php +++ b/include/dexia.inc.php @@ -45,7 +45,7 @@ while (($data = fgetcsv($handle, 2000,'@')) !== FALSE) echo_debug('dexia_be',__LINE__,'$row = '.var_export($row,true)); echo_debug('dexia_be',__LINE__,'sizeof($row)'.sizeof($row)); - $row=split(';',$data[0]); + $row=explode(';',$data[0]); //to avoid a level of if if (!(isset($row[2]))) $row[2]=''; diff --git a/include/dexia_be.inc.php b/include/dexia_be.inc.php index 216007fdb..b0caea766 100644 --- a/include/dexia_be.inc.php +++ b/include/dexia_be.inc.php @@ -1,4 +1,4 @@ -count_sql(utf8_encode($Sql)) > 0) { /* Skip it it already encoded */ echo "Double skipped : $ref_extrait $detail
"; $LinesDup++; continue; - } - - + } + + //-------------------------------------------------------------------- -// SQL request to insert into import_tmp +// SQL request to insert into import_tmp // Adapt the format of the import's date in the ** to_date ** function //-------------------------------------------------------------------- $Sql="insert into import_tmp (code, @@ -99,11 +99,11 @@ while (($data = fgetcsv($handle, 2000,'@')) !== FALSE) { jrn, status) values ( '$ref_extrait', - to_date('$date_exec','DD/MM/YYYY'), - to_date('$date_val' ,'DD/MM/YYYY'), + to_date('$date_exec','DD/MM/YYYY'), + to_date('$date_val' ,'DD/MM/YYYY'), $montant, '$devise', - '" . addslashes($compte_ordre). "', + '" . addslashes($compte_ordre). "', '".addslashes($detail)."','" .$num_compte." ', '$p_bq_account', $p_jrn, @@ -123,14 +123,12 @@ while (($data = fgetcsv($handle, 2000,'@')) !== FALSE) { //----------------------------------------------------- // The import is OK //----------------------------------------------------- + $LinesImported++; + $row++; + echo "Record imported: $ref_extrait $detail
"; - else { - $LinesImported++; - $row++; - echo "Record imported: $ref_extrait $detail
"; - } -} +} //----------------------------------------------------- // Close and summary //----------------------------------------------------- diff --git a/include/dossier.inc.php b/include/dossier.inc.php index b3efacdf7..efa547382 100644 --- a/include/dossier.inc.php +++ b/include/dossier.inc.php @@ -1,4 +1,4 @@ -rollback(); - + } // If the id is not null, name successfully inserted // Database created - + if ( $l_id != 0) { //-- // setting the year @@ -87,7 +87,7 @@ if ( isset ($_POST["DATABASE"]) ) { echo "$year"._(" est une année invalide"); $Res=$cn->exec_sql("delete from ac_dossier where dos_id=$l_id"); } - else + else { $Sql=sprintf("CREATE DATABASE %sDOSSIER%d encoding='UTF8' TEMPLATE %sMOD%d", domaine, @@ -111,7 +111,7 @@ if ( isset ($_POST["DATABASE"]) ) { $cn=new Database($l_id); //--year -- $Res=$cn->exec_sql("delete from parm_periode"); - if ( ($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0 ) + if ( ($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0 ) $fev=29; else $fev=28; @@ -119,7 +119,7 @@ if ( isset ($_POST["DATABASE"]) ) { $Res=$cn->exec_sql("delete from user_local_pref where parameter_type='PERIODE'"); $nb_day=array(31,$fev,31,30,31,30,31,31,30,31,30,30); $m=1; - foreach ($nb_day as $day) + foreach ($nb_day as $day) { $p_start=sprintf("01-%d-%s",$m,$year); $p_end=sprintf("%d-%d-%s",$day,$m,$year); @@ -137,7 +137,7 @@ if ( isset ($_POST["DATABASE"]) ) { "select p_id,jrn_def_id, 'OP'". " from parm_periode cross join jrn_def"; $Res=$cn->exec_sql($sql); - + } } // if $l_id != 0 @@ -145,7 +145,7 @@ if ( isset ($_POST["DATABASE"]) ) { ?>

Dossier Management

-get_value("select count(*) from ac_dossier"); - $size=10; + $size=10; - echo jrn_navigation_bar($offset,$count,$size,$page); + echo jrn_navigation_bar($offset,$count,$size,$page); $repo=new Dossier(0); $Res=$repo->show_dossier('all',$offset,$size); $compteur=1; @@ -169,8 +169,8 @@ if ( $sa == 'list' ) { // show all dossiers if ( $Res != null ) { foreach ( $Res as $Dossier) { - - if ( $compteur%2 == 0 ) + + if ( $compteur%2 == 0 ) $cl='class="odd"'; else $cl='class="even"'; @@ -188,18 +188,18 @@ if ( $sa == 'list' ) { echo ''.HtmlInput::button_anchor(_('Backup'),'backup.php?action=backup&sa=b&t=d&d=' .$Dossier['dos_id']). ''; - + echo ''; - $compteur++; - + $compteur++; + } echo ""; - + } echo ''; - - echo jrn_navigation_bar($offset,$count,$size,$page); + + echo jrn_navigation_bar($offset,$count,$size,$page); } @@ -207,10 +207,10 @@ if ( $sa == 'list' ) { // Add a new folder if ( $sa == 'add' ) { // Load the available Templates - $Res=$cn->exec_sql("select mod_id,mod_name,mod_desc from + $Res=$cn->exec_sql("select mod_id,mod_name,mod_desc from modeledef order by mod_name"); $count=Database::num_row($Res); - + if ( $count == 0 ) { echo _("pas de modèle disponible"); } else { @@ -222,7 +222,7 @@ if ( $sa == 'list' ) { $template.=""; }// if count = 0 $m_date=date('Y'); - + ?> @@ -237,7 +237,7 @@ if ( $sa == 'list' ) { Année > - + @@ -304,7 +304,7 @@ if ( $sa == 'remove' ) { ob_start(); if ( $cn->exec_sql($sql)==false) { ob_end_clean(); - + echo "

"; echo _('Base de donnée ').domaine."dossier".$_REQUEST['d']. _("est accèdée, déconnectez-vous d'abord")."

"; diff --git a/include/eub_be.inc.php b/include/eub_be.inc.php index e8a41b24c..0a9ac7a78 100644 --- a/include/eub_be.inc.php +++ b/include/eub_be.inc.php @@ -35,7 +35,7 @@ while (($data = fgetcsv($handle, 2000,'@')) !== FALSE) { // first line is skipped if ( $row > 1) { $code=""; $date_exec=""; $detail=""; $montant=""; - list($code, $date_exec, $detail, $montant) = split(";", $data[$c]); + list($code, $date_exec, $detail, $montant) = explode(";", $data[$c]); $date_exec = str_replace("\t", "", $date_exec); $date_exec = str_replace(" ", "", $date_exec); diff --git a/include/ext_inc.php b/include/ext_inc.php index 2aa4af7e6..3c6298c9a 100644 --- a/include/ext_inc.php +++ b/include/ext_inc.php @@ -12,7 +12,9 @@ if (isset($_REQUEST['code']) ) { exit(); } /* show name of extension */ - echo "

".$ext->get_parameter('name').'

'; + echo '
'; + echo '

'.$ext->get_parameter('name').'

'; + echo '
'; require_once('ext'.DIRECTORY_SEPARATOR.trim($ext->get_parameter('filepath'))); } else { alert(j(_("Cette extension n'existe pas "))); diff --git a/include/extension.inc.php b/include/extension.inc.php index d7db0d12d..2756fe39a 100644 --- a/include/extension.inc.php +++ b/include/extension.inc.php @@ -38,11 +38,6 @@ require_once('class_extension.php'); require_once('class_html_input.php'); require_once('class_ibutton.php'); require_once('class_ipopup.php'); -echo js_include('scriptaculous.js'); -echo js_include('prototype.js'); -echo js_include('effects.js'); -echo js_include('controls.js'); -echo js_include('dragdrop.js'); echo js_include('extension.js'); $ipopup=new IPopup('dtext'); diff --git a/include/fiche.inc.php b/include/fiche.inc.php index cc45a2878..9a5604336 100644 --- a/include/fiche.inc.php +++ b/include/fiche.inc.php @@ -48,8 +48,6 @@ if ( !isset($sessid)) { $sessid=$_REQUEST["PHPSESSID"]; } -$search='"; - $cn=new Database($gDossier); @@ -304,7 +302,7 @@ if ( isset ( $_GET["action"]) ) { $oFiche_Def=new fiche_def($cn); echo HtmlInput::hidden("p_action","fiche"); echo dossier::hidden().HtmlInput::phpsessid(); - echo $oFiche_Def->input($search); // CreateCategory($cn,$search); + echo $oFiche_Def->input(); // CreateCategory($cn,$search); echo HtmlInput::submit("add_modele" ,"Sauve"); echo '
'; diff --git a/include/fortis_be.inc.php b/include/fortis_be.inc.php index 6506b3c16..494404178 100644 --- a/include/fortis_be.inc.php +++ b/include/fortis_be.inc.php @@ -41,7 +41,7 @@ while (($data = fgetcsv($handle, 2000,'@')) !== FALSE) { - list($code, $date_exec, $date_valeur, $montant, $devise, $compte_ordre, $detail, $num_compte) = split(";", $data[$c]); + list($code, $date_exec, $date_valeur, $montant, $devise, $compte_ordre, $detail, $num_compte) = explode(";", $data[$c]); echo "line : $row > ".$data[$c]."
"; //corrige un bug de date diff --git a/include/impress_inc.php b/include/impress_inc.php index 38afe393d..27019a9c1 100644 --- a/include/impress_inc.php +++ b/include/impress_inc.php @@ -59,7 +59,7 @@ function get_rappel_simple ($p_cn,$p_jrn_id,$p_jrn_type,$p_from,&$arap) // Compute VAT foreach ($a_Tva as $line_tva) { - list ($deb,$cred)=split(',',$line_tva['tva_poste']); + list ($deb,$cred)=explode(',',$line_tva['tva_poste']); if ( $p_jrn_type == 'ACH' ) $ctva=$deb; else diff --git a/include/ing_be.inc.php b/include/ing_be.inc.php index 268f74526..536b0db66 100644 --- a/include/ing_be.inc.php +++ b/include/ing_be.inc.php @@ -36,7 +36,7 @@ while (($data = fgetcsv($handle, 2000,'@')) !== FALSE) { if ( $row > 1 ) { $code=""; $date_exec=""; $date_valeur=""; $montant=""; $devise=""; $compte_ordre=""; $detail=""; $num_compte=""; $iduser=""; - list($num_compte, $code, $date_exec, $date_valeur, $montant, $devise, $montant2, $devise2, $rubriques, $detail, $zzz, $zzz, $date_comptable) = split(";", $data[$c]); + list($num_compte, $code, $date_exec, $date_valeur, $montant, $devise, $montant2, $devise2, $rubriques, $detail, $zzz, $zzz, $date_comptable) = explode(";", $data[$c]); # Bug CSV ING : "424 au lieu de 424 #" diff --git a/include/keytrade_be.inc.php b/include/keytrade_be.inc.php index 9166056b6..303cfed14 100644 --- a/include/keytrade_be.inc.php +++ b/include/keytrade_be.inc.php @@ -39,7 +39,7 @@ while (($data = fgetcsv($handle, 2000,"!")) !== FALSE) { //----------------------------------------------------- // Parsing CSV comes here //----------------------------------------------------- - $row=split(';',$data[$c]); + $row=explode(';',$data[$c]); echo_debug('keytrade',__LINE__,'$row = '.var_export($row,true)); echo_debug('keytrade',__LINE__,'sizeof($row)'.sizeof($row)); if ( sizeof ($row) < 7 ) diff --git a/include/param_jrn_detail.inc.php b/include/param_jrn_detail.inc.php index 0994062eb..4c51cfaf2 100644 --- a/include/param_jrn_detail.inc.php +++ b/include/param_jrn_detail.inc.php @@ -186,8 +186,8 @@ $hidden.=HtmlInput::phpsessid(); /* Load the card */ $card=$Ledger->get_fiche_def(); -$rdeb=split(',',$card['deb']); -$rcred=split(',',$card['cred']); +$rdeb=explode(',',$card['deb']); +$rcred=explode(',',$card['cred']); echo '
'; diff --git a/include/payment_middle.inc.php b/include/payment_middle.inc.php index e61aa849d..90ddd07d7 100644 --- a/include/payment_middle.inc.php +++ b/include/payment_middle.inc.php @@ -44,7 +44,8 @@ if ( $sb=='change') { if ( !isset($_GET['id'])) exit; $row=new Acc_Payment($cn,$_GET['id']); $row->load(); - echo '
'; + $javascript="return confirm('"._('Vous confirmez')."')"; + echo ''; echo dossier::hidden(); echo HtmlInput::hidden('p_jrn',0); echo HtmlInput::hidden('p_action','divers'); @@ -55,6 +56,7 @@ if ( $sb=='change') { echo $row->form(); echo HtmlInput::submit('save',_('Sauve')); + echo HtmlInput::submit('delete',_('Efface')); echo HtmlInput::button_anchor(_('Retour sans sauvez'), '?p_action=divers&sa=mp&'.dossier::get() ); @@ -70,7 +72,40 @@ if ( $sb=='save'){ $row->update(); } +//--------------------------------------------------------------------------- +// Delete a card +//--------------------------------------------------------------------------- +if (isset($_POST['delete'])) { + $row=new Acc_Payment($cn,$_POST['id']); + $row->from_array($_POST); + $row->delete(); +} +//--------------------------------------------------------------------------- +// Show form to enter a new one +//--------------------------------------------------------------------------- +if ($sb=='ins') { + $mp=new Acc_Payment($cn); + $r=$mp->blank(); + echo ''; + echo dossier::hidden().HtmlInput::hidden('sa',$_REQUEST['sa']). + HtmlInput::hidden('p_action',$_REQUEST['p_action']).HtmlInput::hidden('sb','insert'); + echo $r; + echo HtmlInput::submit('insert',_('Enregistre')); + echo '
'; + echo HtmlInput::button_anchor(_('Retour sans sauvez'), + '?p_action=divers&sa=mp&'.dossier::get() + ); + exit(); +} +//--------------------------------------------------------------------------- +// Insert a new mod of payment +//--------------------------------------------------------------------------- +if ( $sb=='insert') { + $row=new Acc_Payment($cn); + $row->from_array($_POST); + $row->insert(); +} //---------------------------------------------------------------------- // LEDGER PURCHASE //---------------------------------------------------------------------- @@ -124,7 +159,9 @@ if ( ! empty ($array)) { } echo ''; } - echo ''; +// Button to insert new one +echo HtmlInput::button_anchor(_('Ajout'),'?p_action=divers&sa=mp&sb=ins&'.dossier::get()); + echo '
'; ?> \ No newline at end of file diff --git a/include/template/extension-detail.php b/include/template/extension-detail.php index 89a9a4f75..a28ea533e 100644 --- a/include/template/extension-detail.php +++ b/include/template/extension-detail.php @@ -36,7 +36,7 @@ - + @@ -44,4 +44,4 @@ -
\ No newline at end of file +
diff --git a/include/template/fiche_def_input.php b/include/template/fiche_def_input.php index f0d894c2d..75426d9bd 100644 --- a/include/template/fiche_def_input.php +++ b/include/template/fiche_def_input.php @@ -5,11 +5,11 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + \ No newline at end of file diff --git a/include/user_common.php b/include/user_common.php index 85e6bd153..e33f4c249 100644 --- a/include/user_common.php +++ b/include/user_common.php @@ -1,4 +1,4 @@ -get_by_qcode($p_good); @@ -69,23 +69,22 @@ function InsertStockGoods($p_cn,$p_j_id,$p_good,$p_quant,$p_type) $Res=$p_cn->exec_sql("insert into stock_goods ( j_id, f_id, - sg_code, + sg_code, sg_quantity, sg_type,sg_exercice ) values ( $p_j_id, $f_id, '$code_marchandise', - $p_quant, '$p_type',$exercice) + $p_quant, '$p_type',$exercice) "); return $Res; } -/*! isValid ($p_cn, $p_grpt_id - ************************************************** +/*! *\brief test if a jrn op is valid - * - * \param $p_cn db + * + * \param $p_cn db * \param $p_grpt_id * \return: * - 1 is valid @@ -106,17 +105,17 @@ function isValid ($p_cn,$p_grpt_id) { } -/*! +/*! ************************************************** - *\brief + *\brief * Create a navigation_bar (pagesize) - * - * \param $p_offset first record number + * + * \param $p_offset first record number * \param $p_line total of returned row * \param $p_size current g_pagesize user's preference - * \param $p_page number of the page where the user is + * \param $p_page number of the page where the user is * \param $p_javascript javascript code to add - * \note example : + * \note example : \verbatim $step=$_SESSION['g_pagesize']; $page=(isset($_GET['offset']))?$_GET['page']:1; @@ -170,8 +169,8 @@ function jrn_navigation_bar($p_offset,$p_line,$p_size=0,$p_page=1,$p_javascript= $r.="  "; } //---------------------------------------------------------------------- - // Create a partial bar - // if current page < 11 show 1 to 20 + // Create a partial bar + // if current page < 11 show 1 to 20 // otherwise show $p_page -10 to $p_page + 10 //---------------------------------------------------------------------- $start_bar=($p_page < 11 )?1:$p_page-10; @@ -193,7 +192,7 @@ function jrn_navigation_bar($p_offset,$p_line,$p_size=0,$p_page=1,$p_javascript= } //else } //for // next - + if ($p_page !=$nb_page) { // If we are not at the last page show the button next $e=$p_page+1; @@ -210,7 +209,7 @@ function jrn_navigation_bar($p_offset,$p_line,$p_size=0,$p_page=1,$p_javascript= return $r; } -/*! +/*! * \brief Clean the url, remove the $_GET offset,step, page and size * \param none * @@ -238,12 +237,12 @@ function redirect($p_string,$p_time=0) { echo ' Connecting... '; } /*!\brief remove the useless space, change comma by period and try to return - * a number + * a number *\param $p_num number to format *\return the formatted number */ -function toNumber($p_num) { - $p_num=trim($p_num); +function toNumber($p_num) { + $p_num=trim($p_num); if ($p_num=='') return 0; $p_num=str_replace(',','.',$p_num); return $p_num; diff --git a/include/user_menu.php b/include/user_menu.php index cb41705e1..64417ca9f 100644 --- a/include/user_menu.php +++ b/include/user_menu.php @@ -32,7 +32,8 @@ require_once("class_ispan.php"); /*! * \brief Show all the available folder for the users - * at the login page + * at the login page. For the special case 'E' + * go directly to extension and bypasse the dashboard * \param $p_user user * \param $p_admin 1 if admin * @@ -45,25 +46,34 @@ function u_ShowDossier($p_user,$p_admin,$p_filtre="") $result=""; if ( $p_array == 0 ) return $result." * Aucun dossier *"; + $cn=new Database(); + $user=new User($cn); + + $result.=""; for ($i=0;$icheck_dossier($id)!='P') { + $target="access.php?gDossier=$id"; + } else { + $target="extension.php?gDossier=$id"; + } $result.=""; $result.=""; $desc=($desc=="")?"Aucune description":h($desc); - $desc="".$desc.""; + $desc="$desc"; $result.=""; $result.=""; diff --git a/sql/upgrade.sql b/sql/upgrade.sql index ef6b85558..8b1378917 100644 --- a/sql/upgrade.sql +++ b/sql/upgrade.sql @@ -1,112 +1 @@ -begin; - insert into parameter(pr_id,pr_value) values ('MY_CHECK_PERIODE','Y'); - alter table jrn add jr_mt text ; - update jrn set jr_mt= extract (microseconds from jr_tech_date); - create index x_mt on jrn(jr_mt); - DROP FUNCTION insert_quant_purchase(text, numeric, character varying, numeric, numeric,numeric, integer, numeric, numeric, numeric, character varying); - DROP FUNCTION insert_quant_sold(text, character varying, numeric, numeric, numeric, integer, character varying); -alter table groupe_analytique add constraint fk_pa_id foreign key(pa_id) references plan_analytique(pa_id) on delete cascade; -alter table stock_goods add constraint fk_stock_good_f_id foreign key(f_id) references fiche(f_id) ; --- for belgium -insert into parm_code values ('SUPPLIER',440,'Poste par défaut pour les fournisseurs'); --- for french --- insert into parm_code values ('SUPPLIER',400,'Poste par défaut pour les fournisseurs'); -drop table invoice; --- Function: account_parent(poste_comptable) - -DROP FUNCTION account_parent(poste_comptable); - -CREATE FUNCTION account_parent(p_account poste_comptable) - RETURNS poste_comptable AS -$BODY$ -declare - nParent tmp_pcmn.pcm_val_parent%type; - sParent varchar; - nCount integer; -begin - sParent:=to_char(p_account,'9999999999999999'); - sParent:=trim(sParent::text); - nParent:=0; - while nParent = 0 loop - select count(*) into nCount - from tmp_pcmn - where - pcm_val = to_number(sParent,'9999999999999999'); - if nCount != 0 then - nParent:=to_number(sParent,'9999999999999999'); - exit; - end if; - sParent:= substr(sParent,1,length(sParent)-1); - if length(sParent) <= 0 then - raise exception 'Impossible de trouver le compte parent pour %',p_account; - end if; - end loop; - raise notice 'account_parent : Parent is %',nParent; - return nParent; -end; -$BODY$ -LANGUAGE 'plpgsql' VOLATILE; - -alter table document drop column d_state; -alter table action_gestion drop column f_id_exp; -alter table action_gestion set ag_title type text; -ALTER TABLE action_gestion ADD COLUMN ag_hour time with time zone; -ALTER TABLE action_gestion ADD COLUMN ag_priority integer; -ALTER TABLE action_gestion ALTER COLUMN ag_priority SET DEFAULT 2; -ALTER TABLE action_gestion ADD COLUMN ag_dest text; -ALTER TABLE action_gestion ADD COLUMN ag_owner text; -ALTER TABLE action_gestion ADD COLUMN ag_contact int8; - - - - -CREATE OR REPLACE FUNCTION action_gestion_ins_upd() - RETURNS trigger AS -$BODY$ -begin -NEW.ag_title := substr(NEW.ag_title,1,70); -NEW.ag_hour := substr(NEW.ag_hour,1,10); -return NEW; -end; -$BODY$ -LANGUAGE 'plpgsql' VOLATILE; - -CREATE TRIGGER action_gestion_t_insert_update - BEFORE INSERT OR UPDATE - ON action_gestion - FOR EACH ROW - EXECUTE PROCEDURE action_gestion_ins_upd(); - -COMMENT ON TRIGGER action_gestion_t_insert_update ON action_gestion IS 'Truncate the column ag_title to 70 char'; - -ALTER TABLE action_gestion ADD COLUMN ag_state integer; -update action_gestion set f_id_dest = f_id_exp where f_id_exp != 0; - -alter table action drop column f_id_dest; -UPDATE document_state SET s_value= 'Clôturé' WHERE s_id=1; -UPDATE document_state SET s_value= 'A suivre' WHERE s_id=2; -UPDATE document_state SET s_value= 'A faire' WHERE s_id=3; -UPDATE document_state SET s_value= 'Abandonné' WHERE s_id=4; - - -CREATE TABLE action_detail -( - ad_id serial, - f_id int8, - ad_text text, - ad_pu numeric(20,4) DEFAULT 0, - ad_quant numeric(20,4) DEFAULT 0, - ad_tva_id integer DEFAULT 0, - ad_tva_amount numeric(20,4) DEFAULT 0, - ad_total_amount numeric(20,4) DEFAULT 0, - ag_id integer NOT NULL DEFAULT 0, - CONSTRAINT action_detail_pkey PRIMARY KEY (ad_id), - CONSTRAINT action_detail_ag_id_fkey FOREIGN KEY (ag_id) - REFERENCES action_gestion (ag_id) MATCH SIMPLE - ON UPDATE CASCADE ON DELETE CASCADE -); - -COMMENT ON TABLE action_detail IS 'Detail of action_gestion, see class Action_Detail'; - -commit;
"; - $result.=""; + $result.=""; $result.=$id." ".h($name).""; $result.=""; $result.="".$desc; $result.="