Added fingerprint import.
Fingerprint shows in attendance forms. Upated the fingerprint table. MUST EXECUTE SQL.
This commit is contained in:
parent
1cb0347c86
commit
8331b18cce
@ -108,6 +108,7 @@ def main(global_config, **settings):
|
||||
config.add_route('attendance_report', '/AttendanceReport')
|
||||
config.add_route('credit_salary', '/CreditSalary')
|
||||
config.add_route('employee_functions', '/EmployeeFunctions')
|
||||
config.add_route('fingerprint', '/Fingerprint')
|
||||
|
||||
config.add_route('ledger_id', '/Ledger/{id}')
|
||||
config.add_route('ledger', '/Ledger')
|
||||
|
@ -247,7 +247,8 @@ class Employee(LedgerBase):
|
||||
joining_date = Column('JoiningDate', DateTime)
|
||||
leaving_date = Column('LeavingDate', DateTime)
|
||||
|
||||
attendances = relationship('Attendance', backref='employe', cascade=None, cascade_backrefs=False)
|
||||
attendances = relationship('Attendance', backref='employee', cascade=None, cascade_backrefs=False)
|
||||
fingerprints = relationship('Fingerprint', backref='employee', cascade=None, cascade_backrefs=False)
|
||||
|
||||
def __init__(self, code=None, name=None, is_active=None, costcenter_id=None, designation=None, salary=None,
|
||||
service_points=None, joining_date=None, leaving_date=None):
|
||||
@ -274,6 +275,10 @@ class Employee(LedgerBase):
|
||||
return DBSession.query(Employee).order_by(desc(Employee.is_active)).order_by(Ledger.costcenter_id).order_by(
|
||||
Employee.designation).order_by(Employee.name).all()
|
||||
|
||||
@classmethod
|
||||
def by_code(cls, code):
|
||||
return DBSession.query(cls).filter(cls.code == code).first()
|
||||
|
||||
|
||||
class Ledger(LedgerBase):
|
||||
__mapper_args__ = {'polymorphic_identity': ''}
|
||||
|
@ -288,32 +288,24 @@ class Attendance(Base):
|
||||
return DBSession.query(cls)
|
||||
|
||||
def create(self):
|
||||
old = DBSession.query(func.count(Attendance.id)).filter(Attendance.date == self.date)\
|
||||
.filter(Attendance.employee_id == self.employee_id)\
|
||||
.filter(Attendance.attendance_type == self.attendance_type)\
|
||||
.filter(Attendance.is_valid == True).first()
|
||||
if old == 0:
|
||||
return
|
||||
old = DBSession.query(Attendance).filter(Attendance.date == self.date)\
|
||||
.filter(Attendance.employee_id == self.employee_id)\
|
||||
.filter(Attendance.is_valid == True).first()
|
||||
if not old is None:
|
||||
old.is_valid = False
|
||||
DBSession.add(self)
|
||||
if old is None or old.attendance_type != self.attendance_type:
|
||||
if old is not None:
|
||||
old.is_valid = False
|
||||
DBSession.add(self)
|
||||
|
||||
|
||||
class Fingerprint(Base):
|
||||
__tablename__ = 'entities_fingerprints'
|
||||
|
||||
id = Column('FingerprintID', GUID(), primary_key=True, default=uuid.uuid4)
|
||||
employee_id = Column('EmployeeID', GUID(), ForeignKey('entities_employees.LedgerID'))
|
||||
employee_code = Column('EmployeeCode', Integer)
|
||||
employee_code = Column('EmployeeCode', Integer, ForeignKey('entities_ledgers.Code'))
|
||||
date = Column('Date', DateTime)
|
||||
fingerprint_type = Column('FingerprintType', Integer)
|
||||
|
||||
def __init__(self, id=None, employee_id=None, employee_code=None, date=None):
|
||||
def __init__(self, id=None, employee_code=None, date=None):
|
||||
self.id = id
|
||||
self.employee_id = employee_id
|
||||
self.employee_code = employee_code
|
||||
self.date = date
|
||||
self.fingerprint_type = 0
|
||||
@ -327,8 +319,11 @@ class Fingerprint(Base):
|
||||
return DBSession.query(cls)
|
||||
|
||||
def create(self):
|
||||
old = DBSession.query(func.count(Fingerprint.id)).filter(Fingerprint.date == self.date)\
|
||||
.filter(Fingerprint.employee_id == self.employee_id).first()
|
||||
if old == 0:
|
||||
return
|
||||
DBSession.add(self)
|
||||
old = DBSession.query(Fingerprint).filter(Fingerprint.date == self.date)\
|
||||
.filter(Fingerprint.employee_code == self.employee_code).first()
|
||||
if old is None:
|
||||
DBSession.add(self)
|
||||
return self
|
||||
else:
|
||||
return old
|
||||
|
||||
|
@ -20,6 +20,7 @@
|
||||
<th>Designation</th>
|
||||
<th>Department</th>
|
||||
<th>Status</th>
|
||||
<th>Prints</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -35,6 +36,7 @@
|
||||
ng-options="i.AttendanceTypeID as i.Name for i in attendance_types"> </select>
|
||||
|
||||
</td>
|
||||
<td>{{item.Prints}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -26,6 +26,7 @@
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Status</th>
|
||||
<th>Prints</th>
|
||||
<th>isDirty</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -39,6 +40,7 @@
|
||||
ng-options="i.AttendanceTypeID as i.Name for i in attendance_types"> </select>
|
||||
|
||||
</td>
|
||||
<td>{{item.Prints}}</td>
|
||||
<td>
|
||||
<button ng-show="isDirty()" class="btn btn-primary">Is Dirty</button>
|
||||
</td>
|
||||
|
@ -23,7 +23,7 @@
|
||||
<label for="uploadFingerprints" class="control-label"></label>
|
||||
|
||||
<div class="controls">
|
||||
<input type="file" id="uploadFingerprints" />
|
||||
<input type="file" id="uploadFingerprints" ng-model="upFile" onchange="angular.element(this).scope().setFile(this)" />
|
||||
<button class="btn" ng-click="uploadFingerprints()">Upload</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -15,9 +15,28 @@ var EmployeeFunctionsCtrl = ['$scope', '$http', function ($scope, $http) {
|
||||
$scope.attendanceRecordUrl = function () {
|
||||
var url = '/AttendanceReport?StartDate=' + $scope.record.Start + "&FinishDate=" + $scope.record.Finish;
|
||||
return url;
|
||||
};
|
||||
}
|
||||
$scope.setFile = function (element) {
|
||||
$scope.uploadedFile = element.files[0];
|
||||
}
|
||||
$scope.uploadFingerprints = function () {
|
||||
$scope.toasts.push({Type:'Error', Message:'Not Implemented Yet'});
|
||||
if (!$scope.uploadedFile) {
|
||||
$scope.toasts.push({Type:'Error', Message:'Please choose a file first!'});
|
||||
return;
|
||||
}
|
||||
var fd = new FormData();
|
||||
fd.append("uploadedFile", $scope.uploadedFile);
|
||||
$http
|
||||
.post('/Fingerprint', fd, {
|
||||
headers:{
|
||||
'Content-Type':undefined
|
||||
},
|
||||
transformRequest:angular.identity
|
||||
}).success(function () {
|
||||
$scope.toasts.push({Type:'Success', Message:'Data uploaded'});
|
||||
}).error(function (data, status, headers, config) {
|
||||
$scope.toasts.push({Type:'Error', Message:data});
|
||||
});
|
||||
};
|
||||
|
||||
}]
|
||||
|
@ -8,7 +8,7 @@ import transaction
|
||||
from brewman.models import DBSession
|
||||
from brewman.models.master import AttendanceType, Employee
|
||||
from brewman.models.validation_exception import ValidationError
|
||||
from brewman.models.voucher import Attendance
|
||||
from brewman.models.voucher import Attendance, Fingerprint
|
||||
from brewman.views.services.session import session_period_start, session_period_finish, session_current_date
|
||||
|
||||
__author__ = 'tanshu'
|
||||
@ -48,8 +48,6 @@ def attendance_date(request):
|
||||
def attendance_date_report(date):
|
||||
report = {'Date': date, 'Body': []}
|
||||
date = datetime.datetime.strptime(date, '%d-%b-%Y')
|
||||
# TODO: Add Fingerprints
|
||||
# attendances = AttendanceType.list()
|
||||
employees = DBSession().query(Employee)\
|
||||
.filter(Employee.joining_date <= date)\
|
||||
.filter(or_(Employee.is_active, Employee.leaving_date >= date))\
|
||||
@ -59,8 +57,14 @@ def attendance_date_report(date):
|
||||
Attendance.date == date).filter(Attendance.is_valid == True).first()
|
||||
att = 0 if att is None else att.attendance_type
|
||||
|
||||
start_fp = date + datetime.timedelta(hours=7)
|
||||
finish_fp = date + datetime.timedelta(hours=7, days=1)
|
||||
prints = DBSession.query(Fingerprint).filter(Fingerprint.employee_code == item.code)\
|
||||
.filter(Fingerprint.date >= start_fp).filter(Fingerprint.date < finish_fp).order_by(Fingerprint.date).all()
|
||||
prints = ', '.join([x.date.strftime('%H:%M') for x in prints])
|
||||
|
||||
report['Body'].append({'id': item.id, 'Code': item.code, 'Name': item.name, 'Designation': item.designation,
|
||||
'Department': item.costcenter.name, 'AttendanceTypeID': att})
|
||||
'Department': item.costcenter.name, 'AttendanceTypeID': att, 'Prints': prints})
|
||||
return report
|
||||
|
||||
|
||||
@ -102,17 +106,16 @@ def employee_attendance_report(request):
|
||||
start_date = request.GET.get('StartDate', session_period_start(request))
|
||||
finish_date = request.GET.get('FinishDate', session_period_finish(request))
|
||||
info = {'StartDate': start_date, 'FinishDate': finish_date,
|
||||
'Employee': {'LedgerID': employee.id, 'Name': employee.name},
|
||||
'Body': employee_attendance(employee, start_date, finish_date)}
|
||||
return info
|
||||
|
||||
|
||||
def employee_attendance(employee, start_date, finish_date):
|
||||
# TODO: Add Fingerprints
|
||||
'Employee': {'LedgerID': employee.id, 'Name': employee.name}}
|
||||
start_date = datetime.datetime.strptime(start_date, '%d-%b-%Y')
|
||||
finish_date = datetime.datetime.strptime(finish_date, '%d-%b-%Y')
|
||||
start_date = employee.joining_date if employee.joining_date > start_date else start_date
|
||||
finish_date = employee.leaving_date if not employee.is_active and employee.leaving_date < finish_date else finish_date
|
||||
info['Body'] = employee_attendance(employee, start_date, finish_date)
|
||||
return info
|
||||
|
||||
|
||||
def employee_attendance(employee, start_date, finish_date):
|
||||
list = []
|
||||
for item in daterange(start_date, finish_date, inclusive=True):
|
||||
att = DBSession.query(Attendance)\
|
||||
@ -121,7 +124,12 @@ def employee_attendance(employee, start_date, finish_date):
|
||||
.filter(Attendance.is_valid == True)\
|
||||
.first()
|
||||
att = 0 if att is None else att.attendance_type
|
||||
list.append({'Date': item.strftime('%d-%b-%Y'), 'AttendanceTypeID': att})
|
||||
start_fp = item + datetime.timedelta(hours=7)
|
||||
finish_fp = item + datetime.timedelta(hours=7, days=1)
|
||||
prints = DBSession.query(Fingerprint).filter(Fingerprint.employee_code == employee.code)\
|
||||
.filter(Fingerprint.date >= start_fp).filter(Fingerprint.date < finish_fp).order_by(Fingerprint.date).all()
|
||||
prints = ', '.join([x.date.strftime('%H:%M') for x in prints])
|
||||
list.append({'Date': item.strftime('%d-%b-%Y'), 'AttendanceTypeID': att, 'Prints': prints})
|
||||
return list
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user