示例#1
0
        private void _searchButton_Click
        (
            object sender,
            EventArgs e
        )
        {
            _resultBox.Clear();
            _loginBox.Clear();
            _passwordBox.Clear();

            string ticket = _ticketBox.Text.Trim();

            if (string.IsNullOrEmpty(ticket))
            {
                _resultBox.Text = Environment.NewLine
                                  + Resources.MainForm_NoIogunbTicket;

                return;
            }

            using (IrbisConnection connection = GetConnection())
            {
                string expression = string.Format
                                    (
                    "\"RI={0}\"",
                    ticket
                                    );
                int[] found = connection.Search(expression);
                if (found.Length == 0)
                {
                    _resultBox.Text = Environment.NewLine
                                      + Resources.MainForm_NoReaderFound;
                    _ticketBox.Focus();

                    return;
                }
                if (found.Length != 1)
                {
                    _resultBox.Text = Environment.NewLine
                                      + Resources.MainForm_ManyReadersFound;
                    _ticketBox.Focus();

                    return;
                }

                MarcRecord record      = connection.ReadRecord(found[0]);
                string     description = connection.FormatRecord("@brief", found[0]);
                _resultBox.Text = Environment.NewLine + description;

                RecordField litresField = record.Fields
                                          .GetFirstField(_litresTag);
                if (!ReferenceEquals(litresField, null))
                {
                    _loginBox.Text    = litresField.GetFirstSubFieldValue('a');
                    _passwordBox.Text = litresField.GetFirstSubFieldValue('b');
                }

                _loginBox.Focus();
            }
        }
示例#2
0
        public void RecordField_SetSubField_2()
        {
            const string expected = "SubFieldB";
            RecordField  field    = new RecordField(200)
                                    .AddSubField('a', "SubfieldA");

            field.SetSubField('b', expected);
            Assert.AreEqual(expected, field.GetFirstSubFieldValue('b'));
        }
示例#3
0
        public void RecordField_ReplaceSubField_1()
        {
            const string previous = "SubfieldA";
            const string expected = "SubFieldA1";
            RecordField  field    = new RecordField(200)
                                    .AddSubField('a', previous);

            field.ReplaceSubField('a', previous, expected);
            Assert.AreEqual(expected, field.GetFirstSubFieldValue('a'));
        }
示例#4
0
        public void RecordField_SetValue_2()
        {
            bool save = RecordField.BreakOnValueContainDelimiters;

            RecordField.BreakOnValueContainDelimiters = false;
            try
            {
                RecordField field = new RecordField(200);
                field.SetValue("Value^aSubfieldA^bSubfieldB");
                Assert.AreEqual(2, field.SubFields.Count);
                Assert.AreEqual("SubfieldA", field.GetFirstSubFieldValue('a'));
                Assert.AreEqual("SubfieldB", field.GetFirstSubFieldValue('b'));
                Assert.AreEqual("Value", field.Value);
            }
            finally
            {
                RecordField.BreakOnValueContainDelimiters = save;
            }
        }
示例#5
0
        private bool CheckPodsob
        (
            [NotNull] string rfid,
            [NotNull] PodsobRecord podsob
        )
        {
            Code.NotNull(podsob, "podsob");

            bool usePodsob = podsob.Inventory != 0;

            string place = _placeBox.Text.Trim();

            if (string.IsNullOrEmpty(place))
            {
                WriteLine("Не задано место хранения!");

                return(false);
            }

            if (usePodsob && !string.IsNullOrEmpty(podsob.Ticket) &&
                !podsob.Ticket.SameString(place))
            {
                WriteLine
                (
                    "Место хранения не совпадает: {0}",
                    podsob.Ticket.ToVisibleString()
                );

                return(false);
            }

            if (usePodsob && !string.IsNullOrEmpty(podsob.OnHand))
            {
                WriteLine
                (
                    "Книга числится за {0}",
                    podsob.OnHand.ToVisibleString()
                );

                return(false);
            }

            if (usePodsob && !string.IsNullOrEmpty(podsob.Sigla) &&
                !place.SameString(podsob.Sigla))
            {
                WriteLine
                (
                    "Не совпадает сигла: {0}",
                    podsob.Sigla.ToVisibleString()
                );

                return(false);
            }

            MarcRecord  record = podsob.Record.ThrowIfNull("podsob.Record");
            RecordField field  = record.Fields
                                 .GetField(910)
                                 .FirstOrDefault
                                 (
                f => rfid.SameString(f.GetFirstSubFieldValue('b')) ||
                rfid.SameString(f.GetFirstSubFieldValue('h')) ||
                rfid.SameString(f.GetFirstSubFieldValue('t'))
                                 );

            if (ReferenceEquals(field, null))
            {
                WriteLine("Не найден экземпляр: {0}", rfid);

                return(false);
            }

            string status = field.GetFirstSubFieldValue('a');

            if (!status.SameString("0"))
            {
                WriteLine
                (
                    "Неожиданный статус: {0}",
                    status.ToVisibleString()
                );

                return(false);
            }

            string inventory = field.GetFirstSubFieldValue('b');

            if (string.IsNullOrEmpty(inventory))
            {
                WriteLine
                (
                    "Инвентарный номер: {0}",
                    inventory.ToVisibleString()
                );

                return(false);
            }
            if (usePodsob &&
                !inventory.SameString(podsob.Inventory.ToInvariantString()))
            {
                WriteLine
                (
                    "Инвентарный номер не совпадает: {0} и {1}",
                    podsob.Inventory,
                    inventory
                );

                return(false);
            }

            string fieldPlace = field.GetFirstSubFieldValue('d');

            if (!string.IsNullOrEmpty(fieldPlace) &&
                !place.SameString(fieldPlace))
            {
                WriteLine
                (
                    "Не совпадает место хранения: {0}",
                    fieldPlace.ToVisibleString()
                );

                return(false);
            }

            _goodRecord = new StatusRecord
            {
                Inventory   = podsob.Inventory,
                Record      = record,
                Description = record.Description,
                Field       = field,
                Place       = place
            };

            return(true);
        }