private void AppendOdi(CreateViewModelRequest <KanonasRule> req, KOdiRule defaultOdiRule, int odiNumber) { /* * Ищем KOdiRule для обработки: * Если есть с заданным номером, используем ее. * Иначе если есть defaultOdi, используем ее. * Иначе ничего не делаем. Также ничего не делаем, если нет канонов с таким номером у найденного KOdiRule. */ var odiRuleToHandle = req.Element.Odes.FirstOrDefault(c => c.Number == odiNumber) ?? defaultOdiRule; if (odiRuleToHandle == null || odiRuleToHandle.Kanones.FirstOrDefault(c => c.Odes.Exists(k => k.Number == odiNumber)) == null) { return; } AppenOdiHeader(req, odiNumber); //Проходим по всем канонам и добавляем песню, согласно индекса, если она имеется for (int i = 0; i < odiRuleToHandle.Kanones.Count; i++) { var kanonas = odiRuleToHandle.Kanones[i]; //Признак того, последний ли канон (катавасию не считаем) bool isLastKanonas = odiRuleToHandle.Kanones.IsLastKanonasBeforeKatavasia(i); bool isOdi8 = req.Element.IsOrthros && odiNumber == 8; if (kanonas.Odes.FirstOrDefault(c => c.Number == odiNumber && c.Troparia.Count > 0) is Odi odi) { //Проверяем, данная песнь не Катавасия ли - часть канона, который есть одна из катавасий по вся дни лета bool isKatavasiaKanonas = odi.Troparia.TrueForAll(c => c.Kind == YmnosKind.Katavasia); //bool isKatavasiaKanonas = (i == odiRuleToHandle.Kanones.Count - 1); //Добавляем шапку канона if (isKatavasiaKanonas) { AppendKatavasiaHeader(req, kanonas.Ihos); if (isOdi8) { //добавляет после 8-й песни "Хвалим, благословим" AppendStihosOdi8(req); } } else { AppendKanonasHeader(req, kanonas); } odiView.AppendViewModel(new AppendViewModelOdiRequest() { Odi = odi, IsLastKanonas = isLastKanonas, IsOdi8 = isOdi8, DefaultChorus = kanonas.Stihos }); } } }
public void IAsAdditionElement_IsMatchFail2() { // rule/worship/kanonasrule/odi var element = new KanonasRule("kanonasrule" , new KanonasRuleVMFactory(TestRuleSerializer.Create()) , new WorshipRule("worship", new RootContainer("rule"), TestRuleSerializer.Create().QueryProcessor)); var odi = new KOdiRule("odi", element); element.ChildElements.Add(odi); // rule/worship/kanonasrule/after var toMatch = new KanonasRule("kanonasrule" , new KanonasRuleVMFactory(TestRuleSerializer.Create()) , new WorshipRule("worship", new RootContainer("rule"), TestRuleSerializer.Create().QueryProcessor)); var after = new KAfterRule("after", element); element.ChildElements.Add(after); var result = odi.IsMatch(after); Assert.AreEqual(AsAdditionMatchingResult.Fail, result); }