예제 #1
0
 /**
  *
  *Creara un nuevo almacen en una sucursal, este almacen contendra lotes.
  *
  * @param id_empresa int Id de la empresa a la que pertenecen los productos de este almacen
  * @param id_sucursal int El id de la sucursal a la que pertenecera este almacen.
  * @param id_tipo_almacen int Id del tipo de almacen 
  * @param nombre string nombre del almacen
  * @param descripcion string Descripcion extesa del almacen
  * @return id_almacen int el id recien generado
  **/
 static function Nuevo($id_empresa, $id_sucursal, $id_tipo_almacen, $nombre, $descripcion = null)
 {
     //verificamos que exista la empresa
     if (!is_null($id_empresa) && !($empresa = EmpresaDAO::getByPK($id_empresa))) {
         throw new Exception("No se tiene registro de la empresa {$id_empresa}");
     }
     //verificamos que exista la sucursal
     if (!is_null($id_sucursal) && !($sucursal = SucursalDAO::getByPK($id_sucursal))) {
         throw new Exception("No se tiene registro de la sucursal {$id_sucursal}");
     }
     //verificamos que exista el tipo de almacen
     if (!is_null($id_tipo_almacen) && !($almacen = TipoAlmacenDAO::getByPK($id_tipo_almacen))) {
         throw new Exception("No se tiene registro del tipo de almacen {$id_tipo_almacen}");
     }
     //verificamos que se haya especificado el nombre
     if (!ValidacionesController::validarLongitudDeCadena(trim($nombre), 2, 100)) {
         throw new Exception("El nombre debe ser una cadena entre 2 y 100 caracteres, se encontro \"" . trim($nombre) . "\" ");
     }
     //Se valida si hay un almacen con ese mimso nombre en esta sucursal
     $almacenes = AlmacenDAO::search(new Almacen(array("id_sucursal" => $id_sucursal)));
     foreach ($almacenes as $almacen) {
         if ($almacen->getNombre() == trim($nombre) && $almacen->getActivo()) {
             Logger::log("El nombre (" . $nombre . ") ya esta siendo usado por el almacen: " . $almacen->getIdAlmacen());
             throw new Exception("El nombre ya esta en uso");
         }
     }
     //Si se recibe un tipo de almacen de consignacion, se manda una excepcion, pues no se puede crear un almacen
     //de consignacion con este metodo.
     if ($id_tipo_almacen == 2) {
         Logger::error("No se puede crear un almacen de consignacion con este metodo");
         throw new Exception("No se puede crear un almacen de consignacion con este metodo");
     }
     //Solo puede haber un almacen por tipo por cada empresa en una sucursal.
     $almacenes = AlmacenDAO::search(new Almacen(array("id_sucursal" => $id_sucursal, "id_empresa" => $id_empresa, "id_tipo_almacen" => $id_tipo_almacen)));
     if (!empty($almacenes)) {
         Logger::error("Ya existe un almacen (" . $almacenes[0]->getIdAlmacen() . ") de este tipo (" . $id_tipo_almacen . ") en esta sucursal (" . $id_sucursal . ") para esta empresa (" . $id_empresa . ")");
         throw new Exception("Ya existe un almacen de este tipo en esta sucursal para esta empresa");
     }
     //Se inicializa el registro a guardar con los datos obtenidos.
     $almacen = new Almacen();
     $almacen->setNombre(trim($nombre));
     $almacen->setDescripcion($descripcion);
     $almacen->setIdSucursal($id_sucursal);
     $almacen->setIdEmpresa($id_empresa);
     $almacen->setIdTipoAlmacen($id_tipo_almacen);
     $almacen->setActivo(1);
     DAO::transBegin();
     try {
         AlmacenDAO::save($almacen);
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo crear el nuevo almacen");
         throw new Exception("No se pudo crear el nuevo almacen");
     }
     DAO::transEnd();
     Logger::log("Almacen " . $almacen->getIdAlmacen() . " creado exitosamente");
     return array("id_almacen" => (int) $almacen->getIdAlmacen());
 }