altocompta/html/annulation.php
Dany De Bontridder 8834d14ee5 Merged revisions 2258,2260-2262,2264-2268,2270-2283,2285-2297,2299-2322,2324-2340 via svnmerge from
svn+ssh://danydb@svn/svn/phpcompta/branches/rel430

........
  r2258 | danydb | 2008-12-18 23:21:00 +0100 (Thu, 18 Dec 2008) | 1 line
  
  Add debug
........
  r2262 | danydb | 2008-12-19 22:38:25 +0100 (Fri, 19 Dec 2008) | 1 line
  
  Add a local admin 
........
  r2270 | danydb | 2008-12-21 20:11:26 +0100 (Sun, 21 Dec 2008) | 1 line
  
  Doc. remove the useless todo list
........
  r2271 | danydb | 2008-12-22 21:18:46 +0100 (Mon, 22 Dec 2008) | 3 lines
  
  Remove obsolete functions insertRapt, deleteRapt and getconcerned
  Remove obsolete file user_update
........
  r2272 | danydb | 2008-12-22 21:21:46 +0100 (Mon, 22 Dec 2008) | 2 lines
  
  Remove obsolete function isFicheOfJrn
........
  r2273 | danydb | 2008-12-22 21:44:28 +0100 (Mon, 22 Dec 2008) | 1 line
  
  Improve Invoice : add the username 
........
  r2287 | danydb | 2009-01-13 21:37:07 +0100 (Tue, 13 Jan 2009) | 1 line
  
  Code cleaning replace GetConcerned by Acc_Reconciliation
........
  r2288 | danydb | 2009-01-13 21:38:40 +0100 (Tue, 13 Jan 2009) | 1 line
  
  Add a comment on jrn operation
........
  r2289 | danydb | 2009-01-13 21:40:13 +0100 (Tue, 13 Jan 2009) | 1 line
  
  Code cleaning : add comments to the code
........
  r2290 | danydb | 2009-01-13 21:40:46 +0100 (Tue, 13 Jan 2009) | 1 line
  
  Code cleaning replace GetConcerned by Acc_Reconciliation
........
  r2291 | danydb | 2009-01-13 21:41:35 +0100 (Tue, 13 Jan 2009) | 1 line
  
  Code cleaning replace GetConcerned by Acc_Reconciliation
........
  r2292 | danydb | 2009-01-13 21:42:15 +0100 (Tue, 13 Jan 2009) | 1 line
  
  Add documentation about new tags
........
  r2293 | danydb | 2009-01-13 21:43:22 +0100 (Tue, 13 Jan 2009) | 1 line
  
  Code cleaning start rewriting of the security part 
........
  r2294 | danydb | 2009-01-14 20:09:18 +0100 (Wed, 14 Jan 2009) | 1 line
  
  Improve : template of security + security code
........
  r2295 | danydb | 2009-01-14 20:21:51 +0100 (Wed, 14 Jan 2009) | 1 line
  
  Improve security : add new variable
........
  r2296 | danydb | 2009-01-14 20:39:58 +0100 (Wed, 14 Jan 2009) | 1 line
  
  Improve security : modify layout
........
  r2297 | danydb | 2009-01-15 19:21:47 +0100 (Thu, 15 Jan 2009) | 1 line
  
  Improve security : user setting
........
  r2299 | danydb | 2009-01-15 19:28:56 +0100 (Thu, 15 Jan 2009) | 2 lines
  
  Clean code : can_request doens't have a connx parameter
........
  r2300 | danydb | 2009-01-16 19:12:47 +0100 (Fri, 16 Jan 2009) | 1 line
  
  Improve Ecriture directe libelle : new widget js_search_card_control
........
  r2301 | danydb | 2009-01-16 22:29:39 +0100 (Fri, 16 Jan 2009) | 1 line
  
  Improve Quick Writing : remove span, and update the comment field
........
  r2302 | danydb | 2009-01-16 23:01:24 +0100 (Fri, 16 Jan 2009) | 1 line
  
  Improve cosmetic : GL + remove the select topmenu
