Ejemplo n.º 1
0
def batch_update(request, editable_data, admin_class):
    errors = []
    for row_data in editable_data:
        obj_id = row_data.get("id")
        try:
            if obj_id:
                obj = admin_class.model.objects.get(id=obj_id)
                model_form = forms.create_form(admin_class.model,
                                               list(row_data.keys()),
                                               admin_class,
                                               request=request,
                                               partial_update=True)
                form_obj = model_form(instance=obj, data=row_data)
                if form_obj.is_valid():
                    log_data = [{"changed": {}}]
                    form_obj.save()
                    if form_obj.has_changed():
                        messages.add_message(
                            request, messages.SUCCESS,
                            '''{model_name} "{obj}" 修改成功。'''.format(
                                model_name=admin_class.model._meta.
                                verbose_name,
                                obj=form_obj.instance))
                else:
                    errors.append([form_obj.errors, obj])

        except ValueError as e:
            return False, [e, obj]
    if errors:
        return False, errors
    return True, []
Ejemplo n.º 2
0
def table_change(request, app_name, model_name, obj_id):
    if app_name in site.enabled_admins:
        if model_name in site.enabled_admins[app_name]:
            admin_class = site.enabled_admins[app_name][model_name]
            obj = admin_class.model.objects.get(id=obj_id)
            fields = []
            for field_obj in admin_class.model._meta.fields:
                if field_obj.editable:
                    fields.append(field_obj.name)

            for field_obj in admin_class.model._meta.many_to_many:
                fields.append(field_obj.name)
            model_form = forms.create_form(fields,
                                           admin_class,
                                           request=request)

            if request.method == "GET":
                form_obj = model_form(instance=obj)
            elif request.method == "POST":
                # print("post:",request.POST)
                form_obj = model_form(request.POST, instance=obj)
                if form_obj.is_valid():
                    form_obj.validate_unique()
                    if form_obj.is_valid():
                        form_obj.save()
            return render(
                request, 'kingadmin/table_change.html', {
                    'form_obj': form_obj,
                    'active_url': '/kingadmin/',
                    'model_verbose_name': admin_class.model._meta.verbose_name,
                    'model_name': admin_class.model._meta.model_name,
                    'app_name': app_name,
                    'admin_class': admin_class
                })
Ejemplo n.º 3
0
def batch_update(request, editable_data, admin_class):
    """table objects batch update , for list_editable feature"""
    errors = []
    for row_data in editable_data:
        obj_id = row_data.get('id')
        try:
            if obj_id:
                print("editable data", row_data, list(row_data.keys()))
                obj = admin_class.model.objects.get(id=obj_id)
                model_form = forms.create_form(admin_class.model,
                                               list(row_data.keys()),
                                               admin_class,
                                               request=request,
                                               partial_update=True)
                form_obj = model_form(instance=obj, data=row_data)
                if form_obj.is_valid():
                    form_obj.save()

                else:
                    print("list editable form", row_data, form_obj.errors)

                    errors.append([form_obj.errors, obj])

        except KeyboardInterrupt as e:
            return False, [e, obj]
    if errors:
        return False, errors
    return True, []
