mirror of
https://github.com/YunoHost-Apps/noalyss_ynh.git
synced 2024-09-03 19:46:20 +02:00
414 lines
15 KiB
PHP
414 lines
15 KiB
PHP
|
<?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 definition of the class Pre_op_ven
|
||
|
*/
|
||
|
require_once NOALYSS_INCLUDE.'/class/pre_operation.class.php';
|
||
|
|
||
|
/*---------------------------------------------------------------------- */
|
||
|
/*!\brief concerns the predefined operation for VEN ledger
|
||
|
*/
|
||
|
class Pre_op_ven extends Pre_operation_detail
|
||
|
{
|
||
|
var $op;
|
||
|
//< Pre_operation
|
||
|
function __construct($cn,$p_id=0)
|
||
|
{
|
||
|
parent::__construct($cn,$p_id);
|
||
|
$this->operation->od_direct='f'; //< Pre_operation
|
||
|
}
|
||
|
|
||
|
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++)
|
||
|
{
|
||
|
$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];
|
||
|
|
||
|
}
|
||
|
}
|
||
|
/*!
|
||
|
* \brief save the detail and op in the database
|
||
|
*
|
||
|
*/
|
||
|
function save()
|
||
|
{
|
||
|
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");
|
||
|
$this->db->exec_sql($sql);
|
||
|
// save the selling
|
||
|
for ($i=0;$i<$this->operation->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)';
|
||
|
$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},
|
||
|
'f',
|
||
|
$this->operation->od_id,
|
||
|
$this->{"e_march".$i."_tva_amount"},
|
||
|
$this->{"e_march".$i."_label"},
|
||
|
));
|
||
|
}
|
||
|
}
|
||
|
catch (Exception $e)
|
||
|
{
|
||
|
record_log($e->getTraceAsString());
|
||
|
echo ($e->getMessage());
|
||
|
$this->db->rollback();
|
||
|
}
|
||
|
$this->db->commit();
|
||
|
|
||
|
}
|
||
|
/*!\brief compute an array accordingly with the FormVenView function
|
||
|
*/
|
||
|
function compute_array()
|
||
|
{
|
||
|
$count=0;
|
||
|
$a_op=$this->operation->load();
|
||
|
$array=$this->operation->compute_array($a_op);
|
||
|
$p_array=$this->load();
|
||
|
if (empty($p_array)) return array();
|
||
|
foreach ($p_array as $row)
|
||
|
{
|
||
|
if ( $row['opd_debit']=='t')
|
||
|
{
|
||
|
$array+=array('e_client'=>$row['opd_poste']);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
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_quant".$count=>$row['opd_quantity'],
|
||
|
"e_march".$count."_label"=>$row['opd_comment'],
|
||
|
"e_march".$count."_tva_amount"=>$row['opd_tva_amount'],
|
||
|
);
|
||
|
$count++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// Find the ledger
|
||
|
$ledger=new Acc_Ledger($this->db,$this->operation->jrn_def_id);
|
||
|
// Find the max line of the ledger
|
||
|
$max_row=$ledger->GetDefLine();
|
||
|
|
||
|
// 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()
|
||
|
{
|
||
|
$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.
|
||
|
" order by opd_id";
|
||
|
$res=$this->db->exec_sql($sql);
|
||
|
$array=Database::fetch_all($res);
|
||
|
return $array;
|
||
|
}
|
||
|
function set_od_id($p_id)
|
||
|
{
|
||
|
$this->operation->od_id=$p_id;
|
||
|
}
|
||
|
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);
|
||
|
|
||
|
$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',$ledger->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 client');
|
||
|
|
||
|
|
||
|
/* 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 ($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="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','deb');
|
||
|
|
||
|
// 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);
|
||
|
|
||
|
$f_legend_detail=_("Détail articles vendus");
|
||
|
|
||
|
// 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"}:""
|
||
|
;
|
||
|
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_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);
|
||
|
if ( $flag_tva=='Y')
|
||
|
{
|
||
|
if ( ! (isset(${"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','cred');
|
||
|
$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(${"e_quant$i"}))?${"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','VEN');
|
||
|
|
||
|
$r.=HtmlInput::button('add_item',_('Ajout article'), ' onClick="ledger_add_row()"');
|
||
|
return $r;
|
||
|
}
|
||
|
}
|