using System; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using GZTW.AyaNova.BLL; using CSLA.Security; using System.Threading; using System.Text; using System.Collections; using System.Reflection; using System.Collections.Generic; using Telerik.Web.UI; using FirebirdSql.Data.FirebirdClient; using System.Globalization; /// /// Summary description for Util /// public class Util { public Util() { // // TODO: Add constructor logic here // } public static string Version { get { return "7.6.0"; } } public static int HotfixVersion { get { return 0; } } public static Guid WBIIntegrationID { get { return new Guid("{6946040C-1B50-4eab-BE08-A0E93DB7449F}"); } } #region "global" vars /// /// Get the current user record /// public static User CurrentUser { get { return User.GetItem((((BusinessPrincipal)Thread.CurrentPrincipal).ID)); } } /// /// Get the current user record /// public static Guid CurrentUserID { get { return (((BusinessPrincipal)Thread.CurrentPrincipal).ID); } } /// /// Global settings (cached) /// public static Global GlobalSettings { get { if (mglobal != null) return mglobal; if (HttpContext.Current.Cache["GlobalSettings"] == null) { HttpContext.Current.Cache.Insert("GlobalSettings", Global.GetItem(), null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30)); } mglobal = (Global)HttpContext.Current.Cache["GlobalSettings"]; return mglobal; } } private static Global mglobal = null; public static WBIIntegrationData IntegrationData { get { return (WBIIntegrationData)WBIIntegration.AIObject; } } public static void SaveIntegrationData() { //trigger is dirty WBIIntegration.SyncCheckPoint = DBUtil.CurrentWorkingDateTime.ToString();//case 1163 mWBIIntegration = (Integration) WBIIntegration.Save(); // HttpContext.Current.Cache.Remove("IntegrationData"); } public static Integration WBIIntegration { get { //It's in memory? if (mWBIIntegration != null) return mWBIIntegration; ////It's in the cache? //if (HttpContext.Current.Cache["IntegrationData"] != null) //{ // mWBIIntegration = (Integration)HttpContext.Current.Cache["IntegrationData"]; // return mWBIIntegration; //} //check if there is an integration for wbi already if (!Integration.IntegrationExists(WBIIntegrationID)) { Integration i = Integration.NewItem(WBIIntegrationID); i.AppVersion = Version; i.Name = "AyaNova WBI"; i.AIObject = new WBIIntegrationData(); mWBIIntegration = (Integration)i.Save(); } else { try { mWBIIntegration = Integration.GetItem(WBIIntegrationID); } catch { //Added as insurance code, on my dev station but no where else getting a serialization exception //claiming that it can't find wbi v4.0.0.0 when we've been beyond that for some time without error and deployed //4.0.2 doesn't get this error Integration.DeleteItem(WBIIntegrationID); Integration i = Integration.NewItem(WBIIntegrationID); i.AppVersion = Version; i.Name = "AyaNova WBI"; i.AIObject = new WBIIntegrationData(); mWBIIntegration = (Integration)i.Save(); } } //Convert for case 613 if (!(mWBIIntegration.AIObject is WBIIntegrationData)) { //convert to new (v4 case 613 integrationdata object from old //single guid that stored workorder report id Guid mWorkorderReportID = (Guid)mWBIIntegration.AIObject; mWBIIntegration.AIObject = new WBIIntegrationData(); ((WBIIntegrationData)mWBIIntegration.AIObject).ClientWorkorderReportID = mWorkorderReportID; mWBIIntegration = (Integration)mWBIIntegration.Save(); } //We have a current integration object so put it in the cache... //HttpContext.Current.Cache.Insert("IntegrationData", mWBIIntegration, // null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30)); //...and return it return mWBIIntegration; } } private static Integration mWBIIntegration; /// /// GridLastView cached /// public static UIUserGridLastViews gGridLastViews { get { if (HttpContext.Current.Cache[Util.CurrentUserID.ToString() + "GridLastViews"] == null) { HttpContext.Current.Cache.Insert(Util.CurrentUserID.ToString() + "GridLastViews", UIUserGridLastViews.GetItems(User.CurrentThreadUserID), null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(20)); } return (UIUserGridLastViews)HttpContext.Current.Cache[Util.CurrentUserID.ToString() + "GridLastViews"]; } } #region deprecated workorder report id prior to case 613 ///// ///// the report id of the workorder report selected for ///// clients to print / preview ///// //public static Guid ClientWorkorderReportID //{ // get // { // if (HttpContext.Current.Cache["ClientWorkorderReportID"] == null) // { // Integration i = WBIIntegration; // if (i.AIObject == null) // { // i.AIObject = Guid.Empty; // i.Save(); // } // HttpContext.Current.Cache.Insert("ClientWorkorderReportID", // i.AIObject, // null, // System.Web.Caching.Cache.NoAbsoluteExpiration, // TimeSpan.FromMinutes(20)); // } // return (Guid)HttpContext.Current.Cache["ClientWorkorderReportID"]; // } // set // { // //When setting we will have always retrieved at least once first in order // //to prime the drop down list box selected value for reports so just need to update // //and remove the cache and bob's your uncle. // Integration i = WBIIntegration; // i.AIObject = value; // i.Save(); // HttpContext.Current.Cache.Remove("ClientWorkorderReportID"); // } //} #endregion deprecated #endregion #region Localization public static void SetUserLocale() { //for more info see here: http://www.w3.org/International/questions/qa-lang-priorities HttpRequest Request = HttpContext.Current.Request; if (Request.UserLanguages == null) return; string Lang = Request.UserLanguages[0]; if (Lang != null) { if (Lang.Length < 3) Lang = Lang + "-" + Lang.ToUpper(); try { System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(Lang); } catch { ; } } } #region Get localized text strings from cache /// /// Get the localized text from a passed in localizedTextTable fetched /// earlier (for performance when doing multiple items at once) /// /// /// /// static public string LocaleText(string Key, LocalizedTextTable ltt)//case 1543 logpoint { if (string.IsNullOrEmpty(Key)) return ""; return ltt.GetLocalizedText(Key).Replace("&", ""); } /// /// Get the localized text based on the current users language /// from the web app cache /// /// If the cache doesn't contain a localizedtexttable object for the language /// requested, populate it first /// /// (caches for 30 minutes from last access) /// /// /// static public string LocaleText(string Key)//case 1543 logpoint { if (string.IsNullOrEmpty(Key)) return ""; return LocaleTextTable.GetLocalizedText(Key).Replace("&", ""); } //private static LocalizedTextTable mlt = null; static public LocalizedTextTable LocaleTextTable { get { //If it's in the private member then use that //BUGBUG: this will cause a problem if WBI is used for multiple locales //because the static localizedtexttable will be populated once //at app startup and first login, then remain forever afterward until wbi is restarted //However this does perform much better //What to do...? //Probably should add a switch for multilingual sites //if (mlt != null) // return mlt; //try and get it from the cache first if (string.IsNullOrEmpty(((BusinessPrincipal)Thread.CurrentPrincipal).Language)) return null; string language=((BusinessPrincipal)Thread.CurrentPrincipal).Language; LocalizedTextTable l = (LocalizedTextTable)HttpContext.Current.Cache["LT_" + language]; if (l == null) { //Not in cache so load it into cache l = LocalizedTextTable.Load(language); HttpContext.Current.Cache.Insert("LT_" + language, l, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30)); } //mlt = l; return l; } } #endregion #region Localize control and children //Override added after initial design to take the place //of the new localize method that takes a localizedtexttable as a parameter //for performance static public void Localize(System.Web.UI.Control TheControl) { //prefetch the localized text table LocalizedTextTable ltt = LocaleTextTable; Localize(TheControl, ltt); } /// /// iterate through the controls on the passed in control and localize them /// and it as necessary /// /// static public void Localize(System.Web.UI.Control TheControl, LocalizedTextTable ltt) { switch (TheControl.GetType().ToString()) { //Ignore these: case "System.Web.UI.LiteralControl": case "Telerik.Web.UI.GridTableCell": case "System.Web.UI.WebControls.ImageButton": case "System.Web.UI.WebControls.Image": break; case "System.Web.UI.WebControls.Label": { Label c = (Label)TheControl; if (c.Text.StartsWith("LT:")) c.Text = LocaleText(c.Text.Replace("LT:", ""),ltt); } break; case "System.Web.UI.WebControls.CheckBox": { CheckBox c = (CheckBox)TheControl; if (c.Text.StartsWith("LT:")) c.Text = LocaleText(c.Text.Replace("LT:", ""), ltt); } break; case "System.Web.UI.WebControls.Button": { Button c = (Button)TheControl; if (c.Text.StartsWith("LT:")) c.Text = LocaleText(c.Text.Replace("LT:", ""), ltt); } break; case "System.Web.UI.WebControls.LinkButton": { LinkButton c = (LinkButton)TheControl; if (c.Text.StartsWith("LT:")) c.Text = LocaleText(c.Text.Replace("LT:", ""), ltt); } break; case "Telerik.Web.UI.RadMenuItem": { Telerik.Web.UI.RadMenuItem mi = (Telerik.Web.UI.RadMenuItem)TheControl; if (!string.IsNullOrEmpty(mi.Text)) if (mi.Text.StartsWith("LT:")) mi.Text = LocaleText(mi.Text.Replace("LT:", ""), ltt); if (!string.IsNullOrEmpty(mi.ToolTip)) if (mi.ToolTip.StartsWith("LT:")) mi.ToolTip = LocaleText(mi.ToolTip.Replace("LT:", ""), ltt); } break; case "System.Web.UI.WebControls.HyperLink": { HyperLink c = (HyperLink)TheControl; if (c.Text.StartsWith("LT:")) c.Text = LocaleText(c.Text.Replace("LT:", ""), ltt); } break; case "Telerik.Web.UI.RadPanelBar": { LocalizeRadPanelItems(((Telerik.Web.UI.RadPanelBar)TheControl).Items,ltt); } break; case "Telerik.Web.UI.RadTabStrip": { Telerik.Web.UI.RadTabStrip strip = (Telerik.Web.UI.RadTabStrip)TheControl; foreach (Telerik.Web.UI.RadTab t in strip.Tabs) { if (!string.IsNullOrEmpty(t.Text)) t.Text = LocaleText(t.Text.Replace("LT:", ""), ltt); } } break; case "System.Web.UI.Page": //case "ASP.masterpage_master": { //Localize the page title if required Page p = (Page)TheControl; if (p.Title.StartsWith("LT:")) p.Title = LocaleText(p.Title.Replace("LT:", ""), ltt); } break; case "Telerik.Web.UI.RadDateTimePicker": { Telerik.Web.UI.RadDateTimePicker r = (Telerik.Web.UI.RadDateTimePicker)TheControl; r.MaxDate = DateTime.MaxValue; r.MinDate = DateTime.MinValue; r.TimeView.StartTime = new TimeSpan(8, 0, 0); r.TimeView.EndTime = new TimeSpan(21, 15, 0); r.TimeView.Interval = new TimeSpan(0, 15, 0); r.TimeView.HeaderText = ""; r.TimeView.Columns = 4; } break; case "Telerik.Web.UI.RadTimeView": { Telerik.Web.UI.RadTimeView r = (Telerik.Web.UI.RadTimeView)TheControl; r.StartTime = new TimeSpan(8, 0, 0); r.EndTime = new TimeSpan(21, 15, 0); r.Interval = new TimeSpan(0, 15, 0); r.HeaderText = ""; r.Columns = 4; } break; case "Telerik.Web.UI.RadButton"://added for case 1805 { Telerik.Web.UI.RadButton c = (Telerik.Web.UI.RadButton)TheControl; if (c.Text.StartsWith("LT:")) c.Text = LocaleText(c.Text.Replace("LT:", ""), ltt); } break; default: { ; } break; } //Now localize any child controls if contained in it foreach (Control c in TheControl.Controls) { Localize(c, ltt); } } #endregion page #region Localize Radpanel static public void LocalizeRadPanelItems(Telerik.Web.UI.RadPanelItemCollection items, LocalizedTextTable ltt) { foreach (Telerik.Web.UI.RadPanelItem pi in items) { if (pi.Items.Count > 0) { //Recurse me baby one more time... LocalizeRadPanelItems(pi.Items,ltt); } if (!string.IsNullOrEmpty(pi.Text)) pi.Text = LocaleText(pi.Text.Replace("LT:", ""),ltt); } } #endregion #region Localize grid /// /// Localizes an editable grid by transmorphing the current column names found /// by including the object name passed in to make a localized text key /// then setting the column to the key in question /// /// static public void LocalizeEditableGrid(string ObjectName, Telerik.Web.UI.RadGrid Grid) { if (Grid.Columns.Count == 0) return; //Grid.MasterTableView.EditFormSettings.FormTemplate foreach (Telerik.Web.UI.GridColumn c in Grid.Columns) { if (c.Display && !string.IsNullOrEmpty(c.HeaderText)) { //Keep track of original value just in case string sOld = c.HeaderText; //attempt to localize, works for non-editable grid as well //because first checks if column name already contains a localized text key... if (c.HeaderText.StartsWith("LT_"))//Yes then must be a read only grid c.HeaderText = LocaleText(c.HeaderText.Replace("LT_", "").Replace("_", ".")); else c.HeaderText = LocaleText(ObjectName + ".Label." + c.HeaderText); //If the header text still contains part of the locale key //then it wasn't found in the localized text table and should //probably not have been changed as it was likely //pre-localized for some reason already (i.e. COLORCOLUMN) if (c.HeaderText.Contains(".Label.")) c.HeaderText = sOld; } if (c is GridButtonColumn) { GridButtonColumn bc = c as GridButtonColumn; if (bc.CommandName == "Delete") bc.ConfirmText = LocaleText("UI.Label.DeletePrompt"); else { if (!string.IsNullOrEmpty(bc.ConfirmText)) { bc.ConfirmText = StringJavaScriptify(LocaleText(bc.ConfirmText)); } } } } return; } /// /// Localizes existing columns header text in grid /// (generally a read only one) /// /// static public void LocalizeGrid( Telerik.Web.UI.RadGrid Grid) { LocalizeEditableGrid("", Grid); } #endregion localize grid #endregion localization #region Form Rights and security /// /// Use reflection to find the locale key for a biz object /// (if the biz object doesn't have a LocaleKey property it returns /// the name of the biz object instead) /// /// public static string GetBizObjectLocaleKey(object BizObject) { //case 1039 //log.Debug("GetBizObjectLocaleKey("+BizObject.ToString()+")"); try { PropertyInfo pi = BizObject.GetType().GetProperty("LocaleKey"); if (pi == null) return BizObject.ToString(); object propvalue = pi.GetValue(BizObject, null).ToString(); if (propvalue != null) return propvalue.ToString(); else return BizObject.ToString(); } catch { //log.Error("GetBizObjectLocaleKey", e); //MessageBox.Show("GetBizObjectLocaleKey:" + e.Message); return ""; } //return BizObject.ToString(); } public static void Denied(HttpContext c) { c.Response.Clear(); c.Response.StatusCode = 403; c.Response.StatusDescription = "Access Denied"; c.Response.Write("

