def get_MultiSelect_objs(model, request): ''' 用来返回报表查询中选人控件选中了包含下级时的人员列表 model 选择的对象模型 例: Employee request 请求上下文 return 返回所选择的对象列表 ''' from mysite.iclock.iutils import get_dept_from_all, get_max_in userids = request.REQUEST.getlist('UserIDs') deptids = request.REQUEST.get('DeptIDs', "") u = [] if request: if userids[0]: u = userids elif len(deptids) > 0: dept_id = request.REQUEST.getlist("deptIDs") checked_child = request.REQUEST.get('deptIDschecked_child', None) if checked_child == "on" and dept_id: #包含部门下级 depts = get_dept_from_all(dept_id, request) user_list = get_max_in(model.all_objects.all(), depts, "DeptID__in") u = [e.pk for e in user_list] else: user_list = get_max_in(model.all_objects.all(), dept_id, "DeptID__in") u = [e.pk for e in user_list] return u
def select_all_emp_data(request, model_name): model = { "USER_TEMP_SCH": USER_TEMP_SCH, "USER_OF_RUN": USER_OF_RUN, } try: ignore_keys = [] Cls = model[model_name] qs = Cls.objects.all() dept_emp_all = request.REQUEST.get("dept_emp_all", None) if dept_emp_all == 'true': dept_childrens = request.REQUEST.get("dept_childrens", None) if dept_childrens == 'true': depts = request.REQUEST.get("UserID__DeptID__in", None) if depts: depts = depts.split(",") depts = get_dept_from_all(depts, request) qs = get_max_in(qs, depts, "UserID__DeptID__in") ignore_keys.extend(["UserID__DeptID__in", "UserID__in"]) else: ignore_keys.append("UserID__DeptID__in") return model_data_list(request, Cls, qs, ignore_keys=ignore_keys) except: import traceback traceback.print_exc()
def value_from_datadict(self, data, files, name): # from django.utils.datastructures import MultiValueDict, MergeDict # if isinstance(data, (MultiValueDict, MergeDict)): # dept_all = data.getlist("dept_all")#'on'或者'' # # if dept_all:#选择部门下所有人员 # dept_id = data.getlist("deptIDs") # #print '------dept_id=',dept_id # from mysite.personnel.models import Employee # return [e.pk for e in MeetingEmp.objects.filter(DeptID__in = dept_id)] # else: # return data.getlist(name) # else: # return data.get(name, None) from django.utils.datastructures import MultiValueDict, MergeDict from mysite.personnel.models import Employee from mysite.personnel.models.empwidget import filter_for_select_emp from mysite.iclock.iutils import get_dept_from_all, get_max_in if isinstance(data, (MultiValueDict, MergeDict)): dept_all = data.getlist(u"%s_dept_all" % name) #'on'或者'' if dept_all: #选择部门下所有人员 dept_id = data.getlist("deptIDs") deptIDschecked_child = data.get("deptIDschecked_child") if deptIDschecked_child == "on": request = get_current_request() dept_id = get_dept_from_all(dept_id, request) UserID = get_max_in(filter_for_select_meetingemp(data), dept_id, "DeptID__in") print "data", data print "data.meetingid", data.getlist("meetingID") print "------------", int(data.getlist("meetingID")[0]) print "UserID", UserID u = [e.pk for e in UserID] return u else: return data.getlist(name) else: return data.get(name, None)
def value_from_datadict(self, data, files, name): from django.utils.datastructures import MultiValueDict, MergeDict from mysite.personnel.models import Employee from mysite.iclock.iutils import get_dept_from_all, get_max_in if isinstance(data, (MultiValueDict, MergeDict)): dept_all = data.getlist(u"%s_dept_all" % name) #'on'或者'' if dept_all: #选择部门下所有人员 dept_id = data.getlist("deptIDs") deptIDschecked_child = data.get("deptIDschecked_child") if deptIDschecked_child == "on": request = get_current_request() dept_id = get_dept_from_all(dept_id, request) UserID = get_max_in(filter_for_select_emp(data), dept_id, "DeptID__in") u = [e.pk for e in UserID] return u[:1001] else: return data.getlist(name) else: return data.get(name, None)
def limit_originalrecord_to(self, queryset, user): from base.middleware.threadlocals import get_current_request request = get_current_request() from mysite.iclock.iutils import get_dept_from_all, get_max_in deptids = request.GET.get('UserID__DeptID__in', "").split(',') meetingids = request.GET.get('meetingID__in', "").split(',') typeids = request.GET.get('checkType__in', "").split(',') users = request.GET.get('user__in', "") if users == "": users = None list_user = list(str(users).split(',')) user_list = [] if request: if len(deptids) > 0: dept_id = deptids checked_child = request.GET.get('deptIDschecked_child', None) if checked_child == "on" and dept_id: #包含部门下级 depts = get_dept_from_all(dept_id, request) if len(meetingids) > 0: meetingid = meetingids if meetingid[0] != "": if len(typeids) > 0: typeid = typeids if typeid[0] != "": user_list = get_max_in( OriginalRecord.objects.filter( meetingID__in=meetingid, checkType__in=typeid), depts, "user__DeptID__in") else: user_list = get_max_in( OriginalRecord.objects.filter( meetingID__in=meetingid), depts, "user__DeptID__in") elif len(typeids) > 0: typeid = typeids if typeid[0] != "": user_list = get_max_in( OriginalRecord.objects.filter( checkType__in=typeid), depts, "user__DeptID__in") else: user_list = get_max_in( OriginalRecord.objects.filter(), dept_id, "user__DeptID__in") elif typeids[0] != "": typeid = typeids user_list = get_max_in( OriginalRecord.objects.filter( checkType__in=typeid), depts, "user__DeptID__in") else: user_list = get_max_in( OriginalRecord.objects.all(), depts, "user__DeptID__in") else: user_list = get_max_in( OriginalRecord.objects.filter( meetingID__in=meetingid, checkType__in=typeid), depts, "user__DeptID__in") if dept_id[0] == "": if len(meetingids) > 0: meetingid = meetingids if meetingid[0] != "": if len(typeids) > 0: typeid = typeids if typeid[0] != "": if users != None: user_list = OriginalRecord.objects.filter( meetingID__in=meetingid, checkType__in=typeid, user__in=list_user) else: user_list = OriginalRecord.objects.filter( meetingID__in=meetingid, checkType__in=typeid) else: user_list = OriginalRecord.objects.filter( meetingID__in=meetingid) if users != None: if len(typeids) > 0: typeid = typeids if typeid[0] != "": user_list = OriginalRecord.objects.filter( meetingID__in=meetingid, checkType__in=typeid, user__in=list_user) else: user_list = OriginalRecord.objects.filter( meetingID__in=meetingid, user__in=list_user) else: if len(typeids) > 0 and users != None: typeid = typeids if typeid[0] != "": user_list = OriginalRecord.objects.filter( checkType__in=typeid, user__in=list_user) else: user_list = OriginalRecord.objects.filter( user__in=list_user) else: user_list = OriginalRecord.objects.filter( meetingID__in=meetingid, checkType__in=typeid, user__in=list_user) return user_list
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))