Added styles and dirty check for attendance.
UserCtrl is minifiable. User route now works with names.
This commit is contained in:
parent
ecbbf65feb
commit
cd408e3cde
@ -10,3 +10,47 @@
|
||||
background-color: #1F7A1F;
|
||||
}
|
||||
|
||||
.table tbody tr.success td {
|
||||
background-color: #1F7A1F;
|
||||
}
|
||||
|
||||
|
||||
.table tbody tr.Present td {
|
||||
background-color: #228B22;
|
||||
}
|
||||
.table tbody tr.Off td {
|
||||
background-color: #87CEFA;
|
||||
}
|
||||
.table tbody tr.Leave td {
|
||||
background-color: #CD5C5C;
|
||||
}
|
||||
.table tbody tr.Absent td {
|
||||
background-color: #CD0000;
|
||||
}
|
||||
.table tbody tr.HalfDay td {
|
||||
background-color: #98FB98;
|
||||
}
|
||||
.table tbody tr.Double td {
|
||||
background-color: #006400;
|
||||
}
|
||||
.table tbody tr.PaidLeaveAvailed td {
|
||||
background-color: #EEEE00;
|
||||
}
|
||||
.table tbody tr.CasualLeaveAvailed td {
|
||||
background-color: #800080;
|
||||
}
|
||||
.table tbody tr.Overtime td {
|
||||
background-color: #006400;
|
||||
}
|
||||
.table tbody tr.OffWorked td {
|
||||
background-color: #F5DEB3;
|
||||
}
|
||||
.table tbody tr.COff td {
|
||||
background-color: #F5DEB3;
|
||||
}
|
||||
.table tbody tr.HalfPL td {
|
||||
background-color: #FFF68F;
|
||||
}
|
||||
.table tbody tr.HalfCL td {
|
||||
background-color: #FF00FF;
|
||||
}
|
@ -23,9 +23,11 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="item in info.Body">
|
||||
<tr ng-repeat="item in info.Body"
|
||||
ng-class="{0:'', 1:'Present', 2:'Off', 3:'Leave', 4:'Absent', 5:'HalfDay', 6:'Double', 7:'PaidLeaveAvailed', 8:'CasualLeaveAvailed', 9:'Overtime', 10:'OffWorked', 11:'COff', 12:'HalfPL', 13:'HalfCL'}[item.AttendanceTypeID]"
|
||||
ng-controller="AttendanceSubCtrl">
|
||||
<td class="right">{{item.Code}}</td>
|
||||
<td>{{item.Name}}</td>
|
||||
<td><i class="icon-leaf" ng-show="isDirty()"></i> {{item.Name}}</td>
|
||||
<td>{{item.Designation}}</td>
|
||||
<td>{{item.Department}}</td>
|
||||
<td>
|
||||
|
@ -31,7 +31,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="item in info.Body"
|
||||
ng-class="{0:'', 1:'', 2:'info', 3:'error', 4:'error', 5:'', 6:'', 7:'warning', 8:'success'}[item.AttendanceTypeID]"
|
||||
ng-class="{0:'', 1:'Present', 2:'Off', 3:'Leave', 4:'Absent', 5:'HalfDay', 6:'Double', 7:'PaidLeaveAvailed', 8:'CasualLeaveAvailed', 9:'Overtime', 10:'OffWorked', 11:'COff', 12:'HalfPL', 13:'HalfCL'}[item.AttendanceTypeID]"
|
||||
ng-controller="EmployeeAttendanceSubCtrl">
|
||||
<td>{{item.Date}}</td>
|
||||
<td>
|
||||
@ -40,7 +40,7 @@
|
||||
|
||||
</td>
|
||||
<td>
|
||||
<button ng-hide="!isDirty()" class="btn btn-primary">Is Dirty</button>
|
||||
<button ng-show="isDirty()" class="btn btn-primary">Is Dirty</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -70,8 +70,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-actions">
|
||||
<button class="btn btn-primary" ng-click="save()"
|
||||
ng-disabled="preventAlteration(voucher)">{{voucher.VoucherID | save_button}}
|
||||
<button class="btn btn-primary" ng-click="save()" ng-disabled="preventAlteration(voucher)">{{voucher.VoucherID | save_button}}
|
||||
</button>
|
||||
<button class="btn btn-inverse" ng-click="post()" ng-hide="!voucher.VoucherID"
|
||||
ng-disabled="voucher.Posted || !perms['Post Vouchers']">{{voucher.Posted | posted}}
|
||||
|
@ -14,7 +14,17 @@ var AttendanceCtrl = ['$scope', '$location', 'Attendance', 'attendance_types', '
|
||||
});
|
||||
};
|
||||
$('#txtDate').focus();
|
||||
}];
|
||||
}]
|
||||
|
||||
var AttendanceSubCtrl = ['$scope', function ($scope) {
|
||||
$scope.original = {};
|
||||
angular.copy($scope.item, $scope.original);
|
||||
|
||||
$scope.isDirty = function(){
|
||||
return !angular.equals($scope.original, $scope.item)
|
||||
}
|
||||
}]
|
||||
|
||||
AttendanceCtrl.resolve = {
|
||||
info:['$q', '$route', 'Attendance', function ($q, $route, Attendance) {
|
||||
var deferred = $q.defer();
|
||||
|
@ -1,11 +1,11 @@
|
||||
'use strict';
|
||||
|
||||
function UserListCtrl($scope, users) {
|
||||
var UserListCtrl = ['$scope', 'users', function ($scope, users) {
|
||||
$scope.info = users;
|
||||
}
|
||||
}]
|
||||
|
||||
UserListCtrl.resolve = {
|
||||
users:function ($q, User) {
|
||||
users:['$q', 'User', function ($q, User) {
|
||||
var deferred = $q.defer();
|
||||
|
||||
var successCb = function (result) {
|
||||
@ -14,10 +14,10 @@ UserListCtrl.resolve = {
|
||||
|
||||
User.query({}, successCb);
|
||||
return deferred.promise;
|
||||
}
|
||||
}]
|
||||
};
|
||||
|
||||
function UserCtrl($scope, $location, user) {
|
||||
var UserCtrl = ['$scope', '$location', 'user', function ($scope, $location, user) {
|
||||
$scope.user = user;
|
||||
|
||||
$scope.save = function () {
|
||||
@ -39,10 +39,10 @@ function UserCtrl($scope, $location, user) {
|
||||
};
|
||||
$('#txtName').focus();
|
||||
|
||||
}
|
||||
}]
|
||||
|
||||
UserCtrl.resolve = {
|
||||
user:function ($q, $route, User) {
|
||||
user:['$q', '$route', 'User', function ($q, $route, User) {
|
||||
var deferred = $q.defer();
|
||||
|
||||
var id = $route.current.params.id;
|
||||
@ -52,5 +52,5 @@ UserCtrl.resolve = {
|
||||
|
||||
User.get({id:id}, successCb);
|
||||
return deferred.promise;
|
||||
}
|
||||
};
|
||||
}]
|
||||
}
|
||||
|
@ -157,23 +157,19 @@
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="nav pull-right">
|
||||
<li class="dropdown" ng-hide="!auth.isAuthenticated"><a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="icon-user"></i> {{auth.Name}} <b class="caret"></b></a>
|
||||
<li class="dropdown" ng-show="auth.isAuthenticated"><a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="icon-user"></i> {{auth.Name}} <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="/logout">Logout {{user.name}}</a></li>
|
||||
<li><a href="/AccountsTesting/Security/ChangePassword.aspx">Change Password</a></li>
|
||||
<li><a href="/logout">Logout {{auth.Name}}</a></li>
|
||||
<li><a href="/User/{{auth.Name}}">Change Password</a></li>
|
||||
<li><a href="/Users">Users</a></li>
|
||||
<li><a href="/Groups">Groups</a></li>
|
||||
<li><a href="/Clients">Clients</a></li>
|
||||
<li><a href="/AccountsTesting/Maintenance/Split.aspx">Split Data</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown" ng-hide="auth.isAuthenticated"><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="/login">Log in</a></li>
|
||||
<li><a href="/Users">Users</a></li>
|
||||
<li><a href="/Groups">Groups</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<ul class="nav" ng-hide="auth.isAuthenticated">
|
||||
<li><a href="/login"><i class="icon-user"></i> Log in</a></li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
@ -1,3 +1,4 @@
|
||||
import re
|
||||
import uuid
|
||||
from pyramid.response import Response
|
||||
|
||||
@ -35,8 +36,12 @@ def save(request):
|
||||
@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.by_id(uuid.UUID(id))
|
||||
id = request.matchdict['id']
|
||||
p = re.compile('^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$')
|
||||
if p.match(id):
|
||||
user = User.by_id(uuid.UUID(id))
|
||||
else:
|
||||
user = User.by_name(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:
|
||||
@ -77,7 +82,11 @@ def delete(request):
|
||||
|
||||
@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)))
|
||||
id = request.matchdict['id']
|
||||
p = re.compile('^[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}$')
|
||||
if p.match(id):
|
||||
id = uuid.UUID(id)
|
||||
return user_info(id)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='user', renderer='json', xhr=True, permission='Users')
|
||||
@ -91,7 +100,7 @@ def show_list(request):
|
||||
users = []
|
||||
for item in list:
|
||||
user = {'Name': item.name, 'LockedOut': item.locked_out,
|
||||
'Groups': [], 'Url': request.route_url('user_id', id=item.id)}
|
||||
'Groups': [], 'Url': request.route_url('user_id', id=item.name)}
|
||||
for group in item.groups:
|
||||
user['Groups'].append(group.name)
|
||||
users.append(user)
|
||||
@ -104,7 +113,10 @@ def user_info(id):
|
||||
for item in Group.list():
|
||||
account['Groups'].append({'GroupID': item.id, 'Name': item.name, 'Enabled': False})
|
||||
else:
|
||||
user = User.by_id(id)
|
||||
if isinstance(id, uuid.UUID):
|
||||
user = User.by_id(id)
|
||||
else:
|
||||
user = User.by_name(id)
|
||||
account = {'UserID': user.id, 'Name': user.name, 'Password': '', 'LockedOut': user.locked_out, 'Groups': []}
|
||||
for item in Group.list():
|
||||
account['Groups'].append(
|
||||
|
Loading…
x
Reference in New Issue
Block a user