........
  r2303 | danydb | 2009-01-19 08:41:09 +0100 (Mon, 19 Jan 2009) | 1 line
  
  Cosmetic : a inline
........
  r2304 | danydb | 2009-01-20 23:03:59 +0100 (Tue, 20 Jan 2009) | 6 lines
  
  Code Cleaning
  Security : remove obsolete files & function
  Class_user : add new functions for the security
  Only the menu in text mode with a break line
........
  r2305 | danydb | 2009-01-20 23:05:01 +0100 (Tue, 20 Jan 2009) | 1 line
  
  code cleaning rewriting of Security 
........
  r2306 | danydb | 2009-01-21 21:13:15 +0100 (Wed, 21 Jan 2009) | 1 line
  
  Security printing unicode and fix some bugs
........
  r2309 | danydb | 2009-01-26 19:56:28 +0100 (Mon, 26 Jan 2009) | 1 line
  
  ADD : company without VAT
........
  r2310 | danydb | 2009-01-26 23:33:14 +0100 (Mon, 26 Jan 2009) | 1 line
  
  Add : no vat for Purchase ledger 
........
  r2312 | danydb | 2009-01-28 19:57:30 +0100 (Wed, 28 Jan 2009) | 1 line
  
  Integration 
........
  r2313 | danydb | 2009-01-28 22:46:27 +0100 (Wed, 28 Jan 2009) | 1 line
  
  Work with or without VAT
........
  r2314 | danydb | 2009-01-29 22:18:57 +0100 (Thu, 29 Jan 2009) | 2 lines
  
  Remove debug info
........
  r2315 | danydb | 2009-01-29 23:23:14 +0100 (Thu, 29 Jan 2009) | 1 line
  
  ADD the possibility to enter a piece number
........
  r2316 | danydb | 2009-01-31 23:20:00 +0100 (Sat, 31 Jan 2009) | 1 line
  
  Documentation
........
  r2317 | danydb | 2009-02-04 20:14:54 +0100 (Wed, 04 Feb 2009) | 1 line
  
  Template for ledger
........
  r2318 | danydb | 2009-02-05 15:52:58 +0100 (Thu, 05 Feb 2009) | 1 line
  
  Add PJ setting + default in Ledger, fix bug in listJrn
........
  r2319 | danydb | 2009-02-05 17:09:56 +0100 (Thu, 05 Feb 2009) | 2 lines
  
  Search by PJ
........
  r2320 | danydb | 2009-02-05 17:23:24 +0100 (Thu, 05 Feb 2009) | 1 line
  
  Finished with pj
........
  r2321 | danydb | 2009-02-05 18:11:35 +0100 (Thu, 05 Feb 2009) | 1 line
  
  PJ is readonly
........
  r2322 | danydb | 2009-02-05 20:10:34 +0100 (Thu, 05 Feb 2009) | 1 line
  
  Saldo : write the first saldo (ajax)
........
  r2324 | danydb | 2009-02-06 00:07:50 +0100 (Fri, 06 Feb 2009) | 5 lines
  
  Add database script
  Cosmetic (menu)
  Fix Bug 
........
  r2325 | danydb | 2009-02-06 14:07:07 +0100 (Fri, 06 Feb 2009) | 1 line
  
  Improve Pj seq 
........
  r2326 | danydb | 2009-02-09 22:47:23 +0100 (Mon, 09 Feb 2009) | 6 lines
  
  Fix Bug privilege (compta_ven)
  Fix if the pj is empty do not increment the sequence (class_acc_operation)
  Fix remove PJ if pj is empty (modify_op.php)
  Cosmetic do not print PJ if pj is null or empty (listing)
........
  r2327 | danydb | 2009-02-10 21:04:48 +0100 (Tue, 10 Feb 2009) | 5 lines
  
  Fix bug in PJ seq
  Fix bug in export jrn csv
  Improve avoid the removal of vat rate
  Add security for card
