Пример #1
0
 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
Пример #2
0
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
Пример #3
0
 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)
Пример #4
0
 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')
Пример #5
0
 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
         })
Пример #6
0
    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})