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
示例#2
0
    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()
示例#3
0
 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