def perform_loanshistoricaloverview(uid, ln=CFG_SITE_LANG): """ Display Loans historical overview for user uid. @param uid: user id @param ln: language of the page @return body(html) """ invenio_user_email = db.get_invenio_user_email(uid) borrower_id = db.get_borrower_id_by_email(invenio_user_email) result = db.get_historical_overview(borrower_id) body = bc_templates.tmpl_loanshistoricaloverview(result=result, ln=ln) return body
def perform_borrower_loans(uid, barcode, borrower_id, request_id, action, ln=CFG_SITE_LANG): """ Display all the loans and the requests of a given borrower. @param barcode: identify the item. Primary key of crcITEM. @type barcode: string @param borrower_id: identify the borrower. Primary key of crcBORROWER. @type borrower_id: int @param request_id: identify the request: Primary key of crcLOANREQUEST @type request_id: int @return body(html) """ _ = gettext_set_language(ln) infos = [] borrower_id = db.get_borrower_id_by_email(db.get_invenio_user_email(uid)) new_due_date = generate_new_due_date(30) #renew loan if action == 'renew': recid = db.get_id_bibrec(barcode) item_description = db.get_item_description(barcode) queue = db.get_queue_request(recid, item_description) if len(queue) != 0 and queue[0][0] != borrower_id: message = "It is not possible to renew your loan for %(x_strong_tag_open)s%(x_title)s%(x_strong_tag_close)s" % {'x_title': book_title_from_MARC(recid), 'x_strong_tag_open': '<strong>', 'x_strong_tag_close': '</strong>'} message += ' ' + _("Another user is waiting for this book.") infos.append(message) else: loan_id = db.get_current_loan_id(barcode) db.renew_loan(loan_id, new_due_date) #update_status_if_expired(loan_id) tag_all_requests_as_done(barcode, borrower_id) infos.append(_("Your loan has been renewed with success.")) #cancel request elif action == 'cancel': db.cancel_request(request_id) barcode_requested = db.get_requested_barcode(request_id) update_requests_statuses(barcode_requested) #renew all loans elif action == 'renew_all': list_of_barcodes = db.get_borrower_loans_barcodes(borrower_id) for bc in list_of_barcodes: bc_recid = db.get_id_bibrec(bc) item_description = db.get_item_description(bc) queue = db.get_queue_request(bc_recid, item_description) #check if there are requests if len(queue) != 0 and queue[0][0] != borrower_id: message = "It is not possible to renew your loan for %(x_strong_tag_open)s%(x_title)s%(x_strong_tag_close)s" % {'x_title': book_title_from_MARC(bc_recid), 'x_strong_tag_open': '<strong>', 'x_strong_tag_close': '</strong>'} message += ' ' + _("Another user is waiting for this book.") infos.append(message) else: loan_id = db.get_current_loan_id(bc) db.renew_loan(loan_id, new_due_date) #update_status_if_expired(loan_id) tag_all_requests_as_done(barcode, borrower_id) if infos == []: infos.append(_("All loans have been renewed with success.")) loans = db.get_borrower_loans(borrower_id) requests = db.get_borrower_requests(borrower_id) proposals = db.get_borrower_proposals(borrower_id) body = bc_templates.tmpl_yourloans(loans=loans, requests=requests, proposals=proposals, borrower_id=borrower_id, infos=infos, ln=ln) return body
def ill_register_request(uid, title, authors, place, publisher, year, edition, isbn, period_of_interest_from, period_of_interest_to, additional_comments, conditions, only_edition, request_type, barcode='', ln=CFG_SITE_LANG): """ Register new ILL request. Create new record (collection: ILL Books) @param uid: user id @type: int @param authors: book's authors @type authors: string @param place: place of publication @type place: string @param publisher: book's publisher @type publisher: string @param year: year of publication @type year: string @param edition: book's edition @type edition: string @param isbn: book's isbn @type isbn: string @param period_of_interest_from: period of interest - from(date) @type period_of_interest_from: string @param period_of_interest_to: period of interest - to(date) @type period_of_interest_to: string @param additional_comments: comments given by the user @type additional_comments: string @param conditions: ILL conditions @type conditions: boolean @param only_edition: borrower wants only the given edition @type only_edition: boolean """ _ = gettext_set_language(ln) item_info = (title, authors, place, publisher, year, edition, isbn) create_ill_record(item_info) book_info = {'title': title, 'authors': authors, 'place': place, 'publisher': publisher, 'year': year, 'edition': edition, 'isbn': isbn} user = collect_user_info(uid) borrower_id = db.get_borrower_id_by_email(user['email']) #Check if borrower is on DB. if borrower_id != 0: address = db.get_borrower_address(user['email']) #Check if borrower has an address. if address != 0: #Check if borrower has accepted ILL conditions. if conditions: #Register ILL request on crcILLREQUEST. db.ill_register_request(book_info, borrower_id, period_of_interest_from, period_of_interest_to, CFG_BIBCIRCULATION_ILL_STATUS_NEW, additional_comments, only_edition or 'False', request_type, budget_code='', barcode=barcode) #Display confirmation message. message = _("Your ILL request has been registered and the " \ "document will be sent to you via internal mail.") #Notify librarian about new ILL request. send_email(fromaddr=CFG_BIBCIRCULATION_LIBRARIAN_EMAIL, toaddr=CFG_BIBCIRCULATION_LOANS_EMAIL, subject=_('ILL request for books confirmation'), content="", attempt_times=1, attempt_sleeptime=10 ) #Borrower did not accept ILL conditions. else: infos = [] infos.append(_("You didn't accept the ILL conditions.")) body = bc_templates.tmpl_display_ill_form(infos=infos, ln=ln) #Borrower doesn't have an address. else: #If BibCirculation at CERN, use LDAP. if CFG_CERN_SITE == 1: email = user['email'] result = get_user_info_from_ldap(email) try: ldap_address = result['physicalDeliveryOfficeName'][0] except KeyError: ldap_address = None # verify address if ldap_address is not None: db.add_borrower_address(ldap_address, email) db.ill_register_request(book_info, borrower_id, period_of_interest_from, period_of_interest_to, CFG_BIBCIRCULATION_ILL_STATUS_NEW, additional_comments, only_edition or 'False', request_type, budget_code='', barcode=barcode) message = _("Your ILL request has been registered and" \ " the document will be sent to you via" \ " internal mail.") send_email(fromaddr=CFG_BIBCIRCULATION_LIBRARIAN_EMAIL, toaddr=CFG_BIBCIRCULATION_LOANS_EMAIL, subject=_('ILL request for books confirmation'), content="", attempt_times=1, attempt_sleeptime=10 ) else: message = _("It is not possible to validate your request.") message += ' ' + _("Your office address is not available.") message += ' ' + _("Please contact %(contact_email)s") % \ {'contact_email': CFG_BIBCIRCULATION_LIBRARIAN_EMAIL} else: # Get information from CERN LDAP if CFG_CERN_SITE == 1: result = get_user_info_from_ldap(email=user['email']) try: name = result['cn'][0] except KeyError: name = None try: email = result['mail'][0] except KeyError: email = None try: phone = result['telephoneNumber'][0] except KeyError: phone = None try: address = result['physicalDeliveryOfficeName'][0] except KeyError: address = None try: mailbox = result['postOfficeBox'][0] except KeyError: mailbox = None try: ccid = result['employeeID'][0] except KeyError: ccid = '' # verify address if address is not None: db.new_borrower(ccid, name, email, phone, address, mailbox, '') borrower_id = db.get_borrower_id_by_email(email) db.ill_register_request(book_info, borrower_id, period_of_interest_from, period_of_interest_to, CFG_BIBCIRCULATION_ILL_STATUS_NEW, additional_comments, only_edition or 'False', request_type, budget_code='', barcode=barcode) message = _("Your ILL request has been registered and" \ " the document will be sent to you via" \ " internal mail.") send_email(fromaddr=CFG_BIBCIRCULATION_LIBRARIAN_EMAIL, toaddr=CFG_BIBCIRCULATION_LOANS_EMAIL, subject='ILL request for books confirmation', content="", attempt_times=1, attempt_sleeptime=10 ) else: message = _("It is not possible to validate your request.") message += ' ' + _("Your office address is not available.") message += ' ' + _("Please contact %(contact_email)s") % \ {'contact_email': CFG_BIBCIRCULATION_LIBRARIAN_EMAIL} body = bc_templates.tmpl__with_recid(message=message, ln=ln) return body
def ill_register_request_with_recid(recid, uid, period_of_interest_from, period_of_interest_to, additional_comments, conditions, only_edition, barcode='', ln=CFG_SITE_LANG): """ Register a new ILL request. @param recid: identify the record. Primary key of bibrec. @type recid: int @param uid: user id @type: int @param period_of_interest_from: period of interest - from(date) @type period_of_interest_from: string @param period_of_interest_to: period of interest - to(date) @type period_of_interest_to: string """ _ = gettext_set_language(ln) # Create a dictionary. book_info = "{'recid': " + str(recid) + "}" user = collect_user_info(uid) borrower_id = db.get_borrower_id_by_email(user['email']) if borrower_id is None: if CFG_CERN_SITE == 1: result = get_user_info_from_ldap(email=user['email']) try: name = result['cn'][0] except KeyError: name = None try: email = result['mail'][0] except KeyError: email = None try: phone = result['telephoneNumber'][0] except KeyError: phone = None try: address = result['physicalDeliveryOfficeName'][0] except KeyError: address = None try: mailbox = result['postOfficeBox'][0] except KeyError: mailbox = None try: ccid = result['employeeID'][0] except KeyError: ccid = '' if address is not None: db.new_borrower(ccid, name, email, phone, address, mailbox, '') else: message = bc_templates.tmpl_message_request_send_fail_cern("Office address not available.") else: message = bc_templates.tmpl_message_request_send_fail_other("Office address not available.") return bc_templates.tmpl_ill_register_request_with_recid( message=message, ln=ln) address = db.get_borrower_address(user['email']) if not address: if CFG_CERN_SITE == 1: email = user['email'] result = get_user_info_from_ldap(email) try: address = result['physicalDeliveryOfficeName'][0] except KeyError: address = None if address is not None: db.add_borrower_address(address, email) else: message = bc_templates.tmpl_message_request_send_fail_cern("Office address not available.") else: message = bc_templates.tmpl_message_request_send_fail_other("Office address not available.") return bc_templates.tmpl_ill_register_request_with_recid( message=message, ln=ln) if not conditions: infos = [] infos.append(_("You didn't accept the ILL conditions.")) return bc_templates.tmpl_ill_request_with_recid(recid, infos=infos, ln=ln) elif conditions == 'register_acquisition_suggestion': # This ILL request entry is a book proposal. db.ill_register_request(book_info, borrower_id, period_of_interest_from, period_of_interest_to, CFG_BIBCIRCULATION_PROPOSAL_STATUS_NEW, additional_comments, only_edition or 'False','proposal-book', barcode=barcode) else: db.ill_register_request(book_info, borrower_id, period_of_interest_from, period_of_interest_to, CFG_BIBCIRCULATION_ILL_STATUS_NEW, additional_comments, only_edition or 'False','book', barcode=barcode) if CFG_CERN_SITE == 1: message = bc_templates.tmpl_message_request_send_ok_cern() else: message = bc_templates.tmpl_message_request_send_ok_other() #Notify librarian about new ILL request. send_email(fromaddr=CFG_BIBCIRCULATION_LIBRARIAN_EMAIL, toaddr=CFG_BIBCIRCULATION_LOANS_EMAIL, subject='ILL request for books confirmation', content='', #hold_request_mail(recid=recid, borrower_id=borrower_id), attempt_times=1, attempt_sleeptime=10) return bc_templates.tmpl_ill_register_request_with_recid( message=message, ln=ln)