[Erp5-report] r14589 - /erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widg...

nobody at svn.erp5.org nobody at svn.erp5.org
Wed May 23 19:50:34 CEST 2007


Author: ivan
Date: Wed May 23 19:50:33 2007
New Revision: 14589

URL: http://svn.erp5.org?rev=14589&view=rev
Log:
Simple evaluation of documents and persons added.

Added:
    erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_calculateStatistics.xml
Modified:
    erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_viewDashboardRenderer.xml

Added: erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_calculateStatistics.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_calculateStatistics.xml?rev=14589&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_calculateStatistics.xml (added)
+++ erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_calculateStatistics.xml Wed May 23 19:50:33 2007
@@ -1,0 +1,259 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.PythonScripts.PythonScript</string>
+          <string>PythonScript</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Python_magic</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>"""\n
+  A simple script to calculate some statistics\n
+  about documents and persons in the system.\n
+\n
+"""\n
+from Products.ERP5Type.Cache import CachingMethod\n
+\n
+def sortDictByValues(adict):\n
+  """ \n
+    Sort a dictionary by maximal values. \n
+    Return sorted list of tuples [(key, value),...]\n
+  """\n
+  items = adict.items()\n
+  items.sort(lambda x,y: cmp(x[1], y[1]))\n
+  items.reverse()\n
+  return items\n
+\n
+def calculateStatistics():\n
+  portal = context.getPortalObject()\n
+  portal_catalog = portal.portal_catalog\n
+  portal_types = context.portal_types\n
+\n
+  # document statistics\n
+  documents_groups = {}\n
+  documents_owners = {}\n
+  documents_classifications = {}\n
+  document_content_types = portal_types[\'Document Module\'].allowed_content_types\n
+  all_documents = portal_catalog.searchResults(portal_type = document_content_types)\n
+  total_documents = portal_catalog.countResults(portal_type = document_content_types)[0][0]\n
+  total_documents_released = portal_catalog.countResults(portal_type = document_content_types,\n
+                                                         validation_state = \'released\')[0][0]\n
+  total_documents_shared = portal_catalog.countResults(portal_type = document_content_types,\n
+                                                       validation_state = \'shared\')[0][0]\n
+  total_documents_draft = portal_catalog.countResults(portal_type = document_content_types,\n
+                                                      validation_state = \'draft\')[0][0]\n
+  total_documents_published = portal_catalog.countResults(portal_type = document_content_types,\n
+                                                        validation_state = \'published\')[0][0]\n
+  # get what\'s still not in catalog as info\n
+  for doc in all_documents:\n
+    obj = doc.getObject()\n
+    # count classification\n
+    classification = obj.getClassification()\n
+    if classification is not None:\n
+      documents_classifications[classification] = documents_classifications.get(classification, 0) + 1\n
+    # count devision\n
+    group = obj.getGroup()\n
+    if group is not None:\n
+      documents_groups[group] = documents_groups.get(group, 0) + 1\n
+    # XXX: count owner\n
+    doc_metadata = portal_catalog.getMetadataForUid(doc.getUid())\n
+    doc_owner = doc_metadata.get(\'owner\', None)\n
+    if doc_owner is not None and doc_owner.find(\'@\')!=-1:\n
+      # we have a website user. we wanted to filter Zope users\n
+      documents_owners[doc_owner] = documents_owners.get(doc_owner, 0) + 1\n
+  # sort the most "productive" devision group by number of documents contributed\n
+  documents_groups_sorted = sortDictByValues(documents_groups)\n
+  # sort sort the most "productive" person by number of documents contributed\n
+  documents_owners_sorted = sortDictByValues(documents_owners)\n
+  documents_stats = dict(total_documents = total_documents,\n
+                         total_documents_released = total_documents_released,\n
+                         total_documents_shared = total_documents_shared,\n
+                         total_documents_draft = total_documents_draft,\n
+                         total_documents_published = total_documents_published,\n
+                         documents_groups_sorted = documents_groups_sorted,\n
+                         documents_owners_sorted = documents_owners_sorted,\n
+                         classifications = documents_classifications)\n
+  # person statistics\n
+  total_persons = portal_catalog.countResults(portal_type = \'Person\')[0][0]\n
+  total_persons_draft = portal_catalog.countResults(portal_type = \'Person\',\n
+                                                    validation_state = \'draft\')[0][0]\n
+  total_persons_validated = portal_catalog.countResults(portal_type = \'Person\',\n
+                                                      validation_state = \'validated\')[0][0]\n
+  persons_stats = dict(total_persons = total_persons,\n
+                       total_persons_draft = total_persons_draft,\n
+                       total_persons_validated = total_persons_validated)\n
+  # final statistics\n
+  statistics = dict(documents = documents_stats,\n
+                    persons = persons_stats)\n
+  return statistics\n
+\n
+# cache statistics for a short period\n
+cached_method = CachingMethod(calculateStatistics, \n
+                              script.id, \n
+                              \'erp5_content_short\')\n
+stats = cached_method() #calculateStatistics()\n
+\n
+return stats\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_filepath</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_owner</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>_proxy_roles</string> </key>
+            <value>
+              <tuple>
+                <string>Anonymous</string>
+                <string>Assignee</string>
+                <string>Assignor</string>
+                <string>Associate</string>
+                <string>Auditor</string>
+                <string>Authenticated</string>
+                <string>Author</string>
+                <string>Manager</string>
+                <string>Member</string>
+                <string>Owner</string>
+                <string>Reviewer</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>0</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>Products.ERP5Type.Cache</string>
+                            <string>CachingMethod</string>
+                            <string>sortDictByValues</string>
+                            <string>calculateStatistics</string>
+                            <string>_getattr_</string>
+                            <string>script</string>
+                            <string>cached_method</string>
+                            <string>stats</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>WebSite_calculateStatistics</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>

Modified: erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_viewDashboardRenderer.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_viewDashboardRenderer.xml?rev=14589&r1=14588&r2=14589&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_viewDashboardRenderer.xml (original)
+++ erp5/trunk/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_viewDashboardRenderer.xml Wed May 23 19:50:33 2007
@@ -51,7 +51,7 @@
 <tal:block tal:define="NEWS_LEN NEWS_LEN | python:10;\n
                        TASK_LEN TASK_LEN | python:10;">\n
 <tal:block metal:define-macro="act">\n
-  <tal:block tal:define="tasks python: list(here.WebSite_getPendingEventInfoList())[:TASK_LEN];">\n
+ <tal:block tal:define="tasks python: list(here.WebSite_getPendingEventInfoList())[:TASK_LEN];">\n
     <div class="boxHeader" >\n
       <a  i18n:translate="" i18n:domain="ui"\n
         tal:attributes="href string: search_area/WebSite_viewPendingEventList">\n
@@ -61,8 +61,8 @@
     </div>\n
     <div class="boxContent">\n
       <ul>\n
-        <li tal:repeat="doc tasks">\n
-          <tal:block tal:condition="python:doc is not None">\n
+         <li tal:repeat="doc tasks">\n
+         <tal:block tal:condition="python:doc is not None">\n
           <a tal:define="url python: \'%s/view\' % doc.absolute_url()"\n
             tal:attributes="href url">\n
             <span tal:replace="doc/portal_type"/>:\n
@@ -72,7 +72,7 @@
             (<span tal:content="python: doc.getValidationStateTitle()" \n
                     tal:attributes="class python:doc.getTranslatedValidationStateTitle()"/>)\n
           </a>\n
-          </tal:block>\n
+         </tal:block>\n
         </li>\n
       </ul>\n
       <a tal:condition="python: len(tasks) > TASK_LEN" \n
@@ -111,12 +111,58 @@
 </tal:block>\n
 \n
 <tal:block metal:define-macro="evaluate">\n
-  <tal:block>\n
+  <tal:block tal:define="stats here/WebSite_calculateStatistics;\n
+                         persons_stats stats/persons;\n
+                         document_stats stats/documents;">\n
     <div class="boxHeader" value="" i18n:translate="" i18n:domain="ui">\n
       Evaluate\n
     </div>\n
     <div class="boxContent">\n
-      Some nice evaluation parameters.\n
+      <h5>Documents (overall)</h5>\n
+      <ul>\n
+        <li>Published: <span tal:content="document_stats/total_documents_published"/></li>\n
+        <li>Released: <span tal:content="document_stats/total_documents_released"/></li>\n
+        <li>Shared: <span tal:content="document_stats/total_documents_shared"/></li>\n
+        <li>Draft: <span tal:content="document_stats/total_documents_draft"/></li>\n
+        <li>Total: <span tal:content="document_stats/total_documents"/></li>\n
+      </ul>\n
+\n
+      <h5>Documents (classified)</h5>\n
+        <ul>\n
+          <li tal:repeat="classification python:document_stats[\'classifications\'].items()">\n
+            <tal:block tal:define="classification_obj python: here.restrictedTraverse(\'portal_categories/classification/%s\' %classification[0])">\n
+            <span tal:content="classification_obj/getTitle"/>: \n
+            <span tal:content="python: classification[1]"/>\n
+            </tal:block>\n
+          </li>\n
+        </ul>\n
+\n
+      <h5>Most productive</h5>\n
+      <ul tal:define="group python: document_stats[\'documents_groups_sorted\'][0];\n
+                      group_obj python: here.restrictedTraverse(\'portal_categories/group/%s\' %group[0]);\n
+                      person python: document_stats[\'documents_owners_sorted\'][0];\n
+                      person_obj python: here.ERP5Site_getAuthenticatedMemberPersonValue(person[0]);">\n
+        <li><b>Person:</b> \n
+             <a href="" tal:attributes="href person_obj/absolute_url">\n
+               <span tal:content="person_obj/getTitle"/>\n
+              (<span tal:content="python: person[1]"/>)\n
+             </a>\n
+        </li>\n
+        <li><b>Devision:</b> \n
+             <a href="" tal:attributes="href group_obj/absolute_url">\n
+               <span tal:content="group_obj/getTitle"/>\n
+              (<span tal:content="python: group[1]"/>)\n
+             </a>\n
+        </li>\n
+      </ul>\n
+\n
+      <h5>Human Resources</h5>\n
+      <ul>\n
+        <li>Total: <span tal:content="persons_stats/total_persons"/></li>\n
+        <li>Validated: <span tal:content="persons_stats/total_persons_validated"/></li>\n
+        <li>Draft: <span tal:content="persons_stats/total_persons_draft"/></li>\n
+      </ul>\n
+\n
     </div>\n
   </tal:block>\n
 </tal:block>\n




More information about the Erp5-report mailing list