def get_device_stat_detail(request, form, offset, length): user = cast_staff(request.user) form = deserialize_form(form) filter_form = DeviceStatForm(form) if not filter_form.is_valid(): logger.warn("form is invalid") logger.warn(filter_form.errors) return _invalid_data_json results = stat_device(user, filter_form, True) total = results.count() lst = [i['did'] for i in results if i['did']] brands = len(set(lst)) capacity = count_device(user, filter_form) results = results[offset: offset + length] logger.debug(results) dict_list = [] for result in results: dict_list.append(device_record_to_dict(result)) return simplejson.dumps({ 'ret_code': 0, 'logs': dict_list, 'total': total, 'capacity': capacity, 'brands': brands })
def filter_org_statistics(request, form, offset, length, mode, level): user = cast_staff(request.user) form = deserialize_form(form) filter_form = OrganizationStatForm(form) if not filter_form.is_valid(): logger.warn("form is invalid") logger.warn(filter_form.errors) return _invalid_data_json logs = filter_org_logs(filter_form, mode) aggregate_result = logs.aggregate(capacity=Sum('appCount')) logger.debug(aggregate_result) capacity = aggregate_result['capacity'] or 0 levels = available_levels(mode, level) keys = [l if l != 'emp' else 'uid' for l in levels] records = logs.values(*keys).annotate(total_device_count=Count('did', distinct=True), total_popularize_count=Sum('popularizeAppCount'), total_app_count=Sum('appCount')) total = records.count() brands = sum([i['total_device_count'] for i in records]) records = records[offset: offset + length] items = [] for record in records: items.append(org_record_to_dict(record, mode, level)) #print [i['total_device_count'] for i in items] return simplejson.dumps({ 'ret_code': 0, 'logs': items, 'total': total, 'capacity': capacity, 'brands': brands })
def can_add_organization(user): if user.is_superuser or user.is_staff: return True if not user.has_perm("mgr.add_organization"): return False user = cast_staff(user) return user.organization.real_type != ContentType.objects.get_for_model(Store)
def can_delete_store(user): if user.is_superuser or user.is_staff: return True if not user.has_perm("mgr.delete_organization"): return False user = cast_staff(user) logger.debug("in store? " + str(user.in_store())) return not user.in_store()
def user(request): if request.user.is_superuser or request.user.is_staff: organizations = Organization.objects.all() if request.user.is_superuser: query_set = Staff.objects.exclude(is_superuser=True) else: query_set = Employee.objects.all() else: user = cast_staff(request.user) organizations = user.organization.cast().descendants_and_self() query_set = Employee.objects.filter(organization__in=organizations) query = request.GET.get("q", None) if query: query_set = query_set.filter(Q(username__contains=query) | Q(email__contains=query) | Q(realname__contains=query)) query_set = query_set.order_by("-pk") table = StaffTable(query_set) employeeForm = EmployeeForm() employeeForm.fields["organization"].queryset = organizations adminForm = AdminForm() resetPasswordForm = ResetPasswordForm() RequestConfig(request, paginate={"per_page": settings.PAGINATION_PAGE_SIZE}).configure(table) groupsWidget = None permissionsWidget = None if request.user.is_superuser or request.user.is_staff: groupChoices=[(g.pk, g.name) for g in Group.objects.all()] groupChoices.insert(0, ("", "-------")) groupsWidget = forms.Select(choices=groupChoices) permissionsWidget = forms.SelectMultiple(choices=permissions.get_available_permissions()) return render(request, "user.html", { "table": table, "query": query, "groupsWidget": groupsWidget, "permissionsWidget": permissionsWidget, "employeeForm": employeeForm, "adminForm": adminForm, "resetPasswordForm": resetPasswordForm, })
def get_installed_capacity(request, form, offset, length): user = cast_staff(request.user) form = deserialize_form(form) filter_form = InstalledCapacityFilterForm(form) if not filter_form.is_valid(): logger.warn("form is invalid") logger.warn(filter_form.errors) return _invalid_data_json results = filter_installed_capacity_logs(user, filter_form) total = results.count() brands = sum([i['count'] for i in results]) results = results[offset: offset + length] dict_list = [] for result in results: dict_list.append(installed_capacity_to_dict(result)) return simplejson.dumps({ 'ret_code': 0, 'logs': dict_list, 'total': total, 'brands': brands })
def get_flow_logs(request, form, offset, length): user = cast_staff(request.user) form = deserialize_form(form) filter_form = LogMetaFilterForm(form) if not filter_form.is_valid(): logger.warn("form is invalid") logger.warn(filter_form.errors) return _invalid_data_json logs = filter_flow_logs(user, filter_form) total = logs.count() brands = len(set([i.did for i in logs if i.did])) logs = logs[offset: offset + length] dict_list = [] for log in logs: dict_list.append(log_to_dict(log)) return simplejson.dumps({ 'ret_code': 0, 'logs': dict_list, 'total': total, 'brands': brands })
def organization(request): companyForm = CompanyForm() storeForm = StoreForm() regionForm = RegionForm() if request.user.is_superuser or request.user.is_staff: store_query_set = Store.objects.all() company_query_set = Company.objects.all() region_query_set = Region.objects.all() else: user = cast_staff(request.user) organization = user.organization.cast() #TODO 直接构造QuerySet if organization.real_type == ContentType.objects.get_for_model(Store): store = organization company = store.parent() region = company.parent() store_query_set = Store.objects.filter(pk=store.pk) company_query_set = Company.objects.filter(pk=company.pk) region_query_set = Region.objects.filter(pk=region.pk) elif organization.real_type == ContentType.objects.get_for_model(Company): company = organization region_query_set = Region.objects.filter(pk=company.parent().pk) company_query_set = Company.objects.filter(pk=company.pk) store_query_set = company.children() storeForm.fields["company"].queryset = company_query_set else: region = organization region_query_set = Region.objects.filter(pk=region.pk) company_query_set = region.children() store_query_set = Store.objects.filter(company__in=company_query_set) companyForm.fields["region"].queryset = region_query_set storeForm.fields["company"].queryset = company_query_set rq = request.GET.get("rq", None) if rq: region_query_set = region_query_set.filter(name__contains=rq) cq = request.GET.get("cq", None) if cq: company_query_set = company_query_set.filter(Q(code__contains=cq) | Q(name__contains=cq)) sq = request.GET.get("sq", None) if sq: store_query_set = store_query_set.filter(Q(code__contains=sq) | Q(name__contains=sq)) regionTable = RegionTable(region_query_set) storeTable = StoreTable(store_query_set) companyTable = CompanyTable(company_query_set) if rq: regionTable.empty_text = settings.NO_SEARCH_RESULTS if cq: companyTable.empty_text = settings.NO_SEARCH_RESULTS if sq: storeTable.empty_text = settings.NO_SEARCH_RESULTS RequestConfig(request, paginate={"per_page": 5}).configure(regionTable) RequestConfig(request, paginate={"per_page": 5}).configure(companyTable) RequestConfig(request, paginate={"per_page": 5}).configure(storeTable) return render(request, "organization.html", { "cq": cq, "sq": sq, "rq": rq, "companyForm": companyForm, "companyTable": companyTable, "storeForm": storeForm, "storeTable": storeTable, 'regionForm': regionForm, 'regionTable': regionTable });
def can_add_store(user): if user.is_superuser or user.is_staff: return True user = cast_staff(user) return user_has_perm("mgr.add_organization") and not user.in_store()
def render_updator(self, record): user = cast_staff(record.updator if record.updator else record.creator) return user.realname if user.realname else user.username
def can_change_region(user): if is_not_employee(user): return True user = cast_staff(user) return user.in_region() and user.has_perm("mgr.change_organization")
def can_change_store(user): return is_not_employee(user) or cast_staff(user).has_perm("mgr.change_organization")
def can_change_company(user): if user.is_superuser or user.is_staff: return True user = cast_staff(user) return not user.in_store() and user.has_perm("mgr.change_organization")
def in_region(user): return cast_staff(user).in_store()
def can_add_company(user): if user.is_superuser or user.is_staff: return True user = cast_staff(user) return user.in_region() and user.has_perm("mgr.add_organization")
def account(request): return render(request, "account.html", { "account": cast_staff(request.user), "form": ModifyPasswordForm() })
def render_creator(self, record): creator = cast_staff(record.creator) return creator.realname if creator.realname else creator.username