private DateTime GetNextComplianceDate(MaintenanceCheckComplianceGroup complianceGroup) { if ((complianceGroup.GetMaxIntervalCheck()) == null) { return(DateTimeExtend.GetCASMinDateTime()); } complianceGroup.Sort(); DateTime nextDate = DateTimeExtend.GetCASMinDateTime(); if (complianceGroup.Grouping) { MaintenanceCheck lastOrMinCheck = complianceGroup.GetLastComplianceChecks().FirstOrDefault() != null ? complianceGroup.GetLastComplianceChecks().First() : complianceGroup.GetMinIntervalCheck(); if (lastOrMinCheck.Interval.Days != null && lastOrMinCheck.Interval.Days > 0) { nextDate = lastOrMinCheck.NextPerformances.Count != 0 && lastOrMinCheck.NextPerformances[0].PerformanceDate != null ? lastOrMinCheck.NextPerformances[0].PerformanceDate.Value : lastOrMinCheck.LastPerformance != null ? lastOrMinCheck.LastPerformance.RecordDate.AddDays(Convert.ToInt32(lastOrMinCheck.Interval.Days)) : lastOrMinCheck.ParentAircraft.ManufactureDate.AddDays(Convert.ToInt32(lastOrMinCheck.Interval.Days)); } else { nextDate = lastOrMinCheck.NextPerformances.Count != 0 && lastOrMinCheck.NextPerformances[0].PerformanceDate != null ? lastOrMinCheck.NextPerformances[0].PerformanceDate.Value : DateTimeExtend.GetCASMinDateTime(); } } else { foreach (MaintenanceCheck maintenanceCheck in complianceGroup.Checks) { if (maintenanceCheck.Interval.Days != null && maintenanceCheck.Interval.Days > 0) { nextDate = maintenanceCheck.NextPerformances.Count != 0 && maintenanceCheck.NextPerformances[0].PerformanceDate != null ? maintenanceCheck.NextPerformances[0].PerformanceDate.Value : maintenanceCheck.LastPerformance != null ? maintenanceCheck.LastPerformance.RecordDate.AddDays(Convert.ToInt32(maintenanceCheck.Interval.Days)) : maintenanceCheck.ParentAircraft.ManufactureDate.AddDays(Convert.ToInt32(maintenanceCheck.Interval.Days)); } else { nextDate = maintenanceCheck.NextPerformanceDate != null ? maintenanceCheck.NextPerformanceDate.Value : DateTimeExtend.GetCASMinDateTime(); } } } return(nextDate); }
private void FindLastCheck() { MaintenanceCheckGroupCollection[] groupByType = CheckItems.GroupingCheckByType(Schedule) .OrderByDescending(g => g.GetLastComplianceDate()) .ToArray(); MaintenanceCheckGroupCollection checkGroupCollectionOrdered = new MaintenanceCheckGroupCollection(groupByType.SelectMany(gbt => gbt.ToArray()) .OrderByDescending(gbt => gbt.LastComplianceGroupDate)); foreach (MaintenanceCheckGroupByType checkGroupByType in checkGroupCollectionOrdered) { string lastCheck = "", lastComplianceDate = "", lastComplianceLl = ""; DateTime last = DateTimeExtend.GetCASMinDateTime(); if (checkGroupByType.Grouping) { //Вычисление последней даты выполнения чеков данного типа //A, B или C foreach (MaintenanceCheck checkItem in checkGroupByType.Checks.Where(c => c.Schedule == Schedule)) { if (checkItem.LastPerformance != null && last < checkItem.LastPerformance.RecordDate) { last = checkItem.LastPerformance.RecordDate; } } //Если чеки с данным типом (A, B или C) еще не выполнялись //то производится переход на след. тип. чека if (last <= DateTimeExtend.GetCASMinDateTime() || last <= checkGroupCollectionOrdered.GetLastComplianceDateOfCheckWithHigherType(checkGroupByType.Schedule, checkGroupByType.Resource, checkGroupByType.Grouping, checkGroupByType.CheckType)) { continue; } //lastGroupComplianceDates[checkGroupByType.Resource] = last; //Если чеки с данным типом выполнялись //то собирается група из чеков данного типа (A, B или C), //чья дата выполнения равна найденой MaintenanceCheckComplianceGroup lastComplianceGroup = new MaintenanceCheckComplianceGroup(Schedule); foreach (MaintenanceCheck checkItem in checkGroupByType.Checks.Where(c => c.Schedule == Schedule)) { if (checkItem.LastPerformance != null && last == checkItem.LastPerformance.RecordDate) { lastComplianceGroup.Checks.Add(checkItem); if (lastComplianceGroup.CheckCycle < checkGroupByType.CheckCycle) { lastComplianceGroup.CheckCycle = checkGroupByType.CheckCycle; } if (lastComplianceGroup.GroupComplianceNum < checkItem.LastPerformance.NumGroup) { lastComplianceGroup.GroupComplianceNum = checkItem.LastPerformance.NumGroup; } } } MaintenanceCheck maxIntervalCheckInGroup; //Поиск старшего чека данного типа в собранной группе //Если его нет, переход к след. типу чеков if ((maxIntervalCheckInGroup = lastComplianceGroup.GetMaxIntervalCheck()) == null) { continue; } //Упорядочивание собранной группы lastComplianceGroup.Sort(); string prefix = lastComplianceGroup.GetComplianceGroupName(); lastComplianceDate = UsefulMethods.NormalizeDate(last); lastComplianceLl = maxIntervalCheckInGroup.LastPerformance.OnLifelength.ToString(); //название чеков lastCheck = prefix; if (maxIntervalCheckInGroup.ParentAircraft != null && maxIntervalCheckInGroup.ParentAircraft.MSG < MSG.MSG3) { lastCheck += " ("; lastCheck += lastComplianceGroup.Checks.Aggregate(lastCheck, (current, maintenanceCheck) => current + (maintenanceCheck.Name + " ")); lastCheck += ") "; } Action <string, string, string> addLast = AddLastCheckItem; if (InvokeRequired) { Invoke(addLast, lastCheck, lastComplianceDate, lastComplianceLl); } else { addLast.Invoke(lastCheck, lastComplianceDate, lastComplianceLl); } } else { foreach (MaintenanceCheck checkItem in checkGroupByType.Checks.Where(c => c.Schedule == Schedule)) { if (checkItem.LastPerformance != null) { lastComplianceDate = UsefulMethods.NormalizeDate(checkItem.LastPerformance.RecordDate); lastComplianceLl = checkItem.LastPerformance.OnLifelength.ToString(); //название чеков lastCheck = checkItem.Name; } Action <string, string, string> addLast = AddLastCheckItem; if (InvokeRequired) { Invoke(addLast, lastCheck, lastComplianceDate, lastComplianceLl); } else { addLast.Invoke(lastCheck, lastComplianceDate, lastComplianceLl); } } } } }