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