diff --git a/bt5/erp5_archive/SkinTemplateItem/portal_skins/erp5_archive/Archive_getNodeUidList.xml b/bt5/erp5_archive/SkinTemplateItem/portal_skins/erp5_archive/Archive_getNodeUidList.xml
index a46c17ee3f1d7c07d557048822da8a801efa36c9..46ed9fa22c6d7953ee901f36c27b81b1e231afcc 100644
--- a/bt5/erp5_archive/SkinTemplateItem/portal_skins/erp5_archive/Archive_getNodeUidList.xml
+++ b/bt5/erp5_archive/SkinTemplateItem/portal_skins/erp5_archive/Archive_getNodeUidList.xml
@@ -133,14 +133,18 @@ account_node_uid</string> </value>
 select distinct(stock.node_uid) \n
 from stock \n
 where \n
-  (stock.payment_uid not in (\n
-   <dtml-in account_uid_list>\n
-    <dtml-unless sequence-start>, </dtml-unless>\n
-     <dtml-sqlvar sequence-item type="int">\n
-   </dtml-in>\n
-   ) \n
-  or stock.payment_uid is NULL\n
-  or stock.payment_uid = "")\n
+  (1)\n
+  <dtml-if account_uid_list>\n
+    or \n
+    (stock.payment_uid not in ( \n
+     <dtml-in account_uid_list>\n
+      <dtml-unless sequence-start>, </dtml-unless>\n
+       <dtml-sqlvar sequence-item type="int">\n
+     </dtml-in>\n
+     ) \n
+    or stock.payment_uid is NULL\n
+    or stock.payment_uid = "")\n
+  </dtml-if>\n
   <dtml-if account_node_uid>\n
     and stock.node_uid != <dtml-sqlvar account_node_uid type="int" >\n
   </dtml-if>
@@ -186,14 +190,18 @@ where \n
 select distinct(stock.node_uid) \n
 from stock \n
 where \n
-  (stock.payment_uid not in (\n
-   <dtml-in account_uid_list>\n
-    <dtml-unless sequence-start>, </dtml-unless>\n
-     <dtml-sqlvar sequence-item type="int">\n
-   </dtml-in>\n
-   ) \n
-  or stock.payment_uid is NULL\n
-  or stock.payment_uid = "")\n
+  (1)\n
+  <dtml-if account_uid_list>\n
+    or \n
+    (stock.payment_uid not in ( \n
+     <dtml-in account_uid_list>\n
+      <dtml-unless sequence-start>, </dtml-unless>\n
+       <dtml-sqlvar sequence-item type="int">\n
+     </dtml-in>\n
+     ) \n
+    or stock.payment_uid is NULL\n
+    or stock.payment_uid = "")\n
+  </dtml-if>\n
   <dtml-if account_node_uid>\n
     and stock.node_uid != <dtml-sqlvar account_node_uid type="int" >\n
   </dtml-if>
diff --git a/bt5/erp5_archive/SkinTemplateItem/portal_skins/erp5_archive/Archive_getPaymentUidList.xml b/bt5/erp5_archive/SkinTemplateItem/portal_skins/erp5_archive/Archive_getPaymentUidList.xml
index 5fbc65e3a547ffdc4913321977ae9ad3a1eaf90c..970eade9e5137b342cc71862c0bf6a300aa3887d 100644
--- a/bt5/erp5_archive/SkinTemplateItem/portal_skins/erp5_archive/Archive_getPaymentUidList.xml
+++ b/bt5/erp5_archive/SkinTemplateItem/portal_skins/erp5_archive/Archive_getPaymentUidList.xml
@@ -125,12 +125,16 @@
 select distinct(stock.payment_uid) \n
 from stock \n
 where \n
-  stock.payment_uid in (\n
-   <dtml-in account_uid_list>\n
-    <dtml-unless sequence-start>, </dtml-unless>\n
-     <dtml-sqlvar sequence-item type="int">\n
-   </dtml-in>\n
-   ) \n
+  (1)\n
+  <dtml-if account_uid_list>\n
+    and\n
+    stock.payment_uid in (\n
+     <dtml-in account_uid_list>\n
+       <dtml-unless sequence-start>, </dtml-unless>\n
+       <dtml-sqlvar sequence-item type="int">\n
+     </dtml-in>\n
+     ) \n
+  </dtml-if>\n
   and stock.payment_uid is not NULL  \n
   and stock.payment_uid != ""
 
@@ -175,12 +179,16 @@ where \n
 select distinct(stock.payment_uid) \n
 from stock \n
 where \n
-  stock.payment_uid in (\n
-   <dtml-in account_uid_list>\n
-    <dtml-unless sequence-start>, </dtml-unless>\n
-     <dtml-sqlvar sequence-item type="int">\n
-   </dtml-in>\n
-   ) \n
+  (1)\n
+  <dtml-if account_uid_list>\n
+    and\n
+    stock.payment_uid in (\n
+     <dtml-in account_uid_list>\n
+       <dtml-unless sequence-start>, </dtml-unless>\n
+       <dtml-sqlvar sequence-item type="int">\n
+     </dtml-in>\n
+     ) \n
+  </dtml-if>\n
   and stock.payment_uid is not NULL  \n
   and stock.payment_uid != ""
 
