Example #1
0
 private IssueType CheckFreeAbonementRights(BJExemplarInfo scannedExemplar, ReaderInfo scannedReader)
 {
     if (scannedExemplar.ExemplarAccess.Access.In(new[] { 1000, 1006 }))
     {
         if (scannedReader.Rights[ReaderRightsEnum.FreeAbonement] == null)
         {
             throw new Exception("C019");
         }
         else
         {
             if (scannedReader.Rights[ReaderRightsEnum.FreeAbonement].DateEndReaderRight <= DateTime.Now)
             {
                 throw new Exception("C020");
             }
             else
             {
                 return(IssueType.AtHome);
             }
         }
     }
     else
     {
         return(IssueType.InHall);
     }
 }
Example #2
0
        // 0 - ok
        // 1 - нужно спросить на бронеполку возвращают или нет
        internal int RecieveBookFromReader(BJExemplarInfo exemplar, OrderInfo oi, BJUserInfo bjUser)
        {
            if (oi.StatusCode == CirculationStatuses.IssuedInHall.Id)
            {
                if (exemplar.Fields["921$c"].ToString() == "ДП")
                {
                    if (exemplar.Fields["899$a"].ToString() != bjUser.SelectedUserStatus.DepName)
                    {
                        throw new Exception("C022");
                    }
                    this.ChangeOrderStatusReturn(bjUser, oi.OrderId, CirculationStatuses.Finished.Value);
                }
                else
                {
                    return(1);
                }
            }
            else
            {
                if (exemplar.Fields["899$a"].ToString().ToLower().Contains("книгохранен"))
                {
                    this.ChangeOrderStatusReturn(bjUser, oi.OrderId, CirculationStatuses.ForReturnToBookStorage.Value);
                }
                else
                {
                    this.ChangeOrderStatusReturn(bjUser, oi.OrderId, CirculationStatuses.Finished.Value);
                }
            }
            return(0);



            //loader.RecieveBookFromReader(bar,bjUser,statusName);
        }
Example #3
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);
        }
Example #4
0
        private void button1_Click(object sender, EventArgs e)
        {
            //MessageBox.Show("Thanks!");
            CirculationInfo  ci   = new CirculationInfo();
            List <OrderInfo> list = ci.GetOrders(CirculationStatuses.ForReturnToBookStorage.Value);

            foreach (OrderInfo o in list)
            {
                BJExemplarInfo exemplar = BJExemplarInfo.GetExemplarByIdData(o.ExemplarId, o.Fund);

                if (o.IssueDate == null)
                {
                    List <OrderFlowInfo> ofi = ci.GetOrdersFlowByOrderId(o.OrderId);
                    OrderFlowInfo        f   = ofi.Find(x => x.StatusName.Contains("ыдано"));
                    if (f != null)
                    {
                    }
                }



                if (exemplar.Fields["921$c"].ToString() == "ДП")
                {
                    //ci.ChangeOrderStatusReturn()
                }
            }
        }
Example #5
0
        internal int NewOrder(BJExemplarInfo exemplar, ReaderInfo reader, int ReturnInDays, string StatusName, string AlligatBookId, int IssuingDepId)
        {
            int OrderId;

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand();
                command.Connection = connection;
                command.Connection.Open();
                command.CommandText = Queries.NEW_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("AlligatBookId", SqlDbType.NVarChar).Value = (object)AlligatBookId ?? DBNull.Value;
                command.Parameters.Add("IssuingDepId", SqlDbType.Int).Value       = IssuingDepId;
                command.Parameters.Add("ExemplarId", SqlDbType.Int).Value         = exemplar.IdData;
                command.Parameters.Add("ReturnInDays", SqlDbType.Int).Value       = ReturnInDays;//(orderType == "На дом") ? 30 : 4;
                command.Parameters.Add("StatusName", SqlDbType.NVarChar).Value    = StatusName;
                command.Parameters.Add("Fund", SqlDbType.NVarChar).Value          = exemplar.Fund;
                command.Parameters.Add("Barcode", SqlDbType.NVarChar).Value       = exemplar.Fields["899$w"].ToString();
                OrderId = Convert.ToInt32(command.ExecuteScalar());
            }
            this.ChangeOrderStatus(OrderId, StatusName, 1, 2033, null);
            this.DeleteFromBasket(reader.NumberReader, new List <string>()
            {
                exemplar.BookId
            });
            return(OrderId);
        }
Example #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;
                }
            }
        }
Example #7
0
        //прямая выдача книги. заказ ещё не создан
        internal void IssueBookToReader(BJExemplarInfo scannedExemplar, ReaderInfo scannedReader, IssueType issueType, BJUserInfo bjUser)
        {
            int    ReturnInDays = (issueType == IssueType.AtHome) ? 30 : 10;//30 дней на дом. 10 дней бронеполка.
            string statusName   = (issueType == IssueType.AtHome) ? CirculationStatuses.IssuedAtHome.Value : CirculationStatuses.IssuedInHall.Value;
            int    deptId       = KeyValueMapping.BJDepartmentIdToUnifiedLocationId[bjUser.SelectedUserStatus.DepId];

            dbWrapper.IssueBookToReader(scannedExemplar, scannedReader.NumberReader, ReturnInDays, bjUser.Id,
                                        deptId, statusName);
        }
