commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue] r7794 - in trunk/gnue-reports: samples/foobulations src/base src/


From: btami
Subject: [gnue] r7794 - in trunk/gnue-reports: samples/foobulations src/base src/base/layout
Date: Sun, 7 Aug 2005 13:36:57 -0500 (CDT)

Author: btami
Date: 2005-08-07 13:36:55 -0500 (Sun, 07 Aug 2005)
New Revision: 7794

Modified:
   trunk/gnue-reports/samples/foobulations/monthly.grd
   trunk/gnue-reports/src/base/GRDataMapper.py
   trunk/gnue-reports/src/base/GRParser.py
   trunk/gnue-reports/src/base/layout/GRFormula.py
   trunk/gnue-reports/src/base/layout/GRLayout.py
   trunk/gnue-reports/src/base/layout/GRSumm.py
Log:
added formula summary support

Modified: trunk/gnue-reports/samples/foobulations/monthly.grd
===================================================================
--- trunk/gnue-reports/samples/foobulations/monthly.grd 2005-08-07 14:36:00 UTC 
(rev 7793)
+++ trunk/gnue-reports/samples/foobulations/monthly.grd 2005-08-07 18:36:55 UTC 
(rev 7794)
@@ -74,6 +74,7 @@
             <out:col/>
             <out:col align="right">Total for <field name="name"/></out:col>
             <out:col align="right"><summ function="sum" section="details" 
field="foobs"/></out:col>
+            <out:col align="right"><summ function="sum" section="details" 
formula="plus2"/></out:col>
           </out:row>
           <default>
             <out:row>
@@ -82,11 +83,13 @@
               <out:col/>
             </out:row>
           </default>
+          <formula name="sumplus2"><trigger type="On-Process" 
src="myFoobs"/></formula>
         </section>
         <out:row type="subtotal" level="1">
           <out:col/>
           <out:col align="right">Grand Total</out:col>
           <out:col align="right"><summ function="sum" section="nameBreak" 
field="foobs"/></out:col>
+          <out:col align="right"><summ function="sum" section="nameBreak" 
formula="sumplus2"/></out:col>
         </out:row>
 
 

Modified: trunk/gnue-reports/src/base/GRDataMapper.py
===================================================================
--- trunk/gnue-reports/src/base/GRDataMapper.py 2005-08-07 14:36:00 UTC (rev 
7793)
+++ trunk/gnue-reports/src/base/GRDataMapper.py 2005-08-07 18:36:55 UTC (rev 
7794)
@@ -100,18 +100,18 @@
   #
   #  Add a summary
   #
-  def addSummary(self, function, field):
+  def addSummary(self, function, key):
     try:
-      self.summaries[field][function] = None
+      self.summaries[key][function] = None
     except KeyError:
-      self.summaries[field] = {function:None}
+      self.summaries[key] = {function:None}
 
     # If this function relies on other
     # functions, add those as well (e.g.,
     # average depends on sum and count)
     try:
       for func in _summMultiMapping[function]:
-        self.addSummary(self, func, field)
+        self.addSummary(self, func, key)
     except KeyError:
       pass
 
@@ -119,7 +119,7 @@
   #  Add a formula
   #
   def addFormula(self, name, object):
-    self.formulas[name] = ""
+    self.formulas[name] = None
     self.formulaObjects[name] = object
 
 
@@ -144,7 +144,11 @@
   #  Get a formula's current value
   #
   def getFormula(self, name, format):
-    return GDataFormatter.applyFormatting(self.formulas[name], format)
+    val = self.formulas[name]
+    if val is None:
+      return ""
+    else:
+      return GDataFormatter.applyFormatting("%s" % val, format)
 
   #
   #  Add a section
@@ -157,9 +161,9 @@
   # Zero out the summary data
   #
   def clearSummaries(self):
-    for field in self.summaries.keys():
-      for function in self.summaries[field].keys():
-        self.summaries[field][function] = None
+    for key in self.summaries.keys():
+      for function in self.summaries[key].keys():
+        self.summaries[key][function] = None
     self._clearOnNextSet = 0
 
 
@@ -182,23 +186,6 @@
     return changed
 
 
