示例#1
0
    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)
示例#2
0
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
示例#3
0
 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
示例#4
0
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()
示例#5
0
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()
示例#6
0
 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"]
示例#7
0
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)
示例#8
0
    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)不能为空且不能重复,如果需要使用键值消费模式,需将此资料下载到机器上,系统自动验证:')
示例#9
0
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"获取人员信息失败!"))
示例#10
0
 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()
示例#11
0
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()
示例#12
0
class AttDeviceDataManage(AppOperation):
        u'''考勤设备管理'''
        verbose_name=_(u'考勤设备')
        view=funAttDeviceDataManage
        _app_menu ="att"
        _menu_index=11
        visible =get_option("ATT")
示例#13
0
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()
示例#14
0
文件: models.py 项目: RockyLiys/erp
 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"]
示例#15
0
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()
示例#16
0
    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")
示例#18
0
文件: models.py 项目: RockyLiys/erp
class DeleteData(AppOperation):
    u'''清除数据'''
    verbose_name = _(u'临时数据清理')
    view = clean_data.get_html_data
    _app_menu = "base"
    _menu_index = 99999
    visible = get_option("WORKTABLE_DELETEDATA")
示例#19
0
 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'
         ]
示例#20
0
    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()
示例#21
0
 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",
     ]
示例#22
0
 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"), )
示例#23
0
    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)})
示例#24
0
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()
示例#25
0
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")
示例#26
0
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)))
示例#27
0
文件: models.py 项目: RockyLiys/erp
 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']
示例#28
0
文件: views.py 项目: RockyLiys/erp
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)
示例#29
0
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)
示例#30
0
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
示例#31
0
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
示例#32
0
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