Ejemplo n.º 4
0
def table_add(request, app_name, table_name):
    #print("request :",request.POST)
    if app_name in site.enabled_admins:
        if table_name in site.enabled_admins[app_name]:
            fields = []
            admin_class = site.enabled_admins[app_name][table_name]
            for field_obj in admin_class.model._meta.fields:
                if field_obj.editable:
                    fields.append(field_obj.name)
            for field_obj in admin_class.model._meta.many_to_many:
                fields.append(field_obj.name)
            if admin_class.add_form == None:
                model_form = forms.create_form(admin_class.model,
                                               fields,
                                               admin_class,
                                               form_create=True,
                                               request=request)
            else:  #this admin has customized  creation form defined
                model_form = admin_class.add_form

            if request.method == "GET":
                form_obj = model_form()
            elif request.method == "POST":
                form_obj = model_form(request.POST)
                if form_obj.is_valid():
                    form_obj.validate_unique()
                    if form_obj.is_valid():
                        print("add form valid", form_obj.cleaned_data)
                        form_obj.save()
                        if request.POST.get('_continue') is not None:

                            redirect_url = '%s/%s/' % (re.sub(
                                "add/$", "change",
                                request.path), form_obj.instance.id)
                            #print('redirect url',redirect_url)
                            return redirect(redirect_url)
                        elif request.POST.get("_add_another") is not None:
                            #print('add another form', form_obj)
                            form_obj = model_form()

                        else:  #return to table list page
                            if "_popup=1" not in request.get_full_path():
                                redirect_url = request.path.rstrip("/add/")
                                return redirect(redirect_url)

            return render(
                request, 'kingadmin/table_add.html', {
                    'form_obj': form_obj,
                    'model_name': admin_class.model._meta.model_name,
                    'model_verbose_name': admin_class.model._meta.verbose_name,
                    'model_db_table': admin_class.model._meta.db_table,
                    'admin_class': admin_class,
                    'app_name': app_name,
                    'active_url': '/kingadmin/',
                    'enabled_admins': site.enabled_admins
                })

    else:
        raise Http404("url %s/%s not found" % (app_name, table_name))
Ejemplo n.º 5
0
def table_change(request, app_name, table_name, obj_id, embed=False):
    #print("table change:",app_name,table_name ,obj_id)

    if app_name in site.enabled_admins:
        if table_name in site.enabled_admins[app_name]:
            admin_class = site.enabled_admins[app_name][table_name]
            ##print(enabled_admins[table_name])
            obj = admin_class.model.objects.get(id=obj_id)
            ##print("obj....change",obj)
            fields = []
            for field_obj in admin_class.model._meta.fields:
                if field_obj.editable:
                    fields.append(field_obj.name)

            for field_obj in admin_class.model._meta.many_to_many:
                fields.append(field_obj.name)
            ##print('fields', fields)
            model_form = forms.create_form(admin_class.model,
                                           fields,
                                           admin_class,
                                           request=request)

            if request.method == "GET":
                form_obj = model_form(instance=obj)

            elif request.method == "POST":
                print("post:", request.POST)
                form_obj = model_form(request.POST, instance=obj)
                if form_obj.is_valid():
                    form_obj.validate_unique()
                    if form_obj.is_valid():
                        form_obj.save()

            return_data = {
                'form_obj': form_obj,
                'model_verbose_name': admin_class.model._meta.verbose_name,
                'model_name': admin_class.model._meta.model_name,
                'app_name': app_name,
                'admin_class': admin_class,
                'enabled_admins': site.enabled_admins
            }
            if embed:
                return return_data
            else:
                return render(request, 'kingadmin/table_change.html',
                              return_data)

    else:
        raise Http404("url %s/%s not found" % (app_name, table_name))
Ejemplo n.º 6
0
def batch_update(request, editable_data, admin_class):
    """table objects batch update , for list_editable feature"""
    errors = []
    for row_data in editable_data:
        obj_id = row_data.get('id')
        try:
            if obj_id:
                print("editable data", row_data, list(row_data.keys()))
                obj = admin_class.model.objects.get(id=obj_id)
                model_form = forms.create_form(admin_class.model,
                                               list(row_data.keys()),
                                               admin_class,
                                               request=request,
                                               partial_update=True)
                form_obj = model_form(instance=obj, data=row_data)
                if form_obj.is_valid():
                    form_obj.save()

                else:
                    print("list editable form", row_data, form_obj.errors)

                    errors.append([form_obj.errors, obj])

                # for column in row_data:
                #     if column != "id":#id no need change
                #         #print("-----column",column,row_data[column],type(row_data[column]))
                #         if row_data[column] in ('True','False'):
                #             if obj._meta.get_field(column).get_internal_type() == "BooleanField":
                #                 setattr(obj, column, eval(row_data[column]))
                #                 #print("setting column [%s] to [%s]" %(column,row_data[column]), eval(row_data[column]))
                #             else:
                #                 setattr(obj, column, row_data[column])
                #         else:
                #             setattr(obj,column,row_data[column])
                #
                # obj.save()

        #except Exception as e:
        except KeyboardInterrupt as e:
            return False, [e, obj]
    if errors:
        return False, errors
    return True, []
