Пример #1
0
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
    })
Пример #2
0
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
    })
Пример #3
0
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)
Пример #4
0
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()
Пример #5
0
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,
    })
Пример #6
0
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
    })
Пример #7
0
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
    })           
Пример #8
0
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
    });
Пример #9
0
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()
Пример #10
0
 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 
Пример #11
0
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")
Пример #12
0
def can_change_store(user):
    return is_not_employee(user) or cast_staff(user).has_perm("mgr.change_organization")
Пример #13
0
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")
Пример #14
0
def in_region(user):
    return cast_staff(user).in_store()
Пример #15
0
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")
Пример #16
0
def account(request):
    return render(request, "account.html", {
        "account": cast_staff(request.user), 
        "form": ModifyPasswordForm()
    })
Пример #17
0
 def render_creator(self, record):
     creator = cast_staff(record.creator)
     return creator.realname if creator.realname else creator.username