/** * *Da de baja un servicio que ofrece una empresa * * @param id_servicio int Id del servicio que ser� eliminado **/ public static function Eliminar($id_servicio) { Logger::log("Desactivando servicio " . $id_servicio . " ..."); //valida que el servicio exista y que no haya sido desactivado antes $validar = self::validarParametrosServicio($id_servicio); if (is_string($validar)) { Logger::error($validar); throw new InvalidDataException($validar); } //Si el servicio forma parte de algun paquete activo no puede ser eliminado $servicios_paquete = OrdenDeServicioPaqueteDAO::search(new OrdenDeServicioPaquete(array("id_servicio" => $id_servicio))); foreach ($servicios_paquete as $servicio_paquete) { $paquete = PaqueteDAO::getByPK($servicio_paquete->getIdServicio()); if ($paquete->getActivo()) { Logger::error("No se puede borrar este servicio pues el paquete " . $paquete->getIdPaquete() . " aun lo contiene"); throw new Exception("No se puede borrar este servicio pues el paquete " . $paquete->getIdPaquete() . " aun lo contiene"); } } $servicio = ServicioDAO::getByPK($id_servicio); $servicio->setActivo(0); //revisar que no tenga ordenes de servicio activas $res = OrdenDeServicioDAO::search(new OrdenDeServicio(array("id_servicio" => $id_servicio, "activa" => 1))); if (sizeof($res) > 0) { Logger::log("Intento borrar un servicio que tiene ordenes de servicio activas... "); throw new BusinessLogicException("Imposible eliminar un servicio que tiene ordenes abiertas"); } //Se obtienen los registros de las tablas servicio_empresa, servicio_clasificacion e impuesto_servicio //pues seran eliminados $servicios_empresa = ServicioEmpresaDAO::search(new ServicioEmpresa(array("id_servicio" => $id_servicio))); $servicios_clasificacion = ServicioClasificacionDAO::search(new ServicioClasificacion(array("id_servicio" => $id_servicio))); $impuestos_servicio = ImpuestoServicioDAO::search(new ImpuestoServicio(array("id_servicio" => $id_servicio))); DAO::transBegin(); try { ServicioDAO::save($servicio); foreach ($servicios_empresa as $servicio_empresa) { ServicioEmpresaDAO::delete($servicio_empresa); } foreach ($servicios_clasificacion as $servicio_clasificacion) { ServicioClasificacionDAO::delete($servicio_clasificacion); } foreach ($impuestos_servicio as $impuesto_servicio) { ImpuestoServicioDAO::delete($impuesto_servicio); } } catch (Exception $e) { DAO::transRollback(); Logger::error("No se ha podido descativar el servicio " . $id_servicio . " : " . $e); throw new Exception("No se ha podido descativar el servicio " . $id_servicio); } DAO::transEnd(); LOgger::log("El servicio ha sido eliminado exitosamente"); }