From 5290e87ef9139e949f117bacda6e599af0769afa Mon Sep 17 00:00:00 2001
From: Sebastien Robin <seb@nexedi.com>
Date: Thu, 10 Apr 2014 18:54:43 +0200
Subject: [PATCH] ERP5/PresencePeriod: fixed _getDatePeriodDataList

---
 product/ERP5/Document/PresencePeriod.py | 12 +++++++++---
 product/ERP5/tests/testCalendar.py      | 24 ++++++++++++------------
 2 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/product/ERP5/Document/PresencePeriod.py b/product/ERP5/Document/PresencePeriod.py
index 5cfc51f187..12a4af015e 100644
--- a/product/ERP5/Document/PresencePeriod.py
+++ b/product/ERP5/Document/PresencePeriod.py
@@ -29,6 +29,7 @@
 #
 ##############################################################################
 
+from copy import copy
 from AccessControl import ClassSecurityInfo
 
 from Products.ERP5Type import Permissions, PropertySheet
@@ -84,7 +85,7 @@ class PresencePeriod(Movement, PeriodicityMixin):
       calendar_stop_date = self.getStopDate()
       if (calendar_start_date is not None) and (calendar_stop_date is not None):
         # Convert Days to second
-        quantity = int(calendar_stop_date) - int(calendar_start_date)
+        quantity = abs(int(calendar_stop_date) - int(calendar_start_date))
       else:
         quantity = default
     return quantity
@@ -103,8 +104,13 @@ class PresencePeriod(Movement, PeriodicityMixin):
     """
     result = []
     if self.getSource() != None or self.getDestination() != None:
-      for date_period_data in self._getDatePeriodDataList():
-        result.append(self.asContext(self, **date_period_data))
+      for period_data in self._getDatePeriodDataList():
+        period_data = copy(period_data)
+        date_list = [period_data['start_date'], period_data['stop_date']]
+        date_list.sort()
+        period_data['start_date'] = date_list[0]
+        period_data['stop_date'] = date_list[1]
+        result.append(self.asContext(self, **period_data))
     return result
 
   def _getDatePeriodDataList(self):
diff --git a/product/ERP5/tests/testCalendar.py b/product/ERP5/tests/testCalendar.py
index c2e87348f9..fedba23a8d 100644
--- a/product/ERP5/tests/testCalendar.py
+++ b/product/ERP5/tests/testCalendar.py
@@ -162,7 +162,7 @@ class TestCalendar(ERP5ReportTestCase):
                       destination_value=person,
                       resource_value=self.portal.service_module.consulting_service,
                       start_date=self.start_date,
-                      stop_date=self.stop_date,
+                      stop_date=self.periodicity_stop_date,
                       specialise_value=group_calendar)
     assignment.confirm()
     sequence.edit(assignment=assignment)
@@ -464,9 +464,6 @@ class TestCalendar(ERP5ReportTestCase):
     date_period_list = obj_to_check._getDatePeriodDataList()
 
     # Check 1 period
-    self.assertEqual(second_availability,
-                      person.getAvailableTime(from_date=start_date,
-                                              to_date=stop_date))
     self.assertEqual(second_availability,
                       person.getAvailableTime(from_date=start_date,
                                               to_date=stop_date))
@@ -556,7 +553,7 @@ class TestCalendar(ERP5ReportTestCase):
     start_date = self.start_date
     stop_date = self.stop_date
     second_availability = int(stop_date) - int(start_date)
-    date_period_list = obj_to_check._getDatePeriodList()
+    date_period_list = obj_to_check._getDatePeriodDataList()
 
     # Check 1 period
     self.assertEqual(0,
@@ -566,7 +563,7 @@ class TestCalendar(ERP5ReportTestCase):
     self.assertEqual(second_availability,
                       person.getAvailableTime(
                                          from_date=start_date,
-                                         to_date=date_period_list[1][1]))
+                                         to_date=date_period_list[1]['stop_date']))
 #     # Check all periods
 #     self.assertEqual(len(date_period_list) * second_availability,
 #                       person.getAvailableTime())
@@ -1241,13 +1238,16 @@ class TestCalendar(ERP5ReportTestCase):
                                   portal_type='Group Presence Period')
     group_calendar_period.setStartDate('2008/01/01 08:00')
     group_calendar_period.setStopDate('2008/01/01 18:00')
-    group_calendar_period.setResourceValue(
-          self.portal.portal_categories.calendar_period_type.type1)
     group_calendar.confirm()
 
     person = self.portal.person_module.newContent(portal_type='Person')
-    assignment = person.newContent(portal_type='Assignment',
-                                   calendar_value=group_calendar)
+    assignment = self.portal.group_calendar_assignment_module.newContent(
+                      specialise_value=group_calendar,
+                      resource_value=self.portal.service_module.consulting_service,
+                      start_date=DateTime(2008, 1, 1).earliestTime(),
+                      stop_date=DateTime(2008, 1, 1).latestTime(),
+                      destination_value=person)
+    assignment.confirm()
     self.tic()
     leave_request = self.portal.leave_request_module.newContent(
                                   portal_type='Leave Request')
@@ -1256,13 +1256,13 @@ class TestCalendar(ERP5ReportTestCase):
     leave_request_period_1.setStartDate('2008/01/01 09:00')
     leave_request_period_1.setStopDate('2008/01/01 10:00')
     leave_request_period_1.setResourceValue(
-          self.portal.portal_categories.calendar_period_type.type1)
+          self.portal.service_module.consulting_service)
     leave_request_period_2 = leave_request.newContent(
                                   portal_type='Leave Request Period')
     leave_request_period_2.setStartDate('2008/01/01 10:00')
     leave_request_period_2.setStopDate('2008/01/01 11:00')
     leave_request_period_2.setResourceValue(
-          self.portal.portal_categories.calendar_period_type.type1)
+          self.portal.service_module.consulting_service)
     leave_request.setDestinationValue(person)
     leave_request.confirm()
 
-- 
2.30.9