-  #
-  # Initiate the calculation of summaries
-  #
-  # TODO: I **SERIOUSLY** don't think this is being used any longer
-  def _handleSummary(self):
-    if self._clearOnNextSet:
-      self.clearSummaries()
-    # Now, calc all summaries
-    for field in self.summaries.keys():
-      for function in _summFunctions:
-        if self.summaries[field].has_key(function):
-          try:
-            self._summMap[function](field, self.fields[field])
-          except KeyError:
-            pass
-
-
   def _dsResultSetActivated (self, event):
     GDebug.printMesg (5, 'GRDataMapper._dsResultSetActivated on %s' % 
self.name)
     self._resultsets.insert (0, event.resultSet)
@@ -209,45 +196,45 @@
   ##
 
   # Summary function: "count"
-  def _summ_count(self, field, value):
+  def _summ_count(self, key, value):
     if value is not None:
       try:
-        self.summaries[field]['count'] += 1
+        self.summaries[key]['count'] += 1
       except TypeError:
-        self.summaries[field]['count'] = 1
+        self.summaries[key]['count'] = 1
 
   # Summary function: "sum"
-  def _summ_sum(self, field, value):
+  def _summ_sum(self, key, value):
     if value is not None:
       if type(value) in _numericTypes:
         try:
-          self.summaries[field]['sum'] += FixedPoint(value)
+          self.summaries[key]['sum'] += FixedPoint(value)
         except TypeError:
-          self.summaries[field]['sum'] = FixedPoint(value)
+          self.summaries[key]['sum'] = FixedPoint(value)
       else:
-        raise "Attempting to 'sum' a non-numeric field %s" % (field)
+        raise "Attempting to 'sum' a non-numeric %s" % (key)
 
   # Summary function: "average"
-  def _summ_avg(self, field, value):
+  def _summ_avg(self, key, value):
     if type(value) in _numericTypes:
-      self.summaries[field]['average'] = \
-          self.summaries[field]['sum'] / self.summaries[field]['count']
+      self.summaries[key]['average'] = \
+          self.summaries[key]['sum'] / self.summaries[key]['count']
     else:
-      raise "Attempting to 'average' a non-numeric field %s" % (field)
+      raise "Attempting to 'average' a non-numeric %s" % (key)
 
   # Summary function: "min"
-  def _summ_min(self, field, value):
+  def _summ_min(self, key, value):
     if value is not None:
-      existing = self.summaries[field]['min']
+      existing = self.summaries[key]['min']
       if existing is None or value < existing:
-        self.summaries[field]['min'] = value
+        self.summaries[key]['min'] = value
 
   # Summary function: "max"
-  def _summ_max(self, field, value):
+  def _summ_max(self, key, value):
     if value is not None:
-      existing = self.summaries[field]['min']
+      existing = self.summaries[key]['min']
       if existing is None or value > existing:
-        self.summaries[field]['min'] = value
+        self.summaries[key]['min'] = value
 
 
 
@@ -302,12 +289,12 @@
     self.sources.getDataSource(self.sectionMap[section].source) \
           .referenceField(field)
 
-  def addSummaryToSection(self, function, section, field):
+  def addSummaryToSection(self, function, section, field, formula):
+    self.sectionMap[section].addSummary(function, (field, formula))
+    if field != 'none':
+      self.sources.getDataSource(self.sectionMap[section].source) \
+            .referenceField(field)
 
-    self.sectionMap[section].addSummary(function, field)
-    self.sources.getDataSource(self.sectionMap[section].source) \
-          .referenceField(field)
-
   def addFormulaToSection(self, section, name, object):
     self.sectionMap[section].addFormula(name, object)
 
@@ -374,6 +361,13 @@
       nextSection = None
 
       # Apply the recordset to each section we control,
+      for s in self.sourceMap[source]:
+
+        # Save the new field values in the data handler
+        for field in s.fields.keys():
+          s.fields[field] = recordset.getField(field)
+
+
       # determining the first section to change.
       for s in self.sourceMap[source]:
 
