def process_item(rent_list_item): """ Blah """ user = rent_list_item.user profile = user.get_profile() zip_code = profile.shipping_zip rent_list = RentList.objects.filter(user=user, rent_order=None) def chain_objects(o1, objects=[]): return itertools.chain([o1] if o1 else [], itertools.ifilter(lambda x: x != o1, objects)) debug("Home DC: %s", profile.dropship) from project.inventory.models import Dropship dropships = list(chain_objects(profile.dropship, Dropship.list_by_distance(zip_code))) def find_dropship(item): for dropship in dropships: if dropship.is_game_available(item, for_rent=True): return dropship return None rent_plan = MemberRentalPlan.get_current_plan(user) for list_item in chain_objects(rent_list_item, rent_list): dc = find_dropship(list_item.item) debug("Processing: %s %s...", list_item.user, list_item.item) if not dc: # TODO: Create report debug("Create report") continue if not rent_plan.is_valid(): return False order = RentOrder.create(user, list_item, dc) debug("Rent order was created: %s", order) return True return False
def complete(self, silent=False): def chain_objects(o1, objects=[]): return itertools.chain([o1] if o1 else [], itertools.ifilter(lambda x: x != o1, objects)) zip_code = self.shipping_zip_code profile = self.user.get_profile() logger.debug('Home DC: %s', profile.dropship) from project.inventory.models import Dropship dropships = list(chain_objects(profile.dropship, Dropship.list_by_distance(zip_code))) def find_dropship(item, is_new): for dropship in dropships: if dropship.is_game_available(item, is_new, for_rent=False): return dropship return None self.change_status(BuyOrderStatus.Checkout) for order_item in self.items.all(): if order_item.item.is_prereleased_game(): order_item.set_status(BuyOrderItemStatus.PreOrder) logger.debug('Pre-order item') continue logger.debug('Processing: %s %s...', self.user, order_item.item) dc = find_dropship(order_item.item, order_item.is_new) if not dc: order_item.set_status(BuyOrderItemStatus.Checkout) logger.debug('No inventory found') continue logger.debug('Item found in: %s', dc) order_item.source_dc = dc order_item.set_status(BuyOrderItemStatus.Pending) if not silent: self.send_order_creation_confirmation_email()
def find_dropship(item, is_new, zip_code, profile): dropships = list(chain_objects(profile.dropship, Dropship.list_by_distance(zip_code))) for dropship in dropships: if dropship.is_game_available(item, is_new): return dropship return None