57 lines
2.1 KiB
Python
57 lines
2.1 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
|