예제 #1
0
파일: Form1.cs 프로젝트: infra-hdc/LIBFL
        private void button2_Click(object sender, EventArgs e)
        {
            string         connectionString = "Data Source=192.168.4.25,1443;Initial Catalog=BJVVV_Test;Persist Security Info=True;User ID=sasha;Password=Corpse536;Connect Timeout=1200";
            SqlConnection  connection       = new SqlConnection(connectionString);
            SqlDataAdapter da = new SqlDataAdapter();

            da.SelectCommand             = new SqlCommand();
            da.SelectCommand.Connection  = connection;
            da.SelectCommand.CommandText = "select * from BookAddInf..ScanInfo where IDBase = 1";
            DataTable table = new DataTable();

            da.Fill(table);
            foreach (DataRow row in table.Rows)
            {
                BJBookInfo book = BJBookInfo.GetBookInfoByPIN((int)row["IDBook"], "BJVVV");
                ElectronicExemplarInserter ec         = new ElectronicExemplarInserter((int)row["IDBook"], "BJVVV_Test", "BJVVV");
                ElectronicExemplarType     AccessType = ElectronicExemplarType.Order;
                if (book.DigitalCopy.ExemplarAccess.Access == 1001)
                {
                    AccessType = ElectronicExemplarType.Free;
                }
                if (book.DigitalCopy.ExemplarAccess.Access == 1002)
                {
                    AccessType = ElectronicExemplarType.Order;
                }
                if (book.DigitalCopy.ExemplarAccess.Access == 1003)
                {
                    AccessType = ElectronicExemplarType.Indoor;
                }
                ec.InsertElectronicExemplar(AccessType);
            }
        }
예제 #2
0
        public void InsertIntoUserBasket(ImpersonalBasket request)
        {
            if (request.BookIdArray.Count == 0)
            {
                return;
            }
            List <BasketInfo> UserBasket = new List <BasketInfo>();

            //ищем в списке аллигаты. если такие есть, то заменяем их на конволют.
            foreach (string pin in request.BookIdArray)
            {
                //("BJVVV_1444973");   <---Аллигат
                BasketInfo item = new BasketInfo();
                item.ReaderId = request.ReaderId;
                BJBookInfo            book      = BJBookInfo.GetBookInfoByPIN(pin);
                List <BJExemplarInfo> exemplars = book.Exemplars.ConvertAll(x => (BJExemplarInfo)x);
                BJExemplarInfo        convolute = exemplars.FirstOrDefault(x => x.ConvolutePin != null);
                if (convolute != null)
                {
                    item.BookId        = convolute.ConvolutePin;
                    item.AlligatBookId = book.Id;
                }
                else
                {
                    item.BookId = book.Id;
                }
                UserBasket.Add(item);
            }
            //request.BookIdArray = PinsWithConvoluteID;
            loader.InsertIntoUserBasket(UserBasket);
        }
예제 #3
0
        public static BJExemplarInfo GetExemplarByBar(string bar)
        {
            BJBookInfo     book     = BJBookInfo.GetBookInfoByBAR(bar);
            BJExemplarInfo exemplar = (BJExemplarInfo)book.Exemplars.Find(x => ((BJExemplarInfo)x).Fields["899$w"].ToString() == bar);

            return(exemplar);
        }
