def dict(self): result = memcache.get( 'gift_items_%s_%s' % (namespace_manager.get_namespace(), self.key.id())) if not result: item = self.item.get() result = item.dict() result['id'] = str(self.key.id()) result.update({'points': self.points}) for modifier in result['group_modifiers']: choice_dicts = modifier['choices'] for choice_dict in choice_dicts[:]: if int(choice_dict['id'] ) in self.additional_group_choice_restrictions: choice_dict['price'] = 0 modifier['choices'] = [choice_dict] break for modifier in result['single_modifiers'][:]: if modifier['price'] > 0: result['single_modifiers'].remove(modifier) if self.additional_group_choice_restrictions: result['title'] = u'%s %s' % (item.title, u','.join([ GroupModifier.get_modifier_by_choice( choice).get_choice_by_id(choice).title for choice in self.additional_group_choice_restrictions ])) memcache.set('gift_items_%s_%s' % (namespace_manager.get_namespace(), self.key.id()), result, time=24 * 3600) return result
def get_shared_gifts(client): if not ShareGiftModule.has_module(): return [] shared_gifts = SharedGift.query( SharedGift.recipient_id == client.key.id(), SharedGift.status == SharedGift.PERFORMING).fetch() shared_gift_dict = [] for shared_gift in shared_gifts: for shared_item in shared_gift.share_items: shared_item = shared_item.get() chosen_group_modifiers = [] for choice_id in shared_item.group_choice_ids: modifier = GroupModifier.get_modifier_by_choice(choice_id) modifier.choice = modifier.get_choice_by_id(choice_id) chosen_group_modifiers.append(modifier) shared_menu_item = shared_item.shared_item.get() item = shared_menu_item.item.get() shared_gift_dict.append({ 'item': item, 'image': item.picture, 'single_modifier_keys': sorted(shared_item.single_modifiers, key=lambda modifier_key: modifier_key.id()), 'group_modifier_keys': [(modifier.key, modifier.choice.choice_id) for modifier in sorted(chosen_group_modifiers, key=lambda modifier: modifier.key.id()) ], 'share_gift_obj': shared_gift }) return shared_gift_dict
def get(self): gifts = GiftMenuItem.query().fetch() for gift in gifts: gift.title = gift.item.get().title choice_titles = [] for choice_id in gift.additional_group_choice_restrictions: choice = GroupModifier.get_modifier_by_choice( choice_id).get_choice_by_id(choice_id) choice_titles.append(choice.title) if choice_titles: gift.title += u'(%s)' % u', '.join(choice_titles) self.render('/promos/gift_list.html', gifts=gifts)
def post(self): choice_id = self.request.get_range('modifier_id') choice = GroupModifierChoice.get_by_choice_id(choice_id) if not choice: self.abort(400) choice.title = self.request.get('name') if self.request.get('price'): price = float(self.request.get('price')) choice.price = int(round(price * 100)) else: choice.price = 0 choice.put() modifier = GroupModifier.get_modifier_by_choice(choice_id) for m_choice in modifier.choices: if m_choice.choice_id == choice_id: modifier.choices.remove(m_choice) modifier.choices.append(choice) modifier.put() self.redirect_to('modifiers_list')
def get(self): promos = Promo.query().order(-Promo.priority).fetch() for promo in promos: if promo.start: promo.start_str = promo.start.strftime(STR_DATETIME_FORMAT) else: promo.start_str = u'Не задано' if promo.end: promo.end_str = promo.end.strftime(STR_DATETIME_FORMAT) else: promo.end_str = u'Не задано' conditions = [] for condition in promo.conditions[:]: if condition.item_details and condition.item_details.item: choice_titles = [] for choice_id in condition.item_details.group_choice_ids: choice = GroupModifier.get_modifier_by_choice( choice_id).get_choice_by_id(choice_id) choice_titles.append(choice.title) condition.item_details.title = condition.item_details.item.get( ).title if choice_titles: condition.item_details.title += u'(%s)' % u', '.join( choice_titles) condition.value_string = str( condition.value) if condition.value else "" if condition.method == PromoCondition.CHECK_TYPE_DELIVERY: condition.value_string = DELIVERY_MAP[condition.value] conditions.append(condition) elif condition.method in [ PromoCondition.CHECK_HAPPY_HOURS, PromoCondition.CHECK_HAPPY_HOURS_CREATED_TIME ]: for day in (condition.schedule.days if condition.schedule else []): new_condition = PromoCondition(method=condition.method) new_condition.value_string = day.str() conditions.append(new_condition) else: conditions.append(condition) for outcome in promo.outcomes[:]: if outcome.item_details and outcome.item_details.item: choice_titles = [] for choice_id in outcome.item_details.group_choice_ids: choice = GroupModifier.get_modifier_by_choice( choice_id).get_choice_by_id(choice_id) choice_titles.append(choice.title) outcome.item_details.title = outcome.item_details.item.get( ).title if choice_titles: outcome.item_details.title += u'(%s)' % u', '.join( choice_titles) promo.conditions = conditions self.render( '/promos/list.html', **{ 'promo_api_key': config.PROMOS_API_KEY if config.PROMOS_API_KEY else '', 'wallet_api_key': config.WALLET_API_KEY if config.WALLET_API_KEY else '', 'promos': promos, 'condition_map': CONDITION_MAP, 'outcome_map': OUTCOME_MAP })
def post(self): venue = self.venue_or_error if not venue: return self.send_error(u'Нет связки с точкой') stop_list = json.loads(self.request.get('stop_list')) for item_id in stop_list.get('stopped'): item = MenuItem.get_by_id(int(item_id)) if not item: return self.send_error(u'Продукт не найден') if item.status != STATUS_AVAILABLE: return self.send_error( u'Продукт %s не имеет статуса доступен' % item.title) if venue.key in item.restrictions: return self.send_error( u'Продукт %s недоступен в данном заведении' % item.title) if item.key in venue.stop_lists: return self.send_error(u'Продукт %s уже в стоп-листе' % item.title) venue.stop_lists.append(item.key) for item_id in stop_list.get('recovered'): item = MenuItem.get_by_id(int(item_id)) if not item: return self.send_error(u'Продукт не найден') if item.status != STATUS_AVAILABLE: return self.send_error( u'Продукт %s не имеет статуса доступен' % item.title) if venue.key in item.restrictions: return self.send_error( u'Продукт %s недоступен в данном заведении' % item.title) if item.key not in venue.stop_lists: return self.send_error( u'Продукт %s не находится в стоп-листе' % item.title) venue.stop_lists.remove(item.key) for single_modifier_id in stop_list.get('stopped_single_modifiers'): item = SingleModifier.get_by_id(int(single_modifier_id)) if not item: return self.send_error(u'Одиночный модификатор не найден') if item.key in venue.single_modifiers_stop_list: return self.send_error( u'Одиночный модификатор %s уже в стоп-листе' % item.title) venue.single_modifiers_stop_list.append(item.key) for single_modifier_id in stop_list.get('recovered_single_modifiers'): item = SingleModifier.get_by_id(int(single_modifier_id)) if not item: return self.send_error(u'Одиночный модификатор не найден') if item.key not in venue.single_modifiers_stop_list: return self.send_error( u'Одиночный модификатор %s не находится в стоп-листе' % item.title) venue.single_modifiers_stop_list.remove(item.key) for group_choice_id in stop_list.get('stopped_group_choices'): item = GroupModifierChoice.query( GroupModifierChoice.choice_id == int(group_choice_id)).get() if not item: return self.send_error( u'Выбор группового модификатора не найден') if item.key in venue.group_choice_modifier_stop_list: return self.send_error( u'Выбор группового модификатора %s уже в стоп-листе' % item.title) venue.group_choice_modifier_stop_list.append(item.key) for group_choice_id in stop_list.get('recovered_group_choices'): item = GroupModifierChoice.query( GroupModifierChoice.choice_id == int(group_choice_id)).get() if not item: return self.send_error( u'Выбор группового модификатора не найден') if item.key not in venue.group_choice_modifier_stop_list: return self.send_error( u'Выбор группового модификатора %s не находится в стоп-листе' % item.title) venue.group_choice_modifier_stop_list.remove(item.key) for group_choice_id_with_item_id in stop_list.get( 'stopped_group_choices_with_item_id'): group_choice_id = int( group_choice_id_with_item_id.get('choice_id')) item_id = group_choice_id_with_item_id.get('item_id') modifier = GroupModifier.get_modifier_by_choice(group_choice_id) item = MenuItem.get_by_id(int(item_id)) if not modifier: return self.send_error( u'Выбор группового модификатора не найден') if not item: return self.send_error(u"Продукт не найден") if modifier.key not in item.group_modifiers: return self.send_error( u"Продукт не связан с этим групповым модификатором") if group_choice_id in item.stop_list_group_choices: return self.send_error( u'Выбор группового модификатора %s уже в стоп-листе' % item.title) item.stop_list_group_choices.append(group_choice_id) item.put() for group_choice_id_with_item_id in stop_list.get( 'recovered_group_choices_with_item_id'): group_choice_id = int( group_choice_id_with_item_id.get('choice_id')) item_id = group_choice_id_with_item_id.get('item_id') modifier = GroupModifier.get_modifier_by_choice(group_choice_id) item = MenuItem.get_by_id(int(item_id)) if not modifier: return self.send_error( u'Выбор группового модификатора не найден') if not item: return self.send_error(u"Продукт не найден") if modifier.key not in item.group_modifiers: return self.send_error( u"Продукт не связан с этим групповым модификатором") if group_choice_id not in item.stop_list_group_choices: return self.send_error( u'Выбор группового модификатора %s не в стоп-листе' % item.title) item.stop_list_group_choices.remove(group_choice_id) item.put() venue.put() self.render_json({'success': True})