Bienvenido a los foros %s

Foro comunidad hispana Dolibarr

Identificarse Registrarse

permisos y restricciones

Cuestiones sobre cómo utilizar Dolibarr, ayudas sobre las funcionalidades o cualquier cuestión que no está relacionada con un error.
andresweb
Novato
Mensajes: 12
Registrado: Mar, 27/06/2017, 11:10

permisos y restricciones

Mensaje por andresweb »

Buenas amigos del foro, tengo una consulta si me pueden ayudar o dar una pista. Las consultas son:

1.- Como puedo asignar a un usuario el permiso de solo ingresar al menu "diccionarios", "empresas/institucion" de cofiguración. He intentado crear los menus en el menu superior utilidades mediante Configuración -> Menús inclusive hay 2 opciones que indican la habilitación a 1 y permisos a 1, pero no aparecen en la seccion de permisos para los usuarios. Simplemente cuando ingreso como otro usuario que no sea administrador no tiene permiso.

2.- Como puedo tener 2 usuarios administradores. Uno que tenga todos los permisos y otro que este debajo de este y que no pueda modificar al de mas nivel. Actualente tengo 1 admin que es el de instalación que tiene permiso a todo y tengo otro que no es admin pero que le di permisos al modulo de usuarios y veo que puede modificar los datos del superadmin. Inclusive si le doy opción a modificar los permisos tambien puede cambiar los permisos del superadmin e inclusive la clave.

3.- Como puedo restringir que segun el usuario logeado pueda solo descontar del almacen al que pertenece.

En todos los casos que archivo debo modificar? o que configuración emplear? Espero su gran ayuda. Seguire investigado.

andresweb
Novato
Mensajes: 12
Registrado: Mar, 27/06/2017, 11:10

Mensaje por andresweb »

Amigos del foro para la consulta 3 he pensado lo sgte: Crear un select adicional en usuario que me liste los almacenes y registrar a cada usuario un almacen. Luego en cada select del usuario logeado verificar que id de almacen tiene y filtrar. Si el usuario no tiene ningun almacen asignado pues mirara todos los almacenes. Por lo tanto he realizado lo sgte.:

- Primero he creado un campo extrafield a la tabla usuario de nombre cbo_area y listo los ids y nombres de la tabla almacen guardando el id del almacen al usuario.

- Luego en el archivo product/class/html.formproduct.class.php he modificado la consulta que me devuelve los almacenes y le he agregado que filtre por id quedando asi

function loadWarehouses($fk_product=0, $batch = '', $status='', $sumStock = true, $exclude='',$ids_warehouse='')

y agrego el where

if($ids_warehouse!=''){ $sql.= ' AND e.rowid IN('.$ids_warehouse.')'; }

- Luego en el mismo archivo en la funcion:

function selectWarehouses($selected='',$htmlname='idwarehouse',$filterstatus='',$empty=0,$disabled=0,$fk_product=0,$empty_label='', $showstock=0, $forcecombo=0, $events=array(), $morecss='minwidth200', $exclude='', $showfullpath=1, $ids_warehouse='')

- agregue el ultimo parametro que listara de la bd y armara el select con el id de almacen que le envie. En este caso solo llenare el select de almacen de origen en transferencias con el almacen del usuario logeado.

$this->loadWarehouses($fk_product, '', $filterstatus, true, $exclude, $ids_warehouse);

Ahora en la vista del formulario en el archivo product/stock/tpl/stocktransfer.tpl.php agregue la variable pero con un valor de la sgte manera

print $formproduct->selectWarehouses((GETPOST("dwid")?GETPOST("dwid",'int'):(GETPOST('id_entrepot')?GETPOST('id_entrepot','int'):'ifone')), 'id_entrepot', 'warehouseopen,warehouseinternal', 1,0,0,'',0,0,array(),'minwidth200','',1,1);

el ultimo valor 1 es el id del almacen. Hasta aqui todo funciona bien. Solo me faltaria en vez de 1 ingresar el id del almacen que registre al usuario.

Para eso necesito que me ayuden porque aun no lo he conseguido. Como puedo obtener el id del extrafield almacen que le asigne de esta sesion de usuario o del usuario logeado? Espero su ayuda. Gracias!!!

Avatar de Usuario
aduart
Yoda
Mensajes: 1065
Registrado: Mié, 06/06/2012, 19:37

Mensaje por aduart »

Creo que para puntos 1 y 2 No es posible lo que planteas. El tema permisos es lo que ves en la sección permisos de usuario.
A lo sumo podes generar grupos para facilitar la gestión.

Saludos
Eduardo.

andresweb
Novato
Mensajes: 12
Registrado: Mar, 27/06/2017, 11:10

Mensaje por andresweb »

Gracias Eduardo por tu respuesta. Y para el punto 3 como haría? Solo me falta recuperar en una variable el campo extrafield del usuario logeado.

andresweb
Novato
Mensajes: 12
Registrado: Mar, 27/06/2017, 11:10

Mensaje por andresweb »

Finalmente encontre la solucion realizando una consulta mediante un join con la tabla user y extrafield_user y un where con la sesion usuario y obtengo el id del almacen el cual lo uso para filtrar los select, quedando:

$sql = "SELECT e.cbo_area FROM llx_user AS u
INNER JOIN llx_user_extrafields AS e
ON u.rowid=e.fk_object AND u.login='".$_SESSION["dol_login"]."'";

$resql = $db->query($sql);
$obj = $db->fetch_object($resql);
$id_almacen = $obj->cbo_area;

$sql = "SELECT e.rowid, e.label, e.lieu, ps.reel, ps.rowid as product_stock_id, p.pmp";
$sql.= " FROM ".MAIN_DB_PREFIX."entrepot as e,";
$sql.= " ".MAIN_DB_PREFIX."product_stock as ps";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = ps.fk_product";
$sql.= " WHERE ps.reel != 0";
$sql.= " AND ps.fk_entrepot = e.rowid";
$sql.= " AND e.entity IN (".getEntity('stock', 1).")";

if($id_almacen)
{
$sql.= " AND e.rowid IN(".$id_almacen.")";
}

$sql.= " AND ps.fk_product = ".$object->id;
$sql.= " ORDER BY e.label";

infsistemas
Novato
Mensajes: 33
Registrado: Mar, 22/04/2014, 13:22
Ubicación: Sevilla (España)

Mensaje por infsistemas »

Buenas!

Yo he estado probando la variable de entorno WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER que te añade el campo warehouse cargado con la lista de almacén en la ficha de pedido de cliente. A ver si simplificaba la solución que dabas, pero no consigo que sirva para nada. No sé si conocías esta variable y si la habías probado.

Un saludo,
Javier.
Todo lo que aprendo sobre Dolibarr en mi blog personal: https://www.javierrguez.com/tag/dolibarr/