Auth Group done.
Employee done. ACL dynamically done. VoucherFactory to be done.
This commit is contained in:
parent
4ffa033fd3
commit
27c97cbf88
Conversion
brewman/brewman
__init__.pyfactories.pysecurity.py
static
partial
account-detail.htmlaccount-list.htmlcash-flow.htmlclosing-stock.htmlcost-center-detail.htmlcost-center-list.htmldaybook.htmlemployee-detail.htmlgroup-detail.htmlgroup-list.htmlissue.htmljournal.htmlledger.htmlpayment.htmlproduct-detail.htmlproduct-group-detail.htmlproduct-group-list.htmlproduct-ledger.htmlproduct-list.htmlprofit-loss.htmlpurchase-entries.htmlpurchase.htmlraw-material-cost-detail.htmlraw-material-cost.htmlreceipt.htmltrial-balance.htmlunposted.htmluser-detail.htmluser-list.html
scripts
templates
views
@ -1,3 +1,4 @@
|
||||
UPDATE Auth_Roles Set Name = 'Users' WHERE Name = 'CreateUser'
|
||||
--update entities_ledgers set code = code + 60 where type = 13; -- to prevent duplicate code when converting
|
||||
UPDATE entities_ledgers SET type = 11 WHERE type = 13;
|
||||
DROP TABLE Entities_Taxes;
|
||||
|
@ -54,10 +54,18 @@ def main(global_config, **settings):
|
||||
config.add_route('account', '/Account')
|
||||
config.add_route('account_list', '/Accounts')
|
||||
|
||||
config.add_route('employee_id', '/Employee/{id}')
|
||||
config.add_route('employee', '/Employee')
|
||||
config.add_route('employee_list', '/Employees')
|
||||
|
||||
config.add_route('user_id', '/User/{id}')
|
||||
config.add_route('user', '/User')
|
||||
config.add_route('user_list', '/Users')
|
||||
|
||||
config.add_route('group_id', '/Group/{id}')
|
||||
config.add_route('group', '/Group')
|
||||
config.add_route('group_list', '/Groups')
|
||||
|
||||
config.add_route('product_id', '/Product/{id}')
|
||||
config.add_route('product', '/Product')
|
||||
config.add_route('product_list', '/Products')
|
||||
@ -66,16 +74,11 @@ def main(global_config, **settings):
|
||||
config.add_route('product_group', '/ProductGroup')
|
||||
config.add_route('product_group_list', '/ProductGroups')
|
||||
|
||||
|
||||
config.add_route('employee_attendance_save', '/Employee/Attendance/Save')
|
||||
config.add_route('employee_attendance', '/Employee/Attendance')
|
||||
|
||||
config.add_route('employee_id', '/Employee/{id}')
|
||||
|
||||
config.add_route('employee_attendance_id', '/Employee/{id}/Attendance')
|
||||
|
||||
config.add_route('employee', '/Employee')
|
||||
config.add_route('employee_list', '/Employees')
|
||||
config.add_route('attendance_save', '/Attendance/Save')
|
||||
config.add_route('attendance_date', '/Attendance/{date}')
|
||||
config.add_route('attendance', '/Attendance')
|
||||
@ -115,10 +118,7 @@ def main(global_config, **settings):
|
||||
config.add_route('daybook', '/Daybook')
|
||||
config.add_route('unposted', '/Unposted')
|
||||
config.add_route('profit_loss', '/ProfitLoss')
|
||||
|
||||
config.add_route('group_roles_id', '/Admin/GroupRoles/{id}')
|
||||
config.add_route('group_roles', '/Admin/GroupRoles')
|
||||
config.add_route('save_group_roles', '/Admin/GroupRolesSave')
|
||||
config.add_route('purchase_entries', '/PurchaseEntries')
|
||||
|
||||
config.add_route('services_session_current_date', '/Services/CurrentDate')
|
||||
config.add_route('services_session_period_start', '/Services/PeriodStart')
|
||||
|
@ -1,77 +1,17 @@
|
||||
from pyramid.security import Everyone
|
||||
from pyramid.security import Authenticated
|
||||
from pyramid.security import Allow
|
||||
from brewman.models.auth import Role
|
||||
|
||||
class RootFactory(object):
|
||||
__acl__ = [
|
||||
(Allow, Everyone, 'view'),
|
||||
(Allow, Authenticated, 'post'),
|
||||
(Allow, 'Attendance', 'Attendance'),
|
||||
(Allow, 'BalanceSheet', 'BalanceSheet'),
|
||||
(Allow, 'Cash Flow', 'Cash Flow'),
|
||||
(Allow, 'CostCenter', 'CostCenter'),
|
||||
(Allow, 'CostCenterCreate', 'CostCenterCreate'),
|
||||
(Allow, 'CostCenterDelete', 'CostCenterDelete'),
|
||||
(Allow, 'CostCenterRetrieve', 'CostCenterRetrieve'),
|
||||
(Allow, 'CostCenterUpdate', 'CostCenterUpdate'),
|
||||
(Allow, 'CreateUser', 'CreateUser'),
|
||||
(Allow, 'DayBook', 'DayBook'),
|
||||
(Allow, 'EditPosted', 'EditPosted'),
|
||||
(Allow, 'Employees', 'Employees'),
|
||||
(Allow, 'EmployeesCreate', 'EmployeesCreate'),
|
||||
(Allow, 'EmployeesDelete', 'EmployeesDelete'),
|
||||
(Allow, 'EmployeesRetrieve', 'EmployeesRetrieve'),
|
||||
(Allow, 'EmployeesUpdate', 'EmployeesUpdate'),
|
||||
(Allow, 'Finger Prints', 'Finger Prints'),
|
||||
(Allow, 'Issue', 'Issue'),
|
||||
(Allow, 'Issue Create', 'Issue Create'),
|
||||
(Allow, 'Issue Delete', 'Issue Delete'),
|
||||
(Allow, 'Issue Post', 'Issue Post'),
|
||||
(Allow, 'Issue Update', 'Issue Update'),
|
||||
(Allow, 'Journal', 'Journal'),
|
||||
(Allow, 'Journal Create', 'Journal Create'),
|
||||
(Allow, 'Journal Delete', 'Journal Delete'),
|
||||
(Allow, 'Journal Post', 'Journal Post'),
|
||||
(Allow, 'Journal Update', 'Journal Update'),
|
||||
(Allow, 'Ledgers', 'Ledgers'),
|
||||
(Allow, 'LedgersCreate', 'LedgersCreate'),
|
||||
(Allow, 'LedgersDelete', 'LedgersDelete'),
|
||||
(Allow, 'LedgersRetrieve', 'LedgersRetrieve'),
|
||||
(Allow, 'LedgersUpdate', 'LedgersUpdate'),
|
||||
(Allow, 'ManageRoles', 'ManageRoles'),
|
||||
(Allow, 'OldTransactions', 'OldTransactions'),
|
||||
(Allow, 'Payment', 'Payment'),
|
||||
(Allow, 'Payment Create', 'Payment Create'),
|
||||
(Allow, 'Payment Delete', 'Payment Delete'),
|
||||
(Allow, 'Payment Post', 'Payment Post'),
|
||||
(Allow, 'Payment Update', 'Payment Update'),
|
||||
(Allow, 'PostTransactions', 'PostTransactions'),
|
||||
(Allow, 'Products', 'Products'),
|
||||
(Allow, 'ProductsCreate', 'ProductsCreate'),
|
||||
(Allow, 'ProductsDelete', 'ProductsDelete'),
|
||||
(Allow, 'ProductsRetrieve', 'ProductsRetrieve'),
|
||||
(Allow, 'ProductsUpdate', 'ProductsUpdate'),
|
||||
(Allow, 'ProfitAndLoss', 'ProfitAndLoss'),
|
||||
(Allow, 'Purchase', 'Purchase'),
|
||||
(Allow, 'Purchase Create', 'Purchase Create'),
|
||||
(Allow, 'Purchase Delete', 'Purchase Delete'),
|
||||
(Allow, 'Purchase Post', 'Purchase Post'),
|
||||
(Allow, 'Purchase Update', 'Purchase Update'),
|
||||
(Allow, 'PurchaseReturn', 'PurchaseReturn'),
|
||||
(Allow, 'PurchaseReturn Create', 'PurchaseReturn Create'),
|
||||
(Allow, 'PurchaseReturn Delete', 'PurchaseReturn Delete'),
|
||||
(Allow, 'PurchaseReturn Post', 'PurchaseReturn Post'),
|
||||
(Allow, 'PurchaseReturn Update', 'PurchaseReturn Update'),
|
||||
(Allow, 'Receipt', 'Receipt'),
|
||||
(Allow, 'Receipt Create', 'Receipt Create'),
|
||||
(Allow, 'Receipt Delete', 'Receipt Delete'),
|
||||
(Allow, 'Receipt Post', 'Receipt Post'),
|
||||
(Allow, 'Receipt Update', 'Receipt Update'),
|
||||
(Allow, 'Verification', 'Verification'),
|
||||
(Allow, 'Verification Create', 'Verification Create'),
|
||||
(Allow, 'Verification Delete', 'Verification Delete'),
|
||||
(Allow, 'Verification Post', 'Verification Post'),
|
||||
(Allow, 'Verification Update', 'Verification Update')
|
||||
]
|
||||
@property
|
||||
def __acl__(self):
|
||||
acl = [
|
||||
(Allow, Everyone, 'view'),
|
||||
(Allow, Authenticated, 'post')]
|
||||
for permission in Role.list():
|
||||
acl.append((Allow, permission.name, permission.name))
|
||||
print(acl)
|
||||
return acl
|
||||
def __init__(self, request):
|
||||
pass
|
@ -1,6 +1,19 @@
|
||||
import uuid
|
||||
from pyramid.security import Allow, ALL_PERMISSIONS
|
||||
from brewman.models.auth import User
|
||||
|
||||
class VoucherFactory(object):
|
||||
__acl__ = []
|
||||
|
||||
def __init__(self, request):
|
||||
self.request = request
|
||||
|
||||
def __getitem__(self, key):
|
||||
user = USERS[key]
|
||||
user.__parent__ = self
|
||||
user.__name__ = key
|
||||
return user
|
||||
|
||||
def groupfinder(user_id, request):
|
||||
perms = []
|
||||
if 'perms' in request.session:
|
||||
@ -12,6 +25,7 @@ def groupfinder(user_id, request):
|
||||
perms.append(perm.name)
|
||||
perms = f7(perms)
|
||||
request.session['perms'] = perms
|
||||
print(perms)
|
||||
return perms
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" class="form-horizontal" ng-controller="AccountCtrl">
|
||||
<form method="post" class="form-horizontal">
|
||||
<legend>Account Detail</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtCode" class="control-label">Code</label>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<legend>Accounts <a href="/Account" class="btn btn-success pull-right">Add <i class="icon-plus icon-white"></i></a></legend>
|
||||
<table class="clean-table" ng-controller="AccountListCtrl">
|
||||
<table class="clean-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form" ng-controller="CashFlowCtrl">
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Cash Flow</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtStartDate" class="control-label">Date</label>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form" ng-controller="ClosingStockCtrl">
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Closing Stock</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtDate" class="control-label">Date</label>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" class="form-horizontal" ng-controller="CostCenterCtrl">
|
||||
<form method="post" class="form-horizontal">
|
||||
<legend>Cost Center Detail</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtName" class="control-label">Name</label>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<legend>Cost Centers <a href="/CostCenter" class="btn btn-success pull-right">Add <i class="icon-plus icon-white"></i></a></legend>
|
||||
<table class="clean-table" ng-controller="CostCenterListCtrl">
|
||||
<table class="clean-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form" ng-controller="DaybookCtrl">
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Daybook</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtStartDate" class="control-label">Date</label>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" class="form-horizontal" ng-controller="EmployeeCtrl">
|
||||
<form method="post" class="form-horizontal">
|
||||
<legend>Employee Detail</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtCode" class="control-label">Code</label>
|
||||
|
32
brewman/brewman/static/partial/group-detail.html
Normal file
32
brewman/brewman/static/partial/group-detail.html
Normal file
@ -0,0 +1,32 @@
|
||||
<form method="post" class="form-horizontal">
|
||||
<legend>Group Detail</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtName" class="control-label">Name</label>
|
||||
|
||||
<div class="controls">
|
||||
<input type="text" id="txtName" ng-model="group.Name"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label for="ulPermissions" class="control-label">Permissions</label>
|
||||
|
||||
<div class="controls">
|
||||
<ul id="ulPermissions">
|
||||
<li ng-repeat="permission in group.Permissions">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" ng-model="permission.Enabled"> {{permission.Name}}
|
||||
</label>
|
||||
</li>
|
||||
<!--<li ng-repeat="group in user.Groups">{{group}}</li>-->
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class=" control-group" id="add">
|
||||
|
||||
<div class="controls">
|
||||
<button ng-click="save()">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
20
brewman/brewman/static/partial/group-list.html
Normal file
20
brewman/brewman/static/partial/group-list.html
Normal file
@ -0,0 +1,20 @@
|
||||
<legend>Users <a href="/Group" class="btn btn-success pull-right">Add <i class="icon-plus icon-white"></i></a></legend>
|
||||
<table class="clean-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Groups</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="item in info">
|
||||
<td><a href="{{item.Url}}">{{item.Name}}</a></td>
|
||||
<td>
|
||||
<ul>
|
||||
<li ng-repeat="permission in item.Permissions">{{permission}}</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<h2 class="ribbon-header">Issue Edit / New</h2>
|
||||
<form method="post" autocomplete="off" class="form-horizontal" ng-controller="IssueCtrl">
|
||||
<form method="post" autocomplete="off" class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label for="gvSmall" class="control-label"></label>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="form-horizontal" ng-controller="JournalCtrl">
|
||||
<form method="post" autocomplete="off" class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label for="txtCode" class="control-label">Code</label>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form" ng-controller="LedgerCtrl">
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Ledger</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtStartDate" class="control-label">Date</label>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="form-horizontal" ng-controller="PaymentCtrl">
|
||||
<form method="post" autocomplete="off" class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label for="txtCode" class="control-label">Code</label>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" class="form-horizontal" ng-controller="ProductCtrl">
|
||||
<form method="post" class="form-horizontal">
|
||||
<legend>Product Detail</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtCode" class="control-label">Code</label>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" class="form-horizontal" ng-controller="ProductGroupCtrl">
|
||||
<form method="post" class="form-horizontal">
|
||||
<legend>Product Group Detail</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtName" class="control-label">Name</label>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<legend>Product Groups <a href="/ProductGroup" class="btn btn-success pull-right">Add <i class="icon-plus icon-white"></i></a></legend>
|
||||
<table class="clean-table" ng-controller="ProductGroupListCtrl">
|
||||
<table class="clean-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form" ng-controller="ProductLedgerCtrl">
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Product Ledger</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtStartDate" class="control-label">Date</label>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<legend>Products <a href="/Product" class="btn btn-success pull-right">Add <i class="icon-plus icon-white"></i></a></legend>
|
||||
<table class="clean-table" ng-controller="ProductListCtrl">
|
||||
<table class="clean-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Code</th>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form" ng-controller="ProfitLossCtrl">
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Profit & Loss</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtStartDate" class="control-label">Date</label>
|
||||
|
42
brewman/brewman/static/partial/purchase-entries.html
Normal file
42
brewman/brewman/static/partial/purchase-entries.html
Normal file
@ -0,0 +1,42 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Purchase Entries</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtStartDate" class="control-label">Date</label>
|
||||
|
||||
<div class="controls">
|
||||
<datepicker id="txtStartDate" model="info" prop="StartDate" ng-model="info.StartDate"></datepicker>
|
||||
<datepicker id="txtFinishDate" model="info" prop="FinishDate" ng-model="info.FinishDate"></datepicker>
|
||||
<button ng-click="show()">Show</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label for="gvGrid" class="control-label"></label>
|
||||
|
||||
<div class="controls">
|
||||
<table id="gvGrid" class="clean-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Supplier</th>
|
||||
<th>Product</th>
|
||||
<th class="right">Quantity</th>
|
||||
<th class="right">Rate</th>
|
||||
<th class="right">Tax</th>
|
||||
<th class="right">Amount</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody ng-repeat="items in info.Body">
|
||||
<tr ng-repeat="item in items.Products">
|
||||
<td ngm-if="$first" rowspan="{{items.Products.length}}">{{items.Date}}</td>
|
||||
<td ngm-if="$first" rowspan="{{items.Products.length}}"><a href="{{items.Url}}">{{items.Supplier}}</a></td>
|
||||
<td>{{item.Product}}</td>
|
||||
<td class="right">{{item.Quantity}}</td>
|
||||
<td class="right">{{item.Rate}}</td>
|
||||
<td class="right">{{item.Tax}}</td>
|
||||
<td class="right">{{item.Amount}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
@ -1,5 +1,5 @@
|
||||
<h2 class="ribbon-header">Purchase Edit / New</h2>
|
||||
<form method="post" autocomplete="off" class="form-horizontal" ng-controller="PurchaseCtrl">
|
||||
<form method="post" autocomplete="off" class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label for="txtCode" class="control-label">Code</label>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form" ng-controller="RawMaterialCostCtrl">
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Raw Material Cost Detail</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtStartDate" class="control-label">Date</label>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form" ng-controller="RawMaterialCostCtrl">
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Raw Material Cost</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtStartDate" class="control-label">Date</label>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="form-horizontal" ng-controller="ReceiptCtrl">
|
||||
<form method="post" autocomplete="off" class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label for="txtCode" class="control-label">Code</label>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form" ng-controller="TrialBalanceCtrl">
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Trial Balance</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtDate" class="control-label">Date</label>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" autocomplete="off" class="horizontal-form" ng-controller="UnpostedCtrl">
|
||||
<form method="post" autocomplete="off" class="horizontal-form">
|
||||
<legend>Unposted Entries</legend>
|
||||
<div class="control-group">
|
||||
<label for="gvGrid" class="control-label"></label>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form method="post" class="form-horizontal" ng-controller="UserCtrl">
|
||||
<form method="post" class="form-horizontal">
|
||||
<legend>User Detail</legend>
|
||||
<div class="control-group">
|
||||
<label for="txtName" class="control-label">Name</label>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<legend>Users <a href="/User" class="btn btn-success pull-right">Add <i class="icon-plus icon-white"></i></a></legend>
|
||||
<table class="clean-table" ng-controller="UserListCtrl">
|
||||
<table class="clean-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
|
@ -126,3 +126,44 @@ overlord_directive.directive('fadey', function () {
|
||||
};
|
||||
return directiveDefinitionObject;
|
||||
});
|
||||
|
||||
|
||||
(function (angular) {
|
||||
/*
|
||||
* Defines the ng:if tag. This is useful if jquery mobile does not allow
|
||||
* an ng-switch element in the dom, e.g. between ul and li.
|
||||
*/
|
||||
var ngIfDirective = {
|
||||
transclude:'element',
|
||||
priority:1000,
|
||||
terminal:true,
|
||||
compile:function (element, attr, linker) {
|
||||
return function (scope, iterStartElement, attr) {
|
||||
iterStartElement[0].doNotMove = true;
|
||||
var expression = attr.ngmIf;
|
||||
var lastElement;
|
||||
var lastScope;
|
||||
scope.$watch(expression, function (newValue) {
|
||||
if (lastElement) {
|
||||
lastElement.remove();
|
||||
lastElement = null;
|
||||
}
|
||||
lastScope && lastScope.$destroy();
|
||||
if (newValue) {
|
||||
lastScope = scope.$new();
|
||||
linker(lastScope, function (clone) {
|
||||
lastElement = clone;
|
||||
iterStartElement.after(clone);
|
||||
});
|
||||
}
|
||||
// Note: need to be parent() as jquery cannot trigger events on comments
|
||||
// (angular creates a comment node when using transclusion, as ng-repeat does).
|
||||
iterStartElement.parent().trigger("$childrenChanged");
|
||||
});
|
||||
};
|
||||
}
|
||||
};
|
||||
overlord_directive.directive('ngmIf', function () {
|
||||
return ngIfDirective;
|
||||
});
|
||||
})(angular);
|
@ -65,6 +65,14 @@ overlord_service.factory('User', ['$resource', function ($resource) {
|
||||
});
|
||||
}]);
|
||||
|
||||
// TODO: Replace hardcoded url with route_url
|
||||
overlord_service.factory('Group', ['$resource', function ($resource) {
|
||||
return $resource('/Group/:id',
|
||||
{id:'@GroupID'}, {
|
||||
query:{method:'GET', params:{list:true}, isArray:true}
|
||||
});
|
||||
}]);
|
||||
|
||||
// TODO: Replace hardcoded url with route_url
|
||||
overlord_service.factory('Product', ['$resource', function ($resource) {
|
||||
return $resource('/Product/:id',
|
||||
@ -120,6 +128,11 @@ overlord_service.factory('ProfitLoss', ['$resource', function ($resource) {
|
||||
return $resource('/ProfitLoss');
|
||||
}]);
|
||||
|
||||
// TODO: Replace hardcoded url with route_url
|
||||
overlord_service.factory('PurchaseEntries', ['$resource', function ($resource) {
|
||||
return $resource('/PurchaseEntries');
|
||||
}]);
|
||||
|
||||
// TODO: Replace hardcoded url with route_url
|
||||
overlord_service.factory('RawMaterialCost', ['$resource', function ($resource) {
|
||||
return $resource('/RawMaterialCost/:id');
|
||||
|
27
brewman/brewman/static/scripts/group.js
Normal file
27
brewman/brewman/static/scripts/group.js
Normal file
@ -0,0 +1,27 @@
|
||||
function GroupListCtrl($scope, Group) {
|
||||
$scope.info = Group.query();
|
||||
}
|
||||
|
||||
function GroupCtrl($scope, $routeParams, $location, Group) {
|
||||
$scope.group = Group.get({id: $routeParams.id});
|
||||
|
||||
$scope.save = function () {
|
||||
$scope.group.$save(function (u, putResponseHeaders) {
|
||||
$scope.toasts.push({Type:'Success', Message:u.Code});
|
||||
$location.path('/Groups')
|
||||
}, function (data, status) {
|
||||
$scope.toasts.push({Type:'Error', Message:data.data});
|
||||
});
|
||||
};
|
||||
|
||||
$scope.delete = function () {
|
||||
$scope.group.$delete(function (u, putResponseHeaders) {
|
||||
$scope.toasts.push({Type:'Success', Message:''});
|
||||
$location.path('/Groups')
|
||||
}, function (data, status) {
|
||||
$scope.toasts.push({Type:'Error', Message:data.data});
|
||||
});
|
||||
};
|
||||
$('#txtName').focus();
|
||||
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
function Populate(response) {
|
||||
if (response != null) {
|
||||
var stateObj = { 'group_id':response.group_id };
|
||||
history.pushState(stateObj, 'Display', response.url);
|
||||
$('#ddlGroup').val(response.group_id);
|
||||
$('#tbodyMain').html(response.body);
|
||||
}
|
||||
}
|
||||
|
||||
function Show(group_id) {
|
||||
$.ajax({
|
||||
type:"POST",
|
||||
contentType:"application/json; charset=utf-8",
|
||||
data:JSON.stringify({ group_id:group_id }),
|
||||
dataType:"json",
|
||||
success:function (response) {
|
||||
Populate(response);
|
||||
},
|
||||
error:function (jqXHR, textStatus) {
|
||||
$("#ctl00_statusDiv").removeClass().addClass("error");
|
||||
var msg = $.parseJSON(jqXHR.responseText).Message;
|
||||
$("#ctl00_statusDiv").html(msg);
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
function GetFormData() {
|
||||
var selected_roles = new Array();
|
||||
var group_id = $("#ddlGroup").val();
|
||||
$("tr.Entry").each(function () {
|
||||
$this = $(this);
|
||||
var role_id = $this.find("td.RoleID").html();
|
||||
var checkbox = $this.find("input[type=checkbox]").attr('checked');
|
||||
checkbox = (typeof checkbox == 'undefined') ? false : true;
|
||||
selected_roles.push({ 'role_id':role_id, 'selected':checkbox });
|
||||
});
|
||||
return JSON.stringify({group_id:group_id, selected_roles:selected_roles});
|
||||
}
|
||||
|
||||
function ResetForm() {}
|
||||
|
@ -38,6 +38,7 @@ var overlord = angular.module('overlord', ['overlord.directive', 'overlord.filte
|
||||
when('/Daybook', {templateUrl:'/partial/daybook.html', controller:DaybookCtrl}).
|
||||
when('/Unposted', {templateUrl:'/partial/unposted.html', controller:UnpostedCtrl}).
|
||||
when('/ProfitLoss', {templateUrl:'/partial/profit-loss.html', controller:ProfitLossCtrl}).
|
||||
when('/PurchaseEntries', {templateUrl:'/partial/purchase-entries.html', controller:PurchaseEntriesCtrl}).
|
||||
|
||||
when('/TrialBalance', {templateUrl:'/partial/trial-balance.html', controller:TrialBalanceCtrl}).
|
||||
when('/TrialBalance/:date', {templateUrl:'/partial/trial-balance.html', controller:TrialBalanceCtrl}).
|
||||
@ -67,7 +68,11 @@ var overlord = angular.module('overlord', ['overlord.directive', 'overlord.filte
|
||||
|
||||
when('/Users', {templateUrl:'/partial/user-list.html', controller:UserListCtrl}).
|
||||
when('/User', {templateUrl:'/partial/user-detail.html', controller:UserCtrl}).
|
||||
when('/User/:id', {templateUrl:'/partial/user-detail.html', controller:UserCtrl});
|
||||
when('/User/:id', {templateUrl:'/partial/user-detail.html', controller:UserCtrl}).
|
||||
|
||||
when('/Groups', {templateUrl:'/partial/group-list.html', controller:GroupListCtrl}).
|
||||
when('/Group', {templateUrl:'/partial/group-detail.html', controller:GroupCtrl}).
|
||||
when('/Group/:id', {templateUrl:'/partial/group-detail.html', controller:GroupCtrl});
|
||||
// .otherwise({redirectTo: '/phones'});
|
||||
$locationProvider.html5Mode(true);
|
||||
}])
|
||||
|
15
brewman/brewman/static/scripts/purchase-entries.js
Normal file
15
brewman/brewman/static/scripts/purchase-entries.js
Normal file
@ -0,0 +1,15 @@
|
||||
function PurchaseEntriesCtrl($scope, $routeParams, $location, PurchaseEntries) {
|
||||
if (typeof $routeParams.StartDate === 'undefined') {
|
||||
$scope.info = PurchaseEntries.get({});
|
||||
} else {
|
||||
$scope.info = PurchaseEntries.get({StartDate:$routeParams.StartDate, FinishDate:$routeParams.FinishDate});
|
||||
}
|
||||
$scope.show = function () {
|
||||
$scope.info = PurchaseEntries.get({StartDate:$scope.info.StartDate, FinishDate:$scope.info.FinishDate}, function (u, putResponseHeaders) {
|
||||
$location.path('/PurchaseEntries').search({StartDate:u.StartDate, FinishDate:u.FinishDate});
|
||||
}, function (data, status) {
|
||||
$scope.toasts.push({Type:'Error', Message:data.data});
|
||||
});
|
||||
};
|
||||
$('#txtStartDate').focus();
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
function Populate(response) {
|
||||
if (response != null) {
|
||||
var stateObj = { 'user_id':response.user_id };
|
||||
history.pushState(stateObj, 'Display', response.url);
|
||||
$('#ddlUser').val(response.user_id);
|
||||
$('#tbodyMain').html(response.body);
|
||||
}
|
||||
}
|
||||
|
||||
function Show(user_id) {
|
||||
$.ajax({
|
||||
type:"POST",
|
||||
contentType:"application/json; charset=utf-8",
|
||||
data:JSON.stringify({ user_id:user_id }),
|
||||
dataType:"json",
|
||||
success:function (response) {
|
||||
Populate(response);
|
||||
},
|
||||
error:function (jqXHR, textStatus) {
|
||||
$("#ctl00_statusDiv").removeClass().addClass("error");
|
||||
var msg = $.parseJSON(jqXHR.responseText).Message;
|
||||
$("#ctl00_statusDiv").html(msg);
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
function GetFormData() {
|
||||
var selected_groups = new Array();
|
||||
var user_id = $("#ddlUser").val();
|
||||
$("tr.Entry").each(function () {
|
||||
$this = $(this);
|
||||
var group_id = $this.find("td.GroupID").html();
|
||||
var checkbox = $this.find("input[type=checkbox]").attr('checked');
|
||||
checkbox = (typeof checkbox == 'undefined') ? false : true;
|
||||
selected_groups.push({ 'group_id':group_id, 'selected':checkbox });
|
||||
});
|
||||
return JSON.stringify({user_id:user_id, selected_groups:selected_groups});
|
||||
}
|
||||
|
||||
function ResetForm() {}
|
||||
|
@ -45,6 +45,7 @@
|
||||
${h.ScriptLink(request, 'trial-balance.js')}
|
||||
${h.ScriptLink(request, 'closing-stock.js')}
|
||||
${h.ScriptLink(request, 'profit-loss.js')}
|
||||
${h.ScriptLink(request, 'purchase-entries.js')}
|
||||
${h.ScriptLink(request, 'cash-flow.js')}
|
||||
${h.ScriptLink(request, 'raw-material-cost.js')}
|
||||
${h.ScriptLink(request, 'daybook.js')}
|
||||
@ -53,6 +54,7 @@
|
||||
${h.ScriptLink(request, 'account.js')}
|
||||
${h.ScriptLink(request, 'employee.js')}
|
||||
${h.ScriptLink(request, 'user.js')}
|
||||
${h.ScriptLink(request, 'group.js')}
|
||||
${h.ScriptLink(request, 'cost-center.js')}
|
||||
${h.ScriptLink(request, 'product.js')}
|
||||
${h.ScriptLink(request, 'product-group.js')}
|
||||
|
@ -3,8 +3,8 @@
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="${request.route_url('logout')}">Logout ${user.name}</a></li>
|
||||
<li><a href="/AccountsTesting/Security/ChangePassword.aspx">Change Password</a></li>
|
||||
<li><a href="${request.route_url('group_roles')}">Group Roles</a></li>
|
||||
<li><a href="${request.route_url('user_list')}">Users</a></li>
|
||||
<li><a href="${request.route_url('group_list')}">Groups</a></li>
|
||||
<li><a href="/AccountsTesting/Maintenance/Split.aspx">Split Data</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@ -13,30 +13,8 @@
|
||||
<li tal:condition="not user" class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="icon-user"></i> User <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="${request.route_url('login')}">Log in</a></li>
|
||||
<li><a href="${request.route_url('group_roles')}">Group Roles</a></li>
|
||||
<li><a href="${request.route_url('user_list')}">Users</a></li>
|
||||
<li><a href="${request.route_url('group_list')}">Groups</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<span tal:replace="nothing">
|
||||
<li tal:condition="user"><a href="${request.route_url('home')}">${user.name}</a>
|
||||
<ul>
|
||||
<li><a href="${request.route_url('logout')}">Logout ${user.name}</a></li>
|
||||
<li><a href="/AccountsTesting/Security/ChangePassword.aspx">Change Password</a></li>
|
||||
<li><a href="${request.route_url('group_roles')}">Group Roles</a></li>
|
||||
<li><a href="/AccountsTesting/Security/AddUser.aspx">Add User</a></li>
|
||||
<li><a href="/AccountsTesting/Security/DisableUser.aspx">Disable User</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
<li tal:condition="not user"><a href="${request.route_url('home')}">Home</a>
|
||||
<ul>
|
||||
<li><a href="${request.route_url('login')}">Log in</a></li>
|
||||
<li><a href="${request.route_url('group_roles')}">Group Roles</a></li>
|
||||
<li><a href="/AccountsTesting/Security/AddUser.aspx">Add User</a></li>
|
||||
<li><a href="/AccountsTesting/Security/DisableUser.aspx">Disable User</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</span>
|
@ -8,18 +8,16 @@
|
||||
<li><a href="">Purchases</a>
|
||||
<ul>
|
||||
<li><a href="${request.route_url('raw_material_cost')}">Raw Material Cost</a></li>
|
||||
<li><a href="/AccountsTesting/Reports/PurchaseEntry.aspx">Purchase Entry</a></li>
|
||||
<li><a href="${request.route_url('purchase_entries')}">Purchase Entries</a></li>
|
||||
## <li><a href="/AccountsTesting/Reports/Purchases/Purchases.aspx">Purchases</a></li>
|
||||
## <li><a href="/AccountsTesting/Reports/Purchases/PurchaseLedger.aspx">Purchase Ledger</a></li>
|
||||
<li><a href="${request.route_url('closing_stock')}">Closing Stock</a></li>
|
||||
## <li><a href="/AccountsTesting/Reports/Inventory/Main.aspx">Inventory Report</a></li>
|
||||
<li><a href="/AccountsTesting/Reports/Issue/Issue_All.aspx">Issue</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="">Final Reports</a>
|
||||
<ul>
|
||||
<li><a href="${request.route_url('trial_balance')}">Trail Balance</a></li>
|
||||
<li><a href="${request.route_url('trial_balance')}">Differential Trail Balance</a></li>
|
||||
<li><a href="${request.route_url('profit_loss')}">Profit and Loss</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
@ -7,17 +7,17 @@ import transaction
|
||||
from brewman.models.master import CostCenter, Ledger, LedgerType
|
||||
from brewman.models.validation_exception import ValidationError
|
||||
|
||||
@view_config(route_name='account_list', renderer='brewman:templates/angular_base.mako')
|
||||
@view_config(route_name='account_list', renderer='brewman:templates/angular_base.mako', permission='Accounts')
|
||||
@view_config(request_method='GET', route_name='account_id', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False)
|
||||
xhr=False, permission='Accounts')
|
||||
@view_config(request_method='GET', route_name='account', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False)
|
||||
xhr=False, permission='Accounts')
|
||||
def html(request):
|
||||
return {}
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='account_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='POST', route_name='account', renderer='json', xhr=True)
|
||||
@view_config(request_method='POST', route_name='account_id', renderer='json', xhr=True, permission='Accounts')
|
||||
@view_config(request_method='POST', route_name='account', renderer='json', xhr=True, permission='Accounts')
|
||||
def save_update(request):
|
||||
try:
|
||||
id = request.matchdict.get('id', None)
|
||||
@ -42,7 +42,7 @@ def save_update(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='DELETE', route_name='account_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='DELETE', route_name='account_id', renderer='json', xhr=True, permission='Accounts')
|
||||
def delete(request):
|
||||
id = request.matchdict.get('id', None)
|
||||
if id is None:
|
||||
@ -55,17 +55,17 @@ def delete(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='account_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='account_id', renderer='json', xhr=True, permission='Accounts')
|
||||
def show_id(request):
|
||||
return account_info(uuid.UUID(request.matchdict.get('id', None)))
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='account', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='account', renderer='json', xhr=True, permission='Accounts')
|
||||
def show_blank(request):
|
||||
return account_info(None)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='account', renderer='json', request_param='list', xhr=True)
|
||||
@view_config(request_method='GET', route_name='account', renderer='json', request_param='list', xhr=True, permission='Accounts')
|
||||
def show_list(request):
|
||||
list = Ledger.list()
|
||||
ledgers = []
|
||||
@ -75,7 +75,7 @@ def show_list(request):
|
||||
return ledgers
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='account_type_list', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='account_type_list', renderer='json', xhr=True, permission='Accounts')
|
||||
def account_type_list(request):
|
||||
account_types = []
|
||||
for item in LedgerType.list():
|
||||
|
109
brewman/brewman/views/auth/group.py
Normal file
109
brewman/brewman/views/auth/group.py
Normal file
@ -0,0 +1,109 @@
|
||||
import uuid
|
||||
|
||||
from pyramid.view import view_config
|
||||
import transaction
|
||||
from brewman.models import DBSession
|
||||
from brewman.models.auth import Group, Role
|
||||
from brewman.models.validation_exception import ValidationError
|
||||
|
||||
@view_config(route_name='group_list', renderer='brewman:templates/angular_base.mako', permission='Users')
|
||||
@view_config(request_method='GET', route_name='group_id', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False, permission='Users')
|
||||
@view_config(request_method='GET', route_name='group', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False, permission='Users')
|
||||
def html(request):
|
||||
return {}
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='group', renderer='json', xhr=True, permission='Users')
|
||||
def save(request):
|
||||
try:
|
||||
group = Group(request.json_body['Name'])
|
||||
DBSession.add(group)
|
||||
add_permissions(group, request.json_body['Permissions'])
|
||||
transaction.commit()
|
||||
return group_info(group.id)
|
||||
except ValidationError as ex:
|
||||
transaction.abort()
|
||||
response = Response("Failed validation: {0}".format(ex.message))
|
||||
response.status_int = 500
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='group_id', renderer='json', xhr=True, permission='Users')
|
||||
def update(request):
|
||||
try:
|
||||
id = request.matchdict.get('id', None)
|
||||
group = Group.get_by_id(uuid.UUID(id))
|
||||
group.name = request.json_body['Name']
|
||||
add_permissions(group, request.json_body['Permissions'])
|
||||
transaction.commit()
|
||||
return group_info(group.id)
|
||||
except ValidationError as ex:
|
||||
transaction.abort()
|
||||
response = Response("Failed validation: {0}".format(ex.message))
|
||||
response.status_int = 500
|
||||
return response
|
||||
|
||||
|
||||
def add_permissions(group, permissions):
|
||||
for permission in permissions:
|
||||
id = uuid.UUID(permission['PermissionID'])
|
||||
gp = [p for p in group.roles if p.id == id]
|
||||
gp = None if len(gp) == 0 else gp[0]
|
||||
if permission['Enabled'] and gp is None:
|
||||
group.roles.append(Role.get_by_id(id))
|
||||
elif not permission['Enabled'] and gp:
|
||||
group.roles.remove(gp)
|
||||
|
||||
|
||||
@view_config(request_method='DELETE', route_name='group_id', renderer='json', xhr=True, permission='Users')
|
||||
def delete(request):
|
||||
id = request.matchdict.get('id', None)
|
||||
if id is None:
|
||||
response = Response("Group is Null")
|
||||
response.status_int = 500
|
||||
return response
|
||||
else:
|
||||
response = Response("Group deletion not implemented")
|
||||
response.status_int = 500
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='group_id', renderer='json', xhr=True, permission='Users')
|
||||
def show_id(request):
|
||||
return group_info(uuid.UUID(request.matchdict.get('id', None)))
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='group', renderer='json', xhr=True, permission='Users')
|
||||
def show_blank(request):
|
||||
return group_info(None)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='group', renderer='json', request_param='list', xhr=True, permission='Users')
|
||||
def show_list(request):
|
||||
list = Group.list()
|
||||
groups = []
|
||||
for item in list:
|
||||
group = {'Name': item.name, 'Permissions': [], 'Url': request.route_url('group_id', id=item.id)}
|
||||
for permission in item.roles:
|
||||
group['Permissions'].append(permission.name)
|
||||
groups.append(group)
|
||||
return groups
|
||||
|
||||
|
||||
def group_info(id):
|
||||
if id is None:
|
||||
group = {'Name': '', 'Permissions': []}
|
||||
for item in Role.list():
|
||||
group['Permissions'].append({'PermissionID': item.id, 'Name': item.name, 'Enabled': False})
|
||||
print(group)
|
||||
else:
|
||||
group_object = Group.get_by_id(id)
|
||||
group = {'GroupID': group_object.id, 'Name': group_object.name, 'Permissions': []}
|
||||
for item in Role.list():
|
||||
group['Permissions'].append(
|
||||
{'PermissionID': item.id, 'Name': item.name, 'Enabled': True if item in group_object.roles else False})
|
||||
return group
|
||||
|
||||
|
@ -1,75 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from pyramid.view import view_config
|
||||
import transaction
|
||||
from brewman.helpers import Literal, SelectInput
|
||||
from brewman.models.auth import User, Group, Role
|
||||
|
||||
@view_config(request_method='GET', route_name='group_roles', permission='ManageRoles',
|
||||
renderer='brewman:templates/auth/group_roles.pt')
|
||||
@view_config(request_method='GET', route_name='group_roles_id', permission='ManageRoles',
|
||||
renderer='brewman:templates/auth/group_roles.pt')
|
||||
def group_roles_get(request):
|
||||
id = request.matchdict.get('id', None)
|
||||
id = None if id is None else uuid.UUID(id)
|
||||
group = SelectInput('ddlGroup', list=Group.list(), displayField='name', valueField='id', defaultValue=id)
|
||||
body, footer = build_report(request, id)
|
||||
body = Literal(body)
|
||||
footer = Literal(footer)
|
||||
|
||||
return {'title': 'Group Roles',
|
||||
'pageclass': "page-blogpost page-sidebar-right",
|
||||
'pagecontentclass': "page-content grid_12",
|
||||
'page_header': '',
|
||||
'group': group,
|
||||
'body': body,
|
||||
'footer': footer}
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='group_roles', permission='ManageRoles', renderer='json', xhr=True)
|
||||
@view_config(request_method='POST', route_name='group_roles_id', permission='ManageRoles', renderer='json', xhr=True)
|
||||
def group_roles_post(request):
|
||||
id = request.json_body['group_id']
|
||||
body, footer = build_report(request, uuid.UUID(id))
|
||||
url = request.route_url('group_roles_id', id=id)
|
||||
return {'group_id': id,
|
||||
'url': url,
|
||||
'body': body}
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='save_group_roles', permission='ManageRoles', renderer='json', xhr=True)
|
||||
def group_roles_save(request):
|
||||
id = request.json_body['group_id']
|
||||
group = Group.get_by_id(uuid.UUID(id))
|
||||
for item in request.json_body['selected_roles']:
|
||||
role = Role.get_by_id(uuid.UUID(item['role_id']))
|
||||
selected = item['selected']
|
||||
if selected and role not in group.roles:
|
||||
group.roles.append(role)
|
||||
elif not selected and role in group.roles:
|
||||
group.roles.remove(role)
|
||||
transaction.commit()
|
||||
return 'Roles Updated'
|
||||
|
||||
|
||||
def build_report(request, id):
|
||||
body = ''
|
||||
if id is None:
|
||||
for item in Role.list():
|
||||
body += '<tr class="Entry"><td class="RoleID hide">{0}</td><td class="Name=">'\
|
||||
'<input type="checkbox" id="ch_{0}" value="True" /><label for="ch_{0}">{1}</label></td></tr>'\
|
||||
.format(str(item.id), item.name)
|
||||
else:
|
||||
group = Group.get_by_id(id)
|
||||
for item in Role.list():
|
||||
if item in group.roles:
|
||||
checked = ' checked="checked"'
|
||||
else:
|
||||
checked = ''
|
||||
body += '<tr class="Entry"><td class="RoleID hide">{0}</td><td class="Name=">'\
|
||||
'<input type="checkbox" id="ch_{0}"{2} value="True" /><label for="ch_{0}">{1}</label></td></tr>'\
|
||||
.format(str(item.id), item.name, checked)
|
||||
footer = '<tr><td class="RoleID hide"></td><td class="Name="></td></tr>'
|
||||
return body, footer
|
||||
|
||||
|
@ -8,38 +8,21 @@ from brewman.models.auth import User, Group
|
||||
|
||||
from brewman.models.validation_exception import ValidationError
|
||||
|
||||
@view_config(route_name='user_list', renderer='brewman:templates/angular_base.mako', permission='ManageRoles')
|
||||
@view_config(route_name='user_list', renderer='brewman:templates/angular_base.mako', permission='Users')
|
||||
@view_config(request_method='GET', route_name='user_id', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False, permission='ManageRoles')
|
||||
xhr=False, permission='Users')
|
||||
@view_config(request_method='GET', route_name='user', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False, permission='ManageRoles')
|
||||
xhr=False, permission='Users')
|
||||
def html(request):
|
||||
return {}
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='user_id', renderer='json', xhr=True, permission='CreateUser')
|
||||
@view_config(request_method='POST', route_name='user', renderer='json', xhr=True, permission='CreateUser')
|
||||
def save_update(request):
|
||||
@view_config(request_method='POST', route_name='user', renderer='json', xhr=True, permission='Users')
|
||||
def save(request):
|
||||
try:
|
||||
id = request.matchdict.get('id', None)
|
||||
if id is None:
|
||||
user = User(request.json_body['Name'], request.json_body['Password'], request.json_body['LockedOut'])
|
||||
DBSession.add(user)
|
||||
else:
|
||||
user = User.get_by_id(uuid.UUID(id))
|
||||
user.name = request.json_body['Name']
|
||||
user.locked_out = request.json_body['LockedOut']
|
||||
if request.json_body['Password'] != '' and request.json_body['Password'] != user.password:
|
||||
user.password = request.json_body['Password']
|
||||
for group in request.json_body['Groups']:
|
||||
print(group)
|
||||
id = uuid.UUID(group['GroupID'])
|
||||
ug = [g for g in user.groups if g.id == id]
|
||||
ug = None if len(ug) == 0 else ug[0]
|
||||
if group['Enabled'] and ug is None:
|
||||
user.groups.append(Group.get_by_id(id))
|
||||
elif not group['Enabled'] and ug:
|
||||
user.groups.remove(ug)
|
||||
user = User(request.json_body['Name'], request.json_body['Password'], request.json_body['LockedOut'])
|
||||
DBSession.add(user)
|
||||
add_groups(user, request.json_body['Groups'])
|
||||
transaction.commit()
|
||||
return user_info(user.id)
|
||||
except ValidationError as ex:
|
||||
@ -49,7 +32,37 @@ def save_update(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='DELETE', route_name='user_id', renderer='json', xhr=True, permission='CreateUser')
|
||||
@view_config(request_method='POST', route_name='user_id', renderer='json', xhr=True, permission='Users')
|
||||
def update(request):
|
||||
try:
|
||||
id = request.matchdict.get('id', None)
|
||||
user = User.get_by_id(uuid.UUID(id))
|
||||
user.name = request.json_body['Name']
|
||||
user.locked_out = request.json_body['LockedOut']
|
||||
if request.json_body['Password'] != '' and request.json_body['Password'] != user.password:
|
||||
user.password = request.json_body['Password']
|
||||
add_groups(user, request.json_body['Groups'])
|
||||
transaction.commit()
|
||||
return user_info(user.id)
|
||||
except ValidationError as ex:
|
||||
transaction.abort()
|
||||
response = Response("Failed validation: {0}".format(ex.message))
|
||||
response.status_int = 500
|
||||
return response
|
||||
|
||||
|
||||
def add_groups(user, groups):
|
||||
for group in groups:
|
||||
id = uuid.UUID(group['GroupID'])
|
||||
ug = [g for g in user.groups if g.id == id]
|
||||
ug = None if len(ug) == 0 else ug[0]
|
||||
if group['Enabled'] and ug is None:
|
||||
user.groups.append(Group.get_by_id(id))
|
||||
elif not group['Enabled'] and ug:
|
||||
user.groups.remove(ug)
|
||||
|
||||
|
||||
@view_config(request_method='DELETE', route_name='user_id', renderer='json', xhr=True, permission='Users')
|
||||
def delete(request):
|
||||
id = request.matchdict.get('id', None)
|
||||
if id is None:
|
||||
@ -62,25 +75,27 @@ def delete(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='user_id', renderer='json', xhr=True, permission='ManageRoles')
|
||||
@view_config(request_method='GET', route_name='user', renderer='json', xhr=True, permission='ManageRoles')
|
||||
def show(request):
|
||||
list = request.GET.get('list', None)
|
||||
@view_config(request_method='GET', route_name='user_id', renderer='json', xhr=True, permission='Users')
|
||||
def show_id(request):
|
||||
return user_info(uuid.UUID(request.matchdict.get('id', None)))
|
||||
|
||||
if list:
|
||||
list = User.list()
|
||||
users = []
|
||||
for item in list:
|
||||
user = {'Name': item.name, 'LockedOut': item.locked_out,
|
||||
'Groups': [], 'Url': request.route_url('user_id', id=item.id)}
|
||||
for group in item.groups:
|
||||
user['Groups'].append(group.name)
|
||||
users.append(user)
|
||||
return users
|
||||
else:
|
||||
id = request.matchdict.get('id', None)
|
||||
id = None if id is None else uuid.UUID(id)
|
||||
return user_info(id)
|
||||
|
||||
@view_config(request_method='GET', route_name='user', renderer='json', xhr=True, permission='Users')
|
||||
def show_blank(request):
|
||||
return user_info(None)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='user', renderer='json', request_param='list', xhr=True, permission='Users')
|
||||
def show_list(request):
|
||||
list = User.list()
|
||||
users = []
|
||||
for item in list:
|
||||
user = {'Name': item.name, 'LockedOut': item.locked_out,
|
||||
'Groups': [], 'Url': request.route_url('user_id', id=item.id)}
|
||||
for group in item.groups:
|
||||
user['Groups'].append(group.name)
|
||||
users.append(user)
|
||||
return users
|
||||
|
||||
|
||||
def user_info(id):
|
||||
|
@ -8,17 +8,17 @@ from brewman.models.master import CostCenter
|
||||
from brewman.models.validation_exception import ValidationError
|
||||
|
||||
|
||||
@view_config(route_name='cost_center_list', renderer='brewman:templates/angular_base.mako')
|
||||
@view_config(route_name='cost_center_list', renderer='brewman:templates/angular_base.mako', permission='Cost Centers')
|
||||
@view_config(request_method='GET', route_name='cost_center_id', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False)
|
||||
xhr=False, permission='Cost Centers')
|
||||
@view_config(request_method='GET', route_name='cost_center', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False)
|
||||
xhr=False, permission='Cost Centers')
|
||||
def html(request):
|
||||
return {}
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='cost_center_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='POST', route_name='cost_center', renderer='json', xhr=True)
|
||||
@view_config(request_method='POST', route_name='cost_center_id', renderer='json', xhr=True, permission='Cost Centers')
|
||||
@view_config(request_method='POST', route_name='cost_center', renderer='json', xhr=True, permission='Cost Centers')
|
||||
def save_update(request):
|
||||
try:
|
||||
id = request.matchdict.get('id', None)
|
||||
@ -36,7 +36,7 @@ def save_update(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='DELETE', route_name='cost_center_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='DELETE', route_name='cost_center_id', renderer='json', xhr=True, permission='Cost Centers')
|
||||
def delete(request):
|
||||
id = request.matchdict.get('id', None)
|
||||
if id is None:
|
||||
@ -48,17 +48,17 @@ def delete(request):
|
||||
response.status_int = 500
|
||||
return response
|
||||
|
||||
@view_config(request_method='GET', route_name='cost_center_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='cost_center_id', renderer='json', xhr=True, permission='Cost Centers')
|
||||
def show_id(request):
|
||||
return cost_center_info(uuid.UUID(request.matchdict.get('id', None)))
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='cost_center', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='cost_center', renderer='json', xhr=True, permission='Cost Centers')
|
||||
def show_blank(request):
|
||||
return cost_center_info(None)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='cost_center', request_param='list', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='cost_center', request_param='list', renderer='json', xhr=True, permission='Cost Centers')
|
||||
def show_list(request):
|
||||
list = CostCenter.list()
|
||||
cost_centers = []
|
||||
|
@ -13,17 +13,17 @@ from brewman.models.master import CostCenter, Employee, AttendanceType
|
||||
from brewman.models.validation_exception import ValidationError
|
||||
from brewman.models.voucher import Attendance
|
||||
|
||||
@view_config(route_name='employee_list', renderer='brewman:templates/angular_base.mako')
|
||||
@view_config(route_name='employee_list', renderer='brewman:templates/angular_base.mako', permission='Employees')
|
||||
@view_config(request_method='GET', route_name='employee_id', renderer='brewman:templates/angular_base.mako', xhr=False,
|
||||
permission='EmployeesUpdate')
|
||||
permission='Employees')
|
||||
@view_config(request_method='GET', route_name='employee', renderer='brewman:templates/angular_base.mako', xhr=False,
|
||||
permission='EmployeesUpdate')
|
||||
permission='Employees')
|
||||
def html(request):
|
||||
return {}
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='employee_id', renderer='json', xhr=True, permission='EmployeesUpdate')
|
||||
@view_config(request_method='POST', route_name='employee', renderer='json', xhr=True, permission='EmployeesUpdate')
|
||||
@view_config(request_method='POST', route_name='employee_id', renderer='json', xhr=True, permission='Employees')
|
||||
@view_config(request_method='POST', route_name='employee', renderer='json', xhr=True, permission='Employees')
|
||||
def save_update(request):
|
||||
try:
|
||||
id = request.matchdict.get('id', None)
|
||||
@ -56,7 +56,7 @@ def save_update(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='DELETE', route_name='employee_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='DELETE', route_name='employee_id', renderer='json', xhr=True, permission='Employees')
|
||||
def delete(request):
|
||||
id = request.matchdict.get('id', None)
|
||||
if id is None:
|
||||
@ -69,17 +69,17 @@ def delete(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='employee_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='employee_id', renderer='json', xhr=True, permission='Employees')
|
||||
def show_id(request):
|
||||
return employee_info(uuid.UUID(request.matchdict.get('id', None)))
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='employee', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='employee', renderer='json', xhr=True, permission='Employees')
|
||||
def show_blank(request):
|
||||
return employee_info(None)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='employee', request_param='list', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='employee', request_param='list', renderer='json', xhr=True, permission='Employees')
|
||||
def show_list(request):
|
||||
list = Employee.list()
|
||||
ledgers = []
|
||||
|
@ -9,15 +9,15 @@ from brewman.models.validation_exception import ValidationError
|
||||
|
||||
@view_config(route_name='product_list', renderer='brewman:templates/angular_base.mako', permission='Products')
|
||||
@view_config(request_method='GET', route_name='product_id', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False, permission='ProductsUpdate')
|
||||
xhr=False, permission='Products')
|
||||
@view_config(request_method='GET', route_name='product', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False, permission='ProductsUpdate')
|
||||
xhr=False, permission='Products')
|
||||
def html(request):
|
||||
return {}
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='product_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='POST', route_name='product', renderer='json', xhr=True)
|
||||
@view_config(request_method='POST', route_name='product_id', renderer='json', xhr=True, permission='Products')
|
||||
@view_config(request_method='POST', route_name='product', renderer='json', xhr=True, permission='Products')
|
||||
def save_update(request):
|
||||
try:
|
||||
id = request.matchdict.get('id', None)
|
||||
@ -48,7 +48,7 @@ def save_update(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='DELETE', route_name='product_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='DELETE', route_name='product_id', renderer='json', xhr=True, permission='Products')
|
||||
def delete(request):
|
||||
id = request.matchdict.get('id', None)
|
||||
if id is None:
|
||||
@ -61,17 +61,17 @@ def delete(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='product_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='product_id', renderer='json', xhr=True, permission='Products')
|
||||
def show_id(request):
|
||||
return product_info(uuid.UUID(request.matchdict.get('id', None)))
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='product', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='product', renderer='json', xhr=True, permission='Products')
|
||||
def show_blank(request):
|
||||
return product_info(None)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='product', request_param='list', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='product', request_param='list', renderer='json', xhr=True, permission='Products')
|
||||
def show_list(request):
|
||||
list = Product.query().order_by(Product.discontinued).order_by(Product.product_group_id).order_by(
|
||||
Product.name).all()
|
||||
@ -83,14 +83,6 @@ def show_list(request):
|
||||
return products
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='product_group_list', renderer='json', xhr=True)
|
||||
def product_group_list(request):
|
||||
product_groups = []
|
||||
for item in ProductGroup.list():
|
||||
product_groups.append({'ProductGroupID': item.id, 'Name': item.name})
|
||||
return product_groups
|
||||
|
||||
|
||||
def product_info(id):
|
||||
if id is None:
|
||||
product = {'Code': '(Auto)', 'Type': LedgerType.by_name('Creditors').id, 'IsActive': True,
|
||||
|
@ -9,17 +9,17 @@ from brewman.models.master import CostCenter, ProductGroup
|
||||
from brewman.models.validation_exception import ValidationError
|
||||
|
||||
|
||||
@view_config(route_name='product_group_list', renderer='brewman:templates/angular_base.mako')
|
||||
@view_config(route_name='product_group_list', renderer='brewman:templates/angular_base.mako', permission='Product Groups')
|
||||
@view_config(request_method='GET', route_name='product_group_id', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False)
|
||||
xhr=False, permission='Product Groups')
|
||||
@view_config(request_method='GET', route_name='product_group', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False)
|
||||
xhr=False, permission='Product Groups')
|
||||
def html(request):
|
||||
return {}
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='product_group_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='POST', route_name='product_group', renderer='json', xhr=True)
|
||||
@view_config(request_method='POST', route_name='product_group_id', renderer='json', xhr=True, permission='Product Groups')
|
||||
@view_config(request_method='POST', route_name='product_group', renderer='json', xhr=True, permission='Product Groups')
|
||||
def save_update(request):
|
||||
try:
|
||||
id = request.matchdict.get('id', None)
|
||||
@ -38,7 +38,7 @@ def save_update(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='DELETE', route_name='product_group_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='DELETE', route_name='product_group_id', renderer='json', xhr=True, permission='Product Groups')
|
||||
def delete(request):
|
||||
id = request.matchdict.get('id', None)
|
||||
if id is None:
|
||||
@ -50,17 +50,17 @@ def delete(request):
|
||||
response.status_int = 500
|
||||
return response
|
||||
|
||||
@view_config(request_method='GET', route_name='product_group_id', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='product_group_id', renderer='json', xhr=True, permission='Product Groups')
|
||||
def show_id(request):
|
||||
return product_group_info(uuid.UUID(request.matchdict.get('id', None)))
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='product_group', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='product_group', renderer='json', xhr=True, permission='Product Groups')
|
||||
def show_blank(request):
|
||||
return product_group_info(None)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='product_group', request_param='list', renderer='json', xhr=True)
|
||||
@view_config(request_method='GET', route_name='product_group', request_param='list', renderer='json', xhr=True, permission='Product Groups')
|
||||
def show_list(request):
|
||||
list = ProductGroup.list()
|
||||
product_groups = []
|
||||
@ -73,8 +73,6 @@ def product_group_info(id):
|
||||
if id is None:
|
||||
return {}
|
||||
else:
|
||||
product_group = ProductGroup.by_id(id)
|
||||
product_group = ProductGroup.by_id(id)
|
||||
product_group = ProductGroup.by_id(id)
|
||||
return {'ProductGroupID': product_group.id, 'Name': product_group.name}
|
||||
|
||||
|
57
brewman/brewman/views/reports/purchase_entries.py
Normal file
57
brewman/brewman/views/reports/purchase_entries.py
Normal file
@ -0,0 +1,57 @@
|
||||
import datetime
|
||||
from sqlalchemy.sql.expression import func, desc
|
||||
|
||||
from pyramid.view import view_config
|
||||
|
||||
from brewman.models import DBSession
|
||||
from brewman.models.master import CostCenter, LedgerType, LedgerBase
|
||||
|
||||
from brewman.models.voucher import Voucher, Journal, VoucherType, Inventory
|
||||
from brewman.views.services.session import services_session_period_start, services_session_period_finish
|
||||
from brewman.views.transactions import get_edit_url
|
||||
|
||||
@view_config(request_method='GET', route_name='purchase_entries', renderer='brewman:templates/angular_base.mako',
|
||||
xhr=False)
|
||||
def get_html(request):
|
||||
return {}
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='purchase_entries', renderer='json', xhr=True)
|
||||
def report_blank(request):
|
||||
return {'StartDate': services_session_period_start(request),
|
||||
'FinishDate': services_session_period_finish(request), 'Body': [], 'Footer': {}}
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='purchase_entries', request_param='StartDate', renderer='json',
|
||||
xhr=True)
|
||||
def report_data(request):
|
||||
print('get report')
|
||||
start_date = request.GET.get('StartDate', None)
|
||||
finish_date = request.GET.get('FinishDate', None)
|
||||
return build_report(request, start_date, finish_date)
|
||||
|
||||
|
||||
def build_report(request, start_date, finish_date):
|
||||
report = {'StartDate': start_date, 'FinishDate': finish_date, 'Body': []}
|
||||
start_date = datetime.datetime.strptime(start_date, '%d-%b-%Y')
|
||||
finish_date = datetime.datetime.strptime(finish_date, '%d-%b-%Y')
|
||||
|
||||
query = DBSession.query(Voucher)\
|
||||
.filter(Voucher.date >= start_date)\
|
||||
.filter(Voucher.date <= finish_date)\
|
||||
.filter(Voucher.type == VoucherType.by_name('Purchase').id)\
|
||||
.order_by(Voucher.date).all()
|
||||
|
||||
for voucher in query:
|
||||
journal = [j for j in voucher.journals if j.debit == -1]
|
||||
journal = journal[0]
|
||||
row = {'Date': voucher.date.strftime('%d-%b-%Y'), 'Supplier': journal.ledger.name,
|
||||
'Url': get_edit_url(request, voucher), 'Products': []}
|
||||
for item in voucher.inventories:
|
||||
row['Products'].append(
|
||||
{'Product': item.product.full_name, 'Quantity': item.quantity, 'Rate': item.rate, 'Tax': item.tax,
|
||||
'Amount': item.amount})
|
||||
report['Body'].append(row)
|
||||
return report
|
||||
|
||||
|
@ -122,21 +122,6 @@ def get_old(request):
|
||||
return voucher_info(Voucher.by_id(uuid.UUID(id)))
|
||||
|
||||
|
||||
#@view_config(request_method='GET', route_name='voucher_new', renderer='json', xhr=True)
|
||||
#@view_config(request_method='GET', route_name='voucher', renderer='json', xhr=True)
|
||||
#def get_old(request):
|
||||
# id = request.matchdict.get('id', None)
|
||||
# voucher_type = request.GET.get('type', None)
|
||||
# if id:
|
||||
# return voucher_info(Voucher.by_id(uuid.UUID(id)))
|
||||
# elif voucher_type:
|
||||
# return blank_voucher(type=voucher_type, date=session_current_date(request))
|
||||
# else:
|
||||
# response = Response("Voucher ID and Type, both are Null")
|
||||
# response.status_int = 500
|
||||
# return response
|
||||
|
||||
|
||||
def voucher_info(voucher):
|
||||
json_voucher = {'VoucherID': voucher.id,
|
||||
'Date': voucher.date.strftime('%d-%b-%Y'),
|
||||
|
Loading…
x
Reference in New Issue
Block a user