set_title('Choix de la tva');
echo $a->input();
$tva=new ITva_Popup("tva1");
$tva->with_button(true);
// You must add the attributes gDossier, popup
$tva->set_attribute('popup','popup_tva');
$tva->set_attribute('gDossier',dossier::id());
// We can add a label for the code
$tva->add_label('code');
$tva->js='onchange="set_tva_label(this);"';
echo $tva->input();
@endcode
*/
class ITva_Popup extends HtmlInput
{
/**
*@brief by default, the p_name is the name/id of the input type
* the this->button is false (control if a button is visible) and
* this->in_table=false (return the widget inside a table)
* this->code is a span widget to display the code (in this case, you will
* to set this->cn as database connexion)
* to have its own javascript for the button you can use this->but_javascript)
* by default it is 'popup_select_tva(this)';
*/
private $filter; //!< filter the VAT by ledger PURCHASE or SALE or NO FILTER, default=NO
public function __construct($p_name=null,$p_value="",$p_id="")
{
$this->name=$p_name;
$this->button=true;
$this->in_table=false;
$this->value=$p_value;
$this->id=$p_id;
$this->filter='none';
}
function with_button($p)
{
if ($p == true )
$this->button=true;
else
$this->button=false;
}
/*!\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;
$this->js=(isset($this->js))?$this->js:'onchange="format_number(this);"';
$this->id=($this->id=="")?$this->name:$this->id;
if ( $this->readOnly==true) return $this->display();
$str='';
$r=sprintf($str,$this->name,$this->value,$this->id,$this->js);
if ($this->in_table)
$table='
'.'
'.td($r);
if ( $this->button==true && ! $this->in_table)
$r.=$this->dbutton();
if ( $this->button==true && $this->in_table)
$r=$table.td($this->dbutton()).'
';
if ( isset($this->code))
{
if ( $this->cn != NULL)
{
/* check if tva_id == integer */
if (trim($this->value)!='' && isNumber($this->value)==1 && strpos($this->value,',') === false)
$this->code->value=$this->cn->get_value('select tva_label from tva_rate where tva_id=$1',
array($this->value));
;
}
$r.=$this->code->input();
if ($this->table==1) $r=td($r);
$this->set_attribute('jcode',$this->code->name);
$this->set_attribute('gDossier',dossier::id());
$this->set_attribute('ctl',$this->name);
$r.=$this->get_js_attr();
}
return $r;
}
/**
* Set a filter to limit the choice of VAT ;
* possible values are :
* - sale if there is an accounting for sale
* - purchase if there is an accounting for purchase
* - none : show VAT
*
*/
function set_filter($p_filter)
{
$this->filter=$p_filter;
}
/**
*@brief show a button, if it is pushed show a popup to select the need vat
*@note
* - a ipopup must be created before with the name popup_tva
* - the javascript scripts.js must be loaded
*@return string with html code
*/
function dbutton()
{
if( trim($this->name)=='') throw new Exception (_('Le nom ne peut ĂȘtre vide'));
$this->id=($this->id=="")?$this->name:$this->id;
// button
$bt=new ISmallButton('bt_'.$this->id);
$bt->tabindex="-1";
$bt->label=_(' TVA ');
$bt->set_attribute('gDossier',dossier::id());
$bt->set_attribute('ctl',$this->id);
$bt->set_attribute('popup','popup_tva');
if ( isset($this->code))
$bt->set_attribute('jcode',$this->code->name);
if ( isset($this->compute))
$bt->set_attribute('compute',$this->compute);
$bt->set_attribute("filter", $this->filter);
$bt->javascript=(isset($this->but_javascript))?$this->but_javascript:'popup_select_tva(this)';
$r=$bt->input();
return $r;
}
/*!\brief print in html the readonly value of the widget*/
public function display()
{
$cn= Dossier::connect();
$tva=new Acc_Tva($cn, $this->value);
$comment=($tva->load() != "-1")? $tva->tva_label:"";
$res=sprintf('%s',$this->name,$this->value,$this->name,$comment);
return $res;
}
/**
*@brief add a field to show the selected tva's label
*@param $p_code is the name of the label where you can see the label of VAT
*@param $p_cn is a database connection if NULL it doesn't seek in the database
*/
public function add_label($p_code,$p_cn=null)
{
$this->cn=$p_cn;
$this->code=new ISpan($p_code);
}
static public function test_me()
{
$a=new IPopup('popup_tva');
$a->set_title('Choix de la tva');
echo $a->input();
$tva=new ITva_Popup("tva1");
$tva->with_button(true);
// We can add a label for the code
$tva->add_label('code');
$tva->js='onchange="set_tva_label(this);"';
echo $tva->input();
echo $tva->dbutton();
}
}