........
  r2328 | danydb | 2009-02-12 20:26:36 +0100 (Thu, 12 Feb 2009) | 4 lines
  
  Cosmetic menu_tool
  Impression add tag PJ
  Cosmetic menu administration
........
  r2329 | danydb | 2009-02-12 21:43:19 +0100 (Thu, 12 Feb 2009) | 5 lines
  
  filter the folder the local admin can access
  add a function check_dossier which must be implemented everywhere
  Printing with PJ
  NoAccess default = javascript
........
  r2330 | danydb | 2009-02-14 18:11:49 +0100 (Sat, 14 Feb 2009) | 2 lines
  
  improve add libelle for balance csv
........
  r2331 | danydb | 2009-02-14 19:10:56 +0100 (Sat, 14 Feb 2009) | 7 lines
  
  Balance csv add label
  Bug Financial ledger list
  BUG period access 
  BUG stock access
  IMPROVE list ledger with PJ
........
  r2332 | danydb | 2009-02-15 18:21:59 +0100 (Sun, 15 Feb 2009) | 1 line
  
  Bug order was not saved for report
........
  r2333 | danydb | 2009-02-15 18:22:17 +0100 (Sun, 15 Feb 2009) | 1 line
  
  Add security for normal user
........
  r2334 | danydb | 2009-02-15 18:23:24 +0100 (Sun, 15 Feb 2009) | 3 lines
  
  Bug forget to import class
........
  r2335 | danydb | 2009-02-17 21:33:17 +0100 (Tue, 17 Feb 2009) | 5 lines
  
  Fix quick writing let write
  Fix card priv
  Remove button if no priv to add card or cancel an op
........
  r2336 | danydb | 2009-02-19 21:01:36 +0100 (Thu, 19 Feb 2009) | 4 lines
  
  Check for CA
  common Bug with the repository
........
  r2337 | danydb | 2009-02-19 21:50:35 +0100 (Thu, 19 Feb 2009) | 2 lines
  
  Test the parameter security part
........
2009-02-19 21:11:08 +00:00

440 lines
13 KiB
PHP

