Exemplo n.º 1
0
    def get_product(self, day, schedule=None, tour_time=None, create=True):
        """
        Get the TourProduct for the given day and time.  If create is false and product does
        not exist, return None.
        """

        if schedule and tour_time:
            assert False, 'Make up your mind, use a schedule or a tour_time, not both'
        if not schedule and not tour_time:
            assert False, 'Need a time buddy'

        try:
            if schedule:
                tour_product = TourProduct.objects.filter(tour_type=self, day=day).filter(
                    Q(schedule=schedule) | Q(tour_time=schedule.tour_time))[0]
            else:
                tour_product = TourProduct.objects.get(tour_type=self, day=day, tour_time=tour_time)

            if tour_product.tour_type.has_price_raise():
                p = tour_product.product.price_set.all()[0]
                p.price = self.get_raised_base_price(tour_product.day)
                p.save()

            return tour_product
        except (TourProduct.DoesNotExist, IndexError):
            if create:
                # print 'creating product... ', day
                product = Product()
                product.site = Site.objects.get_current()
                product.name = '%s on %s at ' % (self.name, day.strftime('%B %d, %Y'))
                if schedule:
                    product.name += schedule.tour_time.strftime('%I:%M %p')
                else:
                    product.name += tour_time.strftime('%I:%M %p')
                product.items_in_stock = self.get_capacity_for_day(day)
                product.shipclass = 'NO'  # see product.models.SHIP_CLASS_CHOICES
                product.save()

                tour_product = TourProduct()
                tour_product.product = product
                tour_product.tour_type = self
                tour_product.day = day
                if schedule:
                    tour_product.schedule = schedule
                    tour_product.tour_time = schedule.tour_time
                else:
                    tour_product.schedule = None
                    tour_product.tour_time = tour_time
                tour_product.save()

                p = Price()
                p.product = product
                if tour_product.tour_type.has_price_raise():
                    p.price = self.get_raised_base_price(tour_product.day)
                else:
                    p.price = self.base_price
                p.save()

                # Create Variations
                if self.option_group_id:
                    configurable_product = ConfigurableProduct(product=product)
                    configurable_product.save()
                    configurable_product.option_group.add(self.option_group)
                    configurable_product.create_subs = True
                    configurable_product.save()
                return tour_product
            else:
                return None