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

273 lines
13 KiB
C#

///////////////////////////////////////////////////////////
// Bool.cs
// Implementation of Class RelatedObjectIDFetcher
// CSLA type: Read-only object
// Created on: 17-Dec-2008
// Object design: John
// Coded: 17-Dec-2008
///////////////////////////////////////////////////////////
using System;
using System.Data;
using CSLA.Data;
using GZTW.Data;
using CSLA;
using System.Threading;
using CSLA.Security;
using System.ComponentModel;
using System.Collections.Generic;
namespace GZTW.AyaNova.BLL
{
//case 981
/// <summary>
///Fetch the id of objects related to other objects
///
///
/// </summary>
[Serializable, EditorBrowsable(EditorBrowsableState.Never)]
internal class RelatedObjectIDFetcher : ReadOnlyBase
{
#region Attributes
private List<Guid> mIDList=new List<Guid>();
#endregion
#region Constructor
/// <summary>
/// Private constructor to prevent direct instantiation
/// </summary>
private RelatedObjectIDFetcher()
{
}
#endregion
#region Static methods
/// <summary>
/// Returns the ID of a specific object type related
/// to the specific object type and ID passed in.
///
/// For example if a workorder labour id and type is passed in and the
/// related type is Client then the client id for the work order that the labour record
/// id is found in is returned
///
/// Note: this is *not* a regionalized method for performance reasons,
/// if you need to ensure results are within a specific region you must handle that yourself.
/// </summary>
/// <param name="ObjectTypeAndID">Source object starting point (the object we have)</param>
/// <param name="RelatedObjectType">Desired relative type (the object we want)</param>
/// <returns>ID of found related object of type specified or Guid.Empty if no result</returns>
internal static List<Guid> GetRelatedObjectID(TypeAndID ObjectTypeAndID, RootObjectTypes RelatedObjectType)
{
if (RelatedObjectType != RootObjectTypes.Client)
throw new System.NotSupportedException(RelatedObjectType.ToString() + " is not currently supported. Object types supported are: Client");
return ((RelatedObjectIDFetcher)DataPortal.Fetch(new Criteria(ObjectTypeAndID, RelatedObjectType))).mIDList;
}
#endregion
#region DAL DATA ACCESS
///
/// <param Bool="Criteria"></param>
protected override void DataPortal_Fetch(object Criteria)
{
Criteria crit = (Criteria)Criteria;
mIDList.Clear();
string q = "";
if (crit.RelatedObjectType == RootObjectTypes.Client)
{
#region Client is desired type
switch (crit.ObjectTypeAndID.RootObjectType)
{
case RootObjectTypes.Client:
mIDList.Add(crit.ObjectTypeAndID.ID);
return;
case RootObjectTypes.Workorder:
q = "SELECT ACLIENTID FROM AWORKORDER WHERE AWORKORDER.AID=@ID";
break;
case RootObjectTypes.WorkorderItem:
q = "SELECT AWORKORDER.ACLIENTID FROM AWORKORDERITEM " +
"LEFT OUTER JOIN AWORKORDER ON (AWORKORDERITEM.AWORKORDERID = AWORKORDER.AID) " +
"WHERE AWORKORDERITEM.AID=@ID";
break;
case RootObjectTypes.WorkorderItemLabor:
q = "SELECT AWORKORDER.ACLIENTID FROM AWORKORDERITEM " +
"INNER JOIN AWORKORDER ON (AWORKORDERITEM.AWORKORDERID = AWORKORDER.AID) " +
"INNER JOIN AWORKORDERITEMLABOR ON (AWORKORDERITEM.AID = AWORKORDERITEMLABOR.AWORKORDERITEMID) " +
"WHERE (AWORKORDERITEMLABOR.AID = @ID)";
break;
case RootObjectTypes.WorkorderItemLoan:
q = "SELECT AWORKORDER.ACLIENTID FROM AWORKORDERITEM " +
"INNER JOIN AWORKORDER ON (AWORKORDERITEM.AWORKORDERID = AWORKORDER.AID) " +
"INNER JOIN AWORKORDERITEMLOAN ON (AWORKORDERITEM.AID = AWORKORDERITEMLOAN.AWORKORDERITEMID) " +
"WHERE (AWORKORDERITEMLOAN.AID = @ID)";
break;
case RootObjectTypes.WorkorderItemMiscExpense:
q = "SELECT AWORKORDER.ACLIENTID FROM AWORKORDERITEM " +
"INNER JOIN AWORKORDER ON (AWORKORDERITEM.AWORKORDERID = AWORKORDER.AID) " +
"INNER JOIN AWORKORDERITEMMISCEXPENSE ON (AWORKORDERITEM.AID = AWORKORDERITEMMISCEXPENSE.AWORKORDERITEMID) " +
"WHERE (AWORKORDERITEMMISCEXPENSE.AID = @ID)";
break;
case RootObjectTypes.WorkorderItemOutsideService:
q = "SELECT AWORKORDER.ACLIENTID FROM AWORKORDERITEM " +
"INNER JOIN AWORKORDER ON (AWORKORDERITEM.AWORKORDERID = AWORKORDER.AID) " +
"INNER JOIN AWORKORDERITEMOUTSIDESERVICE ON (AWORKORDERITEM.AID = AWORKORDERITEMOUTSIDESERVICE.AWORKORDERITEMID) " +
"WHERE (AWORKORDERITEMOUTSIDESERVICE.AID = @ID)";
break;
case RootObjectTypes.WorkorderItemPart:
q = "SELECT AWORKORDER.ACLIENTID FROM AWORKORDERITEM " +
"INNER JOIN AWORKORDER ON (AWORKORDERITEM.AWORKORDERID = AWORKORDER.AID) " +
"INNER JOIN AWORKORDERITEMPART ON (AWORKORDERITEM.AID = AWORKORDERITEMPART.AWORKORDERITEMID) " +
"WHERE (AWORKORDERITEMPART.AID = @ID)";
break;
case RootObjectTypes.WorkorderItemTravel:
q = "SELECT AWORKORDER.ACLIENTID FROM AWORKORDERITEM " +
"INNER JOIN AWORKORDER ON (AWORKORDERITEM.AWORKORDERID = AWORKORDER.AID) " +
"INNER JOIN AWORKORDERITEMTRAVEL ON (AWORKORDERITEM.AID = AWORKORDERITEMTRAVEL.AWORKORDERITEMID) " +
"WHERE (AWORKORDERITEMTRAVEL.AID = @ID)";
break;
case RootObjectTypes.WorkorderPreventiveMaintenance:
q = "SELECT AWORKORDER.ACLIENTID FROM AWORKORDERPREVENTIVEMAINTENANCE " +
"INNER JOIN AWORKORDER ON (AWORKORDERPREVENTIVEMAINTENANCE.AWORKORDERID = AWORKORDER.AID) " +
"WHERE (AWORKORDERPREVENTIVEMAINTENANCE.AID = @ID)";
break;
case RootObjectTypes.WorkorderQuote:
q = "SELECT AWORKORDER.ACLIENTID FROM AWORKORDERQUOTE " +
"INNER JOIN AWORKORDER ON (AWORKORDERQUOTE.AWORKORDERID = AWORKORDER.AID) " +
"WHERE (AWORKORDERQUOTE.AID = @ID)";
break;
case RootObjectTypes.WorkorderService:
q = "SELECT AWORKORDER.ACLIENTID FROM AWORKORDERSERVICE " +
"INNER JOIN AWORKORDER ON (AWORKORDERSERVICE.AWORKORDERID = AWORKORDER.AID) " +
"WHERE (AWORKORDERSERVICE.AID = @ID)";
break;
case RootObjectTypes.AssignedDocument:
q = "SELECT ACLIENT.AID FROM AASSIGNEDDOC " +
"INNER JOIN ACLIENT ON (AASSIGNEDDOC.AROOTOBJECTID = ACLIENT.AID) " +
"WHERE (AASSIGNEDDOC.AID = @ID)";
break;
case RootObjectTypes.ClientNote:
q = "SELECT ACLIENTID FROM ACLIENTNOTE " +
"WHERE (ACLIENTNOTE.AID = @ID)";
break;
case RootObjectTypes.ClientServiceRequest:
q = "SELECT ACLIENTID FROM ACLIENTSERVICEREQUEST " +
"WHERE (ACLIENTSERVICEREQUEST.AID = @ID)";
break;
case RootObjectTypes.Contract:
q = "SELECT ACLIENT.AID FROM ACLIENT " +
"INNER JOIN ACONTRACT ON (ACLIENT.ACONTRACTID = ACONTRACT.AID) " +
"WHERE (ACONTRACT.AID = @ID)";
break;
case RootObjectTypes.DispatchZone:
q = "SELECT ACLIENT.AID FROM ACLIENT " +
"INNER JOIN ADISPATCHZONE ON (ACLIENT.ADISPATCHZONEID = ADISPATCHZONE.AID) " +
"WHERE (ADISPATCHZONE.AID = @ID)";
break;
case RootObjectTypes.HeadOffice:
q = "SELECT ACLIENT.AID FROM AHEADOFFICE " +
"INNER JOIN ACLIENT ON (AHEADOFFICE.AID = ACLIENT.AHEADOFFICEID) " +
"WHERE (AHEADOFFICE.AID = @ID)";
break;
case RootObjectTypes.Project:
q = "SELECT ACLIENT.AID FROM APROJECT " +
"INNER JOIN AWORKORDER ON (APROJECT.AID = AWORKORDER.APROJECTID) " +
"INNER JOIN ACLIENT ON (AWORKORDER.ACLIENTID = ACLIENT.AID) " +
"WHERE (APROJECT.AID = @ID)";
break;
case RootObjectTypes.ServiceBank:
q = "SELECT ACLIENT.AID FROM ASERVICEBANK INNER JOIN ACLIENT " +
"ON (ASERVICEBANK.AAPPLIESTOROOTOBJECTID = ACLIENT.AID) " +
"WHERE (ASERVICEBANK.AID = @ID)";
break;
case RootObjectTypes.Unit:
q = "SELECT ACLIENT.AID FROM AUNIT INNER JOIN ACLIENT ON " +
"(AUNIT.ACLIENTID = ACLIENT.AID) " +
"WHERE (AUNIT.AID = @ID)";
break;
case RootObjectTypes.UnitMeterReading:
q = "SELECT ACLIENT.AID FROM AUNIT INNER JOIN ACLIENT ON " +
"(AUNIT.ACLIENTID = ACLIENT.AID) INNER JOIN AUNITMETERREADING " +
"ON (AUNIT.AID = AUNITMETERREADING.AUNITID) " +
"WHERE (AUNITMETERREADING.AID = @ID)";
break;
case RootObjectTypes.UnitModel:
q = "SELECT ACLIENT.AID FROM AUNIT INNER JOIN ACLIENT ON " +
"(AUNIT.ACLIENTID = ACLIENT.AID) INNER JOIN AUNITMODEL " +
"ON (AUNIT.AUNITMODELID = AUNITMODEL.AID) " +
"WHERE (AUNITMODEL.AID = @ID)";
break;
case RootObjectTypes.User:
q = "SELECT ACLIENT.AID FROM AUSER INNER JOIN ACLIENT ON " +
"(AUSER.ACLIENTID = ACLIENT.AID) " +
"WHERE (AUSER.AID = @ID)";
break;
case RootObjectTypes.WikiPage:
q = "SELECT ACLIENT.AID FROM AWIKIPAGE INNER JOIN ACLIENT " +
"ON (AWIKIPAGE.AROOTOBJECTID = ACLIENT.AID) " +
"WHERE (AWIKIPAGE.AID = @ID)";
break;
}
#endregion client type
}
if (string.IsNullOrEmpty(q))
return;
SafeDataReader dr = null;
try
{
dr = DBUtil.GetReaderFromSQLString(q, crit.ObjectTypeAndID.ID);
while (dr.Read())
{
mIDList.Add(dr.GetGuid(0));
}
}
finally
{
if (dr != null) dr.Close();
}
}
#endregion
#region criteria
/// <summary>
/// Criteria for identifying existing object
/// </summary>
[Serializable]
private class Criteria
{
public TypeAndID ObjectTypeAndID;
public RootObjectTypes RelatedObjectType;
public Criteria(TypeAndID _ObjectTypeAndID, RootObjectTypes _RelatedObjectType)
{
ObjectTypeAndID = _ObjectTypeAndID;
RelatedObjectType = _RelatedObjectType;
}
}
#endregion
}//end class
}//end namespace GZTW.AyaNova.BLL