Files
ayanova7/source/bizobjects/AyaLib/GZTW.AyaNova.BLL/WorkorderItemScheduledUser.cs
2018-06-29 19:47:36 +00:00

894 lines
26 KiB
C#

///////////////////////////////////////////////////////////
// WorkorderItemScheduledUser.cs
// Implementation of Class WorkorderItemScheduledUser
// CSLA type: Editable Child
// Created on: 07-Jun-2004 8:41:50 AM
// Object design: Joyce
// Coded: John 26-July-2004
///////////////////////////////////////////////////////////
using System;
using System.Data;
using CSLA.Data;
using GZTW.Data;
using CSLA;
using System.Threading;
using CSLA.Security;
using System.ComponentModel;
namespace GZTW.AyaNova.BLL {
/// <summary>
/// ScheduledUser object for <see cref="WorkorderItem"/> object's <see cref="WorkorderItemScheduledUsers"/> collection
/// </summary>
[Serializable]
public class WorkorderItemScheduledUser : BusinessBase {
#region Attributes
private bool bReadOnly;
private Guid mID;
private SmartDate mCreated;
private SmartDate mModified;
private Guid mCreator;
private Guid mModifier;
private decimal mEstimatedQuantity;
private Guid mWorkorderItemID;
private Guid mUserID;
private SmartDate mStartDate;
private SmartDate mStopDate;
private Guid mServiceRateID;
private bool mNotificationAffectingChangesMade=false;
#endregion
#region Constructor
/// <summary>
/// Private constructor to prevent direct instantiation
/// </summary>
private WorkorderItemScheduledUser()
{
//Set to read / write initially so that properties
//can be set
bReadOnly=false;
//Child object
MarkAsChild();
//New ID
mID = Guid.NewGuid();
//Set defaults and pre break the validity rules
mStartDate=new SmartDate();
mStopDate=new SmartDate();
UserID=Guid.Empty;
//Set record history to defaults
mCreated = new SmartDate(DBUtil.CurrentWorkingDateTime);
mModified=new SmartDate();
mCreator=Guid.Empty;
mModifier=Guid.Empty;
}
#endregion
#region Business properties
/// <summary>
/// Get internal id number Read only property because it's set internally, not
/// externally
/// </summary>
public Guid ID
{
get
{
return mID;
}
}
/// <summary>
/// Get created date
///
///
/// </summary>
public string Created
{
get
{
return mCreated.ToString();
}
}
/// <summary>
/// Get modified date
///
///
/// </summary>
public string Modified
{
get
{
return mModified.ToString();
}
}
/// <summary>
/// Get user record ID of person who created this record
///
///
/// </summary>
public Guid Creator
{
get
{
return mCreator;
}
}
/// <summary>
/// Get user ID of person who modified this record
///
///
/// </summary>
public Guid Modifier
{
get
{
return mModifier;
}
}
/// <summary>
///
/// Empty ID indicates there is a scheduled time slot but no active user yet otherwise
/// this contains the ID of the <see cref="User"/> scheduled
///
/// </summary>
public Guid UserID
{
get
{
return mUserID;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mUserID!=value)
{
mUserID = value;
CheckComplete();
//not empty Start date is not valid without stop date
BrokenRules.Assert(
"ValidUserRequired",
"User.Label.ErrorNotSelectable",
"UserID",
this.IsNew && !ScheduleableUserCanSelect.GetItem(value));
MarkDirty();
mNotificationAffectingChangesMade=true;
}
}
}
}
/// <summary>
/// Estimated amount of minutes that technician service would be required. Useful
/// when no Scheduled daterange specified and tech needs to determine when best to
/// slot in
/// </summary>
public decimal EstimatedQuantity
{
get
{
return mEstimatedQuantity;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mEstimatedQuantity!=value)
{
mEstimatedQuantity = value;
MarkDirty();
}
}
}
}
/// <summary>
/// Starting date and time
/// </summary>
public object StartDate
{
get
{
return mStartDate.DBValue;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if (!AyaBizUtils.SmartDateEquals(mStartDate, value)) //Case 298
{
mStartDate.DBValue = value;
//case 1392
//if it's a new record and it's a date other than today and it's not empty
//and the global schedusernontodaystarttime is not empty
//and the time is exactly midnight down to the millisecond
//then adjust time to global default start time for this situation
SmartDate sd = new SmartDate();
sd.Text = AyaBizUtils.GlobalSettings.SchedUserNonTodayStartTime;
if (this.IsNew && !mStartDate.IsEmpty && !AyaBizUtils.DateIsToday(mStartDate) && !sd.IsEmpty && (mStartDate.Date.TimeOfDay == DateTime.Today.TimeOfDay))
mStartDate.Date = new DateTime(mStartDate.Date.Year, mStartDate.Date.Month, mStartDate.Date.Day, sd.Date.Hour, sd.Date.Minute, sd.Date.Second);
//autocomplete time
if(!mStartDate.IsEmpty && mStopDate.IsEmpty && (AyaBizUtils.GlobalSettings.LaborSchedUserDfltTimeSpan!=0))
mStopDate.Date = mStartDate.Date.AddMinutes(AyaBizUtils.GlobalSettings.LaborSchedUserDfltTimeSpan);//case 816
CheckComplete();
//not empty Start date is not valid without stop date
BrokenRules.Assert("StopDateRequired","Error.Object.RequiredFieldEmpty,WorkorderItemScheduledUser.Label.StopDate","StartDate",!mStartDate.IsEmpty && mStopDate.IsEmpty);
//Is stop date valid now?
BrokenRules.Assert("StartDateRequired","Error.Object.RequiredFieldEmpty,WorkorderItemScheduledUser.Label.StartDate","StopDate",!mStopDate.IsEmpty && mStartDate.IsEmpty);
if(!mStopDate.IsEmpty&&!mStartDate.IsEmpty)
{
BrokenRules.Assert("StartDateBeforeStopDate","Error.Object.StartDateAfterEndDate",
"StartDate",mStartDate.CompareTo(mStopDate)>-1);
}
MarkDirty();
mNotificationAffectingChangesMade=true;
}
}
}
}
/// <summary>
/// Ending date and time
/// </summary>
public object StopDate
{
get
{
return mStopDate.DBValue;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if (!AyaBizUtils.SmartDateEquals(mStopDate, value)) //Case 298
{
mStopDate.DBValue = value;
//autocomplete time
if (!mStopDate.IsEmpty && mStartDate.IsEmpty && (AyaBizUtils.GlobalSettings.LaborSchedUserDfltTimeSpan != 0))//case 816
mStartDate.Date = mStopDate.Date.AddMinutes(-AyaBizUtils.GlobalSettings.LaborSchedUserDfltTimeSpan);
CheckComplete();
//Not empty Stop date is not valid without start date
BrokenRules.Assert("StartDateRequired","Error.Object.RequiredFieldEmpty,WorkorderItemScheduledUser.Label.StartDate","StopDate",!mStopDate.IsEmpty && mStartDate.IsEmpty);
//Rule needs to be checked here even though it's to do with start date because it can be broken
//there but can only be unbroken here so it needs to be checked in both places...
//Is start date valid now?
BrokenRules.Assert("StopDateRequired","Error.Object.RequiredFieldEmpty,WorkorderItemScheduledUser.Label.StopDate","StartDate",!mStartDate.IsEmpty && mStopDate.IsEmpty);
if(!mStopDate.IsEmpty&&!mStartDate.IsEmpty)
{
BrokenRules.Assert("StartDateBeforeStopDate","Error.Object.StartDateAfterEndDate",
"StartDate",mStartDate.CompareTo(mStopDate)>-1);
}
MarkDirty();
mNotificationAffectingChangesMade=true;
}
}
}
}
//case 1251
/// <summary>
/// Used by AyaNova UI to ensure correct dates are filled in
/// </summary>
public bool StartOrStopDateIsEmpty
{
get
{
return mStopDate.IsEmpty || mStartDate.IsEmpty;
}
}
#region PM versions of date props
/// <summary>
/// Starting date and time
/// </summary>
internal DateTime dtStartDate
{
get
{
return mStartDate.Date;
}
set
{
if(mStartDate.Date!=value)
{
mStartDate.Date = value;
CheckComplete();
//not empty Start date is not valid without stop date
BrokenRules.Assert("StopDateRequired","Error.Object.RequiredFieldEmpty,WorkorderItemScheduledUser.Label.StopDate","StartDate",!mStartDate.IsEmpty && mStopDate.IsEmpty);
//Is stop date valid now?
BrokenRules.Assert("StartDateRequired","Error.Object.RequiredFieldEmpty,WorkorderItemScheduledUser.Label.StartDate","StopDate",!mStopDate.IsEmpty && mStartDate.IsEmpty);
if(!mStopDate.IsEmpty&&!mStartDate.IsEmpty)
{
BrokenRules.Assert("StartDateBeforeStopDate","Error.Object.StartDateAfterEndDate",
"StartDate",mStartDate.CompareTo(mStopDate)>-1);
}
MarkDirty();
mNotificationAffectingChangesMade=true;
}
}
}
/// <summary>
/// Ending date and time
/// </summary>
internal DateTime dtStopDate
{
get
{
return mStopDate.Date;
}
set
{
if(mStopDate.Date!=value)
{
mStopDate.Date = value;
CheckComplete();
//Not empty Stop date is not valid without start date
BrokenRules.Assert("StartDateRequired","Error.Object.RequiredFieldEmpty,WorkorderItemScheduledUser.Label.StartDate","StopDate",!mStopDate.IsEmpty && mStartDate.IsEmpty);
//Rule needs to be checked here even though it's to do with start date because it can be broken
//there but can only be unbroken here so it needs to be checked in both places...
//Is start date valid now?
BrokenRules.Assert("StopDateRequired","Error.Object.RequiredFieldEmpty,WorkorderItemScheduledUser.Label.StopDate","StartDate",!mStartDate.IsEmpty && mStopDate.IsEmpty);
if(!mStopDate.IsEmpty&&!mStartDate.IsEmpty)
{
BrokenRules.Assert("StartDateBeforeStopDate","Error.Object.StartDateAfterEndDate",
"StartDate",mStartDate.CompareTo(mStopDate)>-1);
}
MarkDirty();
mNotificationAffectingChangesMade=true;
}
}
}
#endregion
/// <summary>
/// Pre-selected service <see cref="Rate"/>
/// </summary>
public Guid ServiceRateID
{
get
{
return mServiceRateID;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mServiceRateID!=value)
{
mServiceRateID = value;
MarkDirty();
}
}
}
}
/// <summary>
/// Guid ID of parent <see cref="WorkorderItem"/> object
/// </summary>
public Guid WorkorderItemID
{
get
{
return mWorkorderItemID;
}
// set
// {
// if(bReadOnly)
// ThrowSetError();
// else
// {
// if(mWorkorderItemID!=value)
// {
// mWorkorderItemID = value;
//
// MarkDirty();
//
// }
// }
// }
}
/// <summary>
/// Set a broken rule if there is not at *least*
/// one of the following:
/// A start date
/// AND end date or a
/// ScheduleableUser
/// entered.
///
/// </summary>
/// <returns>true if broken rule</returns>
private void CheckComplete()
{
if(mStartDate.IsEmpty && mUserID==Guid.Empty)
{
BrokenRules.Assert("Incomplete",
"WorkorderItemScheduledUser.Label.Error.RecordIncomplete",
"IncompleteRecord",true);
}
else
{
BrokenRules.Assert("Incomplete",
"WorkorderItemScheduledUser.Label.Error.RecordIncomplete",
"IncompleteRecord",false);
}
}
/// <summary>
/// Called by parent collection object
/// when called in turn by workorder object that is read only due to
/// security or closed or service completed
/// </summary>
/// <param name="RO">Either true or the rights allowed for the current user</param>
public void SetReadOnly(bool RO)
{
bReadOnly=RO;
}
/// <summary>
/// Throw an error when a read only user
/// tries to set a property
/// (this should normally never be called unless someone is using the developer api since the UI
/// should prevent it from happening initially)
/// </summary>
private void ThrowSetError()
{
throw new System.Security.SecurityException
(
string.Format
(
LocalizedTextTable.GetLocalizedTextDirect("Error.Security.NotAuthorizedToChange"),
LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderItemScheduledUser")
)
);
}
#endregion
#region System.object overrides
/// <summary>
///
/// </summary>
/// <returns></returns>
public override string ToString()
{
return "WorkorderItemScheduledUser" + mID.ToString();
}
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public override bool Equals(Object obj)
{
if ( obj == null || GetType ( ) != obj.GetType ( ) ) return false;
WorkorderItemScheduledUser c=(WorkorderItemScheduledUser)obj;
return mID==c.mID;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return ("WorkorderItemScheduledUser"+mID).GetHashCode();
}
#endregion
#region Static methods
/// <summary>
/// New item
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
internal static WorkorderItemScheduledUser NewItem(WorkorderItem obj)
{
//case 1387
if (AyaBizUtils.IsGenerator || ((obj.mHeaderRights > SecurityLevelTypes.ReadOnly) &&
(AyaBizUtils.Right("Object.WorkorderItemScheduledUser") > (int)SecurityLevelTypes.ReadOnly)))
{
WorkorderItemScheduledUser child = new WorkorderItemScheduledUser();
child.mWorkorderItemID=obj.ID;
return child;
}
else
throw new System.Security.SecurityException(
string.Format(
LocalizedTextTable.GetLocalizedTextDirect("Error.Security.NotAuthorizedToCreate"),
LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderItemScheduledUser")));
}
/// <summary>
/// Get Item
/// </summary>
/// <param name="dr"></param>
/// <param name="obj"></param>
/// <returns></returns>
internal static WorkorderItemScheduledUser GetItem(SafeDataReader dr, WorkorderItem obj)
{
//case 1387
if ((obj.mHeaderRights > SecurityLevelTypes.NoAccess) &&
(AyaBizUtils.Right("Object.WorkorderItemScheduledUser") > (int)SecurityLevelTypes.NoAccess))
{
WorkorderItemScheduledUser child = new WorkorderItemScheduledUser();
child.Fetch(dr);
return child;
}
else
throw new System.Security.SecurityException(
string.Format(
LocalizedTextTable.GetLocalizedTextDirect("Error.Security.NotAuthorizedToRetrieve"),
LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderItemScheduledUser")));
}
#endregion
#region Shared Notification Message Processor
internal static NotifyMessage GetNotificationMessage(NotifyMessageRequestData d)
{
//string Language=User.GetUserLanguage(MessageForUserID);
WorkorderItemScheduledUserDescriptionFetcher wdf = WorkorderItemScheduledUserDescriptionFetcher.GetItemFromWorkorderItemScheduledUserID(d.RootObjectID);
string sEventDescription="";
switch (d.EventType)
{
case (int)WorkorderItemScheduledUserEvent.CreatedUpdated:
sEventDescription = LocalizedTextTable.GetLocalizedTextDirect("WorkorderItemScheduledUser.Label.Event.CreatedUpdated", d.Language);
break;
case (int)WorkorderItemScheduledUserEvent.PendingAlert:
sEventDescription = LocalizedTextTable.GetLocalizedTextDirect("WorkorderItemScheduledUser.Label.Event.PendingAlert", d.Language);
break;
}
//case 1415
string sStartDate = "";
string sStopDate = "";
if (d.TimeZoneOffset != 0)
{
sStartDate = wdf.StartDate.Date.ToUniversalTime().AddHours(d.TimeZoneOffset).ToString();
sStopDate = wdf.StopDate.Date.ToUniversalTime().AddHours(d.TimeZoneOffset).ToString();
}
else
{
sStartDate = wdf.StartDate.ToString();
sStopDate = wdf.StopDate.ToString();
}
string sMessage=sEventDescription;
string sSubject=sEventDescription;
NotifyMessage nm=null;
if (d.Format == NotifyDeliveryMessageFormats.Brief)
{
sMessage+=","+
LocalizedTextTable.GetLocalizedTextDirect("WorkorderItemScheduledUser.Label.StartDate", d.Language) + " " + sStartDate + "," +
LocalizedTextTable.GetLocalizedTextDirect("WorkorderService.Label.ServiceNumber", d.Language) + " " + wdf.WorkorderNumber + "," +
wdf.ClientName + ", " + LocalizedTextTable.GetLocalizedTextDirect("WorkorderItem.Label.Summary", d.Language) + " " + wdf.Summary;
if (d.MaxCharacters > 0 && sMessage.Length > d.MaxCharacters)
nm = new NotifyMessage("", sMessage.Substring(0, d.MaxCharacters));
else
nm=new NotifyMessage("", sMessage);
}
else
{
sSubject += ": " + LocalizedTextTable.GetLocalizedTextDirect("WorkorderService.Label.ServiceNumber", d.Language) + " " + wdf.WorkorderNumber;
sMessage += ": " + LocalizedTextTable.GetLocalizedTextDirect("WorkorderItemScheduledUser.Label.StartDate", d.Language) + " " + sStartDate +
", " + LocalizedTextTable.GetLocalizedTextDirect("WorkorderItemScheduledUser.Label.StopDate", d.Language) + " " + sStopDate + "\r\n" +
LocalizedTextTable.GetLocalizedTextDirect("WorkorderService.Label.ServiceNumber", d.Language) + ": " + wdf.WorkorderNumber + "\r\n" +
LocalizedTextTable.GetLocalizedTextDirect("O.Client", d.Language) + ": " + wdf.ClientName + "\r\n" +
LocalizedTextTable.GetLocalizedTextDirect("WorkorderItem.Label.Summary", d.Language) + ": " + wdf.Summary + "\r\n" +
LocalizedTextTable.GetLocalizedTextDirect("WorkorderItem.Label.TechNotes", d.Language) + ": " + wdf.TechNotes + "\r\n" +
LocalizedTextTable.GetLocalizedTextDirect("WorkorderItemScheduledUser.Label.ServiceRateID", d.Language) + ": " + wdf.RateName + "\r\n" +
LocalizedTextTable.GetLocalizedTextDirect("WorkorderItemScheduledUser.Label.EstimatedQuantity", d.Language) + ": " + wdf.EstimatedQuantity.ToString() + "\r\n"
;
nm=new NotifyMessage(sSubject,sMessage);
}
return nm;
}
#endregion
#region DAL DATA ACCESS
#region Fetch
/// <summary>
///
/// </summary>
/// <param name="dr"></param>
protected void Fetch(SafeDataReader dr)
{
//Standard fields
mCreated=DBUtil.ToLocal(dr.GetSmartDate("aCreated"));
mModified=DBUtil.ToLocal(dr.GetSmartDate("aModified"));
mCreator=dr.GetGuid("aCreator");
mModifier=dr.GetGuid("aModifier");
mID=dr.GetGuid("aID");
//WorkorderItemScheduledUser fields
mEstimatedQuantity=dr.GetDecimal("aEstimatedQuantity");
mStartDate=DBUtil.ToLocal(dr.GetSmartDate("aStartDate"));
mStopDate=DBUtil.ToLocal(dr.GetSmartDate("aStopDate"));
mServiceRateID=dr.GetGuid("aServiceRateID");
mUserID=dr.GetGuid("aUserID");
mWorkorderItemID=dr.GetGuid("aWorkorderItemID");
//Get access rights level
bReadOnly=AyaBizUtils.Right("Object.WorkorderItemScheduledUser")<(int)SecurityLevelTypes.ReadWrite;
MarkOld();
}
#endregion
#region Add / Update / Delete
/// <summary>
/// Update child
/// </summary>
/// <param name="obj"></param>
/// <param name="tr"></param>
internal void Update(WorkorderItem obj,IDbTransaction tr)
{
//No need to update if there is nothing changed
if(!this.IsDirty) return;
// If not a new record, check if record was modified
//by another user since original retrieval:
if(!IsNew)
DBUtil.CheckSafeToUpdateInsideTransaction(this.mModified.Date, this.mID, "aWorkorderItemScheduledUser", tr);//case 1960
#region Delete
if(IsDeleted)
{
if(!IsNew)
{
DBCommandWrapper cmDelete = DBUtil.GetCommandFromSQL("DELETE FROM aWorkorderItemScheduledUser WHERE aID=@ID;");
cmDelete.AddInParameter("@ID",DbType.Guid,this.mID);
DBUtil.DB.ExecuteNonQuery(cmDelete, tr);
//Remove any events for this object
if (AyaBizUtils.GlobalSettings.UseNotification)//Case 510
{
NotifyEvent.RemoveAllEventsForObject(this.mID);
}
}
MarkNew();
return;
}
#endregion
#region Add / Update
//get modification time temporarily, if update succeeds then
//set to this time
System.DateTime dtModified = DBUtil.CurrentWorkingDateTime;
DBCommandWrapper cm = null;
if(IsNew)//Add or update?
cm=DBUtil.GetCommandFromSQL(
"INSERT INTO aWorkorderItemScheduledUser (aWorkorderItemID, " +
"aID, aUserID, aEstimatedQuantity, aCreated,aModified,aCreator, " +
"aModifier, aStartDate, aStopDate, aServiceRateID) " +
"VALUES (@WorkorderItemID,@ID,@UserID,@EstimatedQuantity, " +
"@Created,@Modified,@CurrentUserID,@CurrentUserID, @StartDate, " +
"@StopDate,@ServiceRateID)"
);
else
cm=DBUtil.GetCommandFromSQL(
"UPDATE aWorkorderItemScheduledUser SET aWorkorderItemID=@WorkorderItemID, " +
"aID=@ID, aUserID=@UserID, " +
"aEstimatedQuantity=@EstimatedQuantity, aStartDate=@StartDate, " +
"aStopDate=@StopDate, aServiceRateID=@ServiceRateID, " +
"aModifier=@CurrentUserID, aModified=@Modified " +
"WHERE aID=@ID"
);
//WorkorderItemScheduledUser specific
cm.AddInParameter("@ID",DbType.Guid,mID);
cm.AddInParameter("@WorkorderItemID",DbType.Guid,mWorkorderItemID);
cm.AddInParameter("@EstimatedQuantity",DbType.Decimal,mEstimatedQuantity);
cm.AddInParameter("@ServiceRateID",DbType.Guid,mServiceRateID);
cm.AddInParameter("@StartDate",DbType.DateTime, DBUtil.ToUTC(mStartDate).DBValue);
cm.AddInParameter("@StopDate",DbType.DateTime, DBUtil.ToUTC(mStopDate).DBValue);
cm.AddInParameter("@UserID",DbType.Guid,mUserID);
//standard parameters
cm.AddInParameter("@CurrentUserID",DbType.Guid, CurrentUserID);
cm.AddInParameter("@Created",DbType.DateTime, DBUtil.ToUTC(mCreated.Date));
cm.AddInParameter("@Modified",DbType.DateTime, DBUtil.ToUTC(dtModified));
DBUtil.DB.ExecuteNonQuery(cm, tr);
MarkOld();//db is now synched with object
//Successful update so
//change modification time to match
this.mModified.Date=dtModified;
#region Process notifications
//Process events as necessary
if(AyaBizUtils.GlobalSettings.UseNotification && this.mNotificationAffectingChangesMade //Case 510
&& obj.mWorkorderType == WorkorderTypes.Service)//case 1851
{
//Any changes should result in a new notification being created
//so remove the old one that is present
if(!this.IsNew) NotifyEvent.RemoveAllEventsForObject(this.mID);
if(this.mUserID!=Guid.Empty)//a schedule could have no user, just a time in which case no one to notifiy
{
//Created event (remember, only add a date if it's a pending notification
//this one isn't even though there is a relative date which will get
//picked up by the notification message Processor anyway so leave the date empty
//for this particular created type notfication
//bugbug: case 1152, this next bit causes a lockup if a workorder is being saved
//and the current user is the scheduled user, basically an endless timeout
NotifyEvent.AddOrUpdateEvent(RootObjectTypes.WorkorderItemScheduledUser,this.mID,
(int)WorkorderItemScheduledUserEvent.CreatedUpdated,
this.mUserID,new SmartDate(),Guid.Empty);
//PendingAlert event
//Only Process if there is a start date set
if(!this.mStartDate.IsEmpty)
NotifyEvent.AddOrUpdateEvent(RootObjectTypes.WorkorderItemScheduledUser,this.mID,
(int)WorkorderItemScheduledUserEvent.PendingAlert,
this.mUserID,this.mStartDate,Guid.Empty);
}
}
#endregion notification Processing
#endregion add / update
}
#endregion add/update/delete
#endregion DAL data access
}//end WorkorderItemScheduledUser
#region Notification events
/// <summary>
///
/// </summary>
public enum WorkorderItemScheduledUserEvent : int
{
/// <summary>
///
/// </summary>
[Description("LT:WorkorderItemScheduledUser.Label.Event.CreatedUpdated")] CreatedUpdated=1,
/// <summary>
///
/// </summary>
[Description("LT:WorkorderItemScheduledUser.Label.Event.PendingAlert")] PendingAlert=256
}
#endregion
}//end namespace GZTW.AyaNova.BLL