diff --git a/bt5/erp5_archive/WorkflowTemplateItem/portal_workflow/archive_workflow/scripts/checkArchive.xml b/bt5/erp5_archive/WorkflowTemplateItem/portal_workflow/archive_workflow/scripts/checkArchive.xml
index e5bf1fa90a22ec40023a65dac5043280502030c0..82840b5a93fd1c05d56ce32eacd36ecd09187d01 100644
--- a/bt5/erp5_archive/WorkflowTemplateItem/portal_workflow/archive_workflow/scripts/checkArchive.xml
+++ b/bt5/erp5_archive/WorkflowTemplateItem/portal_workflow/archive_workflow/scripts/checkArchive.xml
@@ -75,33 +75,58 @@ from Products.ERP5Type.Message import Message\n
 # Check connection definition\n
 \n
 archive = state_change[\'object\']\n
-min_stop_date = archive.getStopDateRangeMin()\n
+min_stop_date = archive.getStopDateRangeMin().Date()\n
 catalog_id = archive.getCatalogId()\n
 \n
 if "deferred" not in archive.getDeferredConnectionId():\n
   msg = Message(domain=\'ui\', message=\'Deferred connection ID choose is not a deferred connection.\')\n
   raise ValidationFailed, (msg,)\n
 \n
-previous_archive_list = [x.getObject() for x in archive.portal_catalog(portal_type="Archive", validation_state=\'validated\')]\n
-\n
 def sort_max_date(a, b):\n
   return cmp(a.getStopDateRangeMax(), b.getStopDateRangeMax())\n
-previous_archive_list.sort(sort_max_date)\n
 \n
-if len(previous_archive_list) > 0:\n
-  # Check the date\n
-  previous_archive = previous_archive_list[-1]\n
-  if previous_archive.getStopDateRangeMax() is None:\n
-    msg = Message(domain=\'ui\', message=\'No max stop date defined in previous archive.\')\n
-    raise ValidationFailed, (msg,)\n
-  if previous_archive.getStopDateRangeMax() + 1 != min_stop_date:\n
-    msg = Message(domain=\'ui\', message=\'Archive are not contiguous.\')\n
-    raise ValidationFailed, (msg,)\n
-  # Check the catalog\n
-  for arch in previous_archive_list:\n
-    if arch.getCatalogId() == catalog_id and arch is not previous_archive:\n
-      msg = Message(domain=\'ui\', message=\'Use of a former catalog is prohibited.\')\n
+\n
+if archive.getStopDateRangeMax() is not None:\n
+\n
+  previous_archive_list = [x.getObject() for x in archive.portal_catalog(portal_type="Archive",\n
+                                                                         validation_state=\'validated\')]\n
+  previous_archive_list.sort(sort_max_date)\n
+\n
+  if len(previous_archive_list) > 0:\n
+    # Check the date\n
+    for x in len(previous_archive_list):\n
+      previous_archive = previous_archive_list[x]\n
+      # find a previous archive which was not for current catalog\n
+      if previous_archive.getStopDateRangeMax() is not None:\n
+        break\n
+    if previous_archive.getStopDateRangeMax().Date() != min_stop_date:\n
+      msg = Message(domain=\'ui\', message=\'Archive are not contiguous.\')\n
+      raise ValidationFailed, (msg,)\n
+else:\n
+  previous_archive_list = [x.getObject() for x in archive.portal_catalog(portal_type="Archive",\n
+                                                                         validation_state=\'ready\')]\n
+  previous_archive_list.sort(sort_max_date)\n
+\n
+  if len(previous_archive_list) > 0:\n
+    # Check the date\n
+    for x in len(previous_archive_list):\n
+      previous_archive = previous_archive_list[x]\n
+      # find a previous archive which was not for current catalog\n
+      if previous_archive.getStopDateRangeMax() is not None:\n
+        break\n
+    if previous_archive.getStopDateRangeMax().Date() != min_stop_date:\n
+      msg = Message(domain=\'ui\', message=\'Archive are not contiguous.\')\n
       raise ValidationFailed, (msg,)\n
+\n
+\n
+# Check the catalog\n
+previous_archive_list = [x.getObject() for x in archive.portal_catalog(portal_type="Archive",\n
+                                                                       validation_state=[\'validated\', \'ready\'])]\n
+\n
+for arch in previous_archive_list:\n
+  if arch.getCatalogId() == catalog_id and arch is not previous_archive:\n
+    msg = Message(domain=\'ui\', message=\'Use of a former catalog is prohibited.\')\n
+    raise ValidationFailed, (msg,)\n
 
 
 ]]></string> </value>
@@ -157,15 +182,15 @@ if len(previous_archive_list) > 0:\n
                             <string>min_stop_date</string>
                             <string>catalog_id</string>
                             <string>msg</string>
+                            <string>sort_max_date</string>
+                            <string>None</string>
                             <string>append</string>
                             <string>$append0</string>
                             <string>_getiter_</string>
                             <string>x</string>
                             <string>previous_archive_list</string>
-                            <string>sort_max_date</string>
                             <string>len</string>
                             <string>previous_archive</string>
-                            <string>None</string>
                             <string>arch</string>
                           </tuple>
                         </value>
diff --git a/bt5/erp5_archive/bt/change_log b/bt5/erp5_archive/bt/change_log
index e86f897b4853c7174dab4c50d3f620adb0aeee2f..af34b52394d508672022803cc1ea3deba7f9dc2a 100644
--- a/bt5/erp5_archive/bt/change_log
+++ b/bt5/erp5_archive/bt/change_log
@@ -1,3 +1,6 @@
+2007-11-19 Aurel
+* rewrite workflow script to do more check
+
 2007-11-14 Aurel
 * update workflow to defined h:m:s on archive date, many zsql method and script update to take more cases into account
 
diff --git a/bt5/erp5_archive/bt/revision b/bt5/erp5_archive/bt/revision
index b2412e34dff05e77952f3f930772631cac5a3be7..d1cbcfa54043559204a5b30b0d1b808dfe9cb552 100644
--- a/bt5/erp5_archive/bt/revision
+++ b/bt5/erp5_archive/bt/revision
@@ -1 +1 @@
-62
\ No newline at end of file
+66
\ No newline at end of file