Example #8
0
        internal OrderInfo FindOrderByExemplar(BJExemplarInfo scannedExemplar)
        {
            DataTable table = dbWrapper.FindOrderByExemplar(scannedExemplar.IdData, scannedExemplar.Fund);

            if (table.Rows.Count == 0)
            {
                return(null);
            }
            return(FillOrderFromDataRow(table.Rows[0]));
        }
Example #9
0
        internal List <BJExemplarInfo> GetBooksPerYear(int year, string prefix)
        {
            DataTable             table  = db.GetBooksPerYear(year, prefix);
            List <BJExemplarInfo> result = new List <BJExemplarInfo>();

            foreach (DataRow row in table.Rows)
            {
                BJExemplarInfo b = BJExemplarInfo.GetExemplarByIdData((int)row["IDDATA"], Fund);
                result.Add(b);
            }
            return(result);
        }
Example #10
0
 internal DataTable IsExemplarIssued(BJExemplarInfo bJExemplarInfo)
 {
     using (SqlConnection connection = new SqlConnection(connectionString))
     {
         SqlDataAdapter dataAdapter = new SqlDataAdapter(Queries.IS_ALREADY_ISSUED, connection);
         dataAdapter.SelectCommand.Parameters.Add("BookId", SqlDbType.NVarChar).Value = bJExemplarInfo.BookId;
         dataAdapter.SelectCommand.Parameters.Add("ExemplarId", SqlDbType.Int).Value  = bJExemplarInfo.IdData;
         DataTable table = new DataTable();
         int       cnt   = dataAdapter.Fill(table);
         return(table);
     }
 }
Example #11
0
        internal List <BJExemplarInfo> GetBooksPerYearInActNameAnotherFundholder(int year)
        {
            DataTable             table  = db.GetBooksPerYearInActNameAnotherFundholder(year);
            List <BJExemplarInfo> result = new List <BJExemplarInfo>();

            foreach (DataRow row in table.Rows)
            {
                BJExemplarInfo b = BJExemplarInfo.GetExemplarByIdData((int)row["IDDATA"], Fund);
                result.Add(b);
            }
            return(result);
        }
Example #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);
        }
Example #13
0
    private int CreateOrd(string idreader, string iddata)
    {
        BJExemplarInfo exemplar = BJExemplarInfo.GetExemplarByIdData(int.Parse(iddata), "BJVVV");
        SqlCommand     command  = new SqlCommand();

        ZCon.Open();
        command = new SqlCommand("insert into Reservation_E..Orders (ID_Reader, ID_Book_EC, Status, Start_Date, InvNumber,  Form_Date,    IDDATA, ID_Book_CC, Duration, DepId) " +
                                 "values (@IDREADER, @IDMAIN,     0,      getdate(), @INV, getdate(), @IDDATA          ,  0,          4 ,     @DepId   )", ZCon);
        command.Parameters.Add("IDREADER", SqlDbType.Int).Value = int.Parse(idreader);
        command.Parameters.Add("IDMAIN", SqlDbType.Int).Value   = exemplar.IDMAIN;
        command.Parameters.Add("INV", SqlDbType.NVarChar).Value = exemplar.Fields["899$p"].ToString();
        command.Parameters.Add("IDDATA", SqlDbType.Int).Value   = exemplar.IdData;
        command.Parameters.Add("DepId", SqlDbType.Int).Value    = bjUser.SelectedUserStatus.DepId;
        command.ExecuteNonQuery();
        ZCon.Close();
        return(exemplar.IDMAIN);
    }
Example #14
0
        public void RecieveBook(string fromPort)
        {
            BJExemplarInfo exemplar = BJExemplarInfo.GetExemplarByBar(fromPort);
            OrderInfo      oi       = ci.FindOrderByExemplar(exemplar);

            if (ci.RecieveBookFromReader(exemplar, oi, bjUser) == 1)
            {
                DialogResult dr = MessageBox.Show("Читатель сдаёт книгу на бронеполку?", "Внимание!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                if (dr == DialogResult.Yes)
                {
                    ci.ChangeOrderStatusReturn(bjUser, oi.OrderId, CirculationStatuses.InReserve.Value);
                }
                else if (dr == DialogResult.No)
                {
                    ci.ChangeOrderStatusReturn(bjUser, oi.OrderId, CirculationStatuses.ForReturnToBookStorage.Value);
                }
            }
        }
Example #15
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);
            }
        }
Example #16
0
        public void RecieveBookInBookkeeping(OrderInfo order, BJUserInfo bjUser)
        {
            if (order == null)
            {
                throw new Exception("C025");
            }

            //проверка ДП
            BJExemplarInfo exemplar = BJExemplarInfo.GetExemplarByIdData(order.ExemplarId, order.Fund);

            if (exemplar.Fields["921$c"].ToString() == "Для выдачи")
            {
                ChangeOrderStatus(bjUser, order.OrderId, CirculationStatuses.Finished.Value);
            }
            else
            {
                throw new Exception("C021");
            }
        }
Example #17
0
        private int GetFirstIssueDepartmentId(BookExemplarBase exemplar)
        {
            BJExemplarInfo e = (BJExemplarInfo)exemplar;
            int            IssuingDepartmentId = KeyValueMapping.AccessCodeToIssuingDeparmentId[e.ExemplarAccess.Access];

            if (IssuingDepartmentId == 0)
            {
                //тут вопросики возникают.
                ExemplarSimpleView es = ViewFactory.GetExemplarSimpleView(e);
                if (es == null)
                {
                    IssuingDepartmentId = 2007;//по умолчанию
                }
                else
                {
                    IssuingDepartmentId = es.LocationCode;
                }
            }
            return(IssuingDepartmentId);
        }
