def edit_report(request, design_id=None): """View function for the Report Generator.""" action = request.path mform = report_gen_views.report_form() design = beeswax.views.safe_get_design(request, models.SavedQuery.REPORT, design_id) error_message = None log = None # Use a loop structure to allow the use of 'break' to get out for _ in range(1): # Always bind to POST data, and update the design accordingly if request.method == 'POST': mform.bind(request.POST) report_gen_views.fixup_union(mform, subform_name='union', data=request.POST, is_root=True) to_submit = request.POST.has_key('button-submit') to_advanced = request.POST.has_key('button-advanced') # Always validate the saveform, which will tell us whether it needs explicit saving if not mform.saveform.is_valid(): break to_save = mform.saveform.cleaned_data['save'] if to_submit or to_advanced or to_save: design = beeswax.views.save_design(request, mform, models.SavedQuery.REPORT, design, to_save) action = urlresolvers.reverse(beeswax.views.edit_report, kwargs=dict(design_id=design.id)) # Submit? if (to_advanced or to_submit) and mform.is_valid(): query_str = report_gen_views.construct_query(mform) if to_advanced: return beeswax.views.confirm_query(request, query_str) elif to_submit: query_msg = beeswax.views.make_beeswax_query( request, query_str) try: return beeswax.views.execute_directly( request, query_msg, design) except BeeswaxException, ex: error_message, log = beeswax.views.expand_exception(ex) # Fall through if just adding a new column. else: if design.id is not None: data = beeswax.report.design.ReportDesign.loads( design.data).get_query_dict() mform.bind(data) mform.saveform.set_data(design.name, design.desc) report_gen_views.fixup_union(mform, subform_name='union', data=data, is_root=True) else: # New design mform.bind()
def get_query_dict(self): """get_query_dict() -> QueryDict""" # We construct the mform to use its structure and prefix. We don't actually bind # data to the forms. mform = report_gen_views.report_form() mform.bind() res = django.http.QueryDict('', mutable=True) res.update(denormalize_formset_dict( self._data_dict['columns'], mform.columns, ReportDesign._COLUMN_ATTRS)) res.update(self._denormalize_union_mform(self._data_dict['union'], mform.union)) return res
def get_query_dict(self): """get_query_dict() -> QueryDict""" # We construct the mform to use its structure and prefix. We don't actually bind # data to the forms. mform = report_gen_views.report_form() mform.bind() res = django.http.QueryDict('', mutable=True) res.update( denormalize_formset_dict(self._data_dict['columns'], mform.columns, ReportDesign._COLUMN_ATTRS)) res.update( self._denormalize_union_mform(self._data_dict['union'], mform.union)) return res
def edit_report(request, design_id=None): """View function for the Report Generator.""" action = request.path mform = report_gen_views.report_form() design = beeswax.views.safe_get_design(request, models.SavedQuery.REPORT, design_id) error_message = None log = None # Use a loop structure to allow the use of 'break' to get out for _ in range(1): # Always bind to POST data, and update the design accordingly if request.method == 'POST': mform.bind(request.POST) report_gen_views.fixup_union(mform, subform_name='union', data=request.POST, is_root=True) to_submit = request.POST.has_key('button-submit') to_advanced = request.POST.has_key('button-advanced') # Always validate the saveform, which will tell us whether it needs explicit saving if not mform.saveform.is_valid(): break to_save = mform.saveform.cleaned_data['save'] if to_submit or to_advanced or to_save: design = beeswax.views.save_design( request, mform, models.SavedQuery.REPORT, design, to_save) action = urlresolvers.reverse(beeswax.views.edit_report, kwargs=dict(design_id=design.id)) # Submit? if (to_advanced or to_submit) and mform.is_valid(): query_str = report_gen_views.construct_query(mform) if to_advanced: return beeswax.views.confirm_query(request, query_str) elif to_submit: query_msg = beeswax.views.make_beeswax_query(request, query_str) try: return beeswax.views.execute_directly(request, query_msg, design) except BeeswaxException, ex: error_message, log = beeswax.views.expand_exception(ex) # Fall through if just adding a new column. else: if design.id is not None: data = beeswax.report.design.ReportDesign.loads(design.data).get_query_dict() mform.bind(data) mform.saveform.set_data(design.name, design.desc) report_gen_views.fixup_union(mform, subform_name='union', data=data, is_root=True) else: # New design mform.bind()