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

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