Esempio n. 1
0
def inventory_submit(request):
    if request.method != 'POST':
        return HttpResponseNotFound('No POST data sent')

    # list of bundleids to ignore
    bundleid_ignorelist = ['com.apple.print.PrinterProxy']
    submission = request.POST
    serial = submission.get('serial')
    machine = None
    if serial:
        try:
            machine = Machine.objects.get(serial=serial)
        except Machine.DoesNotExist:
            return HttpResponseNotFound('Serial Number not found')

        compressed_inventory = submission.get('base64bz2inventory')
        if compressed_inventory:
            compressed_inventory = compressed_inventory.replace(" ", "+")
            inventory_str = utils.decode_to_string(compressed_inventory)
            try:
                inventory_list = plistlib.readPlistFromString(inventory_str)
            except Exception:
                inventory_list = None
            if inventory_list:
                try:
                    inventory_meta = Inventory.objects.get(machine=machine)
                except Inventory.DoesNotExist:
                    inventory_meta = Inventory(machine=machine)
                inventory_meta.sha256hash = \
                    hashlib.sha256(inventory_str).hexdigest()
                # clear existing inventoryitems
                machine.inventoryitem_set.all().delete()
                # insert current inventory items
                inventory_items_to_be_created = []
                for item in inventory_list:
                    app, _ = Application.objects.get_or_create(
                        bundleid=item.get("bundleid", ""),
                        name=item.get("name", ""),
                        bundlename=item.get("CFBundleName", ""))
                    # skip items in bundleid_ignorelist.
                    if not item.get('bundleid') in bundleid_ignorelist:
                        i_item = InventoryItem(application=app,
                                               version=item.get("version", ""),
                                               path=item.get('path', ''),
                                               machine=machine)
                        if is_postgres():
                            inventory_items_to_be_created.append(i_item)
                        else:
                            i_item.save()
                machine.last_inventory_update = timezone.now()
                inventory_meta.save()

                if is_postgres():
                    InventoryItem.objects.bulk_create(
                        inventory_items_to_be_created)
            machine.save()
            return HttpResponse("Inventory submmitted for %s.\n" %
                                submission.get('serial'))

    return HttpResponse("No inventory submitted.\n")
Esempio n. 2
0
def inventory_new(request):
    """
    Inventory Edit Page
    """
    type = request.path.split("/")[-2]
    template = ""

    if type == "book":
        template = "capstone/book_edit.html"
    elif type == "dvd":
        template = "capstone/dvd_edit.html"
    else:
        template = ""

    if request.method == 'POST':
        if type == "book":
            form = BookEditForm(request.POST)
        elif type == "dvd":
            form = DVDEditForm(request.POST)
        else:
            form = {}

        if form.is_valid():
            new_item = form.save(commit=False)

            inventory_type = InventoryType.objects.filter(
                type_name__contains=type).first()

            inventory_item = InventoryItem(available=True,
                                           active=True,
                                           price=form.cleaned_data['price'],
                                           inventory_type=inventory_type)

            inventory_item.save()
            new_item.save()

            new_item.inventory = inventory_item
            new_item.save()

            return redirect('inventory_details',
                            pk=inventory_item.inventory_id)
    else:
        if type == "book":
            form = BookEditForm()
        elif type == "dvd":
            form = DVDEditForm()
        else:
            form = {}

    responseData = {
        "form": form,
    }

    return render(request, template, responseData)
Esempio n. 3
0
 def create_model(self, form):
     # only if its set do we care if its unique
     if form.identifier.data and InventoryItem.objects(
             identifier=form.identifier.data).count():
         flash('Identifier (%s) is already in use' % form.identifier.data)
         return False
     # overriden to update the date values of the model
     now = datetime.now()
     item = InventoryItem(
         name=form.name.data,
         identifier=form.identifier.data,
         comment=form.comment.data,
         status=form.status.data,
         # get the model for the target group
         group=InventoryGroup.objects.get(id=form.group.data),
         date_added=now,
         date_updated=now)
     try:
         item.save()
     except Exception, e:
         flash('Unable to add the item', category='error')
         if settings.DEBUG:
             flash('DEBUG: %s' % e, category='error')
         return False
Esempio n. 4
0
 def create_model(self, form):
     # only if its set do we care if its unique
     if form.identifier.data and InventoryItem.objects(identifier=form.identifier.data).count():
         flash('Identifier (%s) is already in use' % form.identifier.data)
         return False
     # overriden to update the date values of the model
     now = datetime.now()
     item = InventoryItem(
         name=form.name.data,
         identifier=form.identifier.data,
         comment=form.comment.data,
         status=form.status.data,
         # get the model for the target group
         group=InventoryGroup.objects.get(id=form.group.data),
         date_added=now,
         date_updated=now
     )
     try:
         item.save()
     except Exception, e:
         flash('Unable to add the item', category='error')
         if settings.DEBUG:
             flash('DEBUG: %s' % e, category='error')
         return False