/// <summary> /// Поиск документов в разделе /// </summary> /// <remarks>Поиск выполняется по наличию искомого значения без учета регистра в свойствах документа /// <see cref="DbDocument.DocumentName"/>, <see cref="DbDocument.DocumentShortName"/>, /// <see cref="DbDocument.DocumentNumber"/> и <see cref="DbDocument.DocumentType"/></remarks> /// <param name="section">Раздел БД</param> /// <param name="searchValue">Поисковое значение</param> public static IEnumerable <DbDocument> FindDocuments(IDbSection section, string searchValue) { return(section.Documents.Where(dbDocument => dbDocument.DocumentName.ToUpper().Contains(searchValue.ToUpper()) || dbDocument.DocumentShortName.ToUpper().Contains(searchValue.ToUpper()) || dbDocument.DocumentNumber.ToUpper().Contains(searchValue.ToUpper()) || dbDocument.DocumentType.ToUpper().Contains(searchValue.ToUpper()))); }
/// <summary> /// Возвращает коллекцию документов из ресурсов раздела /// </summary> /// <param name="resourceSet">Ресурсы раздела</param> /// <param name="dbSection">Раздел базы</param> public static IEnumerable <DbDocument> GetDocuments(ResourceSet resourceSet, IDbSection dbSection) { foreach (DictionaryEntry entry in resourceSet) { var resource = entry.Value; var xml = XElement.Parse(resource.ToString()); var document = new DbDocument(xml); if (document.InitCurrentElement(dbSection)) { yield return(document); } } }
/// <summary> /// Инициализация документа из Xml /// </summary> /// <param name="dbSection">Раздел базы</param> internal bool InitCurrentElement(IDbSection dbSection) { try { if (XmlDocument != null) { DataBaseName = dbSection.Name; Id = int.Parse(XmlDocument.Attribute("Id")?.Value ?? string.Empty); DocumentType = XmlDocument.Attribute("DocType")?.Value; DocumentNumber = XmlDocument.Attribute("DocNum")?.Value; DocumentName = XmlDocument.Attribute("DocName")?.Value; DocumentShortName = XmlDocument.Attribute("DocNameShort")?.Value; // Статус документа: 3 варианта - действует, не действует, нет данных var docStatus = DbDocumentStatus.NoData; if (XmlDocument.Attribute("DocStatus") != null) { if (bool.TryParse(XmlDocument.Attribute("DocStatus")?.Value, out var b)) { docStatus = b ? DbDocumentStatus.Valid : DbDocumentStatus.NotValid; } } DocStatus = docStatus; ShortName = XmlDocument.Attribute("ShortName")?.Value; Group = XmlDocument.Attribute("Group")?.Value; Image = XmlDocument.Attribute("Image")?.Value; Rule = XmlDocument.Attribute("Rule")?.Value; var size = XmlDocument.Attribute("Size"); Size = size?.Value ?? "нет"; ItemTypes = GeItemTypes(); // Типы (для отрисовки) var coType = XmlDocument.Attribute("CoType"); CoType = coType?.Value ?? string.Empty; var meType = XmlDocument.Attribute("MeType"); MeType = meType?.Value ?? string.Empty; var maType = XmlDocument.Attribute("MaType"); MaType = maType?.Value ?? string.Empty; var wdType = XmlDocument.Attribute("WdType"); WdType = wdType?.Value ?? string.Empty; var otType = XmlDocument.Attribute("OtType"); OtType = otType?.Value ?? string.Empty; // Массы var mass = XmlDocument.Attribute("Mass"); Mass = mass?.Value ?? string.Empty; var wMass = XmlDocument.Attribute("WMass"); WMass = wMass?.Value ?? string.Empty; var cMass = XmlDocument.Attribute("CMass"); CMass = cMass?.Value ?? string.Empty; var sMass = XmlDocument.Attribute("SMass"); SMass = sMass?.Value ?? string.Empty; // Steel var hasSteelAtt = XmlDocument.Attribute("HasSteel"); HasSteel = hasSteelAtt != null && bool.Parse(hasSteelAtt.Value); SymbolCount = GetSymbolCount(); if (SymbolCount != 0) { Symbols = GetSymbols(SymbolCount); Items = new XElement("Items"); foreach (var xElement in XmlDocument.Elements("Item")) { Items.Add(xElement); } } return(true); } return(false); } catch (Exception) { return(false); } }