Journals Validation now checks for negative amount and not just signed amounts. Journal form supports negative amounts by changing the Debit / Credit. Removed Messaging and Dashboard from Home screen and all its dependencies - Ace Editor - D3 - Chosen Moved from TryCatch Decorator to View deriver, it is available in Pyramid 1.7+ and the decorator is not working. Updated Lodash to 4.17.2 (online hosted) Updated Loading Bar to 0.9.0 Updated Moment.js to 2.17.1 Updated Mousetrap to 1.6.0
168 lines
7.1 KiB
Python
168 lines
7.1 KiB
Python
import datetime
|
|
import os
|
|
from pyramid.config import Configurator
|
|
from sqlalchemy import engine_from_config
|
|
from sqlalchemy.engine.url import make_url
|
|
|
|
from pyramid.authentication import AuthTktAuthenticationPolicy
|
|
from pyramid.authorization import ACLAuthorizationPolicy
|
|
from pyramid.session import SignedCookieSessionFactory
|
|
from brewman.factories import add_route
|
|
from brewman.models import initialize_sql
|
|
from brewman.renderers import json_renderer, CSVRenderer
|
|
from brewman.security import groupfinder
|
|
from brewman.transactional_view_deriver import transactional_view
|
|
|
|
|
|
def main(global_config, **settings):
|
|
""" This function returns a Pyramid WSGI application.
|
|
"""
|
|
if 'sqlalchemy.url' not in settings:
|
|
DB_NAME = os.environ['DB_NAME']
|
|
DB_USER = os.environ['DB_USER']
|
|
DB_PASS = os.environ['DB_PASS']
|
|
DB_URI = 'postgresql://{0}:{1}@postgres:5432/{2}'.format(
|
|
DB_USER, DB_PASS, DB_NAME
|
|
)
|
|
|
|
settings['sqlalchemy.url']= DB_URI
|
|
engine = engine_from_config(settings, 'sqlalchemy.')
|
|
initialize_sql(engine)
|
|
|
|
SECRET_KEY = os.environ.get('SECRET_KEY', settings.get('secret_key', ''))
|
|
session_factory = SignedCookieSessionFactory(SECRET_KEY)
|
|
|
|
authentication_policy = AuthTktAuthenticationPolicy('brewman', timeout=900, reissue_time=90, callback=groupfinder)
|
|
authorization_policy = ACLAuthorizationPolicy()
|
|
|
|
config = Configurator(
|
|
settings=settings,
|
|
root_factory='brewman.factories.RootFactory',
|
|
authentication_policy=authentication_policy,
|
|
authorization_policy=authorization_policy,
|
|
session_factory=session_factory
|
|
)
|
|
config.add_view_deriver(transactional_view)
|
|
config.add_renderer(name='json', factory=json_renderer)
|
|
config.add_renderer(name='csv', factory=CSVRenderer)
|
|
|
|
def get_age(days):
|
|
return datetime.timedelta(days=days).total_seconds()
|
|
config.add_static_view('icons', 'brewman:static/icons', cache_max_age=get_age(10))
|
|
config.add_static_view('assets', 'brewman:static/assets', cache_max_age=get_age(10))
|
|
config.add_static_view('features', 'brewman:static/features', cache_max_age=get_age(10))
|
|
config.add_static_view('fonts', 'brewman:static/fonts', cache_max_age=get_age(10))
|
|
config.add_static_view('img', 'brewman:static/img', cache_max_age=get_age(10))
|
|
config.add_static_view('js', 'brewman:static/js', cache_max_age=get_age(10))
|
|
config.add_static_view('script', 'brewman:static/scripts', cache_max_age=get_age(1))
|
|
config.add_static_view('css', 'brewman:static/css', cache_max_age=get_age(10))
|
|
config.add_static_view('partial', 'brewman:static/partial', cache_max_age=get_age(10))
|
|
config.add_static_view('template', 'brewman:static/template', cache_max_age=get_age(10))
|
|
|
|
config.add_route('api_dashboard', '/api/Dashboard')
|
|
config.add_route('dashboard', '/Dashboard')
|
|
|
|
config.add_route('api_db_integrity', '/api/DbIntegrity')
|
|
config.add_route('api_login', '/api/login')
|
|
config.add_route('login', '/login')
|
|
config.add_route('logout', '/logout')
|
|
|
|
config.add_route('home', '/')
|
|
|
|
config.add_route('api_account_type_list', '/api/AccountTypes')
|
|
|
|
add_route(config, 'cost_centre', '/CostCentre')
|
|
add_route(config, 'account', '/Account')
|
|
add_route(config, 'employee', '/Employee')
|
|
add_route(config, 'user', '/User')
|
|
add_route(config, 'group', '/Group')
|
|
add_route(config, 'client', '/Client')
|
|
add_route(config, 'product', '/Product')
|
|
add_route(config, 'recipe', '/Recipe')
|
|
add_route(config, 'product_group', '/ProductGroup')
|
|
|
|
config.add_route('journal_id', '/Journal/{id}')
|
|
config.add_route('journal', '/Journal')
|
|
config.add_route('purchase_id', '/Purchase/{id}')
|
|
config.add_route('purchase', '/Purchase')
|
|
config.add_route('purchase_return_id', '/Return/{id}')
|
|
config.add_route('purchase_return', '/Return')
|
|
config.add_route('payment_id', '/Payment/{id}')
|
|
config.add_route('payment', '/Payment')
|
|
config.add_route('receipt_id', '/Receipt/{id}')
|
|
config.add_route('receipt', '/Receipt')
|
|
config.add_route('issue_id', '/Issue/{id}')
|
|
config.add_route('issue', '/Issue')
|
|
config.add_route('api_issues_grid', '/api/Issues/Services/{date}')
|
|
config.add_route('salary_deduction_id', '/SalaryDeduction/{id}')
|
|
config.add_route('salary_deduction', '/SalaryDeduction')
|
|
config.add_route('service_charge_id', '/ServiceCharge/{id}')
|
|
config.add_route('service_charge', '/ServiceCharge')
|
|
config.add_route('db_image', '/api/DbImage/{id}/{type}')
|
|
|
|
config.add_route('api_voucher_id', '/api/Voucher/{id}')
|
|
config.add_route('api_voucher', '/api/Voucher')
|
|
|
|
config.add_route('message_id', '/Message/{id}')
|
|
config.add_route('message', '/Message')
|
|
config.add_route('api_message_id', '/api/Message/{id}')
|
|
config.add_route('api_message', '/api/Message')
|
|
config.add_route('api_tag_list', '/api/Tags')
|
|
|
|
config.add_route('settings', '/Settings')
|
|
config.add_route('api_lock_info', '/api/LockInfo')
|
|
config.add_route('api_maintenance', '/api/Maintenance')
|
|
|
|
add_route(config, 'attendance', '/Attendance', has_list=False, variable='date')
|
|
config.add_route('api_attendance_types', '/api/AttendanceTypes')
|
|
|
|
add_route(config, 'employee_attendance', '/EmployeeAttendance', has_list=False)
|
|
|
|
config.add_route('attendance_report', '/AttendanceReport')
|
|
config.add_route('api_credit_salary', '/api/CreditSalary')
|
|
config.add_route('employee_functions', '/EmployeeFunctions')
|
|
config.add_route('api_fingerprint', '/api/Fingerprint')
|
|
|
|
add_route(config, 'ledger', '/Ledger', has_list=False)
|
|
add_route(config, 'reconcile', '/Reconcile', has_list=False)
|
|
add_route(config, 'product_ledger', '/ProductLedger', has_list=False)
|
|
|
|
add_route(config, 'trial_balance', '/TrialBalance', has_list=False, variable='date')
|
|
config.add_route('api_net_transactions', '/api/NetTransactions')
|
|
config.add_route('net_transactions', '/NetTransactions')
|
|
config.add_route('api_purchases', '/api/Purchases')
|
|
config.add_route('purchases', '/Purchases')
|
|
add_route(config, 'closing_stock', '/ClosingStock', has_list=False, variable='date')
|
|
|
|
add_route(config, 'cash_flow', '/CashFlow', has_list=False)
|
|
add_route(config, 'raw_material_cost', '/RawMaterialCost', has_list=False)
|
|
|
|
config.add_route('api_daybook', '/api/Daybook')
|
|
config.add_route('daybook', '/Daybook')
|
|
|
|
config.add_route('api_unposted', '/api/Unposted')
|
|
config.add_route('unposted', '/Unposted')
|
|
|
|
config.add_route('api_profit_loss', '/api/ProfitLoss')
|
|
config.add_route('profit_loss', '/ProfitLoss')
|
|
|
|
config.add_route('api_stock_movement', '/api/StockMovement')
|
|
config.add_route('stock_movement', '/StockMovement')
|
|
|
|
add_route(config, 'balance_sheet', '/BalanceSheet', has_list=False, variable='date')
|
|
|
|
config.add_route('api_purchase_entries', '/api/PurchaseEntries')
|
|
config.add_route('purchase_entries', '/PurchaseEntries')
|
|
|
|
config.add_route('api_auth', '/api/Auth')
|
|
config.add_route('api_rebase', '/api/Rebase/{date}')
|
|
config.add_route('api_reset_stock', '/api/ResetStock/{id}')
|
|
|
|
config.add_route('api_batch', '/api/Batch')
|
|
|
|
config.add_route('favicon', '/favicon.ico')
|
|
config.scan()
|
|
|
|
return config.make_wsgi_app()
|
|
|