- menu changes to allow for partners - partner views and forms now in partner_forms.py and partner_views.py - Introduction of services layer - Allow all configuration to handle partner configurations, and adaptation of caching to allow for this
69 lines
3.2 KiB
Python
69 lines
3.2 KiB
Python
from flask import session, current_app, flash
|
|
from sqlalchemy.exc import SQLAlchemyError
|
|
|
|
from common.extensions import db
|
|
from common.models.entitlements import PartnerServiceLicenseTier
|
|
from common.models.user import Partner, PartnerTenant
|
|
from common.utils.eveai_exceptions import EveAINoManagementPartnerService
|
|
from common.utils.model_logging_utils import set_logging_information
|
|
from datetime import datetime as dt, timezone as tz
|
|
|
|
from common.utils.security_utils import current_user_has_role
|
|
|
|
|
|
class EntitlementServices:
|
|
@staticmethod
|
|
def associate_license_tier_with_partner(license_tier_id):
|
|
"""Associate a license tier with a partner"""
|
|
try:
|
|
partner_id = session['partner']['id']
|
|
# Get partner service (MANAGEMENT_SERVICE type)
|
|
partner = Partner.query.get(partner_id)
|
|
if not partner:
|
|
return
|
|
|
|
# Find a management service for this partner
|
|
management_service = next((service for service in session['partner']['services']
|
|
if service.get('type') == 'MANAGEMENT_SERVICE'), None)
|
|
|
|
if not management_service:
|
|
flash("Cannot associate license tier with partner. No management service defined for partner", "danger")
|
|
current_app.logger.error(f"No Management Service defined for partner {partner_id}"
|
|
f"trying to associate license tier {license_tier_id}.")
|
|
raise EveAINoManagementPartnerService()
|
|
# Check if the association already exists
|
|
existing_association = PartnerServiceLicenseTier.query.filter_by(
|
|
partner_service_id=management_service['id'],
|
|
license_tier_id=license_tier_id
|
|
).first()
|
|
|
|
if existing_association:
|
|
# Association already exists, nothing to do
|
|
flash("License tier was already associated with partner", "info")
|
|
current_app.logger.info(f"Association between partner service {management_service['id']} and "
|
|
f"license tier {license_tier_id} already exists.")
|
|
return
|
|
|
|
# Create the association
|
|
association = PartnerServiceLicenseTier(
|
|
partner_service_id=management_service['id'],
|
|
license_tier_id=license_tier_id
|
|
)
|
|
set_logging_information(association, dt.now(tz.utc))
|
|
|
|
db.session.add(association)
|
|
db.session.commit()
|
|
|
|
flash("Successfully associated license tier to partner", "success")
|
|
current_app.logger.info(f"Successfully associated license tier {license_tier_id} with "
|
|
f"partner service {management_service['id']}")
|
|
|
|
return True
|
|
|
|
except SQLAlchemyError as e:
|
|
db.session.rollback()
|
|
flash("Failed to associated license tier with partner service due to an internal error. "
|
|
"Please contact the System Administrator", "danger")
|
|
current_app.logger.error(f"Error associating license tier {license_tier_id} with partner: {str(e)}")
|
|
raise e
|