public static List <IPowerOfAttorney> GetActivePowerOfAttorneys(Company.IEmployee employee, DateTime?date) { return(PowerOfAttorneys .GetAll(p => Equals(p.IssuedTo, employee) && (p.RegistrationDate == null || p.RegistrationDate <= date) && date <= p.ValidTill && (p.LifeCycleState == LifeCycleState.Draft || p.LifeCycleState == LifeCycleState.Active)) .ToList()); }
/// <summary> /// Агент рассылки уведомления об окончании срока действия доверенностей. /// </summary> public virtual void SendNotificationForExpiringPowerOfAttorney() { var createTableCommand = Queries.Module.CreateTableForExpiringPowerOfAttorney; Sungero.Docflow.PublicFunctions.Module.ExecuteSQLCommand(createTableCommand); var notifyParams = PublicFunctions.Module.GetDefaultExpiringDocsNotificationParams(Constants.Module.ExpiringPowerOfAttorneyLastNotificationKey, Constants.Module.ExpiringPowerOfAttorneyTableName); var alreadySentDocs = PublicFunctions.Module.GetDocumentsWithSendedTask(notifyParams.ExpiringDocTableName); var powerOfAttorneyIds = PowerOfAttorneys.GetAll() .Where(p => !alreadySentDocs.Contains(p.Id)) .Where(p => p.LifeCycleState == Sungero.Docflow.PowerOfAttorney.LifeCycleState.Active || p.LifeCycleState == Sungero.Docflow.PowerOfAttorney.LifeCycleState.Draft) .Where(p => p.IssuedTo != null || p.PreparedBy != null) .Where(p => notifyParams.LastNotificationReserve.AddDays(p.DaysToFinishWorks.HasValue ? p.DaysToFinishWorks.Value : 0) < p.ValidTill && p.ValidTill <= notifyParams.TodayReserve.AddDays(p.DaysToFinishWorks.HasValue ? p.DaysToFinishWorks.Value : 0)) .Where(p => p.DaysToFinishWorks == null || p.DaysToFinishWorks <= Constants.Module.MaxDaysToFinish) .Select(p => p.Id) .ToList(); Logger.DebugFormat("Powers of Attorney to send notification count = {0}.", powerOfAttorneyIds.Count()); for (int i = 0; i < powerOfAttorneyIds.Count(); i = i + notifyParams.BatchCount) { var result = Transactions.Execute( () => { var powerOfAttorneyPart = PowerOfAttorneys.GetAll(p => powerOfAttorneyIds.Contains(p.Id)).Skip(i).Take(notifyParams.BatchCount).ToList(); powerOfAttorneyPart = powerOfAttorneyPart.Where(p => notifyParams.LastNotification.ToUserTime(p.PreparedBy ?? p.IssuedTo).AddDays(p.DaysToFinishWorks.HasValue ? p.DaysToFinishWorks.Value : 0) < p.ValidTill && p.ValidTill <= Calendar.GetUserToday(p.PreparedBy ?? p.IssuedTo).AddDays(p.DaysToFinishWorks.HasValue ? p.DaysToFinishWorks.Value : 0)) .ToList(); if (!powerOfAttorneyPart.Any()) { return; } PublicFunctions.Module.ClearIdsFromExpiringDocsTable(notifyParams.ExpiringDocTableName, powerOfAttorneyPart.Select(x => x.Id).ToList()); PublicFunctions.Module.AddExpiringDocumentsToTable(notifyParams.ExpiringDocTableName, powerOfAttorneyPart.Select(x => x.Id).ToList()); foreach (var powerOfAttorney in powerOfAttorneyPart) { var subject = Docflow.PublicFunctions.Module.TrimQuotes(Resources.ExpiringPowerOfAttorneySubjectFormat(powerOfAttorney.DisplayValue)); if (subject.Length > Workflow.SimpleTasks.Info.Properties.Subject.Length) { subject = subject.Substring(0, Workflow.SimpleTasks.Info.Properties.Subject.Length); } var activeText = Docflow.PublicFunctions.Module.TrimQuotes(Resources.ExpiringPowerOfAttorneyTextFormat(powerOfAttorney.ValidTill.Value.ToShortDateString(), powerOfAttorney.DisplayValue)); var performers = Functions.Module.GetNotificationPerformers(powerOfAttorney); performers = performers.Where(p => p != null).Distinct().ToList(); var attachments = new List <Sungero.Content.IElectronicDocument>(); attachments.Add(powerOfAttorney); notifyParams.TaskParams.Document = powerOfAttorney; notifyParams.TaskParams.Subject = subject; notifyParams.TaskParams.ActiveText = activeText; notifyParams.TaskParams.Performers = performers; notifyParams.TaskParams.Attachments = attachments; PublicFunctions.Module.TrySendExpiringDocNotifications(notifyParams); } }); } if (PublicFunctions.Module.IsAllNotificationsStarted(notifyParams.ExpiringDocTableName)) { PublicFunctions.Module.UpdateLastNotificationDate(notifyParams); PublicFunctions.Module.ClearExpiringTable(notifyParams.ExpiringDocTableName, false); } }