public static IriProfile[] ParseRecord
        (
            [NotNull] IrbisRecord record
        )
        {
            if (ReferenceEquals(record, null))
            {
                throw new ArgumentNullException("record");
            }

            List <IriProfile> result = new List <IriProfile>();

            foreach (RecordField field in record.Fields
                     .GetField(IriTag))
            {
                IriProfile profile = ParseField(field);
                result.Add(profile);
            }
            return(result.ToArray());
        }
        public static IriProfile ParseField
        (
            [NotNull] RecordField field
        )
        {
            if (ReferenceEquals(field, null))
            {
                throw new ArgumentNullException("field");
            }

            IriProfile result = new IriProfile
            {
                Active      = field.GetFirstSubFieldText('a') == "1",
                ID          = field.GetFirstSubFieldText('b'),
                Title       = field.GetFirstSubFieldText('c'),
                Query       = field.GetFirstSubFieldText('d'),
                Periodicity = int.Parse(field.GetFirstSubFieldText('e')),
                LastServed  = field.GetFirstSubFieldText('f'),
                Database    = field.GetFirstSubFieldText('i')
            };

            return(result);
        }
        public static ReaderInfo Parse
        (
            [JetBrains.Annotations.NotNull] IrbisRecord record
        )
        {
            if (ReferenceEquals(record, null))
            {
                throw new ArgumentNullException("record");
            }

            ReaderInfo result = new ReaderInfo
            {
                FamilyName = record.FM("10"),
                FirstName  = record.FM("11"),
                Patronym   = record.FM("12"),
                Birthdate  = record.FM("21"),
                Ticket     = record.FM("30"),
                Gender     = record.FM("23"),
                Category   = record.FM("50"),
                Address    = ReaderAddress.Parse
                             (
                    record.Fields
                    .GetField("13")
                    .FirstOrDefault()
                             ),
                Work      = record.FM("15"),
                Education = record.FM("20"),
                Email     = record.FM("32"),
                HomePhone = record.FM("17"),
                RegistrationDateString = record.FM("51"),
                Enrolment = record.Fields
                            .GetField("51")
                            .Select(ReaderRegistration.Parse)
                            .ToArray(),
                Registrations = record.Fields
                                .GetField("52")
                                .Select(ReaderRegistration.Parse)
                                .ToArray(),
                EnabledPlaces  = record.FM("56"),
                DisabledPlaces = record.FM("57"),
                Rights         = record.FM("29"),
                Remarks        = record.FM("33"),
                PhotoFile      = record.FM("950"),
                Visits         = record.Fields
                                 .GetField("40")
                                 .Select(VisitInfo.Parse)
                                 .ToArray(),
                Profiles = IriProfile.ParseRecord(record)
            };

            foreach (ReaderRegistration registration in result.Registrations)
            {
                registration.Reader = result;
            }
            foreach (VisitInfo visit in result.Visits)
            {
                visit.Reader = result;
            }

            string fio = result.FamilyName;

            if (!string.IsNullOrEmpty(result.FirstName))
            {
                fio = fio + " " + result.FirstName;
            }
            if (!string.IsNullOrEmpty(result.Patronym))
            {
                fio = fio + " " + result.Patronym;
            }
            result.Fio = fio;

            return(result);
        }