[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Noalyss-commit] [noalyss] 35/119: Predefined Operation rewriting
From: |
Dany De Bontridder |
Subject: |
[Noalyss-commit] [noalyss] 35/119: Predefined Operation rewriting |
Date: |
Mon, 26 Oct 2020 18:27:11 -0400 (EDT) |
sparkyx pushed a commit to branch master
in repository noalyss.
commit b941d77688ba2e9a19cba9fb70d36a060424cec4
Author: Dany De Bontridder <dany@alchimerys.be>
AuthorDate: Wed Sep 23 19:21:51 2020 +0200
Predefined Operation rewriting
---
html/ajax_misc.php | 1 -
include/ajax/ajax_mod_predf_op.php | 17 +-
include/ajax/ajax_save_predf_op.php | 80 ++--
include/class/acc_ledger.class.php | 17 +-
include/class/acc_ledger_purchase.class.php | 8 +-
include/class/acc_ledger_sold.class.php | 11 +-
include/class/operation_predef_mtable.class.php | 120 +++++
include/class/pre_op_ach.class.php | 613 ++++++++++++------------
include/class/pre_op_advanced.class.php | 93 ++--
include/class/pre_op_ods.class.php | 66 ++-
include/class/pre_op_ven.class.php | 116 ++---
include/class/pre_operation.class.php | 443 ++++++++++++-----
include/compta_ach.inc.php | 6 +-
include/compta_ven.inc.php | 26 +-
include/database/op_predef_sql.class.php | 71 +++
include/operation_ods_new.inc.php | 5 +-
include/preod.inc.php | 108 +----
include/template/pre_operation_display.php | 36 ++
include/template/predf_ledger_detail.php | 9 +-
19 files changed, 1077 insertions(+), 769 deletions(-)
diff --git a/html/ajax_misc.php b/html/ajax_misc.php
index ef7ac14..12c77eb 100644
--- a/html/ajax_misc.php
+++ b/html/ajax_misc.php
@@ -159,7 +159,6 @@ $path = array(
"remove_submenu"=>"ajax_remove_submenu",
"cardsearch"=>"ajax_boxcard_search",
"saldo"=>"ajax_bank_saldo",
- "up_predef"=>"ajax_update_predef",
"upd_receipt"=>"ajax_get_receipt",
"up_pay_method"=>"ajax_update_payment",
"openancsearch"=>"ajax_anc_search",
diff --git a/include/ajax/ajax_mod_predf_op.php
b/include/ajax/ajax_mod_predf_op.php
index c0eaa4c..539d465 100644
--- a/include/ajax/ajax_mod_predf_op.php
+++ b/include/ajax/ajax_mod_predf_op.php
@@ -26,8 +26,21 @@
if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
ob_start();
require_once NOALYSS_INCLUDE.'/class/pre_operation.class.php';
-$op=new Pre_Operation($cn,$_GET['id']);
-$array=$op->load();
+$id=$http->get("id","number");
+
+$op=new Pre_Operation($cn,$id);
+
+// ----------------------------------------------------------------
+// if id > 0 then we display an existing template operation
+// otherwise a blank one
+// -----------------------------------------------------------------
+if ( $id > 0) {
+ $array = $op->load();
+} else {
+ $ledger_id=$http->get("ledger_id","number");
+ $op->set_jrn($ledger_id);
+ $array=$op->blank($ledger_id);
+}
echo HtmlInput::title_box(_('Modification du
nom'),'mod_predf_op','close','','n');
echo '
diff --git a/include/ajax/ajax_save_predf_op.php
b/include/ajax/ajax_save_predf_op.php
index a6d9852..c84830f 100644
--- a/include/ajax/ajax_save_predf_op.php
+++ b/include/ajax/ajax_save_predf_op.php
@@ -23,46 +23,52 @@
* \brief save the new predefined operation
* included from ajax_misc
*/
+
+if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
require_once NOALYSS_INCLUDE.'/lib/http_input.class.php';
+require_once NOALYSS_INCLUDE.'/class/operation_predef_mtable.class.php';
$http=new HttpInput();
-if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
-if ($g_user->check_module('PREDOP') == 0) exit();
-$name=$http->post("opd_name","string", "");
-if ( trim($name) != '')
- {
- try
- {
- $od_id=$http->post("od_id", "number");
- $cn->exec_sql('delete from op_predef where od_id=$1',
- array($od_id));
- $cn->exec_sql("delete from op_predef_detail where
od_id=$1",array($od_id));
- $jrn_type=$http->post("jrn_type");
- switch ($jrn_type) {
- case 'ACH':
- $operation=new Pre_op_ach($cn);
- break;
- case 'VEN':
- $operation=new Pre_op_ven($cn);
- break;
- case 'ODS':
- $operation=new Pre_Op_Advanced($cn);
- break;
- default :
- throw new Exception(_('Type de journal invalide'));
- }
- $operation->get_post();
- $operation->save();
- $cn->commit();
-
- }
- catch (Exception $exc)
- {
- error_log($exc->getTraceAsString());
- throw $exc;
- }
+try {
+ $table=$http->request('table');
+ $action=$http->request('action');
+ $p_id=$http->request('p_id', "number");
+ $ctl_id=$http->request('ctl');
+
+} catch(Exception $e) {
+ echo $e->getMessage();
+ return;
+}
+if ( $g_user->check_module("PREDOP") == 0) die();
+
+$prd_op=new Op_predef_SQL($cn);
+$prd_op->set_pk_value($p_id);
+$prd_op->load();
+
+$operation_predef_mtable=new Operation_Predef_MTable($prd_op);
+
+
+$operation_predef_mtable->add_json_param("op","save_predf");
+$operation_predef_mtable->set_object_name($ctl_id);
+$operation_predef_mtable->set_callback("ajax_misc.php");
- }
-?>
\ No newline at end of file
+if ($action=="input")
+{
+ header('Content-type: text/xml; charset=UTF-8');
+ echo $operation_predef_mtable->ajax_input()->saveXML();
+ return;
+}
+elseif ($action == "save")
+{
+ $xml=$operation_predef_mtable->ajax_save();
+ header('Content-type: text/xml; charset=UTF-8');
+ echo $xml->saveXML();
+}
+elseif ($action == "delete")
+{
+ $xml=$operation_predef_mtable->ajax_delete();
+ header('Content-type: text/xml; charset=UTF-8');
+ echo $xml->saveXML();
+}
\ No newline at end of file
diff --git a/include/class/acc_ledger.class.php
b/include/class/acc_ledger.class.php
index 877738b..003513b 100644
--- a/include/class/acc_ledger.class.php
+++ b/include/class/acc_ledger.class.php
@@ -788,10 +788,11 @@ class Acc_Ledger extends jrn_def_sql
ob_start();
echo '<div id="predef_form">';
echo HtmlInput::hidden('p_jrn_predef', $this->id);
- $op=new Pre_op_ods($this->db);
- $op->set('ledger', $this->id);
- $op->set('ledger_type', "ODS");
- $op->set('direct', 't');
+ $op=new Pre_operation( $this->db);
+ $op->set_p_jrn($this->id);
+ $op->set_jrn_type("ODS");
+ $op->set_od_direct('t');
+
$url=http_build_query(
array('action'=>'use_opd',
'p_jrn_predef'=>$this->id,
@@ -1328,14 +1329,16 @@ class Acc_Ledger extends jrn_def_sql
$this->pj=$acc_end->set_pj();
- $this->db->exec_sql("update jrn set jr_internal='".$internal."'
where ".
- " jr_grpt_id = ".$seq);
+ $this->db->exec_sql("update jrn set jr_internal=$1
+ where jr_grpt_id = $2",array($internal,$seq));
+
$this->internal=$internal;
// Save now the predef op
//------------------------
if (isset($opd_name)&&trim($opd_name)!="")
{
- $opd=new Pre_Op_Advanced($this->db);
+ $opd=new Pre_operation($this->db);
+ $opd->set_od_direct('t');
$opd->get_post();
$opd->save();
}
diff --git a/include/class/acc_ledger_purchase.class.php
b/include/class/acc_ledger_purchase.class.php
index d473366..2417446 100644
--- a/include/class/acc_ledger_purchase.class.php
+++ b/include/class/acc_ledger_purchase.class.php
@@ -1318,10 +1318,10 @@ class Acc_Ledger_Purchase extends Acc_Ledger
ob_start();
echo '<div id="predef_form">';
echo HtmlInput::hidden('p_jrn_predef', $this->id);
- $op = new Pre_op_ach($this->db);
- $op->set('ledger', $this->id);
- $op->set('ledger_type', "ACH");
- $op->set('direct', 'f');
+ $op = new Pre_operation($this->db);
+ $op->set_p_jrn($this->id);
+ $op->set_jrn_type("ACH");
+ $op->set_od_direct('f');
$url=http_build_query(array('p_jrn_predef'=>$this->id,'ac'=>$_REQUEST['ac'],'gDossier'=>dossier::id()));
echo $op->form_get('do.php?'.$url);
echo '</div>';
diff --git a/include/class/acc_ledger_sold.class.php
b/include/class/acc_ledger_sold.class.php
index 2704e47..9cb0668 100644
--- a/include/class/acc_ledger_sold.class.php
+++ b/include/class/acc_ledger_sold.class.php
@@ -1310,11 +1310,12 @@ EOF;
ob_start();
echo '<div id="predef_form">';
echo HtmlInput::hidden('p_jrn_predef', $this->id);
- $op=new Pre_op_ven($this->db);
- $op->set('ledger', $this->id);
- $op->set('ledger_type', "VEN");
- $op->set('direct', 'f');
- $url=http_build_query(array('p_jrn_predef'=>$this->id,
'ac'=>$_REQUEST['ac'],
+ $op=new Pre_operation($this->db);
+ $op->set_jrn_type("VEN");
+ $op->set_p_jrn($this->id);
+ $op->set_od_direct('f');
+ $http=new \HttpInput();
+ $url=http_build_query(array('p_jrn_predef'=>$this->id,
'ac'=>$http->request('ac'),
'gDossier'=>dossier::id()));
echo $op->form_get('do.php?'.$url);
echo '</div>';
diff --git a/include/class/operation_predef_mtable.class.php
b/include/class/operation_predef_mtable.class.php
new file mode 100644
index 0000000..3febada
--- /dev/null
+++ b/include/class/operation_predef_mtable.class.php
@@ -0,0 +1,120 @@
+<?php
+/*
+ * This file is part of NOALYSS.
+ *
+ * NOALYSS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * NOALYSS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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
+ * \brief Class to manage predefined operation thanks the class Manage Table
+ */
+/*!
+ * \brief Display a table and allow to change the predefined operation, insert
or delete. Used the
+ * class Manage_Table_SQL and the SQL Object for the tables op_predef and
op_predef_detail.
+ */
+require_once NOALYSS_INCLUDE."/lib/manage_table_sql.class.php";
+require_once NOALYSS_INCLUDE."/database/op_predef_sql.class.php";
+require_once NOALYSS_INCLUDE."/class/pre_operation.class.php";
+
+class Operation_Predef_MTable extends Manage_Table_SQL
+{
+ private $pre_operation;
+ function __construct(Op_predef_SQL $p_table)
+ {
+ parent::__construct($p_table);
+
+ $this->set_property_visible("od_id",false);
+ $this->set_property_visible("od_direct",false);
+ $this->set_property_visible("od_item",false);
+ $this->set_col_label("jrn_def_id",_("Journal"));
+ $this->set_col_label("od_name",_("Nom"));
+ $this->set_col_label("od_jrn_type",_("Type de journal"));
+ $this->set_col_label("od_description",_("Description"));
+
+ $aLedger=$p_table->cn->make_array("select jrn_def_id,jrn_def_name from
jrn_def order by jrn_def_name asc");
+
+ $this->set_sort_column("jrn_def_id");
+
$this->set_order(array("jrn_def_id","od_name","od_description","od_jrn_type"));
+ $this->set_col_type("jrn_def_id","select",$aLedger);
+
+ $this->set_callback("ajax_misc.php");
+ $this->set_property_updatable("jrn_def_id",false);
+ $this->set_property_updatable("od_jrn_type",false);
+ $this->pre_operation=null;
+
+ }
+
+ /**
+ * Display the form
+ * @throws Exception
+ */
+ function input()
+ {
+ $obj=$this->get_table();
+ $this->pre_operation = new Pre_operation($obj->cn);
+ $this->pre_operation->set_od_id($obj->get("od_id"));
+ $this->pre_operation->display();
+ }
+
+ /**
+ * Get values from the request
+ * - table is the sql table
+ * - ctl_id is the dialog box id
+ * - p_id = predef_op.od_id
+ *
+ * @code
+ * json = {"table":"public.op_predef",
+ "ctl_id":"dtr",
+ "ac":"COMPTA/ADV/PREDOP",
+ "op":"save_predf",
+ "gDossier":["28", "28"],
+ "p_id":"15",
+ "action":"save",
+ "ctl":"tbl5f6a1d09035f2",
+ "nb_item":"10",
+ "e_client":"",
+ "p_jrn":"2",
+ "e_march0":"MARCHA",
+ "e_march0_price":"102.0000",
+ "e_quant0":"1.0000",
+ "htva_march0":"0",
+ "e_march0_tva_id":"4",
+ "bt_e_march0_tva_id":"+TVA+",
+ "e_march0_tva_amount":"0.0000",
+ "tva_march0":"0","tvac_march0":"0",
+ "jrn_type":"VEN",
+ "5f6a1d0b23242_ledger":"O","
+ 5f6a1d0b23242":"1",
+ "update":"OK",
+ "5f6a1d5b70997_ledger":"O",
+ "5f6a1d5b70997":"1"}
+ * @endcode
+ */
+ function from_request()
+ {
+ $http=new HttpInput();
+ $obj=$this->get_table();
+ $this->pre_operation=new Pre_operation($obj->cn);
+ $this->pre_operation->get_post();
+ $this->pre_operation->set_od_id($http->post("p_id","number"));
+ }
+
+ function save()
+ {
+ $this->pre_operation->save();
+
+
+ }
+}
\ No newline at end of file
diff --git a/include/class/pre_op_ach.class.php
b/include/class/pre_op_ach.class.php
index 722c9de..5b5198a 100644
--- a/include/class/pre_op_ach.class.php
+++ b/include/class/pre_op_ach.class.php
@@ -29,97 +29,86 @@ require_once
NOALYSS_INCLUDE.'/class/pre_operation.class.php';
*/
class Pre_op_ach extends Pre_operation_detail
{
- var $op;
- function __construct($cn,$p_id=0)
+ function __construct($cn)
{
- parent::__construct($cn,$p_id);
-
- $this->operation->od_direct='f';
+ parent::__construct($cn);
}
function get_post()
{
- parent::get_post();
- $http=new HttpInput();
- $this->operation->od_direct='f';
+ $http = new \HttpInput();
+ $nb = $http->post("nb_item", "number");
$this->e_client=$http->post('e_client');
- for ($i=0;$i<$this->operation->nb_item;$i++)
- {
- $march="e_march".$i;
- $this->$march=$http->post('e_march'.$i);
-
$this->{"e_march".$i."_price"}=$http->post('e_march'.$i."_price","string",0);
-
$this->{"e_march".$i."_price"}=$http->post('e_march'.$i."_price","string",0);
-
$this->{"e_march".$i."_tva_id"}=$http->post('e_march'.$i."_tva_id","string",0);
-
$this->{"e_march".$i."_tva_amount"}=$http->post('e_march'.$i."_tva_amount","string",0);
-
$this->{"e_march".$i."_label"}=$http->post('e_march'.$i."_label","string",NULL);
- $this->{"e_quant".$i}=$http->post('e_quant'.$i);
-
+ for ($i = 0; $i < $nb; $i++) {
+ $march = "e_march" . $i;
+ $http->set_empty("");
+ $this->$march = $http->post('e_march' . $i);
+ $this->{"e_march" . $i . "_tva_id"} = $http->post('e_march' . $i .
"_tva_id", "string", 0);
+ $this->{"e_march" . $i . "_tva_id"} = $http->post('e_march' . $i .
"_tva_id", "string", "0");
+ $this->{"e_march" . $i . "_label"} = $http->post('e_march' . $i .
"_label", "string", "");
+ $http->set_empty(0);
+ $this->{"e_march" . $i . "_price"} = $http->post('e_march' . $i .
"_price","number");
+ $this->{"e_march" . $i . "_tva_amount"} = $http->post('e_march' .
$i . "_tva_amount", "string", "0");
+ $this->{"e_quant" . $i} = $http->post('e_quant' . $i, "number");
}
}
-
/*!
* \brief save the detail and op in the database
*
*/
- function save()
+ function save($p_od_id,$p_nb_item)
{
try
{
- $this->db->start();
- if ($this->operation->save() == false )
- return;
// save the client
$sql=sprintf('insert into op_predef_detail
(od_id,opd_poste,opd_debit)'.
- ' values '.
- "(%d,'%s','%s')",
- $this->operation->od_id,
- $this->e_client,
- "f");
+ ' values '.
+ "(%d,'%s','%s')",
+ $p_od_id,
+ $this->e_client,
+ "f");
$this->db->exec_sql($sql);
- // save the selling
- for ($i=0;$i<$this->operation->nb_item;$i++)
+
+ for ($i=0;$i<$p_nb_item;$i++)
{
if ( strlen(trim($this->{"e_march".$i}))=="") continue;
$sql= 'insert into op_predef_detail (opd_poste,'
- . 'opd_amount,'
- . 'opd_tva_id,'
- . 'opd_quantity,'
- . 'opd_debit,'
- . 'od_id ,'
- . 'opd_tva_amount,'
- . 'opd_comment'.
- ')'.
- ' values ($1,$2,$3,$4,$5,$6,$7,$8)';
+ . 'opd_amount,'
+ . 'opd_tva_id,'
+ . 'opd_quantity,'
+ . 'opd_debit,'
+ . 'od_id ,'
+ . 'opd_tva_amount,'
+ . 'opd_comment'.
+ ')'.
+ ' values ($1,$2,$3,$4,$5,$6,$7,$8)';
$this->db->exec_sql($sql,
- array($this->{"e_march".$i},
- $this->{"e_march".$i."_price"},
- $this->{"e_march".$i."_tva_id"},
- $this->{"e_quant".$i},
- 't',
- $this->operation->od_id,
- $this->{"e_march".$i."_tva_amount"},
- $this->{"e_march".$i."_label"},
- ));
+ array($this->{"e_march".$i},
+ $this->{"e_march".$i."_price"},
+ $this->{"e_march".$i."_tva_id"},
+ $this->{"e_quant".$i},
+ 't',
+ $p_od_id,
+ $this->{"e_march".$i."_tva_amount"},
+ $this->{"e_march".$i."_label"},
+ ));
}
}
catch (Exception $e)
{
- record_log($e);
- echo ($e->getMessage());
- $this->db->rollback();
+ record_log("PREOPACH01".$e->getMessage().$e->getTraceAsString());
+ throw $e;
}
- $this->db->commit();
}
/*!\brief compute an array accordingly with the FormVenView function
* @return an array for filling the form
*/
- function compute_array()
+ function compute_array($p_od_id)
{
$count=0;
- $a_op=$this->operation->load();
- $array=$this->operation->compute_array($a_op);
- $p_array=$this->load();
- if ( empty ($p_array)) return array();
+ $array=array();
+ $p_array=$this->load($p_od_id);
+ if (empty($p_array)) return array();
foreach ($p_array as $row)
{
if ( $row['opd_debit']=='f')
@@ -128,19 +117,20 @@ class Pre_op_ach extends Pre_operation_detail
}
else
{
- if ( trim($row['opd_poste']) !="" )
+ if ( trim($row['opd_poste']) != "")
{
$array+=array("e_march".$count=>$row['opd_poste'],
- "e_march".$count."_price"=>$row['opd_amount'],
- "e_march".$count."_tva_id"=>$row['opd_tva_id'],
-
"e_march".$count."_tva_amount"=>$row['opd_tva_amount'],
- "e_quant".$count=>$row['opd_quantity']
- );
+ "e_march".$count."_price"=>$row['opd_amount'],
+ "e_march".$count."_tva_id"=>$row['opd_tva_id'],
+ "e_quant".$count=>$row['opd_quantity'],
+ "e_march".$count."_label"=>$row['opd_comment'],
+ "e_march".$count."_tva_amount"=>$row['opd_tva_amount'],
+ );
$count++;
}
}
- $array['nb_item']=$count;
}
+
return $array;
}
/**
@@ -148,263 +138,260 @@ class Pre_op_ach extends Pre_operation_detail
* load the data from the database and return an array
* \return an array
*/
- function load()
+ function load($p_od_id)
{
$sql="select opd_id,opd_poste,opd_amount,opd_tva_id,opd_debit,".
- " opd_quantity,opd_tva_amount from op_predef_detail where
od_id=".$this->operation->od_id.
- " order by opd_id";
- $res=$this->db->exec_sql($sql);
+ " opd_quantity , opd_comment,opd_tva_amount from op_predef_detail
where od_id= $1 ".
+ " order by opd_id";
+ $res=$this->db->exec_sql($sql,[$p_od_id]);
$array=Database::fetch_all($res);
return $array;
}
- function set_od_id($p_id)
- {
- $this->operation->od_id=$p_id;
- }
+
function display($p_array)
{
require_once NOALYSS_INCLUDE.'/class/acc_ledger_purchase.class.php';
global $g_parameter,$g_user;
- extract($p_array, EXTR_SKIP);
- $ledger=new Acc_Ledger_Purchase($this->db,$this->jrn_def_id);
- if ( $p_array != null ) extract($p_array, EXTR_SKIP);
-
- $flag_tva=$g_parameter->MY_TVA_USE;
- /* Add button */
- $f_add_button=new IButton('add_card');
- $f_add_button->label=_('Créer une nouvelle fiche');
- $f_add_button->tabindex=-1;
- $f_add_button->set_attribute('ipopup','ipop_newcard');
- $f_add_button->set_attribute('jrn',$this->jrn_def_id);
- $f_add_button->javascript="
this.jrn=\$('p_jrn').value;select_card_type(this);";
-
- $f_add_button2=new IButton('add_card2');
- $f_add_button2->tabindex=-1;
- $f_add_button2->label=_('Créer une nouvelle fiche');
- $f_add_button2->set_attribute('ipopup','ipop_newcard');
- $f_add_button2->set_attribute('filter',$ledger->get_all_fiche_def ());
- // $f_add_button2->set_attribute('jrn',$ledger->id);
- $f_add_button2->javascript="
this.jrn=\$('p_jrn').value;select_card_type(this);";
- $str_add_button="";
- $str_add_button2="";
- if ($g_user->check_action(FICADD)==1)
- {
- $str_add_button=$f_add_button->input();
- $str_add_button2=$f_add_button2->input();
- }
-
- $r="";
- $r.=dossier::hidden();
- $f_legend=_("En-tête facture fournisseur");
- $f_legend_detail=_("Détail articles acheté");
-
- // Ledger (p_jrn)
- //--
- /* if we suggest the next pj, then we need a javascript */
- $add_js="";
-
- // Display the customer
- //--
- $fiche='cred';
-
- // Save old value and set a new one
- //--
- $e_client=( isset ($e_client) )?$e_client:"";
- $e_client_label=" ";//str_pad("",100,".");
-
-
- // retrieve e_client_label
- //--
-
- if ( strlen(trim($e_client)) != 0)
- {
- $fClient=new Fiche($ledger->db);
- $fClient->get_by_qcode($e_client);
- $e_client_label=$fClient->strAttribut(ATTR_DEF_NAME).' '.
- ' Adresse :
'.$fClient->strAttribut(ATTR_DEF_ADRESS).' '.
- $fClient->strAttribut(ATTR_DEF_CP).' '.
- $fClient->strAttribut(ATTR_DEF_CITY).' ';
-
-
- }
-
- $W1=new ICard();
- $W1->label=_("Fournisseur ").Icon_Action::infobulle(0) ;
- $W1->name="e_client";
- $W1->tabindex=3;
- $W1->value=$e_client;
- $W1->table=0;
- $W1->set_dblclick("fill_ipopcard(this);");
- $W1->set_attribute('ipopup','ipopcard');
-
- // name of the field to update with the name of the card
- $W1->set_attribute('label','e_client_label');
- // name of the field to update with the name of the card
- $W1->set_attribute('typecard','cred');
-
- // Add the callback function to filter the card on the jrn
- $W1->set_callback('filter_card');
- $W1->set_function('fill_data');
- $W1->javascript=sprintf(' onchange="fill_data_onchange(\'%s\');" ',
- $W1->name);
- $f_client_qcode=$W1->input();
- $client_label=new ISpan();
- $client_label->table=0;
- $f_client=$client_label->input("e_client_label",$e_client_label);
- $f_client_bt=$W1->search();
-
-
- // Record the current number of article
- $min=$ledger->get_min_row();
- $p_article= ( isset ($nb_item))?$nb_item:$min;
- $max=($p_article < $min)?$min:$p_article;
-
- $e_comment=(isset($e_comment))?$e_comment:"";
- $Hid=new IHidden();
- $r.=$Hid->input("nb_item",$p_article);
- // For each article
- //--
- for ($i=0;$i< $max ;$i++)
- {
- // Code id, price & vat code
- //--
- $march=(isset(${"e_march$i"}))?${"e_march$i"}:""
;
-
$march_price=(isset(${"e_march".$i."_price"}))?${"e_march".$i."_price"}:""
- ;
- /* use vat */
- if ( $g_parameter->MY_TVA_USE=='Y')
- {
-
$march_tva_id=(isset(${"e_march$i"."_tva_id"}))?${"e_march$i"."_tva_id"}:"";
-
$march_tva_amount=(isset(${"e_march$i"."_tva_amount"}))?${"e_march$i"."_tva_amount"}:"";
- }
-
-
-
-
$march_label=(isset(${"e_march".$i."_label"}))?${"e_march".$i."_label"}:"";
- // retrieve the tva label and name
- //--
- if ( strlen(trim($march))!=0 && strlen(trim($march_label))==0 )
- {
- $fMarch=new Fiche($ledger->db);
- $fMarch->get_by_qcode($march);
- $march_label=$fMarch->strAttribut(ATTR_DEF_NAME);
- /* vat use */
- if ( ! isset($march_tva_id) && $g_parameter->MY_TVA_USE=='Y' )
- $march_tva_id=$fMarch->strAttribut(ATTR_DEF_TVA);
- }
- // Show input
- //--
- $W1=new ICard();
- $W1->label="";
- $W1->name="e_march".$i;
- $W1->value=$march;
- $W1->table=1;
- $W1->set_dblclick("fill_ipopcard(this);");
- $W1->set_attribute('ipopup','ipopcard');
-
- $W1->set_attribute('typecard','deb');
-
- // name of the field to update with the name of the card
- $W1->set_attribute('label','e_march'.$i.'_label');
- // name of the field with the price
- $W1->set_attribute('purchase','e_march'.$i.'_price'); /*
autocomplete */
- $W1->set_attribute('price','e_march'.$i.'_price'); /* via
search */
-
- // name of the field with the TVA_ID
- $W1->set_attribute('tvaid','e_march'.$i.'_tva_id');
- // Add the callback function to filter the card on the jrn
- $W1->set_callback('filter_card');
- $W1->set_function('fill_data');
- $W1->javascript=sprintf(' onchange="fill_data_onchange(\'%s\');" ',
- $W1->name);
- $W1->readonly=false;
- $array[$i]['quick_code']=$W1->input();
- $array[$i]['bt']=$W1->search();
-
- $array[$i]['hidden']='';
- // For computing we need some hidden field for holding the value
- if ( $g_parameter->MY_TVA_USE=='Y')
- {
- $array[$i]['hidden'].=HtmlInput::hidden('tva_march'.$i,0);
- }
-
- if ( $g_parameter->MY_TVA_USE=='Y')
- $tvac=new INum('tvac_march'.$i);
- else
- $tvac=new IHidden('tvac_march'.$i);
-
- $tvac->readOnly=1;
- $tvac->value=0;
- $array[$i]['tvac']=$tvac->input();
-
- $htva=new INum('htva_march'.$i);
- $htva->readOnly=1;
-
- $htva->value=0;
- $array[$i]['htva']=$htva->input();
-
- if ( $g_parameter->MY_UPDLAB == 'Y')
- {
- $Span=new IText("e_march".$i."_label");
- $Span->css_size="100%";
- } else
- {
- $Span=new ISpan("e_march".$i."_label");
- }
- $Span->value=$march_label;
- $Span->setReadOnly(false);
- // card's name, price
- //--
-
$array[$i]['denom']=$Span->input("e_march".$i."_label",$march_label);
- // price
- $Price=new INum();
- $Price->prec=4;
- $Price->setReadOnly(false);
- $Price->size=9;
-
$Price->javascript="onBlur='format_number(this);clean_tva($i);compute_ledger($i)'";
- $array[$i]['pu']=$Price->input("e_march".$i."_price",$march_price);
- if ( $g_parameter->MY_TVA_USE=='Y')
- {
-
- // vat label
- //--
- $Tva=new ITva_Popup($ledger->db);
-
$Tva->js="onblur=\"format_number(this);onChange=clean_tva($i);compute_ledger($i)\"";
- $Tva->in_table=true;
- $Tva->set_attribute('compute',$i);
- $Tva->value=$march_tva_id;
- $array[$i]['tva']=$Tva->input("e_march$i"."_tva_id");
-
- // Tva_amount
-
- // price
- $Tva_amount=new INum();
- $Tva_amount->setReadOnly(false);
- $Tva_amount->size=9;
-
$Tva_amount->javascript="onBlur='format_number(this);compute_ledger($i)'";
-
$array[$i]['amount_tva']=$Tva_amount->input("e_march".$i."_tva_amount",$march_tva_amount);
- }
- // quantity
- //--
- $quant=(isset(${"e_quant$i"}))?${"e_quant$i"}:"1"
- ;
- $Quantity=new INum();
- $Quantity->setReadOnly(false);
- $Quantity->size=9;
-
$Quantity->javascript="onChange=format_number(this);clean_tva($i);compute_ledger($i)";
- $array[$i]['quantity']=$Quantity->input("e_quant".$i,$quant);
-
- }
- $f_type=_('Fournisseur');
-
- ob_start();
- require_once NOALYSS_TEMPLATE.'/predf_ledger_detail.php';
- $r.=ob_get_contents();
- ob_end_clean();
-
- // Set correctly the REQUEST param for jrn_type
- $r.= HtmlInput::hidden('jrn_type','ACH');
- $r.= Html_Input_Noalyss::ledger_add_item("O");
+ $ledger=new Acc_Ledger_Purchase($this->db,$p_array['p_jrn']);
+
+ $flag_tva=$g_parameter->MY_TVA_USE;
+ /* Add button */
+ $f_add_button=new IButton('add_card');
+ $f_add_button->tabindex=-1;
+ $f_add_button->label=_('Créer une nouvelle fiche');
+ $f_add_button->set_attribute('ipopup','ipop_newcard');
+ $f_add_button->set_attribute('jrn',$p_array['p_jrn']);
+ $f_add_button->javascript="this.jrn=\$('p_jrn').value;
select_card_type(this);";
+
+ $f_add_button2=new IButton('add_card2');
+ $f_add_button2->tabindex=-1;
+ $f_add_button2->label=_('Créer une nouvelle fiche');
+ $f_add_button2->set_attribute('ipopup','ipop_newcard');
+ $f_add_button2->set_attribute('filter',$ledger->get_all_fiche_def ());
+ // $f_add_button2->set_attribute('jrn',$ledger->id);
+ $f_add_button2->javascript="
this.jrn=\$('p_jrn').value;select_card_type(this);";
+
+ $str_add_button="";
+ $str_add_button2="";
+ if ($g_user->check_action(FICADD)==1)
+ {
+ $str_add_button=$f_add_button->input();
+ $str_add_button2=$f_add_button2->input();
+ }
+
+ $r='';
+ $r.=dossier::hidden();
+ $f_legend=_('En-tête facture fournisseur');
+
+
+ /* if we suggest the next pj, then we need a javascript */
+
+ // Display the customer
+ //--
+ $fiche='deb';
+
+ // Save old value and set a new one
+ //--
+ $e_client=( isset ($p_array["e_client"]) )?$p_array["e_client"]:"";
+ $e_client_label=" ";//str_pad("",100,".");
+
+
+ // retrieve e_client_label
+ //--
+
+ if ( strlen(trim($e_client)) != 0)
+ {
+ $fClient=new Fiche($ledger->db);
+ $fClient->get_by_qcode($e_client);
+ $e_client_label=$fClient->strAttribut(ATTR_DEF_NAME).' '.
+ ' Adresse : '.$fClient->strAttribut(ATTR_DEF_ADRESS).' '.
+ $fClient->strAttribut(ATTR_DEF_CP).' '.
+ $fClient->strAttribut(ATTR_DEF_CITY).' ';
+
+
+ }
+
+ $W1=new ICard();
+ $W1->label="Client ".Icon_Action::infobulle(0) ;
+ $W1->name="e_client";
+ $W1->tabindex=3;
+ $W1->value=$e_client;
+ $W1->table=0;
+ $W1->set_dblclick("fill_ipopcard(this);");
+ $W1->set_attribute('ipopup','ipopcard');
+
+ // name of the field to update with the name of the card
+ $W1->set_attribute('label','e_client_label');
+ // name of the field to update with the name of the card
+ $W1->set_attribute('typecard','cred');
+
+ // Add the callback function to filter the card on the jrn
+ $W1->set_callback('filter_card');
+ $W1->set_function('fill_data');
+ $W1->javascript=sprintf(' onchange="fill_data_onchange(\'%s\');" ',
+ $W1->name);
+ $f_client_qcode=$W1->input();
+ $client_label=new ISpan();
+ $client_label->table=0;
+ $f_client=$client_label->input("e_client_label",$e_client_label);
+ $f_client_bt=$W1->search();
+
+
+ // Record the current number of article
+ $min=$ledger->get_min_row();
+ $p_article= ( isset ($p_array["nb_item"]))?$p_array["nb_item"]:$min;
+ $max=($p_article < $min)?$min:$p_article;
+
+ $e_comment=(isset($p_array["e_comment"]))?$p_array["e_comment"]:"";
+ $Hid=new IHidden();
+ $r.=$Hid->input("nb_item",$p_article);
+
+ $f_legend_detail=_("Détail articles achetés");
+
+ // For each article
+ //--
+ for ($i=0;$i< $max;$i++)
+ {
+ // Code id, price & vat code
+ //--
+ $march=(isset($p_array["e_march$i"]))?$p_array["e_march$i"]:""
+ ;
+
$march_price=(isset($p_array["e_march".$i."_price"]))?$p_array["e_march".$i."_price"]:""
+ ;
+ if ( $flag_tva=='Y')
+ {
+
$march_tva_id=(isset($p_array["e_march$i"."_tva_id"]))?$p_array["e_march$i"."_tva_id"]:"";
+
$march_tva_amount=(isset($p_array["e_march$i"."_tva_amount"]))?$p_array["e_march$i"."_tva_amount"]:"";
+ }
+
$march_label=(isset($p_array["e_march".$i."_label"]))?$p_array["e_march".$i."_label"]:"";
+
+ // retrieve the tva label and name
+ //--
+ if ( strlen(trim($march))!=0 && strlen(trim($march_label))==0)
+ {
+ $fMarch=new Fiche($ledger->db);
+ $fMarch->get_by_qcode($march);
+ $march_label=$fMarch->strAttribut(ATTR_DEF_NAME);
+ if ( $flag_tva=='Y')
+ {
+ if ( ! (isset($p_array["e_march$i"."_tva_id"])))
+ $march_tva_id=$fMarch->strAttribut(ATTR_DEF_TVA);
+ }
+ }
+ // Show input
+ //--
+ $W1=new ICard();
+ $W1->label="";
+ $W1->name="e_march".$i;
+ $W1->value=$march;
+ $W1->table=1;
+ $W1->set_attribute('typecard','deb');
+ $W1->set_dblclick("fill_ipopcard(this);");
+ $W1->set_attribute('ipopup','ipopcard');
+
+ // name of the field to update with the name of the card
+ $W1->set_attribute('label','e_march'.$i.'_label');
+ // name of the field with the price
+ $W1->set_attribute('price','e_march'.$i.'_price');
+ // name of the field with the TVA_ID
+ $W1->set_attribute('tvaid','e_march'.$i.'_tva_id');
+ // Add the callback function to filter the card on the jrn
+ $W1->set_callback('filter_card');
+ $W1->set_function('fill_data');
+ $W1->javascript=sprintf(' onchange="fill_data_onchange(\'%s\');" ',
+ $W1->name);
+
+ $W1->readonly=false;
+
+ $array[$i]['quick_code']=$W1->input();
+ $array[$i]['bt']=$W1->search();
+ // For computing we need some hidden field for holding the value
+ $array[$i]['hidden']='';
+ if ( $flag_tva=='Y')
$array[$i]['hidden'].=HtmlInput::hidden('tva_march'.$i,0);
+
+ $htva=new INum('htva_march'.$i);
+ $htva->readOnly=1;
+ $htva->value=0;
+ $array[$i]['htva']=$htva->input();
+
+ if ( $g_parameter->MY_TVA_USE=='Y')
+ $tvac=new INum('tvac_march'.$i);
+ else
+ $tvac=new IHidden('tvac_march'.$i);
+
+ $tvac->readOnly=1;
+ $tvac->value=0;
+ $array[$i]['tvac']=$tvac->input();
+
+ if ( $g_parameter->MY_UPDLAB == 'Y')
+ {
+ $Span=new IText("e_march".$i."_label");
+
+ $Span->css_size="100%";
+ } else
+ {
+ $Span=new ISpan("e_march".$i."_label");
+ }
+ $Span->value=$march_label;
+ $Span->setReadOnly(false);
+ // card's name, price
+ //--
+
$array[$i]['denom']=$Span->input("e_march".$i."_label",$march_label);
+ // price
+ $Price=new INum();
+ $Price->setReadOnly(false);
+ $Price->prec=4;
+ $Price->size=9;
+
$Price->javascript="onBlur='format_number(this);clean_tva($i);compute_ledger($i)'";
+ $array[$i]['pu']=$Price->input("e_march".$i."_price",$march_price);
+ $array[$i]['tva']='';
+ $array[$i]['amount_tva']='';
+ // if tva is not needed then no tva field
+ if ( $flag_tva == 'Y' )
+ {
+ // vat label
+ //--
+ $Tva=new ITva_Popup($ledger->db);
+ $Tva->in_table=true;
+ $Tva->set_attribute('compute',$i);
+
+
$Tva->js='onblur="format_number(this);clean_tva('.$i.');compute_ledger('.$i.')"';
+ $Tva->value=$march_tva_id;
+ $array[$i]['tva']=$Tva->input("e_march$i"."_tva_id");
+ // vat amount
+ //--
+ $wTva_amount=new INum();
+ $wTva_amount->readOnly=false;
+ $wTva_amount->size=6;
+
$wTva_amount->javascript="onBlur='format_number(this);compute_ledger($i)'";
+
$array[$i]['amount_tva']=$wTva_amount->input("e_march".$i."_tva_amount",$march_tva_amount);
+ }
+ // quantity
+ //--
+ $quant=(isset($p_array["e_quant$i"]))?$p_array["e_quant$i"]:"1"
+ ;
+ $Quantity=new INum();
+ $Quantity->setReadOnly(false);
+ $Quantity->size=8;
+
$Quantity->javascript="onChange='format_number(this);clean_tva($i);compute_ledger($i)'";
+ $array[$i]['quantity']=$Quantity->input("e_quant".$i,$quant);
+
+ }// foreach article
+ $f_type=_('Client');
+
+
+ ob_start();
+ require_once NOALYSS_TEMPLATE.'/predf_ledger_detail.php';
+ $r.=ob_get_contents();
+ ob_end_clean();
+
+
+
+ // Set correctly the REQUEST param for jrn_type
+ $r.=HtmlInput::hidden('jrn_type','ACH');
+ $r.= Html_Input_Noalyss::ledger_add_item("O");
+
+ return $r;
return $r;
}
diff --git a/include/class/pre_op_advanced.class.php
b/include/class/pre_op_advanced.class.php
index 3d78bc9..8c08e70 100644
--- a/include/class/pre_op_advanced.class.php
+++ b/include/class/pre_op_advanced.class.php
@@ -29,18 +29,16 @@ require_once
NOALYSS_INCLUDE.'/class/pre_operation.class.php';
*/
class Pre_Op_Advanced extends Pre_operation_detail
{
- var $op;
function __construct($cn)
{
parent::__construct($cn);
- $this->operation->od_direct='t';
}
function get_post()
{
- parent::get_post();
- $http=new HttpInput();
+ $http = new \HttpInput();
+ $nb = $http->post("nb_item", "number");
- for ($i=0;$i<$this->operation->nb_item;$i++)
+ for ($i=0;$i<$nb;$i++)
{
$poste=$http->post("poste".$i,"string", null);
$qcode=$http->post("qc_".$i,"string", null);
@@ -54,10 +52,14 @@ class Pre_Op_Advanced extends Pre_operation_detail
}
if ( $qcode != null && trim ($qcode) != "") {
- $this->{'isqc'.$i}=(trim($_POST['qc_'.$i]) != "")?'t':'f';
+ $this->{'isqc'.$i}=(trim($http->post('qc_'.$i)) != "")?'t':'f';
$this->{'poste'.$i}=trim ($qcode);
- }
- $this->{"amount".$i}=$_POST['amount'.$i];
+ }
+ $http->set_empty(0);
+ $this->{"amount".$i}=$http->post('amount'.$i);
+ $http->set_empty("");
+ $this->{"ld".$i}=$http->post("ld".$i);
+
$this->{"ck".$i}=(isset($_POST['ck'.$i]))?'t':'f';
}
@@ -66,60 +68,53 @@ class Pre_Op_Advanced extends Pre_operation_detail
* \brief save the detail and op in the database
*
*/
- function save()
+ function save($p_od_id,$p_nb_item)
{
try
{
- if ($this->operation->save() == false )
- return;
- $this->db->start();
// save the selling
- for ($i=0;$i<$this->operation->nb_item;$i++)
+ for ($i=0;$i<$p_nb_item;$i++)
{
if ( ! isset ($this->{"poste".$i}))
continue;
$sql=sprintf('insert into op_predef_detail
(opd_poste,opd_amount,'.
- 'opd_debit,od_id,opd_qc)'.
- ' values '.
- "('%s',%.2f,'%s',%d,'%s')",
- $this->{"poste".$i},
- $this->{"amount".$i},
- $this->{"ck".$i},
- $this->operation->od_id,
- $this->{'isqc'.$i}
+ 'opd_debit,od_id,opd_qc,opd_comment)'.
+ ' values($1,$2,$3,$4,$5,$6) '
);
- $this->db->exec_sql($sql);
+ $this->db->exec_sql($sql,[$this->{"poste".$i},
+ $this->{"amount".$i},
+ $this->{"ck".$i},
+ $p_od_id,
+ $this->{'isqc'.$i},
+ $this->{"ld".$i}]);
}
- $this->db->commit();
-
+
}
catch (Exception $e)
{
- record_log($e);
- echo ($e->getMessage());
- $this->db->rollback();
+ record_log($e->getMessage().$e->getTraceAsString());
+ throw $e;
}
}
/*!\brief compute an array accordingly with the FormVenView function
*/
- function compute_array()
+ function compute_array($p_od_id)
{
$count=0;
- $a_op=$this->operation->load();
- $array=$this->operation->compute_array($a_op);
- $array['desc']=$array['e_comm'];
- $p_array=$this->load();
+ $array=array();
+ $p_array=$this->load($p_od_id);
if (empty($p_array)) return array();
foreach ($p_array as $row)
{
$tmp_array=array("qc_".$count=>'',
"poste".$count=>'',
"amount".$count=>$row['opd_amount'],
- 'ck'.$count=>$row['opd_debit']
+ 'ck'.$count=>$row['opd_debit'],
+ "ld".$count=>$row['opd_comment']
);
if ( $row['opd_qc'] == 't' )
@@ -141,28 +136,22 @@ class Pre_Op_Advanced extends Pre_operation_detail
/*!\brief load the data from the database and return an array
* \return an array
*/
- function load()
+ function load($p_od_id)
{
- $sql="select opd_id,opd_poste,opd_amount,opd_debit,".
- " opd_qc from op_predef_detail where
od_id=".$this->operation->od_id.
+ $sql="select opd_id,opd_poste,opd_amount,opd_debit,opd_comment,".
+ " opd_qc from op_predef_detail where od_id=$1 ".
" order by opd_id";
- $res=$this->db->exec_sql($sql);
+ $res=$this->db->exec_sql($sql,[$p_od_id]);
$array=Database::fetch_all($res);
return $array;
}
- function set_od_id($p_id)
- {
- $this->operation->od_id=$p_id;
- }
- function display($p_array)
+ function display($p_array)
{
global $g_parameter, $g_user;
require_once NOALYSS_INCLUDE.'/class/acc_ledger.class.php';
- $legder=new Acc_Ledger($this->db,$this->jrn_def_id);
+ $legder=new Acc_Ledger($this->db,$p_array['p_jrn']);
$legder->nb=$legder->get_min_row();
- if ($p_array != null)
- extract($p_array, EXTR_SKIP);
$add_js = "";
$ret = "";
@@ -177,10 +166,10 @@ class Pre_Op_Advanced extends Pre_operation_detail
$f_add_button->input();
}
- $nb_row = (isset($nb_item) ) ? $nb_item : $legder->nb;
+ $nb_row = (isset($p_array['nb_item']) ) ? $p_array['nb_item' ]:
$legder->nb;
$ret.=HtmlInput::hidden('nb_item', $nb_row);
- $ret.=HtmlInput::hidden('p_jrn', $this->jrn_def_id);
+ $ret.=HtmlInput::hidden('p_jrn', $p_array['p_jrn']);
$ret.=dossier::hidden();
$ret.=dossier::hidden();
@@ -220,7 +209,7 @@ class Pre_Op_Advanced extends Pre_operation_detail
$quick_code->javascript = sprintf('
onchange="fill_data_onchange(\'%s\');" ', $quick_code->name);
$quick_code->jrn = $legder->id;
- $quick_code->value = (isset(${'qc_' . $i})) ? ${'qc_' . $i} :
"";
+ $quick_code->value = (isset($p_array['qc_' . $i])) ?
$p_array['qc_' . $i]: "";
$label = '';
if ($quick_code->value != '')
@@ -240,7 +229,7 @@ class Pre_Op_Advanced extends Pre_operation_detail
$poste->set_attribute('account', 'poste' . $i);
$poste->set_attribute('dossier', Dossier::id());
- $poste->value = (isset(${'poste' . $i})) ? ${"poste" . $i} : ''
+ $poste->value = (isset($p_array['poste' . $i]))
?$p_array['poste' . $i]: ''
;
$poste->dbl_click_history();
@@ -256,20 +245,20 @@ class Pre_Op_Advanced extends Pre_operation_detail
$line_desc = new IText();
$line_desc->name = 'ld' . $i;
$line_desc->size = 30;
- $line_desc->value = (isset(${"ld" . $i})) ? ${"ld" . $i} :
+ $line_desc->value = (isset($p_array["ld" . $i])) ?
$p_array["ld" . $i] :
$label;
// Amount
$amount = new INum();
$amount->size = 10;
$amount->name = 'amount' . $i;
- $amount->value = (isset(${'amount' . $i})) ? ${"amount" . $i}
: ''
+ $amount->value = (isset($p_array['amount' . $i]))
?$p_array['amount' . $i] : ''
;
$amount->javascript = '
onChange="format_number(this);checkTotalDirect()"';
// D/C
$deb = new ICheckBox();
$deb->name = 'ck' . $i;
- $deb->selected = (isset(${'ck' . $i})) ? true : false;
+ $deb->selected = (isset($p_array['ck' . $i])) ? true : false;
$deb->javascript = ' onChange="checkTotalDirect()"';
$ret.='<tr>';
diff --git a/include/class/pre_op_ods.class.php
b/include/class/pre_op_ods.class.php
index 1130e62..9b1d869 100644
--- a/include/class/pre_op_ods.class.php
+++ b/include/class/pre_op_ods.class.php
@@ -30,22 +30,23 @@ require_once
NOALYSS_INCLUDE.'/class/pre_operation.class.php';
class Pre_op_ods extends Pre_operation_detail
{
var $op;
- function __construct($cn,$p_id=0)
+ function __construct($cn)
{
- parent::__construct($cn,$p_id);
- $this->operation->od_direct='f';
+ parent::__construct($cn);
}
+ /***
+ * @brief retrieve data from $_POST
+ */
function get_post()
{
- parent::get_post();
- $this->operation->od_direct='f';
- for ($i=0;$i<$this->operation->nb_item;$i++)
+ $http=new \HttpInput();
+ $nb=$http->post("nb_item","number");
+ for ($i=0;$i< $nb ;$i++)
{
-
- $this->{"e_account".$i}=$_POST['e_account'.$i];
- $this->{"e_account".$i."_amount"}=$_POST['e_account'.$i."_amount"];
- $this->{"e_account".$i."_type"}=$_POST['e_account'.$i."_type"];
+ $this->{"e_account".$i}=$http->post("e_account'.$i");
+
$this->{"e_account".$i."_amount"}=$http->post("e_account".$i."_amount","number",0);
+
$this->{"e_account".$i."_type"}=$http->post('e_account'.$i."_type");
}
}
@@ -53,45 +54,38 @@ class Pre_op_ods extends Pre_operation_detail
* \brief save the detail and op in the database
*
*/
- function save()
+ function save($p_od_id,$p_nbitem)
{
try
{
- $this->db->start();
- if ($this->operation->save() == false )
- return;
-
// save the selling
- for ($i=0;$i<$this->operation->nb_item;$i++)
+ for ($i=0;$i< $p_nbitem ;$i++)
{
- $sql=sprintf('insert into op_predef_detail
(opd_poste,opd_amount,'.
+ $sql='insert into op_predef_detail (opd_poste,opd_amount,'.
'opd_debit,od_id)'.
- ' values '.
- "('%s',%.2f,'%s',%d)",
- $this->{"e_account".$i},
- $this->{"e_account".$i."_amount"},
- ($this->{"e_account".$i."_type"}=='d')?'t':'f',
- $this->operation->od_id
- );
- $this->db->exec_sql($sql);
+ ' values ($1,$2,$3,$4)';
+
+ $this->db->exec_sql($sql,array($this->{"e_account".$i},
+
$this->{"e_account".$i."_amount"},
+
($this->{"e_account".$i."_type"}=='d')?'t':'f',
+ $p_od_id)
+ );
}
}
catch (Exception $e)
{
- record_log($e);
+ record_log($e);
echo ($e->getMessage());
- $this->db->rollback();
+ throw $e;
}
}
/*!\brief compute an array accordingly with the FormVenView function
*/
- function compute_array()
+ function compute_array($p_od_id)
{
$count=0;
- $a_op=$this->operation->load();
- $array=$this->operation->compute_array($a_op);
- $p_array=$this->load();
+ $p_array=$this->load($p_od_id);
foreach ($p_array as $row)
{
$c=($row['opd_debit']=='t')?'d':'c';
@@ -107,17 +101,13 @@ class Pre_op_ods extends Pre_operation_detail
/*!\brief load the data from the database and return an array
* \return an array
*/
- function load()
+ function load($p_od_id)
{
$sql="select opd_id,opd_poste,opd_amount,opd_debit".
- " from op_predef_detail where od_id=".$this->operation->od_id.
+ " from op_predef_detail where od_id= $1 ".
" order by opd_debit, opd_id,opd_amount";
- $res=$this->db->exec_sql($sql);
+ $res=$this->db->exec_sql($sql,array($p_od_id));
$array=Database::fetch_all($res);
return $array;
}
- function set_od_id($p_id)
- {
- $this->operation->od_id=$p_id;
- }
}
diff --git a/include/class/pre_op_ven.class.php
b/include/class/pre_op_ven.class.php
index 3d97c06..fbb0cbc 100644
--- a/include/class/pre_op_ven.class.php
+++ b/include/class/pre_op_ven.class.php
@@ -29,53 +29,49 @@ require_once
NOALYSS_INCLUDE.'/class/pre_operation.class.php';
*/
class Pre_op_ven extends Pre_operation_detail
{
- var $op;
//< Pre_operation
- function __construct($cn,$p_id=0)
+ function __construct($cn)
{
- parent::__construct($cn,$p_id);
- $this->operation->od_direct='f'; //< Pre_operation
+ parent::__construct($cn);
}
function get_post()
{
- parent::get_post();
- $this->operation->od_direct='f';
- $this->e_client=$_POST['e_client'];
- for ($i=0;$i<$this->operation->nb_item;$i++)
+ $http=new \HttpInput();
+ $nb=$http->post("nb_item","number");
+ $this->e_client=$http->post("e_client");
+ for ($i=0;$i< $nb;$i++)
{
$march="e_march".$i;
- $this->$march=$_POST['e_march'.$i];
- $this->{"e_march".$i."_price"}=$_POST['e_march'.$i."_price"];
-
$this->{"e_march".$i."_tva_id"}=(isset($_POST['e_march'.$i."_tva_id"]))?$_POST['e_march'.$i."_tva_id"]:0;
-
$this->{"e_march".$i."_tva_amount"}=(isset($_POST['e_march'.$i."_tva_amount"]))?$_POST['e_march'.$i."_tva_amount"]:0;
-
$this->{"e_march".$i."_tva_id"}=(isset($_POST['e_march'.$i."_tva_id"]))?$_POST['e_march'.$i."_tva_id"]:0;
-
$this->{"e_march".$i."_label"}=(isset($_POST['e_march'.$i."_label"]))?$_POST['e_march'.$i."_label"]:null;
- $this->{"e_quant".$i}=$_POST['e_quant'.$i];
-
+ $http->set_empty("");
+ $this->$march=$http->post('e_march'.$i);
+
$this->{"e_march".$i."_tva_id"}=$http->post('e_march'.$i."_tva_id","string",0);
+
$this->{"e_march".$i."_tva_id"}=$http->post('e_march'.$i."_tva_id","string","0");
+
$this->{"e_march".$i."_label"}=$http->post('e_march'.$i."_label","string","");
+
+ $http->set_empty(0);
+
$this->{"e_march".$i."_price"}=$http->post('e_march'.$i."_price","number");
+
$this->{"e_march".$i."_tva_amount"}=$http->post('e_march'.$i."_tva_amount","number","0");
+ $this->{"e_quant".$i}=$http->post('e_quant'.$i,"number");
}
}
/*!
* \brief save the detail and op in the database
*
*/
- function save()
+ function save($p_od_id,$p_nb_item)
{
try
{
- $this->db->start();
- if ($this->operation->save() == false )
- return;
// save the client
$sql=sprintf('insert into op_predef_detail
(od_id,opd_poste,opd_debit)'.
- ' values '.
- "(%d,'%s','%s')",
- $this->operation->od_id,
- $this->e_client,
- "t");
+ ' values '.
+ "(%d,'%s','%s')",
+ $p_od_id,
+ $this->e_client,
+ "t");
$this->db->exec_sql($sql);
- // save the selling
- for ($i=0;$i<$this->operation->nb_item;$i++)
+ for ($i=0;$i<$p_nb_item;$i++)
{
if ( strlen(trim($this->{"e_march".$i}))=="") continue;
$sql= 'insert into op_predef_detail (opd_poste,'
@@ -94,7 +90,7 @@ class Pre_op_ven extends Pre_operation_detail
$this->{"e_march".$i."_tva_id"},
$this->{"e_quant".$i},
'f',
- $this->operation->od_id,
+ $p_od_id,
$this->{"e_march".$i."_tva_amount"},
$this->{"e_march".$i."_label"},
));
@@ -102,21 +98,17 @@ class Pre_op_ven extends Pre_operation_detail
}
catch (Exception $e)
{
- record_log($e);
- echo ($e->getMessage());
- $this->db->rollback();
+ record_log("PREOPVEN01".$e->getMessage().$e->getTraceAsString());
+ throw $e;
}
- $this->db->commit();
-
}
/*!\brief compute an array accordingly with the FormVenView function
*/
- function compute_array()
+ function compute_array($p_od_id)
{
$count=0;
- $a_op=$this->operation->load();
- $array=$this->operation->compute_array($a_op);
- $p_array=$this->load();
+ $array=array();
+ $p_array=$this->load($p_od_id);
if (empty($p_array)) return array();
foreach ($p_array as $row)
{
@@ -139,37 +131,33 @@ class Pre_op_ven extends Pre_operation_detail
}
}
}
- // Find the ledger
- $ledger=new Acc_Ledger($this->db,$this->operation->jrn_def_id);
- // Find the max line of the ledger
- $max_row=$ledger->get_min_row();
-
- // compute nb_item
- $array['nb_item']=($max_row > $count)?$max_row:$count;
+
return $array;
}
/*!\brief load the data from the database and return an array
* \return an array
*/
- function load()
+ function load($p_od_id)
{
$sql="select opd_id,opd_poste,opd_amount,opd_tva_id,opd_debit,".
- " opd_quantity , opd_comment,opd_tva_amount from op_predef_detail
where od_id=".$this->operation->od_id.
+ " opd_quantity , opd_comment,opd_tva_amount from op_predef_detail
where od_id= $1 ".
" order by opd_id";
- $res=$this->db->exec_sql($sql);
+ $res=$this->db->exec_sql($sql,[$p_od_id]);
$array=Database::fetch_all($res);
return $array;
}
- function set_od_id($p_id)
- {
- $this->operation->od_id=$p_id;
- }
+
+ /**
+ * @param array $p_array
+ * @return string
+ * @throws Exception
+ */
function display($p_array)
{
global $g_parameter,$g_user;
- if ( $p_array != null ) extract($p_array, EXTR_SKIP);
+
require_once NOALYSS_INCLUDE.'/class/acc_ledger_sold.class.php';
- $ledger=new Acc_Ledger_Sold($this->db,$this->jrn_def_id);
+ $ledger=new Acc_Ledger_Sold($this->db,$p_array['p_jrn']);
$flag_tva=$g_parameter->MY_TVA_USE;
/* Add button */
@@ -177,7 +165,7 @@ class Pre_op_ven extends Pre_operation_detail
$f_add_button->tabindex=-1;
$f_add_button->label=_('Créer une nouvelle fiche');
$f_add_button->set_attribute('ipopup','ipop_newcard');
- $f_add_button->set_attribute('jrn',$ledger->id);
+ $f_add_button->set_attribute('jrn',$p_array['p_jrn']);
$f_add_button->javascript="this.jrn=\$('p_jrn').value;
select_card_type(this);";
$f_add_button2=new IButton('add_card2');
@@ -209,7 +197,7 @@ class Pre_op_ven extends Pre_operation_detail
// Save old value and set a new one
//--
- $e_client=( isset ($e_client) )?$e_client:"";
+ $e_client=( isset ($p_array["e_client"]) )?$p_array["e_client"]:"";
$e_client_label=" ";//str_pad("",100,".");
@@ -256,10 +244,10 @@ class Pre_op_ven extends Pre_operation_detail
// Record the current number of article
$min=$ledger->get_min_row();
- $p_article= ( isset ($nb_item))?$nb_item:$min;
+ $p_article= ( isset ($p_array["nb_item"]))?$p_array["nb_item"]:$min;
$max=($p_article < $min)?$min:$p_article;
- $e_comment=(isset($e_comment))?$e_comment:"";
+ $e_comment=(isset($p_array["e_comment"]))?$p_array["e_comment"]:"";
$Hid=new IHidden();
$r.=$Hid->input("nb_item",$p_article);
@@ -271,16 +259,16 @@ class Pre_op_ven extends Pre_operation_detail
{
// Code id, price & vat code
//--
- $march=(isset(${"e_march$i"}))?${"e_march$i"}:""
+ $march=(isset($p_array["e_march$i"]))?$p_array["e_march$i"]:""
;
-
$march_price=(isset(${"e_march".$i."_price"}))?${"e_march".$i."_price"}:""
+
$march_price=(isset($p_array["e_march".$i."_price"]))?$p_array["e_march".$i."_price"]:""
;
if ( $flag_tva=='Y')
{
-
$march_tva_id=(isset(${"e_march$i"."_tva_id"}))?${"e_march$i"."_tva_id"}:"";
-
$march_tva_amount=(isset(${"e_march$i"."_tva_amount"}))?${"e_march$i"."_tva_amount"}:"";
+
$march_tva_id=(isset($p_array["e_march$i"."_tva_id"]))?$p_array["e_march$i"."_tva_id"]:"";
+
$march_tva_amount=(isset($p_array["e_march$i"."_tva_amount"]))?$p_array["e_march$i"."_tva_amount"]:"";
}
-
$march_label=(isset(${"e_march".$i."_label"}))?${"e_march".$i."_label"}:"";
+
$march_label=(isset($p_array["e_march".$i."_label"]))?$p_array["e_march".$i."_label"]:"";
// retrieve the tva label and name
//--
@@ -291,7 +279,7 @@ class Pre_op_ven extends Pre_operation_detail
$march_label=$fMarch->strAttribut(ATTR_DEF_NAME);
if ( $flag_tva=='Y')
{
- if ( ! (isset(${"e_march$i"."_tva_id"})))
+ if ( ! (isset($p_array["e_march$i"."_tva_id"])))
$march_tva_id=$fMarch->strAttribut(ATTR_DEF_TVA);
}
}
@@ -385,7 +373,7 @@ class Pre_op_ven extends Pre_operation_detail
}
// quantity
//--
- $quant=(isset(${"e_quant$i"}))?${"e_quant$i"}:"1"
+ $quant=(isset($p_array["e_quant$i"]))?$p_array["e_quant$i"]:"1"
;
$Quantity=new INum();
$Quantity->setReadOnly(false);
diff --git a/include/class/pre_operation.class.php
b/include/class/pre_operation.class.php
index 8243b58..28a35f4 100644
--- a/include/class/pre_operation.class.php
+++ b/include/class/pre_operation.class.php
@@ -34,19 +34,29 @@ require_once NOALYSS_INCLUDE.'/class/pre_op_ven.class.php';
require_once NOALYSS_INCLUDE.'/class/pre_op_advanced.class.php';
class Pre_operation
{
- var $db; /*!< $db database
connection */
- var $nb_item; /*!< $nb_item nb of
item */
- var $p_jrn; /*!< $p_jrn jrn_def_id
*/
- var $jrn_type; /*!< $jrn_type */
- var $name; /*!< $name name of the
predef. operation */
- var $detail; /*!< Pre_operation_detail */
-
+ private $db; /*!< $db
database connection */
+ private $nb_item; /*!< $nb_item nb of
item */
+ private $p_jrn; /*!< $p_jrn jrn_def_id
*/
+ private $jrn_type; /*!< $jrn_type
*/
+ private $name; /*!< $name name
of the predef. operation */
+ private $detail; /*!< Pre_operation_detail object */
+ private $od_direct ; /*!< Compatibility for ACH in direct mode, only
for ODS */
+ private $od_id; /*!< id of the Predefined Operation */
+ private $isloaded;
+ private $description; /*!< description of the predefined operation */
function __construct($cn,$p_id=0)
{
$this->db=$cn;
- $this->od_direct='false';
+ $this->od_direct='f';
$this->od_id=$p_id;
+ $this->p_jrn=0;
+ $this->jrn_type='x';
+ $this->name='';
+ $this->isloaded=false;
+ $this->description="";
+
}
+
/**
* @brief Propose to save the operation into a predefined operation
* @return HTML string
@@ -56,7 +66,7 @@ class Pre_operation
$r.= '<p class="decale">';
$r.= _("Donnez un nom pour sauver cette opération comme modèle")."
<br>";
$opd_name = new IText('opd_name');
- $r.= "Nom du modèle " . $opd_name->input();
+ $r.=_( "Nom du modèle " ) . $opd_name->input();
$opd_description=new ITextarea('od_description');
$opd_description->style=' class="itextarea"
style="width:30em;height:4em;vertical-align:top"';
$r.='</p>';
@@ -67,6 +77,21 @@ class Pre_operation
$r.='</p>';
return $r;
}
+ /**
+ * @return string
+ */
+ public function get_description()
+ {
+ return $this->description;
+ }/**
+ * @param string $description
+ */
+ public function set_description($description)
+ {
+ $this->description = $description;
+ return $this;
+ }
+
/*!\brief fill the object with the $_POST variable */
function get_post()
@@ -77,29 +102,55 @@ class Pre_operation
$this->jrn_type=$http->post('jrn_type');
$this->name=$http->post('opd_name');
- $this->name=(trim($this->name)=='')?$http->post('e_comm'):$this->name;
$this->description= $http->post('od_description');
if ( $this->name=="")
{
$n=$this->db->get_next_seq('op_def_op_seq');
$this->name=$this->jrn_type.$n;
- // common value
+
}
+
+ // get also info for the details
+ // common value
+
$this->detail=Pre_operation_detail::build_detail($this->jrn_type,$this->db);
+ $this->detail->get_post();
}
+
+ /**
+ * delete a template operation and children
+ */
function delete ()
{
$sql="delete from op_predef where od_id=$1";
$this->db->exec_sql($sql,array($this->od_id));
}
+ function save()
+ {
+ if ($this->od_id < 1) {
+ $this->save_insert();
+ } else {
+ $this->save_update();
+ }
+
+ }
+ function save_update()
+ {
+ $sql = "update op_predef set jrn_def_id = $1 , od_name = $2 ,
+ od_item =$3, od_description = $4 where od_id=$5";
+
$this->db->exec_sql($sql,array($this->p_jrn,$this->name,$this->nb_item,$this->description,$this->od_id));
+ // delete detail&
+ $this->db->exec_sql("delete from op_predef_detail where od_id =
$1",array($this->od_id));
+ $this->detail->save($this->od_id,$this->nb_item);
+ }
/*!\brief save the predef check first is the name is unique
* \return true op.success otherwise false
*/
- function save()
+ function save_insert()
{
if ( $this->db->count_sql("select * from op_predef ".
"where
upper(od_name)=upper('".Database::escape_string($this->name)."')".
- "and jrn_def_id=".$this->p_jrn)
+ "and jrn_def_id=".$this->p_jrn." and od_id
<> ".$this->od_id)
!= 0 )
{
$this->name="copy_".$this->name."_".microtime(true);
@@ -109,24 +160,44 @@ class Pre_operation
echo '<span class="notice">'.("Vous avez atteint le max.
d'opération prédéfinie, désolé").'</span>';
return false;
}
- $sql='insert into op_predef
(jrn_def_id,od_name,od_item,od_jrn_type,od_direct,od_description)'.
- 'values'.
- "($1,$2,$3,$4,$5 ,$6 )";
- $this->db->exec_sql($sql,array($this->p_jrn,
- $this->name,
- $this->nb_item,
- $this->jrn_type,
- $this->od_direct,
- $this->description,
+ try {
+ $this->db->start();
+ $sql='insert into op_predef
(jrn_def_id,od_name,od_item,od_jrn_type,od_direct,od_description)'.
+ 'values'.
+ "($1,$2,$3,$4,$5 ,$6 )";
+ $this->db->exec_sql($sql,array($this->p_jrn,
+ $this->name,
+ $this->nb_item,
+ $this->jrn_type,
+ $this->od_direct,
+ $this->description,
));
- $this->od_id=$this->db->get_current_seq('op_def_op_seq');
+ $this->od_id=$this->db->get_current_seq('op_def_op_seq');
+
+
+ //
$this->detail=Pre_operation_detail::build_detail($this->jrn_type,$this->db);
+ $this->detail->save($this->od_id,$this->nb_item);
+ $this->db->commit();
+ } catch (Exception $e) {
+ record_log("PROP139.Failed save predefined operation ");
+ $this->db->rollback();
+ }
+
return true;
}
/*!\brief load the data from the database and return an array
- * \return an array
+ * \return an double array containing all the data from database
*/
function load()
{
+ $this->isloaded=true;
+ //------------------------------------------
+ // if new , then od_id == 0 and we need to use blank()
+ //------------------------------------------
+ if ($this->od_id == -1 ) {
+ $array=$this->blank($this->p_jrn);
+ return $array;
+ }
$sql="select
od_id,jrn_def_id,od_name,od_item,od_jrn_type,od_description".
" from op_predef where od_id=$1 ".
" order by od_name";
@@ -135,27 +206,41 @@ class Pre_operation
foreach
(array('jrn_def_id','od_name','od_item','od_jrn_type','od_description') as
$field) {
$this->$field=$array[0][$field];
}
- switch ($this->od_jrn_type) {
- case 'ACH':
- $this->detail=new Pre_op_ach($this->db);
- break;
- case 'VEN':
- $this->detail=new Pre_Op_ven($this->db);
- break;
- case 'ODS':
- $this->detail=new Pre_op_advanced($this->db);
- break;
- default:
- throw new Exception(sprintf(_('Echec PreOperatoin chargement
%s'),$this->od_jrn_type));
- }
- $this->detail->set_od_id($this->od_id);
- $this->detail->jrn_def_id=$this->jrn_def_id;
-
+ $this->detail = Pre_operation_detail::build_detail($this->od_jrn_type,
$this->db);
+ $array+=$this->detail->load($this->od_id);
return $array;
}
+ /**
+ * create a blank object to insert it later
+ * @param $p_ledger_id
+ * @throws Exception
+ */
+ function blank($p_ledger_id) {
+ $array["od_id"]=-1;
+ $array['jrn_def_id']=$p_ledger_id;
+ $array['od_name']="";
+ $array['od_item']=2;
+ $array['od_jrn_type']=$this->db->get_value("select jrn_def_type from
jrn_def where jrn_def_id=$1",[$p_ledger_id]);
+ $array['od_description']="";
+ foreach
(array('jrn_def_id','od_name','od_item','od_jrn_type','od_description') as
$field) {
+ $this->$field=$array[$field];
+ }
+ $this->od_jrn_type=$array['od_jrn_type'];
+
+ $this->detail = Pre_operation_detail::build_detail($this->od_jrn_type,
$this->db);
+ $this->detail->set_od_id(0);
+ $this->detail->set_jrn($p_ledger_id);
+
+ return $array;
+ }
+
function compute_array()
{
- $p_array=$this->load();
+ if ($this->od_id > 0) {
+ $p_array = $this->load();
+ } else {
+ $p_array=$this->blank($this->p_jrn);
+ }
$array=array(
"e_comm"=>$p_array[0]["od_name"],
"nb_item"=>(($p_array[0]["od_item"]<10)?10:$p_array[0]["od_item"]) ,
@@ -163,6 +248,8 @@ class Pre_operation
"jrn_type"=>$p_array[0]["od_jrn_type"],
"od_description"=>$p_array['0']['od_description']
);
+ $this->detail = Pre_operation_detail::build_detail($this->od_jrn_type,
$this->db);
+ $array += $this->detail->compute_array($this->od_id);
return $array;
}
@@ -187,9 +274,9 @@ class Pre_operation
function count()
{
$a=$this->db->count_sql("select od_id,od_name from op_predef ".
- " where jrn_def_id=".$this->p_jrn.
- " and od_direct ='".$this->od_direct."'".
- " order by od_name");
+ " where jrn_def_id= $1 ".
+ " and od_direct = $2 ".
+ " order by
od_name",array($this->p_jrn,$this->od_direct));
return $a;
}
/*!\brief get the list of the predef. operation of a ledger
@@ -198,21 +285,14 @@ class Pre_operation
function get_list_ledger()
{
$sql="select od_id,od_name,od_description from op_predef ".
- " where jrn_def_id=".$this->p_jrn.
- " and od_direct ='".$this->od_direct."'".
+ " where jrn_def_id= $1 ".
+ " and od_direct = $2 ".
" order by od_name";
- $res=$this->db->exec_sql($sql);
+ $res=$this->db->exec_sql($sql,array($this->p_jrn,$this->od_direct));
$all=Database::fetch_all($res);
return $all;
}
- /*!\brief set the ledger
- * \param $p_jrn is the ledger (jrn_id)
- */
- function set_jrn($p_jrn)
- {
- $this->p_jrn=$p_jrn;
- }
-
+
/**
*
* @brief display the detail of predefined operation, normally everything
@@ -220,67 +300,43 @@ class Pre_operation
*/
function display()
{
- $array=$this->detail->compute_array();
+ $array=$this->compute_array();
+ require NOALYSS_TEMPLATE."/pre_operation_display.php";
echo $this->detail->display($array);
}
-}
-
-/*!\brief mother of the pre_op_XXX, it contains only one data : an
- * object Pre_Operation. The child class contains an array of
- * Pre_Operation object
- */
-class Pre_operation_detail
-{
- var $operation;
- function __construct($p_cn,$p_id=0)
- {
- $this->db=$p_cn;
- $this->operation=new Pre_operation($this->db);
-
$this->valid=array('ledger'=>'jrn_def_id','ledger_type'=>'jrn_type','direct'=>'od_direct');
- $this->jrn_def_id=-1;
- }
-
-
/*!\brief show a form to use pre_op
- */
+ */
function form_get ($p_url)
{
- $r=HtmlInput::button_action(_("Modèle d'opérations"), '
$(\'modele_op_div\').style.display=\'block\';if ( $(\'lk_modele_op_tab\')) {
$(\'lk_modele_op_tab\').focus();}');
+ $r=HtmlInput::button_action(_("Modèle d'opérations"),
+ ' $(\'modele_op_div\').style.display=\'block\';if (
$(\'lk_modele_op_tab\')) { $(\'lk_modele_op_tab\').focus();}');
$r.='<div id="modele_op_div" class="noprint">';
$r.=HtmlInput::title_box(_("Modèle d'opérations"), 'modele_op_div',
'hide',"","n");
$hid=new IHidden();
$r.=$hid->input("action","use_opd");
- $r.=$hid->input("jrn_type",$this->get("ledger_type"));
- $r.= $this->show_button($p_url);
+ $r.=$hid->input("jrn_type",$this->jrn_type);
+ $r.= $this->display_list_operation($p_url);
$r.=' <p style="text-align: center">'.
- HtmlInput::button_hide('modele_op_div').
- '</p>';
+ HtmlInput::button_hide('modele_op_div').
+ '</p>';
$r.='</div>';
return $r;
}
- /*!\brief count the number of pred operation for a ledger */
- function count()
- {
- $a=$this->db->count_sql("select od_id,od_name from op_predef ".
- " where jrn_def_id=".$this->jrn_def_id.
- " and od_direct ='".$this->od_direct."'".
- " order by od_name");
- return $a;
- }
+
/*!\brief show the button for selecting a predefined operation */
- function show_button($p_url)
+ function display_list_operation($p_url)
{
-
-
+
+
$value=$this->db->get_array("select od_id,od_name,od_description from
op_predef ".
- " where jrn_def_id=$1".
- " and od_direct =$2".
- " order by od_name",
- array($this->jrn_def_id,$this->od_direct ));
-
- if ( $this->jrn_def_id=='') $value=array();
-
+ " where jrn_def_id=$1".
+ " and od_direct =$2".
+ " order by od_name",
+ array($this->p_jrn,$this->od_direct ));
+
+ if ( $this->p_jrn=='') $value=array();
+
$r="";
if (count($value)==0) {
$r.=_("Vous n'avez encore sauvé aucun modèle");
@@ -292,7 +348,7 @@ class Pre_operation_detail
$r.='<tr class="'.(($i%2==0)?"even":"odd").'">';
$r.='<td
style="font-weight:bold;vertical-align:top;text-decoration:underline">';
$r.=sprintf('<a href="%s&pre_def=%s"
onclick="waiting_box()">%s</a> ',
- $p_url,$value[$i]['od_id'],$value[$i]['od_name']);
+ $p_url,$value[$i]['od_id'],$value[$i]['od_name']);
$r.='</td>';
$r.='<td>'.h($value[$i]['od_description']).'</td>';
$r.='</tr>';
@@ -302,38 +358,181 @@ class Pre_operation_detail
}
public function get_operation()
{
- if ( $this->jrn_def_id=='') return array();
+ if ( $this->jrn_def_id=='') return array();
$value=$this->db->make_array("select od_id,od_name from op_predef ".
- " where
jrn_def_id=".sql_string($this->jrn_def_id).
- " and od_direct
='".sql_string($this->od_direct)."'".
- " order by od_name",1);
+ " where jrn_def_id=".sql_string($this->jrn_def_id).
+ " and od_direct ='".sql_string($this->od_direct)."'".
+ " order by od_name",1);
return $value;
}
- function set($p_param,$value)
+
+ /**
+ * @return mixed
+ */
+ public function get_db()
{
- if ( ! isset ($this->valid[$p_param] ) )
- {
- $msg=_(" le parametre $p_param n'existe pas
".__FILE__.':'.__LINE__);
- throw new Exception($msg);
- }
- $attr=$this->valid[$p_param];
- $this->$attr=$value;
+ return $this->db;
+ return $this;
}
- function get($p_param)
+
+ /**
+ * @param mixed $db
+ */
+ public function set_db($db)
{
+ $this->db = $db;
+ return $this;
+ }
- if ( ! isset ($this->valid[$p_param] ) )
- {
- $msg=_(" le parametre $p_param n'existe pas
".__FILE__.':'.__LINE__);
- throw new Exception($msg);
- }
- $attr=$this->valid[$p_param];
- return $this->$attr;
+ /**
+ * @return mixed
+ */
+ public function get_nb_item()
+ {
+ return $this->nb_item;
+ return $this;
}
- function get_post()
+ /**
+ * @param mixed $nb_item
+ */
+ public function set_nb_item($nb_item)
+ {
+ $this->nb_item = $nb_item;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function get_jrn_type()
+ {
+ return $this->jrn_type;
+ return $this;
+ }
+
+ /**
+ * @param string $jrn_type
+ */
+ public function set_jrn_type($jrn_type)
+ {
+ if ( ! in_array ($jrn_type,['ACH','FIN','VEN','ODS'] )) throw new
Exception('prop03.invalid ledger type');
+ $this->jrn_type = $jrn_type;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function get_name()
+ {
+ return $this->name;
+ return $this;
+ }
+
+ /**
+ * @param string $name
+ */
+ public function set_name($name)
+ {
+ $this->name = $name;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function get_detail()
+ {
+ return $this->detail;
+ return $this;
+ }
+
+ /**
+ * @param array $detail
+ */
+ public function set_detail(Pre_operation_detail $detail)
{
- $this->operation->get_post();
+ $this->detail = $detail;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function get_od_direct()
+ {
+ return $this->od_direct;
+ return $this;
+ }
+
+ /**
+ * @param string $od_direct
+ */
+ public function set_od_direct($od_direct)
+ {
+ if ( ! in_array($od_direct,['f','t'])) throw new
Exception('prop02.invalid od_direct');
+ $this->od_direct = $od_direct;
+ return $this;
+ }
+
+ /**
+ * @return int|mixed
+ */
+ public function get_od_id()
+ {
+ return $this->od_id;
+ }
+
+ /**
+ * @param int|mixed $od_id
+ */
+ public function set_od_id($od_id)
+ {
+ $this->od_id = $od_id;
+ return $this;
+ }
+
+
+ /*!\brief set the ledger
+ * \param $p_jrn is the ledger (jrn_id)
+ */
+ function set_p_jrn($p_jrn)
+ {
+ $this->p_jrn=$p_jrn;
+ $this->jrn_type=$this->db->get_value("select jrn_def_type from jrn_def
where jrn_def_id=$1",[$p_jrn]);
+ return $this;
+ }
+}
+
+/*!\brief mother of the pre_op_XXX, it contains only one data : an
+ * object Pre_Operation. The child class contains an array of
+ * Pre_Operation object
+ */
+class Pre_operation_detail
+{
+ function __construct($p_cn)
+ {
+ $this->db=$p_cn;
+
+ }
+
+ static function build_detail($p_jrn_type,Database $database)
+ {
+ switch ($p_jrn_type) {
+ case 'ACH':
+ $detail=new Pre_op_ach($database);
+ break;
+ case 'VEN':
+ $detail=new Pre_Op_ven($database);
+ break;
+ case 'ODS':
+ $detail=new Pre_op_advanced($database);
+ break;
+ default:
+ throw new Exception(sprintf(_('Echec PreOperatoin chargement
%s'),$p_jrn_type));
+ }
+ return $detail;
}
}
diff --git a/include/compta_ach.inc.php b/include/compta_ach.inc.php
index 65f3d3f..2059cf7 100644
--- a/include/compta_ach.inc.php
+++ b/include/compta_ach.inc.php
@@ -27,7 +27,7 @@
if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
require_once NOALYSS_INCLUDE.'/lib/icheckbox.class.php';
require_once NOALYSS_INCLUDE.'/class/acc_ledger_purchase.class.php';
-require_once NOALYSS_INCLUDE.'/class/pre_op_ach.class.php';
+require_once NOALYSS_INCLUDE.'/class/pre_operation.class.php';
require_once NOALYSS_INCLUDE.'/lib/ipopup.class.php';
$gDossier = dossier::id();
global $g_parameter;
@@ -153,7 +153,7 @@ if (isset($_POST['record']))
/* Save the predefined operation */
if ( isset($_POST['opd_name']) && trim($_POST['opd_name']) !=
"" )
{
- $opd = new Pre_op_ach($cn);
+ $opd = new Pre_operation($cn);
$opd->get_post();
$opd->save();
}
@@ -265,7 +265,7 @@ try
// used a predefined operation
$predef=$http->request("pre_def","string", "0");
$p_jrn_predef=$http->request("p_jrn_predef","string", "0");
- $op=new Pre_op_ach($cn);
+ $op=new Pre_operation($cn);
$op->set_od_id($predef);
$p_post=$op->compute_array();
$Ledger->id=$p_jrn_predef;
diff --git a/include/compta_ven.inc.php b/include/compta_ven.inc.php
index bd3f9c1..bbb76ed 100644
--- a/include/compta_ven.inc.php
+++ b/include/compta_ven.inc.php
@@ -25,7 +25,7 @@
if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
require_once NOALYSS_INCLUDE.'/lib/icheckbox.class.php';
require_once NOALYSS_INCLUDE.'/class/acc_ledger_sold.class.php';
-require_once NOALYSS_INCLUDE.'/class/pre_op_ven.class.php';
+require_once NOALYSS_INCLUDE.'/class/pre_operation.class.php';
require_once NOALYSS_INCLUDE.'/class/document.class.php';
require_once NOALYSS_INCLUDE.'/class/acc_ledger_info.class.php';
require_once NOALYSS_INCLUDE.'/lib/ipopup.class.php';
@@ -171,7 +171,7 @@ show_tabs(a_tab,'facturation_div_id');
/* Save the predefined operation */
if ( isset($_POST['opd_name']) && trim($_POST['opd_name']) != "" )
{
- $opd=new Pre_op_ven($cn);
+ $opd=new Pre_operation($cn);
$opd->get_post();
$opd->save();
}
@@ -253,22 +253,14 @@ if (!isset($_REQUEST ['p_jrn']))
$Ledger->id=$def_ledger['jrn_def_id'];
}
else
- $Ledger->id=$_REQUEST ['p_jrn'];
+ $Ledger->id=$http->request('p_jrn');
+
if (isset($_REQUEST['p_jrn_predef']))
{
- $Ledger->id=$_REQUEST['p_jrn_predef'];
+ $Ledger->id=$http->request('p_jrn_predef');
}
-/* echo '<div id="predef_form">';
-echo HtmlInput::hidden('p_jrn_predef', $Ledger->id);
-$op=new Pre_op_ven($cn);
-$op->set('ledger',$Ledger->id);
-$op->set('ledger_type',"VEN");
-$op->set('direct','f');
-$url=http_build_query(array('p_jrn_predef'=>$Ledger->id,'ac'=>$_REQUEST['ac'],'gDossier'=>dossier::id()));
-echo $op->form_get('do.php?'.$url);
-echo '</div>';
-*/
+
echo '<div class="content">';
if ( $p_msg !="" ) echo '<span class="warning">'.$p_msg.'</span>';
try
@@ -284,10 +276,10 @@ try
{
// used a predefined operation
//
- $op=new Pre_op_ven($cn);
- $op->set_od_id($_REQUEST['pre_def']);
+ $op=new Pre_operation($cn);
+ $op->set_od_id($http->request('pre_def'));
$p_post=$op->compute_array();
- $Ledger->id=$_REQUEST ['p_jrn_predef'];
+ $Ledger->id=$http->request('p_jrn_predef');
echo $Ledger->input($p_post);
echo '<div class="content">';
diff --git a/include/database/op_predef_sql.class.php
b/include/database/op_predef_sql.class.php
new file mode 100644
index 0000000..8ae979c
--- /dev/null
+++ b/include/database/op_predef_sql.class.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Autogenerated file
+ * This file is part of NOALYSS.
+ *
+ * NOALYSS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * NOALYSS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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
+ */
+require_once NOALYSS_INCLUDE.'/lib/noalyss_sql.class.php';
+require_once NOALYSS_INCLUDE.'/class/database.class.php';
+
+
+/**
+ * class_op_predef_sql.php
+ *
+ *@file
+ *@brief abstract of the table public.op_predef */
+class Op_predef_SQL extends Noalyss_SQL
+{
+
+ function __construct(Database $p_cn,$p_id=-1)
+ {
+ $this->table = "public.op_predef";
+ $this->primary_key = "od_id";
+ /*
+ * List of columns
+ */
+ $this->name=array(
+ "od_id"=>"od_id"
+ ,"jrn_def_id"=>"jrn_def_id"
+ ,"od_name"=>"od_name"
+ ,"od_item"=>"od_item"
+ ,"od_jrn_type"=>"od_jrn_type"
+ ,"od_direct"=>"od_direct"
+ ,"od_description"=>"od_description"
+ );
+ /*
+ * Type of columns
+ */
+ $this->type = array(
+ "od_id"=>"numeric"
+ ,"jrn_def_id"=>"numeric"
+ ,"od_name"=>"text"
+ ,"od_item"=>"numeric"
+ ,"od_jrn_type"=>"text"
+ ,"od_direct"=>"boolean"
+ ,"od_description"=>"text"
+ );
+
+
+ $this->default = array(
+ "od_id" => "auto"
+ );
+
+ $this->date_format = "DD.MM.YYYY";
+ parent::__construct($p_cn,$p_id);
+ }
+
+
+}
\ No newline at end of file
diff --git a/include/operation_ods_new.inc.php
b/include/operation_ods_new.inc.php
index bad4da0..c106732 100644
--- a/include/operation_ods_new.inc.php
+++ b/include/operation_ods_new.inc.php
@@ -25,7 +25,8 @@
* \brief to write into the ledgers ODS a new operation
*/
if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
-require_once NOALYSS_INCLUDE.'/class/pre_op_ods.class.php';
+require_once NOALYSS_INCLUDE.'/class/pre_operation.class.php';
+
require_once NOALYSS_INCLUDE.'/lib/iconcerned.class.php';
global $g_user,$g_parameter;
@@ -59,7 +60,7 @@ if ( isset ($_GET['action']) && ! isset($_POST['correct']) &&
! isset($correct)
if ( $_GET['action']=='use_opd')
{
// get data from predef. operation
- $op=new Pre_op_advanced($cn);
+ $op=new Pre_operation($cn);
$p_post=null;
if ( isset($_REQUEST['pre_def']) && $_REQUEST['pre_def'] != '')
{
diff --git a/include/preod.inc.php b/include/preod.inc.php
index f0bff97..d12041c 100644
--- a/include/preod.inc.php
+++ b/include/preod.inc.php
@@ -22,105 +22,17 @@
/*!\file
* \brief included file for managing the predefined operation
*/
+require_once NOALYSS_INCLUDE.'/class/operation_predef_mtable.class.php';
+
if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
-require_once NOALYSS_INCLUDE.'/lib/iselect.class.php';
-require_once NOALYSS_INCLUDE.'/lib/icheckbox.class.php';
-require_once NOALYSS_INCLUDE.'/lib/ihidden.class.php';
-require_once NOALYSS_INCLUDE.'/class/database.class.php';
-require_once NOALYSS_INCLUDE.'/lib/ac_common.php';
-require_once NOALYSS_INCLUDE.'/class/pre_operation.class.php';
global $http;
-/*
- * Value from $_GET or $_REQUEST
- */
-$request_jrn=$http->request("jrn","string", -1);
-$request_ac=$http->request("ac","string", "");
-$request_sa=$http->request("sa","string", "");
-$get_jrn=$http->get('jrn',"string",-1);
-
-echo '<div class="content">';
-echo '<form method="GET">';
-$sel=new ISelect();
-$sel->name="jrn";
-$sel->value=$cn->make_array("select jrn_def_id,jrn_def_name from ".
- " jrn_def where jrn_def_type in
('VEN','ACH','ODS') order by jrn_def_name");
-// Show a list of ledger
-$sel->selected=$request_jrn;
-echo 'Choisissez un journal '.$sel->input();
-
-echo dossier::hidden();
-$hid=new IHidden();
-echo $hid->input("sa","jrn");
-echo $hid->input("ac",$request_ac);
-echo '<hr>';
-echo HtmlInput::submit('Accepter','Accepter');
-echo '</form>';
-
-// if $_REQUEST[sa] == del delete the predefined operation
-if ( $request_sa == 'del')
-{
- $op=new Pre_operation($cn);
- $http=new HttpInput();
- $op->od_id=$http->request('od_id',"string",-1);
- if (isNumber($op->od_id)==1 && $op->od_id != -1 )
- {
- $op->delete();
- }
- $request_sa='jrn';
-}
-
-// if $_REQUEST[sa] == jrn show the predefined operation for this
-// ledger
-if ( $request_sa== 'jrn' )
-{
- $op=new Pre_operation($cn);
- $op->set_jrn($get_jrn);
- $is_ods = $cn->get_value("select count(*)
- from jrn_def where
- jrn_def_id=$1
- and jrn_def_type='ODS'", array($get_jrn));
- $op->od_direct = ($is_ods > 0) ? 't' : 'f';
- $array = $op->get_list_ledger();
- if (empty($array) == true)
- {
- echo _("Aucun enregistrement");
- return;
- }
- echo HtmlInput::filter_table('preod_table', '0', 0);
- echo '<table id="preod_table">';
- $count=0;
- foreach ($array as $row )
- {
-
- if ( $count %2 == 0 )
- echo '<tr class="odd">';
- else
- echo '<tr class="even">';
- $count++;
-
- echo '<td>'.h($row['od_name']).'</td>';
- echo '<td>'.h($row['od_description']).'</td>';
- echo '<td>';
- echo '<form method="POST" id="preod_frm'.$row['od_id'].'" class="print"
style="margin:0px;padding:0px;">';
- echo dossier::hidden();
- echo HtmlInput::hidden("sa","del");
- echo HtmlInput::hidden("ac",$request_ac);
- echo HtmlInput::hidden("del","");
- echo HtmlInput::hidden("od_id",$row['od_id']);
- echo HtmlInput::hidden("jrn",$get_jrn);
-
- $b='<input type="submit" class="smallbutton" value="'._("Effacer").'"'.
- ' onClick="return
confirm_box(\'preod_frm'.$row['od_id'].'\',\''._("Voulez-vous vraiment effacer
cette operation ?").'\');" >';
- echo $b;
- echo '</form>';
- echo '</td>';
-
$b=HtmlInput::button('mod'.$row['od_id'],"Modifier","onclick=\"mod_predf_op('".dossier::id()."','".$row['od_id']."');\"");
- echo td($b);
- echo '</tr>';
+$prd_op=new Op_predef_SQL($cn);
- }
- echo '</table>';
-}
-echo '</div>';
-?>
+$operation_predef_mtable=new Operation_Predef_MTable($prd_op);
+$operation_predef_mtable->set_json(json_encode(array(
"ac"=>$http->request("ac"),
+ "op"=>"save_predf",
+
"gDossier"=>Dossier::id()
+ )));
+$operation_predef_mtable->create_js_script();
+$operation_predef_mtable->display_table();
\ No newline at end of file
diff --git a/include/template/pre_operation_display.php
b/include/template/pre_operation_display.php
new file mode 100644
index 0000000..8de218b
--- /dev/null
+++ b/include/template/pre_operation_display.php
@@ -0,0 +1,36 @@
+<?php
+/*
+ * This file is part of NOALYSS.
+ *
+ * NOALYSS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * NOALYSS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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
+ * display pre_operation value
+ */
+
+$name=new IText("opd_name",$array["e_comm"]);
+$description=new IText("od_description",$array["od_description"]);
+$description->style=' class="itextarea"
style="width:30em;height:4em;vertical-align:top"';
+
+?>
+<?php echo _("Nom du modèle"),$name->input();?>
+<p>
+ <?php echo _('Description (max 50 car.)'); ?>
+ <?php echo $description->input();?>
+</p>
diff --git a/include/template/predf_ledger_detail.php
b/include/template/predf_ledger_detail.php
index a3cdd8f..dfcfbb1 100644
--- a/include/template/predf_ledger_detail.php
+++ b/include/template/predf_ledger_detail.php
@@ -5,12 +5,13 @@
<legend><?php echo $f_legend ?>
</legend>
<?php echo $f_type?><?php echo $f_client_qcode?><?php echo $f_client_bt?>
<?php echo $f_client?><br>
-<input type="hidden" id="p_jrn" name="p_jrn" value="<?php echo
$this->jrn_def_id; ?>">
+<input type="hidden" id="p_jrn" name="p_jrn" value="<?php echo
$p_array["p_jrn"]; ?>">
<?php echo $str_add_button?>
</fieldset>
-<fieldset>
-<legend><?php echo $f_legend_detail?></legend>
+<div class="fieldset" style="overflow:auto;max-height:300px">
+<h1 class="fiedset"><?php echo $f_legend_detail?></h1>
+ <div style="">
<table id="sold_item" width="100%" border="0">
<tr>
<th style="width:auto"colspan="2">Code <?php echo
Icon_Action::infobulle(0)?></th>
@@ -79,6 +80,6 @@ echo '</tr>';
<?php endif; ?>
</div>
-</fieldset>
+</div>
- [Noalyss-commit] [noalyss] 105/119: Follow-Up Cosmetic, form before creating a new follow-up action, (continued)
- [Noalyss-commit] [noalyss] 105/119: Follow-Up Cosmetic, form before creating a new follow-up action, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 109/119: Remove select_dialog file, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 117/119: Follow-up export contact option with all the the card's attribute, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 94/119: typo : tag instead of étiquette, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 71/119: Search on active card for Contact Multiple, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 95/119: fix : select_box search doesn't work, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 12/119: Bug 1834 : duplicate , cannot confirm an duplicated operation because the $_GET is taken in priority, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 16/119: Predefined Operation rewriting, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 21/119: Bug : remove file by error, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 39/119: Bug : remove file by error, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 35/119: Predefined Operation rewriting,
Dany De Bontridder <=
- [Noalyss-commit] [noalyss] 28/119: Bug : cannot export Follow Up, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 38/119: documentation, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 34/119: doc, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 27/119: Bug : correct search remove ~, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 42/119: Bug : cannot duplicate ACH, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 45/119: ManageTable : add tbody and thead , fix javascript error, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 44/119: Fix: predefined operation with overflow for details, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 49/119: tag - cosmetic, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 47/119: Tag and Group Tag, Dany De Bontridder, 2020/10/26
- [Noalyss-commit] [noalyss] 53/119: NEW Security : add tag, Dany De Bontridder, 2020/10/26