Esempio n. 1
0
def edit_form_data_group(req, group_id):
    """Edit a model-defined group of forms"""
    group = get_object_or_404(FormDataGroup, id=group_id)
    form_validation = None
    if req.method == "POST":
        group_form = FormDataGroupForm(req.POST, instance=group) 
        if group_form.is_valid():
            if "formdefs" in req.POST:
                form_ids = req.POST.getlist("formdefs")
                if not form_ids:
                    form_validation = "You must choose at least one form!"
                else:
                    group = group_form.save()
                    set_forms = [FormDefModel.objects.get(id=form_id) for form_id in form_ids]
                    previous_forms = group.forms.all()
                    new_forms = [form for form in set_forms if form not in previous_forms]
                    deleted_forms = [form for form in previous_forms if form not in set_forms]
                    # don't forget to do all the default column updates as well.
                    for form in new_forms:
                        group.add_form(form)
                    for form in deleted_forms:
                        group.remove_form(form)
                    
                    if new_forms or deleted_forms:
                        # finally, if anything changed update the sql view
                        group.update_view()
                    
                    # and take them back to the viewing page
                    return HttpResponseRedirect(reverse('xformmanager.views.form_data_group', 
                                                        kwargs={"group_id": group.id }))
            else: 
                form_validation = "You must choose at least one form!"
    else:
        group_form = FormDataGroupForm(instance=group)
        
    all_forms = FormDefModel.objects.filter(domain=req.user.selected_domain)\
                            .order_by("target_namespace", "version")
    selected_forms = group.forms.all()
    unused_forms = [form for form in all_forms if form not in selected_forms]
    return render_to_response(req, "xformmanager/edit_form_data_group.html", 
                                  {"group_form": group_form,
                                   "group": group,
                                   "selected_forms": selected_forms,
                                   "all_forms": unused_forms,
                                   "form_validation": form_validation })
Esempio n. 2
0
def new_form_data_group(req):
    """Create a new model-defined group of forms"""
    form_validation = None
    if req.method == "POST":
        form = FormDataGroupForm(req.POST) 
        if form.is_valid():
            if "formdefs" in req.POST:
                form_ids = req.POST.getlist("formdefs")
                if not form_ids:
                    form_validation = "You must choose at least one form!"
                else:
                    new_group = form.save(commit=False)
                    new_group.domain = req.user.selected_domain
                    # TODO: better handling of the name attribute.  
                    new_group.name = get_unique_value(FormDataGroup.objects, "name", new_group.display_name)
                    forms = [FormDefModel.objects.get(id=form_id) for form_id in form_ids]
                    new_group.save()
                    new_group.forms = forms
                    new_group.save()
                    # don't forget to do all the default column updates as well.
                    for form in forms:
                        new_group.add_form_columns(form)
                    
                    # finally update the sql view
                    new_group.update_view()
                    
                    # when done, take them to the edit page for further tweaking
                    return HttpResponseRedirect(reverse('xformmanager.views.edit_form_data_group', 
                                            kwargs={"group_id": new_group.id }))
                    
                        
            else: 
                form_validation = "You must choose at least one form!"
    else:
        form = FormDataGroupForm()
        
    all_forms = FormDefModel.objects.filter(domain=req.user.selected_domain)\
                            .order_by("target_namespace", "version")
    return render_to_response(req, "xformmanager/edit_form_data_group.html", 
                                  {"group_form": form,
                                   "all_forms": all_forms,
                                   "selected_forms": [],
                                   "form_validation": form_validation })