Administrador magento muestra productos por usuarios

Hola,

En este artículo voy a explicar como podríamos dar a un usuario magento privilegios para que solo vea los productos relacionados con su marca, esto es muy interesante para lo siguiente por ejemplo, tenemos varios distribuidores les creamos distintos perfiles de usuarios en magento y después con la modificación que vamos a realizar podemos hacer que solo visualice los productos relacionados con su marca.

Para empezar tenemos que ir a la gestión de atributos colocar el atributo manufacturer como obligatorio para rellenar cuando haya un nuevo producto, y después le tenemos que dar valores al atributo, tened en cuenta que los valores que le deis serán los que después se mostrarán cuando vayáis a dar de alta a un nuevo usuario administrador, proveedor o cualquier otro rol que habilitéis.

Para crear un nuevo rol tenéis que ir a la parte de configuración permisos y ahí podréis crear roles y usuarios, después de hacer el proceso que continúa en el formulario para crear un nuevo usuario os aparecerá un nuevo campo que se llama manufacturer ahí aparecerán todos los atributos definidos antes y podéis asignar a un usuario un atributo.

Vamos a tener en cuenta son los ficheros y la localización de cada uno de ellos, así sabremos donde hay que tocar en cada momento:

  1. app / code / core / Mage / Adminhtml / Block / Permissions / User / Edit / Tab / main.php
  2. app / code / core / Mage / Adminhtml / Block / Catalog / Product / grid.php
  3. app / code / core / Mage / Adminhtml / Block / Catalog / Product / Edit / tabs.php
  4. app / code / core / Mage / Adminhtml / Block / System / Account / Edit / form.php
  5. app / design / adminhtml / default / default / template / widget / grid.phtml

Ahora en el fichero main.php colocamos este código:

$attribute = Mage::getModel ( 'eav/config' )->getAttribute ( 'catalog_product', 'manufacturer' );
$count=0;
foreach ( $attribute->getSource ()->getAllOptions ( true, true ) as $option ){
$manu[$count]=$attrubuteArray [$option ['value']] = $option ['label'];
$count++;
}

$fieldset->addField('manufacturer', 'select', array(
'name'  => 'manufacturer',
'label' => Mage::helper('adminhtml')->__('manufacturer'),
'id'    => 'customer_manufacturer',
'title' => Mage::helper('adminhtml')->__('User Manufacturer'),
'class' => 'required-entry validate-manufacturer',
'required' => false,
'values' => $manu,
));

Lo siguiente que tenemos que hacer es ir a la base de datos de magento a la tabla admin_user y agregar al final un campo que se llame manufacturer para así poder relacionar la marca que queremos con el usuario en cuestión y luego poder mostrarle los productos en el grid del catálogo.

Después modificamos el fichero grid.php

$userId = Mage::getSingleton('admin/session')->getUser()->getId();
$user = Mage::getModel('admin/user')->load($userId);

$manufacturer = Mage::getSingleton('admin/session')->getUser()->getManufacturer();

$attribute = Mage::getModel ( 'eav/config' )->getAttribute ( 'catalog_product', 'manufacturer' );

$count=0;

foreach ( $attribute->getSource ()->getAllOptions ( true, true ) as $option )

{

$manu[$count]=$attrubuteArray [$option ['value']] = $option ['label'];

$count++;

}

$manufacture=$manu[$manufacturer];

$attribute = Mage::getModel ( 'eav/config' )->getAttribute ( 'catalog_product', 'manufacturer' );

$count=0;

foreach ( $attribute->getSource ()->getAllOptions ( true, true ) as $option )

{

if($option ['label']==$manufacture){

$manufac=$attrubuteArray [$option ['value']] ;

$option_id = $option ['value'];

}

$count++;

}

Lo siguiente será tocar el fichero tabs.php

$product = $this->getProduct();

$newProduct = $product->getId();

$manufacturerValue = $product->getAttributeText('manufacturer');

