def inventory(request): form = InventorySearchForm(request.GET or None) extra_context = { 'form': form, 'product': None, 'product_inventory_tuples': None } if form.is_valid(): product = form.cleaned_data['product'] poly_product = polymorphic_type(product) product_inventory_tuples = [] if hasattr(poly_product, "get_physical_products"): for p in poly_product.get_physical_products(): inventory_records = [ir for ir in p.inventory_records.with_net_adjustments_qty().all()] product_inventory_tuples.append( (p, inventory_records) ) else: inventory_records = [ir for ir in poly_product.inventory_records.with_net_adjustments_qty().all()] product_inventory_tuples.append( (poly_product, inventory_records) ) extra_context.update({ 'product': poly_product, 'product_inventory_tuples': product_inventory_tuples, }) return render_to_response("inventory/inventory.html", extra_context, RequestContext(request))
def get_formsets(self, request, obj=None): # get polymorphic type of obj product = None if obj is not None: product = polymorphic_type(obj) for inline in self.get_inline_instances(request): # hide InventoryRecordInline for product types that don't have inventory if isinstance(inline, InventoryRecordInline) and \ product is not None and \ product.has_editable_inventory==False: continue yield inline.get_formset(request, obj)
def expected_inventory(request): form = ExpectedInventorySearchForm(request.GET or None) extra_context = { 'form': form } if form.is_valid(): product = form.cleaned_data['product'] facility = form.cleaned_data['facility'] start_time = form.cleaned_data['start_time'] end_time = form.cleaned_data['end_time'] increment = form.cleaned_data['increment'] poly_product = polymorphic_type(product) physical_products = [poly_product, ] if hasattr(poly_product, 'get_physical_products'): physical_products = getattr(poly_product, 'get_physical_products')() expected_inventories = [] for i, p in enumerate(physical_products): # goal is to build a list of lists in the the following format: # [ # [time1, expected_inventory_for_p1_at_time1, expected_inventory_for_p2_at_time1, ...] # [time1, expected_inventory_for_p1_at_time2, expected_inventory_for_p2_at_time2, ...] # ] expected_inventory = facility.get_expected_inventory_by_time(p.id, start_time, end_time, increment) for j, ei in enumerate(expected_inventory): if i == 0: # for first product, append new list with time record and expected inventory expected_inventories.append([ei[0], ei[1]]) else: # for subsequent products, append expected inventory to inner list expected_inventories[j].append(ei[1]) extra_context.update({ 'product': poly_product, 'physical_products': physical_products, 'expected_inventories': expected_inventories, 'form': form }) return render_to_response("inventory/expected_inventory.html", extra_context, RequestContext(request))
def _get_inventory_records(self): poly_product = polymorphic_type(self.physical_product) return poly_product.inventory_records
def _get_inventory_records(self): inventory_records = [] for p in self.get_physical_products(): poly_product = polymorphic_type(p) inventory_records.extend(poly_product.inventory_records) return inventory_records