Example #18
0
        private bool isWrongFloorPredicate(string depName, OrderInfo order)
        {
            if (order.ExemplarId == 0)
            {
                return(true);
            }
            BJExemplarInfo exemplar = BJExemplarInfo.GetExemplarByIdData(order.ExemplarId, order.Fund);

            if (exemplar == null)
            {
                return(true);
            }
            if (exemplar.Fields["899$a"].ToString() == depName)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
Example #19
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);
            }
        }
Example #20
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;
        }
Example #21
0
        internal void IssueBookToReader(BJExemplarInfo scannedExemplar, int numberReader, int returnInDays, int userId, int deptId, string statusName)
        {
            int OrderId;

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand();
                command.Connection = connection;
                command.Connection.Open();
                command.CommandText = Queries.NEW_ORDER_ISSUE_BOOK;
                command.Parameters.Clear();
                command.Parameters.Add("ReaderId", SqlDbType.Int).Value        = numberReader;
                command.Parameters.Add("IssueDepId", SqlDbType.Int).Value      = deptId;
                command.Parameters.Add("BookId", SqlDbType.NVarChar).Value     = scannedExemplar.BookId;
                command.Parameters.Add("IssuingDepId", SqlDbType.Int).Value    = deptId;
                command.Parameters.Add("ExemplarId", SqlDbType.Int).Value      = scannedExemplar.IdData;
                command.Parameters.Add("ReturnInDays", SqlDbType.Int).Value    = returnInDays;
                command.Parameters.Add("StatusName", SqlDbType.NVarChar).Value = statusName;
                command.Parameters.Add("Fund", SqlDbType.NVarChar).Value       = scannedExemplar.Fund;
                command.Parameters.Add("Barcode", SqlDbType.NVarChar).Value    = scannedExemplar.Fields["899$w"].ToString();
                OrderId = Convert.ToInt32(command.ExecuteScalar());
            }
            this.ChangeOrderStatus(OrderId, statusName, userId, deptId, null);
        }
Example #22
0
 private IssueType GetIssueType(BJExemplarInfo scannedExemplar, ReaderInfo scannedReader)
 {
     if (scannedReader.Rights[ReaderRightsEnum.Employee] != null)
     {
         if (scannedExemplar.Fields["921$c"].ToString() == "ДП")
         {
             return(IssueType.InHall);
         }
         else
         {
             return(IssueType.AtHome);
         }
     }
     else if (scannedReader.Rights[ReaderRightsEnum.PaidAbonement] != null)
     {
         if (scannedReader.Rights[ReaderRightsEnum.PaidAbonement].DateEndReaderRight > DateTime.Now)
         {
             if (scannedExemplar.Fields["921$c"].ToString() == "ДП")
             {
                 return(IssueType.InHall);
             }
             else
             {
                 return(IssueType.AtHome);
             }
         }
         else
         {
             return(CheckFreeAbonementRights(scannedExemplar, scannedReader));
         }
     }
     else
     {
         return(CheckFreeAbonementRights(scannedExemplar, scannedReader));
     }
 }
