예제 #1
0
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
예제 #2
0
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()
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    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
예제 #6
0
    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()
예제 #7
0
파일: views.py 프로젝트: RockyLiys/erp
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))