Example #1
0
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()
Example #2
0
  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
Example #3
0
    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
Example #4
0
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()