Added styles and dirty check for attendance.

UserCtrl is minifiable.
User route now works with names.
This commit is contained in:
Tanshu 2012-11-29 15:47:16 +05:30
parent ecbbf65feb
commit cd408e3cde
8 changed files with 94 additions and 31 deletions

View File

@ -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;
}

View File

@ -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>

View File

@ -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>

View File

@ -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}}

View File

@ -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();

View File

@ -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;
}
};
}]
}

View File

@ -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>

View File

@ -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(