Example #1
0
def create_packages_and_items(shipment, name, description, num_packages,
                              number_of_each_kit):
    """

    :param shipment: Shipment to add the packages to.
    :param name: Name to use for every package.
    :param description: Description to use for every package.
    :param num_packages: How many packages to create
    :param number_of_each_kit: A dictionary, key is a Kit, value is the number of copies of
    the kit to add to each package.
    :return: QuerySet of the packages that were created.
    """
    first_pkg_number = shipment.next_package_number_in_shipment()
    kits = number_of_each_kit.keys()
    if len(kits) == 1:
        only_kit = kits[0]
    else:
        only_kit = None

    Package.objects.bulk_create([
        Package(shipment=shipment,
                name=name,
                description=description,
                kit=only_kit,
                number_in_shipment=i + first_pkg_number,
                code='%s%d.%d' %
                (settings.PREFIX_URL, shipment.id, i + first_pkg_number))
        for i in range(num_packages)
    ])

    # We don't know what PKs were assigned to our new packages, so we
    # need to query for the created packages. It's just one query, though.
    packages_created = shipment.packages.filter(
        number_in_shipment__gte=first_pkg_number)

    if number_of_each_kit:
        # Go ahead and create package items from kits in each package
        PackageItem.objects.bulk_create([
            PackageItem.from_kit_item(
                package,
                kit_item,
                quantity=number_of_each_kit[kit] * kit_item.quantity,
                save=False) for package in packages_created for kit in kits
            for kit_item in kit.items.all()
        ])
    return packages_created
Example #2
0
def create_packages_and_items(shipment, name, description, num_packages, number_of_each_kit):
    """

    :param shipment: Shipment to add the packages to.
    :param name: Name to use for every package.
    :param description: Description to use for every package.
    :param num_packages: How many packages to create
    :param number_of_each_kit: A dictionary, key is a Kit, value is the number of copies of
    the kit to add to each package.
    :return: QuerySet of the packages that were created.
    """
    first_pkg_number = shipment.next_package_number_in_shipment()
    kits = number_of_each_kit.keys()
    if len(kits) == 1:
        only_kit = kits[0]
    else:
        only_kit = None

    Package.objects.bulk_create([
        Package(shipment=shipment,
                name=name,
                description=description,
                kit=only_kit,
                number_in_shipment=i + first_pkg_number,
                code='%s%d.%d' % (settings.PREFIX_URL, shipment.id, i + first_pkg_number))
        for i in range(num_packages)
    ])

    # We don't know what PKs were assigned to our new packages, so we
    # need to query for the created packages. It's just one query, though.
    packages_created = shipment.packages.filter(number_in_shipment__gte=first_pkg_number)

    if number_of_each_kit:
        # Go ahead and create package items from kits in each package
        PackageItem.objects.bulk_create([
            PackageItem.from_kit_item(package, kit_item,
                                      quantity=number_of_each_kit[kit] * kit_item.quantity,
                                      save=False)
            for package in packages_created
            for kit in kits
            for kit_item in kit.items.all()
        ])
    return packages_created
Example #3
0
 def test_from_kit_item_default_prices(self):
     catalog_item = CatalogItemFactory()
     kit_item = KitItemFactory(catalog_item=catalog_item)
     package = PackageFactory()
     PackageItem.from_kit_item(package, kit_item)
Example #4
0
 def test_from_catalog_item(self):
     item = PackageItem.from_catalog_item(self.package, self.catalog_item,
                                          self.quantity)
     self._compare(item, self.package, self.catalog_item, self.quantity)
Example #5
0
 def test_from_kit_item_default_prices(self):
     catalog_item = CatalogItemFactory()
     kit_item = KitItemFactory(catalog_item=catalog_item)
     package = PackageFactory()
     PackageItem.from_kit_item(package, kit_item)
Example #6
0
 def test_from_catalog_item(self):
     item = PackageItem.from_catalog_item(
         self.package, self.catalog_item, self.quantity)
     self._compare(item, self.package, self.catalog_item, self.quantity)
Example #7
0
 def save(self, *args, **kwargs):
     catalog_item = self.cleaned_data['catalog_item']
     quantity = self.cleaned_data['quantity']
     return PackageItem.from_catalog_item(self.package, catalog_item,
                                          quantity)
Example #8
0
 def save(self, *args, **kwargs):
     catalog_item = self.cleaned_data['catalog_item']
     quantity = self.cleaned_data['quantity']
     return PackageItem.from_catalog_item(self.package, catalog_item, quantity)