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

276 lines
9.1 KiB
C#

///////////////////////////////////////////////////////////
// Bool.cs
// Implementation of Class WorkorderIDFetcher
// CSLA type: Read-only object
// Created on: 24-Oct-2006
// Object design: John
// Coded: John 24-Oct-2006
///////////////////////////////////////////////////////////
using System;
using System.Data;
using CSLA.Data;
using GZTW.Data;
using CSLA;
using System.Threading;
using CSLA.Security;
namespace GZTW.AyaNova.BLL
{
/// <summary>
/// Used to quickly fetch a workorder id
/// from the database give an descendant object id
/// Returns Guid.empty on fail
/// </summary>
[Serializable]
public class WorkorderIDFetcher : ReadOnlyBase
{
#region Attributes
private Guid mID;
#endregion
#region Constructor
/// <summary>
/// Private constructor to prevent direct instantiation
/// </summary>
private WorkorderIDFetcher()
{
}
#endregion
#region Business properties
/// <summary>
/// ID of workorder
/// </summary>
public Guid ID
{
get
{
return mID;
}
}
#endregion
#region System.Object overrides
/// <summary>
///
/// </summary>
/// <returns></returns>
public override string ToString()
{
return "WorkorderID:"+mID.ToString();
}
#endregion
#region Static methods
/// <summary>
/// Fetch existing Workorder ID by related item ID
///
/// Given a rootobjectType and an ID returns the Guid of
/// the work order that hosts
/// that rootobject type and ID
/// </summary>
/// <returns>Workorder</returns>
/// <param name="_ID">Related objec (child/grandchild etc) Guid</param>
/// <param name="RootObject">RootObject enum from object in Workorder Hiearchy, i.e. WorkorderItemScheduledUser etc</param>
/// <example>
/// The following example shows usage of this method
/// <code>
/// //example travel id
/// Guid MyTravelID = new Guid("A46993E7-CB1B-40D6-9EB3-667CC18BBC22");
///
/// //Get the workorder ID by relative
/// Guid woID=WorkorderIDFetcher.GetWorkorderByRelative(RootObjectTypes.WorkorderItemTravel, MyTravelID);
///
/// //Fetch the workorder and display some info from it...
/// Workorder w = Workorder.GetItem(woID);
/// MessageBox.Show(w.NameAndAddress);
/// </code></example>
public static Guid GetWorkorderByRelative(RootObjectTypes RootObject, Guid _ID)
{
//case 1387 *really* not necessary to do this security check here
//if(AyaBizUtils.Right("Object.xxWorkorder")>(int)SecurityLevelTypes.NoAccess)
//{
return ((WorkorderIDFetcher)DataPortal.Fetch(new Criteria(RootObject,_ID))).ID;
//}
//else
// throw new System.Security.SecurityException(
// string.Format(
// LocalizedTextTable.GetLocalizedTextDirect("Error.Security.NotAuthorizedToRetrieve"),
// LocalizedTextTable.GetLocalizedTextDirect("O.Workorder")));
}
#endregion
#region DAL DATA ACCESS
///
/// <param Bool="Criteria"></param>
protected override void DataPortal_Fetch(object Criteria)
{
Criteria crit = (Criteria)Criteria;
Guid WorkorderIDToFetch=crit.ID;
switch(crit.RootObjectType)
{
case RootObjectTypes.Workorder:
;//Do nothing, we already have the workorder id in crit.ID
break;
case RootObjectTypes.WorkorderItem:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT TOP 1 aWorkorderItem.aWorkorderID " +
"FROM aWorkorderItem WHERE (aWorkorderItem.aID = @ID)"
,crit.ID));
break;
case RootObjectTypes.WorkorderItemLabor:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT TOP 1 aWorkorderItem.aWorkorderID " +
"FROM aWorkorderItem INNER JOIN aWorkorderItemLabor " +
"ON aWorkorderItem.aID = aWorkorderItemLabor.aWorkorderItemID " +
"WHERE (aWorkorderItemLabor.aID " +
"= @ID)"
,crit.ID));
break;
//Added: 2-Oct-2006
//to support search results display
case RootObjectTypes.WorkorderItemMiscExpense:
WorkorderIDToFetch = DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT TOP 1 aWorkorderItem.aWorkorderID " +
"FROM aWorkorderItem INNER JOIN aWorkorderItemMiscExpense " +
"ON aWorkorderItem.aID = aWorkorderItemMiscExpense.aWorkorderItemID " +
"WHERE (aWorkorderItemMiscExpense.aID " +
"= @ID)"
, crit.ID));
break;
case RootObjectTypes.WorkorderItemTravel:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT TOP 1 aWorkorderItem.aWorkorderID " +
"FROM aWorkorderItem INNER JOIN aWorkorderItemTravel " +
"ON aWorkorderItem.aID = aWorkorderItemTravel.aWorkorderItemID " +
"WHERE (aWorkorderItemTravel.aID " +
"= @ID)"
,crit.ID));
break;
case RootObjectTypes.WorkorderItemScheduledUser:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT TOP 1 aWorkorderItem.aWorkorderID " +
"FROM aWorkorderItem INNER JOIN aWorkorderItemScheduledUser " +
"ON aWorkorderItem.aID = aWorkorderItemScheduledUser.aWorkorderItemID " +
"WHERE (aWorkorderItemScheduledUser.aID " +
"= @ID)"
,crit.ID));
break;
case RootObjectTypes.WorkorderItemOutsideService:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT TOP 1 aWorkorderItem.aWorkorderID " +
"FROM aWorkorderItem INNER JOIN aWorkorderItemOutsideService " +
"ON aWorkorderItem.aID = aWorkorderItemOutsideService.aWorkorderItemID " +
"WHERE (aWorkorderItemOutsideService.aID " +
"= @ID)"
,crit.ID));
break;
case RootObjectTypes.WorkorderItemPartRequest:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT TOP 1 aWorkorderItem.aWorkorderID " +
"FROM aWorkorderItem INNER JOIN aWorkorderItemPartRequest " +
"ON aWorkorderItem.aID = aWorkorderItemPartRequest.aWorkorderItemID " +
"WHERE (aWorkorderItemPartRequest.aID " +
"= @ID)"
,crit.ID));
break;
case RootObjectTypes.WorkorderItemPart:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT TOP 1 aWorkorderItem.aWorkorderID " +
"FROM aWorkorderItem INNER JOIN aWorkorderItemPart " +
"ON aWorkorderItem.aID = aWorkorderItemPart.aWorkorderItemID " +
"WHERE (aWorkorderItemPart.aID " +
"= @ID)"
,crit.ID));
break;
case RootObjectTypes.WorkorderPreventiveMaintenance:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT aWorkorderPreventiveMaintenance.aWorkorderID " +
"FROM aWorkorderPreventiveMaintenance " +
"WHERE (aWorkorderPreventiveMaintenance.aID " +
"= @ID)"
,crit.ID));
break;
case RootObjectTypes.WorkorderQuote:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT aWorkorderQuote.aWorkorderID " +
"FROM aWorkorderQuote " +
"WHERE (aWorkorderQuote.aID " +
"= @ID)"
,crit.ID));
break;
case RootObjectTypes.WorkorderService:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT aWorkorderService.aWorkorderID " +
"FROM aWorkorderService " +
"WHERE (aWorkorderService.aID " +
"= @ID)"
,crit.ID));
break;
case RootObjectTypes.WorkorderItemLoan:
WorkorderIDToFetch=DBUtil.ToGuid(DBUtil.GetScalarFromSQLString(
"SELECT TOP 1 aWorkorderItem.aWorkorderID " +
"FROM aWorkorderItem INNER JOIN aWorkorderItemLoan " +
"ON aWorkorderItem.aID = aWorkorderItemLoan.aWorkorderItemID " +
"WHERE (aWorkorderItemLoan.aID " +
"= @ID)"
,crit.ID));
break;
default:
throw new System.NotSupportedException("GetWorkorderByDescendant(" + crit.RootObjectType.ToString() + ") not supported");
}
mID = WorkorderIDToFetch;
}
#endregion
#region criteria
/// <summary>
/// Criteria for identifying existing object
/// </summary>
[Serializable]
private class Criteria
{
public Guid ID;
public RootObjectTypes RootObjectType;
public Criteria(RootObjectTypes _RootObjectType, Guid _ID)
{
ID = _ID;
RootObjectType = _RootObjectType;
}
}
#endregion
}//end Bool
}//end Boolspace GZTW.AyaNova.BLL