Beispiel #1
0
def fh_cancel_audit(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    
    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)
    
    can_audit = validate_false_paper_have_type(queryset, [enums.FW_PAPER_TYPE, enums.BMW_PAPER_TYPE])
    if can_audit == False:
        messages.error(request, msg_paper_not_belong_fht)
        return None
    paper_st_right = validate_false_paper_status(request, queryset, [enums.PAPER_STATUS_FINISH], u'独立复核团队取消终审')
    if paper_st_right == False:
        return None
    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.    
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_fh_end_audit_perm(user) and not has_manage_perm(user):
            raise PermissionDenied
        
        n = queryset.count()
        if n:
            for obj in queryset :
                obj_display = force_unicode(obj)
                #remove paper FW audit info
                audits = PaperAudit.objects.filter(paper=obj, new_status=obj.status)
                for au in audits:
                    au.delete()
                    
                obj.status = enums.FH_PAPER_STATUS_WAIT_AUDIT_2
                obj.save()
                
                # change
                modeladmin.log_change(request, obj, obj_display)

            modeladmin.message_user(request, u'成功 取消 %(count)d %(items)s 复核终审.' % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        
        # Return None to display the change list page again.
        return None
    
    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }
    
    # Display the confirmation page
    return render_to_response('fh_cancel_audit_confirmation.html', context, context_instance=template.RequestContext(request))
Beispiel #2
0
def save_blank_data(request, respondent, q_cid_list):
    '''
    save_blank_data处理填空数据
    @param request:HTTP request请求
    @param respondent: respondent对象
    @param q_cid_list:填空字段组成的list
    '''
    pid = respondent.project_id
    tran_perm = has_tran_perm(request.user)
    manage_perm = has_manage_perm(request.user)
    dealer_code = ''
    for q_cid in q_cid_list:
        answer = request.POST.get(q_cid) or request.POST.getlist(q_cid)[0]
        #上面or部分只是为了绕过自动测试的BUG,让自动测试可以通过
        
        if respondent.project_id == 3:
            #MINI 问卷时检查dealer_code并做修改
            if 'dealer_code' == q_cid and not answer.endswith('_M'):
                answer = '%s_M' % answer
                dealer_code = answer
            if 'survey_code' == q_cid and answer.find(dealer_code) == -1:
                answer = answer.replace(dealer_code[:-2], dealer_code)
        
        question = QUESTION_DICT.get(q_cid)
        if not question:
            question = Question.objects.get(project=pid, cid=q_cid)
            QUESTION_DICT[(pid, question.cid)] = question
        tran_content = request.POST.get('%s__EN' % q_cid, '')
        if tran_perm and tran_content:
            respondent.set_translation(q_cid, tran_content)
        else:
            q_model = get_q_model(question)
            q_model.set_answer(respondent.id, answer)
            if manage_perm and tran_content:
                respondent.set_translation(q_cid, tran_content)
Beispiel #3
0
def save_multiple_blank_data(request, respondent, q_cid_dict):
    pid = respondent.project_id
    tran_perm = has_tran_perm(request.user)
    manage_perm = has_manage_perm(request.user)
    for cid in q_cid_dict.keys():
        answer = []
        answer_en = {}
        for q in q_cid_dict[cid]:
            q_cid = cid + "_" + q
            data = request.POST.get(q_cid)
            answer.append(data)
            data_en = request.POST.get(q_cid + '__EN', None)
            if data_en:
                answer_en[q_cid] = data_en
        question = QUESTION_DICT.get(cid)
        if not question:
            question = Question.objects.get(project=pid, cid=cid)
            QUESTION_DICT[(pid, question.cid)] = question
        if tran_perm and len(answer_en):
            respondent.set_translations(answer_en)
        else:
            q_model = get_q_model(question)
            q_model.set_answer(respondent.id, answer)
            if manage_perm:
                respondent.set_translations(answer_en)
