コード例 #1
0
ファイル: views.py プロジェクト: lujancita/gplib
def user_loans(request, user_id):
    """
    Returns the user loans as a json object
    """

    # use custom wrapper here, becouse default don't let you access to view keys
    loans = WFItem.view('circulation/loans',
                        include_docs=True,
                        wrapper=WFItem.wrap,
                        startkey=[user_id],
                        endkey=[user_id, {}, {}])

    reserves = WFItem.view('circulation/reserves',
                           include_docs=True,
                           wrapper=WFItem.wrap,
                           startkey=[user_id],
                           endkey=[user_id, {}, {}])

    start = int(request.POST['iDisplayStart'])
    length = int(request.POST['iDisplayLength'])
    secho = int(request.POST['sEcho']) + 1
    count = len(loans) + len(reserves)

    columns = []
    for loan in loans:
        user_id, start, end = loan['_doc']['key']
        start, end = format_date(start), format_date(end)
        start = start.strftime("%d/%m/%Y")
        end = end.strftime("%d/%m/%Y")

        columns.append([
            loan._id, loan.inventory_nbr, "prestamo", loan.title, start, end,
            ""
        ])

    for reserve in reserves:
        user_id, start, end = reserve['_doc']['key']
        start, end = format_date(start), format_date(end)
        start = start.strftime("%d/%m/%Y")
        end = end.strftime("%d/%m/%Y")
        columns.append([
            reserve._id, reserve.inventory_nbr, "reserva", reserve.title,
            start, end, ""
        ])

    return_dict = {
        "sEcho": secho,
        "iTotalRecords": count,
        "iTotalDisplayRecords": count,
        "aaData": columns
    }

    return jsonfy(**return_dict)
コード例 #2
0
ファイル: views.py プロジェクト: lujancita/gplib
def catalog_items(status, user):
    if status.endswith('libro'):
        wfname = 'procesos_tecnicos'
    elif status.endswith('revista'):
        wfname = 'hemeroteca'
    else:
        raise Exception, 'revista or libro'

    filter_items = WFItem.view('couchflow/filter_items')

    items_query = filter_items[status]

    selected_items = [item['id'] for item in items_query]

    if not selected_items:
        return

    workflows = WorkFlow.view("couchflow/orig_workflows", include_docs=True)
    workflows = workflows[wfname]
    workflow = workflows.one()

    clone = clone_this_wf(workflow._id, user._id)

    clone.set_enabled()
    try:
        clone.save()
    except Exception, error:
        print error
コード例 #3
0
ファイル: isis2gplib.py プロジェクト: PabloZambrano/gplib
    def handle(self, *args, **options):
        # filename = args['filename']
        subfields = True
        filename = options["from"]
        items = []

        db = WFItem.get_db()
        orig_item = WFItem.view("couchflow/item_names", include_docs=True)["libro"].first()

        org_json_item = orig_item.to_json()

        counter = 0

        i = 0
        for record in iter_iso_records(filename, subfields):
            i += 1
            json_item = clone_json(org_json_item)
            json_item["fields_properties"]["99989"]["list"][0]["exec_value"] = ["catalogado"]

            copies = []
            has_isbn = False
            for key, fields in record.iteritems():
                key = "%03d" % int(key)
                if key == "020":
                    has_isbn = True

                if key == "852":
                    copies = fields
                    continue
                add_field(key, fields, json_item)

            if not has_isbn and options["fake_isbn"]:
                json_item["fields_properties"]["1020"]["list"][0]["subfields"]["a"]["exec_value"] = [uuid.uuid4().hex]

            items.append(json_item)

            # add existences
            for field in copies:
                json_item = clone_json(json_item)
                add_field("852", [field], json_item)
                add_field("1111", [{"_": "existencia"}], json_item)
                items.append(json_item)

            if len(items) >= options["per_iter"]:
                if not options["dry_run"]:
                    db.bulk_save(items, use_uuids=False)
                counter += len(items)
                items = []
                print "%s %s items (total %s)" % (
                    "Parsed" if options["dry_run"] else "Inserted",
                    options["per_iter"],
                    counter,
                )

        if items and not options["dry_run"]:
            db.bulk_save(items, use_uuids=False)
        counter += len(items)
        print
        print "Done, %s items" % counter
        print ""