Access Denied

"); c.Response.End(); } public static void SetAccess(System.Web.UI.Page p, int rights) { if (rights < (int)SecurityLevelTypes.ReadWrite) { SetReadOnly(p); } } /// /// Set the passed in control and all it's children as read only /// /// public static void SetReadOnly(System.Web.UI.Control TheControl) { switch (TheControl.GetType().ToString()) { case "Telerik.Web.UI.RadComboBox": { ((Telerik.Web.UI.RadComboBox)TheControl).Enabled=false; } break; case "Telerik.Web.UI.RadDateTimePicker": { ((Telerik.Web.UI.RadDateTimePicker)TheControl).Enabled = false; } break; case "Telerik.Web.UI.RadDatePicker": { ((Telerik.Web.UI.RadDatePicker)TheControl).Enabled = false; } break; case "System.Web.UI.WebControls.TextBox": { ((TextBox)TheControl).Enabled=false; } break; case "System.Web.UI.WebControls.CheckBox": { ((CheckBox)TheControl).Enabled=false; } break; case "System.Web.UI.WebControls.Button": { ((Button)TheControl).Enabled=false; } break; case "System.Web.UI.WebControls.LinkButton": { LinkButton lb = ((LinkButton)TheControl); lb.Enabled = false; if (lb.ID == "btnNew" || lb.ID == "btnNew2") lb.Visible = false; } break; case "System.Web.UI.WebControls.ImageButton": { ImageButton lb = ((ImageButton)TheControl); lb.Enabled = false; if (lb.ID == "btnNew" || lb.ID == "btnNew2") lb.Visible = false; } break; case "Telerik.Web.UI.RadGrid": { GridSetReadOnly(((RadGrid)TheControl)); } break; case "System.Web.UI.WebControls.RadioButtonList": { ((RadioButtonList)TheControl).Enabled = false; } break; case "GZTW.CustomWebControls.AyColorPicker": { ((GZTW.CustomWebControls.AyColorPicker)TheControl).Enabled = false; } break; case "Telerik.Web.UI.RadMenuItem": { Telerik.Web.UI.RadMenuItem mi = (Telerik.Web.UI.RadMenuItem)TheControl; switch (mi.Value) { case "LT:UI.Command.Delete": mi.Visible = false; break; case "LT:UI.Command.Save": mi.Visible = false; break; case "LT:UI.Command.SaveClose": mi.Visible = false; break; case "Delete": mi.Visible = false; break; case "Save": mi.Visible = false; break; case "SaveClose": mi.Visible = false; break; case "AcceptToNew": mi.Visible = false; break; case "AcceptToExisting": mi.Visible = false; break; case "Reject": mi.Visible = false; break; //case 1052 case "REPLY": mi.Visible = false; break; case "FORWARD": mi.Visible = false; break; } } break; } //Now localize any child controls if contained in it foreach (Control c in TheControl.Controls) { SetReadOnly(c); } } //case 1972 public static void SetDeletable(System.Web.UI.Page p, RootObjectTypes rot) { if (AyaBizUtils.Right(rot) < (int)SecurityLevelTypes.ReadWriteDelete) { Control c = p.Master.FindControl("RadMenu1");//this is the name of the delete menu item id if (c != null) { Telerik.Web.UI.RadMenu rm = (Telerik.Web.UI.RadMenu)c; rm.Items.FindItemByValue("LT:UI.Command.Delete").Visible = false; } } } #endregion #region broken rule localizing and cracking /// /// Takes a broken rule text and xforms it into the localized version /// applying all formatting as required /// /// /// private static string BrokenRuleLocalizer(string BrokenRuleString) { if (BrokenRuleString == null) return null; if (BrokenRuleString == "") return ""; //Localize and format the string //this string comes to us as a set of comma delimited localized text key strings //i.e. "Error.Object.RequiredFieldEmpty,Client.Label.Name" //the first key translates often to a string with format characters in it such as //"{0} is not a valid value for the {1} field //The second and following keys are the values to be inserted in those format positions //This code makes an object array of all the second and following localized text strings //and then passes that to the string.format function along with the first string string[] sarray = BrokenRuleString.Split(','); object[] sitems = new object[sarray.GetLength(0) - 1]; for (int x = 1; x < sarray.GetLength(0); x++) { sitems[x - 1] = LocaleText(sarray[x]); } return string.Format(LocaleText(sarray[0]), sitems); } /// /// cracks a broken rule collection into separate errors /// then processes them /// /// A brokenrulestext property of a biz object contains one or more /// broken rules as in the brokenrulelocalizer method above, but /// separated by pipe characters | /// /// /// public static string BrokenRuleCollectionLocalizer(string BrokenRuleCollection) { StringBuilder sb = new StringBuilder(); string[] sarray = BrokenRuleCollection.Split('|'); foreach (string s in sarray) { sb.Append(BrokenRuleLocalizer(s)); sb.Append("\r\n"); } return sb.ToString(); } #endregion #region Reporting /// /// Fill an Telerik RadMenuItem panel item /// with all reports for given key /// /// static public void ReportFillList(Telerik.Web.UI.RadMenuItem topmenuitem, string ReportKeySummary, string ReportKeyDetailed) { topmenuitem.Items.Clear(); topmenuitem.PostBack = false; ReportPickList rpl = ReportPickList.GetList(ReportKeySummary, ReportKeyDetailed,true); foreach (ReportPickList.ReportPickListInfo i in rpl) { if (i.Active) { Telerik.Web.UI.RadMenuItem li = new Telerik.Web.UI.RadMenuItem(); li.Text = i.Name; if (i.IsSummary) li.Value = "PRINTSUMMARY," + i.ID.ToString(); else li.Value = "PRINTDETAILED," + i.ID.ToString(); topmenuitem.Items.Add(li); } } } /// /// Put report data in a 2 minute cache under /// current user id and report key /// and return url to report page /// for redirection from caller /// /// Key to retrieve data from cache /// data to go in cache or null if it's already there static public void Report(Page p, string ReportID, string Key, object Data, string SignableWoID) { if (Data != null) p.Cache.Insert(CurrentUserID.ToString() + Key, Data, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(2)); string toUrl = "ReportView.aspx?rpt=" + ReportID + "&src=" + CurrentUserID.ToString() + Key + (!string.IsNullOrEmpty(SignableWoID)?"&sigwo="+SignableWoID:""); //TODO: Likely this is going to cause problems for some with popup blockers //It's possible we might need to add an alternative choice to a regular response redirect p.Response.Write(""); } /// /// Overload for non signable workorder reports /// /// /// /// /// static public void Report(Page p, string ReportID, string Key, object Data) { Report(p, ReportID, Key, Data, ""); } #endregion reporting #region List retrievers for combo boxes and value lists in grid #region NonBizLists /// /// Since there is a limited set of these types of items there is no populate and init separately, /// instead it fills with all available items and selects automatically /// /// /// /// static public void ComboInitializeNonBiz(Telerik.Web.UI.RadComboBox cb, string EnumListName, object oSelected) { cb.DataSource = GetDataNonBiz(EnumListName); cb.DataValueField = "Value"; cb.DataTextField = "Display"; cb.DataBind(); if (oSelected != null) cb.SelectedValue = oSelected.ToString(); } public static string GetNonBizName(string EnumListName, int i) { DataTable dt = GetDataNonBiz(EnumListName); foreach (DataRow dr in dt.Rows) { if (int.Parse(dr["Value"].ToString()) == i) return dr["Display"].ToString(); } return " "; } public static DataTable GetDataNonBiz(string EnumListName) { DataTable dt = new DataTable(); dt.Columns.Add("Display"); dt.Columns.Add("Value"); switch (EnumListName) { case "QuoteStatus": { AddNVRow(dt, (int)WorkorderQuoteStatusTypes.Awarded, LocaleText("WorkorderQuoteStatusTypes.Label.Awarded")); AddNVRow(dt, (int)WorkorderQuoteStatusTypes.InProgress, LocaleText("WorkorderQuoteStatusTypes.Label.InProgress")); AddNVRow(dt, (int)WorkorderQuoteStatusTypes.NotAwarded, LocaleText("WorkorderQuoteStatusTypes.Label.NotAwarded")); AddNVRow(dt, (int)WorkorderQuoteStatusTypes.Submitted, LocaleText("WorkorderQuoteStatusTypes.Label.Submitted")); //case 1556 AddNVRow(dt, (int)WorkorderQuoteStatusTypes.New, LocaleText("WorkorderQuoteStatusTypes.Label.New")); AddNVRow(dt, (int)WorkorderQuoteStatusTypes.NotAwarded2, LocaleText("WorkorderQuoteStatusTypes.Label.NotAwarded2")); } break; case "ClientServiceRequestStatus": { AddNVRow(dt, (int)ClientServiceRequestStatus.Accepted, LocaleText("ClientServiceRequestStatus.Accepted")); AddNVRow(dt, (int)ClientServiceRequestStatus.Declined, LocaleText("ClientServiceRequestStatus.Declined")); AddNVRow(dt, (int)ClientServiceRequestStatus.Open, LocaleText("ClientServiceRequestStatus.Open")); AddNVRow(dt, (int)ClientServiceRequestStatus.Closed, LocaleText("ClientServiceRequestStatus.Closed")); } break; case "ClientServiceRequestPriority": { AddNVRow(dt, (int)ClientServiceRequestPriority.NotUrgent, LocaleText("ClientServiceRequestPriority.NotUrgent")); AddNVRow(dt, (int)ClientServiceRequestPriority.ASAP, LocaleText("ClientServiceRequestPriority.ASAP")); AddNVRow(dt, (int)ClientServiceRequestPriority.Emergency, LocaleText("ClientServiceRequestPriority.Emergency")); } break; case "UnitsOfTime": { AddNVRow(dt, (int)AyaUnitsOfTime.Minutes, Util.LocaleText("UI.Label.TimeSpan.Minutes")); AddNVRow(dt, (int)AyaUnitsOfTime.Hours, Util.LocaleText("UI.Label.TimeSpan.Hours")); AddNVRow(dt, (int)AyaUnitsOfTime.Days, Util.LocaleText("UI.Label.TimeSpan.Days")); //Weeks are not supported because the concept of Week is very "weak" globally :) AddNVRow(dt, (int)AyaUnitsOfTime.Months, Util.LocaleText("UI.Label.TimeSpan.Months")); AddNVRow(dt, (int)AyaUnitsOfTime.Years, Util.LocaleText("UI.Label.TimeSpan.Years")); } break; case "DaysOfWeek": { AddNVRow(dt, (int)AyaDayOfWeek.AnyDayOfWeek, Util.LocaleText("UI.Label.Day.Any")); AddNVRow(dt, (int)AyaDayOfWeek.Monday, Util.LocaleText("UI.Label.Day.Monday")); AddNVRow(dt, (int)AyaDayOfWeek.Tuesday, Util.LocaleText("UI.Label.Day.Tuesday")); AddNVRow(dt, (int)AyaDayOfWeek.Wednesday, Util.LocaleText("UI.Label.Day.Wednesday")); AddNVRow(dt, (int)AyaDayOfWeek.Thursday, Util.LocaleText("UI.Label.Day.Thursday")); AddNVRow(dt, (int)AyaDayOfWeek.Friday, Util.LocaleText("UI.Label.Day.Friday")); AddNVRow(dt, (int)AyaDayOfWeek.Saturday, Util.LocaleText("UI.Label.Day.Saturday")); AddNVRow(dt, (int)AyaDayOfWeek.Sunday, Util.LocaleText("UI.Label.Day.Sunday")); } break; case "VendorTypes": { AddNVRow(dt, -1, "-");//Case 344 AddNVRow(dt, (int)VendorTypes.Manufacturer, Util.LocaleText("Vendor.Label.VendorType.Manufacturer")); AddNVRow(dt, (int)VendorTypes.Shipper, Util.LocaleText("Vendor.Label.VendorType.Shipper")); AddNVRow(dt, (int)VendorTypes.SubContractor, Util.LocaleText("Vendor.Label.VendorType.SubContractor")); AddNVRow(dt, (int)VendorTypes.ThirdPartyRepair, Util.LocaleText("Vendor.Label.VendorType.ThirdPartyRepair")); AddNVRow(dt, (int)VendorTypes.Wholesaler, Util.LocaleText("Vendor.Label.VendorType.Wholesaler")); } break; case "PurchaseOrderStatus": { AddNVRow(dt, -1, "-");//Case 344 AddNVRow(dt, (int)PurchaseOrderStatus.ClosedFullReceived, Util.LocaleText("PurchaseOrder.Label.PurchaseOrderStatus.ClosedFullReceived")); AddNVRow(dt, (int)PurchaseOrderStatus.ClosedNoneReceived, Util.LocaleText("PurchaseOrder.Label.PurchaseOrderStatus.ClosedNoneReceived")); AddNVRow(dt, (int)PurchaseOrderStatus.ClosedPartialReceived, Util.LocaleText("PurchaseOrder.Label.PurchaseOrderStatus.ClosedPartialReceived")); AddNVRow(dt, (int)PurchaseOrderStatus.OpenNotYetOrdered, Util.LocaleText("PurchaseOrder.Label.PurchaseOrderStatus.OpenNotYetOrdered")); AddNVRow(dt, (int)PurchaseOrderStatus.OpenOrdered, Util.LocaleText("PurchaseOrder.Label.PurchaseOrderStatus.OpenOrdered")); AddNVRow(dt, (int)PurchaseOrderStatus.OpenPartialReceived, Util.LocaleText("PurchaseOrder.Label.PurchaseOrderStatus.OpenPartialReceived")); } break; case "WorkorderItemTaskCompletionType": { AddNVRow(dt, (int)WorkorderItemTaskCompletionTypes.Complete, LocaleText("WorkorderItemTask.Label.CompletionType.Complete")); AddNVRow(dt, (int)WorkorderItemTaskCompletionTypes.Incomplete, LocaleText("WorkorderItemTask.Label.CompletionType.Incomplete")); AddNVRow(dt, (int)WorkorderItemTaskCompletionTypes.NotApplicable, LocaleText("WorkorderItemTask.Label.CompletionType.NotApplicable")); } break; case "ContactPhoneTypes": { AddNVRow(dt, (int)ContactPhoneTypes.Unset, "-");//Case 344 AddNVRow(dt, (int)ContactPhoneTypes.Business, LocaleText("ContactPhone.Label.ContactPhoneType.Business")); AddNVRow(dt, (int)ContactPhoneTypes.Mobile, LocaleText("ContactPhone.Label.ContactPhoneType.Mobile")); AddNVRow(dt, (int)ContactPhoneTypes.Fax, LocaleText("ContactPhone.Label.ContactPhoneType.Fax")); AddNVRow(dt, (int)ContactPhoneTypes.Pager, LocaleText("ContactPhone.Label.ContactPhoneType.Pager")); AddNVRow(dt, (int)ContactPhoneTypes.Home, LocaleText("ContactPhone.Label.ContactPhoneType.Home")); } break; case "UserTypes": { AddNVRow(dt, (int)UserTypes.Administrator, LocaleText("UserTypes.Label.Administrator")); AddNVRow(dt, (int)UserTypes.Schedulable, LocaleText("UserTypes.Label.Schedulable")); AddNVRow(dt, (int)UserTypes.NonSchedulable, LocaleText("UserTypes.Label.NonSchedulable")); AddNVRow(dt, (int)UserTypes.Client, LocaleText("UserTypes.Label.Client")); AddNVRow(dt, (int)UserTypes.HeadOffice, LocaleText("UserTypes.Label.HeadOffice")); AddNVRow(dt, (int)UserTypes.Utility, LocaleText("UserTypes.Label.UTILITY")); } break; //Case 513 case "LoanItemRates": { AddNVRow(dt, (int)LoanItemRates.None, LocaleText("LoanItem.Label.RateNone")); AddNVRow(dt, (int)LoanItemRates.Hours, LocaleText("LoanItem.Label.RateHour")); AddNVRow(dt, (int)LoanItemRates.HalfDays, LocaleText("LoanItem.Label.RateHalfDay")); AddNVRow(dt, (int)LoanItemRates.Days, LocaleText("LoanItem.Label.RateDay")); AddNVRow(dt, (int)LoanItemRates.Weeks, LocaleText("LoanItem.Label.RateWeek")); AddNVRow(dt, (int)LoanItemRates.Months, LocaleText("LoanItem.Label.RateMonth")); AddNVRow(dt, (int)LoanItemRates.Years, LocaleText("LoanItem.Label.RateYear")); } break; } return dt; } #endregion nonbizlists #region BizList #region Telerik combo populate and retrieve wrappers /// /// Get Guid from selected item in combo passed in /// /// /// static public Guid ComboValue(Telerik.Web.UI.RadComboBox cb) { if (cb == null) return Guid.Empty; if (string.IsNullOrEmpty(cb.SelectedValue)) return Guid.Empty; return new Guid(cb.SelectedValue); } /// /// Get Guid from selected item in dropdownlist passed in /// /// /// static public Guid ComboValue(DropDownList cb) { if (cb == null) return Guid.Empty; if (string.IsNullOrEmpty(cb.SelectedValue)) return Guid.Empty; return new Guid(cb.SelectedValue); } //static public ComboValue(RadComboBox cb) //{ // if (cb == null) return Guid.Empty; // if (string.IsNullOrEmpty(cb.Value)) return Guid.Empty; // return new Guid(cb.Value); //} /// /// Populate a combo box either with an initial value only or /// all active items plus selected initial value (active or inactive) /// from a business object collection list /// /// Uses a generic fetch from db for object names and for defined picklists /// uses the pick list collection object instead /// /// Either a defined pick list name or an object name /// /// /// static public void ComboPopulateBizList(string PickList, Telerik.Web.UI.RadComboBox cb, bool ActiveOnly, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs e, bool Region) { ComboPopulateBizList(PickList, cb, ActiveOnly, Guid.Empty, null, e, Region); } //Added for Case 307 /// /// Kind of an overload for above that includes selection of selected ID /// to save typing /// /// /// /// static public void ComboPopulateAndInitializeBizList(Telerik.Web.UI.RadComboBox cb, string PickList, Guid SelectedID, bool Region) { ComboPopulateBizList(PickList, cb, false, null,Region); cb.SelectedValue = SelectedID.ToString(); } /// /// Populate a combo with one item that is initially selected /// /// /// /// static public void ComboInitialize(Telerik.Web.UI.RadComboBox cb, string ObjectName, Guid SelectedID) { cb.Items.Add(new Telerik.Web.UI.RadComboBoxItem(GetBizObjectName(ObjectName, SelectedID), SelectedID.ToString())); cb.SelectedValue = SelectedID.ToString(); } /// /// Used for combo box initialization /// and for label intialization in grid /// columns that contain a combo but are /// not in edit mode /// /// /// /// /// static public string GetBizObjectName(string ObjectName, Guid SelectedID) { if (SelectedID == Guid.Empty) return "-";//Case 344 switch (ObjectName) { case "UserPickList": case "User": { UserPickList upl = UserPickList.GetListOfOneSpecificUser(SelectedID); if (upl.Count == 0) return ""; return upl[0].Name; } case "Part": { PartPickList pl = PartPickList.GetOnePart(SelectedID); if (pl.Count == 0) return ""; return pl[0].DisplayName(GlobalSettings.DefaultPartDisplayFormat); } case "PartSerial": { NameFetcher nf = NameFetcher.GetItem(ObjectName, "SerialNumber", SelectedID); return nf.RecordName; } case "LoanItem": { LoanItemPickList pl = LoanItemPickList.GetOneLoanItem(SelectedID); if (pl.Count == 0) return ""; return pl[0].Name + " " + pl[0].Serial; } case "Unit": { return UnitNameFetcher.GetUnitNameFromUnitID(SelectedID); } case "UnitModel": { UnitModelPickList pl = UnitModelPickList.GetListOfOneSpecificUnitModel(SelectedID); if (pl.Count == 0) return ""; return pl[0].Name; } default: { NameFetcher nf = NameFetcher.GetItem(ObjectName, "Name", SelectedID); return nf.RecordName; } } } /// /// Convenience overload /// /// /// /// static public string GetBizObjectName(string ObjectName, string SelectedID) { return GetBizObjectName(ObjectName, new Guid(SelectedID)); } /// /// Override for backward compatibility before ID2 was added /// /// /// /// /// /// /// static public void ComboPopulateBizList(string PickList, Telerik.Web.UI.RadComboBox cb, bool ActiveOnly, Guid ID1, List SelectedIDList, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs e, bool Regional) { ComboPopulateBizList(PickList, cb, ActiveOnly, ID1, Guid.Empty, SelectedIDList, e, Regional); } /// /// /// /// /// /// /// /// /// static public void ComboPopulateBizList(string PickList, Telerik.Web.UI.RadComboBox cb, bool ActiveOnly, Guid ID1, Guid ID2, List SelectedIDList, Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs e, bool Regional) { //add a list of stuff DataTable dt = GetDataBiz(PickList, Guid.Empty, ActiveOnly, ID1, ID2, SelectedIDList, Regional); //check if the requested event args are null //if they are null then it means this is being called to load everything initially //if they are not null then it means this is being called to add to an existing list //so do the following... if (e != null) { if (e.NumberOfItems >= dt.Rows.Count) return; DataRow RemoveRow = null; foreach (DataRow dr in dt.Rows) { if (dr["Value"].ToString() == e.Value) { RemoveRow = dr; break; } } if (RemoveRow != null) dt.Rows.Remove(RemoveRow); } DataView dv = dt.DefaultView; dv.Sort = "Display"; cb.DataSource = dv; cb.DataValueField = "Value"; cb.DataTextField = "Display"; cb.DataBind(); } #endregion Telerik combo wrappers /// /// overload for original method without ID2 /// /// /// /// /// /// /// public static DataTable GetDataBiz(string PickList, Guid SelectedID, bool ActiveOnly, Guid ID1, List SelectedIDList, bool Regional) { return GetDataBiz(PickList, SelectedID, ActiveOnly, ID1, Guid.Empty, SelectedIDList, Regional); } /// /// /// /// /// /// /// /// /// public static DataTable GetDataBiz(string PickList, Guid SelectedID, bool ActiveOnly, Guid ID1, Guid ID2, List SelectedIDList, bool Regional) { DataTable dt = new DataTable(); dt.Columns.Add("Display"); dt.Columns.Add("Value", typeof(Guid)); dt.Columns.Add("Color", typeof(int)); //add an initial blank row for Guid.empty DataRow drBlank = dt.NewRow(); drBlank["Display"] = "-";//Case 344 drBlank["Value"] = Guid.Empty; dt.Rows.Add(drBlank); switch (PickList) { case "UserPickListScheduleable": { #region ScheduleableUserNameDisplayFormats fmt = GlobalSettings.DefaultScheduleableUserNameDisplayFormat; UserListScheduleable UList = UserListScheduleable.GetList(); foreach (UserListScheduleable.UserListScheduleableInfo ui in UList) { if (ui.Active) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name(fmt); dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID || !ActiveOnly)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name(fmt); dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "UserPickList": { #region UserPickList UList = UserPickList.GetList(Regional); foreach (UserPickList.UserPickListInfo ui in UList) { if (ui.Active) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID || !ActiveOnly)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "UserPickListStaffOnly": {//used for quote prepared by combo #region UserPickList UList = UserPickList.GetList(Regional); foreach (UserPickList.UserPickListInfo ui in UList) { if (ui.Active && ui.Type != UserTypes.Utility && ui.Type != UserTypes.Client && ui.Type != UserTypes.HeadOffice) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else if (ui.ID == SelectedID || !ActiveOnly) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } #endregion } break; case "ScheduleableUserGroupPickList": { #region ScheduleableUserGroupPickList UList = ScheduleableUserGroupPickList.GetList(); foreach (ScheduleableUserGroupPickList.ScheduleableUserGroupPickListInfo ui in UList) { if (ui.Active) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID || !ActiveOnly)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "ClientUnitList": { #region UnitPickList UList = UnitPickList.GetListByClient(ID1); Global g = GlobalSettings; foreach (UnitPickList.UnitPickListInfo ui in UList) { if (ui.Active == true) { DataRow dr = dt.NewRow(); dr["Display"] = ui.UnitName(g.DefaultUnitNameDisplayFormat); dr["Value"] = ui.ID; dt.Rows.Add(dr); } else if (SelectedIDList != null) { //is the current, inactive item selected in the workorder in any woitem? foreach (Guid id in SelectedIDList) { if (id == ui.ID) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.UnitName(g.DefaultUnitNameDisplayFormat); dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } } //Now manually add items that are selected on the workorder but have changed owners and //wouldn't have been picked up in the above if (SelectedIDList != null) { foreach (Guid id in SelectedIDList) { if (!UList.Contains(id)) { //manually add it, it's selected on the wo, but //it's not in the client unit pick list DataRow dr = dt.NewRow(); dr["Display"] = "*" + UnitNameFetcher.GetUnitNameFromUnitID(id) + " [" + GZTW.AyaNova.BLL.Unit.GetOwnerNameForUnit(id) + "]"; dr["Value"] = id; dt.Rows.Add(dr); } } } #endregion } break; case "PriorityPickList": { #region PriorityPickList UList = PriorityPickList.GetList(); foreach (PriorityPickList.PriorityPickListInfo ui in UList) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dr["Color"] = ui.Color; dt.Rows.Add(dr); } #endregion } break; case "TaxCodeList": { #region TaxCodeList UList = TaxCodeList.GetList(); foreach (TaxCodeList.TaxCodeListInfo ui in UList) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } #endregion } break; case "LaborRateList": { #region //ID1 contains a contract ID or guid.empty if no contract //SelectedIDList contains an arraylist of selected ID's or is null RatePickList rates; if (ID1 == Guid.Empty) rates = RatePickList.GetList(true); else rates = RatePickList.GetListWithContract(ID1); foreach (RatePickList.RatePickListInfo ui in rates) { if (ui.RateType != RateTypes.Service) continue; //Case 186 //Selectable and active are same thing with no contract //with a contract then selectable is active and then if contract rates only is //set accordingly if (/*ui.Active*/ui.Selectable == true) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { //Case 186 currently there are no calls to this list that are not activeonly //so just removed it since it would conflict with contract rates System.Diagnostics.Debug.Assert(ActiveOnly, "Util::GetDataBiz - LaborRateList called with !ActiveOnly"); if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID /*|| !ActiveOnly*/)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "TravelRateList": { #region //ID1 contains a contract ID or guid.empty if no contract //SelectedIDList contains an arraylist of selected ID's or is null RatePickList rates; if (ID1 == Guid.Empty) rates = RatePickList.GetList(true); else rates = RatePickList.GetListWithContract(ID1); foreach (RatePickList.RatePickListInfo ui in rates) { if (ui.RateType != RateTypes.Travel) continue; if (ui.Active == true) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID || !ActiveOnly)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "PartPickList": { #region PartPickList UList = PartPickList.GetAllParts(); Global g = GlobalSettings; foreach (PartPickList.PartPickListInfo ui in UList) { if (ui.Active) { DataRow dr = dt.NewRow(); dr["Display"] = ui.DisplayName(g.DefaultPartDisplayFormat); dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID || !ActiveOnly)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.DisplayName(g.DefaultPartDisplayFormat); dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "PartWarehousePickList": { #region //Case 640 PartWarehousePickList UList = PartWarehousePickList.GetActiveOnlyListWithExceptions(SelectedIDList); foreach (PartWarehousePickList.PartWarehousePickListInfo ui in UList) { if (ui.Active) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } #endregion } break; case "PartSerialPickList": { #region //ID1 contains part ID and ID2 contains warehouse ID (optional) PartSerialPickList serialz; serialz = PartSerialPickList.GetList(ID1, ID2); foreach (PartSerialPickList.PartSerialPickListInfo ui in serialz) { DataRow dr = dt.NewRow(); dr["Display"] = ui.SerialNumber; dr["Value"] = ui.ID; dt.Rows.Add(dr); } #endregion } break; case "PartSerialPickListForWorkorder": { #region //special version to ensure no sn's appear in the list that are //already selected on this workorder PartSerialPickList serialz; serialz = PartSerialPickList.GetList(ID1, ID2); foreach (PartSerialPickList.PartSerialPickListInfo ui in serialz) { //Ensure that we're only adding serials that are not //already selected on teh workorder if (!SelectedIDList.Contains(ui.ID)) { DataRow dr = dt.NewRow(); dr["Display"] = ui.SerialNumber; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } #endregion } break; case "LoanItemPickList": { #region LoanItemPickList UList = LoanItemPickList.GetList(Regional); foreach (LoanItemPickList.LoanItemPickListInfo ui in UList) { if (ui.Active) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name + " " + ui.Serial; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID || !ActiveOnly)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name + " " + ui.Serial; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "UnitList": { #region UnitPickList UList = UnitPickList.GetListOfAll(); Global g = GlobalSettings; foreach (UnitPickList.UnitPickListInfo ui in UList) { if (ui.Active == true) { DataRow dr = dt.NewRow(); dr["Display"] = ui.UnitName(g.DefaultUnitNameDisplayFormat); dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if (ui.ID == SelectedID || !ActiveOnly) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.UnitName(g.DefaultUnitNameDisplayFormat); dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "UnitModelList": { #region UnitModelPickList UList = UnitModelPickList.GetList(); foreach (UnitModelPickList.UnitModelPickListInfo ui in UList) { if (ui.Active) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID || !ActiveOnly)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "Vendors:Shipper": { #region VendorPickList UList = VendorPickList.GetList(VendorTypes.Shipper); foreach (VendorPickList.VendorPickListInfo ui in UList) { if (ui.Active) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if (ui.ID == SelectedID || !ActiveOnly) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "Vendors:NonShipper": { #region VendorPickList UList = VendorPickList.GetList(); foreach (VendorPickList.VendorPickListInfo ui in UList) { if (ui.VendorType != VendorTypes.Shipper) { if (ui.Active) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if (ui.ID == SelectedID || !ActiveOnly) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } } #endregion } break; //fogbugz case 11 case "WorkorderStatusList": { #region WorkorderStatusPickList statuses = WorkorderStatusPickList.GetList(); foreach (WorkorderStatusPickList.WorkorderStatusPickListInfo ui in statuses) { if (ui.Active == true) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID /*|| !ActiveOnly*/)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; case "WorkorderItemPriorityList"://case 1121 { #region PriorityPickList ppl = PriorityPickList.GetList(); foreach (PriorityPickList.PriorityPickListInfo ui in ppl) { if (ui.Active == true) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dr["Color"] = ui.Color; dt.Rows.Add(dr); } else { if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID /*|| !ActiveOnly*/)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dr["Color"] = ui.Color; dt.Rows.Add(dr); } } } #endregion } break; case "WorkorderItemTypeList"://case 1121 { #region WorkorderItemTypePickList witpl = WorkorderItemTypePickList.GetList(); foreach (WorkorderItemTypePickList.WorkorderItemTypePickListInfo ui in witpl) { if (ui.Active == true) { DataRow dr = dt.NewRow(); dr["Display"] = ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } else { if ((SelectedIDList != null && SelectedIDList.Contains(ui.ID)) || (ui.ID == SelectedID /*|| !ActiveOnly*/)) { DataRow dr = dt.NewRow(); dr["Display"] = "*" + ui.Name; dr["Value"] = ui.ID; dt.Rows.Add(dr); } } } #endregion } break; default://generic list PickList contains biz object name { #region GenericNVList l = GenericNVList.GetList("a" + PickList, "aID", "aName", true, ActiveOnly,Regional); //ensure that non-active record //still appears in list bool bSelectedRecordIsInList = false; foreach (DictionaryEntry d in l.BindableList) { Guid gValue = new Guid(d.Key.ToString()); DataRow dr = dt.NewRow(); dr["Display"] = d.Value.ToString(); dr["Value"] = gValue; dt.Rows.Add(dr); if (gValue == SelectedID) bSelectedRecordIsInList = true; } if (ActiveOnly && SelectedID != Guid.Empty && !bSelectedRecordIsInList) { //retrieve manually non-active item try { NameFetcher nf = NameFetcher.GetItem(PickList, "Name", SelectedID); DataRow dr = dt.NewRow(); dr["Display"] = "*" + nf.RecordName; dr["Value"] = SelectedID; dt.Rows.Add(dr); } catch { } } #endregion } break; } return dt; } #endregion BizList static private void AddNVRow(DataTable dt, object value, object display) { DataRow dr = dt.NewRow(); dr["Display"] = display.ToString(); dr["Value"] = value; dt.Rows.Add(dr); } #endregion List retrievers #region Grid helper methods public static bool ObjectCanOpenInWBI(string localekey) { //Case 207 openable objects in WBI //also change here needs to go into //MainGrid->GridItemDataBound switch (localekey) { case "LT_O_Workorder": case "LT_O_Client": case "LT_O_HeadOffice": case "LT_O_Project": case "LT_O_ClientNote": case "LT_O_ClientServiceRequest": case "LT_O_LoanItem": case "LT_LoanItem_Label_Name": case "LT_LoanItem_Label_Serial": case "LT_O_Memo": case "LT_O_ScheduleMarker": case "LT_O_ServiceBank": case "LT_O_Unit": case "LT_Unit_Label_Serial": case "LT_O_UnitModel": //case 207 additional items case "LT_Workorder_Label_FromQuoteID": case "LT_Workorder_Label_FromPMID": case "LT_O_WorkorderQuote": case "LT_O_WorkorderPreventiveMaintenance": case "LT_O_Contract": case "LT_O_Part": case "LT_WorkorderItemPart_Label_PartID": //case 744 case "LT_Memo_Label_Subject": //case 758 case "LT_SearchResult_Label_Source": //case 898 case "LT_WorkorderItemLoan_Label_LoanItem": //case 1417 case "LT_O_WikiPage": return true; default: return false; } } /// /// Check for broken rule, if so then cancel /// update and display. /// /// /// public static void GridCheckForBrokenRule(CSLA.BusinessBase o, GridCommandEventArgs e) { if (o.IsDirty && !o.IsSavable) { GridItem d = (GridItem)e.Item; e.Canceled = true; foreach (TableCell cc in d.Cells) { cc.ToolTip = BrokenRuleCollectionLocalizer(o.BrokenRulesText); cc.BorderStyle = BorderStyle.Dotted; cc.BorderWidth = System.Web.UI.WebControls.Unit.Pixel(2); cc.BorderColor = System.Drawing.Color.Red; } } } public static Hashtable GridExtractValues(GridItem i) { GridEditableItem editedItem = i as GridEditableItem; //Update new values Hashtable newValues = new Hashtable(); //The GridTableView will fill the values from all editable columns in the hash i.OwnerTableView.ExtractValuesFromItem(newValues, editedItem); return newValues; } public static void GridSetReadOnly(Telerik.Web.UI.RadGrid g) { if (g.MasterTableView.Columns.FindByUniqueNameSafe("EditColumn") != null) { g.MasterTableView.Columns.FindByUniqueNameSafe("EditColumn").Visible = false; } if (g.MasterTableView.Columns.FindByUniqueNameSafe("DeleteColumn") != null) { g.MasterTableView.Columns.FindByUniqueNameSafe("DeleteColumn").Visible = false; } g.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.None; } //case 1429 public static void GridSetNoDelete(Telerik.Web.UI.RadGrid g) { if (g.MasterTableView.Columns.FindByUniqueNameSafe("DeleteColumn") != null) { g.MasterTableView.Columns.FindByUniqueNameSafe("DeleteColumn").Visible = false; } } public static void GridInitEditable(string GridKey, Telerik.Web.UI.RadGrid g, string bizObjectName) { GridSetLayout(GridKey, g); LocalizeEditableGrid(bizObjectName, g); //g.EditItemStyle.CssClass = "AYEditRow"; // g.MasterTableView.EditFormSettings.FormMainTableStyle.CssClass = "AYEditForm"; } /// /// /// /// /// public static void GridSetLayout(string GridKey, Telerik.Web.UI.RadGrid g) { if (gGridLastViews.Contains(GridKey)) { //First hide all the columns foreach (GridColumn gc in g.MasterTableView.Columns) { //If the column is preset as display=false then //we don't want to mess with it so only set invisible (do not render) //columns that are not set to display=false; if(gc.Display) gc.Visible = false; } g.Width = System.Web.UI.WebControls.Unit.Percentage(100); //Get the total width of all visible columns so that //we can set their width by percentage below //this is because the widths come from a winform app and //so the only way to replicate that is by relative percentage //double nTotalRowWidth = 0; //foreach (DataRow TabRow in Util.gGridLastViews[GridKey].ViewOrder.Rows) //{ // nTotalRowWidth += System.Convert.ToDouble(TabRow["WIDTH"]); //} GridColumn c = null; int nPosition = 0; //Set the order for the first two command columns if (g.MasterTableView.Columns.FindByUniqueNameSafe("SelectColumn") != null) { c = g.MasterTableView.Columns.FindByUniqueNameSafe("SelectColumn"); c.Visible = true; c.OrderIndex = nPosition++; c.HeaderStyle.Width = System.Web.UI.WebControls.Unit.Pixel(24); //24=16 for image + 8 for inter column padding so text doesn't run together } if (g.MasterTableView.Columns.FindByUniqueNameSafe("EditColumn") != null) { c = g.MasterTableView.Columns.FindByUniqueNameSafe("EditColumn"); c.Visible = true; c.OrderIndex = nPosition++; c.HeaderStyle.Width = System.Web.UI.WebControls.Unit.Pixel(24); //24=16 for image + 8 for inter column padding so text doesn't run together } //show the columns that are in the order collection //And set their properties such as width etc foreach (DataRow TabRow in Util.gGridLastViews[GridKey].ViewOrder.Rows) { string columnName = TabRow["UI"].ToString(); c = g.MasterTableView.Columns.FindByUniqueNameSafe(columnName); if (c != null) { //c = g.MasterTableView.Columns.FindByUniqueName(columnName); c.Visible = true; c.OrderIndex = nPosition++; //double nPercentageWidth = (System.Convert.ToDouble(TabRow["WIDTH"]) / nTotalRowWidth) * 100; ////Tested against winform on same screen dimensions a factor ////of 15% smaller for each column seems to be ideal to get same ////amount of text displayed in each column and account for ////command columns //nPercentageWidth = nPercentageWidth * .98; //nPercentageWidth = (int)nPercentageWidth; //c.HeaderStyle.Width = System.Web.UI.WebControls.Unit.Percentage(nPercentageWidth); } } //Delete column last (unless there is a bank column) if (g.Columns.FindByUniqueNameSafe("DeleteColumn") != null) { c = g.MasterTableView.Columns.FindByUniqueNameSafe("DeleteColumn"); c.Visible = true; c.OrderIndex = nPosition++; c.HeaderStyle.Width = System.Web.UI.WebControls.Unit.Pixel(24); //24=16 for image + 8 for inter column padding so text doesn't run together } //Bank column if (g.Columns.FindByUniqueNameSafe("BankColumn") != null) { c = g.MasterTableView.Columns.FindByUniqueNameSafe("BankColumn"); c.Visible = true; c.OrderIndex = nPosition++; c.HeaderStyle.Width = System.Web.UI.WebControls.Unit.Pixel(24); //24=16 for image + 8 for inter column padding so text doesn't run together } //Order index must be set even for columns that are not covered above //otherwise no columns will appear in correct order //this is a telerik bug and should be reported foreach (GridColumn y in g.MasterTableView.Columns) { if (y.OrderIndex == -1) y.OrderIndex = nPosition++; } } } /// /// /// /// /// /// public static void GridTCreateColumns(object obj, Telerik.Web.UI.RadGrid g, params string[] VisibleColumns) { List vizlist = new List(VisibleColumns); //Inspect the public properties in the business collection object //find the businesbase derived object //iterate it's properties and generate grid columns accordingly foreach (PropertyInfo fi in obj.GetType().GetProperties()) { if (fi.PropertyType.IsPublic && fi.PropertyType.BaseType == typeof(CSLA.BusinessBase)) { foreach (PropertyInfo pi in fi.PropertyType.GetProperties()) { if (vizlist.Contains(pi.Name)) { Telerik.Web.UI.GridBoundColumn c = new Telerik.Web.UI.GridBoundColumn(); c.HeaderText = pi.Name; c.DataField = pi.Name; if (pi.PropertyType == typeof(System.Object)) c.DataType = typeof(DateTime); else c.DataType = pi.PropertyType; g.MasterTableView.Columns.Add(c); } } //split now because there could be more than one variation //of the same property type, i.e. more than one type of indexer (string, int etc) //which would result in adding all the same columns again return; } } } #endregion #region Custom Fields /// /// Returns true if there are custom fields to be shown for object passed in /// used for leftnav /// /// /// static public bool ShowCustomFields(string sObject) { ObjectCustomFields ocf = ObjectCustomFields.GetItems(sObject); if (ocf.Count == 0) { return false; } foreach (ObjectCustomField f in ocf) { if (f.Visible) return true; } return false; } /// /// Displays within an placeholder control /// a series of controls for editing custom fields /// and populates them with their values /// /// /// /// /// /// static public bool ShowCustomFields(string sObject, object BizObject, HtmlGenericControl CustDiv, PlaceHolder ph, bool ReadOnly, string sSharedCalendarID, string sSharedTimeViewID) { ObjectCustomFields ocf = ObjectCustomFields.GetItems(sObject); if (ocf.Count == 0) { CustDiv.Visible = false; return false; } bool bAtLeastOneFieldIsVisible = false; foreach (ObjectCustomField f in ocf) { if (f.Visible) { bAtLeastOneFieldIsVisible = true; break; } } if (!bAtLeastOneFieldIsVisible) { CustDiv.Visible = false; return false; } //OK, we have fields to show, let's get showing... //Case 305 ph.Controls.Clear(); int x = 0; foreach (ObjectCustomField f in ocf) { if (f.Visible) { ph.Controls.Add(new LiteralControl("
\r\n")); Label lbl = new Label(); lbl.Text = LocaleText(sObject + ".Label." + f.FieldName) + ":"; lbl.Width = System.Web.UI.WebControls.Unit.Percentage(100); ph.Controls.Add(lbl); ph.Controls.Add(new LiteralControl("
")); #region Set by field type switch (f.FieldType) { case FormFieldDataTypes.Currency: { TextBox c = new TextBox(); c.ID = "Custom" + x.ToString(); c.EnableViewState = true; if (BizObject != null) { object o = GetObjectValueInCustomField(x, BizObject); if (o == null || o == System.DBNull.Value || o.ToString() == "") o = "0"; decimal d = 0; if (!decimal.TryParse(o.ToString(), out d)) d = 0; c.Text = d.ToString("c"); } c.Width = System.Web.UI.WebControls.Unit.Percentage(100); c.ReadOnly = ReadOnly; ph.Controls.Add(c); } break; case FormFieldDataTypes.DateOnly: { Telerik.Web.UI.RadDatePicker c = new Telerik.Web.UI.RadDatePicker(); c.ID = "Custom" + x.ToString(); c.DateInput.DateFormat = "d"; c.EnableViewState = true; //case 911 if (!string.IsNullOrEmpty(sSharedCalendarID)) c.SharedCalendarID = sSharedCalendarID; c.MaxDate = DateTime.MaxValue; c.MinDate = DateTime.MinValue; if (BizObject != null) { object o = GetObjectValueInCustomField(x, BizObject); c.DbSelectedDate = ParseDateToDbValue(o); } // c.Width = System.Web.UI.WebControls.Unit.Percentage(100); c.Enabled = !ReadOnly; ph.Controls.Add(c); } break; case FormFieldDataTypes.DateTime: { Telerik.Web.UI.RadDateTimePicker c = new Telerik.Web.UI.RadDateTimePicker(); c.ID = "Custom" + x.ToString(); c.DateInput.DateFormat = "g"; c.EnableViewState = true; //Case 911: Efficiency booster if users have a lot of or at least two calendar or timeview popups if (!string.IsNullOrEmpty(sSharedCalendarID)) c.SharedCalendarID = sSharedCalendarID; if (!string.IsNullOrEmpty(sSharedTimeViewID)) c.SharedTimeViewID = sSharedTimeViewID; c.MaxDate = DateTime.MaxValue; c.MinDate = DateTime.MinValue; //c.TimeView.StartTime = new TimeSpan(8, 0, 0); //c.TimeView.EndTime = new TimeSpan(21, 15, 0); //c.TimeView.Interval = new TimeSpan(0, 15, 0); //c.TimeView.HeaderText = ""; //c.TimeView.Columns = 4; if (BizObject != null) { object o = GetObjectValueInCustomField(x, BizObject); c.DbSelectedDate = ParseDateToDbValue(o); } c.Enabled = !ReadOnly; ph.Controls.Add(c); } break; case FormFieldDataTypes.Number: { TextBox c = new TextBox(); c.ID = "Custom" + x.ToString(); if (BizObject != null) { object o = GetObjectValueInCustomField(x, BizObject); if (o == null || o == System.DBNull.Value || o.ToString() == "") o = "0"; decimal d = 0; if (!decimal.TryParse(o.ToString(), out d)) d = 0; c.Text = d.ToString("g29"); } c.Width = System.Web.UI.WebControls.Unit.Percentage(100); c.ReadOnly = ReadOnly; ph.Controls.Add(c); } break; case FormFieldDataTypes.Text: { TextBox c = new TextBox(); c.ID = "Custom" + x.ToString(); if (BizObject != null) { object o = GetObjectValueInCustomField(x, BizObject); if (o == null || o == System.DBNull.Value || o.ToString() == "") o = ""; c.Text = o.ToString(); } c.Width = System.Web.UI.WebControls.Unit.Percentage(100); c.ReadOnly = ReadOnly; ph.Controls.Add(c); } break; case FormFieldDataTypes.TimeOnly: { Telerik.Web.UI.RadTimePicker c = new Telerik.Web.UI.RadTimePicker(); c.ID = "Custom" + x.ToString(); //case 911 if (!string.IsNullOrEmpty(sSharedTimeViewID)) c.SharedTimeViewID = sSharedTimeViewID; c.EnableViewState = true; if (BizObject != null) { object o = GetObjectValueInCustomField(x, BizObject); c.DbSelectedDate = ParseDateToDbValue(o); } // c.Width = System.Web.UI.WebControls.Unit.Percentage(100); c.Enabled = !ReadOnly; ph.Controls.Add(c); } break; case FormFieldDataTypes.TrueFalse: { CheckBox c = new CheckBox(); c.ID = "Custom" + x.ToString(); if (BizObject != null) { object o = GetObjectValueInCustomField(x, BizObject); if (o == null || o == System.DBNull.Value || o.ToString() == "") o = false; c.Checked = System.Convert.ToBoolean(o); } c.Width = System.Web.UI.WebControls.Unit.Percentage(100); c.Enabled = !ReadOnly; ph.Controls.Add(c); } break; } #endregion set by field type ph.Controls.Add(new LiteralControl("
")); //ph.Controls.Add(new LiteralControl("
")); //dt.Rows.Add(new object[] { f.FieldName, f.FieldType, LocaleText.GetLocalizedText(sObject + ".Label." + f.FieldName), null }); } x++; } return true; } /// /// Get a custom field's value in the biz object /// /// customX /// /// private static object GetObjectValueInCustomField(int position, object BizObject) { return (object)BizObject.GetType().GetProperty("Custom" + position.ToString()).GetValue(BizObject, null); } /// /// Suck the custom field values back into the biz object /// /// /// public static void GetCustomFields(string sObject, object BizObject, PlaceHolder ph) { foreach (Control c in ph.Controls) { if (c is Literal) continue; if (c is LiteralControl) continue; if (c is Label) continue; object val = ""; bool bIsDate = false; switch (c.GetType().ToString()) { case "System.Web.UI.WebControls.TextBox": val = ((System.Web.UI.WebControls.TextBox)c).Text; break; case "Telerik.Web.UI.RadDateTimePicker": val = ((Telerik.Web.UI.RadDateTimePicker)c).DbSelectedDate; bIsDate = true; break; case "Telerik.Web.UI.RadTimePicker": val = ((Telerik.Web.UI.RadTimePicker)c).DbSelectedDate; bIsDate = true; break; case "Telerik.Web.UI.RadDatePicker": val = ((Telerik.Web.UI.RadDatePicker)c).DbSelectedDate; bIsDate = true; break; case "System.Web.UI.WebControls.CheckBox": val = ((System.Web.UI.WebControls.CheckBox)c).Checked; break; default: throw new ApplicationException("GetCustomFields unknown control type:" + c.GetType().ToString()); } if (val == null || val == System.DBNull.Value) val = ""; if (bIsDate && val.ToString() != "" && val is System.DateTime) { BizObject.GetType().GetProperty(c.ID).SetValue(BizObject, ((DateTime)val).ToString(System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat), null); } else { //bugbug case 455 is setting props that are bool or currency to "false" or "$0.00" unnecessarily //triggering isdirty = true unnecessarily //However once we have proper currency controls from telerik than we can flesh this out more //as is now the user just needs to save once then it's never dirty unless they actually edit BizObject.GetType().GetProperty(c.ID).SetValue(BizObject, val.ToString(), null); } } } #endregion #region String to web conversions public static string StringWebify(string input) { if (string.IsNullOrEmpty(input)) return ""; return input.Replace("\r\n", "
") .Replace("\r", "
") .Replace("\n", "
"); } public static string StringJavaScriptify(string input) { return input.Replace(@"\", @"\\").Replace("\"", "\\").Replace("\n", @"\n").Replace("\r", @"\r").Replace("\t", @"\t"); } /// /// /// /// /// public static string StringToHTTP(string sUrl) { if (sUrl.ToLower().StartsWith("http://")) return sUrl; else return "http://" + sUrl; } #endregion #region Form helpers including Biz object editing factory //doesn't work and not called from anywhere anyway //when add new delete methods will find better alternative to this //public static void FormAddDeleteConfirmScript(Page p) //{ // p.ClientScript.RegisterClientScriptBlock(p.GetType(),"delconfirm"," "); //} public static void SessionAddKeepAlive(Page p) { int int_MilliSecondsTimeOut = (p.Session.Timeout * 60000) - 30000; string str_Script = @""; p.ClientScript.RegisterClientScriptBlock(p.GetType(),"Reconnect", str_Script); } /// /// centralized popup window for opening sub forms etc /// this way we can modify centrally as required in future /// /// /// public static void OpenEditWindow(Page p, string sBizObject, Guid ID) { string toUrl = ""; switch (sBizObject) { case "Part": toUrl = "PartInventoryView.aspx?id=" + ID.ToString(); break; case "WikiPage": toUrl = "Wiki?id=" + ID.ToString(); break; default: { if (ID == Guid.Empty) toUrl = sBizObject + "Edit.aspx"; else toUrl = sBizObject + "Edit.aspx?id=" + ID.ToString(); } break; } OpenEditWindowAddScript(p, toUrl); } /// /// Overload for biz object instead of text /// /// /// /// public static void OpenEditWindow(Page p, RootObjectTypes BizObject, Guid ID) { OpenEditWindow(p, BizObject.ToString(), ID); } /// /// Opener for wiki pages that take a type and ID url /// /// /// /// public static void OpenWikiPage(Page p, TypeAndID tid) { string toUrl = "wiki.aspx" + tid.ToAyaURLQueryParameter(); OpenEditWindowAddScript(p, toUrl); } /// /// Handles the actual work of creating the open script /// /// /// private static void OpenEditWindowAddScript(Page p, string toUrl) { p.Response.Write(""); } //Note: this example was used and also contains example of how to do this //with an async callback: http://www.telerik.com/community/forums/thread/b311D-bkhmtk.aspx public static void PopupAlert(Page p, string sMessage) { PopupAlert(p, sMessage, ""); } public static void PopupAlert(Page p, string sMessage, string sTitle) { string popscript = string.Format(@"function _showAlert() {{ Sys.Application.remove_load(_showAlert); radalert('{0}', 300, 200,'{1}'); }}; Sys.Application.add_load(_showAlert);", StringWebify(sMessage),StringWebify(sTitle)); p.ClientScript.RegisterStartupScript(typeof(string), "PopAlert", popscript, true); } /// /// Use to open a work order or quote or pm that /// a user has typed in the number of in the direct open section of the menu /// above schedule and main grid form /// /// Added to comply with case 58 regionalization /// /// /// /// public static void DirectOpenWO(Page p, string sNumber, WorkorderTypes wotype) { Guid g = WorkorderInternalIDFetcher.GetItem(sNumber, wotype); if (g != Guid.Empty && (AyaBizUtils.InYourRegion(ObjectRegionIDFetcher.ObjectRegion(new TypeAndID(RootObjectTypes.Workorder, g)))))//case 58 OpenEditWindow(p, RootObjectTypes.Workorder, g); } #endregion #region Record History public static string RecordHistoryText(Guid Creator, Guid Modifier, string CreatedDate, string ModifiedDate) { StringBuilder sb = new StringBuilder(); sb.Append(LocaleText("UI.RecordHistory.Creator")); sb.Append(": "); sb.Append(GetName(Creator)); sb.Append("
"); sb.Append(LocaleText("UI.RecordHistory.Created")); sb.Append(": "); sb.Append(CreatedDate); sb.Append("

