Employee list/add/edit done.
This commit is contained in:
parent
83a87c799d
commit
f627fb1303
|
@ -1,5 +1,5 @@
|
||||||
import uuid
|
import uuid
|
||||||
from sqlalchemy import UniqueConstraint, Column, Integer, Unicode, Numeric, Boolean, ForeignKey, func, DateTime
|
from sqlalchemy import UniqueConstraint, Column, Integer, Unicode, Numeric, Boolean, ForeignKey, func, DateTime, desc
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
from brewman.models import Base, DBSession
|
from brewman.models import Base, DBSession
|
||||||
from brewman.models.guidtype import GUID
|
from brewman.models.guidtype import GUID
|
||||||
|
@ -26,7 +26,6 @@ class Product(Base):
|
||||||
batches = relationship('Batch', backref='product')
|
batches = relationship('Batch', backref='product')
|
||||||
inventories = relationship('Inventory', backref='product')
|
inventories = relationship('Inventory', backref='product')
|
||||||
|
|
||||||
|
|
||||||
ledger = relationship('Ledger', primaryjoin="Ledger.id==Product.ledger_id")
|
ledger = relationship('Ledger', primaryjoin="Ledger.id==Product.ledger_id")
|
||||||
|
|
||||||
def __init__(self, code=None, name=None, units=None, fraction=None, fraction_units=None, yeild=None,
|
def __init__(self, code=None, name=None, units=None, fraction=None, fraction_units=None, yeild=None,
|
||||||
|
@ -247,14 +246,14 @@ class Employee(LedgerBase):
|
||||||
|
|
||||||
attendances = relationship('Attendance', backref='employe', cascade=None, cascade_backrefs=False)
|
attendances = relationship('Attendance', backref='employe', cascade=None, cascade_backrefs=False)
|
||||||
|
|
||||||
def __init__(self, code=None, name=None, type=None, parent_ledger_id=None, is_active=None, costcenter_id=None,
|
def __init__(self, code=None, name=None, is_active=None, costcenter_id=None, designation=None, salary=None,
|
||||||
designation=None, salary=None, service_points=None, joining_date=None, leaving_date=None):
|
service_points=None, joining_date=None, leaving_date=None):
|
||||||
self.designation = designation
|
self.designation = designation
|
||||||
self.salary = salary
|
self.salary = salary
|
||||||
self.service_points = service_points
|
self.service_points = service_points
|
||||||
self.joining_date = joining_date
|
self.joining_date = joining_date
|
||||||
self.leaving_date = leaving_date
|
self.leaving_date = leaving_date
|
||||||
super().__init__(code, name, type, parent_ledger_id, is_active, costcenter_id)
|
super().__init__(code, name, 10, is_active, costcenter_id)
|
||||||
|
|
||||||
def create(self):
|
def create(self):
|
||||||
code = DBSession.query(func.max(LedgerBase.code)).filter(LedgerBase.type == self.type).one()[0]
|
code = DBSession.query(func.max(LedgerBase.code)).filter(LedgerBase.type == self.type).one()[0]
|
||||||
|
@ -266,6 +265,11 @@ class Employee(LedgerBase):
|
||||||
DBSession.add(self)
|
DBSession.add(self)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def list(cls):
|
||||||
|
return DBSession.query(Employee).order_by(desc(Employee.is_active)).order_by(Ledger.costcenter_id).order_by(
|
||||||
|
Employee.designation).order_by(Employee.name).all()
|
||||||
|
|
||||||
|
|
||||||
class Ledger(LedgerBase):
|
class Ledger(LedgerBase):
|
||||||
__mapper_args__ = {'polymorphic_identity': ''}
|
__mapper_args__ = {'polymorphic_identity': ''}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<form method="post" class="form-horizontal" ng-controller="AccountCtrl">
|
<form method="post" class="form-horizontal" ng-controller="AccountCtrl">
|
||||||
<legend>Account Detail</legend>
|
<legend>Account Detail</legend>
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<label for="txtCode" class="control-label">Code</label>
|
<label for="txtCode" class="control-label">Code</label>
|
||||||
|
@ -49,4 +49,4 @@
|
||||||
<button ng-click="save()">Save</button>
|
<button ng-click="save()">Save</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
<form method="post" class="form-horizontal" ng-controller="EmployeeCtrl">
|
||||||
|
<legend>Employee Detail</legend>
|
||||||
|
<div class="control-group">
|
||||||
|
<label for="txtCode" class="control-label">Code</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" id="txtCode" class="non-search-box" disabled="disabled" ng-model="employee.Code"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label for="txtName" class="control-label">Name</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" id="txtName" ng-model="employee.Name"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label for="txtDesignation" class="control-label">Designation</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" id="txtDesignation" ng-model="employee.Designation"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label for="txtSalary" class="control-label">Salary</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" id="txtSalary" ng-model="employee.Salary"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label for="txtServicePoints" class="control-label">Service Points</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" id="txtServicePoints" ng-model="employee.ServicePoints"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="controls">
|
||||||
|
<label class="checkbox">
|
||||||
|
<input type="checkbox" ng-model="employee.IsActive"> Is Active
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="control-group">
|
||||||
|
<label for="ddlCostCenter" class="control-label">Cost Center</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<select id="ddlCostCenter" class="select-box" ng-model="employee.CostCenter.CostCenterID"
|
||||||
|
ng-options="l.CostCenterID as l.Name for l in cost_centers"> </select>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label for="txtJoiningDate" class="control-label">Joining Date</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<datepicker id="txtJoiningDate" model="employee" prop="JoiningDate" ng-model="employee.JoiningDate"></datepicker>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="control-group" ng-hide="employee.IsActive">
|
||||||
|
<label for="txtLeavingDate" class="control-label">Leaving Date</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<datepicker id="txtLeavingDate" model="employee" prop="LeavingDate" ng-model="employee.LeavingDate"></datepicker>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class=" control-group" id="add">
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<button ng-click="save()">Save</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
|
@ -0,0 +1,28 @@
|
||||||
|
<legend>Employees <a href="/Employee" class="btn btn-success pull-right">Add <i class="icon-plus icon-white"></i></a>
|
||||||
|
</legend>
|
||||||
|
<table id="gvGrid" class="clean-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Code</th>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Designation</th>
|
||||||
|
<th>Salary</th>
|
||||||
|
<th>Service Points</th>
|
||||||
|
<th>Department</th>
|
||||||
|
<th>Joining Date</th>
|
||||||
|
<th>Leaving Date</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="tbodyMain">
|
||||||
|
<tr ng-repeat="item in info">
|
||||||
|
<td>{{item.Code}}</td>
|
||||||
|
<td><a href="{{item.Url}}">{{item.Name}}</a></td>
|
||||||
|
<td>{{item.Designation}}</td>
|
||||||
|
<td>{{item.Salary}}</td>
|
||||||
|
<td>{{item.ServicePoints}}</td>
|
||||||
|
<td>{{item.CostCenter}}</td>
|
||||||
|
<td>{{item.JoiningDate}}</td>
|
||||||
|
<td>{{item.LeavingDate}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
|
@ -21,6 +21,14 @@ overlord_service.factory('Account', ['$resource', function ($resource) {
|
||||||
});
|
});
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
// TODO: Replace hardcoded url with route_url
|
||||||
|
overlord_service.factory('Employee', ['$resource', function ($resource) {
|
||||||
|
return $resource('/Employee/:id',
|
||||||
|
{id:'@LedgerID'}, {
|
||||||
|
query:{method:'GET', params:{list:true}, isArray:true}
|
||||||
|
});
|
||||||
|
}]);
|
||||||
|
|
||||||
// TODO: Replace hardcoded url with route_url
|
// TODO: Replace hardcoded url with route_url
|
||||||
overlord_service.factory('Ledger', ['$resource', function ($resource) {
|
overlord_service.factory('Ledger', ['$resource', function ($resource) {
|
||||||
return $resource('/Ledger/:id');
|
return $resource('/Ledger/:id');
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
function EmployeeListCtrl($scope, Employee) {
|
||||||
|
$scope.info = Employee.query();
|
||||||
|
}
|
||||||
|
|
||||||
|
function EmployeeCtrl($scope, $routeParams, $location, Employee, CostCenter) {
|
||||||
|
$scope.employee = Employee.get({id: $routeParams.id});
|
||||||
|
|
||||||
|
$scope.cost_centers = CostCenter.query();
|
||||||
|
|
||||||
|
$scope.save = function () {
|
||||||
|
$scope.employee.$save(function (u, putResponseHeaders) {
|
||||||
|
$scope.toasts.push({Type:'Success', Message:u.Code});
|
||||||
|
$location.path('/Employees')
|
||||||
|
}, function (data, status) {
|
||||||
|
$scope.toasts.push({Type:'Error', Message:data.data});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.delete = function () {
|
||||||
|
$scope.employee.$delete(function (u, putResponseHeaders) {
|
||||||
|
$scope.toasts.push({Type:'Success', Message:''});
|
||||||
|
$location.path('/Employees')
|
||||||
|
}, function (data, status) {
|
||||||
|
$scope.toasts.push({Type:'Error', Message:data.data});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
$('#txtName').focus();
|
||||||
|
|
||||||
|
}
|
|
@ -42,6 +42,10 @@ var overlord = angular.module('overlord', ['overlord.directive', 'overlord.filte
|
||||||
when('/Account', {templateUrl:'/partial/account-detail.html', controller:AccountCtrl}).
|
when('/Account', {templateUrl:'/partial/account-detail.html', controller:AccountCtrl}).
|
||||||
when('/Account/:id', {templateUrl:'/partial/account-detail.html', controller:AccountCtrl}).
|
when('/Account/:id', {templateUrl:'/partial/account-detail.html', controller:AccountCtrl}).
|
||||||
|
|
||||||
|
when('/Employees', {templateUrl:'/partial/employee-list.html', controller:EmployeeListCtrl}).
|
||||||
|
when('/Employee', {templateUrl:'/partial/employee-detail.html', controller:EmployeeCtrl}).
|
||||||
|
when('/Employee/:id', {templateUrl:'/partial/employee-detail.html', controller:EmployeeCtrl}).
|
||||||
|
|
||||||
when('/CostCenters', {templateUrl:'/partial/cost-center-list.html', controller:CostCenterListCtrl}).
|
when('/CostCenters', {templateUrl:'/partial/cost-center-list.html', controller:CostCenterListCtrl}).
|
||||||
when('/CostCenter', {templateUrl:'/partial/cost-center-detail.html', controller:CostCenterCtrl}).
|
when('/CostCenter', {templateUrl:'/partial/cost-center-detail.html', controller:CostCenterCtrl}).
|
||||||
when('/CostCenter/:id', {templateUrl:'/partial/cost-center-detail.html', controller:CostCenterCtrl}).
|
when('/CostCenter/:id', {templateUrl:'/partial/cost-center-detail.html', controller:CostCenterCtrl}).
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
${h.ScriptLink(request, 'unposted.js')}
|
${h.ScriptLink(request, 'unposted.js')}
|
||||||
|
|
||||||
${h.ScriptLink(request, 'account.js')}
|
${h.ScriptLink(request, 'account.js')}
|
||||||
|
${h.ScriptLink(request, 'employee.js')}
|
||||||
${h.ScriptLink(request, 'user.js')}
|
${h.ScriptLink(request, 'user.js')}
|
||||||
${h.ScriptLink(request, 'cost-center.js')}
|
${h.ScriptLink(request, 'cost-center.js')}
|
||||||
${h.ScriptLink(request, 'product.js')}
|
${h.ScriptLink(request, 'product.js')}
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
|
||||||
xmlns:tal="http://xml.zope.org/namespaces/tal"
|
|
||||||
xmlns:metal="http://xml.zope.org/namespaces/metal"
|
|
||||||
metal:use-macro="base">
|
|
||||||
<tal:block metal:fill-slot="content">
|
|
||||||
<article tal:attributes="class pagecontentclass">
|
|
||||||
<section>
|
|
||||||
<h2 class="ribbon-header">Cost Centers</h2>
|
|
||||||
<table id="gvGrid" class="clean-table">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="LedgerID hide">LedgerID</th>
|
|
||||||
<th class="Code hide">Code</th>
|
|
||||||
<th class="Name">Name</th>
|
|
||||||
<th class="Designation">Designation</th>
|
|
||||||
<th class="IsActive">Is Active?</th>
|
|
||||||
<th class="CostCenterID hide">CostCenterID</th>
|
|
||||||
<th class="CostCenter">Cost Center</th>
|
|
||||||
<th class="JoiningDate">Joining Date</th>
|
|
||||||
<th class="LeavingDate">Leaving Date</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="tbodyMain">
|
|
||||||
<tr tal:repeat="item list">
|
|
||||||
<td class="LedgerID hide">${item.id}</td>
|
|
||||||
<td class="Code hide">${item.code}</td>
|
|
||||||
<td class="Name"><a href="${request.route_url('employee_id', id=item.id)}">${item.name}</a></td>
|
|
||||||
<td class="Designation">${item.designation}</td>
|
|
||||||
<td class="IsActive">${item.is_active}</td>
|
|
||||||
<td class="CostCenterID hide">${item.costcenter_id}</td>
|
|
||||||
<td class="CostCenter">${item.costcenter.name}</td>
|
|
||||||
<td class="JoiningDate">${'' if item.joining_date is None else item.joining_date.strftime('%d-%b-%Y')}</td>
|
|
||||||
<td class="LeavingDate">${'' if item.leaving_date is None else item.leaving_date.strftime('%d-%b-%Y')}</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
<tfoot id="tfootMain">
|
|
||||||
</tfoot>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
</article>
|
|
||||||
<!-- /Page content -->
|
|
||||||
</tal:block>
|
|
||||||
</html>
|
|
|
@ -1,8 +1,7 @@
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Employees <b class="caret"></b></a>
|
<li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Employees <b class="caret"></b></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="${request.route_url('employee_list')}">List</a></li>
|
<li><a href="${request.route_url('employee_list')}">Employees</a></li>
|
||||||
<li><a href="${request.route_url('employee')}">Add</a></li>
|
|
||||||
<li><a href="${request.route_url('attendance')}">Attendance</a></li>
|
<li><a href="${request.route_url('attendance')}">Attendance</a></li>
|
||||||
<li><a href="${request.route_url('employee_attendance')}">Employee Attendance</a></li>
|
<li><a href="${request.route_url('employee_attendance')}">Employee Attendance</a></li>
|
||||||
<li><a href="/AccountsTesting/Employees/AttendanceRecord.aspx">Attendance Record</a></li>
|
<li><a href="/AccountsTesting/Employees/AttendanceRecord.aspx">Attendance Record</a></li>
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
import transaction
|
|
||||||
|
|
||||||
from brewman.models import DBSession
|
|
||||||
|
|
||||||
from pyramid.view import view_config
|
|
||||||
from pyramid.response import Response
|
|
||||||
|
|
||||||
from brewman.views.top_parts import slidernivo, breadcrumb, slider3d, slideraccordion, slidercarousel, sliderstatic, randomslider
|
|
||||||
from brewman.views.widgets import footer, widget_gallery, tweets, contact_widget, archive, categories, recent_posts, comments, blog_roll, events
|
|
||||||
|
|
||||||
@view_config(route_name='blog', renderer='brewman:templates/blog.pt')
|
|
||||||
def blog(request):
|
|
||||||
return {'title':'Hops n Grains - Blog',
|
|
||||||
'pageclass': "page-blog page-sidebar-right",
|
|
||||||
'pagecontentclass': "page-content grid_8",
|
|
||||||
'top_block': breadcrumb(request, "Blog", "A lot of interesting articles."),
|
|
||||||
'widget1': tweets(request),
|
|
||||||
'wid1': "grid_4",
|
|
||||||
'widget2': categories(request),
|
|
||||||
'wid2': "grid_4",
|
|
||||||
'widget3': contact_widget(request),
|
|
||||||
'wid3': "grid_4",
|
|
||||||
'widget_comments': events(request),
|
|
||||||
'widget_categories': categories(request),
|
|
||||||
'widget_gallery': widget_gallery(request),
|
|
||||||
'widget_archive': archive(request),
|
|
||||||
'widget_blog_roll': blog_roll(request),
|
|
||||||
'footer': footer(request)}
|
|
||||||
|
|
||||||
@view_config(route_name='blog_post', renderer='brewman:templates/blog_post.pt')
|
|
||||||
def blog_post(request):
|
|
||||||
id = int(request.matchdict['id'])
|
|
||||||
dbsession = DBSession()
|
|
||||||
article = dbsession.query(Article).filter(Article.id==id).one()
|
|
||||||
return {'title':'Hops n Grains - Blog',
|
|
||||||
'pageclass': "page-blogpost page-sidebar-right",
|
|
||||||
'pagecontentclass': "page-content grid_8",
|
|
||||||
'article': article,
|
|
||||||
'top_block': breadcrumb(request, "Blog post", "This page shows you a blog post example."),
|
|
||||||
'widget1': tweets(request),
|
|
||||||
'wid1': "grid_4",
|
|
||||||
'widget2': categories(request),
|
|
||||||
'wid2': "grid_4",
|
|
||||||
'widget3': contact_widget(request),
|
|
||||||
'wid3': "grid_4",
|
|
||||||
'footer': footer(request)}
|
|
||||||
|
|
||||||
@view_config(route_name='blog_add', renderer='brewman:templates/blog_add.pt')
|
|
||||||
def blog_add(request):
|
|
||||||
return {'title':'Hops n Grains - Blog',
|
|
||||||
'pageclass': "page-blogpost page-sidebar-right",
|
|
||||||
'pagecontentclass': "page-content grid_8",
|
|
||||||
'top_block': breadcrumb(request, "Blog post", "This page shows you a blog post example."),
|
|
||||||
'widget1': tweets(request),
|
|
||||||
'wid1': "grid_4",
|
|
||||||
'widget2': categories(request),
|
|
||||||
'wid2': "grid_4",
|
|
||||||
'widget3': contact_widget(request),
|
|
||||||
'wid3': "grid_4",
|
|
||||||
'footer': footer(request)}
|
|
|
@ -1,7 +1,6 @@
|
||||||
import datetime
|
import datetime
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from pyramid.httpexceptions import HTTPFound
|
|
||||||
from pyramid.renderers import render
|
from pyramid.renderers import render
|
||||||
from pyramid.security import authenticated_userid
|
from pyramid.security import authenticated_userid
|
||||||
from pyramid.view import view_config
|
from pyramid.view import view_config
|
||||||
|
@ -10,80 +9,101 @@ import transaction
|
||||||
from brewman.helpers import Literal
|
from brewman.helpers import Literal
|
||||||
|
|
||||||
from brewman.models import DBSession
|
from brewman.models import DBSession
|
||||||
from brewman.models.master import CostCenter, Employee, AttendanceType, LedgerType
|
from brewman.models.master import CostCenter, Employee, AttendanceType
|
||||||
from brewman.models.validation_exception import ValidationError
|
from brewman.models.validation_exception import ValidationError
|
||||||
from brewman.models.voucher import Attendance
|
from brewman.models.voucher import Attendance
|
||||||
|
|
||||||
@view_config(request_method='GET', route_name='employee_id', renderer='brewman:templates/employee/edit.pt',
|
@view_config(route_name='employee_list', renderer='brewman:templates/angular_base.mako')
|
||||||
|
@view_config(request_method='GET', route_name='employee_id', renderer='brewman:templates/angular_base.mako', xhr=False,
|
||||||
permission='EmployeesUpdate')
|
permission='EmployeesUpdate')
|
||||||
@view_config(request_method='GET', route_name='employee', renderer='brewman:templates/employee/edit.pt',
|
@view_config(request_method='GET', route_name='employee', renderer='brewman:templates/angular_base.mako', xhr=False,
|
||||||
permission='EmployeesCreate')
|
permission='EmployeesUpdate')
|
||||||
def employee_edit(request):
|
def html(request):
|
||||||
id = request.matchdict.get('id', None)
|
return {}
|
||||||
if id is None:
|
|
||||||
item = Employee('(Auto)', '')
|
|
||||||
else:
|
|
||||||
item = Employee.by_id(uuid.UUID(id))
|
|
||||||
print(item.code)
|
|
||||||
return {'title': 'Edit / Add Employee',
|
|
||||||
'pageclass': "page-blogpost page-sidebar-right",
|
|
||||||
'pagecontentclass': "page-content grid_12",
|
|
||||||
'page_header': '',
|
|
||||||
'item': item,
|
|
||||||
'types': LedgerType.list(),
|
|
||||||
'cost_centers': CostCenter.list()}
|
|
||||||
|
|
||||||
|
|
||||||
@view_config(request_method='POST', route_name='employee_id', permission='EmployeesUpdate')
|
@view_config(request_method='POST', route_name='employee_id', renderer='json', xhr=True, permission='EmployeesUpdate')
|
||||||
@view_config(request_method='POST', route_name='employee', permission='EmployeesCreate')
|
@view_config(request_method='POST', route_name='employee', renderer='json', xhr=True, permission='EmployeesUpdate')
|
||||||
def employee_submit(request):
|
def save_update(request):
|
||||||
try:
|
try:
|
||||||
id = request.matchdict.get('id', None)
|
id = request.matchdict.get('id', None)
|
||||||
if id is None:
|
if id is None:
|
||||||
is_active = True if request.POST.has_key('is_active') else False
|
is_active = request.json_body['IsActive']
|
||||||
joining_date = datetime.datetime.strptime(request.POST['joining_date'], '%d-%b-%Y')
|
joining_date = datetime.datetime.strptime(request.json_body['JoiningDate'], '%d-%b-%Y')
|
||||||
leaving_date = None if is_active else datetime.datetime.strptime(request.POST['leaving_date'], '%d-%b-%Y')
|
leaving_date = None if is_active else datetime.datetime.strptime(request.json_body['LeavingDate'],
|
||||||
Employee(0, request.POST['name'], 10, None, is_active, uuid.UUID(request.POST['cost_center_id']),
|
'%d-%b-%Y')
|
||||||
request.POST['designation'], int(request.POST['salary']), int(request.POST['service_points']),
|
|
||||||
|
item = Employee(0, request.json_body['Name'], is_active, uuid.UUID(request.json_body['CostCenter']['CostCenterID']),
|
||||||
|
request.json_body['Designation'], int(request.json_body['Salary']), int(request.json_body['ServicePoints']),
|
||||||
joining_date, leaving_date).create()
|
joining_date, leaving_date).create()
|
||||||
request.session.flash('Employee created')
|
|
||||||
else:
|
else:
|
||||||
item = Employee.by_id(uuid.UUID(id))
|
item = Employee.by_id(uuid.UUID(id))
|
||||||
item.name = request.POST['name']
|
item.name = request.json_body['Name']
|
||||||
item.is_active = True if request.POST.has_key('is_active') else False
|
item.is_active = request.json_body['IsActive']
|
||||||
item.costcenter_id = uuid.UUID(request.POST['cost_center_id'])
|
item.costcenter_id = uuid.UUID(request.json_body['CostCenter']['CostCenterID'])
|
||||||
item.designation = request.POST['designation']
|
item.designation = request.json_body['Designation']
|
||||||
item.salary = int(request.POST['salary'])
|
item.salary = int(request.json_body['Salary'])
|
||||||
item.service_points = int(request.POST['service_points'])
|
item.service_points = int(request.json_body['ServicePoints'])
|
||||||
item.joining_date = datetime.datetime.strptime(request.POST['joining_date'], '%d-%b-%Y')
|
item.joining_date = datetime.datetime.strptime(request.json_body['JoiningDate'], '%d-%b-%Y')
|
||||||
item.leaving_date = None if item.is_active else datetime.datetime.strptime(request.POST['leaving_date'],
|
item.leaving_date = None if item.is_active else datetime.datetime.strptime(request.json_body['LeavingDate'],
|
||||||
'%d-%b-%Y')
|
'%d-%b-%Y')
|
||||||
request.session.flash('Employee Updated')
|
|
||||||
transaction.commit()
|
transaction.commit()
|
||||||
url = request.route_url('employee_list')
|
return employee_info(item.id)
|
||||||
return HTTPFound(location=url)
|
|
||||||
except ValidationError as ex:
|
except ValidationError as ex:
|
||||||
request.session.flash(ex)
|
|
||||||
transaction.abort()
|
transaction.abort()
|
||||||
request.session.flash(ex.message)
|
response = Response("Failed validation: {0}".format(ex.message))
|
||||||
return request
|
response.status_int = 500
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
@view_config(route_name='employee_list', renderer='brewman:templates/employee/list.pt', permission='Employees')
|
@view_config(request_method='DELETE', route_name='employee_id', renderer='json', xhr=True)
|
||||||
def employee_list(request):
|
def delete(request):
|
||||||
dbsession = DBSession()
|
id = request.matchdict.get('id', None)
|
||||||
list = dbsession.query(Employee)\
|
if id is None:
|
||||||
.order_by(Employee.leaving_date)\
|
response = Response("Employee is Null")
|
||||||
.order_by(Employee.costcenter_id)\
|
response.status_int = 500
|
||||||
.order_by(Employee.designation)\
|
return response
|
||||||
.order_by(Employee.name)\
|
else:
|
||||||
.all()
|
response = Response("Employee deletion not implemented")
|
||||||
|
response.status_int = 500
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
@view_config(request_method='GET', route_name='employee_id', renderer='json', xhr=True)
|
||||||
|
@view_config(request_method='GET', route_name='employee', renderer='json', xhr=True)
|
||||||
|
def show(request):
|
||||||
|
list = request.GET.get('list', None)
|
||||||
|
|
||||||
|
if list:
|
||||||
|
list = Employee.list()
|
||||||
|
ledgers = []
|
||||||
|
for item in list:
|
||||||
|
ledgers.append(
|
||||||
|
{'Code': item.code, 'Name': item.name, 'Designation': item.designation, 'Salary': item.salary,
|
||||||
|
'ServicePoints': item.service_points, 'IsActive': item.is_active,
|
||||||
|
'CostCenter': item.costcenter.name, 'Url': request.route_url('employee_id', id=item.id),
|
||||||
|
'JoiningDate': item.joining_date.strftime('%d-%b-%Y'),
|
||||||
|
'LeavingDate': '' if item.is_active else item.leaving_date.strftime('%d-%b-%Y')})
|
||||||
|
return ledgers
|
||||||
|
else:
|
||||||
|
id = request.matchdict.get('id', None)
|
||||||
|
id = None if id is None else uuid.UUID(id)
|
||||||
|
return employee_info(id)
|
||||||
|
|
||||||
|
|
||||||
|
def employee_info(id):
|
||||||
|
if id is None:
|
||||||
|
employee = {'Code': '(Auto)', 'IsActive': True, 'CostCenter': CostCenter.overall()}
|
||||||
|
else:
|
||||||
|
employee = Employee.by_id(id)
|
||||||
|
employee = {'LedgerID': employee.id, 'Code': employee.code, 'Name': employee.name,
|
||||||
|
'IsActive': employee.is_active, 'Designation': employee.designation, 'Salary': employee.salary,
|
||||||
|
'ServicePoints': employee.service_points, 'JoiningDate': employee.joining_date.strftime('%d-%b-%Y'),
|
||||||
|
'LeavingDate': None if employee.is_active else employee.leaving_date.strftime('%d-%b-%Y'),
|
||||||
|
'CostCenter': {'CostCenterID': employee.costcenter_id, 'Name': employee.costcenter.name}}
|
||||||
|
return employee
|
||||||
|
|
||||||
|
|
||||||
return {'title': 'Employees',
|
|
||||||
'pageclass': "page-blogpost page-sidebar-right",
|
|
||||||
'pagecontentclass': "page-content grid_12",
|
|
||||||
'page_header': '',
|
|
||||||
'list': list}
|
|
||||||
|
|
||||||
|
|
||||||
@view_config(request_method='GET', route_name='attendance_date', renderer='brewman:templates/employee/attendance.pt',
|
@view_config(request_method='GET', route_name='attendance_date', renderer='brewman:templates/employee/attendance.pt',
|
||||||
|
|
Loading…
Reference in New Issue