*/
class Acc_Other_Tax_MTable extends Manage_Table_SQL
{
/**
* @brief Build and returns an object
* @param int $p_id
*/
static public function build($p_id=-1)
{
$cn=Dossier::connect();
$object_sql=new Acc_Other_Tax_SQL($cn,$p_id);
$object=new Acc_Other_Tax_MTable($object_sql);
$object->set_object_name("other_tax_ctl");
$object->set_callback("ajax_misc.php");
$object->add_json_param("op","other_tax");
$object->set_order(["ac_label","ac_rate","ac_accounting","ajrn_def_id"]);
$object->set_col_label("ac_label",_("Nom"));
$object->set_col_label("ajrn_def_id",_("Journaux"));
$object->set_col_label("ac_rate",_("Taux"));
$object->set_col_tips("ac_rate",82);
$object->set_col_label("ac_accounting",_("Poste comptable"));
$object->set_col_tips("ac_accounting",81);
$object->set_col_type("ac_accounting","custom");
$object->set_col_type("ajrn_def_id","custom");
$object->set_property_visible("ajrn_def_id",false);
return $object;
}
function input_custom($p_key,$p_value) {
switch ($p_key) {
case "ac_accounting":
$accounting=new IPoste("ac_accounting",$p_value);
$accounting->set_attribute('gDossier',Dossier::id());
$accounting->set_attribute('jrn',0);
$accounting->set_attribute('account','ac_accounting');
echo $accounting->input();
break;
case "ajrn_def_id":
$cn=Dossier::connect();
$a_ledger=$cn->get_array("select
jrn_def_id,jrn_def_name ,
coalesce ( (select array_position(ajrn_def_id,jrn_def_id) from acc_other_tax
where ac_id=$1
),0) as in_array
from jrn_def
where
jrn_enable=1
and jrn_def_type in ('ACH','VEN')
order by jrn_def_name",[$this->get_table()->get("ac_id")]);
if (empty($a_ledger) ) {
echo _("Aucun journal disponible");
return;
}
$nb_ledger=count($a_ledger);
echo '
';
for ($i=0;$i<$nb_ledger;$i++) {
$icheckbox=new ICheckBox("check[]",$a_ledger[$i]['jrn_def_id']);
if ( $a_ledger[$i]['in_array']!=0) {
$icheckbox->set_check($a_ledger[$i]['jrn_def_id']);
}
echo '- ',
$icheckbox->input(),
h($a_ledger[$i]['jrn_def_name']),
'
';
}
echo '
';
break;
}
}
function display_row_custom($p_key, $p_value, $p_id = 0)
{
$cn=Dossier::connect();
switch ($p_key)
{
case 'ac_accounting':
$label=$cn->get_value("select pcm_lib from tmp_pcmn where pcm_val=$1",
[$p_value]);
echo '',
h($p_value),
" ",
h($label),
' | ';
break;
}
}
function check()
{
$row=$this->get_table();
$cn=$row->get_cn();
if ( trim($row->getp("ac_rate")) == "") {
$row->setp("ac_rate",0);
}
if ( $row->getp("ac_rate")>100 || $row->getp("ac_rate")< 0 ) {
$this->set_error("ac_rate",_("Valeur invalide"));
}
$accounting=$row->getp("ac_accounting");
$nb_accounting=$cn->get_value("select count(*) from tmp_pcmn where pcm_val =format_account($1)",
[$accounting]);
if (empty($accounting)||$nb_accounting == 0) {
$this->set_error("ac_accounting",_("Poste comptable inexistant"));
}
$ledger=$row->get("ajrn_def_id");
if ( $ledger != "{}" && ! empty ($ledger))
{
$ledger=trim($ledger,'{');
$ledger=trim($ledger,'}');
$a_ledger=explode(",",$ledger);
$nb_ledger=count($a_ledger);
$pk=$row->get("ac_id");
for ($i=0;$i<$nb_ledger;$i++) {
if ($cn->get_value("select count(*) from acc_other_tax
where
array_position(ajrn_def_id,$1) is not null
and ac_id != $2
",[$a_ledger[$i],$pk]) > 0)
{
$this->set_error("ajrn_def_id",_("Journal déjà utilisé dans autre taxe"));
}
}
}
if ($this->count_error()>0) {
return false;
}
return true;
}
function input()
{
$this->set_property_visible("ajrn_def_id",true);
return parent::input();
}
function from_request()
{
parent::from_request(); // TODO: Change the autogenerated stub
$http=new HttpInput();
$this->table->set("ajrn_def_id","{".join(",",$http->post("check","array",array()))."}");
}
}