def update_requests_statuses(barcode, recid=None):
    if recid == None:
        recid = db.get_recid(barcode)
    list_of_pending_requests = db.get_requests(recid, CFG_BIBCIRCULATION_REQUEST_STATUS_PENDING)
    some_copy_available = False
    copies_status = db.get_copies_status(recid)
    if copies_status is not None:
        for status in copies_status:
            if status in (CFG_BIBCIRCULATION_ITEM_STATUS_ON_SHELF, CFG_BIBCIRCULATION_ITEM_STATUS_IN_PROCESS):
                some_copy_available = True

    if len(list_of_pending_requests) == 1:
        if not some_copy_available:
            db.update_loan_request_status(list_of_pending_requests[0][0], CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING)
        else:
            return list_of_pending_requests[0][0]

    elif len(list_of_pending_requests) == 0:
        if some_copy_available:
            list_of_waiting_requests = db.get_requests(recid, CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING)
            if len(list_of_waiting_requests) > 0:
                db.update_loan_request_status(list_of_waiting_requests[0][0], CFG_BIBCIRCULATION_REQUEST_STATUS_PENDING)
                return list_of_waiting_requests[0][0]

    elif len(list_of_pending_requests) > 1:
        for request in list_of_pending_requests:
            db.update_loan_request_status(request[0], CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING)
        list_of_waiting_requests = db.get_requests(recid, CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING)
        if some_copy_available:
            db.update_loan_request_status(list_of_waiting_requests[0][0], CFG_BIBCIRCULATION_REQUEST_STATUS_PENDING)
            return list_of_waiting_requests[0][0]

    return None
def update_requests_statuses(barcode, recid=None):
    if recid == None:
        recid = db.get_recid(barcode)
    list_of_pending_requests = db.get_requests(recid,
                                    CFG_BIBCIRCULATION_REQUEST_STATUS_PENDING)
    some_copy_available = False
    copies_status = db.get_copies_status(recid)
    if copies_status is not None:
        for status in copies_status:
            if status in (CFG_BIBCIRCULATION_ITEM_STATUS_ON_SHELF,
                          CFG_BIBCIRCULATION_ITEM_STATUS_IN_PROCESS):
                some_copy_available = True

    if len(list_of_pending_requests) == 1:
        if not some_copy_available:
            db.update_loan_request_status(list_of_pending_requests[0][0],
                                    CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING)
        else:
            return list_of_pending_requests[0][0]

    elif len(list_of_pending_requests) == 0:
        if some_copy_available:
            list_of_waiting_requests = db.get_requests(recid,
                                    CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING)
            if len(list_of_waiting_requests) > 0:
                db.update_loan_request_status(list_of_waiting_requests[0][0],
                                    CFG_BIBCIRCULATION_REQUEST_STATUS_PENDING)
                return list_of_waiting_requests[0][0]

    elif len(list_of_pending_requests) > 1:
        for request in list_of_pending_requests:
            db.update_loan_request_status(request[0],
                                    CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING)
        list_of_waiting_requests = db.get_requests(recid,
                                    CFG_BIBCIRCULATION_REQUEST_STATUS_WAITING)
        if some_copy_available:
            db.update_loan_request_status(list_of_waiting_requests[0][0],
                                    CFG_BIBCIRCULATION_REQUEST_STATUS_PENDING)
            return list_of_waiting_requests[0][0]

    return None
def tag_all_requests_as_done(barcode, user_id):
    recid = db.get_recid(barcode)
    list_of_barcodes = db.get_barcodes(recid)
    for bc in list_of_barcodes:
        db.tag_requests_as_done(bc, user_id)
Beispiel #4
0
def perform_borrower_loans(uid, barcode, borrower_id,
                           request_id, action, ln=CFG_SITE_LANG):
    """perofirme

    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)
        queue = db.get_queue_request(recid)

        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 sucess."))

    #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_recid(bc)
            queue = db.get_queue_request(bc_recid)

            #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)

    body = bc_templates.tmpl_yourloans(loans=loans, requests=requests,
                                       borrower_id=borrower_id, infos=infos,
                                       ln=ln)
    return body
Beispiel #5
0
def perform_borrower_loans(uid,
                           barcode,
                           borrower_id,
                           request_id,
                           action,
                           ln=CFG_SITE_LANG):
    """perofirme

    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)
        queue = db.get_queue_request(recid)

        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 sucess."))

    #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_recid(bc)
            queue = db.get_queue_request(bc_recid)

            #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)

    body = bc_templates.tmpl_yourloans(loans=loans,
                                       requests=requests,
                                       borrower_id=borrower_id,
                                       infos=infos,
                                       ln=ln)
    return body
def tag_all_requests_as_done(barcode, user_id):
    recid = db.get_recid(barcode)
    list_of_barcodes = db.get_barcodes(recid)
    for bc in list_of_barcodes:
        db.tag_requests_as_done(bc, user_id)