From acd4b90da987df6f91cd7bbd09df884741f744f5 Mon Sep 17 00:00:00 2001
From: Gabriel Monnerat <gabriel@tiolive.com>
Date: Tue, 12 Apr 2011 02:19:35 +0000
Subject: [PATCH] refactor code to fix issue when the user changes the event
 type in the edition dialog of UNG Calendar

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@45304 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../Base_updateCalendarEventList.xml          | 30 +++++++---
 .../ung_js/ung_calendar.js.xml                |  3 +-
 .../TestTemplateItem/testUNG.py               | 56 ++++++++++++++++---
 bt5/erp5_web_ung_theme/bt/revision            |  2 +-
 4 files changed, 75 insertions(+), 16 deletions(-)

diff --git a/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/Base_updateCalendarEventList.xml b/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/Base_updateCalendarEventList.xml
index 58c960bddb..78377d35e8 100644
--- a/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/Base_updateCalendarEventList.xml
+++ b/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/Base_updateCalendarEventList.xml
@@ -60,6 +60,8 @@ from DateTime import DateTime\n
 import random\n
 \n
 def convertToERP5DateTime(date):\n
+  if not date:\n
+    return None\n
   date, hour = date.split()\n
   month, day, year = date.split("/")\n
   return DateTime("%s/%s/%s %s" % (month, day, year, hour))\n
@@ -116,7 +118,8 @@ if request_type == "list":\n
 \n
 elif request_type == "remove":\n
   title = form.get("title")\n
-  catalog_object = portal.portal_catalog.getResultValue(portal_type=portal_type_list, title=title)\n
+  catalog_object = portal.portal_catalog.getResultValue(portal_type=portal_type_list,\n
+                                                        title=title)\n
   event = context.restrictedTraverse(catalog_object.getPath())\n
   portal.event_module.deleteContent(event.getId())\n
   return dumps({"IsSuccess": True})\n
@@ -132,12 +135,25 @@ elif request_type == "update":\n
   catalog_object = portal.portal_catalog.getResultValue(portal_type=portal_type_list,\n
                                                         id=event_id)\n
   event = context.restrictedTraverse(catalog_object.getPath())\n
