/////////////////////////////////////////////////////////// // WorkorderServiceBillableList.cs // Implementation of Class WorkorderServiceBillableList // CSLA type: Read only collection // Created on: 24-Feb-2006 // Object design: John // Coded: 24-Feb-2006 /////////////////////////////////////////////////////////// using System; using System.Data; using GZTW.Data; using CSLA.Data; using CSLA; namespace GZTW.AyaNova.BLL { #pragma warning disable 1591 /// /// Read only list of objects representing /// service work orders that are invoiceable. Used by accounting integration plugins. /// [Serializable] public class WorkorderServiceBillableList : ReadOnlyCollectionBase { #region Data structure /// /// /// [Serializable] public struct WorkorderServiceBillableListInfo { internal Guid mID; internal Guid mClientID; internal string mClientName; internal string mWorkorderStatusName; internal int mServiceNumber; internal SmartDate mServiceDate; internal int mStatusARGB; internal string mProjectName; /// /// Work order internal ID /// public Guid ID {get{return mID;}} /// /// Client internal ID /// public Guid ClientID {get{return mClientID;}} /// /// Client name /// public string Client {get{return mClientName;}} /// /// Workorder status /// public string Status {get{return mWorkorderStatusName;}} /// /// Visible sequential workorder number /// public int ServiceNumber {get{return mServiceNumber;}} /// /// Date of service /// public object ServiceDate {get{return mServiceDate.DBValue;}} /// /// Status color in ARGB integer format /// public int StatusARGB {get{return mStatusARGB;}} /// /// Workorder project /// public string Project {get{return mProjectName;}} /// /// /// /// public bool Equals(WorkorderServiceBillableListInfo obj) { return this.mID.Equals(obj.mID); } }//end WorkorderServiceBillableListInfo #endregion #region Constructor protected WorkorderServiceBillableList() { // AllowSort=false; // AllowFind=true; // AllowEdit=false; // AllowNew=false; // AllowRemove=false; } #endregion #region Business properties and methods /// /// Get item by index /// /// public WorkorderServiceBillableListInfo this[int Item] { get { return (WorkorderServiceBillableListInfo) List[Item]; } } /// /// Returns WorkorderServiceBillableListInfo item that matches passed in itemid value /// /// public WorkorderServiceBillableListInfo this[Guid ItemID] { get { foreach (WorkorderServiceBillableListInfo child in List) { if(child.mID==ItemID) return child; } throw new ArgumentException("WorkorderServiceBillableList: ID not found:\r\n"+ItemID.ToString()); } } #endregion #region contains /// /// Check if item in collection /// /// public bool Contains(WorkorderServiceBillableListInfo obj) { foreach (WorkorderServiceBillableListInfo child in List) { if(child.Equals(obj)) return true; } return false; } #endregion #region Static methods /// /// Get all billable work orders /// Work orders are considered billable if they are set to ServiceCompleted=true /// and Closed=true /// Update: And considered billable if they are in the current users region /// /// /// Filter by status or Guid.Empty for any status /// Filter by current user region /// list of objects public static WorkorderServiceBillableList GetList(Guid WorkorderStatusID, bool Regional) { return (WorkorderServiceBillableList) DataPortal.Fetch(new Criteria(WorkorderStatusID, Regional)); } public static WorkorderServiceBillableList GetEmptyList() { return new WorkorderServiceBillableList(); } #endregion #region DAL DATA ACCESS /// /// protected override void DataPortal_Fetch(object Criteria) { Criteria crit = (Criteria)Criteria; SafeDataReader dr = null; try { string q="SELECT " + " AWORKORDER.AID,AWORKORDER.ACLIENTID, " + " ACLIENT.ANAME AS ACLIENTNAME, aClient.aRegionID, " +//case 58 " AWORKORDERSTATUS.ANAME AS ASTATUSNAME, " + " AWORKORDERSTATUS.AARGB, " + " AWORKORDERSERVICE.ASERVICENUMBER, " + " AWORKORDERSERVICE.ASERVICEDATE, " + " APROJECT.ANAME AS APROJECTNAME " + "FROM " + " AWORKORDER " + " INNER JOIN ACLIENT ON (AWORKORDER.ACLIENTID = ACLIENT.AID) " + " INNER JOIN AWORKORDERSERVICE ON (AWORKORDER.AID = AWORKORDERSERVICE.AWORKORDERID) " + " LEFT OUTER JOIN AWORKORDERSTATUS ON (AWORKORDERSERVICE.AWORKORDERSTATUSID = AWORKORDERSTATUS.AID) " + " LEFT OUTER JOIN APROJECT ON (AWORKORDER.APROJECTID = APROJECT.AID) " + "WHERE " + " (AWORKORDER.AWORKORDERTYPE = @aTrue) AND " + " (AWORKORDER.ASERVICECOMPLETED = @aTrue) AND " + " (AWORKORDER.ACLOSED = @aFalse) AND (AWORKORDERSERVICE.AINVOICENUMBER=@AEMPTYSTRING) "; if(crit.WorkorderStatusID!=Guid.Empty) q=q+"AND (AWORKORDERSERVICE.AWORKORDERSTATUSID=@ASTATUSID )"; DBCommandWrapper cm = DBUtil.DB.GetSqlStringCommandWrapper(DBUtil.AddRegionFilter(//case 58 q,"aClient","aRegionID",crit.Regional ) ); cm.AddInParameter("@aTrue",DbType.Boolean,true); cm.AddInParameter("@aFalse",DbType.Boolean,false); cm.AddInParameter("@AEMPTYSTRING",DbType.String,""); if(crit.WorkorderStatusID!=Guid.Empty) cm.AddInParameter("@ASTATUSID",DbType.Guid,crit.WorkorderStatusID); dr = new SafeDataReader(DBUtil.DB.ExecuteReader(cm)); while(dr.Read()) { //******************************************* WorkorderServiceBillableListInfo info=new WorkorderServiceBillableListInfo(); info.mID=dr.GetGuid("aID"); info.mClientID=dr.GetGuid("aClientID"); info.mClientName=dr.GetString("aClientName"); info.mProjectName=dr.GetString("aProjectName"); info.mServiceDate=DBUtil.ToLocal(dr.GetSmartDate("aServicedate")); info.mServiceNumber=dr.GetInt32("aServiceNumber"); info.mStatusARGB=dr.GetInt32("aargb"); info.mWorkorderStatusName=dr.GetString("aStatusName"); InnerList.Add(info); //******************************************* } } finally { if(dr!=null) dr.Close(); } } #endregion #region criteria /// /// Criteria for identifying existing object /// [Serializable] private class Criteria { public Guid WorkorderStatusID; public bool Regional; public Criteria(Guid _WorkorderStatusID, bool _Regional ) { WorkorderStatusID=_WorkorderStatusID; Regional = _Regional; } } #endregion }//end WorkorderServiceBillableList #pragma warning restore 1591 }//end namespace GZTW.AyaNova.BLL