Beispiel #1
0
def get_club_info_view(request):
    """
    获取俱乐部信息
    URL[GET]: /commercial/get_club_info/
    :param request:
    :return: {
        club_info: {
            id, name, avatar, address,
        }
        activities_info: [
            {
                activity_id, distance, title, created_time, activity_time, images_list,
                total_quota, participants: [
                    {
                        user_id, avatar
                    },
                ]
            },

        ]

    }
    """
    club_id = int(request.GET['club_id'])
    club = get_club_by_id_db(club_id)
    if not club:
        return json_http_error('id错误')
    club_info = build_club_info(club)
    return json_http_success(club_info)
Beispiel #2
0
def charge_off_user_coupon(coupon_code, club_id, user_info):
    """
    核销用户优惠券
    """
    user_coupon = get_user_coupon_by_coupon_code(coupon_code)

    if not user_coupon:
        return u'找不到对应的优惠券'

    if user_coupon.is_used:
        return u'优惠券已经被核销了'

    club = get_club_by_id_db(club_id)
    if not club:
        return u'俱乐部不存在'

    club_user_info = get_club_user_info_by_user_info_and_club(user_info, club)
    if not club_user_info:
        return u'商户账号不存在'

    coupon_charge_off_record = CouponChargeOffRecord.objects.create(
        club_user=club_user_info,
        coupon_id=user_coupon.id,
        user_id=user_coupon.user.id)
    charge_off_coupon(user_coupon)  # 除了记录之外, 还需要核销优惠券自身
    logging.info('charge off user coupon: %s, %s, %s', club.id, user_coupon.id,
                 coupon_charge_off_record.id)

    return u''
Beispiel #3
0
def build_club_consume_user_coupon_info(club_id):
    """
    构造商户消耗用户优惠券详情
    """
    club = get_club_by_id_db(club_id)
    if not club:
        return None

    club_user_infos = get_club_user_info_by_club(club_id)
    charge_off_records = get_charge_off_record_by_club_user_infos(
        club_user_infos)
    money, consume_infos = build_club_consume_infos(charge_off_records)

    return {
        'club_info': {
            'avatar': "https://zongz.cn" + club.avatar.url,
            'name': club.name,
            'address': club.address,
            'telephone': club.telephone,
            'club_id': club.id,
        },
        'consume_sum': {
            'count': len(consume_infos),
            'money': money
        },
        'consume_infos': consume_infos
    }
Beispiel #4
0
def club_update_detail(avatar_url, club_id):
    """
    商户更新自己的头像
    """
    club = get_club_by_id_db(club_id)
    assert club is not None

    club.update_avatar = avatar_url
    club.save()
Beispiel #5
0
def build_club_detail_info(club_id):
    """
    构造商户的详细信息
    """
    club = get_club_by_id_db(club_id)
    assert club is not None

    return {
        'avatar': club.update_avatar or "https://zongz.cn" + club.avatar.url,
        'name': club.name,
        'address': club.address,
        'telephone': club.telephone,
        'club_id': club.id,
        'principal': club.principal,
        'representative': club.representative,
        'license': "https://zongz.cn" + club.license.url,
        'remark': club.remark,
        'business_type': club.business_type
    }
Beispiel #6
0
def post_footprint_view(request):
    """
    发布踪踪动态
    求助帖的发布与 V1 的帖子不同之处只有一点: 需要传递商家 id
    URL[POST]: /footprint/create/
    :param request:
    :return:
    """
    post_data = get_data_from_request(request)
    latitude = post_data.get('lat')
    longitude = post_data.get('lon')
    location = post_data.get('location')
    content = post_data['content']
    if content and not is_content_valid(content):
        return json_http_error('请注意用词')
    image_list = post_data['image_list']
    if isinstance(image_list, str):
        image_list = json.loads(image_list)
    for image in image_list:
        logging.info('{}{}'.format(image, type(image)))
        if not is_image_valid(image):
            return json_http_error('请文明发言')
    hide = bool(int(post_data.get('hide', 0)))

    # @zhanghu 在这里校验下是不是帮助贴
    club = get_club_by_id_db(int(post_data.get('club_id', 0)))
    if not club:
        footprint = create_footprint_db(request.user, content, latitude,
                                        longitude, location, image_list, hide,
                                        PostType.NOTE, 0)
    else:
        # 找到金额最大的优惠券模板, 或者是一个普适券(注意, 如果找不到优惠券, 仍然降级为 NOTE 类型的足迹)
        target_template_id = get_template_id_by_club(club)
        post_type = PostType.HELP if target_template_id > 0 else PostType.NOTE
        footprint = create_footprint_db(request.user, content, latitude,
                                        longitude, location, image_list, hide,
                                        post_type, target_template_id)

    if latitude and longitude:
        add_user_location(footprint.id, longitude, latitude)
    return json_http_success({'footprint_id': footprint.id})
def build_club_activity_confirm_info(club_id, is_confirm):
    """
    构造商户活动预约确认信息
    """
    club = get_club_by_id_db(club_id)
    if not club:
        return None

    commercial_activities = get_commercial_activities_by_club(club)
    activity_participates = get_activity_participate_by_activity_and_confirm(commercial_activities, is_confirm)

    return {
        'club_info': {
            'avatar': "https://zongz.cn" + club.avatar.url,
            'name': club.name,
            'address': club.address,
            'telephone': club.telephone,
            'club_id': club.id,
        },
        'activity_participant_info': [build_activity_participant_info(record) for record in activity_participates]
    }
Beispiel #8
0
def build_user_coupon_info_for_charge_off(club_id, coupon_code):
    """
    构造用户优惠券信息 --> 核销展示使用
    """
    club = get_club_by_id_db(club_id)
    if not club:
        return None

    coupon = get_user_coupon_by_coupon_code(coupon_code)
    if not coupon:
        return None

    user_info = get_user_info_by_user_id_db(coupon.user.id)
    coupon_money = 0 if coupon.template.template_type == CouponTemplateChoices.GENERAL else coupon.template.money

    return {
        'club_info': {
            'avatar': "https://zongz.cn" + club.avatar.url,
            'name': club.name,
            'address': club.address,
            'telephone': club.telephone,
            'club_id': club.id,
        },
        'coupon_info': {
            'coupon_id': coupon.id,
            'coupon_money': coupon_money,
            'coupon_type': coupon.template.template_type,
            'coupon_name': coupon.template.name,
            'coupon_deadline': datetime_to_str(coupon.template.deadline)
        },
        'user_info': {
            'avatar':
            user_info.avatar,
            'nickname':
            user_info.nickname,
            'consume_count':
            CouponChargeOffRecord.objects.filter(
                user_id=coupon.user.id).count()
        }
    }
Beispiel #9
0
def get_club_activities_info(request):
    """
    URL[GET]: /commercial/get_club_activity_info/
    :param request:
    :return:
    """
    club_id = int(request.GET['club_id'])
    page = int(request.GET.get('page', 1))
    lat = float(request.GET.get('lat', 0))
    lon = float(request.GET.get('lon', 0))
    start, end = get_page_range(page, 5)
    club = get_club_by_id_db(club_id)
    if not club:
        return json_http_error('错误')
    activities = get_commercial_activities_by_club_id_db(club_id, start, end)

    return json_http_success({
        'activity_list': [
            build_activity_brief_info(activity, request.user.id, lon, lat)
            for activity in activities
        ],
        'avatar':
        "https://zongz.cn" + club.avatar.url
    })