コード例 #1
0
        internal int NewElectronicOrder(BJElectronicExemplarInfo exemplar, ReaderInfo reader)
        {
            int OrderId;

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand();
                command.Connection = connection;
                command.Connection.Open();
                command.CommandText = Queries.NEW_ELECTRONIC_ORDER;
                command.Parameters.Clear();
                command.Parameters.Add("ReaderId", SqlDbType.Int).Value        = reader.NumberReader;
                command.Parameters.Add("BookId", SqlDbType.NVarChar).Value     = exemplar.BookId;
                command.Parameters.Add("Fund", SqlDbType.NVarChar).Value       = exemplar.Fund;
                command.Parameters.Add("StatusName", SqlDbType.NVarChar).Value = CirculationStatuses.ElectronicIssue.Value;
                OrderId = Convert.ToInt32(command.ExecuteScalar());
                string ViewMode = (exemplar.IsExistsLQ) ? "LQ" : "HQ";
                string url      = @"http://catalog.libfl.ru/Bookreader/Viewer?OrderId=" + OrderId + "&view_mode=" + ViewMode;
                command.Parameters.Add("OrderId", SqlDbType.Int).Value      = OrderId;
                command.Parameters.Add("BookUrl", SqlDbType.NVarChar).Value = url;
                command.CommandText = "update Circulation..Orders set BookUrl = @BookUrl where ID = @OrderId";
                command.ExecuteNonQuery();
            }
            this.ChangeOrderStatus(OrderId, CirculationStatuses.ElectronicIssue.Value, 1, 2033, null);
            this.DeleteFromBasket(reader.NumberReader, new List <string>()
            {
                exemplar.BookId
            });

            return(OrderId);
        }
コード例 #2
0
    private void RedirectToNewViewer(string IDMAIN, bool ForAllReader, string vkey, string IDReader)
    {
        string HostName           = HttpContext.Current.Server.MachineName;
        string ElBookViewerServer = "";

        if (HostName == "VGBIL-OPAC")
        {
            ElBookViewerServer = AppSettings.ExternalElectronicBookViewer;
        }
        else
        {
            ElBookViewerServer = AppSettings.IndoorElectronicBookViewer;
        }
        string redirect;

        if (ForAllReader)
        {
            redirect = ElBookViewerServer + "?pin=" + IDMAIN + "&idbase=1&idr=" + IDReader;
        }
        else
        {
            redirect = ElBookViewerServer + "?pin=" + IDMAIN + "&idbase=1&idr=" + IDReader + "&vkey=" + Server.UrlEncode(vkey);
        }

        if (HttpContext.Current.Server.MachineName == "VGBIL-OPAC")
        {
            //bool IsExistsLQ = false;//GetIsExistsLQ(IDMAIN);
            BJElectronicExemplarInfo electronicCopy = new BJElectronicExemplarInfo(Convert.ToInt32(IDMAIN), "BJVVV");
            bool IsExistsLQ = electronicCopy.IsExistsLQ;

            if (IsExistsLQ)
            {
                Response.Redirect(@"http://catalog.libfl.ru/Bookreader/Viewer?bookID=BJVVV_" + IDMAIN + "&view_mode=LQ");
            }
            else
            {
                Response.Redirect(@"http://catalog.libfl.ru/Bookreader/Viewer?bookID=BJVVV_" + IDMAIN + "&view_mode=HQ");
            }
        }
        else
        {
            Response.Redirect(redirect);
        }
    }
コード例 #3
0
ファイル: CirculationLoader.cs プロジェクト: infra-hdc/LIBFL
        internal void NewOrder(BookExemplarBase exemplar, ReaderInfo reader, int orderTypeId, int ReturnInDays, string AlligatBookId, int IssuingDepId)
        {
            switch (orderTypeId)
            {
            case OrderTypes.ElectronicVersion.Id:
                BJElectronicExemplarInfo ElectronicCopy = ((BJElectronicExemplarInfo)exemplar);
                dbWrapper.NewElectronicOrder(exemplar as BJElectronicExemplarInfo, reader);
                break;

            case OrderTypes.PaperVersion.Id:
                dbWrapper.NewOrder(exemplar as BJExemplarInfo, reader, ReturnInDays, CirculationStatuses.OrderIsFormed.Value, AlligatBookId, IssuingDepId);
                break;

            case OrderTypes.InLibrary.Id:
                dbWrapper.NewOrder(exemplar as BJExemplarInfo, reader, ReturnInDays, CirculationStatuses.OrderIsFormed.Value, AlligatBookId, IssuingDepId);
                break;

            case OrderTypes.SelfOrder.Id:
                dbWrapper.NewOrder(exemplar as BJExemplarInfo, reader, ReturnInDays, CirculationStatuses.SelfOrder.Value, AlligatBookId, IssuingDepId);
                break;
            }
        }