$userId = Mage::getSingleton('admin/session')->getUser()->getId();

$user = Mage::getModel('admin/user')

->load($userId);

$manufacturer = Mage::getSingleton('admin/session')->getUser()->getManufacturer();

$attribute = Mage::getModel ( 'eav/config' )->getAttribute ( 'catalog_product', 'manufacturer' );

$count=0;

foreach ( $attribute->getSource ()->getAllOptions ( true, true ) as $option )

{

$manu[$count]=$attrubuteArray [$option ['value']] = $option ['label'];

$count++;

}

$manufacture=$manu[$manufacturer];

if($newProduct != ''){

if($manufacturerValue != $manufacture){

echo "Authorization Failed !";

exit();

}

}

Ahora vamos con el form.php

$manufacturer = Mage::getSingleton('admin/session')->getUser()->getManufacturer();

$attribute = Mage::getModel ( 'eav/config' )->getAttribute ( 'catalog_product', 'manufacturer' );

$count=0;

foreach ( $attribute->getSource ()->getAllOptions ( true, true ) as $option )

{

$manu[$count]=$attrubuteArray [$option ['value']] = $option ['label'];

$count++;

}

$manufac= $manu[$manufacturer];

$fieldset->addField('manufacture', 'select', array(

'name'  => 'manufacture',

'label' => Mage::helper('adminhtml')->__('manufactured by'),

'id'    => 'customer_manufacture',

'title' => Mage::helper('adminhtml')->__('User Manufacture'),

'class' => 'required-entry validate-manufacture',

'required' => false,

'options' =>$manufac,

));

Y por último para que los cambios puedan aplicarse al grid del catálogo tenemos que ir al fichero grid.phtml ahí tenemos que colocar lo siguiente sobre la línea 156 aproximadamente

        getCollection() as $_index=>$_item): ?>

getUser()->getManufacturer();
$aprueba=Mage::getSingleton('admin/session')->getUser()->getManufacturer();

$_product = Mage::getModel('catalog/product')->load($_item[entity_id]);
$manufacturerValue = $_product->getAttributeText('manufacturer');

if($manufacturer==$manufacturerValue || $aprueba=='adm'){
?>

getRowClass($_item)):?> class="" > getColumns() as $_column): ?> shouldRenderCell($_item, $_column)):?> getRowspan($_item, $_column);?> class="getCssProperty() ?> "> getRowField($_item)) != '' ? $_html : ' ') ?>
shouldRenderEmptyCell($_item, $_column)):?>

Podéis ver que sobre el if hay 2 condiciones 1 que se cumpla que el nombre de la marca es el mismo que el atributo, 2 que sea el administrador el que entra, para ello tendréis que modificar la base de datos a mano y colocarle en el campo manufacturer que hemos creado el texto ‘adm’ así el será el único que pueda ver todo.

Y nada más espero que os sirva de ayuda y muchas gracias a la gente de bluehorse parte de este artículo está basado en el código que ellos han creado.

¿Te ha gustado el artículo?
Sé el primero en calificar esta publicación.
1 Star2 Stars3 Stars4 Stars5 Stars
Loading...
Artículo escrito por

¡Exprésate! Dejanos tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

4 Comentarios

Gustavo

Hola, en que parte del codigo del archivo grid.php, Tab.php y form.php se pega el codigo pues he intentado hacerlo poro no me funciona.   Gracias

Rubén Muñoz Autor

Hola Pablo: Así es, un usuario puede modificar y crear sus propios productos. Está creada precisamente para esto la modificación. La versión en la que fue instalado es la 1.6.2.0 pero se podría adaptar a la versión 1.7.0.2

Pardebits

En que versión de magento está tasteado esto?? muchas gracias!!

codigonexo

Codigonexo Blog: Administrador magento muestra productos por usuarios, get _product by user admin magento http://t.co/6LIGVtCk #magento