273 lines
13 KiB
C#
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 |