/////////////////////////////////////////////////////////// // 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 { /// /// Used to quickly fetch a workorder id /// from the database give an descendant object id /// Returns Guid.empty on fail /// [Serializable] public class WorkorderIDFetcher : ReadOnlyBase { #region Attributes private Guid mID; #endregion #region Constructor /// /// Private constructor to prevent direct instantiation /// private WorkorderIDFetcher() { } #endregion #region Business properties /// /// ID of workorder /// public Guid ID { get { return mID; } } #endregion #region System.Object overrides /// /// /// /// public override string ToString() { return "WorkorderID:"+mID.ToString(); } #endregion #region Static methods /// /// 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 /// /// Workorder /// Related objec (child/grandchild etc) Guid /// RootObject enum from object in Workorder Hiearchy, i.e. WorkorderItemScheduledUser etc /// /// The following example shows usage of this method /// /// //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); /// 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 /// /// 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 /// /// Criteria for identifying existing object /// [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