diff --git a/html/js/scripts.js b/html/js/scripts.js index 404e99eff..ce350f34b 100644 --- a/html/js/scripts.js +++ b/html/js/scripts.js @@ -1304,6 +1304,7 @@ function search_reconcile(dossier, ctl_concern, amount_id, ledger, p_id_target, str_style += ";width:92%;overflow:auto;"; waiting_box(); var hide_operation = $(ctl_concern).getAttribute("hide_operation"); + var single_operation = $(ctl_concern).getAttribute("single_operation"); var param_send = {gDossier: dossier, ctlc: ctl_concern, @@ -1313,7 +1314,8 @@ function search_reconcile(dossier, ctl_concern, amount_id, ledger, p_id_target, ledger: ledger, target: target, tiers: tiers, - hide_operation: hide_operation + hide_operation: hide_operation, + single_operation:single_operation }; var qs = encodeJSON(param_send); @@ -1381,6 +1383,7 @@ function set_reconcile(obj) if (!obj.elements['target']) return; var target = obj.elements['target'].value; + var single_operation = obj.elements['single_operation'].value; for (var e = 0; e < obj.elements.length; e++) { @@ -1414,7 +1417,12 @@ function set_reconcile(obj) }); } } - $(ctlc.value).value += nValue; + if (single_operation==0) { + $(ctlc.value).value += nValue; + } else { + $(ctlc.value).value = nValue; + + } } } } diff --git a/include/ajax/ajax_search_operation.php b/include/ajax/ajax_search_operation.php index 0c4701187..f5a541ac4 100644 --- a/include/ajax/ajax_search_operation.php +++ b/include/ajax/ajax_search_operation.php @@ -109,6 +109,8 @@ if (isset($_GET['viewsearch'])) list($array['date_start'], $array['date_end'])=$g_user->get_limit_current_exercice(); } $array['hide_operation']=$hide_operation; + $array['single_operation']=$http->get("single_operation"); + list($sql, $where)=$ledger->build_search_sql($array); // Count nb of line $max_line=$cn->count_sql($sql); @@ -128,6 +130,7 @@ if (isset($_GET['viewsearch'])) } } echo '
'; + echo HtmlInput::hidden("single_operation", $array['single_operation']); echo HtmlInput::hidden("tiers", $tiers); echo HtmlInput::submit("upd_rec", _("Mettre à jour")); echo HtmlInput::get_to_hidden(array('ctlc', 'amount_id', 'ledger')); diff --git a/include/class/acc_ledger_search.class.php b/include/class/acc_ledger_search.class.php index 198b0e7ac..d2e7fa76e 100644 --- a/include/class/acc_ledger_search.class.php +++ b/include/class/acc_ledger_search.class.php @@ -224,6 +224,9 @@ class Acc_Ledger_Search if (isset($_REQUEST['hide_operation'])) $r.=HtmlInput::hidden("hide_operation", $http->request('hide_operation')); + if (isset($_REQUEST['single_operation'])) + $r.=HtmlInput::hidden("single_operation", $http->request('single_operation')); + ob_start(); $search_filter=$this->build_search_filter(); require_once NOALYSS_TEMPLATE.'/ledger_search.php'; diff --git a/include/lib/iconcerned.class.php b/include/lib/iconcerned.class.php index d43fa3e4c..2c4a4187f 100644 --- a/include/lib/iconcerned.class.php +++ b/include/lib/iconcerned.class.php @@ -1,4 +1,5 @@ name=$p_name; - $this->value=$p_value; - $this->amount_id=null; - $this->paid=''; - $this->id=$p_id; - $this->tiers=""; // id of the field for the tiers to be updated - $this->div=""; // Dom Element to show the search result - $this->hideOperation=""; // string of j_id to hide, separated by comma to avoid to reconcile an operation with itself - } - /*!\brief show the html input of the widget*/ - public function input($p_name=null,$p_value=null) + private $hideOperation; //!< string of j_id to hide, separated by comma to avoid to reconcile an operation with itself + private $singleOperation; //!< do not allow to select several operations + + public function __construct($p_name='', $p_value='', $p_id="") + { + $this->name=$p_name; + $this->value=$p_value; + $this->amount_id=null; + $this->paid=''; + $this->id=$p_id; + // id of the field for the tiers to be updated + $this->tiers=""; + // Dom Element to show the search result + $this->div=""; + // string of j_id to hide, separated by comma to avoid to reconcile an operation with itself + $this->hideOperation=""; + // by default we can select several operation + $this->singleOperation=0; + } + + /* !\brief show the html input of the widget */ + + public function input($p_name=null, $p_value=null) { $this->name=($p_name==null)?$this->name:$p_name; $this->value=($p_value==null)?$this->value:$p_value; - if ( $this->readOnly==true) return $this->display(); + if ($this->readOnly==true) + return $this->display(); $this->id=($this->id=="")?$this->name:$this->id; - $javascript=sprintf("search_reconcile(".dossier::id().",'%s','%s','%s','%s','%s')", - $this->name, - $this->amount_id, - $this->paid, - $this->div, - $this->tiers ); + $javascript=sprintf("search_reconcile(".dossier::id().",'%s','%s','%s','%s','%s')", $this->name, + $this->amount_id, $this->paid, $this->div, $this->tiers); $r=Icon_Action::icon_magnifier(uniqid(), $javascript); $r.=sprintf(" - + - ", - $this->name, - $this->id, - $this->value, - $this->hideOperation, - $this->id - ); + ", $this->name, $this->id, $this->value, $this->hideOperation,$this->singleOperation, + $this->id + ); return $r; } /** * setter - * @param $p_string + * @param number $p_string jrn.jr_id of the operation to hide */ function set_hideOperation($p_string) { $this->hideOperation=strip_tags($p_string); } - /*!\brief print in html the readonly value of the widget*/ + + /** + * Set the value of single operation, limit to one operation if TRUE + * @param bool $p_value TRUE or false + */ + function set_singleOperation($p_value){ + if ( $p_value == TRUE ) { + $this->singleOperation=1; + return; + } + if ( $p_value == FALSE ) { + $this->singleOperation=0; + return; + } + throw new Exception (_("setSingleOperation failed")); + } + + function get_singleOperation(){ + return $this->singleOperation; + } + + /* !\brief print in html the readonly value of the widget */ + public function display() { - $r=sprintf("%s",$this->value); - $r.=sprintf('', $this->name,$this->value); + $r=sprintf("%s", $this->value); + $r.=sprintf('', $this->name, $this->value); return $r; - } + static public function test_me() { + } + } diff --git a/unit-test/include/class/acc_ledger.Test.php b/unit-test/include/class/acc_ledger.Test.php index 93e8af5bc..8edb68d36 100644 --- a/unit-test/include/class/acc_ledger.Test.php +++ b/unit-test/include/class/acc_ledger.Test.php @@ -443,31 +443,56 @@ class Acc_LedgerTest extends TestCase */ public function testVerify_Ledger() { - global $g_connection; + global $g_connection; $ledger=new Acc_Ledger($g_connection,4); $array=[ - "p_jrn"=>"15", - "p_jrn_deb_max_line"=>5, - "p_jrn_name"=>"New ledger", - "p_jrn_type"=>"ODS" - ]; - // Must success - try { - $ledger->verify_ledger($array); - $this->assertTrue(TRUE); - } catch (Exception $ex) { - var_dump($ex->getMessage()); - var_dump($ex->getTraceAsString()); - } + "p_jrn"=>"15", + "p_jrn_deb_max_line"=>5, + "p_jrn_name"=>"New ledger", + "p_jrn_type"=>"ODS" + ]; + //----------------------------------------------- + // Must succeed + //----------------------------------------------- + $ledger->verify_ledger($array); + + // succeeds if negative amount 1 + $array["negative_amount"]=1; + $ledger->verify_ledger($array); + + //----------------------------------------------- // Must fail - $a_ledger["p_jrn"]="a"; + //----------------------------------------------- try { - $ledger->verify_ledger($array); - $this->assertTrue(FALSE); - } catch (Exception $ex) { - $this->assertTrue(TRUE); - } + $array["p_jrn"]="a"; + $ledger->verify_ledger($array); + $this->assertTrue(FALSE,"p_jrn is invalide"); + }catch (\Exception $e) { + $this->assertTrue(TRUE); + } + // reset properly , + $array["p_jrn"]="15"; + $ledger->verify_ledger($array); + + + // fails if negative amount neither 1 nor 0 + try { + $array["negative_amount"]=2; + $ledger->verify_ledger($array); + $this->assertTrue(FALSE,"negative_amount must be 1 or 0"); + }catch (\Exception $e) { + $this->assertTrue(TRUE); + } + + // negative amount not set , so fails + try { + $array["negative_warning"]="Yes"; + $ledger->verify_ledger($array); + $this->assertTrue(FALSE,"negative_warning must be a string"); + }catch (\Exception $e) { + $this->assertTrue(TRUE); + } } /**