public string Send(ManagedItem managedItem, ITATSystem system, string sEnvironment, List<int> owningFacilityIDs) { //If the subject or body or recipients are empty, then do not send anything if ((string.IsNullOrEmpty(Subject)) || (string.IsNullOrEmpty(this.Text)) || (this.Recipients == null) || (this.Recipients.Count == 0)) return string.Empty; string sError = string.Empty; string from = null; string subject = null; string text = null; Kindred.Common.Security.NameEmailPair[] emailRecipients = null; try { Kindred.Common.Email.Email email = new Kindred.Common.Email.Email(); from = XMLNames._M_EmailFrom; subject = string.IsNullOrEmpty(Subject) ? "Subject Missing" : Subject; text = string.IsNullOrEmpty(Text) ? "Text Missing" : Text; Term.SubstituteBasicTerms(managedItem, ref text); Term.SubstituteSpecialTerms(ref text, managedItem); //Now complete the 'ManagedItemReference' email links - fill in the dynamically supplied info if (!string.IsNullOrEmpty(system.Name)) text = text.Replace(XMLNames._M_SystemNameHolder, system.Name); if (!string.IsNullOrEmpty(sEnvironment)) text = text.Replace(XMLNames._M_EnvironmentHolder, sEnvironment); text = text.Replace(XMLNames._M_ManagedItemIdHolder, managedItem.ManagedItemID.ToString()); List<int> facilityIDs = null; if (owningFacilityIDs != null) facilityIDs = new List<int>(owningFacilityIDs); else facilityIDs = new List<int>(); bool overrideFacilities = false; //Note - HasOwningFacility trumps use of filterFacilityTerm if (!(system.HasOwningFacility ?? false)) { if (FilterFacilityTermID.HasValue) { Term filterFacilityTerm = managedItem.FindTerm(FilterFacilityTermID.Value); if (filterFacilityTerm != null) { FacilityTerm facilityTerm = null; if (filterFacilityTerm.TermType == TermType.Facility) facilityTerm = filterFacilityTerm as FacilityTerm; else facilityTerm = new FacilityTerm(false, managedItem, filterFacilityTerm); if (facilityTerm != null) { facilityIDs = facilityTerm.SelectedFacilityIDs; overrideFacilities = true; } } } } List<int> allRecipientFacilityIDs = new List<int>(); if ((system.HasOwningFacility ?? false) || overrideFacilities) { foreach (string recipient in Recipients) { List<int> absoluteLevels = null; List<int> relativeLevels = null; system.GetFacilityLevels(recipient, ref absoluteLevels, ref relativeLevels); List<int> recipientFacilityIDs = FacilityCollection.FacilityAncestry(facilityIDs, absoluteLevels, relativeLevels); foreach (int facilityID in recipientFacilityIDs) if (!allRecipientFacilityIDs.Contains(facilityID)) allRecipientFacilityIDs.Add(facilityID); } emailRecipients = SecurityHelper.GetEmailRecipients(system, Recipients, allRecipientFacilityIDs); } else { emailRecipients = SecurityHelper.GetEmailRecipients(system, Recipients); } EmailHelper.SendEmail(from, subject, text, emailRecipients, system, Recipients, allRecipientFacilityIDs); } catch (Exception e) { sError = string.Format("Email={0} Exception={1}", EmailInfo(from, emailRecipients, subject, text), e.ToString()); } return sError; }
private void GetPrimaryFacility(XmlDocument rawXML, List<string> validation) { foreach (Term term in _terms) { if (term.TermType == TermType.Facility) { Business.FacilityTerm facilityTerm = term as Business.FacilityTerm; if (facilityTerm.IsPrimary.HasValue) { if (facilityTerm.IsPrimary.Value) { _primaryFacility = facilityTerm; break; } } } } }
//Generate the Terms collection (of Term) based on an xml document //Called by BasicTerms.Create, once from ITATSystem.LoadFromDatabase public static List<Term> Create(XmlNode termsNode, ManagedItem managedItem, Template template) { List<Term> rtn = new List<Term>(termsNode.ChildNodes.Count); int order = 0; foreach (XmlNode termNode in termsNode) { Term t = null; switch (termNode.Name.ToString()) { case XMLNames._E_Text: t = new TextTerm(termNode, template, false); break; case XMLNames._E_Date: t = new DateTerm(termNode, template, false); break; case XMLNames._E_MSO: t = new MSOTerm(termNode, template, false); break; case XMLNames._E_Link: t = new LinkTerm(termNode, template, false); break; case XMLNames._E_Facility: t = new FacilityTerm(termNode, template, false); break; case XMLNames._E_Renewal: t = new RenewalTerm(termNode, managedItem != null, template, false); break; case XMLNames._E_PickList: t = new PickListTerm(termNode, template, false); break; case XMLNames._E_External: t = new ExternalTerm(termNode, managedItem, template, false); break; case XMLNames._E_PlaceHolderAttachments: t = new PlaceHolderAttachments(termNode, template, false); break; case XMLNames._E_PlaceHolderComments: t = new PlaceHolderComments(termNode, template, false); break; default: throw new XmlException(string.Format("Tried to create undefined term type {0}", termNode.Name.ToString())); } t.Order = order++; rtn.Add(t); } //If this is not a load of the ITATSystem terms, then ensure that the collection includes the Attachments and Comments terms. if (template != null) { List<Term> placeholderTerms = FindTermsOfType(rtn, (TermType.PlaceHolderAttachments | TermType.PlaceHolderComments)); if (placeholderTerms == null || (placeholderTerms != null && placeholderTerms.Count == 0)) { //If this is the first time these are being added, then this should be under Basic Security. Term t = new PlaceHolderAttachments(false, template, false); t.TermGroupID = template.BasicSecurityTermGroupID; t.Order = order++; rtn.Add(t); t = new PlaceHolderComments(false, template, false); t.TermGroupID = template.BasicSecurityTermGroupID; t.Order = order++; rtn.Add(t); } else if (placeholderTerms.Count != 2) { throw new Exception(string.Format("Encountered a PlaceHolder term count of {0:D} when 2 were expected", placeholderTerms.Count)); } } return rtn; }
private static Panel CreateFacilitySearchControl(FacilityTerm facilityTerm, bool canEditProfile, SecurityHelper securityHelper) { bool canEdit = canEditProfile; if (facilityTerm.SystemTerm && facilityTerm.OwningFacilityIDs.Count > 0) canEdit = false; Panel pnl = new Panel(); pnl.ID = ControlID(facilityTerm.Name); pnl.CssClass = "NoBorder"; if (canEdit) { FacilityCollection facilities; if (facilityTerm.UseUserSecurity ?? false) if (facilityTerm.IncludeChildren ?? false) facilities = FacilityCollection.FilteredFacilityList(securityHelper.AllUserFacilities, facilityTerm); else facilities = FacilityCollection.FilteredFacilityList(securityHelper.UserFacilities, facilityTerm); else facilities = FacilityCollection.FilteredFacilityList(FacilityCollection.FacilityList(Data.Facility.CorporateFacilityId, facilityTerm.IncludeChildren ?? false), facilityTerm); List<Data.FacilityDataRow> sortedFacilities = facilities.SortedList(facilityTerm.SortField); if (facilityTerm.MultiSelect ?? false) { pnl.Height = Unit.Pixel(4 + 20 * Math.Min(4, facilities.Count)); pnl.Width = Unit.Percentage(100.0); MultiSelectGrid grd = new MultiSelectGrid(); grd.CssClass = "MSG"; grd.ID = pnl.ID + "_lst"; grd.CheckboxColumn = 0; grd.BoundColumns = "FacilityId SapFacilityId FacilityName"; grd.ColumnWidths = "0px 60px 100%"; //grd.DataKeyNames = new string[] { "FacilityId" }; grd.Container = pnl.ID; grd.HeaderContainer = ""; grd.AutoGenerateColumns = false; grd.EnableClickEvent = false; grd.RowHighlighting = false; grd.EnableDoubleClickEvent = false; grd.EnableHeaderClick = false; grd.ShowHeader = false; grd.DataSource = sortedFacilities; grd.DataBind(); pnl.Controls.Add(grd); } else { DropDownList ddl = new DropDownList(); ddl.ID = pnl.ID + "_lst"; ddl.Width = Unit.Parse("100%"); Helper.LoadListControl(ddl, sortedFacilities, "SapIdPlusName", "FacilityId", "", true, "(Select a Facility)", "0"); pnl.Controls.Add(ddl); } } else { Label lbl = new Label(); lbl.Text = string.Format("{0} - {1}", facilityTerm.DisplayValue(XMLNames._TPS_SAPID), facilityTerm.DisplayValue(XMLNames._TPS_FacilityName)); pnl.Controls.Add(lbl); } return pnl; }