public static IQueryable <IContractualDocument> GetContractualDocsWithCounterparty(Parties.ICounterparty counterparty, DateTime?dateFrom, DateTime?dateTo) { if (dateTo != null) { dateTo = dateTo.Value.AddDays(1); } return(ContractualDocuments.GetAll() .Where(r => dateFrom == null || r.RegistrationDate >= dateFrom) .Where(r => dateTo == null || r.RegistrationDate < dateTo) .Where(r => r.Counterparty.Equals(counterparty))); }
public static IQueryable <IContractualDocument> GetFilteredRegisteredDocuments( string number, DateTime?dateFrom, DateTime?dateTo, IDocumentRegister documentRegister, ICaseFile caseFile, IEmployee responsibleEmployee) { if (dateTo != null) { dateTo = dateTo.Value.AddDays(1); } return(ContractualDocuments.GetAll() .Where(l => number == null || l.RegistrationNumber.Contains(number)) .Where(l => dateFrom == null || l.RegistrationDate >= dateFrom) .Where(l => dateTo == null || l.RegistrationDate < dateTo) .Where(l => documentRegister == null || l.DocumentRegister.Equals(documentRegister)) .Where(l => caseFile == null || l.CaseFile.Equals(caseFile)) .Where(l => responsibleEmployee == null || l.ResponsibleEmployee.Equals(responsibleEmployee))); }
/// <summary> /// Агент создания задач по завершению контрольных точек договоров. /// </summary> public virtual void SendTaskForContractMilestones() { var contracts = ContractualDocuments.GetAll().Where(c => c.Milestones.Any()); foreach (var contract in contracts) { if (!Locks.GetLockInfo(contract).IsLocked) { foreach (var milestone in contract.Milestones) { // Создание задач. var daysToFinishWorks = milestone.DaysToFinishWorks != null ? milestone.DaysToFinishWorks.Value : 3; if (milestone.IsCompleted == false && milestone.Deadline < Calendar.Now.AddWorkingDays(milestone.Performer, daysToFinishWorks) && (milestone.Task == null || milestone.Task.Status == Workflow.SimpleTask.Status.Aborted || milestone.Task.Status == Workflow.SimpleTask.Status.Suspended)) { var subject = string.Format(Sungero.Contracts.Resources.ContractMilestoneTaskSubject, milestone.Name, contract.Name); if (subject.Length > Workflow.SimpleTasks.Info.Properties.Subject.Length) { subject = subject.Substring(0, Workflow.SimpleTasks.Info.Properties.Subject.Length); } subject = Docflow.PublicFunctions.Module.TrimQuotes(subject); var attachments = new List <IContractualDocument>() { contract }; if (SupAgreements.Is(contract)) { attachments.Add(ContractualDocuments.As(contract.LeadingDocument)); } var milestoneDeadline = milestone.Deadline.Value.Date < Calendar.GetUserToday(milestone.Performer) ? Calendar.Now.AddWorkingDays(milestone.Performer, 1) : milestone.Deadline.Value; var task = Workflow.SimpleTasks.Create(subject, milestoneDeadline, new IUser[] { milestone.Performer }, attachments); task.NeedsReview = false; var contractTypeName = contract.DocumentKind.DocumentType.Name.ToLower(); task.ActiveText = Sungero.Contracts.Resources.ContractMilestoneTaskTextFormat(CaseConverter.ConvertJobTitleToTargetDeclension(contractTypeName, DeclensionCase.Dative)); if (!string.IsNullOrEmpty(milestone.Note)) { task.ActiveText += "\n" + string.Format(Sungero.Contracts.Resources.ContractMilestoneTaskTextNote, milestone.Note); } var observers = new List <IUser>(); // Проверка на наличие дублей наблюдателей. if (contract.ResponsibleEmployee != null && !Equals(contract.ResponsibleEmployee, milestone.Performer)) { if (Docflow.PublicFunctions.PersonalSetting.GetPersonalSettings(contract.ResponsibleEmployee).MyContractsNotification == true) { observers.Add(contract.ResponsibleEmployee); } var responsibleManager = Docflow.PublicFunctions.Module.Remote.GetManager(contract.ResponsibleEmployee); if (responsibleManager != null && !Equals(responsibleManager, milestone.Performer) && !Equals(responsibleManager, contract.ResponsibleEmployee) && Docflow.PublicFunctions.PersonalSetting.GetPersonalSettings(responsibleManager).MySubordinatesContractsNotification == true) { observers.Add(responsibleManager); } } var performerManager = Docflow.PublicFunctions.Module.Remote.GetManager(milestone.Performer); if (performerManager != null && !Equals(performerManager, milestone.Performer) && Docflow.PublicFunctions.PersonalSetting.GetPersonalSettings(performerManager).MySubordinatesContractsNotification == true && !observers.Contains(performerManager)) { observers.Add(performerManager); } foreach (var observer in observers) { task.Observers.AddNew().Observer = observer; } foreach (var attachment in attachments) { if (!attachment.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.Read, milestone.Performer)) { attachment.AccessRights.Grant(milestone.Performer, DefaultAccessRightsTypes.Read); } if (performerManager != null && !attachment.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.Read, performerManager)) { attachment.AccessRights.Grant(performerManager, DefaultAccessRightsTypes.Read); } } task.Save(); task.Start(); milestone.Task = task; } if (milestone.Task != null) { // Проставление признака завершенности. if (milestone.Task.Status == Workflow.SimpleTask.Status.Completed) { milestone.IsCompleted = true; } // Актуализация сроков заданий. if (milestone.Deadline > milestone.Task.Deadline) { milestone.Task.Deadline = milestone.Deadline; var assignment = Workflow.SimpleAssignments.GetAll().Where(a => Equals(a.Task, milestone.Task)).FirstOrDefault(); if (assignment != null) { assignment.Deadline = milestone.Deadline; } assignment.Save(); } // Прекращение задачи if (milestone.IsCompleted == true) { milestone.Task.Abort(); milestone.Task = null; } } } if (contract.State.IsChanged) { contract.Save(); } } } }
public static List <IContractualDocument> FindContract(string uuid, string number, string date, string businessUnitTIN, string businessUnitTRRC, string counterpartyUuid, string counterpartyTIN, string counterpartyTRRC, string sysid) { // Найти документ среди синхронизированных ранее. if (!string.IsNullOrWhiteSpace(uuid) && !string.IsNullOrWhiteSpace(sysid)) { // Получить GUID типа Договор и доп.соглашение из разработки. var etalonContractTypeGuid = Sungero.Metadata.Services.MetadataSearcher.FindEntityMetadata(typeof(IContract).GetFinalType()).NameGuid.ToString(); var etalonSubAgreementTypeGuid = Sungero.Metadata.Services.MetadataSearcher.FindEntityMetadata(typeof(ISupAgreement).GetFinalType()).NameGuid.ToString(); var extLinks = Commons.PublicFunctions.Module.GetExternalEntityLinks(uuid, sysid) .Where(x => x.EntityType == etalonContractTypeGuid || x.EntityType == etalonSubAgreementTypeGuid) .ToList(); var contractIds = extLinks.Where(x => x.EntityType.ToUpper() == etalonContractTypeGuid.ToUpper()).Select(x => x.EntityId).ToList(); var supAgreeIds = extLinks.Where(x => x.EntityType.ToUpper() == etalonSubAgreementTypeGuid.ToUpper()).Select(x => x.EntityId).ToList(); var existDocuments = new List <IContractualDocument>(); existDocuments.AddRange(Contracts.GetAll().Where(x => contractIds.Contains(x.Id))); existDocuments.AddRange(SupAgreements.GetAll().Where(x => supAgreeIds.Contains(x.Id))); if (existDocuments.Any()) { return(existDocuments); } } var result = ContractualDocuments.GetAll(); // Фильтр по НОР. if (string.IsNullOrWhiteSpace(businessUnitTIN) || string.IsNullOrWhiteSpace(businessUnitTRRC)) { return(new List <IContractualDocument>()); } var businessUnit = Sungero.Company.BusinessUnits.GetAll().FirstOrDefault(x => x.TIN == businessUnitTIN && x.TRRC == businessUnitTRRC); if (businessUnit == null) { return(new List <IContractualDocument>()); } else { result = result.Where(x => Equals(x.BusinessUnit, businessUnit)); } // Фильтр по номеру. if (string.IsNullOrEmpty(number)) { var emptyNumberSynonyms = new List <string> { "б/н", "бн", "б-н", "б.н.", "б\\н" }; result = result.Where(x => emptyNumberSynonyms.Contains(x.RegistrationNumber.ToLower())); } else { result = result.Where(x => x.RegistrationNumber == number); } // Фильтр по дате. DateTime parsedDate; if (!string.IsNullOrWhiteSpace(date) && DateTime.TryParseExact(date, "dd'.'MM'.'yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out parsedDate)) { result = result.Where(x => x.RegistrationDate == parsedDate); } // Фильтр по контрагенту. var counterparties = Sungero.Parties.PublicFunctions.Module.Remote.FindCounterparty(counterpartyUuid, counterpartyTIN, counterpartyTRRC, sysid); if (counterparties.Any()) { result = result.Where(x => counterparties.Contains(x.Counterparty)); } return(result.ToList()); }