Beispiel #4
0
def save_radio_data(request, respondent, q_cid_list):
    '''
    save_radio_data处理单选数据
    @param request:HTTP request请求
    @param respondent: respondent对象
    @param q_cid_list:单选字段组成的list
    '''
    pid = respondent.project_id
    tran_perm = has_tran_perm(request.user)
    manage_perm = has_manage_perm(request.user)
    for q_cid in q_cid_list:
        alt_cid = request.POST.get(q_cid, '').strip()
        question = QUESTION_DICT.get((pid, q_cid))
        if not question:
            question = Question.objects.get(project=pid, cid=q_cid)
            QUESTION_DICT[(pid, question.cid)] = question
        alt = ALTERNATIVE_DICT.get((pid, q_cid, alt_cid))
        if not alt:
            alt = Alternative.objects.get(question=question, cid=alt_cid)
            ALTERNATIVE_DICT[(pid, q_cid, alt_cid)] = alt
    
        q_model = get_q_model(question)
        tran_content = request.POST.get('%s__open__EN' % q_cid, '')
        if alt.open:
                open_content = request.POST.get('%s__open' % q_cid, '')
                q_model.set_answer(respondent.id, [alt.id, open_content])
        else:
            q_model.set_answer(respondent.id, alt.id)
        if manage_perm and tran_content:
            tran_content = request.POST.get('%s__open__EN' % q_cid, '')
            respondent.set_translation(q_cid, tran_content)
        if tran_perm:
            respondent.set_translation(q_cid, tran_content)
Beispiel #5
0
def save_multiple_blank_data(request, respondent, q_cid_dict):
    pid = respondent.project_id
    tran_perm = has_tran_perm(request.user)
    manage_perm = has_manage_perm(request.user)
    for cid in q_cid_dict.keys():
        answer = []
        answer_en = {}
        for q in q_cid_dict[cid]:
            q_cid = cid + "_" + q
            data = request.POST.get(q_cid)
            answer.append(data)
            data_en = request.POST.get(q_cid + '__EN', None)
            if data_en:
                answer_en[q_cid] = data_en
        question = QUESTION_DICT.get(cid)
        if not question:
            question = Question.objects.get(project=pid, cid=cid)
            QUESTION_DICT[(pid, question.cid)] = question
        if tran_perm and len(answer_en):
            respondent.set_translations(answer_en)
        else:
            q_model = get_q_model(question)
            q_model.set_answer(respondent.id, answer)
            if manage_perm:
                respondent.set_translations(answer_en)
Beispiel #6
0
def save_blank_data(request, respondent, q_cid_list):
    '''
    save_blank_data处理填空数据
    @param request:HTTP request请求
    @param respondent: respondent对象
    @param q_cid_list:填空字段组成的list
    '''
    pid = respondent.project_id
    tran_perm = has_tran_perm(request.user)
    manage_perm = has_manage_perm(request.user)
    dealer_code = ''
    for q_cid in q_cid_list:
        answer = request.POST.get(q_cid) or request.POST.getlist(q_cid)[0]
        #上面or部分只是为了绕过自动测试的BUG,让自动测试可以通过

        if respondent.project_id == 3:
            #MINI 问卷时检查dealer_code并做修改
            if 'dealer_code' == q_cid and not answer.endswith('_M'):
                answer = '%s_M' % answer
                dealer_code = answer
            if 'survey_code' == q_cid and answer.find(dealer_code) == -1:
                answer = answer.replace(dealer_code[:-2], dealer_code)

        question = QUESTION_DICT.get(q_cid)
        if not question:
            question = Question.objects.get(project=pid, cid=q_cid)
            QUESTION_DICT[(pid, question.cid)] = question
        tran_content = request.POST.get('%s__EN' % q_cid, '')
        if tran_perm and tran_content:
            respondent.set_translation(q_cid, tran_content)
        else:
            q_model = get_q_model(question)
            q_model.set_answer(respondent.id, answer)
            if manage_perm and tran_content:
                respondent.set_translation(q_cid, tran_content)
