From ca17816ba6e05829fbdeeee0aaa9cab92c82a6a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Mon, 30 Jan 2006 17:40:32 +0000
Subject: [PATCH] validate accounting period from organisations

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@5444 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../scripts/validateTransaction.xml           | 76 +++++++++++--------
 1 file changed, 45 insertions(+), 31 deletions(-)

diff --git a/bt5/erp5_accounting/WorkflowTemplateItem/portal_workflow/accounting_workflow/scripts/validateTransaction.xml b/bt5/erp5_accounting/WorkflowTemplateItem/portal_workflow/accounting_workflow/scripts/validateTransaction.xml
index aa8f5079ef..e5a1f2027a 100755
--- a/bt5/erp5_accounting/WorkflowTemplateItem/portal_workflow/accounting_workflow/scripts/validateTransaction.xml
+++ b/bt5/erp5_accounting/WorkflowTemplateItem/portal_workflow/accounting_workflow/scripts/validateTransaction.xml
@@ -68,52 +68,66 @@
             <key> <string>_body</string> </key>
             <value> <string encoding="cdata"><![CDATA[
 
-from Products.DCWorkflow.DCWorkflow import ValidationFailed\n
+"""Validates the transaction from the source section.\n
+Currently only works for \n
+"""\n
 \n
+from Products.DCWorkflow.DCWorkflow import ValidationFailed\n
 error_message = \'\'\n
 \n
-# Purchase Invoice Transaction or Sale Invoice Transaction.\n
 transaction = state_change[\'object\']\n
 skip_period_validation = state_change[\'kwargs\'].get(\'skip_period_validation\', 0)\n
 transition = state_change[\'transition\']\n
 if transition.id in (\'plan_action\', \'confirm_action\') :\n
   skip_period_validation = 1\n
 \n
-if transaction.getStopDate() in (None, \'\') : \n
+N_ = transition.Base_translateString\n
+\n
+# Get sections and a currency.\n
+source_section = transaction.getSourceSectionValue(\n
+            portal_type = [\'Organisation\',\'Category\'])\n
+if source_section and source_section.getPortalType() != \'Organisation\' :\n
+  source_section = source_section.getMappingRelatedValue(\n
+            portal_type = \'Organisation\')\n
+if not source_section :\n
+  raise ValidationFailed, N_(\n
+      \'Action impossible : Source Section is not Defined.\')\n
+  \n
+destination_section = transaction.getDestinationSection(\n
+            portal_type = [\'Organisation\', \'Person\'])\n
+# if it\'s not an invoice, then we can validate without destination.\n
+if not destination_section and \\\n
+    transaction.getPortalType() in transaction.getPortalInvoiceTypeList() :\n
+  raise ValidationFailed, N_(\n
+      \'Action impossible : Destination Section is not Defined.\')\n
+\n
+currency = transaction.getResource()\n
+if not currency :\n
+  raise ValidationFailed, N_(\n
+      \'Action impossible : Currency is not Defined.\')\n
+\n
+if transaction.getStopDate() in (None, \'\') :\n
   error_message = \'date is not defined\'\n
-else: \n
+else:\n
   if not skip_period_validation :\n
     valid_date = 0\n
     # check the date is in an opened period\n
     transaction_date = DateTime( transaction.getStopDate().year(),\n
                                  transaction.getStopDate().month(),\n
-                                 transaction.getStopDate().day() ) # we don\'t care about hour:minutes\n
-    for apd in context.portal_catalog(\n
-         portal_type = "Accounting Period", \n
-         simulation_state = "planned") : \n
+                                 transaction.getStopDate().day(),\n
+                                 # we don\'t care about hour:minutes\n
+                               )\n
+    for apd in source_section.searchFolder(\n
+         portal_type = "Accounting Period",\n
+         simulation_state = "planned") :\n
       apd = apd.getObject()\n
       if apd.getStartDate() <= transaction_date <= apd.getStopDate():\n
         valid_date = 1\n
     if not valid_date :\n
-      error_message = "Date is not in an openned Accounting Period" \n
+      error_message = "Date is not in an openned Accounting Period"\n
 \n
-# Get sections and a currency.\n
-source_section = transaction.getSourceSection(portal_type = [\'Organisation\',\'Category\'])\n
-destination_section = transaction.getDestinationSection(portal_type = [\'Organisation\', \'Person\'])\n
-currency = transaction.getResource()\n
-\n
-if source_section in (None, \'\'):\n
-  error_message = \'Source Section is not defined\'\n
-elif transaction.getPortalType() not in (\'Balance Transaction\', \'Accounting Transaction\'):\n
-  if destination_section in (None, \'\'):\n
-    error_message = \'Destination Section is not defined\'\n
-    if transaction.getDestinationSection() not in (None, \'\'):\n
-      error_message = \'Destination Section is not an Organisation or a Person\'\n
-  elif currency in (None, \'\'):\n
-    error_message = \'currency is not defined\'\n
-\n
-if error_message != \'\':\n
-  raise ValidationFailed, \'Action impossible : \' + error_message\n
+if error_message :\n
+  raise ValidationFailed, N_(\'Action impossible : \' + error_message)\n
 
 
 ]]></string> </value>
@@ -132,7 +146,7 @@ if error_message != \'\':\n
         </item>
         <item>
             <key> <string>_filepath</string> </key>
-            <value> <string>Script (Python):/nexedi/portal_workflow/accounting_workflow/scripts/validateTransaction</string> </value>
+            <value> <string>Script (Python):/erp5/portal_workflow/accounting_workflow/scripts/validateTransaction</string> </value>
         </item>
         <item>
             <key> <string>_params</string> </key>
@@ -189,16 +203,16 @@ if error_message != \'\':\n
                             <string>_getattr_</string>
                             <string>skip_period_validation</string>
                             <string>transition</string>
+                            <string>N_</string>
+                            <string>source_section</string>
+                            <string>destination_section</string>
+                            <string>currency</string>
                             <string>None</string>
                             <string>valid_date</string>
                             <string>DateTime</string>
                             <string>transaction_date</string>
                             <string>_getiter_</string>
-                            <string>context</string>
                             <string>apd</string>
-                            <string>source_section</string>
-                            <string>destination_section</string>
-                            <string>currency</string>
                           </tuple>
                         </value>
                     </item>
-- 
2.30.9