コード例 #4
0
ファイル: CirculationInfo.cs プロジェクト: infra-hdc/LIBFL
        public void MakeOrder(MakeOrder request)
        {
            //BookBase book = new BookBase()
            BJBookInfo     book           = BJBookInfo.GetBookInfoByPIN(request.BookId);
            BookSimpleView bookSimpleView = ViewFactory.GetBookSimpleView(request.BookId);

            ReaderInfo reader = ReaderInfo.GetReader(request.ReaderId);
            List <int> acceptableOrderTypes = GetAcceptableOrderTypesForReader(request.BookId, request.ReaderId);

            if (!acceptableOrderTypes.Contains(request.OrderTypeId))
            {
                throw new Exception("C013");
            }

            if (request.OrderTypeId == OrderTypes.ElectronicVersion.Id)
            {
                if (this.ElectronicIssueCount(reader) >= 5)
                {
                    throw new Exception("C001");
                }
                if (this.IsElectronicIssueAlreadyIssued(reader, book))
                {
                    throw new Exception("C002");
                }
                //в простой вид книги искусственно добавляется электронный экземпляр
                if (bookSimpleView.Exemplars.Count - this.GetBusyExemplarsCount(book) <= 0)
                {
                    throw new Exception("C003");
                }
                if (!this.IsTwentyFourHoursPastSinceReturn(reader, book))
                {
                    throw new Exception("C004");
                }
                BJElectronicExemplarInfo exemplar = new BJElectronicExemplarInfo(book.ID, book.Fund);
                //BJExemplarInfo exemplar = BJExemplarInfo(book.ID, book.Fund);
                this.NewOrder(exemplar, reader, request.OrderTypeId, 30);
            }
            else
            {
                if (this.IsBookAlreadyIssuedToReader(book, reader))
                {
                    throw new Exception("C006");
                }

                //ExemplarSimpleView exemplarSimpleView;
                bool IsOrderedSuccessfully = false;
                switch (request.OrderTypeId)
                {
                case OrderTypes.PaperVersion.Id:
                    //приоритет для книг, которые в хранении, чтобы их принесли на кафедру для читателя
                    foreach (BJExemplarInfo e in book.Exemplars)
                    {
                        if (e.Fields["899$a"].MNFIELD == 0)
                        {
                            continue;
                        }
                        if (e.ExemplarAccess.Access == 1000)
                        {
                            if (!this.IsExemplarIssued(e))
                            {
                                this.NewOrder(e, reader, OrderTypes.PaperVersion.Id, 4);
                                IsOrderedSuccessfully = true;
                                break;
                            }
                        }
                    }
                    if (IsOrderedSuccessfully)
                    {
                        break;
                    }
                    //если свободных книг в хранении не осталось, то ищем те, которые в отрытом доступе. это будет самостоятельный заказ
                    foreach (BJExemplarInfo e in book.Exemplars)
                    {
                        if (e.Fields["899$a"].MNFIELD == 0)
                        {
                            continue;
                        }
                        if ((e.ExemplarAccess.Access == 1006))
                        {
                            if (!this.IsExemplarIssued(e))
                            {
                                this.NewOrder(e, reader, OrderTypes.SelfOrder.Id, 4);
                                IsOrderedSuccessfully = true;
                                break;
                            }
                        }
                    }
                    if (IsOrderedSuccessfully)
                    {
                        break;
                    }
                    else
                    {
                        throw new Exception("C009");
                    }

                case OrderTypes.InLibrary.Id:
                    //тут опять приоритет у тех, которые надо заказать из книгохранения перед самостоятельным заказом
                    foreach (BJExemplarInfo e in book.Exemplars)
                    {
                        if (e.Fields["899$a"].MNFIELD == 0)
                        {
                            continue;
                        }
                        if ((e.ExemplarAccess.Access == 1005) || (e.ExemplarAccess.Access == 1012))
                        {
                            if (!this.IsExemplarIssued(e))
                            {
                                this.NewOrder(e, reader, OrderTypes.InLibrary.Id, 4);
                                IsOrderedSuccessfully = true;
                                break;
                            }
                        }
                    }
                    if (IsOrderedSuccessfully)
                    {
                        break;
                    }
                    //если свободных книг в хранении не осталось, то ищем те, которые в отрытом доступе. это будет самостоятельный заказ
                    foreach (BJExemplarInfo e in book.Exemplars)
                    {
                        if (e.Fields["899$a"].MNFIELD == 0)
                        {
                            continue;
                        }
                        if ((e.ExemplarAccess.Access == 1007) || (e.ExemplarAccess.Access == 1014))
                        {
                            if (!this.IsExemplarIssued(e))
                            {
                                this.NewOrder(e, reader, OrderTypes.SelfOrder.Id, 4);
                                IsOrderedSuccessfully = true;
                                break;
                            }
                        }
                    }
                    if (IsOrderedSuccessfully)
                    {
                        break;
                    }
                    else
                    {
                        throw new Exception("C010");
                    }

                //это никогда не придёт
                case OrderTypes.NoActionProvided.Id:
                    throw new Exception("C008");

                case OrderTypes.ClarifyAccess.Id:
                    throw new Exception("C008");

                default:
                    throw new Exception("C008");
                }
            }
        }
