def limit_video_linkageio_to(self, queryset): print '-----------------------', filterdata_by_user( queryset.filter(device_type=DEVICE_VIDEO_SERVER), threadlocals.get_current_user()) #只要门禁控制器 return filterdata_by_user( queryset.filter(device_type=DEVICE_VIDEO_SERVER), threadlocals.get_current_user()) #只要门禁控制器
def limit_device_to(self, queryset): if self.device: v = AccAntiBack.objects.exclude(device=self.device).values("device") else: v = AccAntiBack.objects.values("device") q = queryset.filter(device_type = DEVICE_ACCESS_CONTROL_PANEL) return filterdata_by_user(q.exclude(pk__in=[item["device"] for item in v]), threadlocals.get_current_user())
def limit_device_to(self, queryset): #需要过滤掉已经配置过的,当前自身(编辑时)以及单门控制器 if self.device: v = AccInterLock.objects.exclude(device = self.device).values("device") else: v = AccInterLock.objects.values("device") q = queryset.filter(device_type = DEVICE_ACCESS_CONTROL_PANEL).exclude(acpanel_type = ACPANEL_1_DOOR)#门禁控制器 return filterdata_by_user(q.exclude(pk__in = [item["device"] for item in v]), threadlocals.get_current_user())
def get_area_from_all(area_ids=[], request=None): u"从所有区域中得到area_ids的子集区域" from mysite.iclock.models import Area from dbapp.datautils import filterdata_by_user qs_all = Area.objects.all() if request: qs_all = filterdata_by_user(qs_all, request.user) ret = get_list_children(qs_all, area_ids) return ret
def get_dept_from_all(depts_ids=[], request=None): u"从所有组织中得到depts_ids的子集组织" from dbapp.datautils import filterdata_by_user from models import DeptAdmin, AreaAdmin, Department qs_all = Department.objects.all() if request: qs_all = filterdata_by_user(qs_all, request.user) ret = get_list_children(qs_all, depts_ids) return ret
def get_all_dept_from_all(depts_ids=[], request=None): u"从所有组织中得到depts_ids的子集组织" from dbapp.datautils import filterdata_by_user from mysite.iclock.iutils import get_list_children from mysite.iclock.models import Department qs_all = Department.all_objects.all() if request: qs_all = filterdata_by_user(qs_all, request.user) ret = get_list_children(qs_all, depts_ids) return ret
def limit_device_to(self, queryset): #需要过滤掉已经配置过的,当前自身(编辑时)以及单门控制器 if self.device: v = AccInterLock.objects.exclude( device=self.device).values("device") else: v = AccInterLock.objects.values("device") q = queryset.filter(device_type=DEVICE_ACCESS_CONTROL_PANEL).exclude( acpanel_type=ACPANEL_1_DOOR) #门禁控制器 return filterdata_by_user( q.exclude(pk__in=[item["device"] for item in v]), threadlocals.get_current_user())
def render(self, name, data, attrs=None): #from mysite.personnel.views import get_dept_tree_data from django.core.urlresolvers import reverse #print "ZDeptChoiceWidget_render data", data if data is not None: try: data = int(data) except: pass if type(data) in (int, long): data = self.choices.queryset.model.objects.get(pk=data) if attrs: self.attrs.update(attrs) if 'id' not in self.attrs: self.attrs['id'] = 'id_' + name self.attrs['class'] = self.attrs['class'] + ' filetree r' self.attrs = self.build_attrs(self.attrs, name=name) required = "" if hasattr(self.choices.field, "required") and self.choices.field.required: required = "class='wZBaseCharField required input_showDeptTree'" try: vdata = filterdata_by_user( self.choices.queryset.all().filter(isvalid=1), threadlocals.get_current_user()) # for ii in vdata: # if ii.parent_id is not None: # l=[e for e in vdata if e.id==ii.parent_id] # if not l:ii.parent_id=None html = u"<div id='999' class='title' style='margin-left: 0px;'>"\ "<p style='margin-right: 110px;'>%s %s %s</p></div>" % (_(u'开始时间'), _(u'结束时间'), _(u'金额')) html += DeptTree(vdata).html_ul_li(data and [data.pk] or []) html_el = { "disp": data or "", "name": name, "value": data and data.pk or "", "attr": flatatt(self.attrs), "required": required, "id": self.attrs['id'], "uid": "%s" % id(self), "none": _(u"撤销选择").capitalize(), "items": html, "ok": _(u"确定") } if self.flat == False: #平铺 return ('<input %(required)s class="wZBaseCharField input_showDeptTree" type="text" readonly="readonly" value="%(disp)s"><input type=hidden name="%(name)s" value="%(value)s">' + \ u'<span class="btn_showDeptTree"><img onclick="render_dept_dropdown(this, false)" src="/media/img/sug_down_on.gif" id="id_drop_dept"><div id="show_deptment" style="display: none;"><div class="title"><span class="span_selectNone Link_blue1" onclick="clear_none(this)"><a href="javascript: void(0)">%(none)s</a> </span><span onclick="javascript:$(this).parent().parent().hide();" class="close btn">%(ok)s</span></div><div id="id_dept"><ul %(attr)s>%(items)s</ul></div></div></span>') % html_el else: return u'<input type=hidden><input value="%(disp)s" type=hidden>%(value)s<div id="show_deptment"><div id=%(uid)s><ul %(attr)s>%(items)s</ul></div><script>render_dept_($("#%(uid)s"),false,true)</script></div>' % html_el except: print_exc()
def limit_parent_to(self, queryset): #根部门不存在上级部门. if self.pk == 1: return Department.objects.none() valid_depts = filterdata_by_user(queryset, threadlocals.get_current_user()) if self.pk: invalid_pks = [self.pk]#限制不能设置一个部门的上级部门为其自身 for dept in valid_depts: if self in get_dept_parents(valid_depts,dept):#限制不能设置一个部门的上级部门为子部门 invalid_pks.append(dept.pk) return valid_depts.exclude(pk__in=invalid_pks) else: return valid_depts
def limit_parent_to(self, queryset): #根区域不存在上级区域. if self.pk == 1: from django.db.models.query import QuerySet return Area.objects.none() valid_areas = filterdata_by_user(queryset, threadlocals.get_current_user()) if self.pk: invalid_pks = [self.pk] #限制不能设置一个区域的上级区域为其自身 for a in Area.objects.all(): if self in a.parents(): #限制不能设置一个区域的上级区域为子区域 invalid_pks.append(a.pk) return valid_areas.exclude(pk__in=invalid_pks) else: return valid_areas
def comm_error_msg(request): global g_monitor_server if not g_monitor_server: #print '--error--first time=',g_monitor_server g_monitor_server = start_dict_server() cdatas = [] cc = {} global g_dev_comm_error_list if g_dev_comm_error_list: #print '---dev_list exist' dev_list = g_dev_comm_error_list else: #print '---dev_list not exist' dev_list = filterdata_by_user( Device.objects.filter(device_type=DEVICE_ACCESS_CONTROL_PANEL), request.user) g_dev_comm_error_list = dev_list #print '----dev_list=',dev_list, dev_list.count() #print '-----dev_list=', dev_list icount = 0 for dev in dev_list: if not dev.enabled: #不监控已禁用的设备 continue key = dev.command_temp_list_name() ucmd = g_monitor_server.get_from_dict(key) if ucmd is None: continue ret = ucmd['CmdReturn'] #print ret if (-400 < ret < -200) or (ret < -10000) or (ret == -1001): icount += 1 cdata = { 'devname': ucmd['SN'].alias, } cdatas.append(cdata) cc = { 'cnt': icount, 'data': cdatas, } #g_monitor_server.close() rtdata = simplejson.dumps(cc) return HttpResponse(smart_str(rtdata))
def mcegroup_emp_op(request): #删除某个组中某个或某些人员 group_id = request.GET.get("data", 0) emps = request.GET.get("emps", '') emps = emps.split(',') group = AccMoreCardEmpGroup.objects.filter(pk=int(group_id)) group_obj = group and group[0] or None #level_obj实际不为空 emp_objs = Employee.objects.filter(pk__in=emps) if group_obj: for e in emp_objs: e.morecard_group = None e.save() #group_obj.employee_set.remove(e) devs = filterdata_by_user(Device.objects.all(), request.user) #print '---devs=',devs sync_set_userinfo(devs, emp_objs) return HttpResponse(smart_str({'ret': 1})) else: return HttpResponse(smart_str({'ret': 0}))
def mcegroup_emp_op(request): #删除某个组中某个或某些人员 group_id = request.GET.get("data", 0) emps = request.GET.get("emps" ,'') emps = emps.split(',') group = AccMoreCardEmpGroup.objects.filter(pk = int(group_id)) group_obj = group and group[0] or None #level_obj实际不为空 emp_objs = Employee.objects.filter(pk__in = emps) if group_obj: for e in emp_objs: e.morecard_group = None e.save() #group_obj.employee_set.remove(e) devs = filterdata_by_user(Device.objects.all(), request.user) #print '---devs=',devs sync_set_userinfo(devs, emp_objs) return HttpResponse(smart_str({ 'ret': 1 })) else: return HttpResponse(smart_str({ 'ret': 0 }))
def render(self, name, data, attrs=None, choices=()): import time if data is not None: model=self.choices.queryset.model try: datapk = data data=[model.objects.get(pk=int(d)) for d in datapk] except: print_exc() if attrs: self.attrs.update(attrs) if 'id' not in self.attrs: self.attrs['id']='id_'+name self.attrs['class']=self.attrs['class']+' filetree' self.attrs = self.build_attrs(self.attrs, name=name) try: vdata =filterdata_by_user(self.choices.queryset.all().filter(isvalid=1),threadlocals.get_current_user()) # for ii in vdata: # if ii.parent_id is not None: # l=[e for e in vdata if e.id==ii.parent_id] # if not l:ii.parent_id=None html = u"<div id='999' class='div_box1' style='padding-left: 30px;'>"\ "<p style='margin-right: 40px;'>%s %s </p></div>" % (_(u'开始时间'), _(u'结束时间')) html+=TimeSliceTree(vdata).html_ul_li(data=data and datapk or []) html_el={\ "disp": data and ",".join([u"%s"%d for d in data]) or "", "name": name, "value": data and "".join(['<input type=hidden name="%s" value="%s">'%(name, d.pk) for d in data]) or "", "attr": flatatt(self.attrs), "id": self.attrs['id'], 'uid': "%s"%id(self), "items": html, "ok":_(u"确定"), "selectchildren":_(u"包含下级")} if self.flat: #平铺型 return u'<input value="%(disp)s" type=hidspan_selectchildrenspan_selectchildrenden>%(value)s<div id="show_deptment"><div id="id_dept"><span id=%(uid)s></span><ul %(attr)s>%(items)s</ul></div><script>render_dept_tree("%(uid)s")</script></div>'%html_el else: #下拉框型 return ('<input id="dropTime" type="text" class="wZBaseCharField input_showDeptTree" readonly="readonly" value="%(disp)s">%(value)s'+\ u'<span class="btn_showDeptTree" style="width:200px;"><img onclick="render_dept_dropdown(this, true)" src="/media/img/sug_down_on.gif" id="id_drop_dept"><div id="show_deptment" style="display: none;""><div class="title"><span class="span_selectchildren displayN"></span><span onclick="javascript:$(this).parent().parent().hide();" class="close btn">%(ok)s</span></div><div id="id_dept"><ul %(attr)s>%(items)s</ul></div></div></span>')%html_el except: print_exc()
def Employee_objects(request): from dbapp.datautils import filterdata_by_user from mysite.personnel.models import Employee return filterdata_by_user(Employee.objects.all(),request.user)
def action(self): from mysite.att.models.user_temp_sch import USER_TEMP_SCH filterdata_by_user(USER_TEMP_SCH.objects.all(), self.request.user).delete()
def action(self): filterdata_by_user(self.model.objects.all(), self.request.user).delete()
def render(self, name, data, attrs=None, choices=()): import time from dbapp.urls import surl if data is not None: model = self.choices.queryset.model try: datapk = data data = [model.objects.get(pk=int(d)) for d in datapk] except: print_exc() if attrs: self.attrs.update(attrs) if 'id' not in self.attrs: self.attrs['id'] = 'id_' + name self.attrs['class'] = self.attrs['class'] + ' filetree' self.attrs = self.build_attrs(self.attrs, name=name) try: if not required: btn_cancel = '''<span class="span_selectNone Link_blue1" onclick="clear_none(this)"> <a href="javascript: void(0)">%(none)s</a> </span> ''' % { "none": (u"%s" % _(u"撤销选择")).capitalize() } vdata = filterdata_by_user( self.choices.queryset.all().filter(isvalid=1), threadlocals.get_current_user()) html = u"<div id='999' class='title' style='margin-left: 0px;'>"\ "<p style='margin-right: 110px;'>%s %s %s</p></div>" % (_(u'开始时间'), _(u'结束时间'), _(u'金额')) html += DeptTree(vdata).html_ul_li(data=data and datapk or []) need_async_nodes = [] html_el = { "disp": data and ",".join([u"%s" % d for d in data]) or "", "name": name, "value": data and "".join([ '<input type=hidden name="%s" value="%s">' % (name, d.pk) for d in data ]) or "", "attr": flatatt(self.attrs), "id": self.attrs['id'], 'uid': "%s" % id(self), "items": html, "none": btn_cancel, "ok": _(u"确定"), "selectchildren": u"%s" % _(u"包含下级"), "need_async_nodes": ",".join(need_async_nodes), "surl": surl, } if self.flat: #平铺型 return u'<input value="%(disp)s" type=hidden>%(value)s<div id="show_deptment"><div id="id_dept"><span id=%(uid)s></span><ul %(attr)s>%(items)s</ul></div><script>render_dept_tree("%(uid)s")</script></div>' % html_el else: #下拉框型 return '''<input type="text" id="splitTime_val" class="wZBaseCharField input_showDeptTree" readonly="readonly" value="%(disp)s"/>%(value)s<span class="btn_showDeptTree"> <img onclick="javascript:$(this).parent().find('#show_deptment').show();" src="/media/img/sug_down_on.gif" id="id_drop_dept"/> <div id="show_deptment" style="display: none;"> <div class="title"> <span class="span_selectchildren"> <span> <input type="checkbox" id="id_selectchildren" checked="checked" ></input> </span> <span class="title_selectchildren">%(selectchildren)s </span> </span> <span onclick="javascript:$(this).parent().parent().hide();" class="close btn">%(ok)s</span> </div> <div id="id_dept"> <ul id="%(uid)s" %(attr)s>%(items)s</ul> <script> render_dropdown($("#%(uid)s").parent().parent(), true,'%(need_async_nodes)s'); </script> </div> </div> </span> ''' % html_el # return ('<input type="text" id="splitTime_val" class="wZBaseCharField input_showDeptTree" readonly="readonly" value="%(disp)s">%(value)s'+\ # u'<span class="btn_showDeptTree"><img onclick="render_dropdown(this, true)" src="/media/img/sug_down_on.gif" id="id_drop_dept"><div id="show_deptment" style="display: none;"><div class="title"><span class="span_selectchildren" displayN></span><span onclick="javascript:$(this).parent().parent().hide();" class="close btn">%(ok)s</span></div><div id="id_dept"><ul %(attr)s>%(items)s</ul></div></div></span>')%html_el except: print_exc()
def render(self, name, data, attrs=None, choices=()): import time from dbapp.urls import surl if data is not None: model = self.choices.queryset.model try: datapk = data data = [model.objects.get(pk=int(d)) for d in datapk] except: print_exc() if attrs: self.attrs.update(attrs) if 'id' not in self.attrs: self.attrs['id'] = 'id_' + name self.attrs['class'] = self.attrs['class'] + ' filetree' self.attrs = self.build_attrs(self.attrs, name=name) try: vdata = filterdata_by_user( self.choices.queryset.all().filter(device_type=5), threadlocals.get_current_user()) html = DeviceTree(vdata).html_ul_li(data=data and datapk or []) need_async_nodes = [] html_el = { "disp": data and ",".join([u"%s" % d for d in data]) or "", "name": name, "value": data and "".join([ '<input type=hidden name="%s" value="%s">' % (name, d.pk) for d in data ]) or "", "attr": flatatt(self.attrs), "id": self.attrs['id'], 'uid': "%s" % id(self), "items": html, "ok": _(u"确定"), "selectchildren": u"%s" % _(u"全选/取消全选"), "need_async_nodes": ",".join(need_async_nodes), "surl": surl } if self.flat: #平铺型 return u'<input value="%(disp)s" type=hidden>%(value)s<div id="show_deptment"><div id="id_dept"><span id=%(uid)s></span><ul %(attr)s>%(items)s</ul></div><script>render_dept_tree("%(uid)s")</script></div>' % html_el else: #下拉框型 return '''<input type="text" id="dropDevice" class="wZBaseCharField input_showDeptTree" readonly="readonly" value="%(disp)s"/>%(value)s<span class="btn_showDeptTree"> <img onclick="javascript:$(this).parent().find('#show_deptment').show();" src="/media/img/sug_down_on.gif" id="id_drop_dept"/> <div id="show_deptment" style="display: none;"> <div class="title"> <span class="span_selectchildren"> <span> <input type="checkbox" id="id_select_all" onclick='check_all($("#%(uid)s").parent().parent());' ></input> </span> <span class="title_selectchildren" id="ck_title">%(selectchildren)s </span> </span> <span onclick="javascript:$(this).parent().parent().hide();" class="close btn">%(ok)s</span> </div> <div id="id_dept"> <ul id="%(uid)s" %(attr)s>%(items)s</ul> <script> render_dropdown($("#%(uid)s").parent().parent(), true,'%(need_async_nodes)s'); </script> </div> </div> </span> ''' % html_el # return ('<input id="dropDevice" type="text" class="wZBaseCharField input_showDeptTree" readonly="readonly" value="%(disp)s">%(value)s'+\ # u'<span class="btn_showDeptTree" style="width:200px;"><img onclick="render_dept_dropdown(this, true)" src="/media/img/sug_down_on.gif" id="id_drop_dept"><div id="show_deptment" style="display: none;"><div class="title"><span class="span_selectchildren displayN"></span><span onclick="javascript:$(this).parent().parent().hide();" class="close btn">%(ok)s</span></div><div id="id_dept"><ul %(attr)s>%(items)s</ul></div></div></span>')%html_el except: print_exc()
def render(self, name, data, attrs=None): from django.core.urlresolvers import reverse from dbapp.urls import surl if data is not None: try: data = int(data) except: pass if type(data) in (int, long): data = self.choices.queryset.model.objects.get(pk=data) if attrs: self.attrs.update(attrs) if 'id' not in self.attrs: self.attrs['id'] = 'id_' + name self.attrs['class'] = self.attrs['class'] + ' filetree r' self.attrs = self.build_attrs(self.attrs, name=name) required = "" # if hasattr(self.choices.field, "required") and self.choices.field.required: # required = "class='wZBaseCharField required input_showDeptTree'" try: vdata = filterdata_by_user( self.choices.queryset.all().filter(device_type=5), threadlocals.get_current_user()) need_async_nodes = [] btn_cancel = "" if not required: btn_cancel = '''<span class="span_selectNone Link_blue1" onclick="clear_none(this)"> <a href="javascript: void(0)">%(none)s</a> </span> ''' % { "none": (u"%s" % _(u"撤销选择")).capitalize() } html = DeviceTree(vdata).html_ul_li(data and [data.pk] or []) html_el = { "disp": data or "", "name": name, "value": data and data.pk or "", "attr": flatatt(self.attrs), "required": required, "id": self.attrs['id'], "uid": "%s" % id(self), "none": btn_cancel, "items": html, "ok": _(u"确定"), "need_async_nodes": ",".join(need_async_nodes), "surl": surl, } if self.flat == False: #平铺 return u'''<input %(required)s id="dropDevice" class="wZBaseCharField input_showDeptTree" type="text" readonly="readonly" value="%(disp)s"/><input type=hidden name="%(name)s" value="%(value)s"/> <span class="btn_showDeptTree"> <img onclick="javascript:$(this).parent().find('#show_deptment').show();" src="/media/img/sug_down_on.gif" id="id_drop_dept"/> <div id="show_deptment" style="display: none;"> <div class="title"> %(none)s <span onclick="javascript:$(this).parent().parent().hide();" class="close btn">%(ok)s</span> </div> <div id="id_dept"> <ul id="%(uid)s" %(attr)s>%(items)s</ul> <script> render_dropdown($("#%(uid)s").parents("#show_deptment"), false,'%(need_async_nodes)s'); </script> </div> </div> </span> ''' % html_el # return u'''<input %(required)s id="dropDevice" class="wZBaseCharField input_showDeptTree" type="text" readonly="readonly" value="%(disp)s"><input type=hidden name="%(name)s" value="%(value)s"/>' # <span class="btn_showDeptTree"> # <img onclick="render_dept_dropdown(this, false)" src="/media/img/sug_down_on.gif" id="id_drop_dept"> # <div id="show_deptment" style="display: none;"> # <div class="title"> # %(none)s # # <span onclick="javascript:$(this).parent().parent().hide();" class="close btn">%(ok)s</span> # </div> # <div id="id_dept"> # <ul id="%(uid)s" %(attr)s>%(items)s</ul> # <script> # render_dept_dropdown($("#%(uid)s").parents("#show_deptment"), false,'%(need_async_nodes)s'); # ajax_render_dept_($("#%(uid)s").parent().parent("#show_deptment"),$("#%(uid)s"),"%(need_async_nodes)s",false,"%(surl)s"); # </script> # </div> # # </div> # </span>''' % html_el else: return u'<input type=hidden><input value="%(disp)s" type=hidden>%(value)s<div id="show_deptment"><div id=%(uid)s><ul %(attr)s>%(items)s</ul></div><script>render_dept_($("#%(uid)s"),false,true)</script></div>' % html_el except: print_exc()
def limit_device_to(self, queryset): print '--------------------------queryset=', queryset return filterdata_by_user( queryset.filter(device_type=DEVICE_ACCESS_CONTROL_PANEL), threadlocals.get_current_user()) #只要门禁控制器
def render(self, name, data, attrs=None, choices=()): import time from dbapp.urls import surl from mysite.iclock.iutils import get_max_in if data is not None: model = self.choices.queryset.model try: #data=list(model.objects.filter(pk__in=datapk)) data = get_max_in(model.objects.all(), data) except: print_exc() MCls = self.choices.queryset.model value = [] checked_ids = [] if data: for d in data: checked_ids.append(d.pk) value.append(u"%s" % d.pk) value = u",".join(value) if attrs: self.attrs.update(attrs) checkable = True if self.attrs.has_key("checkable"): checkable = self.attrs["checkable"] if 'id' not in self.attrs: self.attrs['id'] = (u"id_%(n)s_%(t)s" % { "n": name, "t": time.time() }).replace(".", "") self.attrs['class'] = self.attrs['class'] + ' filetree' self.attrs = self.build_attrs(self.attrs, name=name) dict_rows = [] #第一级的数据 required = False if hasattr(self.choices.field, "required") and self.choices.field.required: required = True from django.db import connection as conn from django import db m_id = "id" m_p = "parent_id" m_n = "name" s_id = "dept_id" r_m = "deptadmin" TreeModel = MCls sup_id = "supdeptid" if TreeModel.__name__ == "Department": m_id = "id" m_p = "parent_id" m_n = "name" s_id = "dept_id" r_m = "deptadmin" sup_id = "supdeptid" elif TreeModel.__name__ == "Area": m_id = "id" m_p = "parent_id" m_n = "areaname" s_id = "area_id" r_m = "areaadmin" sup_id = "parent_id" try: #新增的时候不需要限制 uobj = threadlocals.get_current_user() vdata = self.choices.queryset.all() vdata = filterdata_by_user(vdata, uobj) async_fields = [m_id, m_p, m_n] if not uobj.is_superuser: #不是超级管理员 select = "select distinct %s from %s where user_id=%s and %s.%s=%s" % ( s_id, r_m, uobj.pk, TreeModel._meta.db_table, sup_id, s_id) vdata = vdata.extra(select={m_p: select}) vdata = list(vdata.values(*async_fields)) for e in vdata: tmp_vdata = {} if e[m_p] is None: if e[m_id] in checked_ids: checked = True else: checked = False tmp_vdata = { "id": e[m_id], "pId": 0, "name": e[m_n], "isParent": False, "checked": checked } for ee in vdata: if ee[m_p] == e[m_id]: tmp_vdata["isParent"] = True break if tmp_vdata: dict_rows.append(tmp_vdata) dict_attrs = { "disp": data and ",".join([u"%s" % d for d in data]) or "", "flat": self.flat, "multiple": self.multiple, "name": name, "value": value, "attr": self.attrs, "id": self.attrs['id'], "dict_rows": dict_rows, "surl": surl, "required": required, "checkable": checkable, } #只是把属性传送到前端,由前端去处理 return u''' <ul class="tree" id = "%(id)s"> </ul> <div> <script> render_tree(%(attrs)s); </script> </div> ''' % { "id": self.attrs['id'], "attrs": json.dumps(dict_attrs) } except: print_exc()
def get_children_nodes(request): from django.db import models from dbapp.datautils import filterdata_by_user from mysite.personnel.models.depttree import DeptTree from base.middleware import threadlocals import json from mysite.iclock.iutils import get_max_in limit = request.REQUEST.get("limit") multiple = request.REQUEST.get("multiple") #是否多选 async_checked = request.REQUEST.get("checked") #当前异步节点是否选中 edit_object_id = request.REQUEST.get( "edit_object_id" ) #当前编辑的对象,如人员ID,如果是树形控件本身对象,可能需要按照这个iD进行过滤limit_to_parent checked_ids = request.REQUEST.get("checked_ids") #需要选中的记录 async_id = request.REQUEST.get("id") #异步加载的ID has_checked_nodes = request.REQUEST.get("has_checked_nodes") #前端是否有选中的记录 select_childrens = request.REQUEST.get("select_childrens", None) #是否选择下级 app_label, model_name = request.REQUEST.get("async_model").split("__") TreeModel = GetModel(app_label, model_name) #当前模型对象 obj_tree = None async_obj = None try: if edit_object_id != "" and limit == "true": try: obj_tree = TreeModel.objects.get( pk=edit_object_id) #当前树形控件选中的记录 except: pass async_obj = TreeModel.objects.get(pk=async_id) except: pass m_id = "id" m_p = "parent_id" m_n = "name" s_id = "dept_id" r_m = "deptadmin" sup_name = "supdeptid" if TreeModel.__name__ == "Department": m_id = "id" m_p = "parent_id" m_n = "name" s_id = "dept_id" r_m = "deptadmin" sup_name = "supdeptid" elif TreeModel.__name__ == "Area": m_id = "id" m_p = "parent_id" m_n = "areaname" s_id = "area_id" r_m = "areaadmin" sup_name = "parent_id" #新增的时候不需要限制 uobj = threadlocals.get_current_user() vdata = TreeModel.objects.all().order_by(m_n) if obj_tree and hasattr(obj_tree, "limit_parent_to"): vdata = obj_tree.limit_parent_to(vdata) else: vdata = filterdata_by_user(vdata, uobj) async_fields = [m_id, m_p, m_n] if not uobj.is_superuser: #不是超级管理员 select = "select distinct %s from %s where user_id=%s and %s.%s=%s" % ( s_id, r_m, request.user.pk, TreeModel._meta.db_table, sup_name, s_id) #print "select",select vdata = vdata.extra(select={m_p: select}) vdata = list(vdata.values(*async_fields)) checked = False checked_objs = None if multiple == "true" \ and async_checked == "true" \ and select_childrens == "true": #多选,并且该节点选中了,包含下级选中了 checked = True elif multiple == "false" and has_checked_nodes == "true": #单选,前端已经选中了节点,后端就不要传选中的记录了。 checked = False else: #选中本来应该有关联的数据 if checked_ids: checked_ids = checked_ids.split(",") qs = TreeModel.objects.all() checked_objs = get_max_in(qs, checked_ids, "pk__in") children = [] for e in vdata: tmp_data = {} if e[m_p] == async_obj.id: tmp_data = { "id": e[m_id], "pId": e[m_p], "name": e[m_n], "isParent": False, "checked": checked } if checked_objs: for ce in checked_objs: if e[m_id] == ce.pk: tmp_data["checked"] = True for ee in vdata: if ee[m_p] == e[m_id]: tmp_data["isParent"] = True break if tmp_data: children.append(tmp_data) return getJSResponse(json.dumps(children))
def limit_video_linkageio_to(self, queryset): print '-----------------------', filterdata_by_user(queryset.filter(device_type = DEVICE_VIDEO_SERVER), threadlocals.get_current_user()) #只要门禁控制器 return filterdata_by_user(queryset.filter(device_type = DEVICE_VIDEO_SERVER), threadlocals.get_current_user()) #只要门禁控制器
def limit_device_to(self, queryset): print '--------------------------queryset=',queryset return filterdata_by_user(queryset.filter(device_type = DEVICE_ACCESS_CONTROL_PANEL), threadlocals.get_current_user()) #只要门禁控制器