using BS.Shared.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Media; namespace BS.Shared.DataContracts.Compact { public partial class CompactSupportConceptDC : IFilterableDC { private List _CostBearerDetailStrings; public string AddressString { get { return this.Customer.AddressString; } } public string AllCostBearerNames { get { return string.Join(", ", this.CostBearerList.Select(cb => cb.Organisation != null ? cb.Organisation.Name : string.Empty).ToArray()); } } public string ConferenceDateString { get { if (this.ConferenceDate != null) { return this.ConferenceDate.Value.ToShortDateString(); } return null; } } public string CostBearer { get { List cbs = this.CostBearerDetailStrings; if (cbs != null && cbs.Count > 0) { return cbs[0]; } return string.Empty; } } public List CostBearerDetailStrings { get { return this._CostBearerDetailStrings ?? this.CreateCostBearerDetailStrings(); } } public string CustomerFullName { get { return this.Customer != null ? this.Customer.FullName : null; } } public string CustomerName { get { return this.Customer != null ? this.Customer.ToString() : null; } } public string DetailDescription { get { string teamString = ""; if (!this.Customer.RelatedTeams.IsNullOrEmpty()) teamString = " | " + this.Customer.RelatedTeams; if (this.Customer != null && !String.IsNullOrWhiteSpace(this.Customer.CustomerAlias)) { return String.Format("{0} ({1}) {2}{3}", this.Customer, this.Customer.CustomerAlias, this.Customer.DateOfBirthString, teamString); } return this.Customer + " " + this.Customer.DateOfBirthString + teamString; } } public DateTime? EndDate { get { DateTime? maxDate = null; foreach (CompactCostBearerDC cb in this.CostBearerList) { DateTime? end = null; end = cb.ApprovedEndDate; if (end == null) { end = cb.RequestedEndDate; } if (maxDate == null || (end != null && end.Value > maxDate.Value)) { maxDate = end; } } return maxDate; } } public bool ExpiresIn3MonthOrLess { get { bool expires = false; DateTime? date = this.EndDate; if (this.Customer.TerminationDate.HasValue) { if (this.Customer.TerminationDate < date) { date = this.Customer.TerminationDate; } } if (date != null) { expires = date < DateTime.Now.AddMonths(Settings.ApplicationSettings.SupportConceptExpirationLimitInMonths); } return expires; } } public string FilterRelevants { get { // return string.Join(" ", CostBearerDetailStrings.ToArray()) // + " " + string.Join(" ", CustomerReferenceNumbers.ToArray()) // + " " + Customer.ToString(); string fr = string.Join(" ", this.CustomerReferenceNumbers.ToArray()) + " " + DetailDescription; fr += " " + string.Join(" ", this.CostBearerDetailStrings.ToArray()); fr += " " + this.Customer.PostalCode; return fr; } } public string FirstCostBearerDetailString { get { if (this.CostBearerDetailStrings != null && this.CostBearerDetailStrings.Count > 0) { return this.CostBearerDetailStrings[0]; } return null; } } public string FirstName { get { return this.Customer != null ? this.Customer.FirstName : null; } } public string PostalCode { get { return this.Customer.PostalCode; } } public Brush ForegroundBrush { get { if (this.IsAboutToExpire) { if (this.ExpiredBrush == null || this.ExpiredBrush.IsNullOrEmpty()) return Brushes.Red; Color color = (Color)ColorConverter.ConvertFromString(this.ExpiredBrush); return new SolidColorBrush(color); } else if (this.ExpiresIn3MonthOrLess) { if (this.NearlyExpiredBrush == null || this.NearlyExpiredBrush.IsNullOrEmpty()) return Brushes.Yellow; Color color = (Color)ColorConverter.ConvertFromString(this.NearlyExpiredBrush); return new SolidColorBrush(color); } else { return new SolidColorBrush(Color.FromRgb(160, 160, 160)); } } } public string IconPath { get { return @"..\..\Ressources\Icons\IDBadgeDisabled.png"; } } public List InvoiceRecipients { get { var result = new List { this.Customer }; result.AddRange(this.CostBearerList.Cast()); return result; } } public bool IsAboutToExpire { get { bool expires = false; DateTime? date = this.EndDate; if (this.Customer.TerminationDate.HasValue) { if (this.Customer.TerminationDate < date) { date = this.Customer.TerminationDate; } } if (date != null) { expires = date < DateTime.Now.AddDays(7); // TODO anz Tage einstellbar machen } return expires; } } public bool IsArchived { get { return this.ActivationType == ActivationTypeId.Archived; } } public bool IsDeleted { get { return this.ActivationType == ActivationTypeId.Deleted; } } public string LastName { get { return this.Customer != null ? this.Customer.LastName : null; } } public string SimpleDescription { get { return this.ToString(); } } public DateTime? StartDate { get { DateTime? minDate = null; foreach (CompactCostBearerDC cb in this.CostBearerList) { DateTime? start = null; start = cb.ApprovedStartDate; if (start == null) { start = cb.RequestedStartDate; } if (minDate == null || (start != null && start.Value < minDate.Value)) { minDate = start; } } return minDate; } } public bool SupportsActivationType { get { return true; } } public long Version { get { return this.SupportConceptVersion; } set { this.SupportConceptVersion = value; } } public SolidColorBrush FilterableBrush { get { return new SolidColorBrush(Colors.Transparent); } } public override bool Equals(object obj) { if (obj is CompactSupportConceptDC) { CompactSupportConceptDC dc = obj as CompactSupportConceptDC; if (this.CostBearerList != null && this.CostBearerList.Count == 1 && dc.CostBearerList != null && dc.CostBearerList.Count == 1) { return this.CostBearerList[0].CostBearer2SupportConceptOid == dc.CostBearerList[0].CostBearer2SupportConceptOid; } return this.SupportConceptOid == ((CompactSupportConceptDC)obj).SupportConceptOid; } return false; } public override int GetHashCode() { if (this.CostBearerList != null && this.CostBearerList.Count == 1) { return this.GetType().Name.GetHashCode() ^ this.CostBearerList[0].CostBearer2SupportConceptOid.GetHashCode(); } return this.GetType().Name.GetHashCode() ^ this.SupportConceptOid.GetHashCode(); } public override string ToString() { DateTime? start = this.StartDate; DateTime? end = this.EndDate; StringBuilder sb = new StringBuilder(); if (start != null) { sb.Append(start.Value.ToShortDateString()); } if (start != null || end != null) { sb.Append(" - "); } if (end != null) { sb.Append(end.Value.ToShortDateString()); } return sb.ToString(); } private List CreateCostBearerDetailStrings() { this._CostBearerDetailStrings = new List(); foreach (CompactCostBearerDC cb in this.CostBearerList) { DateTime? from = null; DateTime? to = null; from = cb.ApprovedStartDate; to = cb.ApprovedEndDate; if (from == null) { from = cb.RequestedStartDate; } if (to == null) { to = cb.RequestedEndDate; } StringBuilder cbstr = new StringBuilder(); if (from != null && to != null) { cbstr.Append(from.Value.ToShortDateString()); cbstr.Append(" - "); cbstr.Append(to.Value.ToShortDateString()); } if (this.Customer.TerminationDate.HasValue) { String grund = ""; if (!String.IsNullOrEmpty(Customer.TerminationReason)) { grund = ", Begründung: " + Customer.TerminationReason; } cbstr.Append(String.Format(" (Betreuung beendet am: {0:dd.MM.yyyy}{1})", Customer.TerminationDate, grund)); } if (cbstr.Length > 0) { cbstr.Append(" "); } if (cb.Organisation != null) { cbstr.Append(cb.Organisation.Name); } if (cb.ApprovedStartDate == null) { cbstr.Append(" nicht bewilligt!"); } String str = cbstr.ToString(); if (!String.IsNullOrEmpty(cb.CustomerReferenceNumber)) { str = String.Format("{0}, {1}", str, cb.CustomerReferenceNumber); } if (!String.IsNullOrEmpty(cb.Bezeichnung)) { str = String.Format("{0} {1}", cb.Bezeichnung, str); } this._CostBearerDetailStrings.Add(str); } return this._CostBearerDetailStrings; } public String CustomerAndFirstDetailString { get { return String.Format("{0}\n{1}", CustomerName, FirstCostBearerDetailString); } } public string RelatedTeams { get; set; } } }