-  if title and event.getTitle() != title:\n
-    event.setTitle(title)\n
-  if text_content and event.getDescription() != text_content:\n
-    event.setDescription(text_content)\n
-  event.setStartDate(start_date)\n
-  event.setStopDate(end_date)\n
+  event_portal_type = form.get(\'event_portal_type\')\n
+  if event.getPortalType() != event_portal_type and event_portal_type in portal_type_list:\n
+    new_event = portal.event_module.newContent(portal_type=event_portal_type)\n
+    new_event.edit(start_date=start_date,\n
+                   end_date=end_date,\n
+                   title=title,\n
+                   description=text_content)\n
+    portal.event_module.deleteContent(event.getId())\n
+  else:\n
+    kw = {}\n
+    if title and event.getTitle() != title:\n
+      kw["title"] = title\n
+    if text_content and event.getDescription() != text_content:\n
+      kw["description"] = text_content\n
+    if start_date is not None:\n
+      kw["start_date"] = start_date\n
+    if end_date is not None:\n
+      kw["stop_date"] = end_date\n
+    event.edit(**kw)\n
   return dumps({"IsSuccess": True})\n
 \n
 elif request_type == "add":\n
diff --git a/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/ung_js/ung_calendar.js.xml b/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/ung_js/ung_calendar.js.xml
index 78b326a1e6..c5f1db1a42 100644
--- a/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/ung_js/ung_calendar.js.xml
+++ b/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/ung_js/ung_calendar.js.xml
@@ -67,7 +67,7 @@ function Edit(data){\n
     title: "Update Event",\n
     buttons: {\n
       "Save": function(){\n
-        data = $("form#create_new_event").serializeArray();\n
+        var data = $("form#create_new_event").serializeArray();\n
         var dataHash = {};\n
         for (var i=0; i<data.length; i++)\n
           dataHash[data[i].name] = data[i].value;\n
@@ -84,6 +84,7 @@ function Edit(data){\n
                     dataHash.stop_date_minute;\n
 \n
         var paramList = [{name : \'CalendarEndTime\', \'value\': stop_date},\n
+                         {name : \'event_portal_type\', \'value\': dataHash.portal_type},\n
                          {name : \'CalendarStartTime\', \'value\': start_date},\n
                          {name : \'title\', \'value\': dataHash.title},\n
                          {name : \'request_type\', \'value\': \'update\'},\n
diff --git a/bt5/erp5_web_ung_theme/TestTemplateItem/testUNG.py b/bt5/erp5_web_ung_theme/TestTemplateItem/testUNG.py
index 0aed575786..3c53f6d38a 100644
--- a/bt5/erp5_web_ung_theme/TestTemplateItem/testUNG.py
+++ b/bt5/erp5_web_ung_theme/TestTemplateItem/testUNG.py
@@ -41,12 +41,12 @@ class TestUNG(ERP5TypeTestCase):
     return "UNG Tests"
 
   def getBusinessTemplateList(self):
-    return ('erp5_base',
+    return ('erp5_ingestion_mysql_innodb_catalog',
+            'erp5_base',
+            'erp5_jquery',
             'erp5_web',
-            'erp5_ingestion_mysql_innodb_catalog',
             'erp5_core_proxy_field_legacy',
             'erp5_ingestion',
-            'erp5_jquery',
             'erp5_jquery_ui',
             'erp5_dms',
             'erp5_crm',
@@ -268,14 +268,56 @@ class TestUNG(ERP5TypeTestCase):
     self.portal.Base_updateCalendarEventList("update")
     self.stepTic()
     self.assertEquals(web_message.getTitle(), "Buy Coffee")
-    self.portal.REQUEST.form.clear()
-    form_dict = dict(title=web_message.getTitle(),
-                     id=web_message.getId())
+    form_dict["event_portal_type"] = "Note"
     self.portal.REQUEST.form.update(form_dict)
-    self.portal.Base_updateCalendarEventList("remove")
+    self.portal.Base_updateCalendarEventList("update")
     self.stepTic()
     web_message = self.portal.portal_catalog.getResultValue(portal_type="Web Message")
     self.assertEquals(web_message, None)
+    note = self.portal.portal_catalog.getResultValue(portal_type="Note")
+    self.assertEquals(note.getTitle(), "Buy Coffee")
+    self.portal.REQUEST.form.clear()
+    form_dict = dict(title=note.getTitle(),
+                     id=note.getId())
+    self.portal.REQUEST.form.update(form_dict)
+    self.portal.Base_updateCalendarEventList("remove")
+    self.stepTic()
+    note = self.portal.portal_catalog.getResultValue(portal_type="Note",
+                                                     title="Buy Coffee")
+    self.assertEquals(note, None)
+    self.portal.REQUEST.form.clear()
+    start_date = DateTime()
+    end_date = DateTime() + 1
+    form_dict = dict(CalendarStartTime=start_date.strftime("%m/%d/%Y %H:%M"),
+                     CalendarEndTime=end_date.strftime("%m/%d/%Y %H:%M"),
+                     CalendarTitle="Another Sample",
+                     portal_type="Letter")
+    self.portal.REQUEST.form.update(form_dict)
+    self.portal.Base_updateCalendarEventList("add")
+    self.stepTic()
+    letter = self.portal.portal_catalog.getResultValue(portal_type="Letter",
+                                                       title="Another Sample")
+    self.assertEquals(letter.getPortalType(), "Letter")
+    self.assertEquals(letter.getTitle(), "Another Sample")
+    self.assertEquals(letter.getStartDate().hour(), start_date.hour())
+    self.assertEquals(letter.getStartDate().day(), start_date.day())
+    self.assertEquals(letter.getStopDate().hour(), end_date.hour())
+    self.assertEquals(letter.getStopDate().day(), end_date.day())
+    self.portal.REQUEST.form.clear()
+    form_dict = dict(title="Change only the Title of Sample",
+                     event_id=letter.getId())
+    self.portal.REQUEST.form.update(form_dict)
+    self.portal.Base_updateCalendarEventList("update")
+    self.stepTic()
+    letter = self.portal.portal_catalog.getResultValue(portal_type="Letter",
+                                                       title="Another Sample")
+    self.assertEquals(letter, None)
+    letter = self.portal.portal_catalog.getResultValue(portal_type="Letter",
+                                                       title="Change only the Title of Sample")
+    self.assertEquals(letter.getStartDate().hour(), start_date.hour())
+    self.assertEquals(letter.getStartDate().day(), start_date.day())
+    self.assertEquals(letter.getStopDate().hour(), end_date.hour())
+    self.assertEquals(letter.getStopDate().day(), end_date.day())
   
   def testERPSite_createUNGUser(self):
     """Test if script creates an user correctly"""
diff --git a/bt5/erp5_web_ung_theme/bt/revision b/bt5/erp5_web_ung_theme/bt/revision
index 235adf8bd8..0dbf139f8d 100644
--- a/bt5/erp5_web_ung_theme/bt/revision
+++ b/bt5/erp5_web_ung_theme/bt/revision
@@ -1 +1 @@
-349
\ No newline at end of file
+350
\ No newline at end of file
-- 
2.30.9