"); sb.Append(LocaleText("UI.RecordHistory.Modifier")); sb.Append(": "); sb.Append(GetName(Modifier)); sb.Append("
"); sb.Append(LocaleText("UI.RecordHistory.Modified")); sb.Append(": "); sb.Append(ModifiedDate); sb.Append("
"); return sb.ToString(); } /// /// Build up a name string from passed in user record id /// /// /// private static string GetName(Guid UserID) { UserPickList upl = UserPickList.GetListOfOneSpecificUser(UserID); if (upl.Count == 0) return "-"; return upl[0].Name; } #endregion Record history #region Parsers public static decimal ParseDecimal(object s) { if (s == null) return 0; decimal d = 0; //Case 512 - as part of fix for 512 discovered this method wasn't handling //currency at all, wonder what else wasn't working before this? if (!decimal.TryParse(s.ToString(), out d)) decimal.TryParse(s.ToString(), NumberStyles.Currency, System.Threading.Thread.CurrentThread.CurrentCulture, out d); return d; } public static bool ParseBool(object s) { if (s == null) return false; bool b = false; bool.TryParse(s.ToString(), out b); return b; } public static int ParseInt(object s) { if (s == null) return 0; int d = 0; int.TryParse(s.ToString(), out d); return d; } public static long ParseLong(object s) { if (s == null) return 0; long d = 0; long.TryParse(s.ToString(), out d); return d; } //Attempts to parse a string based on current thread culture //if that fails then tries the invariant culture (to catch US users who have accidentally //set their web browser to some other language or international users //browsing through a US site for the most part as it won't work //for other circumstances, so supporting most common scenario) //if it can't figure it out at all then it will return an empty dbnull date //the ideal fix is of course to convert dates to the invariant culture when they are //first entered into AyaNova in custom fields where this is mostly used // public static object ParseDateToDbValue(object s) { if (s == null || s.ToString() == "") return System.DBNull.Value; DateTime dt = new DateTime(); if (!DateTime.TryParse(s.ToString(), out dt)) if (!DateTime.TryParse(s.ToString(), System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat, System.Globalization.DateTimeStyles.None, out dt)) return System.DBNull.Value; return dt; } /// /// True if object contains a non empty guid /// false if object is null or contains an empty guid /// /// /// public static bool GuidSelected(object s) { if (s == null) return false; Guid g = new Guid(s.ToString()); if (g == Guid.Empty) return false; return true; } /// /// convert object to string, if null returns empty string /// /// /// public static string ObjectToString(object o) { if (o == null) return ""; return o.ToString(); } //case 1922 /// /// Convert string with linefeeds only (\n) but no carriage returns (\r) to /// CR/LF combination instead (\r\n). /// /// /// public static string ParseMultiLineText(object o) { string s = ObjectToString(o); //Only do the conversion if there are not existing \r if (!s.Contains("\r\n")) return s.Replace("\n", "\r\n"); return s; } #endregion #region Graphic helpers /// /// Invert a color in such a manner as to render text on top of the color readable /// /// /// static public System.Drawing.Color InvertColor(System.Drawing.Color col) { int nSourceColor = col.R + col.G + col.B; int r = 255 - col.R; int g = 255 - col.G; int b = 255 - col.B; int nInvertColor = r + g + b; System.Drawing.Color invert; if (nSourceColor - nInvertColor < 28) invert = System.Drawing.Color.White; else invert = System.Drawing.Color.FromArgb(r, g, b); return invert; } #endregion #region support info /// /// User specific info /// /// static public string FullSettingsInfo() { User uCurrent = CurrentUser; Region RegionalSettings = Region.GetItem(CurrentUser.RegionID); Global globalSettings = GlobalSettings; StringBuilder sb = new StringBuilder(); BusinessPrincipal p = ((BusinessPrincipal)Thread.CurrentPrincipal); sb.Append("\tUser settings\r\n"); sb.Append("\t\tUser: " + uCurrent.Name(ScheduleableUserNameDisplayFormats.FirstLast) + "\r\n"); sb.Append("\t\tLanguage: " + uCurrent.DefaultLanguage + "\r\n"); sb.Append("\t\tUserType: " + uCurrent.UserType.ToString() + "\r\n"); sb.Append("\t\tSubContractor: " + uCurrent.SubContractor.ToString() + "\r\n"); sb.Append("\t\tRegion: " + RegionalSettings == null ? "-" : RegionalSettings.Name + "\r\n"); sb.Append("\tGlobal settings\r\n"); sb.Append("\t\tLanguage: " + globalSettings.DefaultLanguage + "\r\n"); sb.Append("\t\tUse Notification services: " + globalSettings.UseNotification.ToString() + "\r\n"); sb.Append("\t\tCJK Index: " + globalSettings.CJKIndex.ToString() + "\r\n"); sb.Append("\t\tUse inventory: " + globalSettings.UseInventory.ToString() + "\r\n"); //sb.Append("\t\tUse regions: " + globalSettings.UseRegions.ToString() + "\r\n"); return sb.ToString(); } /// /// General info /// /// static public string FullSupportInfo() { StringBuilder sb = new StringBuilder(); sb.Append( "\tMachine name: " + System.Environment.MachineName + "\r\n" + //"\tAyaNova Connection: " + DiagnosticConnectionInfo + "\r\n" + //"\tGenerate PM and Notify from this connection: " + IAmAGenerator.ToString() + "\r\n" + "\tOS user name: " + System.Environment.UserName + "\r\n" + //"\tNetworked: " + SystemInformation.Network.ToString() + "\r\n" + "\tOS user domain name: " + System.Environment.UserDomainName + "\r\n" + //"\tOS version: " + System.Environment.OSVersion.ToString() + "\r\n" + OSVersionInfo.FullOperatingSystemInformationForDisplay + "\r\n" + "\tSystem folder: " + System.Environment.SystemDirectory + "\r\n" + "\tCLR version: " + System.Environment.Version.ToString() + "\r\n" + "\tCurrent directory: " + System.Environment.CurrentDirectory + "\r\n"); sb.Append( "\tWorking set: " + System.Environment.WorkingSet.ToString() + "\r\n" + //"\tPrimary monitor size: " + SystemInformation.PrimaryMonitorSize.ToString() + "\r\n" + "\tLocale current culture: " + System.Threading.Thread.CurrentThread.CurrentCulture.EnglishName + "\r\n" + "\tLocale currency symbol: " + System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol + "\r\n" + "\tLocale short date pattern: " + System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern + "\r\n" + "\tLocale short time pattern: " + System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortTimePattern + "\r\n"); Assembly a = Assembly.GetExecutingAssembly(); AssemblyName an = a.GetName(); sb.Append("\tAyaNova WBI version: " + Version + "\r\n"); //Hotfix if any if (HotfixVersion > 0) sb.AppendLine("\t(Patch " + HotfixVersion.ToString() + ")"); // sb.Append("\tPrimary assembly location: " + an.CodeBase + "\r\n"); sb.Append("\t\tReferences:\r\n"); foreach (AssemblyName arn in a.GetReferencedAssemblies()) { sb.Append("\t\t" + arn.Name + " " + arn.Version.ToString() + "\r\n"); } if (!string.IsNullOrEmpty(AyaBizUtils.PortalDiagnostics)) { sb.Append("DataPortal diagnostics:\r\n"); sb.Append(AyaBizUtils.PortalDiagnostics); } return sb.ToString(); } #endregion supportinfo #region SQL error /// /// translates obscure sql errors into html compatible, human readable form, /// and returns /// /// static public string ReportSQLError(Exception ex) { if (ex.InnerException == null) throw ex; string sErrorMessage = ""; if (ex.InnerException is FbException) {//TODO: this is forcing a dependancy on the firebird sql driver //Move this down to the database level FbException fex = (FbException)ex.InnerException; switch (fex.ErrorCode) { case 335544466: sErrorMessage = LocaleText("Error.DB.ForeignKeyViolation") + "\r\n\r\n----------------------------------------\r\n" + fex.Message; break; default://rethrow it, it's nothing we can handle here throw fex; } } else if (ex.InnerException is System.Data.SqlClient.SqlException) { System.Data.SqlClient.SqlException sex = (System.Data.SqlClient.SqlException)ex.InnerException; switch (sex.Number) { case 547: sErrorMessage = LocaleText("Error.DB.ForeignKeyViolation") + "\r\n\r\n----------------------------------------\r\n" + sex.Message; break; default://rethrow it, it's nothing we can handle here throw sex; } } else throw ex.InnerException; return StringWebify(sErrorMessage); } #endregion #region Telerik RadDatePicker time bug workaround (Case 455) ///// ///// ///// ///// Deprecated, no longer necessary telerik control now gets correct seconds as well ///// ///// ///// Due to bug in Telerik RadDatePicker as of this version ///// it loses the seconds when populated on a web form ///// so it appears that datetimepicker controls have all be edited when in fact ///// they have not ///// ///// This method will compare all but the seconds to determine equality and return the ///// dtDest if they are equal in all but seconds else dtSource ///// ///// ///// ///// //public static DateTime GetDateIfChanged(object Dest, object Source) //{ // //Case 582 changes // DateTime dtDest; // DateTime dtSource; // if (Source == null || Source is System.DBNull) // return DateTime.MinValue; // else // dtSource = (DateTime)Source; // if (Dest == null || Dest is System.DBNull) // dtDest = DateTime.MinValue; // else // dtDest = (DateTime)Dest; // //dtSource from telerik control is always zero seconds so just // //adding the original seconds should do the trick for comparison // dtSource=dtSource.AddSeconds(dtDest.Second); // dtSource = dtSource.AddMilliseconds(dtDest.Millisecond); // if (dtDest.Equals(dtSource)) // return dtDest; // return dtSource; //} #endregion #region Case 349 /// /// Walks the tree of a workorder and compiles all the broken rules /// /// /// public static string WorkorderBrokenRuleFinder(Workorder w) { StringBuilder sb = new StringBuilder(); sb.Append("Broken rules in workorder tree\r\n-----------------------------\r\n"); if (!string.IsNullOrEmpty(w.BrokenRulesText)) { sb.Append("Workorder header: \r\n"); sb.Append(w.BrokenRulesText); sb.Append("\r\n"); } foreach (WorkorderItem wi in w.WorkorderItems) { if (!string.IsNullOrEmpty(wi.BrokenRulesText)) { sb.Append("Workorder item: ("); sb.Append(wi.Summary); sb.Append(")\r\n"); sb.Append(wi.BrokenRulesText); sb.Append("\r\n"); } #region workorder grandchildren foreach (WorkorderItemLabor l in wi.Labors) { if (!string.IsNullOrEmpty(l.BrokenRulesText)) { sb.Append("Workorder item labor: \r\n"); sb.Append(l.BrokenRulesText); sb.Append("\r\n"); } } foreach (WorkorderItemMiscExpense me in wi.Expenses) { if (!string.IsNullOrEmpty(me.BrokenRulesText)) { sb.Append("Workorder item misc expense: \r\n"); sb.Append(me.BrokenRulesText); sb.Append("\r\n"); } } foreach (WorkorderItemLoan lo in wi.Loans) { if (!string.IsNullOrEmpty(lo.BrokenRulesText)) { sb.Append("Workorder item loan: \r\n"); sb.Append(lo.BrokenRulesText); sb.Append("\r\n"); } } if (!string.IsNullOrEmpty(wi.OutsideService.BrokenRulesText)) { sb.Append("Workorder item outside service: \r\n"); sb.Append(wi.OutsideService.BrokenRulesText); sb.Append("\r\n"); } foreach (WorkorderItemPartRequest pr in wi.PartRequests) { if (!string.IsNullOrEmpty(pr.BrokenRulesText)) { sb.Append("Workorder item part request: \r\n"); sb.Append(pr.BrokenRulesText); sb.Append("\r\n"); } } //Case 370 the following was wrongly coded //as foreach(workorderitempartREQUEST instead of Part) foreach (WorkorderItemPart p in wi.Parts) { if (!string.IsNullOrEmpty(p.BrokenRulesText)) { sb.Append("Workorder item part: \r\n"); sb.Append(p.BrokenRulesText); sb.Append("\r\n"); } } foreach (WorkorderItemScheduledUser u in wi.ScheduledUsers) { if (!string.IsNullOrEmpty(u.BrokenRulesText)) { sb.Append("Workorder item sched. user: \r\n"); sb.Append(u.BrokenRulesText); sb.Append("\r\n"); } } foreach (WorkorderItemTask t in wi.Tasks) { if (!string.IsNullOrEmpty(t.BrokenRulesText)) { sb.Append("Workorder item task: \r\n"); sb.Append(t.BrokenRulesText); sb.Append("\r\n"); } } foreach (WorkorderItemTravel tr in wi.Travels) { if (!string.IsNullOrEmpty(tr.BrokenRulesText)) { sb.Append("Workorder item travel: \r\n"); sb.Append(tr.BrokenRulesText); sb.Append("\r\n"); } } #endregion }//foreach workorder item return sb.ToString(); }//end of method #endregion #region MRU case 535 /// /// Fill an Telerik RadMenuItem panel item /// with MRU /// /// static public void MRUFillList(Telerik.Web.UI.RadMenuItem topmenuitem) { topmenuitem.Items.Clear(); topmenuitem.PostBack = false; //case 1305 - not refreshing properly between sessions, apparently ayabizutils is cached. AyaBizUtils.MRU = null; foreach (DataRowView r in AyaBizUtils.MRU.MRU) { TypeAndID tid = (TypeAndID)r["TID"]; if (tid.RootObjectType != RootObjectTypes.Vendor) { Telerik.Web.UI.RadMenuItem li = new Telerik.Web.UI.RadMenuItem(); li.Text = r["Description"].ToString(); li.Value = "MRU" + tid.ToString(); topmenuitem.Items.Add(li); } } } #endregion mru #region Wiki / ayaFile stuff case 73 #region WikiPage menu item insertion /// /// Insert a menu item for opening a wiki page /// /// RadMenu object /// RootObject type /// RootObjectID public static void WikiPageInsertMenuItem(RadMenu rm, RootObjectTypes oType, Guid RootObjectID) { Telerik.Web.UI.RadMenuItem miWiki = new Telerik.Web.UI.RadMenuItem(); miWiki.ToolTip = Util.LocaleText("O.WikiPage"); miWiki.ImageUrl = "~/graphics/Wiki24.png"; miWiki.NavigateUrl = "Wiki.aspx" + TypeAndID.ToAyaURLQueryParameter(oType, RootObjectID); miWiki.Target = "_blank"; rm.Items.Add(miWiki); } #endregion wikipage menu item insertion #region AyaImage handler /// /// Used to serve up images based on AyaImage:guid tag /// /// /// public static void WriteAyaImageToResponse(HttpResponse Response, Guid ImageID) { try { System.IO.MemoryStream ms = AyaFile.GetItem(ImageID).GetContent(); Response.Clear(); Response.ContentType = "image/png"; ms.WriteTo(Response.OutputStream); ms.Dispose(); } catch (Exception ex) { if (ex.InnerException != null) ex = ex.InnerException; if (ex is GZTW.AyaNova.BLL.FetchException) Response.Write("[Image not found in DataBase: " + ImageID.ToString() + "]"); else throw ex; } } #endregion ayaimage handler #region AyaFile handler /// /// Used to delete a file based on it's tag, called by AyaFileHandler /// /// /// public static void DeleteAyaFile(HttpResponse Response, Guid AyaFileID, string RedirectUrl) { AyaFile.DeleteItem(AyaFileID); Response.Redirect(RedirectUrl, true); } /// /// Used to serve up files based on AyaFile:guid tag /// called by AyaFileHandler /// /// /// public static void WriteAyaFileToResponse(HttpResponse Response, Guid AyaFileID) { // try { AyaFile af = AyaFile.GetItem(AyaFileID); System.IO.MemoryStream ms = af.GetContent(); Response.Clear(); //Tell the browser it's a file Response.AddHeader("content-disposition","attachment; filename=\"" + af.Name + "\""); //Tell the browser the mime type so it can offer to open or save if they have the app registered mime type Response.ContentType = GetMimeTypeFromFileName(af.Name); ms.WriteTo(Response.OutputStream); ms.Dispose(); } catch (Exception ex) { if (ex.InnerException != null) ex = ex.InnerException; if (ex is GZTW.AyaNova.BLL.FetchException) Response.Write("[File not found in DataBase: " + AyaFileID.ToString() + "]"); else throw ex; } } public static Dictionary dictMimeTypes = null; /// /// Some important mime types, don't need them all for this purpose /// /// /// public static string GetMimeTypeFromFileName(string fileName) { string sExtension = System.IO.Path.GetExtension(fileName); if (string.IsNullOrEmpty(sExtension)) sExtension = ""; sExtension = sExtension.ToLowerInvariant(); if (dictMimeTypes == null) { dictMimeTypes = new Dictionary(); //Add specific mime types #region mime types dictMimeTypes.Add(".7z", "application/x-7z-compressed"); dictMimeTypes.Add(".7zip", "application/x-7z-compressed"); dictMimeTypes.Add(".323", "text/h323"); dictMimeTypes.Add(".acx", "application/internet-property-stream"); dictMimeTypes.Add(".ai", "application/postscript"); dictMimeTypes.Add(".aif", "audio/x-aiff"); dictMimeTypes.Add(".aifc", "audio/aiff"); dictMimeTypes.Add(".aiff", "audio/aiff"); dictMimeTypes.Add(".application", "application/x-ms-application"); dictMimeTypes.Add(".asf", "video/x-ms-asf"); dictMimeTypes.Add(".asr", "video/x-ms-asf"); dictMimeTypes.Add(".asx", "video/x-ms-asf"); dictMimeTypes.Add(".au", "audio/basic"); dictMimeTypes.Add(".avi", "video/x-msvideo"); dictMimeTypes.Add(".axs", "application/olescript"); dictMimeTypes.Add(".bas", "text/plain"); dictMimeTypes.Add(".bcpio", "application/x-bcpio"); dictMimeTypes.Add(".bin", "application/octet-stream"); dictMimeTypes.Add(".bmp", "image/bmp"); dictMimeTypes.Add(".c", "text/plain"); dictMimeTypes.Add(".cat", "application/vndms-pkiseccat"); dictMimeTypes.Add(".cdf", "application/x-cdf"); dictMimeTypes.Add(".cer", "application/x-x509-ca-cert"); dictMimeTypes.Add(".clp", "application/x-msclip"); dictMimeTypes.Add(".cmx", "image/x-cmx"); dictMimeTypes.Add(".cod", "image/cis-cod"); dictMimeTypes.Add(".cpio", "application/x-cpio"); dictMimeTypes.Add(".crd", "application/x-mscardfile"); dictMimeTypes.Add(".crl", "application/pkix-crl"); dictMimeTypes.Add(".crt", "application/x-x509-ca-cert"); dictMimeTypes.Add(".csh", "application/x-csh"); dictMimeTypes.Add(".css", "text/css"); dictMimeTypes.Add(".dcr", "application/x-director"); dictMimeTypes.Add(".deploy", "application/octet-stream"); dictMimeTypes.Add(".der", "application/x-x509-ca-cert"); dictMimeTypes.Add(".dib", "image/bmp"); dictMimeTypes.Add(".dir", "application/x-director"); dictMimeTypes.Add(".disco", "text/xml"); dictMimeTypes.Add(".dll", "application/x-msdownload"); dictMimeTypes.Add(".doc", "application/msword"); dictMimeTypes.Add(".dot", "application/msword"); dictMimeTypes.Add(".dvi", "application/x-dvi"); dictMimeTypes.Add(".dxr", "application/x-director"); dictMimeTypes.Add(".eml", "message/rfc822"); dictMimeTypes.Add(".eps", "application/postscript"); dictMimeTypes.Add(".etx", "text/x-setext"); dictMimeTypes.Add(".evy", "application/envoy"); dictMimeTypes.Add(".exe", "application/octet-stream"); dictMimeTypes.Add(".fif", "application/fractals"); dictMimeTypes.Add(".flr", "x-world/x-vrml"); dictMimeTypes.Add(".gif", "image/gif"); dictMimeTypes.Add(".gtar", "application/x-gtar"); dictMimeTypes.Add(".gz", "application/x-gzip"); dictMimeTypes.Add(".h", "text/plain"); dictMimeTypes.Add(".hdf", "application/x-hdf"); dictMimeTypes.Add(".hlp", "application/winhlp"); dictMimeTypes.Add(".hqx", "application/mac-binhex40"); dictMimeTypes.Add(".hta", "application/hta"); dictMimeTypes.Add(".htc", "text/x-component"); dictMimeTypes.Add(".htm", "text/html"); dictMimeTypes.Add(".html", "text/html"); dictMimeTypes.Add(".htt", "text/webviewhtml"); dictMimeTypes.Add(".ico", "image/x-icon"); dictMimeTypes.Add(".ief", "image/ief"); dictMimeTypes.Add(".iii", "application/x-iphone"); dictMimeTypes.Add(".ins", "application/x-internet-signup"); dictMimeTypes.Add(".isp", "application/x-internet-signup"); dictMimeTypes.Add(".IVF", "video/x-ivf"); dictMimeTypes.Add(".jfif", "image/pjpeg"); dictMimeTypes.Add(".jpe", "image/jpeg"); dictMimeTypes.Add(".jpeg", "image/jpeg"); dictMimeTypes.Add(".jpg", "image/jpeg"); dictMimeTypes.Add(".js", "application/x-javascript"); dictMimeTypes.Add(".latex", "application/x-latex"); dictMimeTypes.Add(".lsf", "video/x-la-asf"); dictMimeTypes.Add(".lsx", "video/x-la-asf"); dictMimeTypes.Add(".m13", "application/x-msmediaview"); dictMimeTypes.Add(".m14", "application/x-msmediaview"); dictMimeTypes.Add(".m1v", "video/mpeg"); dictMimeTypes.Add(".m3u", "audio/x-mpegurl"); dictMimeTypes.Add(".man", "application/x-troff-man"); dictMimeTypes.Add(".manifest", "application/x-ms-manifest"); dictMimeTypes.Add(".mdb", "application/x-msaccess"); dictMimeTypes.Add(".me", "application/x-troff-me"); dictMimeTypes.Add(".mht", "message/rfc822"); dictMimeTypes.Add(".mhtml", "message/rfc822"); dictMimeTypes.Add(".mid", "audio/mid"); dictMimeTypes.Add(".mmf", "application/x-smaf"); dictMimeTypes.Add(".mny", "application/x-msmoney"); dictMimeTypes.Add(".mov", "video/quicktime"); dictMimeTypes.Add(".movie", "video/x-sgi-movie"); dictMimeTypes.Add(".mp2", "video/mpeg"); dictMimeTypes.Add(".mp3", "audio/mpeg"); dictMimeTypes.Add(".mpa", "video/mpeg"); dictMimeTypes.Add(".mpe", "video/mpeg"); dictMimeTypes.Add(".mpeg", "video/mpeg"); dictMimeTypes.Add(".mpg", "video/mpeg"); dictMimeTypes.Add(".mpp", "application/vnd.ms-project"); dictMimeTypes.Add(".mpv2", "video/mpeg"); dictMimeTypes.Add(".ms", "application/x-troff-ms"); dictMimeTypes.Add(".mvb", "application/x-msmediaview"); dictMimeTypes.Add(".nc", "application/x-netcdf"); dictMimeTypes.Add(".nws", "message/rfc822"); dictMimeTypes.Add(".oda", "application/oda"); dictMimeTypes.Add(".ods", "application/oleobject"); dictMimeTypes.Add(".p10", "application/pkcs10"); dictMimeTypes.Add(".p12", "application/x-pkcs12"); dictMimeTypes.Add(".p7b", "application/x-pkcs7-certificates"); dictMimeTypes.Add(".p7c", "application/pkcs7-mime"); dictMimeTypes.Add(".p7m", "application/pkcs7-mime"); dictMimeTypes.Add(".p7r", "application/x-pkcs7-certreqresp"); dictMimeTypes.Add(".p7s", "application/pkcs7-signature"); dictMimeTypes.Add(".pbm", "image/x-portable-bitmap"); dictMimeTypes.Add(".pdf", "application/pdf"); dictMimeTypes.Add(".pfx", "application/x-pkcs12"); dictMimeTypes.Add(".pgm", "image/x-portable-graymap"); dictMimeTypes.Add(".pko", "application/vndms-pkipko"); dictMimeTypes.Add(".pma", "application/x-perfmon"); dictMimeTypes.Add(".pmc", "application/x-perfmon"); dictMimeTypes.Add(".pml", "application/x-perfmon"); dictMimeTypes.Add(".pmr", "application/x-perfmon"); dictMimeTypes.Add(".pmw", "application/x-perfmon"); dictMimeTypes.Add(".png", "image/png"); dictMimeTypes.Add(".pnm", "image/x-portable-anymap"); dictMimeTypes.Add(".pnz", "image/png"); dictMimeTypes.Add(".pot", "application/vnd.ms-powerpoint"); dictMimeTypes.Add(".ppm", "image/x-portable-pixmap"); dictMimeTypes.Add(".pps", "application/vnd.ms-powerpoint"); dictMimeTypes.Add(".ppt", "application/vnd.ms-powerpoint"); dictMimeTypes.Add(".prf", "application/pics-rules"); dictMimeTypes.Add(".ps", "application/postscript"); dictMimeTypes.Add(".pub", "application/x-mspublisher"); dictMimeTypes.Add(".qt", "video/quicktime"); dictMimeTypes.Add(".ra", "audio/x-pn-realaudio"); dictMimeTypes.Add(".ram", "audio/x-pn-realaudio"); dictMimeTypes.Add(".ras", "image/x-cmu-raster"); dictMimeTypes.Add(".rgb", "image/x-rgb"); dictMimeTypes.Add(".rmi", "audio/mid"); dictMimeTypes.Add(".roff", "application/x-troff"); dictMimeTypes.Add(".rtf", "application/rtf"); dictMimeTypes.Add(".rtx", "text/richtext"); dictMimeTypes.Add(".scd", "application/x-msschedule"); dictMimeTypes.Add(".sct", "text/scriptlet"); dictMimeTypes.Add(".setpay", "application/set-payment-initiation"); dictMimeTypes.Add(".setreg", "application/set-registration-initiation"); dictMimeTypes.Add(".sh", "application/x-sh"); dictMimeTypes.Add(".shar", "application/x-shar"); dictMimeTypes.Add(".sit", "application/x-stuffit"); dictMimeTypes.Add(".smd", "audio/x-smd"); dictMimeTypes.Add(".smx", "audio/x-smd"); dictMimeTypes.Add(".smz", "audio/x-smd"); dictMimeTypes.Add(".snd", "audio/basic"); dictMimeTypes.Add(".spc", "application/x-pkcs7-certificates"); dictMimeTypes.Add(".spl", "application/futuresplash"); dictMimeTypes.Add(".src", "application/x-wais-source"); dictMimeTypes.Add(".sst", "application/vndms-pkicertstore"); dictMimeTypes.Add(".stl", "application/vndms-pkistl"); dictMimeTypes.Add(".stm", "text/html"); dictMimeTypes.Add(".sv4cpio", "application/x-sv4cpio"); dictMimeTypes.Add(".sv4crc", "application/x-sv4crc"); dictMimeTypes.Add(".t", "application/x-troff"); dictMimeTypes.Add(".tar", "application/x-tar"); dictMimeTypes.Add(".tcl", "application/x-tcl"); dictMimeTypes.Add(".tex", "application/x-tex"); dictMimeTypes.Add(".texi", "application/x-texinfo"); dictMimeTypes.Add(".texinfo", "application/x-texinfo"); dictMimeTypes.Add(".tgz", "application/x-compressed"); dictMimeTypes.Add(".tif", "image/tiff"); dictMimeTypes.Add(".tiff", "image/tiff"); dictMimeTypes.Add(".tr", "application/x-troff"); dictMimeTypes.Add(".trm", "application/x-msterminal"); dictMimeTypes.Add(".tsv", "text/tab-separated-values"); dictMimeTypes.Add(".txt", "text/plain"); dictMimeTypes.Add(".uls", "text/iuls"); dictMimeTypes.Add(".ustar", "application/x-ustar"); dictMimeTypes.Add(".vcf", "text/x-vcard"); dictMimeTypes.Add(".wav", "audio/wav"); dictMimeTypes.Add(".wbmp", "image/vnd.wap.wbmp"); dictMimeTypes.Add(".wcm", "application/vnd.ms-works"); dictMimeTypes.Add(".wdb", "application/vnd.ms-works"); dictMimeTypes.Add(".wks", "application/vnd.ms-works"); dictMimeTypes.Add(".wmf", "application/x-msmetafile"); dictMimeTypes.Add(".wps", "application/vnd.ms-works"); dictMimeTypes.Add(".wri", "application/x-mswrite"); dictMimeTypes.Add(".wrl", "x-world/x-vrml"); dictMimeTypes.Add(".wrz", "x-world/x-vrml"); dictMimeTypes.Add(".wsdl", "text/xml"); dictMimeTypes.Add(".xaf", "x-world/x-vrml"); dictMimeTypes.Add(".xbm", "image/x-xbitmap"); dictMimeTypes.Add(".xla", "application/vnd.ms-excel"); dictMimeTypes.Add(".xlc", "application/vnd.ms-excel"); dictMimeTypes.Add(".xlm", "application/vnd.ms-excel"); dictMimeTypes.Add(".xls", "application/vnd.ms-excel"); dictMimeTypes.Add(".xlt", "application/vnd.ms-excel"); dictMimeTypes.Add(".xlw", "application/vnd.ms-excel"); dictMimeTypes.Add(".xml", "text/xml"); dictMimeTypes.Add(".xof", "x-world/x-vrml"); dictMimeTypes.Add(".xpm", "image/x-xpixmap"); dictMimeTypes.Add(".xsd", "text/xml"); dictMimeTypes.Add(".xsl", "text/xml"); dictMimeTypes.Add(".xwd", "image/x-xwindowdump"); dictMimeTypes.Add(".z", "application/x-compress"); dictMimeTypes.Add(".zip", "application/x-zip-compressed"); //Office 2007 types dictMimeTypes.Add(".docm", "application/vnd.ms-word.document.macroEnabled.12"); dictMimeTypes.Add(".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); dictMimeTypes.Add(".dotm", "application/vnd.ms-word.template.macroEnabled.12"); dictMimeTypes.Add(".dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"); dictMimeTypes.Add(".potm", "application/vnd.ms-powerpoint.template.macroEnabled.12"); dictMimeTypes.Add(".potx", "application/vnd.openxmlformats-officedocument.presentationml.template"); dictMimeTypes.Add(".ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12"); dictMimeTypes.Add(".ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"); dictMimeTypes.Add(".ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"); dictMimeTypes.Add(".pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"); dictMimeTypes.Add(".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"); dictMimeTypes.Add(".xlam", "application/vnd.ms-excel.addin.macroEnabled.12"); dictMimeTypes.Add(".xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12"); dictMimeTypes.Add(".xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"); dictMimeTypes.Add(".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); dictMimeTypes.Add(".xltm", "application/vnd.ms-excel.template.macroEnabled.12"); dictMimeTypes.Add(".xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"); #endregion mimetypes } if (dictMimeTypes.ContainsKey(sExtension)) return dictMimeTypes[sExtension]; else return "application/octet-stream"; } #endregion ayafile handler #endregion wiki / ayafile stuff #region custom header footers case 1111 /// /// Adds any custom content provided by the WBI admin if available /// /// /// public static void PageAddCustomContent(Page p, bool bForce) { //if force then just do it regardless, this is for the login page if (bForce) { InsertCustomContent(p); return; } //check if user is a client or head office because some pages are shared by both customers and techs if (Util.CurrentUser.IsClientOrHeadOfficeAccount) { InsertCustomContent(p); } } /// /// Adds any custom content provided by the WBI admin if available /// /// public static void PageAddCustomContent(Page p) { PageAddCustomContent(p, false); } private static void InsertCustomContent(Page p) { if (p.FindControl("pnlclhead") != null) { Panel pnl = (Panel)p.FindControl("pnlclhead"); pnl.Controls.Clear(); pnl.Controls.Add(new LiteralControl(CustomContent("CustomClientHeader"))); } if (p.FindControl("pnlclfoot") != null) { Panel pnl = (Panel)p.FindControl("pnlclfoot"); pnl.Controls.Clear(); pnl.Controls.Add(new LiteralControl(CustomContent("CustomClientFooter"))); } } /// /// Cached Custom content /// Valid items are "CustomClientFooter", "CustomClientHeader" /// public static string CustomContent(string sContentType) { if (HttpContext.Current.Cache[sContentType] == null) { string sContent = "NA"; string sFilePath = System.Web.HttpContext.Current.Server.MapPath("~/" + sContentType + "Content.txt"); //Check for existance of file if (System.IO.File.Exists(sFilePath)) { try { sContent = System.IO.File.ReadAllText(sFilePath); } catch { } } HttpContext.Current.Cache.Insert(sContentType, sContent, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30)); } string sRet=(string)HttpContext.Current.Cache[sContentType]; if (sRet == "NA") return ""; else return sRet; } #endregion //----------------------------------------------------------------------------------------- }//end of Util class #region Get enum from combo box public class cb2e { public static T get(Telerik.Web.UI.RadComboBox cb) { return (T)Enum.Parse(typeof(T), cb.SelectedValue); } } #endregion #region RadGrid templates public class ListItemTemplate : ITemplate { protected TextBox textBox; protected string fieldName = ""; protected string listName = ""; protected bool biz = false; public ListItemTemplate(string FieldName, string ListName, bool Biz) { fieldName = FieldName; listName = ListName; biz = Biz; } public void InstantiateIn(System.Web.UI.Control container) { Label textBox = new Label(); //textBox.ID = "tbli"; textBox.Visible = true; textBox.DataBinding += new EventHandler(textBox_DataBinding); container.Controls.Add(textBox); } void textBox_DataBinding(object sender, EventArgs e) { Label textBox; textBox = (Label)sender; GridDataItem container = (GridDataItem)textBox.NamingContainer; object o=DataBinder.Eval(container.DataItem, fieldName); string s = ""; if (!biz) s=Util.GetNonBizName(listName, System.Convert.ToInt32(o)); else s=Util.GetBizObjectName(listName, new Guid(o.ToString())); textBox.Text += s; } } #endregion #region messing about stuff //class ControlFactory //{ // public static CPControl CreateControl(object htmlElementObj)//sb static //{ // //what if the parameter is null? Or not the object desired? // if(htmlElementObj==null || !(htmlElementObj is mshtml.IHTMLElement)) // return (CPControl)null; // //Always think localization // string elementName=((mshtml.IHTMLElement)htmlElementObj).tagName.ToUpperInvariant(); // //no need to check for "input" specifically since the original code seems to be designed // //to either return an object of interest or null // switch(elementName) // { // case "TEXT": return new CPTextBox(); // case "CHECKBOX": return new CPCheckBox(); // case "RADIO": return new CPRadioButton(); // case "PASSWORD": return new CPPasswordTextBox(); // case "HIDDEN": return new CPHiddenControl(); // } // return (CPControl)null; //} //} #endregion