reconcilaction : possibility to select only one operation

This commit is contained in:
Dany De Bontridder 2020-08-18 19:11:23 +02:00
parent 3450d5f350
commit 23b88e2bb8
5 changed files with 125 additions and 58 deletions

View file

@ -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;
}
}
}
}

View file

@ -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 '<form method="get" onsubmit="set_reconcile(this);return false">';
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'));

View file

@ -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';

View file

@ -1,4 +1,5 @@
<?php
/*
* This file is part of NOALYSS.
*
@ -15,78 +16,105 @@
* You should have received a copy of the GNU General Public License
* along with NOALYSS; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
*/
// Copyright Author Dany De Bontridder danydb@aevalys.eu
/*!\file
/* !\file
* \brief Html Input
* - name is the name and id of the input
* - extra amount of the operation to reconcile
* - extra2 ledger paid
*/
require_once NOALYSS_INCLUDE.'/lib/html_input.class.php';
class IConcerned extends HtmlInput
{
private $hideOperation; //!< string of j_id to hide, separated by comma to avoid to reconcile an operation with itself
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;
$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("
<INPUT TYPE=\"text\" style=\"color:black;background:lightyellow;border:solid 1px grey;\" NAME=\"%s\" ID=\"%s\" VALUE=\"%s\" SIZE=\"8\" hide_operation=\"%s\" readonly>
<INPUT TYPE=\"text\" style=\"color:black;background:lightyellow;border:solid 1px grey;\" NAME=\"%s\" ID=\"%s\" VALUE=\"%s\" SIZE=\"8\" hide_operation=\"%s\" readonly single_operation=\"%s\">
<INPUT class=\"smallbutton\" TYPE=\"button\" onClick=\"$('%s').value=''\" value=\"X\">
",
$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("<span><b>%s</b></span>",$this->value);
$r.=sprintf('<input type="hidden" name="%s" value="%s">', $this->name,$this->value);
$r=sprintf("<span><b>%s</b></span>", $this->value);
$r.=sprintf('<input type="hidden" name="%s" value="%s">', $this->name, $this->value);
return $r;
}
static public function test_me()
{
}
}

View file

@ -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);
}
}
/**