Example #23
0
        void pd_PrintPage(object sender, PrintPageEventArgs e)
        {
            Rectangle    rectangle;
            StringFormat format;
            Font         printFont = new Font("Arial Unicode MS", 11f, FontStyle.Bold);

            format = new StringFormat(StringFormatFlags.NoClip);
            format.LineAlignment = StringAlignment.Near;
            format.Alignment     = StringAlignment.Near;

            F1.SqlDA.SelectCommand             = new SqlCommand();
            F1.SqlDA.SelectCommand.Connection  = F1.SqlCon;
            F1.SqlDA.SelectCommand.CommandText = "select * from Readers..ReaderRight where IDReaderRight = 3 and IDReader = " + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
            DataSet DS = new DataSet();
            int     t  = 0;
            int     cc = F1.SqlDA.Fill(DS, "t");

            if (cc != 0)
            {
                #region читатель-сотрудник
                string str = "Билет № " + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
                //string inv = DS.Tables["t"].Rows[0][1].ToString();
                string dep       = GetDepartment(DS.Tables["t"].Rows[0]["IDOrganization"].ToString());
                string abonement = GetAbonement(dg.SelectedRows[0].Cells["readerid"].Value.ToString());
                int    CurrentY  = 0;

                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                CurrentY += 25;

                rectangle = new Rectangle(0, CurrentY, 70, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = "НА ДОМ\n до:";
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                rectangle = new Rectangle(70, CurrentY, 245, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = DateTime.Now.AddDays(30).ToString("dd.MM.yyyy");
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 70, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                printFont = new Font("Arial Unicode MS", 10f);
                str       = F1.user.SelectedUserStatus.DepName.Substring(F1.user.SelectedUserStatus.DepName.IndexOf("-") + 2);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                rectangle = new Rectangle(70, CurrentY, 245, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                printFont = new Font("Arial Unicode MS", 13f);
                str       = "Билет № " + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                CurrentY += 25;
                rectangle = new Rectangle(70, CurrentY, 245, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                F1.SqlDA.SelectCommand.CommandText = "select FamilyName+' ' +substring([Name],1,1)+'. ' + substring(ISNULL(FatherName,' '),1,1)+case when FatherName is null then '' else '.' end " +
                                                     " from  Readers..Main where NumberReader =" + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
                DS        = new DataSet();
                t         = F1.SqlDA.Fill(DS, "t");
                printFont = new Font("Arial Unicode MS", 10f);
                str       = "Фамилия: " + DS.Tables["t"].Rows[0][0].ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;

                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                printFont = new Font("Arial Unicode MS", 10f);
                e.Graphics.DrawString("Сотрудник отдела: " + dep, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str       = "Шифр: " + dg.SelectedRows[0].Cells["cipher"].Value.ToString();;
                printFont = new Font("Arial Unicode MS", 13f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;
                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                if (dg.SelectedRows[0].Cells["note"].Value.ToString() == string.Empty)
                {
                    str = "Инв. № " + dg.SelectedRows[0].Cells["inv"].Value.ToString();
                }
                else
                {
                    str = "Инв. № " + dg.SelectedRows[0].Cells["inv"].Value.ToString() + "; метка: " + dg.SelectedRows[0].Cells["note"].Value.ToString();
                }
                printFont = new Font("Arial Unicode MS", 13f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                /*rectangle = new Rectangle(158, 175, 315, 25);
                 * str = dg.SelectedRows[0].Cells["note"].Value.ToString();
                 * printFont = new Font("Arial Unicode MS", 10f);
                 * e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);*/
                CurrentY += 25;
                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str       = "Автор: " + dg.SelectedRows[0].Cells["author"].Value.ToString();
                printFont = new Font("Arial Unicode MS", 10f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 315, 75);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = "Заглавие: " + dg.SelectedRows[0].Cells["title"].Value.ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                CurrentY += 75;
                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                F1.SqlDA.SelectCommand.CommandText = "select Plng.PLAIN " +
                                                     "from BJVVV..DATAEXT A  " +
                                                     "left join BJVVV..DATAEXT lng on A.IDMAIN = lng.IDMAIN and lng.MNFIELD = 101 and lng.MSFIELD = '$a' " +
                                                     "left join BJVVV..DATAEXTPLAIN Plng on Plng.IDDATAEXT = lng.ID " +
                                                     "where A.IDMAIN = " + dg.SelectedRows[0].Cells["pin"].Value.ToString();
                DS  = new DataSet();
                t   = F1.SqlDA.Fill(DS, "t");
                str = "Язык: " + DS.Tables["t"].Rows[0][0].ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                CurrentY += 25;
                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                F1.SqlDA.SelectCommand.CommandText = "select (case when Plng.PLAIN is null then '<нет>' else Plng.PLAIN end) as first," +
                                                     " (case when Ptom.PLAIN is null then '<нет>' else Ptom.PLAIN end) as second, Pmesto.PLAIN mesto " +
                                                     "from BJVVV..DATAEXT A  " +
                                                     "left join BJVVV..DATAEXT lng on A.IDMAIN = lng.IDMAIN and lng.MNFIELD = 2100 and lng.MSFIELD = '$d' " +
                                                     "left join BJVVV..DATAEXTPLAIN Plng on Plng.IDDATAEXT = lng.ID " +
                                                     "left join BJVVV..DATAEXT mesto on A.IDMAIN = mesto.IDMAIN and mesto.MNFIELD = 210 and mesto.MSFIELD = '$a' " +
                                                     "left join BJVVV..DATAEXTPLAIN Pmesto on Pmesto.IDDATAEXT = mesto.ID " +
                                                     "left join BJVVV..DATAEXT tom on A.IDMAIN = tom.IDMAIN and tom.MNFIELD = 225 and tom.MSFIELD = '$h' " +
                                                     "left join BJVVV..DATAEXTPLAIN Ptom on Ptom.IDDATAEXT = tom.ID " +
                                                     "where A.IDMAIN = " + dg.SelectedRows[0].Cells["pin"].Value.ToString();
                DS  = new DataSet();
                t   = F1.SqlDA.Fill(DS, "t");
                str = "Год: " + DS.Tables["t"].Rows[0][0].ToString() + "   Том: " + DS.Tables["t"].Rows[0][1].ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                CurrentY += 25;
                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = "Место издания: " + DS.Tables["t"].Rows[0]["mesto"].ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                //rectangle = new Rectangle(0, 325, 315, 25);
                //e.Graphics.DrawRectangle(Pens.Black, rectangle);
                //str = "Подпись читателя";
                //e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;
                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = DateTime.Now.Date.ToString("dd.MM.yyyy");
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;
                rectangle = new Rectangle(0, CurrentY, 315, 75);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);


                //========вторая часть требования
                DS        = new DataSet();
                t         = 0;// Conn.SQLDA.Fill(DS, "t");
                str       = "Билет № " + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
                CurrentY += 75;
                rectangle = new Rectangle(0, CurrentY, 70, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);

                rectangle = new Rectangle(70, CurrentY, 245, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                printFont = new Font("Arial Unicode MS", 13f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;
                rectangle = new Rectangle(70, CurrentY, 245, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                F1.SqlDA.SelectCommand.CommandText = "select ISNULL(FamilyName+' ' +substring([Name],1,1)+'. ',' ') + substring(ISNULL(FatherName,' '),1,1)+ " +
                                                     " case when FatherName is null then '' else '.' end  from  Readers..Main where NumberReader =" + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
                DS        = new DataSet();
                t         = F1.SqlDA.Fill(DS, "t");
                printFont = new Font("Arial Unicode MS", 10f);
                str       = "Фамилия: " + DS.Tables["t"].Rows[0][0].ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;

                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                printFont = new Font("Arial Unicode MS", 10f);
                e.Graphics.DrawString("Сотрудник отдела: " + dep, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;


                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str       = "НА ДОМ";
                printFont = new Font("Arial Unicode MS", 11f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str       = "Шифр: " + dg.SelectedRows[0].Cells["cipher"].Value.ToString();;
                printFont = new Font("Arial Unicode MS", 13f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                if (dg.SelectedRows[0].Cells["note"].Value.ToString() == string.Empty)
                {
                    str = "Инв. № " + dg.SelectedRows[0].Cells["inv"].Value.ToString();
                }
                else
                {
                    str = "Инв. № " + dg.SelectedRows[0].Cells["inv"].Value.ToString() + "; метка: " + dg.SelectedRows[0].Cells["note"].Value.ToString();
                }
                printFont = new Font("Arial Unicode MS", 13f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                CurrentY += 25;
                printFont = new Font("Arial Unicode MS", 10f);
                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = DateTime.Now.Date.ToString("dd.MM.yyyy");
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;
                #endregion
            }
            else
            {
                #region обычный читатель
                //BJBookInfo Book = BJBookInfo.GetBookInfoByInventoryNumber(dg.SelectedRows[0].Cells["inv"].Value.ToString(), "BJVVV");
                //BJExemplarInfo Exemplar = BJExemplarInfo.GetExemplarByInventoryNumber(dg.SelectedRows[0].Cells["inv"].Value.ToString(), "BJVVV");
                CirculationInfo ci = new CirculationInfo();

                OrderInfo order = ci.GetOrder(Convert.ToInt32(dg.SelectedRows[0].Cells["orderid"].Value));

                BJExemplarInfo Exemplar = BJExemplarInfo.GetExemplarByIdData(order.ExemplarId, order.Fund);
                //BJBookInfo Book = BJBookInfo.GetBookInfoByPIN(order.BookId);
                if (Exemplar == null)
                {
                    throw new Exception("Ошибка при печати заказа. Обработайте этот заказ вручную, пока мы не устраним ошибку с печатью этого заказа.");
                    //MessageBox.Show("Ошибка при печати заказа. Обработайте этот заказ вручную, пока мы не устраним ошибку с печатью этого заказа.");
                    //return;
                }
                string abonement = GetAbonement(dg.SelectedRows[0].Cells["readerid"].Value.ToString());
                string str       = "Билет № " + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
                //string inv = DS.Tables["t"].Rows[0][1].ToString();
                int CurrentY = 0;

                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                CurrentY += 25;

                rectangle = new Rectangle(0, CurrentY, 70, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);

                str = (Exemplar.ExemplarAccess.Access == 1000) ? "НА ДОМ\n до:" : "ЧЗ\nдо:"; //1000 - на дом
                if (abonement.Contains("Платный"))
                {
                    str = "НА ДОМ\n до:";
                }
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                rectangle = new Rectangle(70, CurrentY, 245, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = (Exemplar.ExemplarAccess.Access == 1000) ? DateTime.Now.AddDays(30).ToString("dd.MM.yyyy") : DateTime.Now.AddDays(3).ToString("dd.MM.yyyy");
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 70, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                printFont = new Font("Arial Unicode MS", 10f);
                str       = F1.user.SelectedUserStatus.DepName.Substring(F1.user.SelectedUserStatus.DepName.IndexOf("-") + 2);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                rectangle = new Rectangle(70, CurrentY, 245, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                printFont = new Font("Arial Unicode MS", 13f);
                str       = "Билет № " + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;

                rectangle = new Rectangle(70, CurrentY, 245, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                F1.SqlDA.SelectCommand.CommandText = "select FamilyName+' ' +substring([Name],1,1)+'. ' + substring(ISNULL(FatherName, ' '),1,1)+ " +
                                                     " case when FatherName is null then '' else '.' end  from  Readers..Main where NumberReader =" + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
                DS        = new DataSet();
                t         = F1.SqlDA.Fill(DS, "t");
                printFont = new Font("Arial Unicode MS", 10f);
                str       = "Фамилия: " + DS.Tables["t"].Rows[0][0].ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;

                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                printFont = new Font("Arial Unicode MS", 11f);
                e.Graphics.DrawString(abonement, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str       = "Шифр: " + dg.SelectedRows[0].Cells["cipher"].Value.ToString();;
                printFont = new Font("Arial Unicode MS", 13f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                if (dg.SelectedRows[0].Cells["note"].Value.ToString() == string.Empty)
                {
                    str = "Инв. № " + dg.SelectedRows[0].Cells["inv"].Value.ToString();
                }
                else
                {
                    str = "Инв. № " + dg.SelectedRows[0].Cells["inv"].Value.ToString() + "; метка: " + dg.SelectedRows[0].Cells["note"].Value.ToString();
                }
                printFont = new Font("Arial Unicode MS", 13f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);

                /*rectangle = new Rectangle(158, 175, 315, 25);
                 * str = dg.SelectedRows[0].Cells["note"].Value.ToString();
                 * printFont = new Font("Arial Unicode MS", 10f);
                 * e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);*/
                CurrentY += 25;

                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str       = "Автор: " + dg.SelectedRows[0].Cells["author"].Value.ToString();
                printFont = new Font("Arial Unicode MS", 10f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 315, 75);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = "Заглавие: " + dg.SelectedRows[0].Cells["title"].Value.ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 75;

                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                F1.SqlDA.SelectCommand.CommandText = "select Plng.PLAIN " +
                                                     "from BJVVV..DATAEXT A  " +
                                                     "left join BJVVV..DATAEXT lng on A.IDMAIN = lng.IDMAIN and lng.MNFIELD = 101 and lng.MSFIELD = '$a' " +
                                                     "left join BJVVV..DATAEXTPLAIN Plng on Plng.IDDATAEXT = lng.ID " +
                                                     "where A.IDMAIN = " + dg.SelectedRows[0].Cells["pin"].Value.ToString();
                DS  = new DataSet();
                t   = F1.SqlDA.Fill(DS, "t");
                str = "Язык: " + DS.Tables["t"].Rows[0][0].ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;

                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                F1.SqlDA.SelectCommand.CommandText = "select (case when Plng.PLAIN is null then '<нет>' else Plng.PLAIN end) as first," +
                                                     " (case when Ptom.PLAIN is null then '<нет>' else Ptom.PLAIN end) as second, Pmesto.PLAIN mesto " +
                                                     "from BJVVV..DATAEXT A  " +
                                                     "left join BJVVV..DATAEXT lng on A.IDMAIN = lng.IDMAIN and lng.MNFIELD = 2100 and lng.MSFIELD = '$d' " +
                                                     "left join BJVVV..DATAEXTPLAIN Plng on Plng.IDDATAEXT = lng.ID " +
                                                     "left join BJVVV..DATAEXT mesto on A.IDMAIN = mesto.IDMAIN and mesto.MNFIELD = 210 and mesto.MSFIELD = '$a' " +
                                                     "left join BJVVV..DATAEXTPLAIN Pmesto on Pmesto.IDDATAEXT = mesto.ID " +
                                                     "left join BJVVV..DATAEXT tom on A.IDMAIN = tom.IDMAIN and tom.MNFIELD = 225 and tom.MSFIELD = '$h' " +
                                                     "left join BJVVV..DATAEXTPLAIN Ptom on Ptom.IDDATAEXT = tom.ID " +
                                                     "where A.IDMAIN = " + dg.SelectedRows[0].Cells["pin"].Value.ToString();
                DS  = new DataSet();
                t   = F1.SqlDA.Fill(DS, "t");
                str = "Год: " + DS.Tables["t"].Rows[0][0].ToString() + "   Том: " + DS.Tables["t"].Rows[0][1].ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;

                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = "Место издания: " + DS.Tables["t"].Rows[0]["mesto"].ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;

                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = DateTime.Now.Date.ToString("dd.MM.yyyy");
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;

                rectangle = new Rectangle(0, CurrentY, 315, 75);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);


                //========вторая часть требования
                DS        = new DataSet();
                t         = 0;// Conn.SQLDA.Fill(DS, "t");
                str       = "Билет № " + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
                CurrentY += 75;
                rectangle = new Rectangle(0, CurrentY, 70, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);

                rectangle = new Rectangle(70, CurrentY, 245, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                printFont = new Font("Arial Unicode MS", 13f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;
                rectangle = new Rectangle(70, CurrentY, 245, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                F1.SqlDA.SelectCommand.CommandText = "select ISNULL(FamilyName+' ' +substring([Name],1,1)+'. ',' ') + substring(ISNULL(FatherName, ' '),1,1)+ " +
                                                     " case when FatherName is null then '' else '.' end  from  Readers..Main where NumberReader =" + dg.SelectedRows[0].Cells["readerid"].Value.ToString();
                DS        = new DataSet();
                t         = F1.SqlDA.Fill(DS, "t");
                printFont = new Font("Arial Unicode MS", 10f);
                str       = "Фамилия: " + DS.Tables["t"].Rows[0][0].ToString();
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;
                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = (Exemplar.ExemplarAccess.Access == 1000) ? "НА ДОМ:" : "ЧЗ"; //1000 - на дом
                if (abonement.Contains("Платный"))
                {
                    str = "НА ДОМ\n до:";
                }
                printFont = new Font("Arial Unicode MS", 11f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str       = "Шифр: " + dg.SelectedRows[0].Cells["cipher"].Value.ToString();;
                printFont = new Font("Arial Unicode MS", 13f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 50;

                rectangle = new Rectangle(0, CurrentY, 315, 25);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                if (dg.SelectedRows[0].Cells["note"].Value.ToString() == string.Empty)
                {
                    str = "Инв. № " + dg.SelectedRows[0].Cells["inv"].Value.ToString();
                }
                else
                {
                    str = "Инв. № " + dg.SelectedRows[0].Cells["inv"].Value.ToString() + "; метка: " + dg.SelectedRows[0].Cells["note"].Value.ToString();
                }
                printFont = new Font("Arial Unicode MS", 13f);
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;

                printFont = new Font("Arial Unicode MS", 10f);
                rectangle = new Rectangle(0, CurrentY, 315, 50);
                e.Graphics.DrawRectangle(Pens.Black, rectangle);
                str = DateTime.Now.Date.ToString("dd.MM.yyyy");
                e.Graphics.DrawString(str, printFont, Brushes.Black, rectangle, format);
                CurrentY += 25;

                #endregion
            }
        }
Example #24
0
        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();
            }
        }
Example #25
0
 private int GetExemplarAcceptableOrderType(BJExemplarInfo exemplar)
 {
     return(KeyValueMapping.AccessCodeToOrderTypeId.GetValueOrDefault(exemplar.ExemplarAccess.Access, 0));
 }
Example #26
0
 internal bool IsIssuedToReader(BJExemplarInfo exemplar)
 {
     return(loader.IsIssuedToReader(exemplar));
 }
Example #27
0
 public OrderInfo FindOrderByExemplar(BJExemplarInfo scannedExemplar)
 {
     return(loader.FindOrderByExemplar(scannedExemplar));
 }
Example #28
0
        internal void IssueBookToReader(BJExemplarInfo scannedExemplar, ReaderInfo scannedReader, BJUserInfo bjUser)
        {
            //метод выдаёт книгу, либо возвращает исключения


            //ищем заказ с таким экземпляром.
            OrderInfo order = this.FindOrderByExemplar(scannedExemplar);

            //получаем способ выдачи для этого экземпляра. на дом или в зал. зависит от книги и от читателя.
            IssueType issueType = GetIssueType(scannedExemplar, scannedReader);


            if (order == null)//если заказа нет, то просто выдать. создать заказ со статусом выдано.
            {
                loader.IssueBookToReader(scannedExemplar, scannedReader, issueType, bjUser);
                return;
            }

            if (order.ReaderId != scannedReader.NumberReader)//заказ делал не этот читатель. завершить текущий заказ и выдать этому читателю
            {
                this.FinishOrder(order, bjUser);
                this.IssueBookToReader(scannedExemplar, scannedReader, bjUser);
                return;
            }
            switch (order.StatusName)
            {
            case CirculationStatuses.ElectronicIssue.Value:
                //сотрудник на кафедре не может считать штрихкод электронной копии. пропускаем
                break;

            case CirculationStatuses.EmployeeLookingForBook.Value:
                //книга в руках у сотрудника, значит надо принять на кафедру. можно автоматически
                loader.IssueBookToReader(order, issueType, bjUser);
                break;

            case CirculationStatuses.ForReturnToBookStorage.Value:
                //читатель тот же. можно просто снова выдать
                loader.IssueBookToReader(order, issueType, bjUser);
                break;

            case CirculationStatuses.InReserve.Value:
                //книга на бронеполке. читатель тот же. выдаём.
                loader.IssueBookToReader(order, issueType, bjUser);
                break;

            case CirculationStatuses.IssuedAtHome.Value:
                //такого быть не может
                break;

            case CirculationStatuses.IssuedFromAnotherReserve.Value:
                //выдача с чужой бронеполки - это зло неимоверное...
                //пока выдача с чужой бронеполки будет так: завершаем заказ хозяина бронеполки и выдаём другому читателю.
                break;

            case CirculationStatuses.IssuedInHall.Value:
                //такого быть не может
                break;

            case CirculationStatuses.OrderIsFormed.Value:
                // такого по идее не может быть
                break;

            case CirculationStatuses.SelfOrder.Value:
                loader.IssueBookToReader(order, issueType, bjUser);
                break;

            case CirculationStatuses.WaitingFirstIssue.Value:
                loader.IssueBookToReader(order, issueType, bjUser);
                break;
            }



            //switch (scannedExemplar.ExemplarAccess.Access)
            //{
            //    case 1000://Взять на дом Заказать через личный кабинет, для получения на дом пройти в { { location_2006} }
            //        break;
            //    case 1001://Свободый электронный доступ
            //        break;
            //    case 1002://Электронный доступ через авторизацию читателя(удаленного читателя)
            //        break;
            //    case 1003://Электронный доступ в электронном зале НЭБ, читальные зал(3 этаж)
            //        break;
            //    case 1004://ЛитРес: Иностранка
            //        break;
            //    case 1005://В помещении бибилотеки Заказать через личный кабинет, для получения заказа пройти в { { location_2007} }
            //        break;
            //    case 1006://Взять на дом Проследовать в { { exemplar_location} } для получения книги на дом
            //        break;
            //    case 1007://В помещении бибилотеки Проследовать в { { exemplar_location} }, взять самостоятельно для чтения книги в помещении
            //        break;
            //    case 1008://Удалённый доступ   Pearson: Иностранка
            //        break;
            //    case 1009:// Печать по требованию Печать по требованию
            //        break;
            //    case 1010://Уточнить доступ    Проследовать в { { exemplar_location} }. Возможность выдачи уточните у сотрудника
            //        break;
            //    case 1011://В помещении бибилотеки Книга находится на выставке в { { exemplar_location} }
            //        break;
            //    case 1012://В помещении бибилотеки СПВ. Заказать через личный кабинет, проследовать в { { location_2007} }. Сотрудник поможет Вам с дополнительным оборудованием для просмотра.
            //        break;
            //    case 1013://Уточнить доступ    Книга находится в обработке
            //        break;
            //    case 1014://В помещении бибилотеки Редкая книга.Проследовать в { { location_2009} }
            //        break;
            //    case 1016://Уточнить доступ    Проследовать в { { location_2009} }. Возможность доступа уточните у сотрудника.
            //        break;
            //    case 1017://Уточнить доступ    Проследовать в { { location_2007} }. Возможность доступа уточните у сотрудника.
            //        break;
            //    case 1020://Уточнить доступ    Экстремистская литература. Не попадает в индекс. Обрабатывать не нужно.
            //        break;
            //    case 1999://Уточнить доступ    Проследовать в { { location_2007} }. Возможность доступа уточните у сотрудника.
            //        break;
            //}
        }
Example #29
0
        public void ShowReaderOrders()
        {
            dgwReaders.Rows.Clear();
            dgwReaders.Columns.Clear();
            KeyValuePair <string, string>[] columns =
            {
                new KeyValuePair <string, string> ("pin",       "ПИН"),
                new KeyValuePair <string, string> ("author",    "Автор"),
                new KeyValuePair <string, string> ("title",     "Заглавие"),
                new KeyValuePair <string, string> ("inv",       "Инв. номер"),
                new KeyValuePair <string, string> ("cipher",    "Расст. шифр"),
                new KeyValuePair <string, string> ("readerid",  "Номер читателя"),
                new KeyValuePair <string, string> ("fio",       "ФИО читателя"),
                new KeyValuePair <string, string> ("startdate", "Дата формирования заказа"),
                new KeyValuePair <string, string> ("orderid",   "orderid"),
                new KeyValuePair <string, string> ("status",    "Статус заказа"),
                new KeyValuePair <string, string> ("note",      "Инв. метка"),
                new KeyValuePair <string, string> ("pubdate",   "Дата издания"),
                new KeyValuePair <string, string> ("refusual",  "Причина отказа"),
                new KeyValuePair <string, string> ("iddata",    "iddata")
            };
            foreach (var c in columns)
            {
                dgwReaders.Columns.Add(c.Key, c.Value);
            }

            dgwReaders.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
            dgwReaders.RowTemplate.DefaultCellStyle.WrapMode        = System.Windows.Forms.DataGridViewTriState.True;
            dgwReaders.Columns["startdate"].DefaultCellStyle.Format = "dd.MM.yyyy HH:mm";
            dgwReaders.Columns["pin"].Width       = 74;
            dgwReaders.Columns["author"].Width    = 125;
            dgwReaders.Columns["title"].Width     = 265;
            dgwReaders.Columns["inv"].Width       = 80;
            dgwReaders.Columns["cipher"].Width    = 100;
            dgwReaders.Columns["readerid"].Width  = 80;
            dgwReaders.Columns["fio"].Width       = 120;
            dgwReaders.Columns["startdate"].Width = 80;
            dgwReaders.Columns["orderid"].Visible = false;
            dgwReaders.Columns["status"].Width    = 100;
            dgwReaders.Columns["note"].Width      = 60;
            dgwReaders.Columns["pubdate"].Visible = false;
            dgwReaders.Columns["iddata"].Visible  = false;
            CirculationInfo  circulation = new CirculationInfo();
            List <OrderInfo> orders      = circulation.GetOrdersForStorage(bjUser.SelectedUserStatus.DepId, bjUser.SelectedUserStatus.DepName, CirculationStatuses.EmployeeLookingForBook.Value);

            if (bjUser.SelectedUserStatus.DepId == 8)//0 и 4 этаж должны получать заказы в одну точку
            {
                List <OrderInfo> orders1 = circulation.GetOrdersForStorage(15, "…Хран… Сектор книгохранения - 0 этаж");
                foreach (OrderInfo o in orders1)
                {
                    orders.Add(o);
                }
            }
            if (bjUser.SelectedUserStatus.DepId == 15)
            {
                List <OrderInfo> orders1 = circulation.GetOrdersForStorage(8, "…Хран… Сектор книгохранения - 4 этаж");
                foreach (OrderInfo o in orders1)
                {
                    orders.Add(o);
                }
            }
            foreach (var order in orders)
            {
                BJExemplarInfo exemplar = BJExemplarInfo.GetExemplarByIdData(order.ExemplarId, order.Fund);
                ReaderInfo     reader   = ReaderInfo.GetReader(order.ReaderId);
                dgwReaders.Rows.Add();
                var row = dgwReaders.Rows[dgwReaders.Rows.Count - 1];

                row.Cells["startdate"].Value = order.StartDate;
                row.Cells["pin"].Value       = order.BookId.Substring(order.BookId.IndexOf("_") + 1);
                row.Cells["author"].Value    = order.Book.Author;
                row.Cells["title"].Value     = order.Book.Title;
                row.Cells["inv"].Value       = exemplar.Fields["899$p"].ToString();
                row.Cells["cipher"].Value    = exemplar.Cipher;
                row.Cells["readerid"].Value  = order.ReaderId;

                row.Cells["fio"].Value = (string.IsNullOrEmpty(reader.FatherName)) ? $"{reader.FamilyName} {reader.Name.Substring(0, 1)}." :
                                         $"{reader.FamilyName} {reader.Name.Substring(0, 1)}. { reader.FatherName.Substring(0, 1)}.";
                row.Cells["orderid"].Value  = order.OrderId;
                row.Cells["status"].Value   = order.StatusName;
                row.Cells["note"].Value     = exemplar.Fields["899$x"].ToString();
                row.Cells["pubdate"].Value  = order.Book.PublishDate;
                row.Cells["iddata"].Value   = order.ExemplarId;
                row.Cells["refusual"].Value = string.IsNullOrEmpty(order.Refusual) ? "<нет>" : order.Refusual;
            }
        }
Example #30
0
        internal bool IsIssuedToReader(BJExemplarInfo exemplar)
        {
            DataTable table = dbWrapper.IsIssuedToReader(exemplar.IdData, exemplar.Fund);

            return((table.Rows.Count != 0) ? true : false);
        }