push
This commit is contained in:
56
app/services/company_service.py
Normal file
56
app/services/company_service.py
Normal file
@@ -0,0 +1,56 @@
|
||||
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
|
||||
Reference in New Issue
Block a user