Ejemplo n.º 7
0
def table_add(request, app_name, model_name):
    if app_name in site.enabled_admins:
        if model_name in site.enabled_admins[app_name]:
            admin_class = site.enabled_admins[app_name][model_name]
            fields = []
            for field_obj in admin_class.model._meta.fields:
                if field_obj.editable:
                    fields.append(field_obj.name)
            for field_obj in admin_class.model._meta.many_to_many:
                fields.append(field_obj.name)
            if admin_class.add_form == None:
                model_form = forms.create_form(fields,
                                               admin_class,
                                               form_create=True,
                                               request=request)
            else:  # this admin has customized  creation form defined
                model_form = admin_class.add_form
            if request.method == 'GET':
                form_obj = model_form()
            elif request.method == "POST":
                form_obj = model_form(request.POST)
                if form_obj.is_valid():
                    form_obj.validate_unique()
                    if form_obj.is_valid():
                        form_obj.save()

            return render(
                request, 'kingadmin/table_add.html', {
                    'form_obj': form_obj,
                    'model_name': admin_class.model._meta.model_name,
                    'model_verbose_name': admin_class.model._meta.verbose_name,
                    'model_db_table': admin_class.model._meta.db_table,
                    'admin_class': admin_class,
                    'app_name': app_name,
                    'active_url': '/kingadmin/',
                })
    else:
        return Http404('url %s/%s not found' % (app_name, model_name))
Ejemplo n.º 8
0
def table_add(request, app_name, table_name, embed=False):
    """

    :param request:
    :param app_name:
    :param table_name:
    :param embed:
    :return:
    """
    if app_name in site.enabled_admins:
        if table_name in site.enabled_admins[app_name]:
            admin_class = site.enabled_admins[app_name][table_name]

            template_file = "kingadmin/table_add.html"
            fields = []
            for field_obj in admin_class.model._meta.fields:
                if field_obj.editable:
                    fields.append(field_obj.name)
            for field_obj in admin_class.model._meta.many_to_many:
                fields.append(field_obj.name)
            if admin_class.add_form is not None:
                custom_status = True
            else:
                custom_status = False

            model_form = forms.create_form(admin_class.model,
                                           fields,
                                           admin_class,
                                           form_creata=True,
                                           request=request,
                                           custom_status=custom_status)
            if request.method == "GET":
                if "_popup=4" in request.get_full_path():
                    template_file = "kingadmin/table_add_popup.html"
                fk_id = request.get("fk_id")
                field_name = request.GET.get("field_name")
                model_name = request.GET.get("model_name")
                if fk_id and field_name:
                    if field_name == "content_type" and model_name:
                        content_type = ContentType.objects.get(
                            model=model_name).id
                        form_obj = model_form(initial={
                            "content_type": content_type,
                            "object_id": fk_id
                        })
                    else:

                        form_obj = model_form(initial={
                            field_name: fk_id,
                        })

                else:
                    form_obj = model_form()

            elif request.method == "POST":
                form_obj = model_form(request.POST)
                if form_obj.is_valid():
                    form_obj.validate_unique()
                    if form_obj.is_valid():
                        new_object = form_obj.save()
                        log_data = [{"added": {}}]
                        admin_class.log_addition(request, new_object, log_data)
                        messages.add_message(
                            request, messages.SUCCESS,
                            mark_safe(
                                '''{model_name} <a href='{obj_change_link}'>{obj}</a> 添加成功。'''
                                .format(model_name=admin_class.model._meta.
                                        verbose_name,
                                        obj=form_obj.instance,
                                        obj_change_link=
                                        "/kingadmin/%s/%s/change/%s/" %
                                        (app_name, table_name,
                                         form_obj.instance.pk))))
                        # 定制的批量操作, (路飞学城优惠券批量生成)
                        method_name = "bulk_create_%s" % table_name
                        if hasattr(admin_class, method_name):
                            getattr(admin_class, method_name)(new_object)

                        if request.POST.get("_continue") is not None:
                            redirect_url = '%s/%s/' % (re.sub(
                                "add/$", "change",
                                request.path), form_obj.instance.id)
                            return redirect(redirect_url)
                        elif request.POST.get("_add_another") is not None:

                            fk_id = request.GET.get("fk_id")
                            field_name = request.GET.get("field_name")
                            model_name = request.GET.get("model_name")
                            if fk_id and field_name:
                                if field_name == "content_type" and model_name:
                                    content_type = ContentType.objects.get(
                                        model=model_name).id
                                    form_obj = model_form(
                                        initial={
                                            "content_type": content_type,
                                            "object_id": fk_id
                                        })
                                else:
                                    form_obj = model_form(initial={
                                        field_name: fk_id,
                                    })
                            else:
                                form_obj = model_form()

                            return redirect(request.get_full_path()
                                            or admin_class.object_add_link)

                        else:  # return to table list page
                            if "_popup=4" not in request.get_full_path():
                                redirect_url = re.sub("add/$", "",
                                                      request.path)
                                return redirect(redirect_url)
                            else:
                                template_file = 'kingadmin/table_add_popup.html'

            return_data = {
                'form_obj': form_obj,
                'model_name': admin_class.model._meta.model_name,
                'model_verbose_name': admin_class.model._meta.verbose_name,
                'model_db_table': admin_class.model._meta.db_table,
                'admin_class': admin_class,
                'app_name': app_name,
                'enabled_admins': site.enabled_admins,
                'cid': request.GET.get('cid'),
                'chapter_num': request.GET.get('chapter_num')
            }

            if embed:
                return return_data
            else:
                if request.method == "POST" and not form_obj.errors and "_popup=4" not in request.get_full_path(
                ):
                    return redirect("/kingadmin/{app}/{table}/".format(
                        app=app_name, table=table_name))

                return render(request, template_file, return_data)

    else:
        raise Http404("url %s/%s not found" % (app_name, table_name))