Beispiel #7
0
def save_radio_data(request, respondent, q_cid_list):
    '''
    save_radio_data处理单选数据
    @param request:HTTP request请求
    @param respondent: respondent对象
    @param q_cid_list:单选字段组成的list
    '''
    pid = respondent.project_id
    tran_perm = has_tran_perm(request.user)
    manage_perm = has_manage_perm(request.user)
    for q_cid in q_cid_list:
        alt_cid = request.POST.get(q_cid, '').strip()
        question = QUESTION_DICT.get((pid, q_cid))
        if not question:
            question = Question.objects.get(project=pid, cid=q_cid)
            QUESTION_DICT[(pid, question.cid)] = question
        alt = ALTERNATIVE_DICT.get((pid, q_cid, alt_cid))
        if not alt:
            alt = Alternative.objects.get(question=question, cid=alt_cid)
            ALTERNATIVE_DICT[(pid, q_cid, alt_cid)] = alt

        q_model = get_q_model(question)
        tran_content = request.POST.get('%s__open__EN' % q_cid, '')
        if alt.open:
            open_content = request.POST.get('%s__open' % q_cid, '')
            q_model.set_answer(respondent.id, [alt.id, open_content])
        else:
            q_model.set_answer(respondent.id, alt.id)
        if manage_perm and tran_content:
            tran_content = request.POST.get('%s__open__EN' % q_cid, '')
            respondent.set_translation(q_cid, tran_content)
        if tran_perm:
            respondent.set_translation(q_cid, tran_content)
Beispiel #8
0
def functionlist(request):
    user = request.user
    if not _user.has_manage_perm(user):
        raise PermissionDenied
    template_file = "functionlist.html"
    cur_term = _term.get_cur_input_term()
    terms_2012 = _term.get_2012_all_terms()
    return render_to_response(template_file, locals(), context_instance=RequestContext(request))
