From 16b459a4814727da1fa75d24d0c840890bef4e5a Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Sun, 29 Sep 2019 21:09:05 +0200 Subject: [PATCH 01/10] esthetic correct position for forgotten password --- html/index.css | 1 + 1 file changed, 1 insertion(+) diff --git a/html/index.css b/html/index.css index c33471356..ecb028694 100644 --- a/html/index.css +++ b/html/index.css @@ -200,6 +200,7 @@ BODY { left:1px; background-color: white; bottom: initial; + width: 20rem; } } @media only screen and (min-width : 1100px) { From ea1cc6b59416887abfbd35cc64a3a577df40fe71 Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Sun, 29 Sep 2019 21:51:52 +0200 Subject: [PATCH 02/10] PHPUNIT : add test folder --- unit-test/create-dossier-test.sh | 6 ++++++ unit-test/db/dossiertest.bin.gz | Bin 0 -> 68624 bytes unit-test/global.example.php | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100755 unit-test/create-dossier-test.sh create mode 100644 unit-test/db/dossiertest.bin.gz diff --git a/unit-test/create-dossier-test.sh b/unit-test/create-dossier-test.sh new file mode 100755 index 000000000..0526bd615 --- /dev/null +++ b/unit-test/create-dossier-test.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +DOSSIER_TEST=dossier48 + +pg_restore -Fc --no-owner --no-privilege --verbose -d $DOSSIER_TEST db/dossiertest.bin + diff --git a/unit-test/db/dossiertest.bin.gz b/unit-test/db/dossiertest.bin.gz new file mode 100644 index 0000000000000000000000000000000000000000..de95570fdca4ecd38d9554eb44d73db3f670bf27 GIT binary patch literal 68624 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 V0a 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 Og#QQXwjPV)DFpy+r&0|7 literal 0 HcmV?d00001 diff --git a/unit-test/global.example.php b/unit-test/global.example.php index 499571755..70f4ab106 100644 --- a/unit-test/global.example.php +++ b/unit-test/global.example.php @@ -24,10 +24,11 @@ * Global variables */ global $g_connection,$g_parameter,$g_user; +define ("DOSSIER",48); $_REQUEST['gDossier'] = DOSSIER; $g_connection=new Database(DOSSIER); $g_parameter = new Noalyss_Parameter_Folder($g_connection); $_SESSION['g_user']='phpcompta'; $_SESSION['g_pass']='dany'; $_SESSION['g_pagesize']='50'; -$g_user=new User($g_connection); \ No newline at end of file +$g_user=new User($g_connection); From da0019e99b32559d63386a2a6fc0a7e26ba0c517 Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Sun, 29 Sep 2019 22:30:29 +0200 Subject: [PATCH 03/10] PHPUNIT : acc_balance --- .../include/class/acc_balanceTest.class.php | 70 ++++++++++++++++--- 1 file changed, 59 insertions(+), 11 deletions(-) diff --git a/unit-test/include/class/acc_balanceTest.class.php b/unit-test/include/class/acc_balanceTest.class.php index 0cb572496..b599945b6 100644 --- a/unit-test/include/class/acc_balanceTest.class.php +++ b/unit-test/include/class/acc_balanceTest.class.php @@ -38,7 +38,6 @@ class Acc_BalanceTest extends TestCase /** * @covers Acc_Balance::get_row - * @todo Implement testGet_row(). */ public function testGet_row() { @@ -47,12 +46,17 @@ class Acc_BalanceTest extends TestCase $max=$g_connection->get_value("select max(p_id) from parm_periode"); $min=$g_connection->get_value("select min(p_id) from parm_periode"); - $this->object->get_row($min,$max); + $this->object->jrn=NULL; + $array=$this->object->get_row($min,$max); + $this->assertEquals(14,count($array)); + $this->object->jrn=[2,4]; + $array=$this->object->get_row($min,$max); + $this->assertEquals(8,count($array)); + } /** * @covers Acc_Balance::filter_cat - * @todo Implement testFilter_cat(). */ public function testFilter_cat() { @@ -62,17 +66,61 @@ class Acc_BalanceTest extends TestCase $this->object->filter_cat(array('FIN')); $this->assertEquals($this->object->jrn[0],2); } - /** - * @covers Acc_Balance::test_me - * @todo Implement testTest_me(). + *@covers Acc_Balance::summary_add + *@depend Acc_Balance::summary_init */ - public function testTest_me() + public function testSummary_add() { - // Remove the following lines when you implement this test. - $this->markTestIncomplete( - 'This test has not been implemented yet.' - ); + $array=$this->object->summary_init(); + $result=$this->object->summary_add($array,'600',100,0); + $this->assertEquals(100,$result['6']['deb']); + + $result=$this->object->summary_add($result,'6500',50,0); + $this->assertEquals(150,$result['6']['deb']); + + $result=$this->object->summary_add($result,'2600',0,100); + $this->assertEquals(100,$result['1_5']['cred']); + $this->assertEquals(0,$result['1_5']['deb']); + + $result=$this->object->summary_add($result,'2400',100,0); + $this->assertEquals(100,$result['1_5']['deb']); + + + } + /** + *@covers Acc_Balance::summary_add + *@depend Acc_Balance::summary_init + */ + public function testSummary_display() + { + $array=$this->object->summary_init(); + + $output='
Class 1-50,00=
Class 60,00=
Class 70,00=
Solde 6/70,00=
'; + $this->expectOutputString($output); + $this->object->summary_display($array); + + + } + /** + *@covers Acc_Balance::summary_add + */ + public function testSummary_display_pdf() + { + // No test since a PDF is modified and cannot be tested + // by PHPUNIT + $this->markTestSkipped("Summary_display_pdf cannot be tested since it modify a PDF"); + } + /** + *@covers Acc_Balance::summary_init + */ + public function testsummary_init() + { + $array=$this->object->summary_init(); + $this->assertTrue(isset($array['1_5'])); + $this->assertTrue(isset($array['6'])); + $this->assertTrue(isset($array['7'])); } + } From c2c6e5d71c7e95e53ea0f7fa456748d09b67e30c Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Tue, 22 Oct 2019 18:51:22 +0200 Subject: [PATCH 04/10] Fix bug in export_poste_csv --- include/class/acc_operation.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/class/acc_operation.class.php b/include/class/acc_operation.class.php index 167325c6b..3a71a3fe2 100644 --- a/include/class/acc_operation.class.php +++ b/include/class/acc_operation.class.php @@ -338,7 +338,7 @@ class Acc_Operation $filter_sql=$g_user->get_ledger_sql('ALL',3); $filter_sql=str_replace('jrn_def_id','jr_def_id',$filter_sql); if ( $this->jr_id==0 ) return; - $sql=" select jr_date,j_qcode,j_poste,j_montant,jr_internal,case when j_debit = 'f' then 'C' else 'D' end as debit,jr_comment as description, + $sql=" select jr_id,j_id,jr_date,j_qcode,j_poste,j_montant,jr_internal,case when j_debit = 'f' then 'C' else 'D' end as debit,jr_comment as description, vw_name,pcm_lib,j_debit,coalesce(comptaproc.get_letter_jnt(j_id),-1) as letter,jr_def_id ". " from jrnx join jrn on (jr_grpt_id=j_grpt) join tmp_pcmn on (j_poste=pcm_val) From 8313d523697fea36f7ea0c95dc529269ac134a5f Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Tue, 22 Oct 2019 18:59:21 +0200 Subject: [PATCH 05/10] Task #0001764 : Amount , sign equals --- include/template/ledger_search.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/template/ledger_search.php b/include/template/ledger_search.php index efb271f26..8d7b827d2 100644 --- a/include/template/ledger_search.php +++ b/include/template/ledger_search.php @@ -54,7 +54,7 @@ id)); echo $f_amount_min->input(); ?> id)); + echo HtmlInput::button_action("=",sprintf("$('%s').value=%s.value",$f_amount_max->id,$f_amount_min->id) ,uniqid(), "smallbutton"); echo $f_amount_max->input(); ; ?> From 51d5dc4ea21440fb0bc65d96fd380887c0bef58f Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Tue, 22 Oct 2019 19:22:24 +0200 Subject: [PATCH 06/10] Protect global --- include/history_operation.inc.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/history_operation.inc.php b/include/history_operation.inc.php index 50f0e1104..6a64386f2 100644 --- a/include/history_operation.inc.php +++ b/include/history_operation.inc.php @@ -108,8 +108,8 @@ list($sql, $where) = $Ledger->build_search_sql($p_array); $max_line = $cn->count_sql($sql); $step = $_SESSION['g_pagesize']; -$page = (isset($_GET['offset'])) ? $_GET['page'] : 1; -$offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0; +$page = (isset($_GET['offset'])) ? $http->get('page') : 1; +$offset = (isset($_GET['offset'])) ? $http->get('offset') : 0; // check if number $page=(isNumber($page)==0)?1:$page; @@ -121,7 +121,7 @@ echo $msg; echo $Ledger->display_search_form(); echo $bar; echo '
'; -echo HtmlInput::hidden("ac", $_REQUEST['ac']); +echo HtmlInput::hidden("ac", $http->request('ac')); echo HtmlInput::hidden('ledger_type',$ledger_type); echo dossier::hidden(); From df00c4f38cedaf812ebdb43b1f986cfb9205889b Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Fri, 25 Oct 2019 23:08:57 +0200 Subject: [PATCH 07/10] Task #1763: PRINTTVA export PDF , achat colonnes manquantes --- include/export/export_printtva_pdf.php | 64 +++++++++++++++----------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/include/export/export_printtva_pdf.php b/include/export/export_printtva_pdf.php index ab337ea0a..1e378f20a 100644 --- a/include/export/export_printtva_pdf.php +++ b/include/export/export_printtva_pdf.php @@ -210,16 +210,20 @@ $array = $tax_summary->get_row_purchase(); $a_colp=['tva_label','tva_rate','amount_wovat','amount_private','amount_vat','amount_sided', 'amount_noded_amount','amount_noded_tax','amount_noded_return']; $a_purchase_header = [_("Code TVA"), _("Taux"), _("Montant HT"), _("Privée"), _("Montant TVA"), - _("Montant Autoliquidation"), _("Montant Non Déd"), _("TVA Non Déd"), _("TVA Non Déd & récup")]; + _("Montant Autoliquidation"), _("Montant Non Déd"), _("TVA ND"), _("TVA ND récup")]; $nb_purchase = count($a_purchase_header); +$a_size=['tva_label'=>40,'tva_rate'=>10,'amount_wovat'=>32,'amount_private'=>32,'amount_vat'=>32,'amount_sided'=>32, + 'amount_noded_amount'=>32,'amount_noded_tax'=>32,'amount_noded_return'=>32]; +$nb_col=count($a_colp); + for ($e=2;$e<$nb_col;$e++){ - $a_tot[$a_col[$e]]=0; + $a_tot[$a_colp[$e]]=0; } for ($i = 0; $i < $nb_array; $i++) { for ($e=2;$e<$nb_col;$e++){ - $colname=$a_col[$e]; + $colname=$a_colp[$e]; $a_tot[$colname]=bcadd($a_tot[$colname],$array[$i][$colname]); } @@ -234,10 +238,12 @@ for ($i = 0; $i < $nb_array; $i++) { // Display Header $pdf->SetFont('DejaVuCond', 'B', 7); for ($e=0;$e<$nb_col;$e++){ + $t_idx=$a_colp[$e]; + if ( $e == 0 ) { - $pdf->write_cell(40, 5,$a_purchase_header[$e], 1, 0, 'L'); + $pdf->write_cell($a_size[$t_idx], 5,$a_purchase_header[$e], 1, 0, 'L'); } else { - $pdf->write_cell(40, 5,$a_purchase_header[$e], 1, 0, 'R'); + $pdf->write_cell($a_size[$t_idx], 5,$a_purchase_header[$e], 1, 0, 'R'); } $a_tot[$colname]=0; } @@ -250,8 +256,9 @@ for ($i = 0; $i < $nb_array; $i++) { $pdf->line_new(); $pdf->write_cell(70, 5, ""); for ($e=2;$e<$nb_col;$e++){ + $t_idx=$a_colp[$e]; $colname=$a_col[$e]; - $pdf->write_cell(40, 5, nbm($a_tot[$colname]), 0, 0, 'R'); + $pdf->write_cell($a_size[$t_idx], 5, nbm($a_tot[$colname]), 0, 0, 'R'); $a_tot[$colname]=0; } $pdf->line_new(); @@ -265,37 +272,38 @@ for ($i = 0; $i < $nb_array; $i++) { // Display Header for ($e=0;$e<$nb_col;$e++){ + $t_idx=$a_colp[$e]; if ( $e == 0 ) { - $pdf->write_cell(40, 5,$a_purchase_header[$e], 1, 0, 'L'); + $pdf->write_cell($a_size[$t_idx], 5,$a_purchase_header[$e], 1, 0, 'L'); } else { - $pdf->write_cell(40, 5,$a_purchase_header[$e], 1, 0, 'R'); + $pdf->write_cell($a_size[$t_idx], 5,$a_purchase_header[$e], 1, 0, 'R'); } $a_tot[$colname]=0; } } for ($e=0;$e<$nb_col;$e++){ - $colname=$a_col[$e]; + $colname=$a_colp[$e]; + if ( $e ==0 ) { - $pdf->write_cell(40, 5, $array[$i][$colname], 1, 0, 'L'); + $pdf->write_cell($a_size[$colname], 5, $array[$i][$colname], 1, 0, 'L'); } elseif ($e == 1 ){ - $pdf->write_cell(40, 5, nbm($array[$i][$colname]*100), 1, 0, 'R'); + $pdf->write_cell($a_size[$colname], 5, nbm($array[$i][$colname]*100), 1, 0, 'R'); }else { - $pdf->write_cell(40, 5, nbm($array[$i][$colname]), 1, 0, 'R'); + $pdf->write_cell($a_size[$colname], 5, nbm($array[$i][$colname]), 1, 0, 'R'); } } $pdf->line_new(); } $pdf->SetFont('DejaVuCond', 'B', 7); -$pdf->write_cell(80, 5, ""); +$pdf->write_cell($a_size['tva_label']+$a_size['tva_rate'], 5, ""); for ($e=2;$e<$nb_col;$e++){ - $colname=$a_col[$e]; - $pdf->write_cell(40, 5, nbm($a_tot[$colname]), 1, 0, 'R'); + $colname=$a_colp[$e]; + $pdf->write_cell($a_size[$colname], 5, nbm($a_tot[$colname]), 1, 0, 'R'); } //------------------------------------------------------------------------- -// Summary sales +// Summary Purchase //------------------------------------------------------------------------- -$a_sum = $tax_summary->get_summary_sale(); $pdf->line_new(); $pdf->SetFont('DejaVuCond', 'B', 10); $pdf->write_cell(50, 8, _("Résumé TVA Achat")); @@ -303,10 +311,12 @@ $pdf->line_new(); $pdf->SetFont('DejaVuCond', 'B', 7); for ($e=0;$e<$nb_col;$e++){ + $t_idx=$a_colp[$e]; + if ( $e == 0 ) { - $pdf->write_cell(40, 5,$a_purchase_header[$e], 1, 0, 'L'); + $pdf->write_cell($a_size[$t_idx], 5,$a_purchase_header[$e], 1, 0, 'L'); } else { - $pdf->write_cell(40, 5,$a_purchase_header[$e], 1, 0, 'R'); + $pdf->write_cell($a_size[$t_idx], 5,$a_purchase_header[$e], 1, 0, 'R'); } $a_tot[$colname]=0; } @@ -315,33 +325,33 @@ $pdf->line_new(); $nb_array = count($array); // initialize totals for ($e=2;$e<$nb_col;$e++){ - $a_tot[$a_col[$e]]=0; + $a_tot[$a_colp[$e]]=0; } $pdf->SetFont('DejaVuCond', '', 7); for ($i = 0; $i < $nb_array; $i++) { // display each row for ($e=0;$e<$nb_col;$e++){ - $colname=$a_col[$e]; + $colname=$a_colp[$e]; if ( $e ==0 ) { // first column TVA_LABEL - $pdf->write_cell(40, 5, $array[$i][$colname], 1, 0, 'L'); + $pdf->write_cell($a_size[$colname], 5, $array[$i][$colname], 1, 0, 'L'); } elseif ($e == 1 ){ // Secund col. tva rate - $pdf->write_cell(40, 5, nbm($array[$i][$colname]*100), 1, 0, 'R'); + $pdf->write_cell($a_size[$colname], 5, nbm($array[$i][$colname]*100), 1, 0, 'R'); }else { // Other cols,display amount and compute total $a_tot[$colname] = bcadd($a_tot[$colname], $array[$i][$colname]); - $pdf->write_cell(40, 5, nbm($array[$i][$colname]), 1, 0, 'R'); + $pdf->write_cell($a_size[$colname], 5, nbm($array[$i][$colname]), 1, 0, 'R'); } } $pdf->line_new(); } $pdf->SetFont('DejaVuCond', 'B', 7); -$pdf->write_cell(80, 5, ""); +$pdf->write_cell($a_size['tva_label']+$a_size['tva_rate'], 5, ""); for ($e=2;$e<$nb_col;$e++){ - $colname=$a_col[$e]; - $pdf->write_cell(40, 5, nbm($a_tot[$colname]), 1, 0, 'R'); + $colname=$a_colp[$e]; + $pdf->write_cell($a_size[$colname], 5, nbm($a_tot[$colname]), 1, 0, 'R'); } $pdf->line_new(); From 6d6b56de78f81e99bdede00c49d6c571b022c3e1 Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Fri, 25 Oct 2019 23:51:35 +0200 Subject: [PATCH 08/10] Tax Summary : test --- .../include/class/tax_summaryTest.class.php | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 unit-test/include/class/tax_summaryTest.class.php diff --git a/unit-test/include/class/tax_summaryTest.class.php b/unit-test/include/class/tax_summaryTest.class.php new file mode 100644 index 000000000..24ead3204 --- /dev/null +++ b/unit-test/include/class/tax_summaryTest.class.php @@ -0,0 +1,164 @@ + + +/** + * @file + * @brief + */ + +class Tax_SummaryTest extends TestCase +{ + /** + * @var Acc_Account + */ + protected $object; + + /** + * Sets up the fixture, for example, opens a network connection. + * This method is called before a test is executed. + */ + protected function setUp() :void + { + global $g_connection; + $this->object=new \Tax_Summary($g_connection, "01.01.2014", "31.12.2019"); + } + function testCheck() + { + // No warning expected + try { + $this->object->check(); + $this->assertTrue(TRUE); + } catch(Exception $e) { + $this->assertSame('OK',$e->getMessage()); + } + // Warning expected + try { + $this->object->set_date_start("01.01.2090"); + $this->object->check(); + $this->assertTrue(FALSE); + } catch(Exception $e) { + $this->assertTrue(TRUE); + } + } + function testDisplay() + { + $this->expectOutputRegex("/.*10\.737,34.*\<\/tr\>\<\/table\>\n/"); + $this->object->display(); + } + function testForm_export_csv() + { + $this->expectOutputRegex("/\object->form_export_csv(); + } + function testForm_export_pdf() + { + $this->expectOutputRegex("/\object->form_export_pdf(); + } + function testGet_row_purchase() + { + $array=$this->object->get_row_purchase(); + $this->assertSame($array, [['jrn_def_name' => 'Achat', + 'tva_label' => '0%', + 'tva_rate' => '0.0000', + 'tva_both_side' => '0', + 'qp_vat_code' => '4', + 'amount_vat' => '0.0000', + 'amount_wovat' => '658.2500', + 'amount_sided' => '0.0000', + 'amount_noded_amount' => '0.0000', + 'amount_noded_tax' => '0.0000', + 'amount_noded_return' => '0.0000', + 'amount_private' => '0.0000' + ],[ + 'jrn_def_name' => 'Achat', + 'tva_label' => '12%', + 'tva_rate' => '0.1200', + 'tva_both_side' => '0', + 'qp_vat_code' => '2', + 'amount_vat' => '84.2200', + 'amount_wovat' => '701.7800', + 'amount_sided' => '0.0000', + 'amount_noded_amount' => '0.0000', + 'amount_noded_tax' => '0.0000', + 'amount_noded_return' => '0.0000', + 'amount_private' => '0.0000']]); + } + function testGet_row_sale() + { + $array=$this->object->get_row_sale(); + $this->assertSame($array, [[ + 'jrn_def_name' => 'Vente', + 'tva_label' => '21%', + 'qs_vat_code' => '1', + 'tva_rate' => '0.2100', + 'tva_both_side' => '0', + 'amount_vat' => '2254.8400', + 'amount_wovat' => '10737.3400', + 'amount_sided' => '0.0000' + ]]); + + } + function testget_summary_purchase() + { + $array=$this->object->get_summary_purchase(); + $this->assertSame($array,[[ + 'tva_label' => '0%' + ,'tva_rate' => '0.0000' + ,'tva_both_side' => '0' + ,'qp_vat_code' => '4' + ,'amount_vat' => '0.0000' + ,'amount_wovat' => '658.2500' + ,'amount_sided' => '0.0000' + ,'amount_noded_amount' => '0.0000' + ,'amount_noded_tax' => '0.0000' + ,'amount_noded_return' => '0.0000' + ,'amount_private' => '0.0000' + ],[ + 'tva_label' => '12%' + ,'tva_rate' => '0.1200' + ,'tva_both_side' => '0' + ,'qp_vat_code' => '2' + ,'amount_vat' => '84.2200' + ,'amount_wovat' => '701.7800' + ,'amount_sided' => '0.0000' + ,'amount_noded_amount' => '0.0000' + ,'amount_noded_tax' => '0.0000' + ,'amount_noded_return' => '0.0000' + ,'amount_private' => '0.0000' + ]]); + + } + function testget_summary_sale() + { + $array=$this->object->get_summary_sale(); + $this->assertSame($array, [[ + 'tva_label' => '21%', + 'qs_vat_code' => '1', + 'tva_rate' => '0.2100', + 'tva_both_side' => '0', + 'amount_vat' => '2254.8400', + 'amount_wovat' => '10737.3400', + 'amount_sided' => '0.0000' + ]]); + } + +} \ No newline at end of file From 77583ef5d7a73062940dc5ddc7730ce006b9c028 Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Sat, 26 Oct 2019 00:10:49 +0200 Subject: [PATCH 09/10] =?UTF-8?q?Task=20#1761:=20Faire=20appara=C3=AEtre?= =?UTF-8?q?=20le=20moyen=20de=20paiement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/class/acc_ledger_history_purchase.class.php | 2 ++ include/class/acc_ledger_history_sale.class.php | 3 ++- include/class/print_ledger_simple.class.php | 2 +- include/export/export_ledger_csv.php | 3 +++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/class/acc_ledger_history_purchase.class.php b/include/class/acc_ledger_history_purchase.class.php index 51f75b866..8782bfbb4 100644 --- a/include/class/acc_ledger_history_purchase.class.php +++ b/include/class/acc_ledger_history_purchase.class.php @@ -275,6 +275,7 @@ class Acc_Ledger_History_Purchase extends Acc_Ledger_History } $title[]=_("TVAC/TTC"); $title[]=_("Date paiement"); + $title[]=_("Code paiement"); $title[]=_("Méthode paiement"); $title[]=_("Montant paiement"); $title[]=_("n° opération"); @@ -330,6 +331,7 @@ class Acc_Ledger_History_Purchase extends Acc_Ledger_History $row=Database::fetch_array($ret_reconcile, $e); $export->add($row['jr_date']); $export->add($row['qcode_bank']); + $export->add($row['qcode_name']); $export->add($row['jr_montant'],"number"); $export->add($row['jr_internal']); } diff --git a/include/class/acc_ledger_history_sale.class.php b/include/class/acc_ledger_history_sale.class.php index fbc6ca729..22a0dc6a1 100644 --- a/include/class/acc_ledger_history_sale.class.php +++ b/include/class/acc_ledger_history_sale.class.php @@ -261,7 +261,7 @@ class Acc_Ledger_History_Sale extends Acc_Ledger_History } $title[]=_("TVAC/TTC"); $title[]=_("Date paiement"); - $title[]=_("Méthode paiement"); + $title[]=_("Code paiement"); $title[]=_("Montant paiement"); $title[]=_("n° opération"); @@ -313,6 +313,7 @@ class Acc_Ledger_History_Sale extends Acc_Ledger_History $row=Database::fetch_array($ret_reconcile, $e); $export->add($row['jr_date']); $export->add($row['qcode_bank']); + $export->add($row['qcode_name']); $export->add($row['jr_montant'],"number"); $export->add($row['jr_internal']); diff --git a/include/class/print_ledger_simple.class.php b/include/class/print_ledger_simple.class.php index 1b94509c2..7e065586b 100644 --- a/include/class/print_ledger_simple.class.php +++ b/include/class/print_ledger_simple.class.php @@ -279,7 +279,7 @@ class Print_Ledger_Simple extends PDF $sep=""; for ($e=0;$e<$max;$e++) { $row=Database::fetch_array($ret_reconcile, $e); - $msg=( $row['qcode_bank'] != "")?"[".$row['qcode_bank']."]":$row['jr_internal']; + $msg=( $row['qcode_bank'] != "")?"[".$row['qcode_bank']."]".$row['qcode_name']:$row['jr_internal']; $str_payment=$row['jr_date'].$msg.$sep; $sep=' , '; } diff --git a/include/export/export_ledger_csv.php b/include/export/export_ledger_csv.php index 82a467ae4..507055a1c 100644 --- a/include/export/export_ledger_csv.php +++ b/include/export/export_ledger_csv.php @@ -141,6 +141,7 @@ if ( $get_option=="E") $a_heading[]=_("Date paiement"); $a_heading[]=_("Montant paiement"); $a_heading[]=_("Methode paiement"); + $a_heading[]=_("Libellé"); $a_heading[]=_("Opération paiement"); // Prepare the query for reconcile date @@ -176,6 +177,7 @@ if ( $get_option=="E") $export->add($row['jr_date']); $export->add($row['jr_montant'],"number"); $export->add($row['qcode_bank']); + $export->add($row['qcode_name']); $export->add($row['jr_internal']); } $export->write(); @@ -264,6 +266,7 @@ if ($get_option=="L" && ($jrn_type=='ODS'||$jrn_type=='FIN'||$jrn_type=='GL') ) { $row=Database::fetch_array($ret_reconcile, $e); $export->add($row['qcode_bank']); + $export->add($row['qcode_name']); $export->add($row['jr_date']); $export->add($row['jr_internal']); $export->add($row['jr_pj_number']); From 0718b009747d0c3fe6cad80435489248ecae55a6 Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Sat, 26 Oct 2019 00:38:25 +0200 Subject: [PATCH 10/10] =?UTF-8?q?New=20=3D=20=20#1765:=20Permettre=20les?= =?UTF-8?q?=20op=C3=A9rations=20math=C3=A9matiques=20dans=20les=20champs?= =?UTF-8?q?=20num=C3=A9riques?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Auteur : Pierre-François Philippe --- html/js/scripts.js | 1150 ++++++++++++++++++++++---------------------- 1 file changed, 582 insertions(+), 568 deletions(-) diff --git a/html/js/scripts.js b/html/js/scripts.js index daa1397d7..e1700a9fd 100644 --- a/html/js/scripts.js +++ b/html/js/scripts.js @@ -25,7 +25,7 @@ */ var ask_reload = 0; var tag_choose = ''; -var aDraggableElement=new Array(); +var aDraggableElement = new Array(); /** * callback function when we just need to update a hidden div with an info @@ -49,18 +49,16 @@ function infodiv(req, json) code_html = unescape_xml(code_html); g(name_ctl + "info").innerHTML = code_html; - } - catch (e) + } catch (e) { alert_box("success_box" + e.message); } try { code_html.evalScripts(); - } - catch (e) + } catch (e) { - alert_box(content[53]+"\n" + e.message); + alert_box(content[53] + "\n" + e.message); } } @@ -70,16 +68,16 @@ function infodiv(req, json) */ function deleteRow(tb, obj) { - smoke.confirm(content[50],function (e) + smoke.confirm(content[50], function (e) { if (e) { var td = obj.parentNode; var tr = td.parentNode; var lidx = tr.rowIndex; g(tb).deleteRow(lidx); - + } else { - return ; + return; } }); } @@ -108,12 +106,10 @@ function g(ID) if (document.getElementById) { return this.document.getElementById(ID); - } - else if (document.all) + } else if (document.all) { return document.all[ID]; - } - else + } else { return undefined; } @@ -130,8 +126,7 @@ function enable_type_periode() $('from_date').disable(); $('to_date').disable(); $('p_step').enable(); - } - else + } else { $('from_periode').disable(); $('to_periode').disable(); @@ -170,8 +165,7 @@ function encodeJSON(obj) if (e !== 0) { str += '&'; - } - else + } else { e = 1; } @@ -179,8 +173,7 @@ function encodeJSON(obj) str += '=' + encodeURI(obj[i]); } return str; - } - catch (e) + } catch (e) { alert_box('encodeParameter ' + e.message); return ""; @@ -253,6 +246,41 @@ function set_value(p_ctl, p_value, p_add) } } } +/** + * @brief compute small math in numeric cells + * @param string value + * @returns float + */ +function compute_number(value) +{ + var retval = 0; + var exp = new RegExp("^[0-9/*+-.]+$", "g"); + /*pour éviter un eval() mal intentionné*/ + var res = exp.test(value); + if (res) + { + /*pour gérer un nombre non valide comme 5..36 ou 5.3.6 + parce qu'il est possible d'entrer plusieurs + points dans le nombre et eval() lève une exception*/ + try + { + retval = eval(value); + } catch (e) + { + return 0; + } + /*pour gérer les divisions par 0*/ + if (retval == Infinity) + { + return 0; + } else + { + return retval; + } + } else { + return 0; + } +} /** *@brief format the number change comma to point *@param HTML obj @@ -268,6 +296,9 @@ function format_number(obj, p_prec) } var value = obj.value; value = value.replace(/,/, '.'); + + value=compute_number(value); + value = parseFloat(value); if (isNaN(value)) { @@ -293,8 +324,7 @@ function toggleHideShow(p_obj, p_button) show(p_obj); str = str.replace(/Afficher/, content[62]); g(p_button).value = str; - } - else + } else { hide(p_obj); str = str.replace(/Cacher/, content[63]); @@ -349,11 +379,11 @@ function getNodeText(xmlNode) function change_month(obj) { var action = new Ajax.Request( - "ajax_misc.php", + "ajax_misc.php", { - method: 'get', - parameters: { gDossier : obj.gDossier , op:'cal' ,"per" : obj.value , t: obj.type_display, notitle:obj.notitle}, - onFailure: ajax_misc_failure, + method: 'get', + parameters: {gDossier: obj.gDossier, op: 'cal', "per": obj.value, t: obj.type_display, notitle: obj.notitle}, + onFailure: ajax_misc_failure, onSuccess: success_misc } ); @@ -383,25 +413,23 @@ function success_misc(req) var code_html = getNodeText(nodeXml); code_html = unescape_xml(code_html); $("user_cal").innerHTML = code_html; - } - catch (e) + } catch (e) { alert_box(e.message); } try { code_html.evalScripts(); - } - catch (e) + } catch (e) { - alert_box(content[53]+"\n" + e.message); + alert_box(content[53] + "\n" + e.message); } } function loading() { - var str = '

'+content[64]+'

'; + var str = '

' + content[64] + '

'; str = str + 'chargement'; return str; } @@ -429,7 +457,7 @@ function cat_doc_remove(p_dt_id, p_dossier) if (html.length === 0) { var rec = req.responseText; - alert_box('erreur
' + rec ); + alert_box('erreur
' + rec); return; } var nodeXML = html[0]; @@ -442,10 +470,9 @@ function cat_doc_remove(p_dt_id, p_dossier) return; } $('row' + row_id).style.textDecoration = "line-through"; - $('X' + row_id).style.display='none'; - $('M' + row_id).style.display='none'; - } - catch (e) + $('X' + row_id).style.display = 'none'; + $('M' + row_id).style.display = 'none'; + } catch (e) { alert_box(e.message); } @@ -530,16 +557,14 @@ function popup_select_tva(obj) var popup = {'id': 'tva_select', 'cssclass': 'inner_box', 'style': str_style, 'html': code_html, 'drag': false}; add_div(popup); $('lk_tva_select_table').focus(); - } - catch (e) + } catch (e) { alert_box("success_popup_select_tva " + e.message); } } } ); - } - catch (e) + } catch (e) { alert_box("popup_select_tva " + e.message); } @@ -573,8 +598,7 @@ function set_tva_label(obj) onSuccess: success_set_tva_label } ); - } - catch (e) + } catch (e) { alert_box("set_tva_label " + e.message); } @@ -600,8 +624,7 @@ function success_set_tva_label(req) var label_code = code[0].firstChild.nodeValue; var label_value = value[0].firstChild.nodeValue; set_value(label_code, label_value); - } - catch (e) + } catch (e) { alert_box("success_set_tva_label " + e.message); } @@ -627,9 +650,8 @@ function create_div(obj) var top = document; var elt = null; if (!$(obj.id)) { - elt = top.createElement('div'); - } - else { + elt = top.createElement('div'); + } else { elt = $(obj.id); } if (obj.id) @@ -641,8 +663,7 @@ function create_div(obj) if (elt.style.setAttribute) { /* IE7 bug */ elt.style.setAttribute('cssText', obj.style); - } - else + } else { /* good Browser */ elt.setAttribute('style', obj.style); } @@ -660,24 +681,23 @@ function create_div(obj) var bottom_div = document.body; elt.hide(); bottom_div.appendChild(elt); - + /* if ( obj.effect && obj.effect != 'none' ) { Effect.Grow(obj.id,{direction:'top-right',duration:0.1}); } else if ( ! obj.effect ){ Effect.Grow(obj.id,{direction:'top-right',duration:0.1}); }*/ if (obj.drag) { - aDraggableElement[obj.id]=new Draggable(obj.id, {starteffect: function () + aDraggableElement[obj.id] = new Draggable(obj.id, {starteffect: function () { new Effect.Highlight(obj.id, {scroll: window, queue: 'end'}); }} ); - - + + } return elt; - } - catch (e) + } catch (e) { - error_message("create_div " + e.message); + error_message("create_div " + e.message); } } /** @@ -693,13 +713,12 @@ function create_div(obj) function add_div(obj) { try { - var elt=create_div(obj); + var elt = create_div(obj); /* elt.setStyle({visibility:'visible'}); */ elt.style.visibility = 'visible'; elt.show(); return elt; - } - catch (e) + } catch (e) { alert_box("add_div " + e.message); } @@ -735,7 +754,7 @@ function waiting_node() function waiting_box() { var obj = { - id: 'wait_box', html: '

'+content[65]+'

' + loading() + id: 'wait_box', html: '

' + content[65] + '

' + loading() }; var y = fixed_position(10, 250) obj.style = y + ";width:20%;margin-left:40%;"; @@ -744,7 +763,7 @@ function waiting_box() } waiting_node(); add_div(obj); - + } /** @@ -766,8 +785,7 @@ function show_box(obj) { g(obj.id).style.top = calcy(40) + "px"; show(obj.id); - } - else + } else { show(obj.id); } @@ -808,18 +826,16 @@ function success_box(req, json) if (name_ctl == 'popup') g(name_ctl).style.width = 'auto'; - } - catch (e) + } catch (e) { alert_box("success_box" + e.message); } try { code_html.evalScripts(); - } - catch (e) + } catch (e) { - alert_box(content[53]+"\n" + e.message); + alert_box(content[53] + "\n" + e.message); } } @@ -842,7 +858,7 @@ function show_ledger_choice(json_obj) for (i = 0; i < $(json_obj.div + 'nb_jrn').value; i++) { query = query + "&r_jrn[]=" + $(json_obj.div + 'r_jrn[' + i + ']').value; } - query=encodeURI(query); + query = encodeURI(query); var action = new Ajax.Request( "ajax_misc.php", {method: 'get', @@ -858,7 +874,7 @@ function show_ledger_choice(json_obj) }; //var y=calcy(posY); var y = posY; - + obj.style = "top:" + y + 'px;' + obj.style; /* if ( json_obj.class ) { @@ -881,15 +897,13 @@ function show_ledger_choice(json_obj) remove_waiting_box(); g(obj.id).innerHTML = code_html; - } - catch (e) { + } catch (e) { alert_box("show_ledger_callback" + e.message); } try { code_html.evalScripts(); - } - catch (e) { - alert_box(content[53]+"\n" + e.message); + } catch (e) { + alert_box(content[53] + "\n" + e.message); } } @@ -909,7 +923,7 @@ function hide_ledger_choice(p_frm_search) { var nb = $(p_frm_search).nb_jrn.value; var div = ""; - if ( $(p_frm_search).div ) { + if ($(p_frm_search).div) { div = $(p_frm_search).div.value; } var i = 0; @@ -920,7 +934,7 @@ function hide_ledger_choice(p_frm_search) for (i = 0; i < nb; i++) { n_name = div + "r_jrn[" + sel + "]"; name = div + "r_jrn" + i; - if ( $(name).checked) { + if ($(name).checked) { str += ''; sel++; } @@ -997,8 +1011,7 @@ function toggle_checkbox(form_id) if (e.checked === true) { e.checked = false; - } - else + } else { e.checked = true; } @@ -1028,13 +1041,13 @@ function select_checkbox(form_id) * @param attribute name * @param attribute value */ -function select_checkbox_attribute(form_id,p_attribute_name,p_attribute_value) +function select_checkbox_attribute(form_id, p_attribute_name, p_attribute_value) { var form = $(form_id); for (var i = 0; i < form.length; i++) { var e = form.elements[i]; - if (e.type === 'checkbox' && e.getAttribute(p_attribute_name)==p_attribute_value) + if (e.type === 'checkbox' && e.getAttribute(p_attribute_name) == p_attribute_value) { e.checked = true; } @@ -1069,12 +1082,12 @@ function show_calc() } var sid = 'calc1'; var shtml = ''; - shtml +="
"; + shtml += "
"; shtml += ' '; - shtml +="
"; - shtml += '

'+content[66]+'

'; - shtml += ''+content[68]+' '; - shtml += ' '+ content[67]+' '; + shtml += "
"; + shtml += '

' + content[66] + '

'; + shtml += '
' + content[68] + ' '; + shtml += '
' + content[67] + ' '; var obj = {id: sid, html: shtml, drag: false, style: 'z-index:98' @@ -1102,8 +1115,7 @@ function display_periode(p_dossier, p_id) ); $('mod_periode').style.top = (posY - 70) + "px"; $('mod_periode').style.left = (posX - 70) + "px"; - } - catch (e) + } catch (e) { alert_box("display_periode " + e.message); } @@ -1127,18 +1139,16 @@ function success_display_periode(req) code_html = unescape_xml(code_html); $('mod_periode').innerHTML = code_html; - } - catch (e) + } catch (e) { alert_box("success_display_periode".e.message); } try { code_html.evalScripts(); - } - catch (e) + } catch (e) { - alert_box(content[53]+"\n" + e.message); + alert_box(content[53] + "\n" + e.message); } } @@ -1157,8 +1167,7 @@ function save_periode(obj) } ); - } - catch (e) + } catch (e) { alert_box("display_periode " + e.message); } @@ -1190,23 +1199,21 @@ function fill_box(req) var code_html = getNodeText(html[0]); // Firefox ne prend que les 4096 car. code_html = unescape_xml(code_html); $(name_ctl).innerHTML = code_html; - } - catch (e) { + } catch (e) { alert_box(e.message); - if (console) { + if (console) { console.error(e); - console.error("log answer = "+req.responseText); + console.error("log answer = " + req.responseText); } } try { code_html.evalScripts(); - } - catch (e) { + } catch (e) { if (console) { console.error(e); - console.error("log answer = "+req.responseText); + console.error("log answer = " + req.responseText); } - alert_box(content[53]+"\n" + e.message); + alert_box(content[53] + "\n" + e.message); } @@ -1269,36 +1276,35 @@ function save_predf_op(obj) * @param p_tiers id of the Tiers * @returns {undefined} */ -function search_reconcile(dossier, ctl_concern, amount_id, ledger, p_id_target,p_tiers) +function search_reconcile(dossier, ctl_concern, amount_id, ledger, p_id_target, p_tiers) { if (amount_id === undefined) { amount_id = 0; - } - else if ($(amount_id)) + } else if ($(amount_id)) { if ($(amount_id).value) { amount_id = $(amount_id).value; - } - else if + } else if ($(amount_id).innerHTML) { amount_id = $(amount_id).innerHTML; } } - var tiers=""; - if ( p_tiers ) tiers=p_tiers; + var tiers = ""; + if (p_tiers) + tiers = p_tiers; var target = ""; - if ( p_id_target !="") { - target=p_id_target; - }else { - target = "search"+layer; + if (p_id_target != "") { + target = p_id_target; + } else { + target = "search" + layer; removeDiv(target); } var str_style = fixed_position(77, 99); str_style += ";width:92%;overflow:auto;"; waiting_box(); - var hide_operation=$(ctl_concern).getAttribute("hide_operation"); + var hide_operation = $(ctl_concern).getAttribute("hide_operation"); var param_send = {gDossier: dossier, ctlc: ctl_concern, @@ -1307,8 +1313,8 @@ function search_reconcile(dossier, ctl_concern, amount_id, ledger, p_id_target,p amount_id: amount_id, ledger: ledger, target: target, - tiers:tiers, - hide_operation:hide_operation + tiers: tiers, + hide_operation: hide_operation }; var qs = encodeJSON(param_send); @@ -1336,9 +1342,9 @@ function search_operation(obj) try { var dossier = g('gDossier').value; waiting_box(); - var target = "search"+layer; - if ( $(obj)["target"] ) { - target=$(obj)["target"].value; + var target = "search" + layer; + if ($(obj)["target"]) { + target = $(obj)["target"].value; } var qs = Form.serialize('search_form_ajx') + "&op=search_op"; var action = new Ajax.Request('ajax_misc.php', @@ -1372,12 +1378,13 @@ function set_reconcile(obj) try { var ctlc = obj.elements['ctlc']; - var tiers=obj.elements['tiers']; - if ( ! obj.elements['target']) return; + var tiers = obj.elements['tiers']; + if (!obj.elements['target']) + return; var target = obj.elements['target'].value; for (var e = 0; e < obj.elements.length; e++) { - + var elmt = obj.elements[e]; if (elmt.type === "checkbox") { @@ -1389,8 +1396,8 @@ function set_reconcile(obj) $(ctlc.value).value += ','; } else { - - if (tiers && tiers.value != "") { + + if (tiers && tiers.value != "") { $(tiers.value).value = elmt.value; } } @@ -1399,8 +1406,7 @@ function set_reconcile(obj) } } removeDiv(obj.elements['target'].value); - } - catch (e) + } catch (e) { alert_box(e.message) } @@ -1409,12 +1415,14 @@ function remove_waiting_node() { $('info_div').innerHTML = ""; $('info_div').style.display = "none"; - + } function remove_waiting_box() { - if ( $('wait_box') ) { Effect.Fade('wait_box', { duration: 0.6 }); } - + if ($('wait_box')) { + Effect.Fade('wait_box', {duration: 0.6}); + } + remove_waiting_node(); } /** @@ -1473,13 +1481,12 @@ function calcy(p_sy) if (window.pageYOffset) { sy = window.pageYOffset + p_sy; - } - else + } else { sy = document.documentElement.scrollTop + p_sy; } - if ( document.viewport.getDimensions().width < 801 ) { - sy=sy/2; + if (document.viewport.getDimensions().width < 801) { + sy = sy / 2; } return sy; @@ -1521,33 +1528,33 @@ function mod_menu(gdossier, pm_id) * @param {type} p_dep * @returns {undefined} */ -function display_sub_menu(p_dossier,p_profile,p_dep,p_level) +function display_sub_menu(p_dossier, p_profile, p_dep, p_level) { waiting_box(); new Ajax.Request('ajax_misc.php', - { - method:'get', - parameters : { op:'display_submenu', - gDossier:p_dossier, - dep:p_dep, - p_profile:p_profile , - p_level : p_level - }, - onSuccess : function (req) { - try { - remove_waiting_box(); - if ( $('menu_table').rows.length > p_level ) { - $('menu_table').rows[1].remove(); + { + method: 'get', + parameters: {op: 'display_submenu', + gDossier: p_dossier, + dep: p_dep, + p_profile: p_profile, + p_level: p_level + }, + onSuccess: function (req) { + try { + remove_waiting_box(); + if ($('menu_table').rows.length > p_level) { + $('menu_table').rows[1].remove(); + } + $('sub' + p_dep).addClassName("selectedmenu"); + var new_row = document.createElement('TR'); + new_row.innerHTML = req.responseText; + $('menu_table').appendChild(new_row); + } catch (e) { + alert_box(e.message); + } } - $('sub'+p_dep).addClassName("selectedmenu"); - var new_row = document.createElement('TR'); - new_row.innerHTML = req.responseText; - $('menu_table').appendChild(new_row); - } catch (e) { - alert_box(e.message); - } - } - }) + }) } /** * in CFGPRO, ask to confirm before removing a submenu and its children @@ -1555,33 +1562,33 @@ function display_sub_menu(p_dossier,p_profile,p_dep,p_level) * @param {type} profile_menu_id * @returns {undefined} */ -function remove_sub_menu(p_dossier,profile_menu_id) +function remove_sub_menu(p_dossier, profile_menu_id) { - confirm_box(null,content[47], - function () { - waiting_box(); - new Ajax.Request('ajax_misc.php', - { - method:'get', - parameters: { op:'remove_submenu',gDossier:p_dossier, - p_profile_menu_id:profile_menu_id}, - onSuccess:function (req) { - try { - remove_waiting_box(); - $('sub'+profile_menu_id).remove(); - if ( $('menu_table').rows.length > 1 ) { - $('menu_table').rows[1].remove(); - } - - } catch(e) - { - alert_box(e.message); - } - } - } - ) - }); - + confirm_box(null, content[47], + function () { + waiting_box(); + new Ajax.Request('ajax_misc.php', + { + method: 'get', + parameters: {op: 'remove_submenu', gDossier: p_dossier, + p_profile_menu_id: profile_menu_id}, + onSuccess: function (req) { + try { + remove_waiting_box(); + $('sub' + profile_menu_id).remove(); + if ($('menu_table').rows.length > 1) { + $('menu_table').rows[1].remove(); + } + + } catch (e) + { + alert_box(e.message); + } + } + } + ) + }); + } /** * @brief add a menu to a profile, propose only the available menu @@ -1598,20 +1605,20 @@ function add_menu(obj) var pdossier = obj.dossier; var p_id = obj.p_id; var p_type = obj.type; - + waiting_box(); removeDiv('divdm' + p_id); - var pos = fixed_position(250, 150)+";width:50%;"; + var pos = fixed_position(250, 150) + ";width:50%;"; var action = new Ajax.Request('ajax_misc.php', { method: 'get', - parameters: { op:'add_menu', - 'gDossier':pdossier , - 'p_id' :p_id , - 'ctl' : 'divdm' + p_id , - 'type' : p_type, - 'dep':obj.dep, - 'p_level':obj.p_level}, + parameters: {op: 'add_menu', + 'gDossier': pdossier, + 'p_id': p_id, + 'ctl': 'divdm' + p_id, + 'type': p_type, + 'dep': obj.dep, + 'p_level': obj.p_level}, onFailure: null, onSuccess: function (req) { try { @@ -1799,7 +1806,7 @@ function search_action(dossier, ctl_concern) var div = {id: target, cssclass: 'inner_box', style: str_style, html: loading(), drag: 1}; - + var target = {gDossier: dossier, ctlc: ctl_concern, op: 'search_action', @@ -1816,7 +1823,7 @@ function search_action(dossier, ctl_concern) onSuccess: function (req) { try { remove_waiting_box(); - add_div(div); + add_div(div); $('search_action_div').innerHTML = req.responseText; req.responseText.evalScripts(); } catch (e) { @@ -1852,8 +1859,7 @@ function result_search_action(obj) } ) - } - catch (e) + } catch (e) { alert_box("display_periode " + e.message); } @@ -1888,8 +1894,7 @@ function set_action_related(p_obj) } removeDiv('search_action_div'); return false; - } - catch (e) + } catch (e) { alert_box(e.message); return false; @@ -2022,15 +2027,13 @@ function check_date(p_str_date) var format = /^\d{2}\.\d{2}\.\d{4}$/; if (!format.test(p_str_date)) { return false; - } - else { + } else { var date_temp = p_str_date.split('.'); var nMonth = parseFloat(date_temp[1]) - 1; var ma_date = new Date(date_temp[2], nMonth, date_temp[0]); if (ma_date.getFullYear() == date_temp[2] && ma_date.getMonth() == nMonth && ma_date.getDate() == date_temp[0]) { return true; - } - else { + } else { return false; } } @@ -2071,10 +2074,10 @@ function view_action(ag_id, dossier, modify) remove_waiting_box(); var answer = req.responseXML; var ctl = answer.getElementsByTagName('ctl'); - if ( ctl.length == 0) { + if (ctl.length == 0) { throw 'ajax failed ctl view_action'; } - var ctl_txt=getNodeText(ctl[0]); + var ctl_txt = getNodeText(ctl[0]); var html = answer.getElementsByTagName('code'); if (html.length === 0) { @@ -2090,7 +2093,9 @@ function view_action(ag_id, dossier, modify) style: pos }); $(id).innerHTML = code_html; - if ( ctl_txt == 'ok') { compute_all_ledger();} + if (ctl_txt == 'ok') { + compute_all_ledger(); + } code_html.evalScripts(); } catch (e) { alert_box('view_action' + e.message); @@ -2176,17 +2181,17 @@ function filter_list(phrase, _id) { for (var r = 0; r < l_list.childNodes.length; r++) { var found = 0; - if ( l_list.childNodes[r].childElementCount == 0 ) + if (l_list.childNodes[r].childElementCount == 0) { ele = l_list.childNodes[r].innerHTML; } else { - ele = l_list.childNodes[r].childNodes[0].innerHTML; + ele = l_list.childNodes[r].childNodes[0].innerHTML; } - if ( ele.toLowerCase().indexOf(words) >= 0) { + if (ele.toLowerCase().indexOf(words) >= 0) { tot_found++; - l_list.childNodes[r].style.display='block'; + l_list.childNodes[r].style.display = 'block'; } else { - l_list.childNodes[r].style.display='none'; + l_list.childNodes[r].style.display = 'none'; } $('info_div').style.display = "none"; $('info_div').innerHTML = ""; @@ -2252,8 +2257,7 @@ function ask_navigator(p_dossier) { { req.responseText.evalScripts(); sorttable.makeSortable($("navi_tb")); - } - catch (e) + } catch (e) { alert_box("answer_box Impossible executer script de la reponse\n" + e.message); } @@ -2287,8 +2291,7 @@ function set_preference(p_dossier) { try { req.responseText.evalScripts(); - } - catch (e) + } catch (e) { alert_box("answer_box Impossible executer script de la reponse\n" + e.message); } @@ -2324,10 +2327,9 @@ function show_bookmark(p_dossier) { try { req.responseText.evalScripts(); - } - catch (e) + } catch (e) { - alert_box(content[53]+"\n" + e.message); + alert_box(content[53] + "\n" + e.message); } } @@ -2358,10 +2360,9 @@ function save_bookmark() { try { req.responseText.evalScripts(); - } - catch (e) + } catch (e) { - alert_box(content[53]+"\n" + e.message); + alert_box(content[53] + "\n" + e.message); } } @@ -2390,10 +2391,9 @@ function remove_bookmark() { try { req.responseText.evalScripts(); - } - catch (e) + } catch (e) { - alert_box(content[53]+"\n" + e.message); + alert_box(content[53] + "\n" + e.message); } } @@ -2438,16 +2438,15 @@ function show_tag(p_dossier, p_ac, p_tag_id, p_post) var code_html = getNodeText(html[0]); code_html = unescape_xml(code_html); remove_waiting_box(); - var posy=calcy(250); - add_div({id: 'tag_div', cssclass: 'inner_box', drag: 0,style:"position:fixed;top:"+posy+"px"}); + var posy = calcy(250); + add_div({id: 'tag_div', cssclass: 'inner_box', drag: 0, style: "position:fixed;top:" + posy + "px"}); $('tag_div').innerHTML = code_html; try { code_html.evalScripts(); - } - catch (e) + } catch (e) { - alert_box(content[53]+"\n" + e.message); + alert_box(content[53] + "\n" + e.message); } } @@ -2567,7 +2566,7 @@ function action_tag_add(p_dossier, ag_id, t_id) */ function action_tag_remove(p_dossier, ag_id, t_id) { - confirm_box(null,content[50],function () { + confirm_box(null, content[50], function () { try { waiting_box(); var queryString = "t_id=" + t_id + "&ag_id=" + ag_id + "&op=tag_remove&gDossier=" + p_dossier; @@ -2591,7 +2590,7 @@ function action_tag_remove(p_dossier, ag_id, t_id) } } - ); + ); } catch (e) { error_message(e.message); } @@ -2606,18 +2605,18 @@ function action_tag_remove(p_dossier, ag_id, t_id) function activate_tag(p_dossier, p_tag_id) { waiting_box(); new Ajax.Request("ajax_misc.php", - { - method:"get", - parameters:{gDossier:p_dossier,op:'tag_activate',t_id:p_tag_id}, - onSuccess:function(req) { - remove_waiting_box(); - var answer=req.responseText.evalJSON(); - var tagId="tag_onoff"+p_tag_id; - $(tagId).update(answer.code); - $(tagId).setStyle(answer.style); - remove_waiting_box(); - } - }) + { + method: "get", + parameters: {gDossier: p_dossier, op: 'tag_activate', t_id: p_tag_id}, + onSuccess: function (req) { + remove_waiting_box(); + var answer = req.responseText.evalJSON(); + var tagId = "tag_onoff" + p_tag_id; + $(tagId).update(answer.code); + $(tagId).setStyle(answer.style); + remove_waiting_box(); + } + }) } /** * Display a div with available tags, this div can update the cell @@ -2763,16 +2762,20 @@ function calendar_zoom(obj) { try { waiting_box(); - var per_periode=null; - var notitle=0; - var from=0; - if ( $(obj.invalue) ) { per_periode=$(obj.invalue).value;} - if ( obj.notitle && obj.notitle==1 ) { notitle=1;} + var per_periode = null; + var notitle = 0; + var from = 0; + if ($(obj.invalue)) { + per_periode = $(obj.invalue).value; + } + if (obj.notitle && obj.notitle == 1) { + notitle = 1; + } var action = new Ajax.Request( "ajax_misc.php", { - method: 'get', - parameters: { "notitle":notitle,"op":'calendar_zoom','from':from,'gDossier':obj.gDossier,'in':per_periode ,'out' : obj.outdiv,'distype':obj.distype}, + method: 'get', + parameters: {"notitle": notitle, "op": 'calendar_zoom', 'from': from, 'gDossier': obj.gDossier, 'in': per_periode, 'out': obj.outdiv, 'distype': obj.distype}, onFailure: ajax_misc_failure, onSuccess: function (req, j) { var answer = req.responseXML; @@ -2858,10 +2861,10 @@ function show_description(p_id) * Display an empty card to fill , with the right card category * @param pn_fiche_card_id : fiche_def.fd_id * @param pn_dossier_id - */ -function select_cat(pn_fiche_card_id,pn_dossier_id,ps_element_id) + */ +function select_cat(pn_fiche_card_id, pn_dossier_id, ps_element_id) { - dis_blank_card({"ctl":"div_new_card","fd_id":pn_fiche_card_id,"op2":"bc","op":"card",gDossier:pn_dossier_id,"elementId":ps_element_id}); + dis_blank_card({"ctl": "div_new_card", "fd_id": pn_fiche_card_id, "op2": "bc", "op": "card", gDossier: pn_dossier_id, "elementId": ps_element_id}); removeDiv('select_card_div'); } /** @@ -2903,7 +2906,7 @@ function unselect_other_tab(p_tab) } catch (e) { if (console) console.log(e.message); - alert_box('unselect_other_tab '+e.message); + alert_box('unselect_other_tab ' + e.message); } } /** @@ -2925,15 +2928,16 @@ function logout() */ function create_anchor_up() { - if ( document.getElementById('up_top')) return; - + if (document.getElementById('up_top')) + return; + var newElt = document.createElement('div'); newElt.setAttribute('id', 'up_top'); - newElt.innerHTML=''; - + newElt.innerHTML = ''; + var parent = $('info_div').parentNode; parent.insertBefore(newElt, $('info_div')); - + } /** * Initialize the window to show the button "UP" if the window is scrolled @@ -2942,62 +2946,64 @@ function create_anchor_up() */ function init_scroll() { - var up=new Element('div',{"class":"inner_box", - "style":"padding:5px;left:auto;width:auto;height: auto;display:none;position:fixed;bottom:30%;right:50px;text-align:center;font-size:20px", - id:"go_up" - }); - up.innerHTML=' '; - document.body.appendChild(up); - window.onscroll=function () { - if ( document.viewport.getScrollOffsets().top> 0) { - if ($('go_up').visible() == false) { - $('go_up').setOpacity(0.65); + var up = new Element('div', {"class": "inner_box", + "style": "padding:5px;left:auto;width:auto;height: auto;display:none;position:fixed;bottom:30%;right:50px;text-align:center;font-size:20px", + id: "go_up" + }); + up.innerHTML = ' '; + document.body.appendChild(up); + window.onscroll = function () { + if (document.viewport.getScrollOffsets().top > 0) { + if ($('go_up').visible() == false) { + $('go_up').setOpacity(0.65); $('go_up').show(); - $('go_up').style.zIndex=99; + $('go_up').style.zIndex = 99; } } else { $('go_up').hide(); } - } + } } /** * Confirm a form thanks a modal dialog Box, it returns true if we agree otherwise * false * @code -
-
+
+
* @endcode * @param p_obj form element (object) or element id (string) * @param p_message message to display * @returns true or false */ -function confirm_box(p_obj, p_message,p_callback_true) +function confirm_box(p_obj, p_message, p_callback_true) { waiting_box(); try { // Find id of the end - var name=""; - if ( p_obj != null ) + var name = ""; + if (p_obj != null) { - if ( typeof (p_obj) === "object") { - name=p_obj.id; + if (typeof (p_obj) === "object") { + name = p_obj.id; } else { - name=p_obj; + name = p_obj; } } - - // execute the callback function or submit the form - if ( p_callback_true == undefined || p_callback_true==null) + + // execute the callback function or submit the form + if (p_callback_true == undefined || p_callback_true == null) { - smoke.confirm(p_message,function (e) { - if ( e ) { + smoke.confirm(p_message, function (e) { + if (e) { $(name).submit(); } }); } else { - smoke.confirm(p_message,function (e) + smoke.confirm(p_message, function (e) { - if ( e ) { p_callback_true.apply();} + if (e) { + p_callback_true.apply(); + } }); } } catch (e) { @@ -3013,7 +3019,7 @@ function confirm_box(p_obj, p_message,p_callback_true) */ function alert_box(p_message) { - smoke.alert(p_message, undefined,{ok:'ok',classname:"inner_box"}); + smoke.alert(p_message, undefined, {ok: 'ok', classname: "inner_box"}); } @@ -3028,7 +3034,7 @@ function alternate_row_color(p_table) var localClass = ""; for (i = 1; i < len; i++) { localClass = (i % 2 == 0) ? "even" : "odd"; - if (localClass == "even" && $(p_table).tBodies[0].rows[i].hasClassName("odd")) + if (localClass == "even" && $(p_table).tBodies[0].rows[i].hasClassName("odd")) { $(p_table).tBodies[0].rows[i].removeClassName("odd"); } @@ -3037,7 +3043,7 @@ function alternate_row_color(p_table) $(p_table).tBodies[0].rows[i].addClassName("even"); } - if (localClass == "odd" && $(p_table).tBodies[0].rows[i].hasClassName("even")) + if (localClass == "odd" && $(p_table).tBodies[0].rows[i].hasClassName("even")) { $(p_table).tBodies[0].rows[i].removeClassName("even"); } @@ -3052,18 +3058,18 @@ function alternate_row_color(p_table) * Make an DOM element draggable or not * @param object_id DOM id */ -function pin (object_id) { - if ( aDraggableElement[object_id]) { +function pin(object_id) { + if (aDraggableElement[object_id]) { aDraggableElement[object_id].destroy(); - aDraggableElement[object_id]=undefined; - $('pin_'+object_id).innerHTML=""; + aDraggableElement[object_id] = undefined; + $('pin_' + object_id).innerHTML = ""; } else { - aDraggableElement[object_id]=new Draggable(object_id, {starteffect: function () - { - new Effect.Highlight(object_id, {scroll: window, queue: 'end'}); - }} - ); - $('pin_'+object_id).innerHTML=""; + aDraggableElement[object_id] = new Draggable(object_id, {starteffect: function () + { + new Effect.Highlight(object_id, {scroll: window, queue: 'end'}); + }} + ); + $('pin_' + object_id).innerHTML = ""; } } /** @@ -3073,20 +3079,20 @@ function pin (object_id) { * @param p_attribute_name the name of the attribute * @param p_attribute_value the value of the attribute we want to show */ -function show_only_row(p_table_id,p_attribute_name,p_attribute_value) +function show_only_row(p_table_id, p_attribute_name, p_attribute_value) { - if ( ! $(p_table_id)) { + if (!$(p_table_id)) { throw "Invalide table id" } - var mTable=$(p_table_id) ; - var ncount=mTable.rows.length - for (var i = 0;i < ncount;i++) { - var mRow=mTable.rows[i]; - if (mRow.getAttribute(p_attribute_name) != undefined && mRow.getAttribute(p_attribute_name)!=p_attribute_value){ + var mTable = $(p_table_id); + var ncount = mTable.rows.length + for (var i = 0; i < ncount; i++) { + var mRow = mTable.rows[i]; + if (mRow.getAttribute(p_attribute_name) != undefined && mRow.getAttribute(p_attribute_name) != p_attribute_value) { mRow.hide(); - } else { + } else { mRow.show(); - } + } } } /** @@ -3095,16 +3101,16 @@ function show_only_row(p_table_id,p_attribute_name,p_attribute_value) */ function show_all_row(p_table_id) { - if ( ! $(p_table_id)) { + if (!$(p_table_id)) { throw "Invalide table id" } - var mTable=$(p_table_id) ; - var ncount=mTable.rows.length - for (var i = 0;i < ncount;i++) { - var mRow=mTable.rows[i]; - mRow.show(); + var mTable = $(p_table_id); + var ncount = mTable.rows.length + for (var i = 0; i < ncount; i++) { + var mRow = mTable.rows[i]; + mRow.show(); } - + } /** * @class @@ -3124,64 +3130,70 @@ function show_all_row(p_table_id) * - dialog : id of the dialog box (update / add ) periode_box * */ -var Periode=function (p_ledger) { - this.periode_id=0; - this.p_ledger=p_ledger; - this.dialog='periode_box'; - this.pcallback='ajax_misc.php'; - this.dossier=0; - this.js_obj_name=""; - this.ajax_test=""; - this.set_callback=function (p_phpfile) { this.pcallback=p_phpfile;}; - this.set_dossier=function (p_dosid) { this.dossier=p_dosid;}; +var Periode = function (p_ledger) { + this.periode_id = 0; + this.p_ledger = p_ledger; + this.dialog = 'periode_box'; + this.pcallback = 'ajax_misc.php'; + this.dossier = 0; + this.js_obj_name = ""; + this.ajax_test = ""; + this.set_callback = function (p_phpfile) { + this.pcallback = p_phpfile; + }; + this.set_dossier = function (p_dosid) { + this.dossier = p_dosid; + }; /** * set_js_obj_name (p_js_obj_name) * We need to know the javascript variable name , to pass it to ajax and * create a HTML containing the right variable * @param p_js_obj_name name of the variable js we use on caller side */ - this.set_js_obj_name=function (p_js_obj_name) { this.js_obj_name=p_js_obj_name;}; - + this.set_js_obj_name = function (p_js_obj_name) { + this.js_obj_name = p_js_obj_name; + }; + /** * Remove the periode , so call new Ajax and hide the row if successful * otherwise show dialog box. * @parameter p_periode_id is the id of periode */ - this.remove=function(p_periode_id) { - - var js_param={"gDossier":this.dossier, - "op":"periode", - "act":"remove", - "p_id":p_periode_id, - "ledger_id":0, - "js_var":this.js_obj_name}; - if ( this.ajax_test !="") { - js_param["TestAjaxFile"]=this.ajax_test; + this.remove = function (p_periode_id) { + + var js_param = {"gDossier": this.dossier, + "op": "periode", + "act": "remove", + "p_id": p_periode_id, + "ledger_id": 0, + "js_var": this.js_obj_name}; + if (this.ajax_test != "") { + js_param["TestAjaxFile"] = this.ajax_test; } - here=this; - smoke.confirm("Confirmer ?",function(e) { - if (e ) { - waiting_box(); - new Ajax.Request(here.pcallback, + here = this; + smoke.confirm("Confirmer ?", function (e) { + if (e) { + waiting_box(); + new Ajax.Request(here.pcallback, { - method:"POST", - parameters:js_param, - onSuccess:function(req) { - var answer=req.responseText.evalJSON(); + method: "POST", + parameters: js_param, + onSuccess: function (req) { + var answer = req.responseText.evalJSON(); remove_waiting_box(); - if ( answer.status=="OK" ) - { - $("row_per_"+p_periode_id).remove(); + if (answer.status == "OK") + { + $("row_per_" + p_periode_id).remove(); alternate_row_color("periode_tbl"); } else { smoke.alert(answer.content); } - } - }); - } - }); + } + }); + } + }); }; - + /** * display a dialog box to update a periode, call save either display * an error box or update the row. @@ -3189,161 +3201,161 @@ var Periode=function (p_ledger) { * to build the right button , javascript in the html of answer * @parameter p_periode_id is the id of periode */ - this.box_display=function(p_periode_id) { - if ( this.js_obj_name == "") { + this.box_display = function (p_periode_id) { + if (this.js_obj_name == "") { smoke.alert("ERROR BOX_ADD") } - - var js_param={"gDossier":this.dossier, - "op":"periode", - "act":"show", - "p_id":p_periode_id, - "ledger_id":this.p_ledger, - "js_var":this.js_obj_name}; - if ( this.ajax_test !="") { - js_param["TestAjaxFile"]=this.ajax_test; + + var js_param = {"gDossier": this.dossier, + "op": "periode", + "act": "show", + "p_id": p_periode_id, + "ledger_id": this.p_ledger, + "js_var": this.js_obj_name}; + if (this.ajax_test != "") { + js_param["TestAjaxFile"] = this.ajax_test; } - var here=this; + var here = this; new Ajax.Request(here.pcallback, - { - method:"POST", - parameters:js_param, - onSuccess:function(req) { - remove_waiting_box(); - var json=req.responseText.evalJSON(); - var y=calcy(100); - add_div({"id":"mod_periode","style":"position:fixed;top:"+y+"px;width:50%","cssclass":"inner_box",'html':"wait"}); - $('mod_periode').update(json.content); - } - }); + { + method: "POST", + parameters: js_param, + onSuccess: function (req) { + remove_waiting_box(); + var json = req.responseText.evalJSON(); + var y = calcy(100); + add_div({"id": "mod_periode", "style": "position:fixed;top:" + y + "px;width:50%", "cssclass": "inner_box", 'html': "wait"}); + $('mod_periode').update(json.content); + } + }); }; /** * close the periode, call ajax and receive a json object with the attribute * status, content * @parameter p_periode_id is the id of periode */ - this.close_periode=function(p_periode_id) { - if ( this.js_obj_name == "") { + this.close_periode = function (p_periode_id) { + if (this.js_obj_name == "") { smoke.alert("ERROR BOX_ADD") } - - if ( this.ajax_test !="") { - js_param["TestAjaxFile"]=this.ajax_test; + + if (this.ajax_test != "") { + js_param["TestAjaxFile"] = this.ajax_test; } - var here=this; - smoke.confirm("Confirmer ?",function(e) { - if (e ) { - here._close(p_periode_id); - } - }); + var here = this; + smoke.confirm("Confirmer ?", function (e) { + if (e) { + here._close(p_periode_id); + } + }); }; /** * Internal function to close without confirming * @param {type} p_periode_id * @returns {undefined} */ - this._close=function(p_periode_id) { - if ( this.js_obj_name == "") { + this._close = function (p_periode_id) { + if (this.js_obj_name == "") { smoke.alert("ERROR BOX_ADD") } - var js_param={"gDossier":this.dossier, - "op":"periode", - "act":"close", - "ledger_id":this.p_ledger, - "p_id":p_periode_id, - "js_var":this.js_obj_name - }; - if ( this.ajax_test !="") { - js_param["TestAjaxFile"]=this.ajax_test; + var js_param = {"gDossier": this.dossier, + "op": "periode", + "act": "close", + "ledger_id": this.p_ledger, + "p_id": p_periode_id, + "js_var": this.js_obj_name + }; + if (this.ajax_test != "") { + js_param["TestAjaxFile"] = this.ajax_test; } - var here=this; + var here = this; waiting_box(); new Ajax.Request(here.pcallback, - { - method:"POST", - parameters:js_param, - onSuccess:function(req) { - remove_waiting_box(); - var json=req.responseText.evalJSON(); - if ( json.status == 'OK') - { - $('row_per_'+p_periode_id).update(json.content); - new Effect.Highlight('row_per_'+p_periode_id ,{startcolor: '#FAD4D4',endcolor: '#F78082' }); - } else { - smoke.alert(json.content); + { + method: "POST", + parameters: js_param, + onSuccess: function (req) { + remove_waiting_box(); + var json = req.responseText.evalJSON(); + if (json.status == 'OK') + { + $('row_per_' + p_periode_id).update(json.content); + new Effect.Highlight('row_per_' + p_periode_id, {startcolor: '#FAD4D4', endcolor: '#F78082'}); + } else { + smoke.alert(json.content); + } } - } - }); + }); }; /** * reopen the periode * @parameter p_periode_id is the SQL id of parm_periode or the id of * jrn_periode */ - this.open_periode=function(p_periode_id) { - if ( this.js_obj_name == "") { + this.open_periode = function (p_periode_id) { + if (this.js_obj_name == "") { smoke.alert("ERROR BOX_ADD") } - var js_param={"gDossier":this.dossier, - "op":"periode", - "act":"reopen", - "ledger_id":this.p_ledger, - "p_id":p_periode_id, - "js_var":this.js_obj_name - }; - if ( this.ajax_test !="") { - js_param["TestAjaxFile"]=this.ajax_test; + var js_param = {"gDossier": this.dossier, + "op": "periode", + "act": "reopen", + "ledger_id": this.p_ledger, + "p_id": p_periode_id, + "js_var": this.js_obj_name + }; + if (this.ajax_test != "") { + js_param["TestAjaxFile"] = this.ajax_test; } - var here=this; - smoke.confirm("Confirmer ?",function(e) { - if (e ) { - waiting_box(); - new Ajax.Request(here.pcallback, + var here = this; + smoke.confirm("Confirmer ?", function (e) { + if (e) { + waiting_box(); + new Ajax.Request(here.pcallback, { - method:"POST", - parameters:js_param, - onSuccess:function(req) { - remove_waiting_box(); - var json=req.responseText.evalJSON(); - if ( json.status == 'OK') - { - $('row_per_'+p_periode_id).update(json.content); - new Effect.Highlight('row_per_'+p_periode_id ,{startcolor: '#FAD4D4',endcolor: '#F78082' }); + method: "POST", + parameters: js_param, + onSuccess: function (req) { + remove_waiting_box(); + var json = req.responseText.evalJSON(); + if (json.status == 'OK') + { + $('row_per_' + p_periode_id).update(json.content); + new Effect.Highlight('row_per_' + p_periode_id, {startcolor: '#FAD4D4', endcolor: '#F78082'}); } else { smoke.alert(json.content); } - } - }); - } - }); + } + }); + } + }); }; /** * This DOMID of the DIV containing the form is mod_periode * @param {type} p_frm * @returns {Boolean} */ - this.save=function(p_frm) { - var js_param=$(p_frm).serialize(true); + this.save = function (p_frm) { + var js_param = $(p_frm).serialize(true); waiting_box(); - js_param["js_var"]=this.js_obj_name; - js_param["act"]="save"; - js_param["op"]="periode"; - var here=this; - new Ajax.Request(this.pcallback,{ - method:"POST", - parameters:js_param, - onSuccess:function (req) { - - var answer=req.responseText.evalJSON(); - remove_waiting_box(); - if ( answer.status == "OK") { - $('row_per_'+js_param['periode_id']).update(answer.content); - removeDiv('mod_periode'); - new Effect.Highlight('row_per_'+js_param['periode_id'] ,{startcolor: '#FAD4D4',endcolor: '#F78082' }); - } else { - smoke.alert(answer.content); - } - } + js_param["js_var"] = this.js_obj_name; + js_param["act"] = "save"; + js_param["op"] = "periode"; + var here = this; + new Ajax.Request(this.pcallback, { + method: "POST", + parameters: js_param, + onSuccess: function (req) { + + var answer = req.responseText.evalJSON(); + remove_waiting_box(); + if (answer.status == "OK") { + $('row_per_' + js_param['periode_id']).update(answer.content); + removeDiv('mod_periode'); + new Effect.Highlight('row_per_' + js_param['periode_id'], {startcolor: '#FAD4D4', endcolor: '#F78082'}); + } else { + smoke.alert(answer.content); + } + } }); return false; }; @@ -3355,19 +3367,19 @@ var Periode=function (p_ledger) { this.close_selected = function () { var here = this; var a_selected = document.getElementsByName('sel_per_close[]'); - var count=0; + var count = 0; var i = 0; for (i = 0; i < a_selected.length; i++) { if (a_selected[i].checked == true) { // Close the selected periode - count++; + count++; } } - if ( count==0){ - smoke.signal("Sélectionner au moins une période",function(){},{duration:1500}); + if (count == 0) { + smoke.signal("Sélectionner au moins une période", function () {}, {duration: 1500}); return; } - smoke.confirm("Confirmer fermeture de "+count+" periode", function (e) { + smoke.confirm("Confirmer fermeture de " + count + " periode", function (e) { if (e) { var a_selected = document.getElementsByName('sel_per_close[]'); var i = 0; @@ -3388,57 +3400,57 @@ var Periode=function (p_ledger) { * # DIV id = periode_add * # table id = periode_tbl */ - this.insert_periode=function() { - var p_frm='insert_periode_frm'; - var js_param=$(p_frm).serialize(true); + this.insert_periode = function () { + var p_frm = 'insert_periode_frm'; + var js_param = $(p_frm).serialize(true); waiting_box(); - js_param["js_var"]=this.js_obj_name; - js_param["act"]="insert_periode"; - js_param["op"]="periode"; - js_param["p_id"]="-1"; - js_param["ledger_id"]="0"; - var here=this; - new Ajax.Request(this.pcallback,{ - method:"POST", - parameters:js_param, - onSuccess:function (req) { - var answer=req.responseText.evalJSON(); - remove_waiting_box(); - if ( answer.status == "OK") { - var new_row=document.createElement("tr"); - $('periode_tbl').append(new_row); - new_row.replace(answer.content); - - // hide the form - $('periode_add').hide(); - new Effect.Highlight('row_per_'+answer.p_id ,{startcolor: '#FAD4D4',endcolor: '#F78082' }); + js_param["js_var"] = this.js_obj_name; + js_param["act"] = "insert_periode"; + js_param["op"] = "periode"; + js_param["p_id"] = "-1"; + js_param["ledger_id"] = "0"; + var here = this; + new Ajax.Request(this.pcallback, { + method: "POST", + parameters: js_param, + onSuccess: function (req) { + var answer = req.responseText.evalJSON(); + remove_waiting_box(); + if (answer.status == "OK") { + var new_row = document.createElement("tr"); + $('periode_tbl').append(new_row); + new_row.replace(answer.content); + + // hide the form + $('periode_add').hide(); + new Effect.Highlight('row_per_' + answer.p_id, {startcolor: '#FAD4D4', endcolor: '#F78082'}); alternate_row_color('periode_tbl'); - } else { - smoke.alert(answer.content); - } - } + } else { + smoke.alert(answer.content); + } + } }); - return false; -} - + return false; + } + } /** * Show the periodes from the exercice contained into the id (p_exercice_sel) * @param p_table_id DOM ID of the table */ -Periode.filter_exercice=function (p_table_id) { - var rows=$(p_table_id).rows; - var selected_value=$('p_exercice_sel').value; - for (var i=1;i'; - if ( p_message) { - message=p_message; + + var message = '

' + content[70] + '

'; + if (p_message) { + message = p_message; } - - add_div({id:"blocking"+progressIdx,cssclass:"smoke-base smoke-visible "}); - - add_div({id:"message"+progressIdx,cssclass:"inner_box",style:"z-index:1000;position:fixed;top:30%;width:40%;left:30%"}); - $("message"+progressIdx).update('

'+content[65]+'

'+message); + + add_div({id: "blocking" + progressIdx, cssclass: "smoke-base smoke-visible "}); + + add_div({id: "message" + progressIdx, cssclass: "inner_box", style: "z-index:1000;position:fixed;top:30%;width:40%;left:30%"}); + $("message" + progressIdx).update('

' + content[65] + '

' + message); // Create a div add_div({id: "progressDiv" + progressIdx, cssclass: "progressbar", html: '0'}); // Check status every sec. @@ -3486,38 +3498,40 @@ function progress_bar_check(p_idx, p_taskid) try { new Ajax.Request("ajax_misc.php", { - parameters: {gDossier: 0, task_id: p_taskid,op:"progressBar"}, - method:"get", + parameters: {gDossier: 0, task_id: p_taskid, op: "progressBar"}, + method: "get", onSuccess: function (req) { - try + try { - var answer=req.responseText.evalJSON(); - var progress_div=$("progressDiv"+progressIdx); - var a_child=progress_div.childNodes; - var i=0; - for ( i=0;i< a_child.length;i++) { - if ( a_child[i].id="progressValue") { + var answer = req.responseText.evalJSON(); + var progress_div = $("progressDiv" + progressIdx); + var a_child = progress_div.childNodes; + var i = 0; + for (i = 0; i < a_child.length; i++) { + if (a_child[i].id = "progressValue") { var progressValue = a_child[i]; } } var progress = parseFloat(progressValue.innerHTML); - if ( answer.value <= progress ) { + if (answer.value <= progress) { return; } progressValue.innerHTML = answer.value; progressValue.setStyle("width:" + answer.value + "%"); - if (answer.value== 100) { + if (answer.value == 100) { clearInterval(progressBar[p_idx]); - progressValue.innerHTML="Success"; - Effect.BlindUp("progressDiv"+p_idx,{duration:1.0,scaleContent:false}) - $("message"+p_idx).remove(); - $("blocking"+p_idx).remove(); - setTimeout(function() { $("progressDiv"+progressIdx).remove } , 1100); + progressValue.innerHTML = "Success"; + Effect.BlindUp("progressDiv" + p_idx, {duration: 1.0, scaleContent: false}) + $("message" + p_idx).remove(); + $("blocking" + p_idx).remove(); + setTimeout(function () { + $("progressDiv" + progressIdx).remove + }, 1100); } } catch (e) { clearInterval(progressBar[p_idx]); - document.getElementById("progressValue").innerHTML=req.responseText; + document.getElementById("progressValue").innerHTML = req.responseText; console.error(e.message); } } @@ -3527,7 +3541,7 @@ function progress_bar_check(p_idx, p_taskid) console.error(e.message); } } - + /** * In the user's setting box, update the period list with the choosen exercice * @param {int} p_dossier @@ -3535,8 +3549,8 @@ function progress_bar_check(p_idx, p_taskid) function updatePeriodePreference(p_dossier) { waiting_box(); - var exercice=$('exercice_setting').value; - new Ajax.Updater('setting_period',"ajax_misc.php",{method:"get",parameters:{ "op":"pref_exercice","gDossier":p_dossier,"exercice":exercice}}); + var exercice = $('exercice_setting').value; + new Ajax.Updater('setting_period', "ajax_misc.php", {method: "get", parameters: {"op": "pref_exercice", "gDossier": p_dossier, "exercice": exercice}}); remove_waiting_box(); } /** @@ -3547,12 +3561,12 @@ function updatePeriodePreference(p_dossier) * @param {type} p_periode_to id of the ending periode * @param {type} p_last possible value = 1 to show last periode or 0 the first */ -function updatePeriode(p_dossier,p_exercice,p_periode_from,p_periode_to,p_last) +function updatePeriode(p_dossier, p_exercice, p_periode_from, p_periode_to, p_last) { waiting_box(); - var exercice=$(p_exercice).value; - new Ajax.Updater(p_periode_from,"ajax_misc.php",{method:"get",parameters:{op:"periode_change","gDossier":p_dossier,"exercice":exercice,field:p_periode_from,"type":"from","last":p_last}}); - new Ajax.Updater(p_periode_to,"ajax_misc.php",{method:"get",parameters:{op:"periode_change","gDossier":p_dossier,"exercice":exercice,field:p_periode_to,"type":"to","last":p_last}}); + var exercice = $(p_exercice).value; + new Ajax.Updater(p_periode_from, "ajax_misc.php", {method: "get", parameters: {op: "periode_change", "gDossier": p_dossier, "exercice": exercice, field: p_periode_from, "type": "from", "last": p_last}}); + new Ajax.Updater(p_periode_to, "ajax_misc.php", {method: "get", parameters: {op: "periode_change", "gDossier": p_dossier, "exercice": exercice, field: p_periode_to, "type": "to", "last": p_last}}); remove_waiting_box(); } /** @@ -3562,22 +3576,22 @@ function updatePeriode(p_dossier,p_exercice,p_periode_from,p_periode_to,p_last) */ function toggle_lock(p_domid) { - var padlock=document.getElementById(p_domid); - if ( padlock == null) { + var padlock = document.getElementById(p_domid); + if (padlock == null) { console.error("domid invalid"); } var status = padlock.getAttribute("is_locked"); - if ( status == 1 ) { - padlock.innerHTML=""; - padlock.setAttribute("is_locked",0); + if (status == 1) { + padlock.innerHTML = ""; + padlock.setAttribute("is_locked", 0); } else if (status == 0) { - padlock.innerHTML=""; - padlock.setAttribute("is_locked",1); + padlock.innerHTML = ""; + padlock.setAttribute("is_locked", 1); } else { throw "toggle_lock failed"; } - - + + } /*** @@ -3587,14 +3601,14 @@ function updatePreference() { try { waiting_box(); - var param=$('preference_frm').serialize()+"&op=preference&action=save"; - - new Ajax.Request("ajax_misc.php",{ - method:"post", - parameters:param, - onSuccess:function (req) { - var style=req.responseText.evalJSON(); - $('pagestyle').setAttribute('href',style.style); + var param = $('preference_frm').serialize() + "&op=preference&action=save"; + + new Ajax.Request("ajax_misc.php", { + method: "post", + parameters: param, + onSuccess: function (req) { + var style = req.responseText.evalJSON(); + $('pagestyle').setAttribute('href', style.style); removeDiv('preference_div'); } }); @@ -3603,7 +3617,7 @@ function updatePreference() smoke.alert(content[48] + e.message); } remove_waiting_box(); - + } /** @@ -3612,16 +3626,16 @@ function updatePreference() * @param string p_value_domid : id of domElement containing 1 or 0 * @see param_jrn.php */ -function toggle_onoff(icon_domid,p_value_domid) +function toggle_onoff(icon_domid, p_value_domid) { - if ( $(p_value_domid).value==0) { - $(p_value_domid).value=1; - $(icon_domid).innerHTML=''; - $(icon_domid).style='color:green'; + if ($(p_value_domid).value == 0) { + $(p_value_domid).value = 1; + $(icon_domid).innerHTML = ''; + $(icon_domid).style = 'color:green'; } else { - $(p_value_domid).value=0; - $(icon_domid).innerHTML=''; - $(icon_domid).style='color:red'; + $(p_value_domid).value = 0; + $(icon_domid).innerHTML = ''; + $(icon_domid).style = 'color:red'; } } /** @@ -3631,9 +3645,9 @@ function toggle_onoff(icon_domid,p_value_domid) * @param {type} p_row * @returns {undefined} */ -function toggle_row_warning_enable(p_enable,p_row) +function toggle_row_warning_enable(p_enable, p_row) { - if ($(p_enable).value==1) { + if ($(p_enable).value == 1) { $(p_row).show(); } else { $(p_row).hide();