def perform_new_request_send(uid, recid, period_from, period_to, barcode, ln=CFG_SITE_LANG): """ @param recid: recID - Invenio record identifier @param ln: language of the page """ nb_requests = 0 all_copies_on_loan = True description = db.get_item_description(barcode) copies = db.get_barcodes(recid, description) for bc in copies: nb_requests += db.get_number_requests_per_copy(bc) if db.is_item_on_loan(bc) is None: all_copies_on_loan = False if nb_requests == 0: if all_copies_on_loan: status = CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING else: status = CFG_BIBCIRCULATION_REQUEST_STATUS_PENDING else: status = CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING return perform_new_request_send_message(uid, recid, period_from, period_to, barcode, status, mail_subject='New request', mail_template='notification', mail_remarks='', ln=ln)
def tag_all_requests_as_done(barcode, user_id): recid = db.get_id_bibrec(barcode) description = db.get_item_description(barcode) list_of_barcodes = db.get_barcodes(recid, description) for bc in list_of_barcodes: db.tag_requests_as_done(user_id, bc)
def task_run_core(): """ Run daemon """ write_message("Starting...") if task_get_option("update-borrowers"): write_message("Started update-borrowers") list_of_borrowers = db.get_all_borrowers() total_borrowers = len(list_of_borrowers) for done, borrower in enumerate(list_of_borrowers): user_id = borrower[0] update_user_info_from_ldap(user_id) if done % 10 == 0: task_update_progress("Borrower: updated %d out of %d." % (done, total_borrowers)) task_sleep_now_if_required(can_stop_too=True) task_update_progress("Borrower: updated %d out of %d." % (done+1, total_borrowers)) write_message("Updated %d out of %d total borrowers" % (done+1, total_borrowers)) if task_get_option("update-requests"): write_message("Started update-requests") list_of_reqs = db.get_loan_request_by_status(CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING) for (_request_id, recid, bc, _name, borrower_id, _library, _location, _date_from, _date_to, _request_date) in list_of_reqs: description = db.get_item_description(bc) list_of_barcodes = db.get_barcodes(recid, description) for barcode in list_of_barcodes: update_requests_statuses(barcode) task_sleep_now_if_required(can_stop_too=True) task_update_progress("Requests due updated from 'waiting' to 'pending'.") write_message("Requests due updated from 'waiting' to 'pending'.") if task_get_option("overdue-letters"): write_message("Started overdue-letters") expired_loans = db.get_all_expired_loans() total_expired_loans = len(expired_loans) for done, (borrower_id, _bor_name, recid, _barcode, _loaned_on, _due_date, _number_of_renewals, number_of_letters, date_letters, _notes, loan_id) in enumerate(expired_loans): number_of_letters=int(number_of_letters) content = '' if number_of_letters == 0: content = generate_email_body(CFG_BIBCIRCULATION_TEMPLATES['RECALL1'], loan_id) elif number_of_letters == 1 and must_send_second_recall(date_letters): content = generate_email_body(CFG_BIBCIRCULATION_TEMPLATES['RECALL2'], loan_id) elif number_of_letters == 2 and must_send_third_recall(date_letters): content = generate_email_body(CFG_BIBCIRCULATION_TEMPLATES['RECALL3'], loan_id) elif number_of_letters >= 3 and must_send_third_recall(date_letters): content = generate_email_body(CFG_BIBCIRCULATION_TEMPLATES['RECALL3'], loan_id) if content != '': title = book_title_from_MARC(recid) subject = "LOAN RECALL: " + title update_expired_loan(loan_id) send_overdue_letter(borrower_id, CFG_BIBCIRCULATION_LOANS_EMAIL, subject, content) if done % 10 == 0: task_update_progress("Loan recall: sent %d out of %d." % (done, total_expired_loans)) task_sleep_now_if_required(can_stop_too=True) task_update_progress("Loan recall: processed %d out of %d expires loans." % (done+1, total_expired_loans)) write_message("Processed %d out of %d expired loans." % (done+1, total_expired_loans)) # Recalls for expired ILLs write_message("Started overdue-letters for Inter Library Loans") expired_ills = db.get_all_expired_ills() total_expired_ills = len(expired_ills) for done, (ill_id, borrower_id, item_info, number_of_letters, date_letters) in enumerate(expired_ills): number_of_letters=int(number_of_letters) content = '' if number_of_letters == 0: content = generate_email_body(CFG_BIBCIRCULATION_TEMPLATES['ILL_RECALL1'], ill_id, ill=1) elif number_of_letters == 1 and must_send_second_recall(date_letters): content = generate_email_body(CFG_BIBCIRCULATION_TEMPLATES['ILL_RECALL2'], ill_id, ill=1) elif number_of_letters == 2 and must_send_third_recall(date_letters): content = generate_email_body(CFG_BIBCIRCULATION_TEMPLATES['ILL_RECALL3'], ill_id, ill=1) elif number_of_letters >= 3 and must_send_third_recall(date_letters): content = generate_email_body(CFG_BIBCIRCULATION_TEMPLATES['ILL_RECALL3'], ill_id, ill=1) if content != '' and looks_like_dictionary(item_info): item_info = eval(item_info) if 'title' in item_info: book_title = item_info['title'] subject = "ILL RECALL: " + str(book_title) update_expired_loan(loan_id=ill_id, ill=1) send_overdue_letter(borrower_id, CFG_BIBCIRCULATION_ILLS_EMAIL, subject, content) if done % 10 == 0: task_update_progress("ILL recall: sent %d out of %d." % (done, total_expired_ills)) task_sleep_now_if_required(can_stop_too=True) task_update_progress("ILL recall: processed %d out of %d expired ills." % (done+1, total_expired_ills)) write_message("Processed %d out of %d expired ills." % (done+1, total_expired_ills)) return 1