예제 #4
0
 private bool CheckLimitations(BJBookInfo book, ReaderInfo reader)
 {
     if (reader.IsFiveElBooksIssued())
     {
         Panel1.Visible         = true;
         Label1.Text            = "Нельзя взять более пяти электронных книг. Сдайте в личном кабинете любую электронную книгу и попробуйте снова.";
         HyperLink1.NavigateUrl = @"https://catalog.libfl.ru/Record/" + book.Fund + "_" + book.ID;
         return(true);
     }
     if (book.Exemplars.Count - book.GetBusyElectronicExemplarCount() <= 0)
     {
         if ((book.Exemplars.Count == 0) && (book.IsExistsDigitalCopy))
         {
             //если сюда попали, то значит есть только электронная копия. текущий код выдаёт сколько хочешь раз. как надо пока непонятно
             return(false);
         }
         Panel1.Visible = true;
         Label1.Text    = "Все экземпляры выданы. Нельзя выдать электронных экземпляров больше чем бумажных, так как это нарушит авторское право." +
                          " Ближайшая свободная дата " + book.GetNearestFreeDateForElectronicIssue().ToString("dd.MM.yyyy") + ". Попробуйте заказать в указанную дату.";
         HyperLink1.NavigateUrl = @"https://catalog.libfl.ru/Record/" + book.Fund + "_" + book.ID;
         return(true);
     }
     if (!book.IsOneDayPastAfterReturn(reader.NumberReader))
     {
         Panel1.Visible         = true;
         Label1.Text            = "Вы не можете заказать эту электронную копию, поскольку запрещено заказывать ту же копию, если не прошли сутки с момента её возврата. Попробуйте на следующий день.";
         HyperLink1.NavigateUrl = @"https://catalog.libfl.ru/Record/" + book.Fund + "_" + book.ID;
         return(true);
     }
     return(false);
 }
예제 #5
0
파일: Form1.cs 프로젝트: infra-hdc/LIBFL
        private void button2_Click(object sender, EventArgs e)
        {
            BJBookInfo          b      = BJBookInfo.GetBookInfoByPIN(1456705, "BJVVV");
            BookJSONShortViewer viewer = new BookJSONShortViewer();

            tbResponse.Text = viewer.GetView(b);
        }
예제 #6
0
        private void bShowHistory_Click(object sender, EventArgs e)
        {
            dgOrderFlow.Rows.Clear();
            lbOrders.Items.Clear();

            //GetBookInfoByInventoryNumber - это полный шлак а не метод... переписать, чтобы сам искал по всех фондах!
            BJBookInfo book = BJBookInfo.GetBookInfoByInventoryNumber(tbInvNumber.Text, "BJVVV");

            if (book == null)
            {
                book = BJBookInfo.GetBookInfoByInventoryNumber(tbInvNumber.Text, "REDKOSTJ");
            }
            if (book == null)
            {
                book = BJBookInfo.GetBookInfoByInventoryNumber(tbInvNumber.Text, "BJACC");
            }
            if (book == null)
            {
                book = BJBookInfo.GetBookInfoByInventoryNumber(tbInvNumber.Text, "BJFCC");
            }
            if (book == null)
            {
                book = BJBookInfo.GetBookInfoByInventoryNumber(tbInvNumber.Text, "BJSCC");
            }
            if (book == null)
            {
                label3.Text = "Не найдено";
                lbOrders.Items.Clear();
                dgOrderFlow.Rows.Clear();
                MessageBox.Show("Инвентарный номер не найден ни в одной базе!");
                return;
            }

            BJExemplarInfo exemplar = (BJExemplarInfo)book.Exemplars.Find(x => ((BJExemplarInfo)x).Fields["899$p"].ToString() == tbInvNumber.Text);

            if (exemplar == null)
            {
                label3.Text = "Не найдено";
                lbOrders.Items.Clear();
                dgOrderFlow.Rows.Clear();
                MessageBox.Show("Инвентарный номер не найден ни в одной базе!");
                return;
            }
            else
            {
                label3.Text = book.Fields["200$a"].ToString();
                CirculationInfo  ci     = new CirculationInfo();
                List <OrderInfo> orders = ci.GetOrders(exemplar.IdData, exemplar.Fund);
                lbOrders.Items.Clear();
                foreach (OrderInfo order in orders)
                {
                    lbOrders.Items.Add(order.OrderId);
                }
                if (lbOrders.Items.Count != 0)
                {
                    lbOrders.SelectedIndex = 0;
                }
            }
        }
예제 #7
0
        public string GetView(BJBookInfo book)
        {
            BJVuFindConverter converter = new BJVuFindConverter(book.Fund);
            VufindDoc         vfDoc     = converter.CreateVufindDocument(book.ID);
            string            json      = JsonConvert.SerializeObject(book, Formatting.Indented);

            return(json);
        }
