def get_issues(request, project_id): request_dict = request.GET.dict() if "label_ids" in request_dict: del request_dict["label_ids"] form = IssueSearchForm(label_ids=request.GET.getlist("label_ids"), **request_dict) project_id = long(project_id) project = ProjectModel.get_by_id(project_id) if project is None: raise Http404 if request.user.permission != UserPermission.root and request.user.key().id() not in project.member_ids: raise Http403 if form.keyword.data: # search by keyword issues, total = IssueModel.search( project_id=project_id, keyword=form.keyword.data, floor_lowest=None if form.floor_lowest.data == 0 else form.floor_lowest.data, floor_highest=None if form.floor_highest.data == 0 else form.floor_highest.data, label_ids=form.label_ids.data, index=form.index.data, size=utils.default_page_size, ) else: query = IssueModel.all().filter("project =", project.key()) # is_close filter if form.status.data == "open": query = query.filter("is_close =", False) elif form.status.data == "closed": query = query.filter("is_close =", True) # floor filter if form.floor_lowest.data != 0: query = query.filter("floor >=", form.floor_lowest.data) if form.floor_highest.data != 0: query = query.filter("floor <=", form.floor_highest.data) # label filter form.label_ids.data = [long(x) for x in form.label_ids.data if x] for label_id in form.label_ids.data: query = query.filter("label_ids in", [label_id]) # order if form.floor_lowest.data | form.floor_highest.data == 0: query = query.order("-create_time") else: query = query.order("floor").order("-create_time") total = query.count() issues = query.fetch(utils.default_page_size, form.index.data * utils.default_page_size) return JsonResponse(PageList(form.index.data, utils.default_page_size, total, issues))
def count_issues(request, project_id): request_dict = request.GET.dict() if "label_ids" in request_dict: del request_dict["label_ids"] form = IssueSearchForm(label_ids=request.GET.getlist("label_ids"), **request_dict) project = ProjectModel.get_by_id(long(project_id)) if project is None: raise Http404 labels = LabelModel.all().filter("project =", project.key()).fetch(100) def append_floor_query(query): # floor filter if form.floor_lowest.data != 0: query = query.filter("floor >=", form.floor_lowest.data) if form.floor_highest.data != 0: query = query.filter("floor <=", form.floor_highest.data) return query def append_label_query(query): # label filter form.label_ids.data = [long(x) for x in form.label_ids.data if x] for label_id in form.label_ids.data: query = query.filter("label_ids in", [label_id]) return query def append_close_query(query): # is_close filter if form.status.data == "open": query = query.filter("is_close =", False) elif form.status.data == "closed": query = query.filter("is_close =", True) return query def append_order_query(query): # order if form.floor_lowest.data | form.floor_highest.data == 0: query = query.order("-create_time") else: query = query.order("floor").order("-create_time") return query query = IssueModel.all().filter("project =", project.key()) query = append_floor_query(query) query = append_label_query(query) query = query.filter("is_close =", True) query = append_order_query(query) count_closed = query.count() query = IssueModel.all().filter("project =", project.key()) query = append_floor_query(query) query = append_label_query(query) query = query.filter("is_close =", False) query = append_order_query(query) count_open = query.count() count_labels = {} for label in labels: query = IssueModel.all().filter("project =", project.key()) query = append_floor_query(query) query = append_close_query(query) query = query.filter("label_ids in", [label.key().id()]) query = append_order_query(query) count_labels[str(label.key().id())] = query.count() result = {"all": count_open + count_closed, "open": count_open, "closed": count_closed, "labels": count_labels} return JsonResponse(result)