Beispiel #9
0
def gen_report_bentch(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    
    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

#    can_audit = validate_false_paper_have_type(queryset, [enums.BMW_PAPER_TYPE, enums.FH_PAPER_TYPE])
#    if can_audit == False:
#        messages.error(request, u'FW团队终审问卷才能生成单店报告')
#        return None
    
    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.    
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        #督导,终审,管理员可用
        if not has_fh_end_audit_perm(user) and not has_end_audit_perm(user) and not has_manage_perm(user) and not has_dd_audit_perm(user):
            raise PermissionDenied
        
        n = queryset.count()
        if n:
            from mc import gen_report
            perm = enums.PAPER_STATUS_FINISH
            for obj in queryset :
                if obj.status == perm:
                    obj_display = force_unicode(obj)
                    #统计得
                    gen_report(obj, user)
                    # change
                    modeladmin.log_change(request, obj, obj_display)
                else:
                    n -= 1
            modeladmin.message_user(request, u'生成 %(count)d %(items)s EXCEL单店报告.' % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        
        # Return None to display the change list page again.
        return None
    
    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }
    
    # Display the confirmation page
    return render_to_response('gen_report_bentch_confirmation.html', context, context_instance=template.RequestContext(request))
Beispiel #10
0
def orignial_export(request, term_id):
    user = request.user
    if not _user.has_manage_perm(user):
        raise PermissionDenied
    cur_term = _term.get_term_by_id(term_id)
    from tools.first import gen_option_data
    xls_file = gen_option_data.make_excel(cur_term.id)
    shutil.copy(xls_file, settings.MEDIA_ROOT)
    downloadname = os.path.basename(xls_file)
    return HttpResponseRedirect('/file/%s' % (downloadname))
Beispiel #11
0
def functionlist(request):
    user = request.user
    if not _user.has_manage_perm(user):
        raise PermissionDenied
    template_file = "functionlist.html"
    cur_term = _term.get_cur_input_term()
    terms_2012 = _term.get_2012_all_terms()
    return render_to_response(template_file,
                              locals(),
                              context_instance=RequestContext(request))
Beispiel #12
0
def orignial_export(request, term_id):
    user = request.user
    if not _user.has_manage_perm(user):
        raise PermissionDenied
    cur_term = _term.get_term_by_id(term_id)
    from tools.first import gen_option_data
    xls_file = gen_option_data.make_excel(cur_term.id)
    shutil.copy(xls_file, settings.MEDIA_ROOT)
    downloadname = os.path.basename(xls_file)
    return HttpResponseRedirect('/file/%s' % (downloadname))
Beispiel #13
0
def score_export(request, term_id):
    user = request.user
    if not _user.has_manage_perm(user):
        raise PermissionDenied
    cur_term = _term.get_term_by_id(term_id)
    from tools.first import gen_big_data
    templateName = u'big_data/%s数据大表_template.xls' % cur_term.name_cn
    xls_file = gen_big_data.write_data(cur_term, templateName)
    shutil.copy(xls_file, settings.MEDIA_ROOT)
    downloadname = os.path.basename(xls_file)
    return HttpResponseRedirect('/file/%s' % (downloadname))
Beispiel #14
0
def score_export(request, term_id):
    user = request.user
    if not _user.has_manage_perm(user):
        raise PermissionDenied
    cur_term = _term.get_term_by_id(term_id)
    from tools.first import gen_big_data
    templateName = u'big_data/%s数据大表_template.xls'%cur_term.name_cn
    xls_file = gen_big_data.write_data(cur_term, templateName)
    shutil.copy(xls_file, settings.MEDIA_ROOT)
    downloadname = os.path.basename(xls_file)
    return HttpResponseRedirect('/file/%s' % (downloadname))
Beispiel #15
0
def disablereport(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_manage_perm(user):
            raise PermissionDenied

        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                obj.is_public = False
                obj.save()

                # change
                modeladmin.log_change(request, obj, obj_display)

            modeladmin.message_user(
                request, u'成功 屏蔽 %(count)d %(items)s 报告.' % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                })

        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(
        'disablereport_confirmation.html',
        context,
        context_instance=template.RequestContext(request))
Beispiel #16
0
def trans_export_need(request):
    user = request.user
    if not _user.has_manage_perm(user):
        raise PermissionDenied
    cur_term = _term.get_cur_input_term()
    from tools.first import export
    xls_file = export.write_data(cur_term, False)
    import datetime
    time = datetime.datetime.now().strftime('%y%m%d%H%M%S')
    firstname = os.path.join(settings.MEDIA_ROOT,u'%s_tran_need_%s.xls'%(cur_term.name_cn,time))
    shutil.copyfile(xls_file, firstname)
    downloadname = os.path.basename(firstname)
    return HttpResponseRedirect('/file/%s' % (downloadname))
Beispiel #17
0
def trans_export_need(request):
    user = request.user
    if not _user.has_manage_perm(user):
        raise PermissionDenied
    cur_term = _term.get_cur_input_term()
    from tools.first import export
    xls_file = export.write_data(cur_term, False)
    import datetime
    time = datetime.datetime.now().strftime('%y%m%d%H%M%S')
    firstname = os.path.join(settings.MEDIA_ROOT,
                             u'%s_tran_need_%s.xls' % (cur_term.name_cn, time))
    shutil.copyfile(xls_file, firstname)
    downloadname = os.path.basename(firstname)
    return HttpResponseRedirect('/file/%s' % (downloadname))
Beispiel #18
0
    def get_results(self, request):
        from service.core._user import has_manage_perm, has_input_perm

        user = request.user
        qs = self.query_set

        if has_manage_perm(user):
            pass
        elif has_input_perm(user):
            #录入权限只能看自己上传的图片,声音
            qs = qs.filter(user=user)
            pass

        self.query_set = qs
        return super(ReportChangeList, self).get_results(request)
Beispiel #19
0
def disablereport(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    
    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.    
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_manage_perm(user):
            raise PermissionDenied
        
        n = queryset.count()
        if n:
            for obj in queryset :
                obj_display = force_unicode(obj)
                obj.is_public = False
                obj.save()
                
                # change
                modeladmin.log_change(request, obj, obj_display)

            modeladmin.message_user(request, u'成功 屏蔽 %(count)d %(items)s 报告.' % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        
        # Return None to display the change list page again.
        return None
    
    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response('disablereport_confirmation.html', context, context_instance=template.RequestContext(request))
Beispiel #20
0
def trans_import(request):
    user = request.user
    if not _user.has_manage_perm(user):
        raise PermissionDenied

    f = request.FILES.get("file", None)
    #存储文件
    if f:
        fpath = os.path.join(settings.MEDIA_ROOT, 'transup')
        if not os.path.exists(fpath):
            os.makedirs(fpath)
        import random
        ranid = random.randint(1, 9999)
        import datetime
        time = datetime.datetime.now().strftime('%y%m%d%H%M%S')
        filename = u'%s_trans_%s_%d.xls' % (user.username, time, ranid)
        fpath = os.path.join(fpath, filename)

        of = open(fpath, 'wb+')
        for chunk in f.chunks():
            of.write(chunk)
        of.close()
        shutil.copy(fpath, settings.RESOURCES_ROOT)

        #读取文件输出
        #        try:
        cur_term = _term.get_cur_input_term()
        from tools.first import export
        export.save_tran(cur_term, filename)
        #        except:
        #            label = u"请上传合法的xls文件"
        #            return render_to_response("functionlist.html", locals(), context_instance=RequestContext(request))
        #end
        label = u"上传成功"
    else:
        label = u"上传失败"
    terms_2012 = _term.get_2012_all_terms()
    return render_to_response("functionlist.html",
                              locals(),
                              context_instance=RequestContext(request))
Beispiel #21
0
def trans_import(request):    
    user = request.user
    if not _user.has_manage_perm(user):
        raise PermissionDenied
    
    f = request.FILES.get("file", None)
    #存储文件
    if f:
        fpath = os.path.join(settings.MEDIA_ROOT, 'transup')
        if not os.path.exists(fpath):
            os.makedirs(fpath)
        import random
        ranid = random.randint(1, 9999)
        import datetime
        time = datetime.datetime.now().strftime('%y%m%d%H%M%S')
        filename = u'%s_trans_%s_%d.xls' % (user.username,time, ranid)
        fpath = os.path.join(fpath, filename)
        
        of = open(fpath, 'wb+')
        for chunk in f.chunks():
            of.write(chunk)
        of.close()
        shutil.copy(fpath, settings.RESOURCES_ROOT)
        
        #读取文件输出
#        try:
        cur_term = _term.get_cur_input_term()
        from tools.first import export
        export.save_tran(cur_term, filename)
#        except:
#            label = u"请上传合法的xls文件"
#            return render_to_response("functionlist.html", locals(), context_instance=RequestContext(request))
        #end
        label = u"上传成功"
    else:
        label = u"上传失败"
    terms_2012 = _term.get_2012_all_terms()
    return render_to_response("functionlist.html", locals(), context_instance=RequestContext(request))
Beispiel #22
0
def fh_end_audit(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    can_audit = validate_false_paper_have_type(
        queryset, [enums.FW_PAPER_TYPE, enums.BMW_PAPER_TYPE])
    if can_audit == False:
        messages.error(request, msg_paper_not_belong_fht)
        return None
    paper_st_right = validate_false_paper_status(
        request, queryset, [enums.FH_PAPER_STATUS_WAIT_AUDIT_2], u'独立复核团队终审')
    if paper_st_right == False:
        return None
    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_fh_end_audit_perm(user) and not has_manage_perm(user):
            raise PermissionDenied
        n = queryset.count()
        passed_papers = []
        if n:
            perm = enums.PAPER_STATUS_FINISH
            for obj in queryset:
                obj_display = force_unicode(obj)
                if obj.status < perm:
                    from mc import save_paper_audit_status
                    save_paper_audit_status(obj, request.user, perm)

                    obj.status = perm
                    obj.save()
                    passed_papers.append(obj)
                    # change
                    modeladmin.log_change(request, obj, obj_display)
                else:
                    n -= 1

            modeladmin.message_user(
                request, u'独立复核终审通过 %(count)d %(items)s 报告.' % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                })
            if len(passed_papers) > 0:
                from service.core._report import generate_report_by_paper
                generate_report_by_paper(queryset)
                conflicts_msg = []
                for paper in queryset:
                    no_conflict, diff = paperdiff.do_dealer_paper_diff(
                        paper, user)
#                    if not no_conflict:
#                        conflicts_msg.append(u'%s(FW团队问卷: %s 与 复核团队问卷: %s 比较,产生BMW审核问卷: %s)' % (paper.dealer.name, diff.fw_paper.survey_code, diff.fh_paper.survey_code, diff.final_paper.survey_code))
#                if len(conflicts_msg) > 0:
#                    modeladmin.message_user(request, u'产生问卷差异的经销商及相关问卷信息如下:')
#                    for tmpmsg in conflicts_msg:
#                        modeladmin.message_user(request, tmpmsg)
#                else:
#                    modeladmin.message_user(request, u'并未产生问卷差异.')

# Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(
        'fh_finish_audit_confirmation.html',
        context,
        context_instance=template.RequestContext(request))
Beispiel #23
0
def fh_cancel_audit(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    can_audit = validate_false_paper_have_type(
        queryset, [enums.FW_PAPER_TYPE, enums.BMW_PAPER_TYPE])
    if can_audit == False:
        messages.error(request, msg_paper_not_belong_fht)
        return None
    paper_st_right = validate_false_paper_status(request, queryset,
                                                 [enums.PAPER_STATUS_FINISH],
                                                 u'独立复核团队取消终审')
    if paper_st_right == False:
        return None
    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_fh_end_audit_perm(user) and not has_manage_perm(user):
            raise PermissionDenied

        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                #remove paper FW audit info
                audits = PaperAudit.objects.filter(paper=obj,
                                                   new_status=obj.status)
                for au in audits:
                    au.delete()

                obj.status = enums.FH_PAPER_STATUS_WAIT_AUDIT_2
                obj.save()

                # change
                modeladmin.log_change(request, obj, obj_display)

            modeladmin.message_user(
                request, u'成功 取消 %(count)d %(items)s 复核终审.' % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                })

        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(
        'fh_cancel_audit_confirmation.html',
        context,
        context_instance=template.RequestContext(request))
Beispiel #24
0
def aggregate_report(request):
    if _user.has_manage_perm(request.user):
        _report.aggregate_report()
        _report.aggregate_otherreport()
    sdicts = {'result':1}
    return HttpResponse(simplejson.dumps(sdicts, ensure_ascii=False))
Beispiel #25
0
def gen_report_bentch(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    #    can_audit = validate_false_paper_have_type(queryset, [enums.BMW_PAPER_TYPE, enums.FH_PAPER_TYPE])
    #    if can_audit == False:
    #        messages.error(request, u'FW团队终审问卷才能生成单店报告')
    #        return None

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        #督导,终审,管理员可用
        if not has_fh_end_audit_perm(user) and not has_end_audit_perm(
                user) and not has_manage_perm(user) and not has_dd_audit_perm(
                    user):
            raise PermissionDenied

        n = queryset.count()
        if n:
            from mc import gen_report
            perm = enums.PAPER_STATUS_FINISH
            for obj in queryset:
                if obj.status == perm:
                    obj_display = force_unicode(obj)
                    #统计得
                    gen_report(obj, user)
                    # change
                    modeladmin.log_change(request, obj, obj_display)
                else:
                    n -= 1
            modeladmin.message_user(
                request, u'生成 %(count)d %(items)s EXCEL单店报告.' % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                })

        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(
        'gen_report_bentch_confirmation.html',
        context,
        context_instance=template.RequestContext(request))
Beispiel #26
0
def aggregate_report(request):
    if _user.has_manage_perm(request.user):
        _report.aggregate_report()
        _report.aggregate_otherreport()
    sdicts = {'result': 1}
    return HttpResponse(simplejson.dumps(sdicts, ensure_ascii=False))
Beispiel #27
0
def _render_html(request, respondent, templatename, extern_context={}, q_cid_list=[]):
    from django.template.loader import render_to_string
    if respondent is None:
        answers = None
        trans_contents = None
    else:
        answers = respondent.answers
        trans_contents = respondent.get_translations()
    tran_perm = int(has_tran_perm(request.user))
    manage_perm = int(has_manage_perm(request.user))
    
    cid_dict = {}
    for q_cid in q_cid_list:
        if answers[q_cid][0] == 'A2':
            if answers[q_cid][1]:
                alts = answers[q_cid][1].split('^-^')
                altlen = len(alts)
                alt_list = []
                temp_list = list(alts)
                temp_list.remove(temp_list[len(temp_list) - 1])
                for a in temp_list:
                    alt_list.append('%s' % int(a))
                answers[q_cid] = changeTupleValue(answers[q_cid], answers[q_cid][1], alts[altlen - 1])
                cid_dict[q_cid] = ','.join(alt_list)
    extern_context['alt_ans'] = cid_dict
    
    cid_list = []
    questions = extern_context.get('questions', [])
    for q in questions:
        #增加补充说明
        addon_cid = '%s__addon' % q.cid
        
        if answers:
            an = answers.get(q.cid, None)
            if an:
                q.answer0 = an[0]
                q.answer1 = an[1]
            an = answers.get(addon_cid, None)
            if an:
                q.addon = an
        
        if trans_contents:
            tran = trans_contents.get(q.cid, None)
            q.trans_contents = tran
            
            tran = trans_contents.get(addon_cid, None)
            q.addon_en = tran
        
        cid_list.append(q.cid.encode('utf-8'))
    
    extern_context['question_cid_list'] = cid_list
    
    paper = extern_context.get('paper', None)
    if paper:
        project_id = paper.project.id
    else:
        project_id = request.GET.get('project_id', 2) #获得项目id 默认为宝马项目
    project = Project.objects.get(id=project_id)
    
    info_data = {'respondent':respondent, 'answers':answers, 'tran_perm':tran_perm, 'manage_perm':manage_perm, 'trans_contents':trans_contents, 'project':project}
    info_data.update(extern_context)
    html = render_to_string(templatename, info_data)
    return html
Beispiel #28
0
def fh_end_audit(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    
    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)
    
    can_audit = validate_false_paper_have_type(queryset, [enums.FW_PAPER_TYPE, enums.BMW_PAPER_TYPE])
    if can_audit == False:
        messages.error(request, msg_paper_not_belong_fht)
        return None
    paper_st_right = validate_false_paper_status(request, queryset, [enums.FH_PAPER_STATUS_WAIT_AUDIT_2], u'独立复核团队终审')
    if paper_st_right == False:
        return None
    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.    
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_fh_end_audit_perm(user) and not has_manage_perm(user):
            raise PermissionDenied
        n = queryset.count()
        passed_papers = []
        if n:
            perm = enums.PAPER_STATUS_FINISH
            for obj in queryset :
                obj_display = force_unicode(obj)
                if obj.status < perm:
                    from mc import save_paper_audit_status
                    save_paper_audit_status(obj, request.user, perm)
                    
                    obj.status = perm
                    obj.save()
                    passed_papers.append(obj)
                    # change
                    modeladmin.log_change(request, obj, obj_display)
                else:
                    n -= 1
            
            modeladmin.message_user(request, u'独立复核终审通过 %(count)d %(items)s 报告.' % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
            if len(passed_papers) > 0:
                from service.core._report import generate_report_by_paper
                generate_report_by_paper(queryset)
                conflicts_msg = []
                for paper in queryset:
                    no_conflict, diff = paperdiff.do_dealer_paper_diff(paper, user)
#                    if not no_conflict:
#                        conflicts_msg.append(u'%s(FW团队问卷: %s 与 复核团队问卷: %s 比较,产生BMW审核问卷: %s)' % (paper.dealer.name, diff.fw_paper.survey_code, diff.fh_paper.survey_code, diff.final_paper.survey_code))
#                if len(conflicts_msg) > 0:
#                    modeladmin.message_user(request, u'产生问卷差异的经销商及相关问卷信息如下:')
#                    for tmpmsg in conflicts_msg:
#                        modeladmin.message_user(request, tmpmsg)
#                else:
#                    modeladmin.message_user(request, u'并未产生问卷差异.')
        
        # Return None to display the change list page again.
        return None
    
    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }
    
    # Display the confirmation page
    return render_to_response('fh_finish_audit_confirmation.html', context, context_instance=template.RequestContext(request))
Beispiel #29
0
    def changelist_view(self, request, extra_context=None):
        user = request.user
        actions = []
        from service.core._user import has_qc1_audit_perm, has_qc2_audit_perm, has_qc3_audit_perm, has_manage_perm
        from service.core._user import has_dd_audit_perm, has_yj_audit_perm, has_end_audit_perm
        from service.core._user import has_fh_audit_perm, has_fh_end_audit_perm, check_user_in_gfk_group
        is_manager = has_manage_perm(user)
        if is_manager or has_qc1_audit_perm(user):
            actions.append(audit_action.qc1_audit)
        if is_manager or has_qc2_audit_perm(user):
            actions.append(audit_action.qc2_audit)
        if is_manager or has_qc3_audit_perm(user):
            actions.append(audit_action.qc3_audit)
        if is_manager or has_dd_audit_perm(user):
            actions.append(audit_action.dd_audit)
        if is_manager or has_yj_audit_perm(user):
            actions.append(audit_action.yj_audit)
        if is_manager or has_end_audit_perm(user):
            actions.append(audit_action.end_audit)
        if is_manager or has_end_audit_perm(user) or has_dd_audit_perm(user):
            actions.append(audit_action.cancel_audit)
            actions.append(audit_action.qc3_re_audit)
        if is_manager or has_end_audit_perm(user) or has_dd_audit_perm(
                user) or has_fh_end_audit_perm(user):
            #actions.append(audit_action.save_all)
            actions.append(audit_action.gen_report_bentch)
            pass

        if is_manager or has_fh_audit_perm(user):
            actions.append(audit_action.fh_audit)
        if is_manager or has_fh_end_audit_perm(user):
            actions.append(audit_action.fh_end_audit)
            actions.append(audit_action.fh_cancel_audit)
        if is_manager:
            actions.append(enablereport_action.enablereport)
            actions.append(enablereport_action.disablereport)

#        if is_manager or has_dd_audit_perm(user) or has_yj_audit_perm(user):
#            if 'bmwpaperstatus' not in self.list_display:
#                self.list_display.append('bmwpaperstatus')
#        else:
#            if 'bmwpaperstatus'  in self.list_display:
#                self.list_display.remove('bmwpaperstatus')

        def __replace_desc(no, description):
            desc = description
            splits = desc.split('.', 2)
            size = len(splits)
            if size == 2:
                desc = splits[1]
            return desc


#        for i, act in enumerate(actions):
#            no = '%02d' % (i + 1)
#            desc = __replace_desc(no, act.short_description)
#            act.short_description = u'%s. %s' % (no, desc)

        setattr(PaperAdmin, 'actions',
                actions)  #此处要动态设置PaperAdmin类的actions属性才有效

        #下面for是将django 加的权限操作前加上序号,序号从actions值后算起
        #        i = 0
        #        for (name, func) in self.admin_site.actions:
        #            description = getattr(func, 'short_description', name.replace('_', ' '))
        #            vals = description._proxy____args #值为元组
        #            if len(vals) > 0:
        #                v = _(vals[0])
        #                no = '%02d' % (i + 1 + len(actions))
        #                desc = __replace_desc(no, v)
        #                v2 = ('%s. %s' % (no, desc))
        #                changed = []
        #                changed.append(v2)
        #                if len(vals) > 1:
        #                    changed.extend(vals[1:])
        #                description._proxy____args = tuple(changed)
        #            i += 1
        if extra_context is None:
            extra_context = {}
        extra_context['has_manage_role'] = is_manager
        extra_context['is_fw_team'] = check_user_in_gfk_group(user)
        return super(PaperAdmin, self).changelist_view(request, extra_context)
Beispiel #30
0
def _render_html(request,
                 respondent,
                 templatename,
                 extern_context={},
                 q_cid_list=[]):
    from django.template.loader import render_to_string
    if respondent is None:
        answers = None
        trans_contents = None
    else:
        answers = respondent.answers
        trans_contents = respondent.get_translations()
    tran_perm = int(has_tran_perm(request.user))
    manage_perm = int(has_manage_perm(request.user))

    cid_dict = {}
    for q_cid in q_cid_list:
        if answers[q_cid][0] == 'A2':
            if answers[q_cid][1]:
                alts = answers[q_cid][1].split('^-^')
                altlen = len(alts)
                alt_list = []
                temp_list = list(alts)
                temp_list.remove(temp_list[len(temp_list) - 1])
                for a in temp_list:
                    alt_list.append('%s' % int(a))
                answers[q_cid] = changeTupleValue(answers[q_cid],
                                                  answers[q_cid][1],
                                                  alts[altlen - 1])
                cid_dict[q_cid] = ','.join(alt_list)
    extern_context['alt_ans'] = cid_dict

    cid_list = []
    questions = extern_context.get('questions', [])
    for q in questions:
        #增加补充说明
        addon_cid = '%s__addon' % q.cid

        if answers:
            an = answers.get(q.cid, None)
            if an:
                q.answer0 = an[0]
                q.answer1 = an[1]
            an = answers.get(addon_cid, None)
            if an:
                q.addon = an

        if trans_contents:
            tran = trans_contents.get(q.cid, None)
            q.trans_contents = tran

            tran = trans_contents.get(addon_cid, None)
            q.addon_en = tran

        cid_list.append(q.cid.encode('utf-8'))

    extern_context['question_cid_list'] = cid_list

    paper = extern_context.get('paper', None)
    if paper:
        project_id = paper.project.id
    else:
        project_id = request.GET.get('project_id', 2)  #获得项目id 默认为宝马项目
    project = Project.objects.get(id=project_id)

    info_data = {
        'respondent': respondent,
        'answers': answers,
        'tran_perm': tran_perm,
        'manage_perm': manage_perm,
        'trans_contents': trans_contents,
        'project': project
    }
    info_data.update(extern_context)
    html = render_to_string(templatename, info_data)
    return html