Files
brewman/brewman/views/Management/settings.py

111 lines
4.1 KiB
Python

import datetime
import pkg_resources
from pyramid.response import FileResponse
from pyramid.view import view_config
import transaction
from brewman.models import DBSession
from brewman.models.auth import User
from brewman.models.master import DbSetting
from brewman.models.validation_exception import TryCatchFunction
@view_config(route_name='settings', permission='Authenticated')
def html(request):
package, resource = 'brewman:static/base.html'.split(':', 1)
file = pkg_resources.resource_filename(package, resource)
return FileResponse(file, request=request)
@view_config(request_method='POST', route_name='api_lock_info', renderer='json', permission='Lock Date')
@TryCatchFunction
def set_lock_info(request):
start_locked = request.json_body['Start']['Locked']
finish_locked = request.json_body['Finish']['Locked']
data = {'Start': {'Locked': start_locked}, 'Finish': {'Locked': finish_locked}}
if start_locked:
rolling = request.json_body['Start']['Rolling']
data['Start']['Rolling'] = rolling
if rolling:
data['Start']['Days'] = request.json_body['Start']['Days']
else:
data['Start']['Date'] = datetime.datetime.strptime(request.json_body['Start']['Date'], '%d-%b-%Y')
if finish_locked:
rolling = request.json_body['Finish']['Rolling']
data['Finish']['Rolling'] = rolling
if rolling:
data['Finish']['Days'] = request.json_body['Finish']['Days']
else:
data['Finish']['Date'] = datetime.datetime.strptime(request.json_body['Finish']['Date'], '%d-%b-%Y')
lock_date = DbSetting.by_name('Lock Info')
if lock_date is not None:
lock_date.data = data
else:
lock_date = DbSetting(name='Lock Info', data=data)
DBSession.add(lock_date)
transaction.commit()
return get_lock_info(request)
@view_config(request_method='DELETE', route_name='api_lock_info', renderer='json', permission='Lock Date')
@TryCatchFunction
def clear_lock_info(request):
lock_date = DbSetting.by_name('Lock Info')
if lock_date is not None and lock_date.data is not None:
lock_date.data = None
transaction.commit()
return {}
@view_config(request_method='GET', route_name='api_lock_info', renderer='json', permission='Authenticated')
def get_lock_info(request):
data = DbSetting.by_name('Lock Info')
if data is None:
return {'Start': {'Locked': False}, 'Finish': {'Locked': False}}
data = data.data
info = {'Start': {'Locked': data['Start']['Locked']}, 'Finish': {'Locked': data['Finish']['Locked']}}
if data['Start']['Locked']:
info['Start']['Rolling'] = data['Start']['Rolling']
if data['Start']['Rolling']:
info['Start']['Days'] = data['Start']['Days']
else:
info['Start']['Date'] = data['Start']['Date'].strftime('%d-%b-%Y')
if data['Finish']['Locked']:
info['Finish']['Rolling'] = data['Finish']['Rolling']
if data['Finish']['Rolling']:
info['Finish']['Days'] = data['Finish']['Days']
else:
info['Finish']['Date'] = data['Finish']['Date'].strftime('%d-%b-%Y')
return info
@view_config(request_method='GET', route_name='api_maintenance', renderer='json', permission='Authenticated')
def get_maintenance(request):
data = DbSetting.by_name('Maintenance')
if data is None:
return {'Enabled': False, 'User': ''}
user = User.by_id(data.data)
return {'Enabled': True, 'User': user.name}
@view_config(request_method='POST', route_name='api_maintenance', renderer='json', permission='Maintenance')
@TryCatchFunction
def set_maintenance(request):
status = request.json_body['Enabled']
maintenance = DbSetting.by_name('Maintenance')
if status is False and maintenance is not None:
DBSession.delete(maintenance)
elif status is True and maintenance is None:
maintenance = DbSetting(name='Maintenance', data=request.authenticated_userid)
DBSession.add(maintenance)
elif status is True and maintenance.data != request.authenticated_userid:
maintenance.data = request.authenticated_userid
transaction.commit()
return get_maintenance(request)