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