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); } }
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); }
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); }
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); }
private void button2_Click(object sender, EventArgs e) { BJBookInfo b = BJBookInfo.GetBookInfoByPIN(1456705, "BJVVV"); BookJSONShortViewer viewer = new BookJSONShortViewer(); tbResponse.Text = viewer.GetView(b); }
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; } } }
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); }
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); }
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); } }
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); } }
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); } }
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); }
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); }
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); } }
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("Формирование акта успешно завершено!"); } }
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); }
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); } }
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(); }
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); }
/// <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); } }
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); }
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); } }
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; }
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); } } } }
private bool IsElectronicIssueAlreadyIssued(ReaderInfo reader, BJBookInfo book) { return(loader.IsElectronicIssueAlreadyIssued(reader, book)); }
public int GetBusyExemplarsCount(BJBookInfo book) { return(loader.GetBusyExemplarsCount(book)); }
private bool IsTwentyFourHoursPastSinceReturn(ReaderInfo reader, BJBookInfo book) { return(loader.IsTwentyFourHoursPastSinceReturn(reader, book)); }
private bool IsBookAlreadyIssuedToReader(BJBookInfo book, ReaderInfo reader) { return(loader.IsBookAlreadyIssuedToReader(book, reader)); }
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"); } } }
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, "Невозможно определить доступ"}, }