def upload_shells_spreadsheet(request):
    if request.method == 'POST':
        form = BulkImportForm(request.POST, request.FILES)
        if form.is_valid():
            spreadsheet = form.files['spreadsheet']

            bi = setup_bulk_importer()
            bi.process_spreadsheet(spreadsheet)

    else:
        form = BulkImportForm()

    return render(request, 'spreadsheet_upload.html', {
        'form': form
        })
Beispiel #2
0
def upload_storage_locations_spreadsheet(request):
    if request.method == 'POST':
        form = BulkImportForm(request.POST, request.FILES)
        if form.is_valid():
            spreadsheet = form.files['spreadsheet']

            updated_records = {'value': 0}

            def update_storage_locations(headers, values):
                try:
                    reg_num = values[headers.index('registration number')]
                    reg_num = int(reg_num)
                except ValueError:
                    messages.add_message(request, messages.ERROR, "Registration number not a number: '%s'" % reg_num)
                    return

                try:
                    mo = MuseumObject.objects.get(registration_number=reg_num)
                    mo.storage_row = str(values[headers.index('row')])
                    mo.storage_bay = str(values[headers.index('bay')])
                    mo.storage_shelf_drawer = str(values[headers.index('shelf/drawer')])
                    mo.save()
                    updated_records['value'] += 1
                except MuseumObject.DoesNotExist:
                    messages.add_message(request, messages.ERROR, "Unable to find registration number: %s" % reg_num)

                db.reset_queries()
                if (updated_records['value'] % 100) == 0:
                    logger.info("Updated %s records, lasted update was: %s" % (updated_records['value'], reg_num))
                    db.transaction.commit()

            bi = BulkDataImportHandler()
            bi.add_function_mapping(update_storage_locations)
            bi.process_spreadsheet(spreadsheet)
            db.transaction.commit()

            messages.add_message(request, messages.SUCCESS, "Updated %s records" % updated_records['value'])

    else:
        form = BulkImportForm()

    return render(request, 'storage_bulkupdate.html', {
        'form': form,
        'title': 'Bulk update storage locations'
        })