You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by "Adrian Crum (JIRA)" <ji...@apache.org> on 2008/09/13 02:17:44 UTC
[jira] Commented: (OFBIZ-1956) Improved Recurring Events
[ https://issues.apache.org/jira/browse/OFBIZ-1956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12630717#action_12630717 ]
Adrian Crum commented on OFBIZ-1956:
------------------------------------
As was discussed on the dev mailing list...
The proposed recurrence system is based
on a design proposed by Martin Fowler -
http://martinfowler.com/apsupp/recurring.pdf. His design is quite old,
so I updated it to support internationalization and I expanded it.
The design is extremely flexible and it allows for arbitrarily complex
recurring events. The design is based on temporal expressions. Each
temporal expression could be considered a rule - like "every Monday" or
"the 15th of the month."
Temporal expressions can used alone or they can be combined in any of
three "collection" expressions - Union, Intersection, and Difference. A
date will match a Union collection if any of its expressions match
(logical OR). A date will match an Intersection collection if all of its
expressions match (logical AND). A date will match a Difference
collection if it matches the "included" expression and doesn't match the
"excluded" expression.
Using Bilgin's Happy Hour promotion as an example:
Intersection
DayOfWeekRange(Monday, Friday)
TimeOfDayRange(15:00, 17:00)
Let's say we want to exclude St. Patrick's Day from the Happy Hour
promotion:
Difference
Include
Intersection
DayOfWeekRange(Monday, Friday)
TimeOfDayRange(15:00, 17:00)
Exclude
Intersection
MonthRange(March, March)
DayOfMonthRange(17, 17)
A semi-monthly payday:
Union
DayOfMonthRange(1, 1)
DayOfMonthRange(15, 15)
Labor Day (US):
Intersection
MonthRange(September, September)
DayInMonth(Monday, 1)
A schedule is made up of schedule items. Each schedule item "points to"
a temporal expression. It also has duration information, and an item
type ID (meeting, appointment, etc).
Schedules can be linked to parties/facilities/fixed assets through
relationship entities.
The implementation requires four new entities. I picture this being introduced in the framework and we can gradually migrate the existing recurrence code over to it. In addition, I
could write a conversion routine to convert the existing Recurrence*
entities over to the new ones.
> Improved Recurring Events
> -------------------------
>
> Key: OFBIZ-1956
> URL: https://issues.apache.org/jira/browse/OFBIZ-1956
> Project: OFBiz
> Issue Type: Improvement
> Components: framework
> Affects Versions: SVN trunk
> Reporter: Adrian Crum
> Priority: Minor
>
> Come up with an improved recurring event implementation. Details in comments.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.