public void ApplyPacientFilter(Pacient pacient, DateTime?createDate = null) { var listToRemove = new List <ProtocolRecord>(); var today = DateTime.Now; if (createDate.HasValue && (pacient.Birthdate < createDate)) { today = createDate.Value; } var age = pacient.GetAge(today); DateTime bd = pacient.Birthdate.Value; // смотрим по году исполнени¤ if (age >= 3) { if (today.Month < bd.Month) { age++; } if (today.Month == bd.Month) { if (today.Day < bd.Day) { age++; } } } int month = pacient.GetMonthWithNoAge(today); foreach (var protocolRecord in Records) { var type = protocolRecord.Type; // провер¤ем пол switch (type.Gender) { case GenderFor.All: break; case GenderFor.F: if (pacient.Gender == Gender.Male) { listToRemove.Add(protocolRecord); continue; } break; case GenderFor.M: if (pacient.Gender == Gender.Female) { listToRemove.Add(protocolRecord); continue; } break; default: break; } // провер¤ем возраст switch (type.TimeType) { // если фильтр ќ“ возраста case TimeTypes.FromLimit: // если тек. год меньше или (если года совпадают, тек. мес¤ц меньше) if (age < type.TimeFrom.Year || (age == type.TimeFrom.Year && month < type.TimeFrom.Month)) { // тогда удал¤ем listToRemove.Add(protocolRecord); } break; // если фильтр ƒќ возраста case TimeTypes.ToLimit: // если тек. год больше или (если года совпадают, то тек. мес¤ц больше) if (age > type.TimeTo.Year || (age == type.TimeTo.Year && month > type.TimeTo.Month)) { listToRemove.Add(protocolRecord); } break; // если диапазон case TimeTypes.Range: if ( (age < type.TimeFrom.Year || age > type.TimeTo.Year) || (age == type.TimeFrom.Year && month < type.TimeFrom.Month) || (age == type.TimeTo.Year && month > type.TimeTo.Month) ) { listToRemove.Add(protocolRecord); } break; case TimeTypes.All: break; default: break; } } foreach (var protocolRecord in listToRemove) { Records.Remove(protocolRecord); } }
// возвращает ТРУ если пациент удовлетворяет условиям, заданных для типа диспансеризации public bool CheckPacient(Pacient pacient, DateTime?checkDateFrom = null) { // проверяем пол if (Gender.HasValue) { if (Gender.Value != pacient.Gender) { return(false); } } DateTime now = DateTime.Now; if (checkDateFrom.HasValue) { now = checkDateFrom.Value; } DateTime bd = pacient.Birthdate.Value; // смотрим по году исполнения int age = pacient.GetAge(now); if (age >= NoMonthAge) { if (now.Month < bd.Month) { age++; } if (now.Month == bd.Month) { if (now.Day < bd.Day) { age++; } } } bool checkMonth = age < NoMonthAge; int month = 0; if (checkMonth) { // от 0 до 1 - 1 месячный, от 1 до 2 - 2 месячный month = pacient.GetMonthWithNoAge(now); } switch (Type) { case DispType.ProfOsmotrAdult: break; case DispType.DOGVN1: // проверяем возраст if (age != Age) { return(false); } break; case DispType.DOGVN2: break; case DispType.ProfOsmotrChild: // проверяем возраст if (age != Age) { return(false); } else { // проверяем месяц (проверка по месяцам актуальна когда возраст меньше трех) if (checkMonth) { if (Age == 0 && month != Month) { return(false); } if (Age == 1) { // по месяцам 0, 3, 6, 9: // например, для пациента возраста 1 год и 2 месяца будет применяться шаблон 1 год и 0 месяц // 1 год и 8 месяц - 1 год и 6 месяцев if (month < Month || Month + 3 < month) { return(false); } } if (Age == 2) { // по месяцам 0, 6 if (month < Month || Month + 6 < month) { return(false); } } } } break; case DispType.PreProfOsmotrChild: break; case DispType.PeriodProfOsmotrChild: // проверяем возраст if (age != Age) { return(false); } else { // проверяем месяц if (checkMonth) { if (month != Month) { return(false); } } } break; case DispType.DispStacionarChildOrphan1: // проверяем возраст if (age != Age) { return(false); } break; case DispType.DispStacionarChildOrphan12: break; case DispType.DispChildOrphan1: // проверяем возраст if (age != Age) { return(false); } break; case DispType.DispChildOrphan12: break; default: throw new ArgumentOutOfRangeException(); } return(true); }