mirror of
https://github.com/YunoHost-Apps/noalyss_ynh.git
synced 2024-09-03 19:46:20 +02:00
576 lines
22 KiB
PHP
576 lines
22 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 periode
|
||
|
*/
|
||
|
/*!
|
||
|
* \brief For the periode tables parm_periode and jrn_periode
|
||
|
*/
|
||
|
require_once NOALYSS_INCLUDE.'/ac_common.php';
|
||
|
require_once NOALYSS_INCLUDE.'/class_database.php';
|
||
|
class Periode
|
||
|
{
|
||
|
var $cn; /*!< database connection */
|
||
|
var $jrn_def_id; /*!< the jr, 0 means all the ledger*/
|
||
|
var $p_id; /*!< pk of parm_periode */
|
||
|
var $status; /*!< status is CL for closed, OP for
|
||
|
open and CE for centralized */
|
||
|
var $p_start; /*!< start of the periode */
|
||
|
var $p_end; /*!< end of the periode */
|
||
|
function __construct($p_cn,$p_id=0)
|
||
|
{
|
||
|
$this->p_id=$p_id;
|
||
|
$this->cn=$p_cn;
|
||
|
}
|
||
|
function set_jrn($p_jrn)
|
||
|
{
|
||
|
$this->jrn_def_id=$p_jrn;
|
||
|
}
|
||
|
function set_periode($pp_id)
|
||
|
{
|
||
|
$this->p_id=$pp_id;
|
||
|
}
|
||
|
/*!\brief return the p_id of the start and the end of the exercice
|
||
|
*into an array
|
||
|
*\param $p_exercice
|
||
|
*\return array [start]=>,[end]=>
|
||
|
*/
|
||
|
function limit_year($p_exercice)
|
||
|
{
|
||
|
$sql_start="select p_id from parm_periode where p_exercice=$1 order by p_start ASC limit 1";
|
||
|
$start=$this->cn->get_value($sql_start,array($p_exercice));
|
||
|
$sql_end="select p_id from parm_periode where p_exercice=$1 order by p_end DESC limit 1";
|
||
|
$end=$this->cn->get_value($sql_end,array($p_exercice));
|
||
|
return array("start"=>$start,"end"=>$end);
|
||
|
}
|
||
|
/*!\brief check if a periode is closed. If jrn_def_id is set to a no zero value then check only for this ledger
|
||
|
*\return 1 is the periode is closed otherwise return 0
|
||
|
*/
|
||
|
function is_closed()
|
||
|
{
|
||
|
if ( $this->jrn_def_id != 0 )
|
||
|
$sql="select status from jrn_periode ".
|
||
|
" where jrn_def_id=".$this->jrn_def_id.
|
||
|
" and p_id =".$this->p_id;
|
||
|
else
|
||
|
$sql="select p_closed as status from parm_periode ".
|
||
|
" where ".
|
||
|
" p_id =".$this->p_id;
|
||
|
$res=$this->cn->exec_sql($sql);
|
||
|
$status=Database::fetch_result($res,0,0);
|
||
|
if ( $status == 'CL' || $status=='t' ||$status=='CE')
|
||
|
return 1;
|
||
|
return 0;
|
||
|
}
|
||
|
function is_open()
|
||
|
{
|
||
|
/* if jrn_Def_id == 0 then we check the global otherwise we check
|
||
|
a ledger */
|
||
|
if ( $this->jrn_def_id != 0 )
|
||
|
$sql="select status from jrn_periode ".
|
||
|
" where jrn_def_id=".$this->jrn_def_id.
|
||
|
" and p_id =".$this->p_id;
|
||
|
else
|
||
|
$sql="select p_closed as status from parm_periode ".
|
||
|
" where ".
|
||
|
" p_id =".$this->p_id;
|
||
|
$res=$this->cn->exec_sql($sql);
|
||
|
$status=Database::fetch_result($res,0,0);
|
||
|
if ( $status == 'OP' || $status=='f' )
|
||
|
return 1;
|
||
|
return 0;
|
||
|
}
|
||
|
function is_centralized()
|
||
|
{
|
||
|
if ( $this->jrn_def_id != 0 )
|
||
|
$sql="select status from jrn_periode ".
|
||
|
" where jrn_def_id=".$this->jrn_def_id.
|
||
|
" and p_id =".$this->p_id;
|
||
|
else
|
||
|
$sql="select p_centralized as status from parm_periode ".
|
||
|
" where ".
|
||
|
" p_id =".$this->p_id;
|
||
|
$res=$this->cn->exec_sql($sql);
|
||
|
$status=Database::fetch_result($res,0,0);
|
||
|
if ( $status == 'CE' || $status=='t' )
|
||
|
return 1;
|
||
|
return 0;
|
||
|
}
|
||
|
function reopen()
|
||
|
{
|
||
|
if ( $this->jrn_def_id == 0 )
|
||
|
{
|
||
|
$this->cn->exec_sql("update parm_periode set p_closed='f',p_central='f' where p_id=$1",
|
||
|
array($_GET['p_per']));
|
||
|
|
||
|
$this->cn->exec_sql("update jrn_periode set status='OP' ".
|
||
|
" where p_id = ".$this->p_id);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->cn->exec_sql("update jrn_periode set status='OP' ".
|
||
|
" where jrn_def_id=".$this->jrn_def_id." and ".
|
||
|
" p_id = ".$this->p_id);
|
||
|
/* if one ledger is open then the periode is open */
|
||
|
$this->cn->exec_sql("update parm_periode set p_closed=false where p_id=".$this->p_id);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
function close()
|
||
|
{
|
||
|
if ( $this->jrn_def_id == 0 )
|
||
|
{
|
||
|
$this->cn->exec_sql("update parm_periode set p_closed=true where p_id=".
|
||
|
$this->p_id);
|
||
|
$this->cn->exec_sql("update jrn_periode set status='CL' ".
|
||
|
" where p_id = ".$this->p_id);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->cn->exec_sql("update jrn_periode set status='CL' ".
|
||
|
" where jrn_def_id=".$this->jrn_def_id." and ".
|
||
|
" p_id = ".$this->p_id);
|
||
|
/* if all ledgers have this periode closed then synchro with
|
||
|
the table parm_periode
|
||
|
*/
|
||
|
$nJrn=$this->cn->count_sql( "select * from jrn_periode where ".
|
||
|
" p_id=".$this->p_id);
|
||
|
$nJrnPeriode=$this->cn->count_sql( "select * from jrn_periode where ".
|
||
|
" p_id=".$this->p_id." and status='CL'");
|
||
|
|
||
|
if ( $nJrnPeriode==$nJrn)
|
||
|
$this->cn->exec_sql("update parm_periode set p_closed=true where p_id=".$this->p_id);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
function centralized()
|
||
|
{
|
||
|
if ( $this->jrn_def_id == 0 )
|
||
|
{
|
||
|
$this->cn->exec_sql("update parm_periode set p_central=true");
|
||
|
return;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->cn->exec_sql("update jrn_periode set status='CE' ".
|
||
|
" where ".
|
||
|
" p_id = ".$this->p_id);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
/*!
|
||
|
* \brief Display all the periode and their status
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
function display_form_periode()
|
||
|
{
|
||
|
$str_dossier=dossier::get();
|
||
|
|
||
|
if ( $this->jrn_def_id==0 )
|
||
|
{
|
||
|
$Res=$this->cn->exec_sql("select p_id,to_char(p_start,'DD.MM.YYYY') as date_start,to_char(p_end,'DD.MM.YYYY') as date_end,p_central,p_closed,p_exercice,
|
||
|
(select count(jr_id) as count_op from jrn where jr_tech_per = p_id) as count_op
|
||
|
from parm_periode
|
||
|
order by p_start,p_end");
|
||
|
$Max=Database::num_row($Res);
|
||
|
echo '<form id="periode_frm" method="POST" onsubmit="return confirm_box(this,\'Confirmez-vous la fermeture des périodes choisies ?\')" >';
|
||
|
echo HtmlInput::array_to_hidden(array('ac','gDossier','jrn_def_id','choose'), $_REQUEST);
|
||
|
echo '<TABLE ALIGN="CENTER">';
|
||
|
echo "</TR>";
|
||
|
echo '<th>'.ICheckBox::toggle_checkbox("per_toggle", "periode_frm")."</th>";
|
||
|
echo '<TH> Date début </TH>';
|
||
|
echo '<TH> Date fin </TH>';
|
||
|
echo '<TH> Exercice </TH>';
|
||
|
echo "</TR>";
|
||
|
|
||
|
for ($i=0;$i<$Max;$i++)
|
||
|
{
|
||
|
$l_line=Database::fetch_array($Res,$i);
|
||
|
$class="even";
|
||
|
if ( $i % 2 == 0 )
|
||
|
$class="odd";
|
||
|
$style='';
|
||
|
if ( $l_line['p_closed'] == 't')
|
||
|
$style="color:red";
|
||
|
echo '<TR class="'.$class.'" style="'.$style.'">';
|
||
|
echo '<td>';
|
||
|
if ( $l_line['p_closed'] == 'f') {
|
||
|
$per_to_close=new ICheckBox('sel_per_close[]');
|
||
|
$per_to_close->value=$l_line['p_id'];
|
||
|
echo $per_to_close->input();
|
||
|
}
|
||
|
echo '</td>';
|
||
|
|
||
|
echo '<TD ALIGN="CENTER"> '.$l_line['date_start'].'</TD>';
|
||
|
echo '<TD ALIGN="CENTER"> '.$l_line['date_end'].'</TD>';
|
||
|
echo '<TD ALIGN="CENTER"> '.$l_line['p_exercice'].'</TD>';
|
||
|
|
||
|
if ( $l_line['p_closed'] == 't' )
|
||
|
{
|
||
|
$closed=($l_line['p_central']=='t')?'<TD>Centralisée</TD>':'<TD>Fermée</TD>';
|
||
|
$change='<TD></TD>';
|
||
|
$remove=sprintf(_('Nombre opérations %d'),$l_line['count_op']);
|
||
|
$remove=td($remove,' class="mtitle" ');
|
||
|
$change=td ('<A class="mtitle" HREF="javascript:void(0)"'
|
||
|
. ' onclick="return confirm_box(null,\''._('Confirmez Réouverture').' ?\',function() {window.location=\'do.php?ac='.$_REQUEST['ac'].'&action=reopen&p_per='.$l_line['p_id'].'&'.$str_dossier.'\';} )"> Réouverture</A>',' class="mtitle"');
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ($l_line['count_op'] == 0 )
|
||
|
{
|
||
|
$change=HtmlInput::display_periode($l_line['p_id']);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$change="Non modifiable";
|
||
|
}
|
||
|
$change=td($change,' class="mtitle" ');
|
||
|
$reopen=td("");
|
||
|
|
||
|
|
||
|
$remove='<TD class="mtitle">';
|
||
|
|
||
|
|
||
|
if ($l_line['count_op'] == 0 )
|
||
|
{
|
||
|
$go='do.php?'.http_build_query(array('ac'=>$_REQUEST['ac'],
|
||
|
'action'=>'delete_per',
|
||
|
'p_per'=>$l_line['p_id'],
|
||
|
'gDossier'=>Dossier::id()));
|
||
|
|
||
|
$remove.='<A class="mtitle" HREF="javascript:void(0)" '
|
||
|
. 'onclick="return confirm_box (null,\''._('Confirmez effacement ?').'\',function() { window.location=\''.$go.'\'});" >'
|
||
|
. ' Efface</A>';
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$remove.=sprintf(_('Nombre opérations %d'),$l_line['count_op']);
|
||
|
}
|
||
|
$remove.='</td>';
|
||
|
}
|
||
|
echo $change;
|
||
|
|
||
|
echo $remove;
|
||
|
|
||
|
echo '</TR>';
|
||
|
|
||
|
}
|
||
|
echo '</table>';
|
||
|
echo '<p style="text-align:center">';
|
||
|
echo HtmlInput::hidden("close_per", 1);
|
||
|
echo HtmlInput::submit('close_per_bt','Fermeture des périodes sélectionnées');
|
||
|
echo '</p>';
|
||
|
echo '</form>';
|
||
|
$but=new IButton('show_per_add','Ajout d\'une période');
|
||
|
$but->javascript="$('periode_add_div').show();";
|
||
|
echo $but->input();
|
||
|
echo '<div class="inner_box" style="width:40%;" id="periode_add_div">';
|
||
|
echo HtmlInput::title_box("Ajout d'une période","periode_add_div","hide");
|
||
|
echo '<FORM METHOD="POST">';
|
||
|
echo dossier::hidden();
|
||
|
$istart=new IDate('p_date_start');
|
||
|
$iend=new IDate('p_date_end');
|
||
|
$iexercice=new INum('p_exercice');
|
||
|
$iexercice->size=5;
|
||
|
echo '<table>';
|
||
|
echo '<TR> ';
|
||
|
echo td('Date de début');
|
||
|
echo td($istart->input());
|
||
|
echo '</tr><tr>';
|
||
|
echo td('Date de fin');
|
||
|
echo td($iend->input());
|
||
|
|
||
|
echo '</tr><tr>';
|
||
|
echo td('Exercice');
|
||
|
echo td($iexercice->input());
|
||
|
|
||
|
echo '</TABLE>';
|
||
|
|
||
|
echo HtmlInput::submit('add_per','Valider');
|
||
|
echo '</FORM>';
|
||
|
echo '</div>';
|
||
|
echo create_script("$('periode_add_div').hide();new Draggable('periode_add_div',{starteffect:function()
|
||
|
{
|
||
|
new Effect.Highlight(obj.id,{scroll:window,queue:'end'});
|
||
|
}}
|
||
|
);");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$Res=$this->cn->exec_sql("select p_id,to_char(p_start,'DD.MM.YYYY') as date_start,to_char(p_end,'DD.MM.YYYY') as date_end,status,p_exercice
|
||
|
from parm_periode join jrn_periode using (p_id) where jrn_def_id=".$this->jrn_def_id."
|
||
|
order by p_start,p_end");
|
||
|
$Max=Database::num_row($Res);
|
||
|
$r=$this->cn->exec_sql('select jrn_Def_name from jrn_Def where jrn_Def_id='.
|
||
|
$this->jrn_def_id);
|
||
|
$jrn_name=Database::fetch_result($r,0,0);
|
||
|
echo '<h2> Journal '.$jrn_name.'</h2>';
|
||
|
echo '<form id="periode_frm" method="POST" onsubmit="return confirm_box(this,\'Confirmez-vous la fermeture des périodes choisies ?\')" >';
|
||
|
echo HtmlInput::array_to_hidden(array('ac','gDossier','jrn_def_id','choose'), $_REQUEST);
|
||
|
|
||
|
echo '<TABLE ALIGN="CENTER">';
|
||
|
echo "</TR>";
|
||
|
echo '<th>'.ICheckBox::toggle_checkbox("per_toggle", "periode_frm")."</th>";
|
||
|
echo '<TH> Date début </TH>';
|
||
|
echo '<TH> Date fin </TH>';
|
||
|
echo '<TH> Exercice </TH>';
|
||
|
echo "</TR>";
|
||
|
|
||
|
for ($i=0;$i<$Max;$i++)
|
||
|
{
|
||
|
$l_line=Database::fetch_array($Res,$i);
|
||
|
if ( $l_line['status'] != 'OP' )
|
||
|
echo '<TR style="COLOR:RED">';
|
||
|
else
|
||
|
echo '<TR>';
|
||
|
echo '<td>';
|
||
|
if ( $l_line['status'] == 'OP') {
|
||
|
$per_to_close=new ICheckBox('sel_per_close[]');
|
||
|
$per_to_close->value=$l_line['p_id'];
|
||
|
echo $per_to_close->input();
|
||
|
}
|
||
|
echo '</td>';
|
||
|
echo '<TD ALIGN="CENTER"> '.$l_line['date_start'].'</TD>';
|
||
|
echo '<TD ALIGN="CENTER"> '.$l_line['date_end'].'</TD>';
|
||
|
echo '<TD ALIGN="CENTER"> '.$l_line['p_exercice'].'</TD>';
|
||
|
$closed="";
|
||
|
if ( $l_line['status'] != 'OP' )
|
||
|
{
|
||
|
$go='do.php?'.http_build_query(array('ac'=>$_REQUEST['ac'],
|
||
|
'action'=>'reopen',
|
||
|
'p_per'=>$l_line['p_id'],
|
||
|
'gDossier'=>Dossier::id(),
|
||
|
'jrn_def_id'=>$this->jrn_def_id));
|
||
|
|
||
|
$closed=td ('<A class="mtitle" HREF="javascript:void(0)" '
|
||
|
. 'onclick="return confirm_box(null,\''._('Confirmez Réouverture').' ?\',function() {window.location=\''.$go.'\';} );"> Réouverture</A>',' class="mtitle"');
|
||
|
}
|
||
|
|
||
|
echo "$closed";
|
||
|
|
||
|
echo '</TR>';
|
||
|
|
||
|
}
|
||
|
echo '</TABLE>';
|
||
|
echo '<p style="text-align:center">';
|
||
|
echo HtmlInput::submit('close_per','Fermeture des périodes sélectionnées');
|
||
|
echo '</p>';
|
||
|
echo '</form>';
|
||
|
|
||
|
}
|
||
|
}
|
||
|
function insert($p_date_start,$p_date_end,$p_exercice)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
|
||
|
if (isDate($p_date_start) == null ||
|
||
|
isDate($p_date_end) == null ||
|
||
|
strlen (trim($p_exercice)) == 0 ||
|
||
|
(string) $p_exercice != (string)(int) $p_exercice
|
||
|
||$p_exercice < COMPTA_MIN_YEAR || $p_exercice > COMPTA_MAX_YEAR)
|
||
|
|
||
|
{
|
||
|
throw new Exception ("Paramètre invalide");
|
||
|
}
|
||
|
$p_id=$this->cn->get_next_seq('s_periode');
|
||
|
$sql=sprintf(" insert into parm_periode(p_id,p_start,p_end,p_closed,p_exercice)".
|
||
|
"values (%d,to_date('%s','DD.MM.YYYY'),to_date('%s','DD.MM.YYYY')".
|
||
|
",'f','%s')",
|
||
|
$p_id,
|
||
|
$p_date_start,
|
||
|
$p_date_end,
|
||
|
$p_exercice);
|
||
|
$this->cn->start();
|
||
|
$Res=$this->cn->exec_sql($sql);
|
||
|
$Res=$this->cn->exec_sql("insert into jrn_periode (jrn_def_id,p_id,status) ".
|
||
|
"select jrn_def_id,$p_id,'OP' from jrn_def");
|
||
|
$this->cn->commit();
|
||
|
}
|
||
|
catch (Exception $e)
|
||
|
{
|
||
|
$this->cn->rollback();
|
||
|
return 1;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
/*!\brief load data from database
|
||
|
*\return 0 on success and -1 on error
|
||
|
*/
|
||
|
function load()
|
||
|
{
|
||
|
if ($this->p_id == '') $this->p_id=-1;
|
||
|
$row=$this->cn->get_array("select p_start,p_end,p_exercice,p_closed,p_central from parm_periode where p_id=$1",
|
||
|
array($this->p_id));
|
||
|
if ($row == null ) return -1;
|
||
|
|
||
|
$this->p_start=$row[0]['p_start'];
|
||
|
$this->p_end=$row[0]['p_end'];
|
||
|
$this->p_exercice=$row[0]['p_exercice'];
|
||
|
$this->p_closed=$row[0]['p_closed'];
|
||
|
$this->p_central=$row[0]['p_central'];
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/*!\brief return the max and the min periode of the exercice given
|
||
|
*in parameter
|
||
|
*\param $p_exercice is the exercice
|
||
|
*\return an array of Periode object
|
||
|
*/
|
||
|
function get_limit($p_exercice)
|
||
|
{
|
||
|
|
||
|
$max=$this->cn->get_value("select p_id from parm_periode where p_exercice=$1 order by p_start asc limit 1",array($p_exercice));
|
||
|
$min=$this->cn->get_value("select p_id from parm_periode where p_exercice=$1 order by p_start desc limit 1",array($p_exercice));
|
||
|
$rMax=new Periode($this->cn);
|
||
|
$rMax->p_id=$max;
|
||
|
if ( $rMax->load() ) throw new Exception('Periode n\'existe pas');
|
||
|
$rMin=new Periode($this->cn);
|
||
|
$rMin->p_id=$min;
|
||
|
if ( $rMin->load() ) throw new Exception('Periode n\'existe pas');
|
||
|
return array($rMax,$rMin);
|
||
|
}
|
||
|
/*!
|
||
|
* \brief Give the start & end date of a periode
|
||
|
* \param $p_periode is the periode id, if omitted the value is the current object
|
||
|
* \return array containing the start date & the end date, index are p_start and p_end or NULL if
|
||
|
* nothing is found
|
||
|
\verbatim
|
||
|
$ret['p_start']=>'01.01.2009'
|
||
|
$ret['p_end']=>'31.01.2009'
|
||
|
\endverbatim
|
||
|
*/
|
||
|
public function get_date_limit($p_periode = 0)
|
||
|
{
|
||
|
if ( $p_periode == 0 ) $p_periode=$this->p_id;
|
||
|
$sql="select to_char(p_start,'DD.MM.YYYY') as p_start,
|
||
|
to_char(p_end,'DD.MM.YYYY') as p_end
|
||
|
from parm_periode
|
||
|
where p_id=$1";
|
||
|
$Res=$this->cn->exec_sql($sql,array($p_periode));
|
||
|
if ( Database::num_row($Res) == 0) return null;
|
||
|
return Database::fetch_array($Res,0);
|
||
|
|
||
|
}
|
||
|
/*!\brief return the first day of periode
|
||
|
*the this->p_id must be set
|
||
|
*\return a string with the date (DD.MM.YYYY)
|
||
|
*/
|
||
|
public function first_day($p=0)
|
||
|
{
|
||
|
if ($p==0) $p=$this->p_id;
|
||
|
list($p_start,$p_end)=$this->get_date_limit($p);
|
||
|
return $p_start;
|
||
|
}
|
||
|
/*!\brief return the last day of periode
|
||
|
*the this->p_id must be set
|
||
|
*\return a string with the date (DD.MM.YYYY)
|
||
|
*/
|
||
|
public function last_day($p=0)
|
||
|
{
|
||
|
if ($p==0) $p=$this->p_id;
|
||
|
list($p_start,$p_end)=$this->get_date_limit($p);
|
||
|
return $p_end;
|
||
|
}
|
||
|
|
||
|
function get_exercice($p_id=0)
|
||
|
{
|
||
|
if ( $p_id == 0 ) $p_id=$this->p_id;
|
||
|
$sql="select p_exercice from parm_periode where p_id=".$p_id;
|
||
|
$Res=$this->cn->exec_sql($sql);
|
||
|
if ( Database::num_row($Res) == 0) return null;
|
||
|
return Database::fetch_result($Res,0,0);
|
||
|
|
||
|
}
|
||
|
/*!\brief retrieve the periode thanks the date_end
|
||
|
*\param $p_date format DD.MM.YYYY
|
||
|
* \return the periode id
|
||
|
*\exception if not periode is found or if more than one periode is found
|
||
|
*/
|
||
|
function find_periode($p_date)
|
||
|
{
|
||
|
$sql="select p_id from parm_periode where p_start <= to_date($1,'DD.MM.YYYY') and p_end >= to_date($1,'DD.MM.YYYY') ";
|
||
|
$ret=$this->cn->exec_sql($sql,array($p_date));
|
||
|
$nb_periode=Database::num_row($ret);
|
||
|
if ( $nb_periode == 0 )
|
||
|
throw (new Exception('Aucune période trouvée',101));
|
||
|
if ( $nb_periode > 1 )
|
||
|
throw (new Exception("Trop de périodes trouvées $nb_periode pour $p_date",100));
|
||
|
$per=Database::fetch_result($ret,0);
|
||
|
$this->p_id=$per;
|
||
|
return $per;
|
||
|
}
|
||
|
/**
|
||
|
*add a exerice of 13 periode
|
||
|
*/
|
||
|
function insert_exercice($p_exercice,$nb_periode)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
if ( $nb_periode != 12 && $nb_periode != 13) throw new Exception ('Nombre de période incorrectes');
|
||
|
$this->cn->start();
|
||
|
for ($i=1;$i < 12;$i++)
|
||
|
{
|
||
|
$date_start=sprintf('01.%02d.%d',$i,$p_exercice);
|
||
|
$date_end=$this->cn->get_value("select to_char(to_date('$date_start','DD.MM.YYYY')+interval '1 month'-interval '1 day','DD.MM.YYYY')");
|
||
|
if ( $this->insert($date_start,$date_end,$p_exercice) != 0)
|
||
|
{
|
||
|
throw new Exception('Erreur insertion période');
|
||
|
}
|
||
|
}
|
||
|
if ( $nb_periode==12 && $this->insert('01.12.'.$p_exercice,'31.12.'.$p_exercice,$p_exercice) != 0 )
|
||
|
{
|
||
|
throw new Exception('Erreur insertion période');
|
||
|
}
|
||
|
if ( $nb_periode==13)
|
||
|
{
|
||
|
if ($this->insert('01.12.'.$p_exercice,'30.12.'.$p_exercice,$p_exercice) != 0 ) throw new Exception('Erreur insertion période');
|
||
|
if ($this->insert('31.12.'.$p_exercice,'31.12.'.$p_exercice,$p_exercice) != 0 ) throw new Exception('Erreur insertion période');
|
||
|
}
|
||
|
|
||
|
|
||
|
$this->cn->commit();
|
||
|
}
|
||
|
catch (Exception $e)
|
||
|
{
|
||
|
$this->cn->rollback();
|
||
|
}
|
||
|
}
|
||
|
static function test_me()
|
||
|
{
|
||
|
$cn=new Database(dossier::id());
|
||
|
$obj=new Periode($cn);
|
||
|
$obj->set_jrn(1);
|
||
|
$obj->display_form_periode();
|
||
|
}
|
||
|
}
|