<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
</XMI.header>
<XMI.content>
- <docsettings viewid="336" documentation="" uniqueid="375" />
+ <docsettings viewid="336" documentation="" uniqueid="376" />
<umlobjects>
<UML:Class stereotype="" package="" xmi.id="207" abstract="0" documentation="Clase para el manejo de los usuarios." name="SAMURAI_Usuario" static="0" scope="200" >
<UML:Operation stereotype="" package="" xmi.id="216" type="void" abstract="0" documentation="Constructor.Recibe como parametro opcional el login del usuario. y busca en la base la informacion referida a el." name="SAMURAI_Usuario" static="0" scope="200" >
<UML:Operation stereotype="" package="" xmi.id="322" type="void" abstract="0" documentation="Obtiene los datos de la base de datos" name="obtenerDatosDb" static="0" scope="202" />
<UML:Operation stereotype="" package="" xmi.id="362" type="mixed" abstract="0" documentation="Se encarga de guardar la relacion entre perfiles - permisos - sistemas" name="guardarPermisos" static="0" scope="202" />
<UML:Operation stereotype="" package="" xmi.id="363" type="mixed" abstract="0" documentation="Borra la asociacion de un perfil de un sistema con sus permisos" name="borrarPermisos" static="0" scope="202" />
+ <UML:Operation stereotype="" package="" xmi.id="376" type="mixed" abstract="0" documentation="Verifica si se puede insertar" name="verifPermisos" static="0" scope="202" />
<UML:Attribute stereotype="" package="" xmi.id="225" value="" type="int" abstract="0" documentation="Identificador del perfil.
x2c: get set" name="id" static="0" scope="202" />
<UML:Attribute stereotype="" package="" xmi.id="226" value="" type="string" abstract="0" documentation="Descripcion del perfil.
<diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" snapy="10" showatts="1" xmi.id="206" documentation="" type="402" showops="1" showpackage="0" name="Clases y Relaciones" localid="30000" showstereotype="0" showscope="1" font="helvetica,8,-1,0,50,0,0,0,0,0" linecolor="#ff0000" >
<widgets>
<UML:ConceptWidget usesdiagramfillcolour="0" width="173" showattsigs="601" usesdiagramusefillcolour="0" x="750" linecolour="#ff0000" y="290" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="238" usefillcolor="1" showattributes="1" xmi.id="207" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
- <UML:ConceptWidget usesdiagramfillcolour="0" width="126" showattsigs="601" usesdiagramusefillcolour="0" x="640" linecolour="#ff0000" y="10" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="280" usefillcolor="1" showattributes="1" xmi.id="208" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
+ <UML:ConceptWidget usesdiagramfillcolour="0" width="126" showattsigs="601" usesdiagramusefillcolour="0" x="640" linecolour="#ff0000" y="10" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="294" usefillcolor="1" showattributes="1" xmi.id="208" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
<UML:ConceptWidget usesdiagramfillcolour="0" width="165" showattsigs="601" usesdiagramusefillcolour="0" x="200" linecolour="#ff0000" y="10" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="630" usefillcolor="1" showattributes="1" xmi.id="209" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
<UML:ConceptWidget usesdiagramfillcolour="0" width="131" showattsigs="601" usesdiagramusefillcolour="0" x="480" linecolour="#ff0000" y="310" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="210" usefillcolor="1" showattributes="1" xmi.id="210" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
<UML:ConceptWidget usesdiagramfillcolour="0" width="46" showattsigs="601" usesdiagramusefillcolour="0" x="490" linecolour="#ff0000" y="10" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#d5d5cf" height="28" usefillcolor="1" showattributes="1" xmi.id="264" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
<UML:AssocWidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="208" widgetaid="265" documentation="" type="501" >
<linepath>
<startpoint startx="537" starty="120" />
- <endpoint endx="640" endy="150" />
+ <endpoint endx="640" endy="157" />
</linepath>
</UML:AssocWidget>
<UML:AssocWidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="207" widgetaid="265" documentation="" type="501" >
<diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" snapy="10" showatts="1" xmi.id="336" documentation="" type="402" showops="1" showpackage="0" name="Clases" localid="30000" showstereotype="0" showscope="1" font="helvetica,8,-1,0,50,0,0,0,0,0" linecolor="#ff0000" >
<widgets>
<UML:ConceptWidget usesdiagramfillcolour="0" width="46" showattsigs="601" usesdiagramusefillcolour="0" x="610" linecolour="#ff0000" y="20" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#d5d5cf" height="28" usefillcolor="1" showattributes="1" xmi.id="264" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
- <UML:ConceptWidget usesdiagramfillcolour="0" width="469" showattsigs="601" usesdiagramusefillcolour="0" x="10" linecolour="#ff0000" y="240" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="280" usefillcolor="1" showattributes="1" xmi.id="208" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
+ <UML:ConceptWidget usesdiagramfillcolour="0" width="469" showattsigs="601" usesdiagramusefillcolour="0" x="10" linecolour="#ff0000" y="240" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="294" usefillcolor="1" showattributes="1" xmi.id="208" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
<UML:ConceptWidget usesdiagramfillcolour="0" width="396" showattsigs="601" usesdiagramusefillcolour="0" x="10" linecolour="#ff0000" y="10" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="210" usefillcolor="1" showattributes="1" xmi.id="210" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
<UML:ConceptWidget usesdiagramfillcolour="0" width="95" showattsigs="601" usesdiagramusefillcolour="0" x="590" linecolour="#ff0000" y="80" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="35" usefillcolor="1" showattributes="1" xmi.id="265" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
<UML:ConceptWidget usesdiagramfillcolour="0" width="473" showattsigs="601" usesdiagramusefillcolour="0" x="10" linecolour="#ff0000" y="540" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="630" usefillcolor="1" showattributes="1" xmi.id="209" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,8,-1,0,50,0,0,0,0,0" />
<listitem open="0" type="814" id="330" label="responsable" />
<listitem open="0" type="815" id="229" label="SAMURAI_Perfil" />
<listitem open="0" type="814" id="227" label="tipo" />
+ <listitem open="0" type="815" id="376" label="verifPermisos" />
</listitem>
<listitem open="0" type="813" id="210" label="SAMURAI_Permiso" >
<listitem open="0" type="815" id="364" label="asociadoASistema" />
if (PEAR::isError($res)) {
return $res;
}
+
+ //VERIFICO QUE NO HAYA UN PERFIL CON LOS MISMOS PERMISOS YA ASIGNADO AL SISTEMA
+ $res = $this->_verifPermisos();
+ if (PEAR::isError($res)) {
+ return $res;
+ }
//Modifico la tabla perm_perfil_sist
$res = $this->_borrarPermisos();
if (PEAR::isError($res)) {
*/
function _guardarPermisos() // ~X2C
{
- //VERIFICO QUE NO HAYA UN PERFIL CON LOS MISMOS PERMISOS YA ASIGNADO AL SISTEMA
$sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
- $tmp = $sql['verif_perm_perfil_sist'];
- $dbh = $this->_db->prepare($tmp);
- $tmp = array ($_SESSION['samurai']['id_sistema']);
- $res = $this->_db->execute($dbh,$tmp);
- $perm = array();
- while ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
- $perm[$re['id_perfil']][] = $re['id_permiso'].'##'.$re['observaciones'];
- }
- foreach ($perm as $key => $p) {
- $rta1 = array_diff($p, $this->getPermisos());
- $rta2 = array_diff($this->getPermisos(), $p);
- if (!$rta1 && !$rta2) {
- echo 1;
- $perf = new SAMURAI_Perfil($this->_db, $key);
- return new PEAR_Error("El perfil \"".$perf->getDescripcion()."\" contiene los mismos permisos.");
- }
+ //VERIFICO QUE NO HAYA UN PERFIL CON LOS MISMOS PERMISOS YA ASIGNADO AL SISTEMA
+ $res = $this->_verifPermisos();
+ if (PEAR::isError($res)) {
+ return $res;
}
//GRABO EN PERM_PERFIL_SIST
}
// -X2C
+ // +X2C Operation 376
+ /**
+ * Verifica si se puede insertar
+ *
+ * @return bool
+ * @access protected
+ */
+ function _verifPermisos() // ~X2C
+ {
+ //VERIFICO QUE NO HAYA UN PERFIL CON LOS MISMOS PERMISOS YA ASIGNADO AL SISTEMA
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ $tmp = $sql['verif_perm_perfil_sist'];
+ $dbh = $this->_db->prepare($tmp);
+ $tmp = array ($_SESSION['samurai']['id_sistema']);
+ $res = $this->_db->execute($dbh,$tmp);
+ $perm = array();
+ while ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
+ $perm[$re['id_perfil']][] = $re['id_permiso'].'##'.$re['observaciones'];
+ }
+ foreach ($perm as $key => $p) {
+ $rta1 = array_diff($p, $this->getPermisos());
+ $rta2 = array_diff($this->getPermisos(), $p);
+ if (!$rta1 && !$rta2) {
+ $perf = new SAMURAI_Perfil($this->_db, $key);
+ return new PEAR_Error("El perfil \"".$perf->getDescripcion()."\" contiene los mismos permisos.");
+ }
+ }
+ return true;
+ }
+ // -X2C
+
} // -X2C Class :SAMURAI_Perfil
-?>
\ No newline at end of file
+?>
} // -X2C Class :SAMURAI_Sistema
-?>
+?>
\ No newline at end of file
require_once 'MECON/Marco.php';
require_once 'SAMURAI/DB.php';
+require_once 'util.php';
session_start();
--- /dev/null
+<?php
+// vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
+// +----------------------------------------------------------------------+
+// | PHP Version 4 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2003 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 2.02 of the PHP license, |
+// | that is bundled with this package in the file LICENSE, and is |
+// | available at through the world-wide-web at |
+// | http://www.php.net/license/2_02.txt. |
+// | If you did not receive a copy of the PHP license and are unable to |
+// | obtain it through the world-wide-web, please send a note to |
+// | license@php.net so we can mail you a copy immediately. |
+// +----------------------------------------------------------------------+
+// | Created: lun jul 28 13:49:33 ART 2003
+// | Author: Martin Marrese <mmarre@mecon.gov.ar>
+// +----------------------------------------------------------------------+
+//
+// $Id$
+//
+// Utilidades varias
+
+
+ /**
+ * Traduce de ingles a castellano
+ *
+ * @return string
+ */
+ function traducir($in) {
+ $tabla = array (
+ 'DB Error: already exists' => 'DB Error: ya existe el
+ registro en base'
+ );
+ if (array_key_exists($in,$tabla)) {
+ $out = $tabla[$in];
+ }
+ else {
+ $out = $in;
+ }
+ return $out;
+ }
+?>
$FORM->addElement ('select', 'permisos' , 'Permisos' , $PERMISOS, array('size' => '5', 'multiple' => 'true'));
$FORM->addElement ('select', 'tipo_perfil', 'Tipo Perfil', array('E' => 'Externo', 'I' => 'Interno', 'D' => 'Dios'), array ('size' => '1'));
$FORM->addElement ('hidden', 'responsable', $responsable);
- $group[] = HTML_QuickForm::createElement('submit', 'aceptar' , 'Grabar', array ('onClick' => 'javascript:if(confirm(\'¿Esta Seguro?\')) return true; return false;'));
+ $group[] = HTML_QuickForm::createElement('submit', 'aceptar' , 'Grabar');
$group[] = HTML_QuickForm::createElement('submit', 'cancelar', 'Cancelar', array ('onClick' => 'javascript:window.location=\'perfiles\';return false;'));
$FORM->addGroup($group,'botones');
}
//ELIMINACION -> modifico el valor del boton
if ($_GET['accion'] == 'e') {
$aceptar->setValue('Eliminar');
+ $aceptar->updateAttributes(array ('onClick' => 'javascript:if (confirm(\'¿Esta Seguro?\')) return true;return false;'));
$FORM->freeze();
}
}
$PAGE->addBodyContent($FORM);
$imagen = new HTML_Image('/MECON/images/general_cerrar.gif');
$PAGE->addBodyContent('<a href="" onClick=\'self.close();return false;\'>'.$imagen->toHtml().'</a>');
+ $PAGE->setTitle('Datos del Perfil');
$PAGE->display();
// }}}
//FIN
$FORM->addElement ('hidden', 'id_permiso');
$FORM->addElement ('text' , 'desc_permiso', 'Descripcion', array('size'=>'50'));
$FORM->addElement ('hidden', 'responsable' , $_SESSION['samurai']['login']);
- $group[] = HTML_QuickForm::createElement('submit', 'aceptar' , 'Grabar', array ('onClick' => 'javascript:if (confirm(\'¿Esta Seguro?\')) return true;return false;'));
+ $group[] = HTML_QuickForm::createElement('submit', 'aceptar' , 'Grabar');
$group[] = HTML_QuickForm::createElement('submit', 'cancelar', 'Cancelar', array ('onClick' => 'javascript:history.go(-1);return true;'));
$FORM->addGroup($group,'botones');
// }}}
//ELIMINACION -> modifico el valor del boton
if ($_GET['accion'] == 'e') {
$aceptar->setValue('Eliminar');
+ $aceptar->updateAttributes(array ('onClick' => 'javascript:if (confirm(\'¿Esta Seguro?\')) return true;return false;'));
$FORM->freeze();
}
}
// VEO SI SE CANCELO {{{
$botones = $FORM->getSubmitValue('botones');
if (@$botones['cancelar']) {
- header('Location: perfiles');
+ header('Location: permisos');
}
// }}}
$desc_permiso =& $FORM->getElement ('desc_permiso');
$res = $PERMISO->guardarDatos($aceptar->getValue());
if (PEAR::isError($res)) {
- $ERROR = new MECON_HTML_Error($res->getMessage());
+ $ERROR = new MECON_HTML_Error(traducir($res->getMessage()));
if ($aceptar->getValue() == 'Eliminar') {
$FORM->freeze();
}
$FORM->addElement ('textarea', 'contacto' , 'Contacto' , array('rows' => '2','cols'=>'50'));
$FORM->addElement ('select' , 'permisos' , 'Permisos' , $PERMISOS, array('size' => '5', 'multiple' => 'multiple'));
$FORM->addElement ('hidden' , 'responsable' , $_SESSION['samurai']['login']);
- $group[] = HTML_QuickForm::createElement('submit', 'aceptar' , 'Grabar', array ('onClick' => 'javascript:if (confirm(\'¿Esta Seguro?\')) return true;return false;'));
- $group[] = HTML_QuickForm::createElement('submit', 'cancelar', 'Cancelar', array ('onClick' => 'javascript:window.location = ->\'sistemas\';return false;'));
+ $group[] = HTML_QuickForm::createElement('submit', 'aceptar' , 'Grabar');
+ $group[] = HTML_QuickForm::createElement('submit', 'cancelar', 'Cancelar', array ('onClick' => 'javascript:window.location =\'sistemas\';return false;'));
$FORM->addGroup($group,'botones');
// }}}
//AGREGO LAS REGLAS DE VALIDACION DE LOS ELEMENTOS {{{
$FORM->addRule('nombre_sistema' , 'El campo nombre es obligatorio' , 'required');
$FORM->addRule('desc_sistema' , 'El campo descripcion es obligatorio' , 'required');
$FORM->addRule('fecha_inicio' , 'El campo fecha inicio es obligatorio', 'required');
- if (isset($_GET['accion']) && $_GET['accion'] != 'e') {
- $FORM->addRule('fecha_inicio' , 'La fecha no es válida' , 'fecha' );
- $FORM->addRule('fecha_fin' , 'La fecha no es válida' , 'fecha' );
- $FORM->addRule('fecha_implementacion', 'La fecha no es válida' , 'fecha' );
- }
- $FORM->addRule('contacto' , 'El campo contacto es obligatorio' , 'required');
+// if (isset($_GET['accion']) && $_GET['accion'] != 'e') {
+ $FORM->addRule('fecha_inicio' , 'La fecha no es válida', 'fecha');
+ $FORM->addRule('fecha_fin' , 'La fecha no es válida', 'fecha');
+ $FORM->addRule('fecha_implementacion', 'La fecha no es válida', 'fecha');
+// }
+ $FORM->addRule('contacto', 'El campo contacto es obligatorio', 'required');
}
// }}}
//CREO EL OBJETO SISTEMA {{{
'Y' => $tmp->format("%Y"),
));
}
+ else {
+ $fecha_inicio->setSelectedDate(array( 'd' => '',
+ 'F' => '',
+ 'Y' => '',
+ ));
+ }
+
+
if ($tmp = $SISTEMA->getFechaFin()) {
$fecha_fin->setSelectedDate(array( 'd' => $tmp->format("%d"),
'F' => $tmp->format("%m"),
'Y' => $tmp->format("%Y"),
));
+ }
+ else {
+ $fecha_fin->setSelectedDate(array( 'd' => '',
+ 'F' => '',
+ 'Y' => '',
+ ));
}
+
if ($tmp = $SISTEMA->getFechaImplementacion()) {
$fecha_implementacion->setSelectedDate(array( 'd' => $tmp->format("%d"),
'F' => $tmp->format("%m"),
'Y' => $tmp->format("%Y"),
));
}
+ else {
+ $fecha_implementacion->setSelectedDate(array( 'd' => '',
+ 'F' => '',
+ 'Y' => '',
+ ));
+ }
$aceptar->setValue('Modificar');
//ELIMINACION -> modifico el valor del boton
if ($_GET['accion'] == 'e') {
$aceptar->setValue('Eliminar');
+ $aceptar->updateAttributes(array ('onClick' => 'javascript:if (confirm(\'¿Esta Seguro?\')) return true;return false;'));
$FORM->freeze();
}
}
$_SESSION['samurai']['id_sistema'] = $SISTEMA->getId();
}
if (PEAR::isError($res)) {
- $ERROR = new MECON_HTML_Error($res->getMessage());
+ $ERROR = new MECON_HTML_Error(traducir($res->getMessage()));
}
else {
$FORM->freeze();
$fecha_inicio = $SISTEMA->getFechaInicio();
$fecha_fin = $SISTEMA->getFechaFin();
$fecha_implementacion = $SISTEMA->getFechaImplementacion();
- $fecha_inicio = $fecha_inicio ? $fecha_inicio->format("%d-%m-%Y") : '--';
- $fecha_fin = $fecha_fin ? $fecha_fin->format("%d-%m-%Y") : '--';
- $fecha_implementacion = $fecha_implementacion ? $fecha_implementacion->format("%d-%m-%Y") : '--';
+ $fecha_inicio = $fecha_inicio ? $fecha_inicio->format("%d-%m-%Y") : '--';
+ $fecha_fin = $fecha_fin ? $fecha_fin->format("%d-%m-%Y") : '--';
+ $fecha_implementacion = $fecha_implementacion ? $fecha_implementacion->format("%d-%m-%Y") : '--';
$FORM->addElement ('static', 'id_sistema' , 'Id Sistema' , $SISTEMA->getId() );
$FORM->addElement ('static', 'nombre' , 'Nombre' , $SISTEMA->getNombre() );
$PAGE->addBodyContent($FORM);
$imagen = new HTML_Image('/MECON/images/general_cerrar.gif');
$PAGE->addBodyContent('<a href="" onClick=\'self.close();return false;\'>'.$imagen->toHtml().'</a>');
+ $PAGE->setTitle('Datos del Sistema');
$PAGE->display();
// }}}
//FIN
$f_group =& $FORM->addGroup($group,'botones', '', ', ');
if ($accion == 'Eliminar') {
+ $f_aceptar->updateAttributes(array ('onClick' => 'javascript:if (confirm(\'¿Esta Seguro?\')) return true;return false;'));
$FORM->freeze();
}
// }}}
$TABLAPERM->addRow($row, 'titulo');
$asocs = $SISTEMA->getAsociaciones();
-
+
foreach ($asocs as $key => $asoc) {
+ $obs = ereg_replace(' ' , '%20', $asoc['obs']); //Cambio los espacios por %20 para que funcione bien con el netscape
$estilo = 'comun';
$permiso = new SAMURAI_Permiso($DB, $asoc['id']);
$Modif = ereg_replace('##PERMISO##', $asoc['id'] , $aHrefModif);
$Elim = ereg_replace('##PERMISO##', $asoc['id'] , $aHrefElim );
- $Modif = ereg_replace('##OBS##' , $asoc['obs'], $Modif );
- $Elim = ereg_replace('##OBS##' , $asoc['obs'], $Elim );
+ $Modif = ereg_replace('##OBS##' , $obs , $Modif );
+ $Elim = ereg_replace('##OBS##' , $obs , $Elim );
$Modif = ereg_replace('##ACCION##' , 'm' , $Modif );
$Elim = ereg_replace('##ACCION##' , 'e' , $Elim );
$row = array ($permiso->getDescripcion(), $asoc['obs'], $Modif, $Elim);
if (!@$_SESSION['samurai']['id_sistema'] || !@$_SESSION['samurai']['login']) {
header('Location: ./../sel-sistema');
}
- // }}}
+ // }}}
$sistemas = SAMURAI_Sistema::getSistemas($DB);
$PAGE->addBodyContent($FORM);
$imagen = new HTML_Image('/MECON/images/general_cerrar.gif');
$PAGE->addBodyContent('<a href="" onClick=\'self.close();return false;\'>'.$imagen->toHtml().'</a>');
+ $PAGE->setTitle('Datos del Usuario');
$PAGE->display();
// }}}
//FIN