/** * *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()); }