from flask import session from flask_login import current_user from app.extensions import db from app.models.company import Company, UserCompanyAccess class CompanyService: @staticmethod def available_for_user(user=None): user = user or current_user if not getattr(user, 'is_authenticated', False): return [] return user.companies() @staticmethod def get_current_company(user=None): user = user or current_user if not getattr(user, 'is_authenticated', False): return None company_id = session.get('current_company_id') if company_id and user.can_access_company(company_id): return db.session.get(Company, company_id) companies = user.companies() if companies: session['current_company_id'] = companies[0].id return companies[0] return None @staticmethod def switch_company(company_id, user=None): user = user or current_user if getattr(user, 'role', None) == 'admin' or user.can_access_company(company_id): session['current_company_id'] = company_id return True return False @staticmethod def create_company(name, tax_id='', regon='', address='', sync_enabled=False, sync_interval_minutes=60): company = Company(name=name, tax_id=tax_id, regon=regon, address=address, sync_enabled=sync_enabled, sync_interval_minutes=sync_interval_minutes) db.session.add(company) db.session.commit() return company @staticmethod def assign_user(user, company, access_level='full', switch_after=False): existing = UserCompanyAccess.query.filter_by(user_id=user.id, company_id=company.id).first() if existing: existing.access_level = access_level else: db.session.add(UserCompanyAccess(user_id=user.id, company_id=company.id, access_level=access_level)) db.session.commit() if switch_after: try: session['current_company_id'] = company.id except RuntimeError: pass @staticmethod def set_active_company(company_id, user=None): return CompanyService.switch_company(company_id, user=user)