コード例 #4
0
def admin(request):
    user = request.user
    context = {"user": user}

    wf_items = list(WFItem.view("couchflow/items", include_docs=True))
    save_config(request, wf_items)

    settings = Config.get_or_create("search_settings")
    default_type = settings.values.get('default_type', '')

    if request.method == "POST":
        post_default_type = request.POST.get('default_type', '')
        if post_default_type != default_type:
            settings.values['default_type'] = post_default_type.lower()
            settings.save()
            default_type = post_default_type

    items = []
    for item in wf_items:
        fields = {}
        for _id, ifields in item.fields_properties.iteritems():
            # Just marc fields
            if int(ifields['id']) > 1000:
                continue

            field_name = ifields['id']

            if ifields['list'][0].subfields:
                default_field = {
                    'id': ifields['id'],
                    'name': ifields['field_name'],
                    'subfields': {}
                }

                subfields = fields.setdefault(field_name,
                                              default_field)["subfields"]

                for subfield in ifields['list'][0].subfields.values():
                    sfield_name = '%s_%s' % (ifields['id'],
                                             subfield.field_name)
                    sfield = subfields.setdefault(sfield_name, {})
                    sfield['name'] = subfield.field_name

                fields[field_name]['subfields'] = sorted(subfields.items())
            else:
                fields.setdefault(field_name, {})['id'] = field_name
                fields[field_name]['name'] = ifields.field_name

        items.append((item.name, item._id, sorted(fields.items())))

    context['items'] = items
    context['default_type'] = default_type.lower()

    return render_to_response('search/admin.html', context)
コード例 #5
0
ファイル: views.py プロジェクト: GaloC/gplib
def admin(request):
    user = request.user
    context = {"user": user}

    wf_items = list(WFItem.view("couchflow/items", include_docs=True))
    save_config(request, wf_items)

    settings = Config.get_or_create("search_settings")
    default_type = settings.values.get('default_type', '')

    if request.method == "POST":
        post_default_type = request.POST.get('default_type', '')
        if post_default_type != default_type:
            settings.values['default_type'] = post_default_type.lower()
            settings.save()
            default_type = post_default_type

    items = []
    for item in wf_items:
        fields = {}
        for _id, ifields in item.fields_properties.iteritems():
            # Just marc fields
            if int(ifields['id']) > 1000:
                continue

            field_name = ifields['id']

            if ifields['list'][0].subfields:
                default_field = {'id': ifields['id'], 'name':
                            ifields['field_name'],
                            'subfields': {}}

                subfields = fields.setdefault(field_name,
                                default_field)["subfields"]

                for subfield in ifields['list'][0].subfields.values():
                    sfield_name = '%s_%s' % (ifields['id'],
                                        subfield.field_name)
                    sfield = subfields.setdefault(sfield_name, {})
                    sfield['name'] = subfield.field_name

                fields[field_name]['subfields'] = sorted(subfields.items())
            else:
                fields.setdefault(field_name ,{})['id'] = field_name
                fields[field_name]['name'] = ifields.field_name

        items.append((item.name, item._id, sorted(fields.items())))

    context['items'] = items
    context['default_type'] = default_type.lower()

    return render_to_response('search/admin.html', context)
コード例 #6
0
ファイル: views.py プロジェクト: lujancita/gplib
def filter_wflows(user):
    for i in ('libro', 'revista'):
        catalog_items('a catalogar %s' % i, user)
    # TODO
    return
    db = FilterWFItems.get_db()
    wf_tasks = db.view("couchflow/wf_by_first_task_type",
            include_docs=True)["FilterWFItems":"FilterWFItems"]

    tasks = {}
    wflows = []

    wf_tasks = wf_tasks.all()
    for value in wf_tasks:
        if value["doc"]["doc_type"] == "WorkFlow":
            wflows.append(WorkFlow.wrap(value["doc"]))
        elif value["doc"]["doc_type"] == "FilterWFItems":
            task = FilterWFItems.wrap(value["doc"])
            tasks[task._id] = task

    for wf in wflows:
        task = tasks.get(wf.first_task_id, None)
        if not task:
            raise Exception, "Check"
        field = task.item_fields.get("99989", None)
        print "Filter by", field
        if not field:
            print "cant get status field"
            continue
        filter_items = WFItem.view('couchflow/filter_items')
        items_query = filter_items[field]
        selected_items = [item['id'] for item in items_query]

        if not selected_items:
            continue

        clone = clone_this_wf(wf._id, user._id)

        clone.set_enabled()
        try:
            clone.save()
        except Exception, error:
            print error

        tasks = Task.view("couchflow/activetask", include_docs=True)
        tasks = tasks[clone._id]
        task = tasks.one()

        task.wfitems_ids = selected_items
        task.save()
        task.active_conector()
