/**
  *
  *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");
 }
Example #2
0
 /**
  	 *
  	 *Metodo que surte una sucursal por parte de un proveedor. La sucursal sera tomada de la sesion actual.
 
 Update
 Creo que este metodo tiene que estar bajo sucursal.
  	 *
  	 * @param id_almacen int Id del almacen que se surte
  	 * @param productos json Objeto que contendr los ids de los productos, sus unidades y sus cantidades
  	 * @param motivo string Motivo del movimiento
  	 * @return id_surtido string Id generado por el registro de surtir
  	 **/
 static function Entrada($id_almacen, $productos, $motivo = null)
 {
     Logger::log("Resgitrando entrada a almacen");
     $entrada_almacen = new EntradaAlmacen();
     //Se obtiene el usuario de la sesion
     $id_usuario = SesionController::getCurrentUser();
     if (is_null($id_usuario)) {
         Logger::error("No se puede obtener al usuario de la sesion, ya inicio sesion?");
         throw new Exception("No se puede obtener al usuario de la sesion, ya inicio sesion?");
     }
     //valida que el almacen exista
     $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 se le pueden ingresar productos");
         throw new Exception("El almacen no esta activo, no se le pueden ingresar productos");
     }
     //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 entrada_almacen
     $entrada_almacen->setIdAlmacen($id_almacen);
     $entrada_almacen->setMotivo($motivo);
     $entrada_almacen->setIdUsuario($id_usuario);
     $entrada_almacen->setFechaRegistro(time());
     DAO::transBegin();
     try {
         //se guarda el registro de entrada_almacen
         EntradaAlmacenDAO::save($entrada_almacen);
         //Por cada producto recibido se crea un registro en  la tabla producto_entrada_almacen.
         //Cada producto ingresado incrementa su cantidad en el almacen. Si aun no existe,
         //se crea su registro y se guarda.
         $producto_entrada_almacen = new ProductoEntradaAlmacen(array("id_entrada_almacen" => $entrada_almacen->getIdEntradaAlmacen()));
         $productos = object_to_array($productos);
         if (!is_array($productos)) {
             throw new Exception("Los productos fueron recibidos incorrectamente", 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 fueron recibidos incorrectamente", 901);
             }
             //valida que el producto a ingresar pertenezca a la misma empresa que el almacen
             //pues un almacen solo puede ocntener producto de la empresa a la que pertenece.
             $productos_empresa = ProductoEmpresaDAO::search(new ProductoEmpresa(array("id_producto" => $p["id_producto"])));
             $encontrado = false;
             foreach ($productos_empresa as $p_e) {
                 if ($p_e->getIdEmpresa() == $almacen->getIdEmpresa()) {
                     $encontrado = true;
                 }
             }
             if (!$encontrado) {
                 throw new Exception("Se quiere agregar un producto que no es de la empresa de este almacen", 901);
             }
             if (is_null(ProductoDAO::getByPK($p["id_producto"]))) {
                 throw new Exception("El producto con id: " . $p["id_producto"] . " no existe", 901);
             }
             $producto_entrada_almacen->setIdProducto($p["id_producto"]);
             if (is_null(UnidadDAO::getByPK($p["id_unidad"]))) {
                 throw new Exception("La unidad con id: " . $p["id_unidad"] . " no existe", 901);
             }
             $producto_entrada_almacen->setIdUnidad($p["id_unidad"]);
             $producto_entrada_almacen->setCantidad($p["cantidad"]);
             $producto_almacen = ProductoAlmacenDAO::getByPK($p["id_producto"], $id_almacen, $p["id_unidad"]);
             if (is_null($producto_almacen)) {
                 $producto_almacen = new ProductoAlmacen(array("id_producto" => $p["id_producto"], "id_almacen" => $id_almacen, "id_unidad" => $p["id_unidad"]));
             }
             $producto_almacen->setCantidad($producto_almacen->getCantidad() + $p["cantidad"]);
             ProductoEntradaAlmacenDAO::save($producto_entrada_almacen);
             ProductoAlmacenDAO::save($producto_almacen);
         }
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo registrar la entrada al almacen: " . $e);
         if ($e->getCode() == 901) {
             throw new Exception("No se pudo registrar la entrada al almacen: " . $e->getCode(), 901);
         }
         throw new Exception("No se pudo registrar la entrada al almacen", 901);
     }
     DAO::transEnd();
     Logger::log("Entrada a almacen registrada exitosamente");
     return array("id_surtido" => $entrada_almacen->getIdEntradaAlmacen());
 }