Files
ksef_app/app/services/company_service.py
Mateusz Gruszczyński 247bb15ed6 fix 500
2026-03-17 14:37:15 +01:00

60 lines
2.2 KiB
Python

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)