コード例 #1
0
def task_run_core():
    """
    run daemon
    """

    if task_get_option("update-borrowers"):
        list_of_borrowers = db.get_all_borrowers()

        total_borrowers = len(list_of_borrowers)
        done  = 0

        for borrower in list_of_borrowers:
            user_id = borrower[0]
            update_user_info_from_ldap(user_id)
            done+=1
            task_update_progress("Done %d out of %d." % (done, total_borrowers))
            task_sleep_now_if_required(can_stop_too=True)

    if task_get_option("overdue-letters"):
        expired_loans = db.get_all_expired_loans()

        total_expired_loans = len(expired_loans)
        done  = 0

        for (borrower_id, _bor_name, recid, _barcode, _loaned_on,
             _due_date, _number_of_renewals, number_of_letters,
             date_letters, _notes, loan_id) in 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, subject, content)

            done+=1

            task_update_progress("Done %d out of %d." % (done, total_expired_loans))

            task_sleep_now_if_required(can_stop_too=True)
            time.sleep(1)

    return 1
コード例 #2
0
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
コード例 #3
0
def perform_borrower_loans(uid,
                           barcode,
                           borrower_id,
                           request_id,
                           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)
    """

    infos = []

    is_borrower = db.is_borrower(db.get_invenio_user_email(uid))
    loans = db.get_borrower_loans(is_borrower)
    requests = db.get_borrower_requests(is_borrower)

    tmp_date = datetime.date.today() + datetime.timedelta(days=30)
    new_due_date = get_datetext(tmp_date.year, tmp_date.month, tmp_date.day)

    #renew loan
    if barcode:
        recid = db.get_id_bibrec(barcode)
        queue = db.get_queue_request(recid)

        if len(queue) != 0:
            infos.append("It is not possible to renew your loan for " \
                         "<strong>" + book_title_from_MARC(recid) + "</strong>. Another user " \
                         "is waiting for this book.")
        else:
            db.update_due_date(barcode, new_due_date)
            infos.append("Your loan has been renewed with sucess.")

    #cancel request
    if request_id:
        db.cancel_request(request_id, 'cancelled')
        make_copy_available(request_id)

    #renew all loans
    elif borrower_id:
        list_of_recids = db.get_borrower_recids(borrower_id)
        for (recid) in list_of_recids:
            queue = db.get_queue_request(recid[0])

            #check if there are requests
            if len(queue) != 0:
                infos.append("It is not possible to renew your loan for " \
                             "<strong>" + book_title_from_MARC(recid) + "</strong>. Another user" \
                             " is waiting for this book.")
            else:
                db.update_due_date_borrower(borrower_id, new_due_date)
        infos.append("All loans have been renewed with success.")

    body = bibcirculation_templates.tmpl_yourloans(loans=loans,
                                                   requests=requests,
                                                   borrower_id=is_borrower,
                                                   infos=infos,
                                                   ln=ln)

    return body
コード例 #4
0
def perform_borrower_loans(uid, barcode, borrower_id,
                           request_id, 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)
    """

    infos = []

    is_borrower = db.is_borrower(db.get_invenio_user_email(uid))
    loans = db.get_borrower_loans(is_borrower)
    requests = db.get_borrower_requests(is_borrower)

    tmp_date = datetime.date.today() + datetime.timedelta(days=30)
    new_due_date = get_datetext(tmp_date.year, tmp_date.month, tmp_date.day)

    #renew loan
    if barcode:
        recid = db.get_id_bibrec(barcode)
        queue = db.get_queue_request(recid)

        if len(queue) != 0:
            infos.append("It is not possible to renew your loan for " \
                         "<strong>" + book_title_from_MARC(recid) + "</strong>. Another user " \
                         "is waiting for this book.")
        else:
            db.update_due_date(barcode, new_due_date)
            infos.append("Your loan has been renewed with sucess.")

    #cancel request
    if request_id:
        db.cancel_request(request_id, 'cancelled')
        make_copy_available(request_id)

    #renew all loans
    elif borrower_id:
        list_of_recids = db.get_borrower_recids(borrower_id)
        for (recid) in list_of_recids:
            queue = db.get_queue_request(recid[0])

            #check if there are requests
            if len(queue) != 0:
                infos.append("It is not possible to renew your loan for " \
                             "<strong>" + book_title_from_MARC(recid) + "</strong>. Another user" \
                             " is waiting for this book.")
            else:
                db.update_due_date_borrower(borrower_id,
                                            new_due_date)
        infos.append("All loans have been renewed with success.")

    body = bibcirculation_templates.tmpl_yourloans(loans=loans,
                                                   requests=requests,
                                                   borrower_id=is_borrower,
                                                   infos=infos,
                                                   ln=ln)

    return body
コード例 #5
0
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, _call_no,
             _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 item_info.has_key('title'):
                    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
コード例 #6
0
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, _call_no, _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 item_info.has_key('title'):
                    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