public override bool Execute(ICustomInterpreted element) { bool result = false; var dayRule = GetDayRule(element); if (dayRule != null) { //приоритет int?priority = (element as ModifyDay).Priority; if (priority == null) { priority = dayRule.Template.Priority; } PrintDayTemplate printTemplate = null; //ссылка на печатный шаблон if ((element as ModifyDay).SignNumber != null) { printTemplate = _dbContext.GetPrintDayTemplate(_typiconVersionId, (int)(element as ModifyDay).SignNumber); } var request = CreateRequest(dayRule, element as ModifyDay, (int)priority, printTemplate); _modifiedYear.AddModifiedRule(request); result = true; } return(result); }
public Result Execute(RuleModDefinitionChangedEvent ev) { //1. получаем все шаблоны var printTemplates = ev.Entity.TypiconVersion.PrintDayTemplates; //2. Очищаем все ссылки на PrintDayTemplate для данной сущности printTemplates.ForEach(c => c.ClearLinks(ev.Entity)); //3. Находим ModifyDay, где определен Number var localTemplates = GetLocalPrintTemplates(SerializerRoot, ev.NewDefinition); foreach (var number in localTemplates) { //4. Ищем PrintDayTemplate с таким номером. var found = printTemplates.FirstOrDefault(c => c.Number == number); if (found == null) { //a. Если не находим, создаем новый PrintDayTemplate с пустым файлом found = new PrintDayTemplate() { TypiconVersion = ev.Entity.TypiconVersion, Number = number }; //b. Добавляем его к TypiconVersion, которая указана у сущности ev.Entity.TypiconVersion.PrintDayTemplates.Add(found); } found.AddLink(ev.Entity); } //удаляем Печатные шаблоны Устава, у которых нет ссылок и которые не содержат загруженного файла ev.Entity.TypiconVersion.PrintDayTemplates .RemoveAll(c => c.IsAutoDeletable()); return(Result.Ok()); }
private static void ClonePrintTemplates(TypiconVersion version, TypiconVersion source) { //week version.PrintWeekTemplate = (source.PrintWeekTemplate is PrintWeekTemplate w) ? new PrintWeekTemplate() { DaysPerPage = w.DaysPerPage, PrintFile = w.PrintFile, PrintFileName = w.PrintFileName, TypiconVersion = version } : null; //days version.PrintDayTemplates .AddRange(source.PrintDayTemplates .Select(c => { var r = new PrintDayTemplate() { Name = c.Name, Number = c.Number, PrintFile = c.PrintFile, PrintFileName = c.PrintFileName, Icon = c.Icon, IsRed = c.IsRed, TypiconVersion = version }; //default if (source.PrintDayDefaultTemplate == c) { version.PrintDayDefaultTemplate = r; } return(r); })); }
private ModificationsRuleRequest CreateRequest(DayRule dayRule, ModifyDay md, int priority, PrintDayTemplate printTemplate) { return(new ModificationsRuleRequest() { DayRuleId = dayRule.Id, Date = md.MoveDateCalculated, Priority = priority, ShortName = md.ShortName, AsAddition = md.AsAddition, IsLastName = md.IsLastName, UseFullName = md.UseFullName, PrintDayTemplateId = printTemplate?.Id, Filter = md.Filter }); }