예제 #8
0
        internal List <BJBookInfo> GetBooksByAct(string ActNumber)
        {
            DataTable         table  = db.GetBooksByAct(ActNumber);
            List <BJBookInfo> result = new List <BJBookInfo>();

            foreach (DataRow row in table.Rows)
            {
                BJBookInfo b = BJBookInfo.GetBookInfoByPIN((int)row["IDMAIN"], Fund);
                result.Add(b);
            }
            return(result);
        }
예제 #9
0
 internal DataTable IsBookAlreadyIssuedToReader(BJBookInfo book, ReaderInfo reader)
 {
     using (SqlConnection connection = new SqlConnection(connectionString))
     {
         SqlDataAdapter dataAdapter = new SqlDataAdapter(Queries.IS_BOOK_ALREADY_ISSUED_TO_READER, connection);
         dataAdapter.SelectCommand.Parameters.Add("IDReader", SqlDbType.Int).Value    = reader.NumberReader;
         dataAdapter.SelectCommand.Parameters.Add("BookID", SqlDbType.NVarChar).Value = book.Id;
         DataTable table = new DataTable();
         int       cnt   = dataAdapter.Fill(table);
         return(table);
     }
 }
예제 #10
0
        internal DataTable GetBusyExemplarsCount(BJBookInfo book)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlDataAdapter dataAdapter = new SqlDataAdapter(Queries.GET_BUSY_EXEMPLARS_COUNT, connection);
                dataAdapter.SelectCommand.Parameters.Add("BookId", SqlDbType.NVarChar).Value = book.Id;

                DataTable table = new DataTable();
                int       cnt   = dataAdapter.Fill(table);
                return(table);
            }
        }
예제 #11
0
        internal DataTable IsTwentyFourHoursPastSinceReturn(ReaderInfo reader, BJBookInfo book)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlDataAdapter dataAdapter = new SqlDataAdapter(Queries.IS_TWENTYFOUR_HOURS_PAST_SINCE_RETURN, connection);
                dataAdapter.SelectCommand.Parameters.Add("BookId", SqlDbType.NVarChar).Value = book.Id;
                dataAdapter.SelectCommand.Parameters.Add("ReaderId", SqlDbType.Int).Value    = reader.NumberReader;

                DataTable table = new DataTable();
                int       cnt   = dataAdapter.Fill(table);
                return(table);
            }
        }
예제 #12
0
        internal BJBookInfo GetBookInfoByPIN(int pin)
        {
            DataTable  table  = dbWrapper.GetBJRecord(pin);
            BJBookInfo result = new BJBookInfo();

            result.Id   = $"{Fund}_{pin}";
            result.ID   = pin;
            result.Fund = Fund;
            //BJExemplarInfo exemplar = new BJExemplarInfo(0);
            int CurrentIdData = 0;

            foreach (DataRow row in table.Rows)
            {
                if ((int)row["IDBLOCK"] != 260)
                {
                    if ((int)row["IDBLOCK"] == 270)//если есть гиперссылка
                    {
                        result.DigitalCopy = new BJElectronicExemplarInfo(pin, Fund);
                    }
                    else
                    {
                        result.Fields.AddField(row["PLAIN"].ToString(), (int)row["MNFIELD"], row["MSFIELD"].ToString());
                    }
                }
                else
                {
                    if (CurrentIdData != (int)row["IDDATA"])
                    {
                        CurrentIdData = (int)row["IDDATA"];
                        result.Exemplars.Add(BJExemplarInfo.GetExemplarByIdData(CurrentIdData, Fund));
                        //exemplar = new BJExemplarInfo((int)row["IDDATA"]);
                        //exemplar.Fields.AddField(row["PLAIN"].ToString(), (int)row["MNFIELD"], row["MSFIELD"].ToString());
                    }
                    else
                    {
                        //exemplar.Fields.AddField(row["PLAIN"].ToString(), (int)row["MNFIELD"], row["MSFIELD"].ToString());
                    }
                }
            }
            table = dbWrapper.GetRTF(pin);
            if (table.Rows.Count != 0)
            {
                RichTextBox rtb = new RichTextBox();
                rtb.Rtf    = table.Rows[0][0].ToString();
                result.RTF = rtb.Text;
                rtb.Dispose();
            }
            return(result);
        }