コード例 #5
0
ファイル: BJVuFindConverter.cs プロジェクト: infra-hdc/LIBFL
        private void AddExemplarFields(int idmain, VufindDoc result, string fund)
        {
            DataTable table = BJLoader.GetIdDataOfAllExemplars(idmain);

            if (table.Rows.Count == 0)
            {
                if (!BJLoader.IsElectronicCopyExists(idmain))
                {
                    return;//все списано и нет электронных копий.
                }
            }

            int IDMAIN = idmain;

            StringBuilder sb     = new StringBuilder();
            StringWriter  sw     = new StringWriter(sb);
            JsonWriter    writer = new JsonTextWriter(sw);

            writer.WriteStartObject();

            DataTable       exemplar;
            int             cnt         = 1;
            string          CarrierCode = "";
            List <DateTime> ExemplarsCreatedDateList = new List <DateTime>();

            foreach (DataRow iddata in table.Rows)
            {
                exemplar = BJLoader.GetExemplar((int)iddata["IDDATA"]);
                BJExemplarInfo bjExemplar = BJExemplarInfo.GetExemplarByIdData((int)iddata["IDDATA"], this.Fund);
                if (bjExemplar.ExemplarAccess.Access == 1020)//экстремистская литература. не выгружаем такое.
                {
                    continue;
                }

                writer.WritePropertyName(cnt++.ToString());
                writer.WriteStartObject();

                //ExemplarInfo bjExemplar = new ExemplarInfo((int)iddata["IDDATA"]);
                BJExemplarInfo Convolute = null;
                #region FieldAnalyse
                foreach (DataRow r in exemplar.Rows)
                {
                    string code = r["MNFIELD"].ToString() + r["MSFIELD"].ToString();
                    switch (code)
                    {
                    case "899$a":
                        string plain        = r["PLAIN"].ToString();
                        string check        = r["NAME"].ToString();
                        string UL           = KeyValueMapping.UnifiedLocation.GetValueOrDefault(r["NAME"].ToString(), "отсутствует в словаре");
                        int    LocationCode = KeyValueMapping.UnifiedLocationCode.GetValueOrDefault(UL, 2999);

                        writer.WritePropertyName("exemplar_location");
                        writer.WriteValue(LocationCode);
                        result.Location.Add(LocationCode.ToString());
                        break;

                    case "482$a":
                        writer.WritePropertyName("exemplar_interlaced_to");
                        writer.WriteValue(r["PLAIN"].ToString());

                        writer.WritePropertyName("exemplar_convolute");
                        Convolute = BJExemplarInfo.GetExemplarByInventoryNumber(r["PLAIN"].ToString(), this.Fund);
                        if (Convolute == null)
                        {
                            writer.WriteValue("Ошибка заполнения библиографического описания конволюта");
                            errors.Add(this.Fund + "_" + idmain);
                        }
                        else
                        {
                            writer.WriteValue(this.Fund + "_" + Convolute.IDMAIN);
                        }
                        break;

                    case "899$b":    //тут надо оставить только коллекции
                        string fnd = r["PLAIN"].ToString();
                        writer.WritePropertyName("exemplar_collection");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "899$c":
                        writer.WritePropertyName("exemplar_rack_location");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "899$d":
                        writer.WritePropertyName("exemplar_direction_temporary_storage");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "899$j":
                        result.PlacingCipher.Add(r["PLAIN"].ToString());
                        writer.WritePropertyName("exemplar_placing_cipher");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "899$p":
                        writer.WritePropertyName("exemplar_inventory_number");
                        writer.WriteValue(r["PLAIN"].ToString());
                        ExemplarsCreatedDateList.Add((DateTime)r["Created"]);
                        break;

                    case "899$w":
                        writer.WritePropertyName("exemplar_barcode");
                        writer.WriteValue(r["PLAIN"].ToString());
                        ExemplarsCreatedDateList.Add((DateTime)r["Created"]);
                        break;

                    case "899$x":
                        writer.WritePropertyName("exemplar_inv_note");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "921$a":
                        writer.WritePropertyName("exemplar_carrier");
                        CarrierCode = KeyValueMapping.CarrierNameToCode.GetValueOrDefault(r["PLAIN"].ToString(), 3001).ToString();
                        writer.WriteValue(CarrierCode);
                        break;

                    case "921$c":
                        writer.WritePropertyName("exemplar_class_edition");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "921$d":

                        break;

                    //case "922$b":
                    //Exemplar += "Трофей\\Принадлежность к:" + r["PLAIN"].ToString() + "#";
                    //writer.WritePropertyName("exemplar_trophy");
                    // writer.WriteValue(r["PLAIN"].ToString());
                    // break;
                    case "3300$a":
                        writer.WritePropertyName("exemplar_binding_kind");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$b":
                        writer.WritePropertyName("exemplar_binding_age");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$c":
                        writer.WritePropertyName("exemplar_binding_type");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$d":
                        writer.WritePropertyName("exemplar_cover_material");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$e":
                        writer.WritePropertyName("exemplar_material_on_cover");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$f":
                        writer.WritePropertyName("exemplar_spine_material");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$g":
                        writer.WritePropertyName("exemplar_bandages");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$h":
                        writer.WritePropertyName("exemplar_stamping_on_cover");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$i":
                        writer.WritePropertyName("exemplar_embossing_on_spine");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$j":
                        writer.WritePropertyName("exemplar_fittings");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$k":
                        writer.WritePropertyName("exemplar_bugs");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$l":
                        writer.WritePropertyName("exemplar_forth");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$m":
                        writer.WritePropertyName("exemplar_cutoff");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$n":
                        writer.WritePropertyName("exemplar_condition");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$o":
                        writer.WritePropertyName("exemplar_case");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$p":
                        writer.WritePropertyName("exemplar_embossing_on_edge");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;

                    case "3300$r":
                        writer.WritePropertyName("exemplar_binding_note");
                        writer.WriteValue(r["PLAIN"].ToString());
                        break;
                    }
                }
                #endregion
                //Exemplar += "exemplar_id:" + ds.Tables["t"].Rows[0]["IDDATA"].ToString() + "#";
                writer.WritePropertyName("exemplar_id");
                writer.WriteValue(iddata["IDDATA"].ToString());


                result.MethodOfAccess.Add(bjExemplar.ExemplarAccess.MethodOfAccess.ToString());
                writer.WritePropertyName("exemplar_access");
                writer.WriteValue(bjExemplar.ExemplarAccess.Access);
                writer.WritePropertyName("exemplar_access_group");
                writer.WriteValue(KeyValueMapping.AccessCodeToGroup[bjExemplar.ExemplarAccess.Access]);
                result.Exemplars.Add(bjExemplar);

                writer.WriteEndObject();
            }



            //смотрим есть ли гиперссылка и запись в таблице электронных копий
            table = BJLoader.GetHyperLink(IDMAIN);                       //здесь надо сделать так, чтобы просто строка возвращалась
            DataTable hyperLinkTable = BJLoader.GetBookScanInfo(IDMAIN); //здесь надо сделать так, чтобы возвращалась структура сканИнфо

            if (table.Rows.Count == 1 && hyperLinkTable.Rows.Count == 1) //если есть - вставляем отдельным экземпляром. после электронной инвентаризации этот кусок можно будет убрать
            {
                //ExemplarInfo bjExemplar = new ExemplarInfo(-1);
                writer.WritePropertyName(cnt++.ToString());
                writer.WriteStartObject();


                writer.WritePropertyName("exemplar_electronic_copy");
                writer.WriteValue("да");
                writer.WritePropertyName("exemplar_hyperlink");
                writer.WriteValue(table.Rows[0]["PLAIN"].ToString());

                writer.WritePropertyName("exemplar_hyperlink_newviewer");
                writer.WriteValue("/Bookreader/Viewer?bookID=" + result.id + "&view_mode=HQ");
                result.HyperLinkNewViewer.Add("/Bookreader/Viewer?bookID=" + result.id + "&view_mode=HQ");


                BJElectronicExemplarAvailabilityCodes ElectronincAccessLevel = BJLoader.GetElectronicExemplarAccessLevel(IDMAIN, 1);//IDProject = 1 это значит для библиотеки. 2 - для НЭБ

                writer.WritePropertyName("exemplar_copyright");
                writer.WriteValue((ElectronincAccessLevel == BJElectronicExemplarAvailabilityCodes.vloginview) ? "есть" : "нет");
                writer.WritePropertyName("exemplar_old_original");
                writer.WriteValue(((hyperLinkTable.Rows[0]["OldBook"].ToString() == "1") ? "да" : "нет"));
                writer.WritePropertyName("exemplar_PDF_exists");
                writer.WriteValue(((hyperLinkTable.Rows[0]["PDF"].ToString() == "1") ? "да" : "нет"));
                writer.WritePropertyName("exemplar_access");
                writer.WriteValue(
                    (ElectronincAccessLevel == BJElectronicExemplarAvailabilityCodes.vloginview) ?
                    "1002" : "1001");
                //"Для прочтения онлайн необходимо положить в корзину и заказать через личный кабинет");
                //"Для прочтения онлайн необходимо перейти по ссылке"
                writer.WritePropertyName("exemplar_access_group");
                writer.WriteValue((ElectronincAccessLevel == BJElectronicExemplarAvailabilityCodes.vloginview) ? KeyValueMapping.AccessCodeToGroup[1002] : KeyValueMapping.AccessCodeToGroup[1001]);

                writer.WritePropertyName("exemplar_carrier");
                writer.WriteValue("3011");

                result.format.Add("3011");

                writer.WritePropertyName("exemplar_id");
                writer.WriteValue("ebook");//для всех у кого есть электронная копия. АПИ когда это значение встретит, сразу вернёт "доступно"
                writer.WritePropertyName("exemplar_location");
                writer.WriteValue("2030");

                writer.WriteEndObject();
                result.MethodOfAccess.Add("4002");
                BJElectronicExemplarInfo ElExemplar = new BJElectronicExemplarInfo(idmain, fund);//фейковый электронный экземпляр. если его не добавить и если бумажных экземпляров нет, то будет 0 экземпляров и документ не попадёт в индекс, хотя етсь электронный экземпляр
                result.Exemplars.Add(ElExemplar);

                //определить структуру, в которую полностью запись ложится и здесь её проверять, чтобы правильно вычисляемые поля проставить.
            }
            writer.WriteEndObject();
            writer.Flush();
            writer.Close();
            result.ExemplarsJSON = sb.ToString();
            if (ExemplarsCreatedDateList.Count != 0)
            {
                result.NewArrivals = ExemplarsCreatedDateList.Min();
            }
        }