195 lines
4.2 KiB
C#
195 lines
4.2 KiB
C#
///////////////////////////////////////////////////////////
|
|
// EventWindowSet.cs
|
|
// Implementation of Class EventWindowSet
|
|
// Class type: Utility (biz object layer)
|
|
// Created on: 07-Oct-2005
|
|
// Object design: John
|
|
// Coded: John 07-Oct-2005
|
|
///////////////////////////////////////////////////////////
|
|
using System;
|
|
using System.Collections;
|
|
|
|
namespace GZTW.AyaNova.BLL
|
|
{
|
|
#pragma warning disable 1591
|
|
/// <summary>
|
|
/// Manages a set of event windows for a week
|
|
/// Serializable for easy saving to database / file etc
|
|
/// Easily confirms if a given date/time is within an allowable
|
|
/// window or not
|
|
/// </summary>
|
|
[Serializable]
|
|
public class EventWindowSet
|
|
{
|
|
|
|
//Any time or day is allowed
|
|
//this allows a quicker short circuit
|
|
//comparison
|
|
private bool _AnyTime;
|
|
private bool _IsDirty;
|
|
//An array for each day of the week's events
|
|
private EventWindow[] _Events;
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// An event window structure
|
|
/// this is added to an array of structures to cover a week
|
|
/// of day windows
|
|
/// </summary>
|
|
[Serializable]
|
|
public struct EventWindow
|
|
{
|
|
internal bool _AnyTimeOfDay;
|
|
internal bool _Active;
|
|
//Only time portion is used
|
|
internal DateTime _StartTime;
|
|
internal DateTime _EndTime;
|
|
|
|
public bool AnyTimeOfDay{get{return _AnyTimeOfDay;}}
|
|
public bool Active{get{return _Active;}}
|
|
public DateTime StartTime{get{return _StartTime;}}
|
|
public DateTime EndTime{get{return _EndTime;}}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public EventWindowSet()
|
|
{
|
|
|
|
_Events=new EventWindow[7];
|
|
System.DateTime dtStartDefault=new DateTime(1968,3,12,9,0,0);
|
|
System.DateTime dtEndDefault=new DateTime(1968,3,12,17,0,0);
|
|
|
|
//Initialize
|
|
|
|
//0==sunday 6==Saturday
|
|
for(int x=0;x<7;x++)
|
|
{
|
|
_Events[x]._StartTime=dtStartDefault;
|
|
_Events[x]._EndTime=dtEndDefault;
|
|
_Events[x]._AnyTimeOfDay=false;
|
|
_Events[x]._Active=true;
|
|
}
|
|
_AnyTime=true;
|
|
_IsDirty=false;
|
|
}
|
|
|
|
public bool IsValid
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public bool IsDirty
|
|
{
|
|
get
|
|
{
|
|
return _IsDirty;
|
|
}
|
|
}
|
|
|
|
public bool AnyTime
|
|
{
|
|
get
|
|
{
|
|
return _AnyTime;
|
|
}
|
|
set
|
|
{
|
|
_AnyTime=value;
|
|
|
|
_IsDirty=true;
|
|
}
|
|
}
|
|
|
|
public EventWindow[] Events
|
|
{
|
|
get
|
|
{
|
|
return _Events;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sets an event for day indicated.
|
|
/// </summary>
|
|
/// <param name="Day">int value of DayOfWeek enum (0=Sunday...6=Saturday)</param>
|
|
/// <param name="AnyTimeOfDay">true=deliver any time of day if active</param>
|
|
/// <param name="Active">True=day is enabled for deliver, false=no delivery on this day</param>
|
|
/// <param name="StartTime">Starting time window for delivery (time only is used date is irrelevant)</param>
|
|
/// <param name="EndTime">Ending time window for delivery (time only is used date is irrelevant)</param>
|
|
public void SetEvent(int Day,
|
|
bool AnyTimeOfDay,
|
|
bool Active,
|
|
DateTime StartTime,
|
|
DateTime EndTime)
|
|
{
|
|
_IsDirty=true;
|
|
|
|
|
|
_Events[Day]._AnyTimeOfDay=AnyTimeOfDay;
|
|
_Events[Day]._Active=Active;
|
|
_Events[Day]._StartTime=StartTime;
|
|
_Events[Day]._EndTime=EndTime;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// Returns true if a given date/time is within
|
|
/// an event window.
|
|
///
|
|
/// False if not.
|
|
/// </summary>
|
|
/// <param name="dtValue"></param>
|
|
/// <returns></returns>
|
|
public bool InEventWindow(System.DateTime dtValue)
|
|
{
|
|
//Short circuit tests...
|
|
|
|
if(this._AnyTime) return true;
|
|
|
|
int nDay=(int)dtValue.DayOfWeek;
|
|
|
|
//Not an active day anyway?
|
|
if(!_Events[nDay]._Active) return false;
|
|
|
|
//Any time of day ok?
|
|
if(_Events[nDay]._AnyTimeOfDay) return true;
|
|
|
|
//ok, it's not a simple one, so let's compare times...
|
|
|
|
|
|
double dbCompareValue=dtValue.TimeOfDay.TotalMinutes;
|
|
|
|
//Is it in the window?
|
|
if(dbCompareValue >= _Events[nDay]._StartTime.TimeOfDay.TotalMinutes &&
|
|
dbCompareValue <= _Events[nDay]._EndTime.TimeOfDay.TotalMinutes)
|
|
return true;
|
|
|
|
//Guess not
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
//------------------------------------------------------
|
|
}// End of class
|
|
#pragma warning restore 1591
|
|
}//End of namespace
|