1.1 --- a/imiptools/editing.py Sat Feb 03 23:30:04 2018 +0100
1.2 +++ b/imiptools/editing.py Sat Feb 03 23:34:24 2018 +0100
1.3 @@ -971,6 +971,9 @@
1.4 args = (self.start.copy(), self.end.copy()) + self.as_tuple()[2:]
1.5 return FormPeriod(*args)
1.6
1.7 + def reset(self):
1.8 + self.times_enabled = self.start.has_time() and self.end.has_time() and True or False
1.9 +
1.10 def as_event_period(self, index=None):
1.11
1.12 """
1.13 @@ -999,7 +1002,7 @@
1.14 else:
1.15 raise PeriodError("dtstart", "dtend")
1.16
1.17 - return EventPeriod(dtstart, end_date_to_calendar(dtend), self.tzid,
1.18 + return EventPeriod(dtstart, dtend, self.tzid,
1.19 self.origin, dtstart_attr, dtend_attr,
1.20 self.start, self.end, self.replacement,
1.21 self.cancelled, self.recurrenceid)
1.22 @@ -1014,7 +1017,7 @@
1.23 # Handle specified end datetimes.
1.24
1.25 if self.end_enabled:
1.26 - dtend = self.end.as_datetime(self.times_enabled)
1.27 + dtend = self.end.as_datetime(self.times_enabled, True)
1.28 if not dtend:
1.29 return None
1.30
1.31 @@ -1022,7 +1025,7 @@
1.32
1.33 elif self.times_enabled:
1.34 formdate = FormDate(self.start.date, self.end.hour, self.end.minute, self.end.second, self.end.tzid)
1.35 - dtend = formdate.as_datetime(self.times_enabled)
1.36 + dtend = formdate.as_datetime(self.times_enabled, True)
1.37 if not dtend:
1.38 return None
1.39
1.40 @@ -1080,9 +1083,20 @@
1.41 def reset(self):
1.42 self.dt = None
1.43
1.44 + def set_as_day(self):
1.45 + self.hour = self.minute = self.second = None
1.46 +
1.47 + def has_time(self):
1.48 + return self.hour and self.minute and self.second
1.49 +
1.50 def __repr__(self):
1.51 return "FormDate%r" % (self.as_tuple(),)
1.52
1.53 + def __str__(self):
1.54 + return "%s%s%s" % (self.get_date_string(),
1.55 + self.has_time() and " %s:%s:%s" % (self.get_hour(), self.get_minute(), self.get_second()) or "",
1.56 + self.tzid and " %s" % self.tzid or "")
1.57 +
1.58 def get_component(self, value):
1.59 return (value or "").rjust(2, "0")[:2]
1.60
1.61 @@ -1114,7 +1128,7 @@
1.62 def get_tzid(self):
1.63 return self.tzid
1.64
1.65 - def as_datetime(self, with_time=True):
1.66 + def as_datetime(self, with_time=True, as_end=False):
1.67
1.68 """
1.69 Return a datetime for this object if one is provided or can be produced.
1.70 @@ -1134,10 +1148,17 @@
1.71 # An erroneous datetime will yield None as result.
1.72
1.73 try:
1.74 - return get_datetime(s, attr)
1.75 + dt = get_datetime(s, attr)
1.76 except ValueError:
1.77 return None
1.78
1.79 + # Return end dates using calendar conventions.
1.80 +
1.81 + if as_end and not with_time:
1.82 + return end_date_to_calendar(dt)
1.83 + else:
1.84 + return dt
1.85 +
1.86 def as_datetime_item(self, with_time=True):
1.87
1.88 """
1.89 @@ -1182,9 +1203,6 @@
1.90 dtstart, dtstart_attr = period.get_start_item()
1.91 dtend, dtend_attr = period.get_end_item()
1.92
1.93 - if not isinstance(period, RecurringPeriod):
1.94 - dtend = end_date_to_calendar(dtend)
1.95 -
1.96 return EventPeriod(dtstart, dtend, period.tzid, period.origin,
1.97 dtstart_attr, dtend_attr,
1.98 recurrenceid=format_datetime(to_utc_datetime(dtstart)))