def save(self, *args, **kwargs): try: self.date = datetime.datetime.now() if get_option("POS_IC") and self.pk is not None: now = datetime.datetime.now().date() if self.valid_date is None: raise Exception(_(u"补贴有效日期不能为空")) if now > self.valid_date: raise Exception(_(u"有效日期必须大于当前日期")) if get_option("POS_IC") and self.pk is None: from mysite.personnel.models.model_issuecard import IssueCard, CARD_VALID, CARD_OVERDUE now_time = datetime.datetime.now() if ONLINE_ALLOWANCE: #在线补贴模式 self.batch = ((now_time.year - 2000) * 12 + now_time.month) * 31 + now_time.day else: self.batch = now_time.strftime("%Y%m")[2:] objcard = IssueCard.objects.get( UserID=self.user, cardstatus__in=[CARD_OVERDUE, CARD_VALID]) if objcard: self.sys_card_no = objcard.sys_card_no else: raise Exception(_(u"编号%s人员没有发卡") % self.user) super(Allowance, self).save() except IntegrityError: raise Exception(_(u"所选补贴人员中编号%s人员当月补贴已经登记!") % self.user)
def filter_for_select_emp(data): from mysite.personnel.models.model_emp import Employee from mysite.personnel.models.model_issuecard import IssueCard, CARD_VALID, CARD_STOP, CARD_LOST, CARD_OVERDUE, POS_CARD from mysite.iclock.iutils import get_dept_from_all from mysite.utils import get_option all_emp = data.get("id_all_emp") op_type = data.get("id_op_type") if all_emp == "all": qs = Employee.all_objects.all() elif all_emp == "filed_card": #获取没发卡人员 if get_option("POS_IC"): ids = IssueCard.objects.filter( cardstatus__in=[CARD_VALID, CARD_OVERDUE], card_privage=POS_CARD, sys_card_no__isnull=False).values_list('UserID') elif get_option("POS_ID"): ids = IssueCard.objects.filter( cardstatus__in=[CARD_VALID, CARD_OVERDUE], card_privage=POS_CARD).values_list('UserID') else: ids = IssueCard.objects.filter( cardstatus=CARD_VALID).values_list('UserID') qs = Employee.objects.all().exclude(id__in=ids) elif all_emp == "filed_having_card": #获取已发卡人员 if get_option("POS_IC"): if op_type == "allowance": #补贴特殊处理 from mysite.pos.models.model_allowance import Allowance batch = datetime.datetime.now().strftime("%Y%m")[2:] allow_sys_card = Allowance.objects.filter( batch=batch).values_list('sys_card_no') #已领取补贴卡账号 ids = IssueCard.objects.filter( cardstatus__in=[CARD_VALID, CARD_OVERDUE], card_privage=POS_CARD, sys_card_no__isnull=False).exclude( sys_card_no__in=allow_sys_card).values_list( 'UserID') #获取没领取补贴人员ID else: ids = IssueCard.objects.filter( cardstatus__in=[CARD_VALID, CARD_OVERDUE], card_privage=POS_CARD, sys_card_no__isnull=False).values_list( 'UserID') #获取已发卡人员ID elif get_option("POS_ID"): ids = IssueCard.objects.filter( cardstatus__in=[CARD_VALID, CARD_OVERDUE], card_privage=POS_CARD).values_list('UserID') #获取已发卡人员ID else: ids = IssueCard.objects.filter(cardstatus=CARD_VALID).values_list( 'UserID') #获取已发卡人员ID qs = Employee.objects.all().filter(id__in=ids) else: qs = Employee.objects.all() return qs
def __init__(self,request): if get_option("POS_ID"): self.head = (('card_no',u'卡号'),('dining_name',u'餐厅'),('cardstatus',u'卡状态'),('time',u'发卡日期'), ('create_operator',u'创建者')) else: self.head = (('card_no',u'卡号'),('sys_card_no',u'卡账号'),('dining_name',u'餐厅'),('card_privage',u'卡权限'),('cardstatus',u'卡状态'),('time',u'发卡日期'), ('create_operator',u'创建者')) super(ManageCardReport, self) .__init__() #设置 colum_trans 属性 def f_datetime(r, val): if val=="" or val=="None" : return "" else: return val.strftime('%Y-%m-%d %H:%M:%S') PRIVAGE = ( ('1', _(u'管理卡')), ('2', _(u'操作卡')), ) CARDSTATUS = ( ('1', _(u'有效')), ('3', _(u'挂失')), ('2', _(u'注销')), ) m_status_dic = {} m_status_dic.update(CARDSTATUS) def f_status(r,val): try: return m_status_dic[str(val)] except:return u"未知" m_prive_dic = {} m_prive_dic.update(PRIVAGE) def f_prive(r,val): try: return m_prive_dic[str(val)] except:return u"未知" self.grid.colum_trans["time"] = f_datetime self.grid.colum_trans["cardstatus"] = f_status #设置 colum 属性 self.grid.fields["card_no"]["width"]=150 self.grid.fields["dining_name"]["width"]=150 self.grid.fields["cardstatus"]["width"]=150 self.grid.fields["time"]["width"]=150 self.grid.fields["create_operator"]["width"]=150 if get_option("POS_IC"): self.grid.fields["sys_card_no"]["width"]=150 self.grid.fields["card_privage"]["width"]=150 self.grid.colum_trans["card_privage"] = f_prive
def monitor_instant_msg(): from base.models import appOptions from django.conf import settings from django.utils import translation translation.activate(settings.LANGUAGE_CODE) # max_dt=InstantMsg.objects.filter( # monitor_last_time__year=dt.year, # monitor_last_time__month=dt.month, # monitor_last_time__day=dt.day # ).aggregate(Max("monitor_last_time"))#查找今天最近扫描的一次,以防扫描重复的数据 # if get_option("POS"): stime = appOptions["pos_scanner"] else: stime = appOptions["msg_scanner"] if stime: h, m = stime.split(":") dt_now = datetime.datetime.now() dt = datetime.datetime(year=dt_now.year, month=dt_now.month, day=dt_now.day) #设置时分秒为00:00:00 try: while True: #固定在每天的7:01开始监控,测试阶段 #print 'dt_now.hour:',dt_now.hour,'dt_now.minute:',dt_now.minute,'dt_now.second',dt_now.second,'hhhh:',h,'mmmmmm:',m if dt_now.hour == int(h) and dt_now.minute == int(m): birthday_msg(dt) emp_type_change(dt) from django.conf import settings if get_option("POS"): pos_cartype_change() #消费卡过期 set_cache_issucard() #缓存卡表信息 if get_option("POS_IC") and FILTER_POS_BREAK_LOG: from mysite.pos.pos_utils import filter_break_log filter_break_log("pos_log_stamp") #筛选IC消费设备的灰色记录 time.sleep(56) if get_option("POS"): stime = appOptions["pos_scanner"] else: stime = appOptions["msg_scanner"] h, m = stime.split(":") dt_now = datetime.datetime.now() dt = datetime.datetime(year=dt_now.year, month=dt_now.month, day=dt_now.day) #设置时分秒为00:00:00 except: import traceback traceback.print_exc()
def pos_cartype_change(): from mysite.worktable.models import MsgType from mysite.personnel.models.model_iccard import ICcard from mysite.personnel.models.model_issuecard import IssueCard, CARD_OVERDUE, CARD_VALID, POS_CARD from django.db import models, connection from django.core.cache import cache from base.cached_model import cache_key if get_option("POS_ID"): objcard = IssueCard.objects.filter(cardstatus=CARD_VALID, card_privage=POS_CARD) else: objcard = IssueCard.objects.filter(cardstatus__in=CARD_VALID, card_privage=POS_CARD, sys_card_no__isnull=False) if objcard: for obj in objcard: if (obj.type is not None): nowtime = datetime.datetime.now().date() objiccard = ICcard.objects.filter(pk=obj.type_id) if objiccard: if type(obj.issuedate) == type(datetime.datetime.now()): iscardate = obj.issuedate.date() else: iscardate = obj.issuedate daycount = (nowtime - iscardate).days maxday = objiccard[0].use_date if (daycount > maxday and maxday > 0): #卡是否过期 obj.cardstatus = CARD_OVERDUE #修改卡状态为过期 if get_option("POS_ID"): obj.save(force_update=True, log_msg=False) else: models.Model.save(obj, force_update=True) key = cache_key(obj, obj.pk) cache.delete(key) msg = InstantMsg() msg.content = "" if obj.UserID.PIN: msg.content += u"%s" % _( u"员工工号") + obj.UserID.PIN + ";" if obj.UserID.EName: msg.content += u"%s" % _( u"员工姓名") + obj.UserID.EName + ";" if len(msg.content) != 0: msg.content += u"%s" % _(u"消费卡过期!") msg.monitor_last_time = datetime.datetime.now() msg.msgtype = MsgType.objects.get( pk=5) #写在BaseCode表中消息类型,10代表消费信息 msg.save()
class Admin: default_give_perms=["contenttypes.can_AttCalculate"] sort_fields=["-TTime","UserID.PIN","UserID.DeptID.code",] app_menu="att" menu_group = 'att' visible = get_option("ATT")#暂只有考勤使用 visible = False#暂只有考勤使用 read_only=True api_fields=('UserID.PIN','UserID.EName','TTime','State','sn_name') list_display=('UserID_id','UserID.PIN','UserID.EName','UserID.DeptID.code','UserID.DeptID.name','TTime','WorkCode','State','get_device_name','sn_name','get_attpic','get_emppic') newadded_column={ "UserID.PIN":"get_emp_pin", "UserID.EName":"get_emp_name", "UserID.DeptID.name":"get_dept_name", "UserID.DeptID.code":"get_dept_code", } photo_path_tran="get_attpic" photo_path="get_emppic" hide_fields=('UserID_id','get_attpic','get_emppic') list_filter = ('UserID','TTime','State','Verify','SN') query_fields=['UserID__PIN','UserID__EName','sn_name','TTime'] search_fields=('TTime',) tstart_end_search={ "TTime":[_(u"起始考勤时间"),_(u"结束考勤时间")] }#配置时间字段(TimeField,DatetimeField,DateField)可以有起始和结束查找 menu_index=8 disabled_perms=["add_transaction",'change_transaction','delete_transaction','clearObsoleteData_transaction'] layout_types=["table","photo"]
def set_pos_info_record(): if get_option("POS_ID"): from mysite.iclock.models.model_device import Device,DEVICE_POS_SERVER device_list = Device.objects.filter(device_type=DEVICE_POS_SERVER) for obj in device_list: key = str(obj.sn).strip()+"_update_db" cache.set(key,1,TIMEOUT)
class Admin(CachingModel.Admin): sort_fields = ["code"] app_menu = "pos" menu_group = 'pos' menu_index = 35 visible = False cache = 3600 query_fields = ['code', 'money'] default_widgets = { 'code': ZBaseSmallIntegerWidget, 'money': ZBaseMoneyWidget } default_give_perms = [ "contenttypes.can_PosFormPage", ] if get_option("POS_IC"): adv_fields = ['use_mechine', 'code', 'money'] list_display = ['code', 'money', 'use_mechine'] newadded_column = {'use_mechine': 'get_device'} api_m2m_display = {"use_mechine": "get_device"} else: adv_fields = ['code', 'money'] list_display = ['code', 'money'] help_text = _( u'下述所填项目中,键值编号(1-99)不能为空且不能重复,如果需要使用键值消费模式,需将此资料下载到机器上,系统自动验证:')
class UploadUserInfo(Operation): verbose_name = _(u"""获取人员信息""") if not get_option("IACCESS_5TO4"): help_text = _(u"""重新获取设备中当前的人员基本信息和指纹数据。""") else: help_text = _(u"""重新获取设备中当前的人员基本信息。""") perm_model_menu = ['iclock.Device', 'iaccess.DoorSetPage'] def action(self): from django.db import connection from mysite.iaccess import sqls if self.object.device_type == DEVICE_ACCESS_CONTROL_PANEL: try: if not self.object.enabled: raise Exception(_(u'设备已被禁用!')) dev_id = self.object.id user_count = self.object.upload_user_info_template("user") if user_count == None: user_count = -1 if self.object.accdevice.IsOnlyRFMachine == 0: fp_count = self.object.upload_user_info_template( "templatev10") #face_count = self.object.upload_user_info_template("FACE") if fp_count == None: fp_count = -1 # if face_count == None: # face_count = -1 if user_count >= 0 and fp_count < 0: raise Exception(_(u"获取人员基本信息成功,但获取人员指纹数据失败!")) elif user_count < 0 and fp_count >= 0: raise Exception(_(u"获取人员指纹数据成功,但获取人员基本信息失败!")) elif user_count < 0 and fp_count < 0: raise Exception(_(u"获取人员基本信息和指纹数据均失败!")) # elif face_count < 0: # raise Exception(_(u"获取人脸模板数据均失败!")) else: cursor = connection.cursor() # sql = 'update iclock set user_count=%s,fp_count=%s,face_count=%s where id=%s'%(user_count, fp_count, face_count,dev_id) #sql = 'update iclock set user_count=%s,fp_count=%s where id=%s'%(user_count, fp_count, dev_id) sql = sqls.UploadUserInfoz_update( user_count, dev_id, fp_count) cursor.execute(sql) connection._commit() connection.close() else: if user_count < 0: raise Exception(_(u"获取人员信息失败!")) else: cursor = connection.cursor() #sql = 'update iclock set user_count=%s where id=%s'%(user_count, dev_id) sql = sqls.UploadUserInfoz_update( user_count, dev_id, None) cursor.execute(sql) connection._commit() connection.close() except: #None不能比较 print_exc() raise Exception(_(u"获取人员信息失败!"))
def save(self): if not self.code: raise Exception(_(u'部门编号不能为空!')) if self.id == 1: self.parent = None tmp = Department.objects.filter(code__exact=self.code) if tmp: if self.id: if self.id !=tmp[0].id: raise Exception(u"%(a)s %(b)s"%{"a":self.code,"b":_(u'部门编号已经存在!')}) else: raise Exception(u"%(a)s %(b)s"%{"a":self.code,"b":_(u'部门编号已经存在!')}) if len(tmp) > 0 and tmp[0].id != self.id: raise Exception(u"%(a)s %(b)s"%{"a":self.code,"b":_(u'部门编号已经存在!')}) super(Department, self).save() if self.id == 1 and get_option("ATT"): from mysite.att.models.attparam import AttParam a = AttParam.objects.filter(ParaName__exact='CompanyLogo') if a: a = a[0] a.ParaValue = self.name a.save() else: a = AttParam() a.ParaValue = self.name a.ParaName = 'CompanyLogo' a.save()
def get_isscard_cache(self): try: from mysite.personnel.models.model_issuecard import IssueCard,CARD_OVERDUE,CARD_VALID from mysite.pos.pos_constant import TIMEOUT from base.cached_model import cache_key objcard = IssueCard.objects.filter(type=self,cardstatus__in = [CARD_OVERDUE,CARD_VALID]) nowtime = datetime.datetime.now().date() if objcard: for obj in objcard: if type(obj.issuedate) == type(datetime.datetime.now()): iscardate = obj.issuedate.date() else: iscardate = obj.issuedate daycount = (nowtime-iscardate).days maxday = self.use_date if maxday>=daycount or maxday==0: obj.cardstatus = CARD_VALID if daycount>maxday and maxday >0: obj.cardstatus = CARD_OVERDUE # obj.save() models.Model.save(obj,force_update=True) key = cache_key(obj,obj.pk) cache.delete(key) if get_option("POS_ID"): key="IssueCard_%s" %obj.cardno cache.set(key,obj,TIMEOUT) except: import traceback traceback.print_exc()
class AttDeviceDataManage(AppOperation): u'''考勤设备管理''' verbose_name=_(u'考勤设备') view=funAttDeviceDataManage _app_menu ="att" _menu_index=11 visible =get_option("ATT")
def DataPostCheck(sender, **kwargs): from mysite.personnel.models.model_emp import device_pin, Employee from mysite.iclock.models.modelproc import getEmpCmdStr oldObj = kwargs['oldObj'] newObj = kwargs['newObj'] request = sender if isinstance(newObj, LeaveLog): bl = request.REQUEST.get("isblacklist", "") att = request.REQUEST.get("opcloseatt", "") acc = request.REQUEST.get("opcloseacc", "") pos = request.REQUEST.get("opclosepos", "") if acc: newObj.OpCloseAccess(newObj).action() if bl: newObj.UserID.isblacklist = bl newObj.UserID.save() if att: newObj.OpCloseAtt(newObj).action() if pos: newObj.OpClosePos(newObj).action() from mysite.personnel.models.model_issuecard import IssueCard, CARD_VALID, CARD_STOP, CARD_OVERDUE iscard = IssueCard.objects.filter( UserID=newObj.UserID, cardstatus__in=[CARD_VALID, CARD_OVERDUE]) if not get_option("POS"): if newObj.isReturnCard == 1 and iscard: for e in iscard: e.delete()
class Admin(CachingModel.Admin): menu_index = 502 visible = get_option("WORKTABLE_INSTANTMSG_VISIBLE") app_menu = "base" menu_group = 'base' list_display = ['msgtype', 'content'] report_fields = ["monitor_last_time", "msgtype"]
def get_pos_list_record(hander, request, userids, **arg): ''' 消费明细 ''' deptids = request.REQUEST.get('DeptIDs', "") # userids=request.POST.get('UserIDs',"") # print "userids============",request.POST.get('UserIDs',"") # type=request.GET.get('type','') st = request.REQUEST.get('ComeTime', '') et = request.REQUEST.get('EndTime', '') st = datetime.strptime(st, '%Y-%m-%d') et = datetime.strptime(et, '%Y-%m-%d') operate = request.REQUEST.get('operate', '') et = et + timedelta(days=1) pos_model = request.REQUEST.get('pos_model', '') dining = request.REQUEST.get('Dining', '') loadall = request.REQUEST.get('pa', '') try: if get_option("POS_IC"): get_ic_list_record(hander, request, deptids, userids, dining, st, et, pos_model, operate, **arg) else: get_id_list_record(hander, request, deptids, userids, dining, st, et, pos_model, operate, **arg) except: import traceback traceback.print_exc()
class Admin(CachingModel.Admin): sort_fields = ["areaid"] visible = not get_option("ONLY_POS") #单独消费的时候不显示 app_menu = "iclock" menu_group = 'iclock' menu_index = 9990 query_fields = ['areaid', 'areaname', 'remark'] #需要查找的字段 default_widgets = { 'parent': ZDeptChoiceWidget( attrs={ "async_model": "personnel__Area", "async_url": "/personnel/get_children_nodes/", "limit": True, }), } adv_fields = ['areaid', 'areaname', 'parent', 'remark'] list_display = ['areaid', 'areaname', 'parent', 'remark'] newadded_column = { 'parent': 'get_parent', } cache = 3600 opt_perm_menu = { "opadjustarea_area": "att.AttDeviceUserManage" } #{权限操作的名字(小写):菜单的路径(app_menu.model)} disabled_perms = ["clear_area", "dataimport_area"] @staticmethod def initial_data(): #初始化时增加一个区域 if Area.objects.count() == 0: Area(areaname=u"%s" % _(u"区域名称"), areaid="1", parent=None).save() pass
def __init__(self, request): from get_head import get_posreprots_fields self.head, FieldNames, FieldCaption = get_posreprots_fields( self.report_typeid) super(GetDeviceSummaryReport, self).__init__() #设置 colum_trans 属性 def f_datetime(r, val): if val == "" or val == "None": return "" else: return val.strftime('%Y-%m-%d %H:%M:%S') for i in FieldNames: self.grid.fields[i]["width"] = 70 self.grid.fields["summary_money"]["width"] = 160 self.grid.fields["summary_dev_money"]["width"] = 160 self.grid.fields["summary_count"]["width"] = 160 self.grid.fields["pos_count"]["width"] = 80 self.grid.fields["meal_money"]["width"] = 80 self.grid.fields["pos_date"]["width"] = 160 self.grid.fields["device_sn"]["width"] = 120 if get_option("POS_IC"): self.grid.fields["error_summary_money"]["width"] = 100 self.grid.fields["error_summary_count"]["width"] = 100 self.grid.fields["sum_device_count"]["width"] = 100 # self.SetHide("device_name") self.SetHide("error_summary_count") self.SetHide("error_summary_money")
class DeleteData(AppOperation): u'''清除数据''' verbose_name = _(u'临时数据清理') view = clean_data.get_html_data _app_menu = "base" _menu_index = 99999 visible = get_option("WORKTABLE_DELETEDATA")
class Admin(CachingModel.Admin): sort_fields = ["-time", 'time'] app_menu = "pos" menu_group = 'pos' menu_index = 50 cache = 3600 visible = False default_give_perms = ["contenttypes.can_consumeAppReport"] if get_option("POS_IC"): list_display = [ 'UserID.PIN', 'UserID.EName', 'cardno', 'sys_card_no', 'type', 'cardstatus', 'time', 'create_operator' ] query_fields = [ 'UserID.PIN', 'UserID.EName', 'cardno', 'sys_card_no', 'type', 'cardstatus', 'time' ] adv_fields = [ 'UserID.PIN', 'UserID.EName', 'cardno', 'sys_card_no', 'type', 'cardstatus', 'time' ] else: list_display = [ 'UserID.PIN', 'UserID.EName', 'cardno', 'type', 'cardstatus', 'time', 'create_operator' ] query_fields = [ 'UserID.PIN', 'UserID.EName', 'cardno', 'type', 'cardstatus', 'time' ] adv_fields = [ 'UserID.PIN', 'UserID.EName', 'cardno', 'type', 'cardstatus', 'time' ]
class Admin(CachingModel.Admin): # layout_types = ["table"]#显示方式 sort_fields = ["code"]#对列进行排序 app_menu = "pos" menu_group = 'pos' visible=get_option("POS") cache = 3600 menu_index = 5#在菜单按钮的位置 query_fields = ['code','name','discount']#显示的查询项 list_display = ['code','name','discount','date_max_money','date_max_count', 'per_max_money','meal_max_money','meal_max_count','less_money', 'max_money','posmeal','use_date','pos_time','use_mechine','remark','create_operator']#显示的列 adv_fields = ['code','name','discount','posmeal','date_max_money','date_max_count', 'per_max_money','meal_max_money','meal_max_count','less_money', 'max_money','use_date','pos_time','use_mechine','remark','create_operator']#高级查询显示的列 newadded_column = { 'posmeal': 'get_posmeal','use_mechine':'get_device'} api_m2m_display = { "use_mechine" : "sn","posmeal":"name"} help_text = _(u'下述所填项目中,卡类资料不能为空且编号不能重复,系统默认数据编号为1.下列各项中为0值或为空值表示不限制,折扣为0表示不打折,系统自动验证。可用设备,可用餐别需自定义下发到设备,系统默认不会下发!') default_widgets = { 'date_max_count':ZBase3IntegerWidget, 'meal_max_count':ZBase3IntegerWidget, 'use_date':ZBaseDayMinsIntegerWidget, 'discount':ZBaseSmallIntegerWidget, 'code':ZBaseSmallIntegerWidget, } @staticmethod def initial_data(): if ICcard.objects.count()==0: ICcard(code='1',name=u"%s"%_(u"员工卡"),discount=0,date_max_money=0, date_max_count=0,per_max_money=0,meal_max_money=0,meal_max_count=0, less_money=0,max_money=0,use_date=0).save()
class Admin(CachingModel.Admin): list_display = ( 'create_operator', 'CmdCommitTime', 'cmm_type', 'CmdContent', 'commit_time', 'process_count', 'success_flag', ) sort_fields = [ "create_operator", "CmdCommitTime", "commit_time", "success_flag" ] search_fields = ["CmdContent"] query_fields = ('cmm_type', 'process_count', 'success_flag') cache = False read_only = True log = False visible = get_option("DEVOPERATE_VISIBLE") #暂只有考勤使用 disabled_perms = [ "add_operatecmd", 'change_operatecmd', 'delete_operatecmd' ] hide_perms = [ "dataexport_operatecmd", ]
class Meta: app_label = 'pos' verbose_name = _(u'卡现金收支') verbose_name_plural = verbose_name if get_option("POS_IC"): unique_together = (("sn_name", "hide_column", "sys_card_no", "money", "checktime"), )
class dataimport(ModelOperation): if get_option("POS_IC"): help_text = _( u"导入补贴数据:1.导入的人员必须是登记过卡帐号的人员,并且该人员的卡帐号必须是有效的卡。员工每月只支持一次补贴!2.卡状态为挂失,停用,过期的人员不能进行补贴登记,系统自动过滤!3.补贴导入成功后系统会自动下发设备指令,(直接审核通过)不可以再做修改!" ) #导入 else: help_text = _( u"导入补贴数据:1.卡状态为挂失,停用,过期的人员不能进行补贴登记,系统自动过滤!2.补贴导入成功后系统会直接审核通过,不可以再做修改!" ) #导入 verbose_name = _(u"导入") visible = True def action(self): from mysite.iclock.models.model_device import Device, DEVICE_POS_SERVER if get_option("POS_IC"): devlist = Device.objects.filter(device_type=DEVICE_POS_SERVER, device_use_type=2) #查找补贴机 if not devlist: raise Exception(_(u"当前系统,没有补贴设备,操作失败")) if get_option("POS_IC"): from mysite.pos.ic_allowance_import import ICImportAllowData obj_import = ICImportAllowData(req=self.request, input_name="import_data") else: from mysite.pos.id_allowance_import import IDImportAllowData obj_import = IDImportAllowData(req=self.request, input_name="import_data") obj_import.exe_import_data() ret_error = obj_import.error_info if ret_error: import traceback traceback.extract_stack() raise Exception(u"%(ret)s" % {"ret": ";".join(ret_error)})
def set_card(emp, cardNO): from mysite.personnel.models.model_issuecard import IssueCard, CARD_VALID, CARD_STOP from mysite.personnel.models.model_iccard import ICcard if get_option("POS") or cardNO == "0" or (not cardNO.strip()): return try: tmp_issuecare = IssueCard.objects.filter(UserID=emp) if tmp_issuecare: #编辑 if tmp_issuecare[0].cardno <> cardNO: # old_card = tmp_issuecare[0].cardno # tmp_issuecare[0].cardstatus = CARD_STOP #停用旧卡号 tmp_issuecare[0].cardno = cardNO tmp_issuecare[0].save(force_update=True) else: issuecard = IssueCard() issuecard.UserID = emp issuecard.cardno = cardNO issuecard.issuedate = datetime.datetime.now().strftime("%Y-%m-%d") try: issuecard.save() except IntegrityError: conn._rollback() conn.close() except: import traceback traceback.print_exc()
class AttDeviceUserManage(AppOperation): u'''区域用户管理''' verbose_name=_(u'区域用户') view=funAttDeviceUserManage _app_menu ="att" _menu_index=12 # visible = not (("mysite.iaccess" in settings.INSTALLED_APPS) and ("mysite.att" in settings.INSTALLED_APPS) and settings.ZKACCESS_ATT) visible = get_option("DEVICE_USER_MANAGEMENT_VISIBLE")
def get_ic_pos_record(request): ''' 消费明细 ''' deptids = request.POST.get('DeptIDs', "") userids = request.POST.get('UserIDs', "") dining = request.POST.get('Dining', "") # type=request.GET.get('type','') st = request.POST.get('ComeTime', '') et = request.POST.get('EndTime', '') st = datetime.strptime(st, '%Y-%m-%d') et = datetime.strptime(et, '%Y-%m-%d') operate = request.REQUEST.get('operate', '') et = et + timedelta(days=1) pos_model = request.REQUEST.get('pos_model', '') dining = request.REQUEST.get('dining', '') loadall = request.REQUEST.get('pa', '') if loadall: if get_option("POS_IC"): allr = get_ic_list_record(request, deptids, userids, dining, st, et, pos_model, operate, True) else: allr = get_id_list_record(request, deptids, userids, dining, st, et, pos_model, operate, True) else: if get_option("POS_IC"): allr = get_ic_list_record(request, deptids, userids, dining, st, et, pos_model, operate) else: allr = get_id_list_record(request, deptids, userids, dining, st, et, pos_model, operate) objdata = {} # allr=get_ic_list_record(request,deptids,userids,st,et,pos_model,operate) objdata['data'] = allr['datas'] objdata['fields'] = allr['fieldnames'] heads = {} for i in range(len(allr['fieldnames'])): heads[allr['fieldnames'][i]] = allr['fieldcaptions'][i] # objdata['heads']=heads # tmp_name=save_datalist(objdata) # allr['tmp_name']=tmp_name return getJSResponse(smart_str(simplejson.dumps(allr)))
class Admin(CachingModel.Admin): menu_index = 503 visible = get_option("WORKTABLE_GROUPMSG_VISIBLE") # visible = not (("mysite.iaccess" in settings.INSTALLED_APPS) and ("mysite.att" in settings.INSTALLED_APPS) and settings.ZKACCESS_ATT)#暂只有考勤使用,当门禁带简单考勤时屏蔽 help_text = _(u"系统提醒设置用于将公告分配给不同的角色查看。") app_menu = "base" menu_group = 'base' list_display = ['group', 'msgtype']
def select_emp_data2(request): '''筛选会议人员,会议系统专用 scott add''' from mysite.personnel.models.model_emp import Employee from mysite.personnel.models.model_issuecard import IssueCard, CARD_VALID, CARD_STOP, CARD_LOST, CARD_OVERDUE, POS_CARD from mysite.meeting.models.meeting_emp import MeetingEmp mes = MeetingEmp.objects.all() pins = [] for me in mes: pins.append(me.user.PIN) all_emp = request.REQUEST.get("all_emp", None) if all_emp == "all": qs = Employee.all_objects.filter(PIN__in=pins) elif all_emp == "filed_card": #获取没发卡人员 if get_option("POS_IC"): ids = IssueCard.objects.filter( cardstatus__in=[CARD_VALID, CARD_OVERDUE], card_privage=POS_CARD, sys_card_no__isnull=False).values_list('UserID') #获取已发卡人员ID elif get_option("POS_ID"): ids = IssueCard.objects.filter( cardstatus__in=[CARD_VALID, CARD_OVERDUE], card_privage=POS_CARD).values_list('UserID') #获取已发卡人员ID else: ids = IssueCard.objects.filter(cardstatus=CARD_VALID).values_list( 'UserID') #获取已发卡人员ID qs = Employee.objects.all().exclude(id__in=ids).filter(PIN__in=pins) # qs = Employee.objects.all().filter(using_card="") elif all_emp == "filed_having_card": #获取已发卡人员 if get_option("POS_IC"): ids = IssueCard.objects.filter( cardstatus__in=[CARD_VALID, CARD_OVERDUE], card_privage=POS_CARD, sys_card_no__isnull=False).values_list('UserID') #获取已发卡人员ID elif get_option("POS_ID"): ids = IssueCard.objects.filter( cardstatus__in=[CARD_VALID, CARD_OVERDUE], card_privage=POS_CARD).values_list('UserID') #获取已发卡人员ID else: ids = IssueCard.objects.filter(cardstatus=CARD_VALID).values_list( 'UserID') #获取已发卡人员ID qs = Employee.objects.all().filter(id__in=ids).filter(PIN__in=pins) # qs = Employee.objects.all().exclude(using_card="") else: qs = Employee.objects.filter(PIN__in=pins) return model_data_list(request, Employee, qs)
def detail_resplonse(sender, **kargs): from dbapp.templatetags import dbapp_tags from mysite.personnel.models.model_emp import Employee from dbapp.widgets import form_field, check_limit if kargs['dataModel']==LeaveLog: form=sender['form'] #print form.fields field = models.BooleanField(_(u'是否黑名单'), choices=YESORNO, default=0) form.fields['isblacklist']=form_field(field) if get_option("ATT"): closeatt=models.BooleanField(verbose_name=_(u'立即关闭考勤'),default=True) form.fields['opcloseatt']=form_field(closeatt) if get_option("IACCESS"): closeacc=models.BooleanField(verbose_name=_(u'立即关闭门禁'),default=True) form.fields['opcloseacc']=form_field(closeacc) if get_option("POS"): closepos=models.BooleanField(verbose_name=_(u'立即关闭消费'),default=True) form.fields['opclosepos']=form_field(closepos)
def show_visible(): return False if settings.APP_CONFIG.language.language!='zh-cn': return False else: if get_option("ATT"): return True else: return False
def check_device(request, allow_create=True): ''' 根据设备的http请求 检查设备的注册情况返回有效设备对象 涉及http参数 HITACDMFun、SN、device_type ''' # try: #---参数 HITACDMFun 必须为 ['HIT','HIT Corporation','iCON','Rentris','Secure'] 成员 # re_device = request.GET["HITACDMFun"] # if re_device: # if re_device not in ['HIT','HIT Corporation','iCON','Rentris','Secure']: # return None # else: # return None # except: # return None from mysite.iclock.cache_cmds import check_and_init_cmds_cache try: sn = request.GET["SN"] except: sn = request.raw_post_data.split("SN=")[1].split("&")[0] try: device=get_device(sn) except ObjectDoesNotExist: #---正在请求服务器的设备没有登记过 from mysite.utils import get_option if get_option("ATT") and allow_create and not request.REQUEST.has_key('PIN') and ( #没有查询用户信息的话,可以注册该考勤机 len(sn) >= 6 and settings.ICLOCK_AUTO_REG): #若SN正确,且设置可以自动注册 from mysite.personnel.models.model_area import Area device = Device( sn=sn, alias="auto_add", #---设备别名 last_activity=datetime.datetime.now(), area=Area.objects.get(pk=1),#Area.objects.all()[0], #---默认设在第一个考勤区域 ipaddress=request.META["REMOTE_ADDR"]) device.save(force_insert=True, log_msg=False) append_dev_cmd(device, "INFO") #---添加设备请求命令 定义此为 INFO 操作 else: return None if device.status in (STATUS_STOP, STATUS_PAUSED): #--- 设备处于暂停或者停止状态 return None check_and_init_cmds_cache(device) #检查缓存命令结构是否存在,如果不存在初始化缓存命令结构 device.last_activity=datetime.datetime.now() deviceType = request.REQUEST.get('device_type') if(deviceType==POSDEVICE):#消费机 device.deviceType = POSDEVICE else: device.deviceType = "" return device
def line_to_emp(cursor, device, line, Op,event=True): ''' 解析设备命令 line:设备post过来的命令字符串 device:传送命令的设备 ''' from mysite import settings import os try: #---行数据以空格分割标志名和键值对数据 if line.find("\tName=") > 0: ops = unicode(line.decode("gb18030")).split(" ", 1) else: ops = line.split(" ", 1) except: ops = line.split(" ", 1) if ops[0] == 'OPLOG': #-------------管理员操作记录 ops[0] 为标志名 from conv_device import line_to_oplog return line_to_oplog(cursor, device, ops[1], event) flds = {}; #-----------行数据中包含的所以键值对 for item in ops[1].split("\t"): index = item.find("=") if index > 0: flds[item[:index]] = item[index + 1:] try: pin = str(int(flds["PIN"])) #---得到用户编号 if int(pin) in settings.DISABLED_PINS or len(pin)>settings.PIN_WIDTH: #----用户编号有效性验证 return except: return e = get_employee(pin, device) #--- 得到命令对应的人员对象 必须有 if not e: return if str(ops[0]).strip() == "USER": #----------用户基本信息 if not settings.DEVICE_CREATEUSER_FLAG: return try: ename = unicode(flds["Name"])[:40] except: ename = ' ' passwd = flds.get("Passwd","") card = flds.get("Card", "") tmp_card = "" #卡号保存在isssuecard里面 agrp = flds.get("Grp", "") tz = flds.get("TZ","") priv = flds.get('Pri', 0) fldNames = ['SN', 'utime'] values = [device.id, str(datetime.datetime.now())[:19]] if ename and (ename != e.EName): fldNames.append('name') values.append(ename) e.EName = ename from base.crypt import encryption#设备传过来的密码没加密 需要加密再和数据库中的比较 if passwd and (encryption(passwd) != e.Password): fldNames.append('password') values.append(passwd) e.Password = passwd if priv and (str(priv) !=str(e.Privilege)):#考虑下数据字段类型 fldNames.append('privilege') values.append(str(priv)) e.Privilege = str(priv) if card and (card_to_num(card) != e.Card): if str(card_to_num(card)).strip()!="0": vcard=card_to_num(card) else: vcard="" fldNames.append('Card') values.append(vcard) tmp_card = vcard if agrp and (str(agrp) != str(e.AccGroup)): fldNames.append('AccGroup') values.append(str(agrp)) e.AccGroup = str(agrp) if tz != e.TimeZones: fldNames.append('TimeZones') values.append(tz) e.TimeZones = tz try: e.IsNewEmp except: e.IsNewEmp = False if e.IsNewEmp: #新增用户 e.IsNewEmp = False e.DeptID_id=1 e.attarea=(device.area,) e.save() if tmp_card and not get_option("POS"): from mysite.personnel.models.model_issuecard import IssueCard,CARD_VALID obj_card = IssueCard() obj_card.UserID = e obj_card.cardno = tmp_card obj_card.cardstatus = CARD_VALID obj_card.save() devs=set(e.search_device_byuser()) if devs: try: devs.remove(device) except: pass for dev in devs: dev.set_user([e], Op,"") dev.set_user_fingerprint([e], Op) time.sleep(0.01) sql = '' elif len(fldNames) > 2: #有新的用户信息 devs=set(e.search_device_byuser()) e.save() if tmp_card:#卡处理 from mysite.personnel.models.model_issuecard import IssueCard,CARD_VALID try: obj_card = IssueCard.objects.get(UserID=e,cardstatus=CARD_VALID) except: obj_card = None if not obj_card: obj_card = IssueCard() obj_card.UserID = e obj_card.cardno = tmp_card obj_card.cardstatus = CARD_VALID obj_card.save() else: if not get_option("POS"):#消费的时候不能覆盖 obj_card.cardno = tmp_card obj_card.save() if devs: try: devs.remove(device) except: pass for dev in devs: dev.set_user([e], Op,"") dev.set_user_fingerprint([e], Op) time.sleep(0.01) else: pass return e elif str(ops[0]).strip() == "FP": #----------------用户的指纹模板 if not settings.DEVICE_CREATEBIO_FLAG: return if e.IsNewEmp: #新增用户 e.DeptID_id=1 e.attarea=(device.area,) e.save() emps=e try: size=flds["Size"] fp = flds["TMP"] d_len=len(fp.decode("base64")) if fp and (len(fp)==int(size) or d_len==int(size) ): devs=set(e.search_device_byuser()) if devs: try: devs.remove(device) except: pass e = Template.objects.filter(UserID=e.id, FingerID=int(flds["FID"]),Fpversion=device.Fpversion) if len(e)>0: e=e[0] if fp[:100] == e.Template[:100]: pass # Template is same else: #指纹有修改 e.Template=fp e.Fpversion=device.Fpversion e.UTime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") e.save() for dev in devs: dev.set_user_fingerprint([emps], Op, int(flds["FID"])) time.sleep(0.01) else: #新增指纹 e=Template() e.UserID=emps e.Template=fp e.UTime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") e.FingerID=int(flds["FID"]) e.Fpversion=device.Fpversion e.Valid=1 e.save() for dev in devs: dev.set_user_fingerprint([emps], Op, int(flds["FID"])) time.sleep(0.01) return True else: print "size:%s TMP size:%s"%(size,len(fp)) print "template length error" except: import traceback; traceback.print_exc(); else: return False elif str(ops[0]).strip() == "FACE" : ######################## 新增人脸模板相关命令处理 ################## if e.IsNewEmp: #-----保存设备新增用户的其他信息 e.DeptID_id=1 e.attarea=(device.area,) e.save() emps=e try: from new_push import postuser_face postuser_face(flds,e,device,Op) return True except: import traceback; traceback.print_exc(); else: return False elif str(ops[0]).strip() == "USERPIC" : #####################加入用户照片 处理 if e.IsNewEmp: #-----保存设备新增用户的其他信息 e.DeptID_id=1 e.attarea=(device.area,) e.save() emps=e try: from new_push import postuser_photo postuser_photo(flds,e,device) return True except: import traceback; traceback.print_exc(); else: return False