예제 #13
0
        private string GetTitle(BJBookInfo book)
        {
            string author = book.Fields["700$a"].ToString();
            string title  = book.Fields["200$a"].ToString();

            if (author == string.Empty)
            {
                title = book.Fields["200$a"].ToString();
            }
            else
            {
                title = $"{author} / {title}";
            }
            return(title);
        }
예제 #14
0
        internal DataTable IsElectronicIssueAlreadyIssued(ReaderInfo reader, BJBookInfo book)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlDataAdapter dataAdapter = new SqlDataAdapter(Queries.IS_ELECTRONIC_ISSUE_ALREADY_ISSUED, connection);
                dataAdapter.SelectCommand.Parameters.Add("IDReader", SqlDbType.Int).Value    = reader.NumberReader;
                dataAdapter.SelectCommand.Parameters.Add("BookId", SqlDbType.NVarChar).Value = book.Id;
                dataAdapter.SelectCommand.Parameters.Add("BookIdInt", SqlDbType.Int).Value   = book.ID;
                dataAdapter.SelectCommand.Parameters.Add("BASE", SqlDbType.Int).Value        = (book.Fund == "BJVVV")? 1 : 2;

                DataTable table = new DataTable();
                int       cnt   = dataAdapter.Fill(table);
                return(table);
            }
        }