コード例 #7
0
ファイル: views.py プロジェクト: lujancita/gplib
def return_loan(request, nro_inv=None):
    """
    Returns a loan by inventory number
    """

    context = {"user": request.user}

    if not request.method == "POST":
        return render_to_response('circulation/return_loan.html', context)

    nro_inv = request.POST.get("inventory_nbr", None)

    if not nro_inv:
        context["status"] = "Debe ingresar el numero de inventario"
        return render_to_response('circulation/return_loan.html', context)

    items = WFItem.view('couchflow/by_inventory_nbr',
                        include_docs=True,
                        startkey=nro_inv,
                        endkey=nro_inv)

    if len(items) > 1:
        print "should only be one item"
    item = items.first()

    if not item:
        context["status"] = "Ese item no existe"
        return render_to_response('circulation/return_loan.html', context)

    if not item.loan.start:
        context["status"] = "Ese item no se encuentra prestado"
        return render_to_response('circulation/return_loan.html', context)

    # remove loan
    old_loan_type = item.loan.type
    old_loan_user = item.loan.user_id
    item.loan = Loan()
    item.save()
    CirculationLog(type='return',
                   item_id=item._id,
                   item_type=item.item_type,
                   user_id=old_loan_user,
                   loan_type=old_loan_type).save()

    context["status"] = 'El item "%s" ha sido devuelto exitosamente.' % nro_inv
    return render_to_response('circulation/return_loan.html', context)
コード例 #8
0
ファイル: views.py プロジェクト: lujancita/gplib
def get_item_inventory(request, item_id):
    """
    Returns the list of inventory items
    """

    # TODO: Should this functiong get urn instead item_id?
    try:
        item = WFItem.get(item_id)
    except ResourceNotFound:
        return jsonfy(error='ResourceNotFound')

    urn = item.urn

    if not urn:
        return jsonfy(error='InvalidItem')

    items = WFItem.view('couchflow/by_urn',
                        include_docs=True,
                        startkey=urn,
                        endkey=urn).all()

    return jsonfy(items=[item.inventory_nbr for item in items])
コード例 #9
0
ファイル: views.py プロジェクト: lujancita/gplib
def get_reserves_item(self, item_id):

    start = datetime.date.today()
    end = start + datetime.timedelta(days=7)

    requested_item = WFItem.get(item_id)

    urn = requested_item.urn

    if not urn:
        return jsonfy(error='invalid urn')

    items = WFItem.view('couchflow/by_urn',
                        include_docs=True,
                        startkey=urn,
                        endkey=urn).all()

    loanable = False
    loanable_item = None

    for item in items:
        if not item.inventory_nbr:
            print "inventory_nbr is None"
            continue
        if not item.loan.start:
            loanable = True
            for reserve in item.reserves:
                if end >= reserve.start:
                    print "item unlonable:"
                    print "start:%s end: %s" % (start, end)
                    print reserve
                    print
                    loanable = False
                    break
        if loanable:
            loanable_item = item
            break
コード例 #10
0
ファイル: isis2gplib.py プロジェクト: lujancita/gplib
    def handle(self, *args, **options):
        #filename = args['filename']
        subfields = True
        filename = options['from']
        items = []

        db = WFItem.get_db()
        orig_item = WFItem.view('couchflow/item_names',
                                include_docs=True)['libro'].first()

        org_json_item = orig_item.to_json()

        counter = 0

        i = 0
        for record in iter_iso_records(filename, subfields):
            i += 1
            json_item = clone_json(org_json_item)
            json_item["fields_properties"]['99989']['list'][0][
                'exec_value'] = ['catalogado']

            copies = []
            has_isbn = False
            for key, fields in record.iteritems():
                key = "%03d" % int(key)
                if key == '020':
                    has_isbn = True

                if key == "852":
                    copies = fields
                    continue
                add_field(key, fields, json_item)

            if not has_isbn and options['fake_isbn']:
                json_item["fields_properties"]['1020']['list'][0] \
                    ['subfields']['a']['exec_value'] = [uuid.uuid4().hex]

            items.append(json_item)

            # add existences
            for field in copies:
                json_item = clone_json(json_item)
                add_field("852", [field], json_item)
                add_field("1111", [{"_": "existencia"}], json_item)
                items.append(json_item)

            if len(items) >= options['per_iter']:
                if not options['dry_run']:
                    db.bulk_save(items, use_uuids=False)
                counter += len(items)
                items = []
                print '%s %s items (total %s)' % (
                    'Parsed' if options['dry_run'] else 'Inserted',
                    options['per_iter'], counter)

        if items and not options['dry_run']:
            db.bulk_save(items, use_uuids=False)
        counter += len(items)
        print
        print "Done, %s items" % counter
        print ""