Ejemplo n.º 9
0
def table_change(request, app_name, table_name, obj_id, embed=False):
    """

    :param request:
    :param app_name:
    :param table_name:
    :param obj_id:
    :param embed:
    :return:
    """
    if app_name in site.enabled_admins:
        if table_name in site.enabled_admins[app_name]:
            admin_class = site.enabled_admins[app_name][table_name]
            obj = admin_class.model.objects.get(id=obj_id)
            fields = []
            for field_obj in admin_class.model._meta.fields:
                if field_obj.editable:
                    fields.append(field_obj.name)

            for field_obj in admin_class.model._meta.many_to_many:
                fields.append(field_obj.name)

            if admin_class.add_form is not None:
                custom_status = True

            else:
                custom_status = False

            model_form = forms.create_form(admin_class.model,
                                           fields,
                                           admin_class,
                                           request=request,
                                           custom_status=custom_status)

            if request.method == "GET":
                form_obj = model_form(instance=obj)

            elif request.method == "POST":
                old_data = serializers.serialize("json", [obj])
                form_obj = model_form(request.POST, instance=obj)
                if form_obj.is_valid():
                    form_obj.validate_unique()
                    if form_obj.is_valid():
                        log_data = [{"change": {}}]
                        form_obj.save()
                        messages.add_message(
                            request, messages.SUCCESS,
                            mark_safe(
                                '''{model_name} <a href='{obj_change_link}'>{obj}</a> 修改成功。'''
                                .format(model_name=admin_class.model._meta.
                                        verbose_name,
                                        obj=form_obj.instance,
                                        obj_change_link=request.path)))

                        new_object = form_obj.instance
                        field_data_before_change = utils.fetch_changed_data(
                            old_data, form_obj.changed_data)
                        log_data[0]["changed"][
                            "changed_to"] = utils.get_specified_data(
                                new_object, form_obj.changed_data)
                        log_data[0]["changed"][
                            "old_data"] = field_data_before_change
                        admin_class.log_change(request, new_object, log_data)

            return_data = {
                "form_obj": form_obj,
                "model_verbose_name": admin_class.model._meta.verbose_name,
                "model_name": admin_class.model._meta.model_name,
                "app_name": app_name,
                "admin_class": admin_class,
                "enabled_admins": site.enabled_admins,
            }
            if embed:
                return return_data
            else:
                if request.method == "POST" and not form_obj.errors:
                    return redirect("/kingadmin/{app}/{table}/".format(
                        app=app_name, table=table_name))
                return render(request, 'kingadmin/table_change.html',
                              return_data)

    else:
        raise Http404("url %s/%s not found" % (app_name, table_name))