@@ -386,23 +380,23 @@
           GDebug.printMesg(10, "After next record, first changed section is 
%s" % s.name)
           firstSection = s.name
 
-
-        # Save the new field values in the data handler
-        for field in s.fields.keys():
-          s.fields[field] = recordset.getField(field)
-
         #   and run formula triggers
         for formula in s.formulas.keys():
-          s.formulas[formula] = 
s.formulaObjects[formula].processTrigger('On-Process')
+          if s.formulaObjects[formula] != None:
+            s.formulas[formula] = 
s.formulaObjects[formula].processTrigger('On-Process')
 
         # ... and save any new summary data
         if s._clearOnNextSet:
           s.clearSummaries()
 
-        for field in s.summaries.keys():
+        for key in s.summaries.keys():
+          field, formula = key
           for function in _summFunctions:
-            if s.summaries[field].has_key(function):
-              s._summMap[function](field, recordset.getField(field))
+            if s.summaries[key].has_key(function):
+              if field != 'none':
+                s._summMap[function](key, recordset.getField(field))
+              elif formula != 'none' and s.formulas.has_key(formula):
+                s._summMap[function](key, s.formulas[formula])
 
         # What will the next section be?
         if (nextSection is None and \

Modified: trunk/gnue-reports/src/base/GRParser.py
===================================================================
--- trunk/gnue-reports/src/base/GRParser.py     2005-08-07 14:36:00 UTC (rev 
7793)
+++ trunk/gnue-reports/src/base/GRParser.py     2005-08-07 18:36:55 UTC (rev 
7794)
@@ -231,6 +231,9 @@
             'field':      {
                'Typecast': GTypecast.name,
                'Default': None},
+            'formula':      {
+               'Typecast': GTypecast.name,
+               'Default': None},
             'section':     {
                'Typecast': GTypecast.name },
             'format':      {
@@ -242,8 +245,6 @@
          'Attributes': {
             'name':        {
                'Typecast': GTypecast.name },
-            'section':     {
-               'Typecast': GTypecast.name },
             'format':      {
                'Typecast': GTypecast.name } },
          'ParentTags':  ('layout',) },

Modified: trunk/gnue-reports/src/base/layout/GRFormula.py
===================================================================
--- trunk/gnue-reports/src/base/layout/GRFormula.py     2005-08-07 14:36:00 UTC 
(rev 7793)
+++ trunk/gnue-reports/src/base/layout/GRFormula.py     2005-08-07 18:36:55 UTC 
(rev 7794)
@@ -46,7 +46,6 @@
     GRLayoutElement.__init__(self, parent, 'GRFormula')
     self.section = None
     self.format = None
-    self._value = ""
 
     self._validTriggers = {'ON-PROCESS': 'On-Process'}
 

Modified: trunk/gnue-reports/src/base/layout/GRLayout.py
===================================================================
--- trunk/gnue-reports/src/base/layout/GRLayout.py      2005-08-07 14:36:00 UTC 
(rev 7793)
+++ trunk/gnue-reports/src/base/layout/GRLayout.py      2005-08-07 18:36:55 UTC 
(rev 7794)
@@ -180,7 +180,7 @@
         GDebug.printMesg(6,'Mapping summary %s [%s] to section %s' \
                    % (object._field, object.function, object._section))
         self._mapper.addSummaryToSection(object.function,
-                                 object._section, object._field)
+                                 object._section, object._field, 
object._formula)
 
       elif isinstance(object, GRFormula):
         if object.section == None:

Modified: trunk/gnue-reports/src/base/layout/GRSumm.py
===================================================================
--- trunk/gnue-reports/src/base/layout/GRSumm.py        2005-08-07 14:36:00 UTC 
(rev 7793)
+++ trunk/gnue-reports/src/base/layout/GRSumm.py        2005-08-07 18:36:55 UTC 
(rev 7794)
@@ -52,11 +52,12 @@
       self._section = None
 
     self._field = string.lower(self.field)
+    self._formula = string.lower(self.formula)
     return GRLayoutElement._buildObject(self)
 
   def process(self, dest, mapper, isfirst, islast, firstSection, nextSection):
     ## structuralComment(dest,"<!-- [summ:%s:%s:%s] -->" % (self.section, 
self._field, self.function))
-    dest.write (self._mymapper.getSummary(self._field, self.function, 
self.format))
+    dest.write (self._mymapper.getSummary((self._field, self._formula), 
self.function, self.format))
     ## structuralComment(dest,"<!-- [/summ] -->")
     return nextSection
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]