예제 #15
0
        private void GenerateAct(List <BJExemplarInfo> Exemplars, string ActNumber)
        {
            if (comboBox1.Text == string.Empty)
            {
                MessageBox.Show("Выберите отдел фондодержателя!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            if (comboBox2.Text == string.Empty)
            {
                MessageBox.Show("Выберите год!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            KeyValuePair <string, string> item = (KeyValuePair <string, string>)comboBox3.SelectedItem;
            string ActNumberSort = item.Key.ToString();

            using (ExcelWork excel = new ExcelWork(ActNumber))
            {
                try
                {
                    excel.Init();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }

                int RowIndex = 0;
                int Cost     = 0;
                //foreach (BJBookInfo b in books)
                {
                    foreach (BJExemplarInfo exemplar in Exemplars)
                    {
                        if (exemplar.Fields["929$b"] != null)
                        {
                            //if (exemplar.Fields["929$b"].ToString() == ActNumber)
                            {
                                BJBookInfo b = BJBookInfo.GetBookInfoByPIN(exemplar.IDMAIN, exemplar.Fund);
                                RowIndex++;
                                excel.InsertExemplar(exemplar, b, RowIndex);
                            }
                        }
                    }
                }
                excel.InsertDocumentHeader(RowIndex, comboBox1.Text, Cost);
                MessageBox.Show("Формирование акта успешно завершено!");
            }
        }
예제 #16
0
        internal BARType CheckBAR(string data)
        {
            BJBookInfo book = BJBookInfo.GetBookInfoByBAR(data);

            if (book != null)
            {
                return(BARType.Book);
            }
            ReaderInfo reader = ReaderInfo.GetReaderByBar(data);

            if (reader != null)
            {
                return(BARType.Reader);
            }
            return(BARType.NotExist);
        }
예제 #17
0
        internal bool IsTwentyFourHoursPastSinceReturn(ReaderInfo reader, BJBookInfo book)
        {
            DataTable table = dbWrapper.IsTwentyFourHoursPastSinceReturn(reader, book);

            if (table.Rows.Count == 0)
            {
                return(true);
            }
            if ((DateTime.Now - (DateTime)table.Rows[0]["Changed"]).Days < 1)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
예제 #18
0
    private void ShowBasketTable()
    {
        DABasket = new SqlDataAdapter();
        DABasket.SelectCommand             = new SqlCommand();
        DABasket.SelectCommand.Connection  = ZCon;
        DABasket.SelectCommand.CommandText = " with F0 as (" +
                                             " select ID, IDMAIN IDMAIN from Reservation_E..Basket where IDREADER = " + CurReader.ID +
                                             " union all" +
                                             " select 1 ID, ID_Book_EC IDMAIN from Reservation_E..Orders where ID_Reader = " + CurReader.ID +
                                             ") select distinct IDMAIN,ID  from F0 order by ID desc";//сортируем по IDMAIN чтобы все были в одном порядке
        DataTable         table  = new DataTable();
        int               i      = DABasket.Fill(table);
        List <BJBookInfo> basket = new List <BJBookInfo>();

        foreach (DataRow r in table.Rows)
        {
            BJBookInfo book = BJBookInfo.GetBookInfoByPIN(Convert.ToInt32(r["IDMAIN"]), "BJVVV");
            for (int j = book.Exemplars.Count - 1; j >= 0; j--)
            {
                if (((BJExemplarInfo)book.Exemplars[j]).Fields["921$c"].ToLower() == "списано")
                {
                    book.Exemplars.RemoveAt(j);
                }
            }
            if (book.Exemplars.Count != 0)
            {
                basket.Add(book);
            }
        }
        DataTable dataSource = ConvertListToDataTable(basket);

        gwBasket.DataSource = dataSource;
        ((BoundField)gwBasket.Columns[0]).DataField  = "IDMAIN";
        ((BoundField)gwBasket.Columns[1]).DataField  = "num";
        ((BoundField)gwBasket.Columns[2]).DataField  = "RTF";
        ((BoundField)gwBasket.Columns[3]).DataField  = "title";
        ((BoundField)gwBasket.Columns[4]).DataField  = "avtor";
        ((BoundField)gwBasket.Columns[5]).DataField  = "inv";
        ((BoundField)gwBasket.Columns[6]).DataField  = "metka";
        ((BoundField)gwBasket.Columns[7]).DataField  = "status";
        ((BoundField)gwBasket.Columns[10]).DataField = "IDDATA";
        ((BoundField)gwBasket.Columns[11]).DataField = "StatusCode";
        ((BoundField)gwBasket.Columns[12]).DataField = "StatusNameInBase";
        ((BoundField)gwBasket.Columns[13]).DataField = "Rack";
        gwBasket.DataBind();
    }
예제 #19
0
        internal BJBookInfo GetBJBookByBar(string data)
        {
            //здесь ищем по всем базам. просто передаём BJVVV, но запрашивать будем все базы по очереди.

            DataTable table = dbWrapper.GetBJBookByBar(data);

            if (table.Rows.Count > 1)
            {
                throw new Exception("Штрихкодов в базах найдено более одного.");
            }
            if (table.Rows.Count == 0)
            {
                return(null);
            }
            BJBookInfo book = BJBookInfo.GetBookInfoByPIN(Convert.ToInt32(table.Rows[0]["IDMAIN"]), table.Rows[0]["fund"].ToString());

            return(book);
        }
예제 #20
0
        /// <summary>
        /// Возвращаемые значения:
        /// 0 - Издание принято от читателя. Сдано.
        /// 1 - Штрихкод не найден ни в базе читателей ни в базе книг
        /// 2 - ожидался штрихкод читателя, а считан штрихкод издания
        /// 3 - ожидался штрихкод издания, а считан штрихкод читателя
        /// 4 - Издание подготовлено к выдаче. ожидаем штрихкод читателя
        /// 5 - Издание и читатель подготовлены к выдаче
        ///
        /// </summary>
        /// <param name="PortData"></param>
        public int Circulate(string PortData)
        {
            BARType ScannedType;

            if (ExpectedBar == ExpectingAction.WaitingConfimation)//если ожидается подтверждение выдачи
            {
                return(5);
            }

            if ((ScannedType = BookOrReader(PortData)) == BARType.NotExist)//существует ли такой штрихкод вообще либо в базе читателей либо в базе изданий
            {
                return(1);
            }

            if (ExpectedBar == ExpectingAction.WaitingBook) //если сейчас ожидается штрихкод книги
            {
                if (ScannedType == BARType.Reader)          //выяснить какой штрихкод сейчас считан: читатель или книга
                {
                    return(3);
                }
                this.ScannedBook = BJBookInfo.GetBookInfoByBAR(PortData);
                ScannedExemplar  = (BJExemplarInfo)ScannedBook.Exemplars.Find(x => ((BJExemplarInfo)x).Bar == PortData);
                if (ci.IsIssuedToReader(ScannedExemplar))
                {
                    return(0);
                }
                else
                {
                    ExpectedBar = ExpectingAction.WaitingReader;
                    return(4);
                }
            }
            else  //если сейчас ожидается штрихкод читателя
            {
                if (ScannedType == BARType.Book) //выяснить какой штрихкод сейчас считан: читатель или книга
                {
                    return(2);
                }
                ScannedReader = ReaderInfo.GetReaderByBar(PortData);// new ReaderVO(PortData);
                ExpectedBar   = ExpectingAction.WaitingConfimation;
                return(5);
            }
        }
예제 #21
0
    protected void Button4_Click(object sender, EventArgs e)
    {
        DABasket = new SqlDataAdapter();
        DABasket.SelectCommand             = new SqlCommand();
        DABasket.SelectCommand.Connection  = ZCon;
        DABasket.SelectCommand.CommandText = " with F0 as (" +
                                             " select ID, IDMAIN IDMAIN from Reservation_E..Basket where IDREADER = " + CurReader.ID +
                                             " union all" +
                                             " select 1 ID, ID_Book_EC IDMAIN from Reservation_E..Orders where ID_Reader = " + CurReader.ID +
                                             ") select distinct IDMAIN,ID  from F0 order by ID desc";//сортируем по IDMAIN чтобы все были в одном порядке
        DataTable   table = new DataTable();
        int         i     = DABasket.Fill(table);
        List <Book> Books = new List <Book>();

        foreach (DataRow r in table.Rows)
        {
            BJBookInfo bjbook = BJBookInfo.GetBookInfoByPIN(Convert.ToInt32(r["IDMAIN"]), "BJVVV");
            Book       book   = new Book(bjbook.Fields["200$a"].ToString(), r["IDMAIN"].ToString(), bjbook.Fields["700$a"].ToString(), "0");
            Books.Add(book);
        }

        List <KeyValuePair <string, Book> > spisok = new List <KeyValuePair <string, Book> >();


        foreach (Book b in Books)
        {
            spisok.Add(new KeyValuePair <string, Book>(b.Language, b));
        }
        spisok.Sort(BiblioDescriptionCompare);
        if (Session["spisok"] == null)
        {
            Session.Add("spisok", spisok);
        }
        else
        {
            Session["spisok"] = spisok;
        }

        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('Default2.aspx','_blank')", true);
    }
예제 #22
0
        public void InsertExemplar(BJExemplarInfo exemplar, BJBookInfo book, int RowIndex)
        {
            _countPerPage++;
            SetRowIncrement(_pageNumber);
            string Title     = GetTitle(book);
            double RowHeight = GetMeasuredRowHeight(Title);

            _pageHeight += RowHeight + 5;
            if (_pageHeight > 620)
            {
                InsertPageSumm();
                MakeNewPage();
                SetRowIncrement(_pageNumber);
                AddEmptyRow(_currentWS);
                InsertRowData(RowIndex, Title, exemplar, book, RowHeight);
            }
            else
            {
                AddEmptyRow(_currentWS);
                InsertRowData(RowIndex, Title, exemplar, book, RowHeight);
            }
        }
예제 #23
0
        private void InsertRowData(int RowIndex, string Title, BJExemplarInfo exemplar, BJBookInfo book, double RowHeight)
        {
            _currentWS.Range[$"A{_countPerPage + _rowIncrement}"].Value    = RowIndex;
            _currentWS.Range[$"F{_countPerPage + _rowIncrement}"].Value    = exemplar.Fields["899$p"].ToString();
            _currentWS.Range[$"T{_countPerPage + _rowIncrement}"].Value    = Title;
            _currentWS.Range[$"T{_countPerPage + _rowIncrement}"].WrapText = true;
            _currentWS.Range[$"BA{_countPerPage + _rowIncrement}"].Value   = "шт";
            _currentWS.Range[$"BK{_countPerPage + _rowIncrement}"].Value   = 1;
            decimal Price    = 0;
            string  Currency = "";

            if (exemplar.Fields["922$c"].ToString() == string.Empty)
            {
                if (book.Fields["101$a"].ToString() == "Рус.")
                {
                    Price    = 261;
                    Currency = "RUB";
                }
                else
                {
                    Price    = 1475;
                    Currency = "RUB";
                }
            }
            else
            {
                string str = exemplar.Fields["922$c"].ToString();
                Currency = exemplar.Fields["922$d"].ToString();
                Price    = Decimal.Parse(str.Replace(".", ","));
            }
            _currentWS.Range[$"BS{_countPerPage + _rowIncrement}"].Value = Price.ToString("0.00");
            _cost        += Price;
            _costPerPage += Price;
            _currentWS.Range[$"CL{_countPerPage + _rowIncrement}"].Value    = Price.ToString("0.00");
            _currentWS.Range[$"T{_countPerPage + _rowIncrement}"].RowHeight = RowHeight + 5;
        }
예제 #24
0
    protected void Page_Load(object sender, EventArgs e)
    {
        string IDMAIN = Request["pin"];
        string IDBASE = Request["idbase"];

        string IDReader = Request.QueryString["idreader"];

        if (IDReader == null)
        {
            IDReader = User.Identity.Name;
            //Response.Write("User.Identity.Name " + IDReader);
            if (IDReader == string.Empty)
            {
                Response.Write("Неизвестная ошибка");
                return;
            }
        }
        //else
        //{
        //    Response.Write("Request" + IDReader);
        //}
        //string vkey = Request["vkey"];
        string BaseName = (IDBASE == "1") ? "BJVVV" : "REDKOSTJ";


        ReaderInfo readerAPI = ReaderInfo.GetReader(int.Parse(IDReader));


        ExemplarLoader loader = new ExemplarLoader(BaseName);

        DataProviderAPI.ValueObjects.ElectronicExemplarInfoAPI exemplar = loader.GetElectronicExemplarInfo(BaseName + "_" + IDMAIN);



        if (exemplar.ForAllReader)//открытый БЕЗ авторского права
        {
            RedirectToNewViewer(IDMAIN, true, "", IDReader);
        }
        else    //ЗАКРЫТЫЕ АВТОРСКИМ ПРАВОМ
        {
            BJBookInfo book   = BJBookInfo.GetBookInfoByPIN(int.Parse(IDMAIN), BaseName);
            ReaderInfo reader = ReaderInfo.GetReader(int.Parse(IDReader));

            if (!book.IsElectronicCopyIssued())//если книга не выдана никому, то проверяем ограничения, потом неявно выдаём и перенаправляем на вьювер
            {
                if (CheckLimitations(book, reader))
                {
                    return;
                }
                book.IssueElectronicCopyToReader(reader.NumberReader);
                string ViewKey = book.GetElectronicViewKeyForReader(reader.NumberReader);
                RedirectToNewViewer(IDMAIN, false, ViewKey, IDReader);
            }
            else
            {
                if (!book.IsElectronicCopyIsuuedToReader(reader.NumberReader))//если этому читателю не выдана эта книга, то проверяем ограничения
                {
                    if (CheckLimitations(book, reader))
                    {
                        return;
                    }
                    //если ограничения не сработали, то выдаём и перенаправляем
                    book.IssueElectronicCopyToReader(reader.NumberReader);
                    string ViewKey = book.GetElectronicViewKeyForReader(reader.NumberReader);
                    RedirectToNewViewer(IDMAIN, false, ViewKey, IDReader);
                }
                else//если этому читателю выдана эта книга
                {
                    string ViewKey = book.GetElectronicViewKeyForReader(reader.NumberReader);
                    RedirectToNewViewer(IDMAIN, false, ViewKey, IDReader);
                }
            }
        }
    }
예제 #25
0
 private bool IsElectronicIssueAlreadyIssued(ReaderInfo reader, BJBookInfo book)
 {
     return(loader.IsElectronicIssueAlreadyIssued(reader, book));
 }
예제 #26
0
 public int GetBusyExemplarsCount(BJBookInfo book)
 {
     return(loader.GetBusyExemplarsCount(book));
 }
예제 #27
0
 private bool IsTwentyFourHoursPastSinceReturn(ReaderInfo reader, BJBookInfo book)
 {
     return(loader.IsTwentyFourHoursPastSinceReturn(reader, book));
 }
예제 #28
0
 private bool IsBookAlreadyIssuedToReader(BJBookInfo book, ReaderInfo reader)
 {
     return(loader.IsBookAlreadyIssuedToReader(book, reader));
 }
예제 #29
0
        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");
                }
            }
        }
예제 #30
0
        private List <int> GetAcceptableOrderTypesForReader(string bookId, int readerId)
        {
            List <int> result = new List <int>();
            BJBookInfo book   = BJBookInfo.GetBookInfoByPIN(bookId);
            ReaderInfo reader = ReaderInfo.GetReader(readerId);

            foreach (BJExemplarInfo exemplar in book.Exemplars)
            {
                if (exemplar.Fields["929$b"].MNFIELD != 0)//списано
                {
                    continue;
                }
                int AcceptableOrderType = this.GetExemplarAcceptableOrderType(exemplar);
                if (AcceptableOrderType == 0)
                {
                    continue;
                }
                if (!result.Contains(AcceptableOrderType))
                {
                    result.Add(AcceptableOrderType);
                }
            }
            if (null != reader.Rights.RightsList.FirstOrDefault(x => x.ReaderRightValue == ReaderRightsEnum.Employee))
            {
                //кароче здесь надо написать логику, если это суотрудник или оплаченный абонемент, то в зал заменить на на дом
                //но так как при выдаче всё равно всё встанет на свои места, то для экономи времени пропустим это.
            }
            if (reader.IsRemoteReader)
            {
                result.Remove(OrderTypes.InLibrary.Id);
                result.Remove(OrderTypes.PaperVersion.Id);
                result.Remove(OrderTypes.ClarifyAccess.Id);
                if (result.Count == 0)
                {
                    result.Add(OrderTypes.OrderProhibited.Id);
                }
            }
            if (book.DigitalCopy != null)
            {
                if (book.DigitalCopy.ExemplarAccess.Access == 1002)
                {
                    result.Add(3);
                }
                if (book.DigitalCopy.ExemplarAccess.Access == 1001)
                {
                    result.Add(6);
                }
            }

            return(result.Distinct().ToList());
            //{ 1000,   "Заказать через личный кабинет, для получения на дом пройти в Зал абонементного обслуживания 2 этаж"},
            //{ 1001,   "Свободый электронный доступ"},
            //{ 1002,   "Доступ через авторизацию читателя(удаленного читателя)"},
            //{ 1003,   "Электронный доступ в электронном зале НЭБ, читальные зал(3 этаж)"},
            //{ 1004,   "ЛитРес:Иностранка"},
            //{ 1005,   "Заказать через личный кабинет, для получения заказа пройти в Зал выдачи документов 2 этаж"},
            //{ 1006,   "Проследовать в зал местонахождения экземпляра для получения книги на дом"},
            //{ 1007,   "Проследовать в зал местонахождения экземпляра, взять самостоятельно для чтения книги в помещении"},
            //{ 1008,   "Pearson:Иностранка"},
            //{ 1009,   "Печать по требованию"},
            //{ 1010,   "Проследовать в зал местонахождения экземпляра. Возможность выдачи уточните у сотрудника"},
            //{ 1011,   "Книга находится на выставке в зале местонахождения экземпляра"},
            //{ 1012,   "Спец.вид. Заказать через личный кабинет, проследовать в Зал выдачи документов 2 этаж. Сотрудник поможет Вам с дополнительным оборудованием для просмотра."},
            //{ 1013,   "Книга находится в обработке"},
            //{ 1014,   "Проследовать в Зал редкой книги 4 этаж"},
            //{ 1016,   "Проследовать в Зал редкой книги 4 этаж. Возможность доступа уточните у сотрудника."},
            //{ 1017,   "Проследовать в Зал выдачи документов 2 этаж. Возможность доступа уточните у сотрудника."},
            //{ 1020,   "Экстремистская литература.Не попадает в индекс.Обрабатывать не нужно."},
            //{ 1999,   "Невозможно определить доступ"},
        }