Ejemplo n.º 10
0
def enrollment(request,customer_id):

    #form = forms.EnrollmentForm()

    fields = []
    for field_obj in  models.Enrollment._meta.fields:
        if field_obj.editable:
            fields.append(field_obj.name)

    #print('fields:',fields)

    customer_obj = models.Customer.objects.get(id=customer_id)
    model_form  = king_admin_forms.create_form(models.Enrollment,
                                 fields,
                                 site.enabled_admins[models.Enrollment._meta.db_table])

    form = model_form()
    response_msg = {}
    if request.method == "POST":

        if request.POST.get('paid_fee'): #payment form
            # 交费纪录
            fields = []
            for field_obj in models.PaymentRecord._meta.fields:
                if field_obj.editable:
                    fields.append(field_obj.name)

            model_form = king_admin_forms.create_form(models.PaymentRecord,
                                                      fields,
                                                      site.enabled_admins[models.PaymentRecord._meta.db_table])

            form = model_form(request.POST)
            if form.is_valid():
                form.save()
                enroll_obj = form.instance.enrollment
                customer_obj.status = "signed" #
                customer_obj.save()
                response_msg = {'msg': 'payment record got created,enrollment process is done', 'code': 4,
                                'step': 5,}
            else:
                enroll_obj = None
            return render(request, 'crm/enrollment.html',
                          {'response': response_msg,
                           'payment_form': form,
                           'customer_obj': customer_obj,
                           'enroll_obj': enroll_obj})

        post_data = request.POST.copy()
        print("post:",request.POST)
        form = model_form(post_data)
        exist_enrollment_objs = models.Enrollment.objects.filter(customer=customer_obj,course_grade=request.POST.get('course_grade'))
        if exist_enrollment_objs:

            if exist_enrollment_objs.filter(contract_agreed=True):
                #学生已填写完报名表
                enroll_obj = exist_enrollment_objs.get(contract_agreed=True)

                if enroll_obj.contract_approved or request.POST.get('contract_approved') == "on":
                    enroll_obj.contract_approved = True
                    enroll_obj.save()

                    if enroll_obj.paymentrecord_set.select_related().count() >0: #already has payment record
                        response_msg = {'msg': '已报名成功', 'code': 5, 'step': 6}
                        return render(request, 'crm/enrollment.html',
                                      {'response': response_msg,
                                       'customer_obj':customer_obj})
                    else:
                        response_msg = {'msg': 'contract approved, waiting for payment record to be created', 'code': 3, 'step': 4}

                        #交费纪录
                        fields = []
                        for field_obj in models.PaymentRecord._meta.fields:
                            if field_obj.editable:
                                fields.append(field_obj.name)

                        model_form = king_admin_forms.create_form(models.PaymentRecord,
                                                                  fields,
                                                                  site.enabled_admins[models.PaymentRecord._meta.db_table])

                        form = model_form()

                        return render(request, 'crm/enrollment.html',
                                      {'response': response_msg,
                                       'payment_form': form,
                                       'customer_obj': customer_obj,
                                       'enroll_obj':enroll_obj})

                else:
                    response_msg = {'msg': 'waiting for contract approval',
                                    'code':2,'step':3,
                                    'enroll_boj':enroll_obj}
                form = model_form(post_data, instance=enroll_obj)

            else:

                response_msg = {'msg':'enrollment_form already exist',
                                'code':1,'step':2,
                                'enroll_obj':exist_enrollment_objs[0],
                                }

            form.add_error('customer', '报名表已存在')
        #form.cleaned_data['customer'] = customer_obj

        if form.is_valid():
            form.save()
            response_msg = {'msg': 'enrollment_form created',
                            'enroll_obj':form.instance,'code': 1, 'step': 2}
    else:
        response_msg = {'msg': 'create enrollment form', 'code': 0, 'step': 1}
    return render(request,'crm/enrollment.html',{'response':response_msg,
                                                 'enrollment_form':form,
                                                 'customer_obj':customer_obj,
                                                 })