/////////////////////////////////////////////////////////// // Bool.cs // Implementation of Class ServiceBankCurrentBalanceFetcher // CSLA type: Read-only object // Created on: 26-Nov-2005 // Object design: John // Coded: John 26-Nov-2005 /////////////////////////////////////////////////////////// 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 current service bank balance for object indicated /// /// [Serializable] public class ServiceBankCurrentBalanceFetcher : ReadOnlyBase { private decimal mIncidentsBalance=0; private decimal mCurrencyBalance=0; private decimal mHoursBalance=0; //case 1617 private RootObjectTypes mObjectType = RootObjectTypes.Nothing; #region Constructor /// /// Private constructor to prevent direct instantiation /// private ServiceBankCurrentBalanceFetcher() { } #endregion #region Business properties /// /// Current balance of incidents remaining in service bank /// public decimal IncidentsBalance {get{return mIncidentsBalance;}} /// /// Current balance of currency remaining in service bank /// public decimal CurrencyBalance {get{return mCurrencyBalance;}} /// /// Current balance of hours remaining in service bank /// public decimal HoursBalance {get{return mHoursBalance;}} /// /// Localized text of balances /// in one descriptive string /// public string DisplayBalances { get { System.Text.StringBuilder sb = new System.Text.StringBuilder(); //case 1617 sb.Append(EnumDescConverter.GetEnumDescription(mObjectType)); sb.Append(" "); sb.Append(LocalizedTextTable.GetLocalizedTextDirect("ServiceBank.Label.CurrencyBalance")); sb.Append(": "); sb.Append(mCurrencyBalance.ToString("c")); sb.Append("\r\n"); sb.Append(LocalizedTextTable.GetLocalizedTextDirect("ServiceBank.Label.HoursBalance")); sb.Append(": "); sb.Append(mHoursBalance.ToString("g29")); sb.Append("\r\n"); sb.Append(LocalizedTextTable.GetLocalizedTextDirect("ServiceBank.Label.IncidentsBalance")); sb.Append(": "); sb.Append(mIncidentsBalance.ToString("g29")); sb.Append("\r\n"); return sb.ToString(); } } /// /// Localized text of balances /// in one descriptive string /// showing result of applying new values /// public string DisplayProposedBalances(decimal currencyrate, decimal hours, decimal incidents) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); decimal d = 0; //case 1617 sb.Append(EnumDescConverter.GetEnumDescription(mObjectType)); sb.Append(" "); sb.Append(LocalizedTextTable.GetLocalizedTextDirect("ServiceBank.Label.CurrencyBalance")); sb.Append(": "); d = mCurrencyBalance - (currencyrate*hours); sb.Append(mCurrencyBalance.ToString("c") + " - " + (currencyrate*hours).ToString("c") + " = " + (d).ToString("c")); if (d < 0) sb.Append(" <-- !"); sb.Append("\r\n"); sb.Append(LocalizedTextTable.GetLocalizedTextDirect("ServiceBank.Label.HoursBalance")); sb.Append(": "); d = mHoursBalance - hours; sb.Append(mHoursBalance.ToString("g29") + " - " + hours.ToString("g29") + " = " + (mHoursBalance - hours).ToString("g29")); if (d < 0) sb.Append(" <-- !"); sb.Append("\r\n"); sb.Append(LocalizedTextTable.GetLocalizedTextDirect("ServiceBank.Label.IncidentsBalance")); sb.Append(": "); d = mIncidentsBalance - incidents; sb.Append(mIncidentsBalance.ToString("g29") + " - " + incidents.ToString("g29") + " = " + (mIncidentsBalance - incidents).ToString("g29")); if (d < 0) sb.Append(" <-- !"); sb.Append("\r\n"); return sb.ToString(); } #endregion #region Static methods /// /// Retrieve current service bank balances /// /// ID of Bankable object /// Type of object /// ServiceBankCurrentBalanceFetcher object public static ServiceBankCurrentBalanceFetcher GetItem(Guid RootObjectID, RootObjectTypes RootObjectType) { return (ServiceBankCurrentBalanceFetcher)DataPortal.Fetch(new Criteria(RootObjectID, RootObjectType)); } /// /// Retrieve current service bank balances /// /// Type and ID of Bankable object /// ServiceBankCurrentBalanceFetcher object public static ServiceBankCurrentBalanceFetcher GetItem(TypeAndID tid) { return GetItem(tid.ID, tid.RootObjectType); } #endregion #region DAL DATA ACCESS /// /// protected override void DataPortal_Fetch(object Criteria) { Criteria crit = (Criteria)Criteria; DBCommandWrapper cmGetBalance = DBUtil.DB.GetSqlStringCommandWrapper( "SELECT TOP 1 aIncidentsBalance, aCurrencyBalance, aHoursBalance " + "FROM aServiceBank WHERE (AAPPLIESTOROOTOBJECTID " + "= @ID AND AAPPLIESTOROOTOBJECTTYPE = @RootObjectType) ORDER BY " + "aCreated DESC" ); cmGetBalance.AddInParameter("@ID",DbType.Guid,crit.RootObjectID); cmGetBalance.AddInParameter("@RootObjectType",DbType.Int16,(int)crit.RootObjectType); SafeDataReader dr = new SafeDataReader(DBUtil.DB.ExecuteReader(cmGetBalance)); //There may not be an existing record yet so if it can't read //assumes that there are no prior bank records for this object yet if(dr.Read()) { mIncidentsBalance=dr.GetDecimal("aIncidentsBalance"); mCurrencyBalance=dr.GetDecimal("aCurrencyBalance"); mHoursBalance=dr.GetDecimal("aHoursBalance"); //case 1617 mObjectType = crit.RootObjectType; } dr.Close(); } #endregion #region criteria /// /// Criteria for identifying existing object /// [Serializable] private class Criteria { public Guid RootObjectID; public RootObjectTypes RootObjectType; public Criteria(Guid _RootObjectID, RootObjectTypes _RootObjectType) { RootObjectID=_RootObjectID; RootObjectType=_RootObjectType; } } #endregion }//end Bool }//end Boolspace GZTW.AyaNova.BLL