239 lines
9.5 KiB
C#
239 lines
9.5 KiB
C#
///////////////////////////////////////////////////////////
|
|
// ObjectRegionIDFetcher.cs
|
|
// Implementation of Class ObjectRegionIDFetcher
|
|
// CSLA type: Read-only object
|
|
// Created on: 28-Oct-2008
|
|
// Object design: John
|
|
// Coded: 28-Oct-2008
|
|
///////////////////////////////////////////////////////////
|
|
using System;
|
|
using System.ComponentModel;
|
|
using CSLA;
|
|
using CSLA.Data;
|
|
|
|
namespace GZTW.AyaNova.BLL
|
|
{
|
|
//case 58
|
|
/// <summary>
|
|
///Quickly fetch any Regionalized object's regionid
|
|
///Used primarily for search feature restrict results to region
|
|
/// </summary>
|
|
[Serializable, EditorBrowsable(EditorBrowsableState.Never)]
|
|
public class ObjectRegionIDFetcher : ReadOnlyBase
|
|
{
|
|
|
|
#region Attributes
|
|
private Guid mRegionID;
|
|
#endregion
|
|
|
|
#region Constructor
|
|
|
|
/// <summary>
|
|
/// Private constructor to prevent direct instantiation
|
|
/// </summary>
|
|
private ObjectRegionIDFetcher()
|
|
{
|
|
|
|
}
|
|
#endregion
|
|
|
|
|
|
#region Static methods
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// Given a root object type and ID
|
|
/// returns the Region ID that object is set to.
|
|
///
|
|
/// NOTE: if the passed in object type is not a regionalized object type
|
|
/// it will return Region.DefaultRegionID instead.
|
|
/// </summary>
|
|
/// <param name="TheObject"></param>
|
|
/// <returns></returns>
|
|
public static Guid ObjectRegion(TypeAndID TheObject)
|
|
{
|
|
|
|
return ((ObjectRegionIDFetcher)DataPortal.Fetch(new Criteria(TheObject))).mRegionID;
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region DAL DATA ACCESS
|
|
///
|
|
/// <param Bool="Criteria"></param>
|
|
protected override void DataPortal_Fetch(object Criteria)
|
|
{
|
|
Criteria crit = (Criteria)Criteria;
|
|
string sTable = "";
|
|
switch (crit.TheObject.RootObjectType)
|
|
{
|
|
case RootObjectTypes.Client:
|
|
sTable = "aClient";
|
|
break;
|
|
case RootObjectTypes.Contract:
|
|
sTable = "aContract";
|
|
break;
|
|
case RootObjectTypes.HeadOffice:
|
|
sTable = "aHeadOffice";
|
|
break;
|
|
case RootObjectTypes.User:
|
|
sTable = "aUser";
|
|
break;
|
|
case RootObjectTypes.DispatchZone:
|
|
sTable = "aDispatchZone";
|
|
break;
|
|
case RootObjectTypes.LoanItem:
|
|
sTable = "aLoanItem";
|
|
break;
|
|
case RootObjectTypes.Project:
|
|
sTable = "aProject";
|
|
break;
|
|
case RootObjectTypes.Rate:
|
|
sTable = "aRate";
|
|
break;
|
|
case RootObjectTypes.Report:
|
|
sTable = "aReport";
|
|
break;
|
|
case RootObjectTypes.PartWarehouse:
|
|
sTable = "aPartWarehouse";
|
|
break;
|
|
case RootObjectTypes.ClientServiceRequest:
|
|
this.mRegionID = DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
|
|
"SELECT aClient.aRegionID from aClientServiceRequest " +
|
|
"LEFT OUTER JOIN ACLIENT ON (ACLIENTSERVICEREQUEST.ACLIENTID = ACLIENT.AID) " +
|
|
"WHERE aClientServiceRequest.aID=@ID ", crit.TheObject.ID));
|
|
return;
|
|
case RootObjectTypes.ScheduleMarker:
|
|
{
|
|
SafeDataReader dr = DBUtil.GetReaderFromSQLString(
|
|
"SELECT aSourceID, aScheduleMarkerSourceType, aCreated, aModified, aCreator, aModifier, aName, " +
|
|
"aNotes FROM aScheduleMarker WHERE (aID = @ID)"
|
|
, crit.TheObject.ID);
|
|
if (!dr.Read()) this.mRegionID = Region.DefaultRegionID;//better safe than sorry
|
|
|
|
|
|
ScheduleMarkerSourceTypes ScheduleMarkerSourceType = (ScheduleMarkerSourceTypes)dr.GetInt16("aScheduleMarkerSourceType");
|
|
if (ScheduleMarkerSourceType == ScheduleMarkerSourceTypes.Regional)
|
|
mRegionID = dr.GetGuid("aSourceID");
|
|
else
|
|
mRegionID = Region.DefaultRegionID;
|
|
}
|
|
return;
|
|
case RootObjectTypes.ServiceBank:
|
|
{
|
|
//Service bank needs to check the ancestor the sb entry is related to so
|
|
//first get the ancestor:
|
|
|
|
SafeDataReader dr = DBUtil.GetReaderFromSQLString(
|
|
"SELECT aSourceRootObjectID, " +
|
|
" aSourceRootObjectType, AAPPLIESTOROOTOBJECTID, " +
|
|
" AAPPLIESTOROOTOBJECTTYPE FROM aServiceBank WHERE " +
|
|
"(aID = @ID)"
|
|
, crit.TheObject.ID);
|
|
if (!dr.Read()) this.mRegionID = Region.DefaultRegionID;//better safe than sorry
|
|
|
|
//The following block of code basically copied from the servicebank fetch search result code
|
|
|
|
//Source ID points to the object to open where the entry was made from
|
|
//however if it's empty then it means the entry was made from the
|
|
//servicebank screen itself so we then need to use the
|
|
//applies to object id instead to open the object in question
|
|
Guid AncestorRootObjectID = dr.GetGuid("aSourceRootObjectID");
|
|
RootObjectTypes AncestorRootObjectType = RootObjectTypes.Nothing;
|
|
if (AncestorRootObjectID == Guid.Empty)
|
|
{
|
|
AncestorRootObjectID = dr.GetGuid("AAPPLIESTOROOTOBJECTID");
|
|
AncestorRootObjectType = (RootObjectTypes)dr.GetInt16("AAPPLIESTOROOTOBJECTTYPE");
|
|
}
|
|
else
|
|
AncestorRootObjectType = (RootObjectTypes)dr.GetInt16("aSourceRootObjectType");
|
|
|
|
//Now that we have the ancestor just fetch it's region ID as normal
|
|
//by recursively calling this method
|
|
mRegionID = ObjectRegionIDFetcher.ObjectRegion(
|
|
new TypeAndID(
|
|
AncestorRootObjectType, AncestorRootObjectID
|
|
)
|
|
);
|
|
}
|
|
return;
|
|
//Workorder related
|
|
case RootObjectTypes.Workorder:
|
|
case RootObjectTypes.WorkorderItem:
|
|
case RootObjectTypes.WorkorderItemLabor:
|
|
case RootObjectTypes.WorkorderItemMiscExpense:
|
|
case RootObjectTypes.WorkorderItemTravel:
|
|
case RootObjectTypes.WorkorderItemScheduledUser:
|
|
case RootObjectTypes.WorkorderItemOutsideService:
|
|
case RootObjectTypes.WorkorderItemPartRequest:
|
|
case RootObjectTypes.WorkorderItemPart:
|
|
case RootObjectTypes.WorkorderPreventiveMaintenance:
|
|
case RootObjectTypes.WorkorderQuote:
|
|
case RootObjectTypes.WorkorderService:
|
|
case RootObjectTypes.WorkorderItemLoan:
|
|
{
|
|
//Get the parent workorder ID
|
|
Guid woid = WorkorderIDFetcher.GetWorkorderByRelative(crit.TheObject.RootObjectType, crit.TheObject.ID);
|
|
|
|
//Use it to fetch the client's region
|
|
SafeDataReader dr = DBUtil.GetReaderFromSQLString(
|
|
"SELECT aClient.aRegionID AS ACLIENTREGION " +
|
|
"FROM aWorkorder " +
|
|
"LEFT OUTER JOIN aClient " +
|
|
"ON aWorkorder.aClientID = aClient.aID WHERE " +
|
|
"(aWorkorder.aID = @ID)"
|
|
, woid);
|
|
|
|
if (!dr.Read()) this.mRegionID = Region.DefaultRegionID;//better safe than sorry
|
|
|
|
|
|
mRegionID = dr.GetGuid("ACLIENTREGION");
|
|
|
|
}
|
|
return;
|
|
default:
|
|
{
|
|
//not a regionalized object? Then return default region id
|
|
//this allows this code to be called with indeterminate root object types
|
|
//for example the AssignedDocs search result processor
|
|
this.mRegionID = Region.DefaultRegionID;
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
this.mRegionID=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
|
|
"SELECT aRegionID FROM "+ sTable +" WHERE " +
|
|
"(aID = @ID)", crit.TheObject.ID
|
|
));
|
|
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
#region criteria
|
|
/// <summary>
|
|
/// Criteria for identifying existing object
|
|
/// </summary>
|
|
[Serializable]
|
|
private class Criteria
|
|
{
|
|
|
|
public TypeAndID TheObject;
|
|
public Criteria(TypeAndID _TheObject)
|
|
{
|
|
TheObject = _TheObject;
|
|
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
|
|
}//end class
|
|
|
|
}//end namespace GZTW.AyaNova.BLL |