<?php
/*
* This file is part of PhpCompta.
*
* PhpCompta 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.
*
* PhpCompta 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 PhpCompta; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
// Copyright Author Dany De Bontridder ddebontridder@yahoo.fr
/* $Revision$ */
/*! \file
* \brief in a popup window manage the deletion of the operations
*/
include_once ("ac_common.php");
include_once ("poste.php");
include_once("preference.php");
include_once("central_inc.php");
include_once("user_common.php");
include_once("check_priv.php");
include_once ("postgres.php");
include_once("jrn.php");
require_once("class_widget.php");
require_once("class_acc_ledger.php");
require_once("class_acc_operation.php");
require_once ('class_periode.php');
require_once('class_acc_reconciliation.php');
/* Admin. Dossier */
include_once ("class_user.php");
require_once('class_dossier.php');
$gDossier=dossier::id();
$cn=DbConnect($gDossier);
$User=new User($cn);
$User->Check();
$User->check_dossier(dossier::id());
$User->can_request(GEOP,0);
html_page_start($User->theme,"onLoad='window.focus();'");
echo JS_VIEW_JRN_MODIFY;
if ( isset( $_REQUEST['p_jrn'] )) {
$p_jrn=$_GET['p_jrn'];
}
// Check privilege
if ( $User->check_jrn($_GET['p_jrn']) != 'W') {
NoAccess();
exit -1;
}
list ($l_array,$max_deb,$max_cred)=get_data($cn,$_GET['jrn_op']);
foreach ($l_array as $key=>$element) {
${"e_$key"}=$element;
echo_debug('annulation.php',__LINE__,"e_$key =$element");
}
// cancel an operation
if ( isset ($_POST['annul']) ) {
/* Confirm it first */
if ( ! isset ( $_POST['confirm'])) {
$own=new Own($cn);
if ( $own->MY_STRICT=='Y') {
$msg="Vous utilisez le mode stricte, l'annulation est interdite";
echo '<h2 class="info">Confirmation</h2>';
echo '<p><span class="error">'.$msg.'</span></p>';
exit();
}
?>
<p>
<h2 class="info">Confirmation</h2>
<br>
<p><span class="error">Attention: l'effacement d'une op&eacute;ration peut rompre la s&eacute;quence de la num&eacute;rotation des factures surtout celles g&eacute;n&eacute;r&eacute;es automatiquement, soyez tr&egrave;s prudent quand vous effacez. La pi&egrave;ce jointe sera elle aussi effac&eacute;e. Si vous utilisez la comptabilit&eacute; analytique les op&eacute;rations li&eacute;es seront effac&eacute;es.
</span>
</p>
<p> Voulez-vous vraiment annuler cette information soit par une remise &agrave; z&eacute;ro des montants
soit par son &eacute;criture inverse ?
</p>
<span>
<FORM METHOD="POST" ACTION="annulation.php?p_jrn=<?php echo $_GET['p_jrn'];?>&jrn_op=<?php echo $_GET['jrn_op'];?>">
<?php echo dossier::hidden(); ?>
<INPUT TYPE="HIDDEN" NAME="annul">
<INPUT TYPE="HIDDEN" NAME="p_id" value="<?php echo $_POST['p_id']; ?>">
<INPUT TYPE="SUBMIT" NAME="confirm" value="Oui">
</FORM>
<FORM METHOD="GET" ACTION="annulation.php">
<?php echo dossier::hidden(); ?>
<INPUT TYPE="HIDDEN" NAME="p_jrn" value="<?php echo $_REQUEST['p_jrn']; ?>">
<INPUT TYPE="HIDDEN" NAME="p_id" value="<?php echo $_REQUEST['p_id']; ?>">
<INPUT TYPE="HIDDEN" NAME="jrn_op" value="<?php echo $_REQUEST['jrn_op']; ?>">
<INPUT TYPE="SUBMIT" NAME="not_confirm" value="non">
</form>
</span>
<?php
return;
} // end confirm
// Remove is confirmed
if ( isset ($_POST['p_id'])) {
$p_id=$_POST['p_id'];
if ($p_id != -1 ) { // A
// userPref contient la periode par default
$userPref=$User->get_periode($cn);
list ($l_date_start,$l_date_end)=get_periode($cn,$userPref);
$per=new Periode($cn);
$per->set_jrn($p_jrn);
$per->set_periode($userPref);
// Periode ferme
if ( $per->is_open()==0)
{
$msg="Votre periode par defaut est fermee, changez vos preferences";
echo_error($msg);
echo "<SCRIPT>alert('$msg');</SCRIPT>";
$p_id=-1;
}
if ( $p_id != -1 ) { //B
// Test whether date of the operation is in a closed periode
// get the period_id
$p=ExecSqlParam($cn,"select jr_tech_per from jrn where jr_grpt_id=$1",array($_REQUEST['jrn_op']));
$period_id=pg_fetch_result($p,0,0);
// thanks jrn_op (jrn.jr_id) we find out the concerned ledger
$sql="select jr_def_id from jrn where jr_grpt_id=".$_REQUEST['jrn_op'];
$r=ExecSql($cn,$sql);
$nJrn=pg_fetch_result($r,0,0);
$per=new Periode($cn);
$per->set_jrn($nJrn);
$per->set_periode($period_id);
$own=new Own($cn);
// Check the period_id
if ( $per->is_open() == 0 || $own->MY_STRICT=='Y')
{
try
{
// if the operation is in a closed or centralized period
// the operation is voided thanks the opposite operation
StartSql($cn);
$grp_new=NextSequence($cn,'s_grpt');
$seq=NextSequence($cn,"s_jrn");
$oJrn=new Acc_Ledger($cn,$l_array['jr_def_id']);
$p_internal=$oJrn->compute_internal_code($seq);
$sql= "insert into jrn (
jr_id,jr_def_id,jr_montant,jr_comment,
jr_date,jr_grpt_id,jr_internal
,jr_tech_per, jr_valid
) select $seq,jr_def_id,jr_montant,'Annulation '||jr_comment,
to_date($1,'DD.MM.YYYY'),$grp_new,'$p_internal',
$userPref, true
from
jrn
where jr_grpt_id=$2";
$Res=ExecSqlParam($cn,$sql,array($l_date_start,$_POST['p_id']));
// Check return code
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
// Make also the change into jrnx
$sql= "insert into jrnx (
j_date,j_montant,j_poste,j_grpt,
j_jrn_def,j_debit,j_text,j_internal,j_tech_user,j_tech_per,j_qcode
) select now(),j_montant,j_poste,$grp_new,
j_jrn_def,not (j_debit),j_text,'$p_internal','".$User->id."',
$userPref,j_qcode
from
jrnx
where j_grpt=".$_POST['p_id'];
$Res=ExecSql($cn,$sql);
// Check return code
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
// Mark the operation invalid into the ledger
// to avoid to nullify twice the same op.
$sql="update jrn set jr_comment='Annule : '||jr_comment where jr_grpt_id=".$_POST['p_id'];
$Res=ExecSql($cn,$sql);
// Check return code
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
// Set the record to A (annulate) in quant_sold and quand_purchase
$Res=ExecSql($cn,"update quant_sold set ".
" qs_valid='A' where qs_internal='".$l_array['jr_internal']."'"
);
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
$Res=ExecSql($cn,"update quant_purchase set ".
" qp_valid='A' where qp_internal='".$l_array['jr_internal']."'"
);
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
// Add a "concerned operation to bound these op.together
//
$rec=new Acc_Reconciliation ($cn);
$rec->set_jr_id($seq);
$rec->insert($l_array['jr_id']);
// Check return code
if ( $Res == false ) { throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));}
// the table stock must updated
// also in the stock table
$sql="delete from stock_goods where sg_id = any ( select sg_id
from stock_goods natural join jrnx where j_grpt=".$_POST['p_id'].")";
$Res=ExecSql($cn,$sql);
// Check return code
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
}
catch (Exception $e)
{
Rollback($cn);
$msg="D&eacute;sol&eacute; mais il n a pas &eacute;t&eacute; possible d'annuler ".
"cette op&eacute;ration";
echo "<SCRIPT>alert('$msg');</SCRIPT>";
echo '<span class="error">'.
'Erreur : '.
__FILE__.':'.__LINE__.' '.
$e->getMessage();
echo '<p>';
echo 'Postez ce message sur '.
'<A HREF="http://www.phpcompta.org/pmwiki.php/Forum/Forum">'.
'le forum de www.phpcompta.org</A> '.
'</p>';
$p_id=-1;
exit(-1);
}
Commit($cn);
// close the window
echo '<h2 class="info"> Op&eacute;ration Annul&eacute;e</h2>';
?>
<script>
window.close();
self.opener.RefreshMe();
</script>
<?php
} else {
// operation is not in a closed period
// Check only if a line is valid or not
if ( isValid($cn,$p_id) == 1 ) {
try
{
// Start Sql
StartSql($cn);
$sql="insert into del_action(del_name,del_time) values ($1,now());";
ExecSqlParam($cn,$sql,array($_SESSION['g_user']));
// Set the record to A (annulate) in quant_sold and quand_purchase
// delete from the rapt table
$sql="delete from jrn_rapt where jr_id = any (select jr_id from jrn ".
" where jr_grpt_id = ".$_POST['p_id'].")";
$Res=ExecSql($cn,$sql);
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
$Res=ExecSql($cn,"delete from quant_sold ".
" where qs_internal='".$l_array['jr_internal']."'"
);
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
$Res=ExecSql($cn,"delete from quant_purchase ".
" where qp_internal='".$l_array['jr_internal']."'"
);
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
if ( isset($l_array['jr_pj']) && $l_array['jr_pj'] != "")
{
$Res=pg_lo_unlink($cn,$l_array['jr_pj']);
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__.
"Echec Effacement lob [ $sql ]"));
}
// delete from the stock table
$sql="delete from stock_goods where sg_id = any ( select sg_id
from stock_goods natural join jrnx where j_grpt=".$_POST['p_id'].")";
$Res=ExecSql($cn,$sql);
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
// delete from CA
$sql="delete from operation_analytique where j_id in (select j_id from";
$sql.=" jrnx where j_grpt=".$_POST['p_id'].")";
$Res=ExecSql($cn,$sql);
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
// delete from jrnx & jrn
$sql="delete from jrnx where j_grpt=".$_POST['p_id'];
$Res=ExecSql($cn,$sql);
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__."sql a echoue [ $sql ]"));
// build the sql stmt for jrn
$sql= "delete from jrn where jr_grpt_id=".$_POST['p_id'];
$Res=ExecSql($cn,$sql);
if ( $Res == false)
throw (new Exception(__FILE__.__LINE__." sql a echoue [ $sql ]"));
}
catch (Exception $e)
{
Rollback($cn);
$msg="Desole mais il n a pas ete possible d'annuler ".
"cette operation";
echo "<SCRIPT>alert('$msg');</SCRIPT>";
echo '<span class="error">'.
'Erreur : '.
__FILE__.':'.__LINE__.' '.
$e->getMessage();
echo '<p>';
echo 'Postez ce message sur '.
'<A HREF="http://www.phpcompta.org/pmwiki.php/Forum/Forum">'.
'le forum de www.phpcompta.org</A> '.
'</p>';
$p_id=-1;
exit(-1);
}
Commit($cn);
echo '<h2 class="info"> Op&eacute;ration Annul&eacute;e</h2>';
?>
<script>
window.close();
self.opener.RefreshMe();
</script>
<?php
}// if isValid
} // else if period is closed
}//B p_id == -1
}//A p_id == -1
} // if Post['p_id']
}// if annul
echo '<div align="center"> Op&eacute;ration '.$l_array['jr_internal'].'</div>
<div>
<form action="'.$_SERVER['REQUEST_URI'].'" method="post" >';
$a=new widget("text");
$a->SetReadOnly(false);
echo '<div style="border-style:solid;border-width:1pt;">';
$a->size=80;
echo $a->IOValue("comment",$e_comment,"Description");
echo '</DIV>';
if ( isset ($e_ech) ) {
echo "<DIV> Echeance $e_ech </DIV>";
}
for ( $i = 0; $i < $max_deb;$i++) {
$lib=GetPosteLibelle($gDossier,${"e_class_deb$i"});
echo '<div style="background-color:#BFC2D5;">';
echo ${"e_class_deb$i"}." $lib "."<B>".${"e_mont_deb$i"}."</B>";
echo "</div>";
}
for ( $i = 0; $i < $max_cred;$i++) {
$lib=GetPosteLibelle($gDossier,${"e_class_cred$i"});
echo '<div style="background-color:#E8F4FF;">';
echo ${"e_class_cred$i"}." $lib "."<B>".${"e_mont_cred$i"}."</B>";
echo '</div>';
}
/* concerned operation */
$rec=new Acc_Reconciliation($cn);
$rec->set_jr_id($e_jr_id);
$a=$rec->get();
if ( $a != null ) {
foreach ($a as $key => $element) {
echo "operation concern&eacute;e <br>";
$operation=new Acc_Operation($cn);
$operation->jr_id=$element;
$w=new widget("button");
$w->label=$operation->get_internal();
$w->javascript="modifyOperation('".$element."','".$_REQUEST['PHPSESSID']."',".dossier::id().
','.$_REQUEST['p_jrn'].",'S')";
echo $w->IOValue().'<br>';
}//for
}// if ( $a != null ) {
echo dossier::hidden().
'
<input type="hidden" name="p_id" value="'.$_GET['jrn_op'].'">
<input type="submit" name="annul" value="Mise &agrave; z&eacute;ro ou effacement">
<input type="button" name="cancel" value="Retour" onClick="window.close();">
</form>';
html_page_stop();
?>