/// <summary> /// Проверить является ли таблица штампом и вернуть его тип /// </summary> public static StampType GetStampType(ITableElementWord tableWord) { var hasFullCode = false; var hasShortMarker = false; var hasMainMarkers = false; var hasChangeMarkers = false; foreach (var cell in tableWord.CellsElementWord) { if (CheckFieldType.IsFieldFullCode(cell, tableWord)) { hasFullCode = true; } if (MarkersAdditionalStamp.MarkerContain(cell.TextNoSpaces)) { hasShortMarker = true; } if (MarkersFullStamp.MarkerContain(cell.TextNoSpaces)) { hasMainMarkers = true; } if (MarkersChangeNoticeStamp.MarkerContain(cell.TextNoSpaces)) { hasChangeMarkers = true; } if (hasFullCode && (hasMainMarkers || hasChangeMarkers)) { break; } } return(hasFullCode switch { true when hasMainMarkers => StampType.Full, true when hasShortMarker => StampType.Shortened, _ when hasChangeMarkers => StampType.ChangeNotice, false => StampType.Unknown, _ => StampType.Unknown, });
/// <summary> /// Получить поля штампа /// </summary> private IReadOnlyList <IStampTextFieldWord> GetFields() => TableStamp?.CellsElementWord?. Where(cell => !String.IsNullOrWhiteSpace(cell.TextNoSpaces)). Select(cell => new StampTextFieldWord(cell, CheckFieldType.GetStampFieldType(cell, TableStamp))). Where(field => field.StampFieldType != StampFieldType.Unknown). ToList();
/// <summary> /// Получить класс с ответственным лицом и подписью по строке Word для штампа согласования /// </summary> private IResultAppValue <IStampApprovalChange> GetStampApprovalChangeFromRow(IRowElementWord approvalChangeRow) => CheckFieldType.GetDepartmentType(approvalChangeRow.CellsElement[ApprovalChangeRowIndexes.ACTION_TYPE].MaxLengthWord). Map(departmentType => GetSignatureInformation(approvalChangeRow.CellsElement[ApprovalChangeRowIndexes.RESPONSIBLE_PERSON].MaxLengthWord, PersonId, departmentType, approvalChangeRow.CellsElement[ApprovalChangeRowIndexes.ACTION_TYPE].MaxLengthWord)). ResultValueOk(signature => GetStampApprovalChangeFromFields(approvalChangeRow, signature, _stampIdentifier));