/**
  *
  *Cambia el estado de un traspaso a recibido. La  bandera de completo se prende si los productos enviados son los mismos que los recibidos. La fecha de recibo es tomada del servidor. El usuario que recibe sera tomada de la sesion actual.
  *
  * @param productos json Productos que se reciben con sus cantidades
  * @param id_traspaso int Id del traspaso que se recibe
  **/
 public static function RecibirTraspasoAlmacen($id_traspaso, $productos)
 {
     Logger::log("Recibiendo traspaso " . $id_traspaso);
     //Se obtiene al usuario de la sesion
     $id_usuario = SesionController::getCurrentUser();
     if (is_null($id_usuario)) {
         Logger::error("El usuario no puede ser obtenido de la sesion, ya inicio sesion?");
         throw new Exception("El usuario no puede ser obtenido de la sesion, ya inicio sesion?");
     }
     //Valida que el traspaso exista, que no haya sido cancelado ni completado y que su estado sea el de enviado
     $validar = self::validarParametrosTraspaso($id_traspaso);
     if (is_string($validar)) {
         Logger::error($validar);
         throw new Exception($validar);
     }
     $traspaso = TraspasoDAO::getByPK($id_traspaso);
     if ($traspaso->getCancelado()) {
         Logger::error("El traspaso ya ha sido cancelado, no puede ser recibido");
         throw new Exception("El traspaso ya ha sido cancelado, no puede ser recibido");
     }
     if ($traspaso->getCompleto()) {
         Logger::error("El traspaso ya ha sido completado, no puede volver a ser recibido");
         throw new Exception("El traspaso ya ha sido completado, no puede volver a ser recibido");
     }
     if ($traspaso->getEstado() !== "Enviado") {
         Logger::error("El traspaso no ha sido enviado");
         throw new Exception("El traspaso no ha sido enviado");
     }
     //Actualiza el registro de traspaso
     $traspaso->setIdUsuarioRecibe($id_usuario);
     $traspaso->setFechaRecibo(time());
     $traspaso->setEstado("Recibido");
     $traspaso->setCompleto(1);
     DAO::transBegin();
     try {
         //Guarda el traspaso e inserta los productos en el almacen que recibe
         TraspasoDAO::save($traspaso);
         $productos = object_to_array($productos);
         if (!is_array($productos)) {
             throw new Exception("Los productos son invalidos", 901);
         }
         foreach ($productos as $p) {
             if (!array_key_exists("id_producto", $p) || !array_key_exists("id_unidad", $p) || !array_key_exists("cantidad", $p)) {
             }
             $producto_traspaso = TraspasoProductoDAO::getByPK($id_traspaso, $p["id_producto"], $p["id_unidad"]);
             //Si el producto que recibe no esta en el registro de productos enviados, se crea su registro
             if (is_null($producto_traspaso)) {
                 $producto_traspaso = new TraspasoProducto(array("id_traspaso" => $id_traspaso, "id_producto" => $p["id_producto"], "id_unidad" => $p["id_unidad"], "cantidad_enviada" => 0));
             }
             //Se busca el producto que sera isnertado en el almacen, si no existe se crea su registro
             $producto_almacen = ProductoAlmacenDAO::getByPK($p["id_producto"], $traspaso->getIdAlmacenRecibe(), $p["id_unidad"]);
             if (is_null($producto_almacen)) {
                 $producto_almacen = new ProductoAlmacen(array("id_producto" => $p_t->getIdProducto(), "id_almacen" => $traspaso->getIdAlmacenEnvia(), "id_unidad" => $p_t->getIdUnidad(), "cantidad" => 0));
             }
             //Se incrementa la cantidad del producto y se guarda el registro.
             $producto_almacen->setCantidad($producto_almacen->getCantidad() + $p["cantidad"]);
             $producto_traspaso->setCantidadRecibida($p["cantidad"]);
             ProductoAlmacenDAO::save($producto_almacen);
             TraspasoProductoDAO::save($producto_traspaso);
         }
         /* Fin de foreach  */
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo recibir el traspaso: " . $e);
         throw new Exception("No se pudo recibir el traspaso");
     }
     DAO::transEnd();
     Logger::log("El traspaso ha sido recibido exitosamente");
 }
 /**
  *
  *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();
Example #4
0
 /**
  *
  *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;
 }
Example #5
0
 /**
  *
  *Envia productos fuera del almacen. Ya sea que sea un traspaso de un alamcen a otro o por motivos de inventarios fisicos.
  *
  * @param id_almacen int Id del almacen del cual se hace el movimiento
  * @param productos json Objeto que contendra los ids de los productos que seran sacados del alamcen con sus cantidades y sus unidades
  * @param motivo string Motivo de la salida del producto
  * @return id_salida int ID de la salida del producto
  **/
 static function Salida($id_almacen, $productos, $motivo = null)
 {
     Logger::log("Registrando salida de almacen");
     //Se obtiene al usuario de la sesion
     $id_usuario = SesionController::getCurrentUser();
     if (is_null($id_usuario)) {
         Logger::error("No se pudo obtener al usuario de la sesion, ya inicio sesion?");
         throw new Exception("No se pudo obtener al usuario de la sesion, ya inicio sesion?");
     }
     //valida si el almacen existe y si esta activo
     $almacen = AlmacenDAO::getByPK($id_almacen);
     if (is_null($almacen)) {
         Logger::error("El almacen con id: " . $id_almacen . " no existe");
         throw new Exception("El almacen con id: " . $id_almacen . " no existe");
     }
     if (!$almacen->getActivo()) {
         Logger::error("El almacen no esta activo, no puede salir producto de el");
         throw new Exception("El almacen no esta activo, no puede salir producto de el");
     }
     //Valida que el motivo sea un string valido
     if (!is_null($motivo)) {
         $validar = self::validarString($motivo, 255, "motivo");
         if (is_string($validar)) {
             Logger::error($validar);
             throw new Exception($validar);
         }
     }
     //Se inicializa el registro de la tabla salida_almacen
     $salida_almacen = new SalidaAlmacen(array("id_almacen" => $id_almacen, "id_usuario" => $id_usuario, "fecha_registro" => time(), "motivo" => $motivo));
     DAO::transBegin();
     try {
         //Se guarda el registro de la salida almacen y se sacan los productos solicitados
         //del almacen
         SalidaAlmacenDAO::save($salida_almacen);
         $producto_salida_almacen = new ProductoSalidaAlmacen(array("id_salida_almacen" => $salida_almacen->getIdSalidaAlmacen()));
         $productos = object_to_array($productos);
         if (!is_array($productos)) {
             throw new Exception("Los productos son invalidos", 901);
         }
         foreach ($productos as $p) {
             if (!array_key_exists("id_producto", $p) || !array_key_exists("id_unidad", $p) || !array_key_exists("cantidad", $p)) {
                 throw new Exception("Los productos son invalidos", 901);
             }
             //Se busca en el almacen el producto solicitado, si no es encontrado, se manda una excepcion
             $producto_almacen = ProductoAlmacenDAO::getByPK($p["id_producto"], $id_almacen, $p["id_unidad"]);
             if (is_null($producto_almacen)) {
                 throw new Exception("El producto: " . $p["id_producto"] . " en la unidad: " . $p["id_unidad"] . "\n                            no se encuentra en el almacen: " . $id_almacen . ". No se puede registrar la salida");
             }
             //Se analiza la cantidad actual del producto en el almacen. Si la solicitada
             //es mayor que la cantidad actual, se arroja una excepcion.
             $cantidad_actual = $producto_almacen->getCantidad();
             if ($cantidad_actual < $p["cantidad"]) {
                 throw new Exception("Se busca sacar mas cantidad de producto de la que hay actualmente. Actual: " . $cantidad_actual . " - Salida: " . $p["cantidad"]);
             }
             $producto_almacen->setCantidad($cantidad_actual - $p["cantidad"]);
             $producto_salida_almacen->setIdProducto($p["id_producto"]);
             $producto_salida_almacen->setIdUnidad($p["id_unidad"]);
             $producto_salida_almacen->setCantidad($p["cantidad"]);
             ProductoAlmacenDAO::save($producto_almacen);
             ProductoSalidaAlmacenDAO::save($producto_salida_almacen);
         }
         /* Fin de foreach */
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo registrar la salida de producto: " . $e);
         throw new Exception("No se pudo registrar la salida de producto");
     }
     DAO::transEnd();
     Logger::log("Salida de almacen registrada correctamente");
     return array("id_salida" => $salida_almacen->getIdSalidaAlmacen());
 }