/**
  *
  *Se puede ordenar por los atributos de producto.
  *
  * @param activo bool Si es true, mostrar solo los productos que estn activos, si es false mostrar solo los productos que no lo sean.
  * @param id_lote int Id del lote del cual se vern sus productos.
  * @param id_almacen int Id del almacen del cual se vern sus productos.
  * @param id_empresa int Id de la empresa de la cual se vern los productos.
  * @param id_sucursal int Id de la sucursal de la cual se vern los productos.
  * @return productos json Objeto que contendr� el arreglo de productos en inventario.
  **/
 public static function Lista($activo = null, $compra_en_mostrador = null, $id_almacen = null, $id_empresa = null, $metodo_costeo = null)
 {
     Logger::log("Listando los productos");
     $productos = array();
     //Se verifica si se reciben parametros o no para usar el metodo getAll o search
     $parametros = false;
     if (!is_null($activo) || !is_null($compra_en_mostrador) || !is_null($metodo_costeo)) {
         Logger::log("Se recibieron parametros, se listan los productos en rango");
         //Si se recibe el parametro id_empresa, se traen los productos de esa empresa y se intersectan
         //con los que cumplen los demas parametros. Si no se recibe, se busca el parametro id_almacen
         //
         //Si se recibe el parametro id_almacen, se traen los productos de ese almacen y se intersectan
         //con los que cumplen los demas parametros. Si no se recibe, la interseccion se hara con todos los productos
         $productos1 = array();
         $productos2 = array();
         if (!is_null($id_empresa)) {
             $productos_empresa = ProductoEmpresaDAO::search(new ProductoEmpresa(array("id_empresa" => $id_empresa)));
             foreach ($productos_empresa as $p_e) {
                 array_push($productos1, ProductoDAO::getByPK($p_e->getIdProducto()));
             }
             //$productos_empresa as $p_e
         } else {
             if (!is_null($id_almacen)) {
                 $productos_almacen = ProductoAlmacenDAO::search(new ProductoAlmacen(array("id_almacen" => $id_almacen)));
                 foreach ($productos_almacen as $p_a) {
                     array_push($productos1, ProductoDAO::getByPK($p_a->getIdProducto()));
                 }
                 //$productos_almacen as $p_a
             } else {
                 $productos1 = ProductoDAO::getAll();
             }
         }
         $producto_criterio = new Producto(array("activo" => $activo, "compra_en_mostrador" => $compra_en_mostrador, "metodo_costeo" => $metodo_costeo));
         $productos2 = ProductoDAO::search($producto_criterio);
         $productos = array_intersect($productos1, $productos2);
     } else {
         Logger::log("No se recibieron parametros, se listan todos los productos");
         if (!is_null($id_empresa)) {
             $productos_empresa = ProductoEmpresaDAO::search(new ProductoEmpresa(array("id_empresa" => $id_empresa)));
             foreach ($productos_empresa as $p_e) {
                 array_push($productos, ProductoDAO::getByPK($p_e->getIdProducto()));
             }
             //$productos_empresa as $p_e
         } else {
             if (!is_null($id_almacen)) {
                 $productos_almacen = ProductoAlmacenDAO::search(new ProductoAlmacen(array("id_almacen" => $id_almacen)));
                 foreach ($productos_almacen as $p_a) {
                     array_push($productos, ProductoDAO::getByPK($p_a->getIdProducto()));
                 }
                 //$productos_almacen as $p_a
             } else {
                 $productos = ProductoDAO::getAll();
             }
         }
     }
     Logger::log("Lista obtenida exitosamente con " . count($productos) . " elementos");
     return $productos;
 }
 /**
  *
  *Desactiva la bandera de consignatario a un cliente y elimina su almacen correspondiente. Para poder hacer esto, el almacen debera estar vacio.
  *
  * @param id_cliente int Id del cliente a desactivar como consignatario
  **/
 public static function DesactivarConsignatario($id_cliente)
 {
     Logger::log("Desactivando consignatario " . $id_cliente);
     //valida que el cliente exista, que este activo y que sea un cliente
     $e = self::validarConsignatario($id_cliente);
     if (is_string($e)) {
         Logger::error($e);
         throw new Exception($e);
     }
     $cliente = UsuarioDAO::getByPK($id_ciente);
     $consignaciones = ConsignacionDAO::search(new Consignacion(array("id_cliente" => $id_cliente)));
     foreach ($consignaciones as $consignacion) {
         if ($consignacion->getActiva()) {
             Logger::error("El consignatario no puede ser desactivado pues aun tiene consignaciones activas: id_consignacion= " . $consignacion->getIdConsignacion());
             throw new Exception("El consignatario no puede ser desactivado pues aun tiene consignaciones activas");
         }
     }
     $cliente->setConsignatario(0);
     $almacenes = AlmacenDAO::search(new Almacen(array("nombre" => $cliente->getCodigoUsuario(), "activo" => 1)));
     DAO::transBegin();
     try {
         UsuarioDAO::save($cliente);
         foreach ($almacenes as $almacen) {
             $productos_almacen = ProductoAlmacenDAO::search(new ProductoAlmacen(array("id_almacen" => $almacen->getIdAlmacen())));
             foreach ($productos_almacen as $producto_almacen) {
                 if ($producto_almacen->getCantidad() != 0) {
                     throw new Exception("El almacen no puede ser borrado pues aun contiene productos");
                 }
             }
             $almacen->setActivo(0);
             AlmacenDAO::save($almacen);
         }
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se ha podido desactivar al consignatario: " . $e);
         throw new Exception("No se ha podido desactivar al consignatario");
     }
     DAO::transEnd();
     Logger::log("Consignatario desactivado exitosamente");
 }
    $btn_eliminar->onApiCallSuccessRedirect("sucursales.lista.almacen.php");
    $btn_eliminar->addName("eliminar");
    $funcion_eliminar = " function eliminar_almacen(btn){" . "if(btn == 'yes')" . "{" . "var p = {};" . "p.id_almacen = " . $_GET["aid"] . ";" . "sendToApi_eliminar(p);" . "}" . "}" . "      " . "function confirmar(){" . " Ext.MessageBox.confirm('Desactivar', 'Desea eliminar este almacen?', eliminar_almacen );" . "}";
    $btn_eliminar->addOnClick("confirmar", $funcion_eliminar);
    $menu->addMenuItem($btn_eliminar);
    $page->addComponent($menu);
}
//
// Forma de producto
//
$form = new DAOFormComponent($este_almacen);
$form->setEditable(false);
$form->hideField(array("id_almacen"));
$form->createComboBoxJoin("id_sucursal", "razon_social", SucursalDAO::getAll(), $este_almacen->getIdSucursal());
$form->createComboBoxJoin("id_empresa", "razon_social", EmpresaDAO::search(new Empresa(array("activo" => 1))), $este_almacen->getIdEmpresa());
$form->createComboBoxJoin("id_tipo_almacen", "descripcion", TipoAlmacenDAO::getAll(), $este_almacen->getIdTipoAlmacen());
$page->addComponent($form);
$page->addComponent(new TitleComponent("Productos en este almacen"), 3);
$tabla = new TableComponent(array("id_producto" => "Producto", "id_unidad" => "Unidad", "cantidad" => "Cantidad"), ProductoAlmacenDAO::search(new ProductoAlmacen(array("id_almacen" => $_GET["aid"]))));
function funcion_producto($id_producto)
{
    return ProductoDAO::getByPK($id_producto) ? ProductoDAO::getByPK($id_producto)->getNombreProducto() : "--------";
}
function funcion_unidad($id_unidad)
{
    return UnidadDAO::getByPK($id_unidad) ? UnidadDAO::getByPK($id_unidad)->getNombre() : "---------";
}
$tabla->addColRender("id_producto", "funcion_producto");
$tabla->addColRender("id_unidad", "funcion_unidad");
$page->addComponent($tabla);
$page->render();