Exemple #1
0
    def get(self, vendor_id, insurance_id):
        logging.info("got vendor_id %r in uri", vendor_id)
        logging.info("got insurance_id %r in uri", insurance_id)

        ops = self.get_ops_info()

        insurance_template_dao.insurance_template_dao().delete(insurance_id)

        self.redirect('/vendors/' + vendor_id + '/setup/insurances')
Exemple #2
0
    def post(self, vendor_id, insurance_id):
        logging.info("got vendor_id %r in uri", vendor_id)
        logging.info("got insurance_id %r in uri", insurance_id)

        ops = self.get_ops_info()

        _title = self.get_argument("title", "")
        _amount = self.get_argument("amount", "")
        # 价格转换成分
        _amount = float(_amount) * 100

        logging.info("got _title %r", _title)

        _insurance = {"_id": insurance_id, "title": _title, "amount": _amount}
        insurance_template_dao.insurance_template_dao().update(_insurance)

        self.redirect('/vendors/' + vendor_id + '/setup/insurances')
Exemple #3
0
    def post(self, vendor_id):
        logging.info("got vendor_id %r in uri", vendor_id)

        ops = self.get_ops_info()

        _title = self.get_argument("title", "")
        _amount = self.get_argument("amount", "")
        # 价格转换成分
        _amount = float(_amount) * 100
        logging.info("got _title %r", _title)

        _uuid = str(uuid.uuid1()).replace('-', '')
        _insurance = {
            "_id": _uuid,
            "title": _title,
            "amount": _amount,
            "vendor_id": vendor_id
        }
        insurance_template_dao.insurance_template_dao().create(_insurance)

        self.redirect('/vendors/' + vendor_id + '/setup/insurances')
    def get(self, vender_id):
        account_id = self.get_argument("account_id")
        logging.info("got _account_id %r", account_id)
        sBefore = self.get_argument("before", "")
        if sBefore != "":
            iBefore = float(datetime_timestamp(sBefore))
        else:
            iBefore = time.time()
        logging.info("got iBefore>>>> %r in uri", iBefore)
        _orders = order_dao.order_dao().query_pagination_by_account(
            account_id, iBefore, PAGE_SIZE_LIMIT)
        for order in _orders:
            _activity = activity_dao.activity_dao().query(order['activity_id'])
            order['activity_title'] = _activity['title']
            order['create_time'] = timestamp_datetime(order['create_time'])
            logging.info("got activity_title %r", order['activity_title'])
            order['activity_begin_time'] = timestamp_datetime(
                _activity['begin_time'])
            order['activity_distance'] = _activity['distance']
            order['activity_status'] = _activity['status']

            order_fees = []
            for ext_fee_id in order['ext_fees']:
                for template in _activity['ext_fee_template']:
                    if ext_fee_id == template['_id']:
                        json = {
                            "_id": ext_fee_id,
                            "name": template['name'],
                            "fee": template['fee']
                        }
                        order_fees.append(json)
                        break
            order['fees'] = order_fees

            order_insurances = []
            for insurance_id in order['insurances']:
                _insurance = insurance_template_dao.insurance_template_dao(
                ).query(insurance_id)
                order_insurances.append(_insurance)
            order['insurances'] = order_insurances

            _cret = cret_dao.cret_dao().query_by_account(
                order['activity_id'], order['account_id'])
            if _cret:
                logging.info("got _cret_id %r", _cret['_id'])
                order['cret_id'] = _cret['_id']
            else:
                order['cret_id'] = None

        _json = json_encode(_orders)
        self.write(_json)
        self.finish()
Exemple #5
0
    def get(self, vendor_id, insurance_id):
        logging.info("got vendor_id %r in uri", vendor_id)
        logging.info("got insurance_id %r in uri", insurance_id)

        _insurance = insurance_template_dao.insurance_template_dao().query(
            insurance_id)
        # 价格转换成元
        _insurance['amount'] = float(_insurance['amount']) / 100

        counter = self.get_counter(vendor_id)
        self.render('vendor/insurance-edit.html',
                    vendor_id=vendor_id,
                    counter=counter,
                    insurance=_insurance)
    def get(self, vendor_id):
        logging.info("got vendor_id %r in uri", vendor_id)

        _array = insurance_template_dao.insurance_template_dao(
        ).query_by_vendor(vendor_id)
        for _insurance in _array:
            # 价格转换成元
            _insurance['amount'] = float(_insurance['amount']) / 100
            logging.info("got amount %r", _insurance['amount'])

        docs_list = list(_array)
        _json = JSON.dumps(docs_list, default=json_util.default)
        logging.info("got insurance %r", _json)
        self.write(_json)
        self.finish()
Exemple #7
0
    def get(self, vendor_id):
        logging.info("got vendor_id %r in uri", vendor_id)

        ops = self.get_ops_info()

        _array = insurance_template_dao.insurance_template_dao(
        ).query_by_vendor(vendor_id)
        for _insurance in _array:
            # 价格转换成元
            _insurance['amount'] = float(_insurance['amount']) / 100

        counter = self.get_counter(vendor_id)
        self.render('vendor/insurances.html',
                    vendor_id=vendor_id,
                    ops=ops,
                    counter=counter,
                    insurances=_array)
    def get(self, vendor_id, order_id):
        logging.info("got vendor_id %r in uri", vendor_id)
        logging.info("got order_id %r in uri", order_id)

        # order = order_dao.order_dao().query(order_id)
        order = self.get_symbol_object(order_id)
        logging.info("got order %r in uri", order)
        _activity = self.get_activity(order['item_id'])
        logging.info("got _activity %r", _activity)
        # FIXME, 将服务模板转为字符串,客户端要用
        _servTmpls = _activity['ext_fee_template']
        _activity['json_serv_tmpls'] = tornado.escape.json_encode(_servTmpls);
        # 按报名状况查询每个活动的当前状态:
        # 0: 报名中, 1: 已成行, 2: 已满员, 3: 已结束
        # @2016/06/06
        #
        # 当前时间大于活动结束时间 end_time, 已结束
        # 否则
        # member_max: 最大成行人数, member_min: 最小成行人数
        # 小于member_min, 报名中
        # 大于member_min,小于member_max,已成行
        # 大于等于member_max,已满员
        _now = time.time();
        _member_min = int(_activity['member_min'])
        _member_max = int(_activity['member_max'])
        if _now > _activity['end_time']:
            _activity['phase'] = '3'
        else:
            _applicant_num = apply_dao.apply_dao().count_by_activity(_activity['_id'])
            _activity['phase'] = '2' if _applicant_num >= _member_max else '1'
            _activity['phase'] = '0' if _applicant_num < _member_min else '1'
        # FIXME, 日期的格式化处理放在活动状态划分之后,不然修改了结束时间后就没法判断状态了
        # @2016/06/08
        _activity['begin_time'] = timestamp_friendly_date(float(_activity['begin_time'])) # timestamp -> %m月%d 星期%w
        _activity['end_time'] = timestamp_friendly_date(float(_activity['end_time'])) # timestamp -> %m月%d 星期%w
        # 价格转换成元
        # _activity['amount'] = float(_activity['amount']) / 100

        order_fees = []
        if order.has_key('ext_fees'):
            for ext_fee_id in order['ext_fees']:
                for template in _activity['ext_fee_template']:
                    if ext_fee_id == template['_id']:
                        # 价格转换成元
                        _fee = float(template['fee']) / 100
                        json = {"_id":ext_fee_id, "name":template['name'], "fee":_fee}
                        order_fees.append(json)
                        break
        order['fees'] = order_fees

        order_insurances = []
        for insurance_id in order['insurances']:
            _insurance = insurance_template_dao.insurance_template_dao().query(insurance_id)
            order_insurances.append(_insurance)
        order['insurances'] = order_insurances

        # 这里改为从订单中取base_fees
        for base_fee in order['base_fees']:
            # 价格转换成元
            order['activity_amount'] = float(base_fee['fee']) / 100

        order['create_time'] = timestamp_datetime(order['create_time'])

        _old_applys = apply_dao.apply_dao().query_by_order(order_id)
        applyed = False
        if len(_old_applys) > 0:
            applyed = True

        self.render('wx/myorder-info.html',
                vendor_id=vendor_id,
                activity=_activity,
                order=order,
                applyed=applyed)
Exemple #9
0
    def post(self):
        vendor_id = self.get_argument("vendor_id", "")
        logging.info("got vendor_id %r", vendor_id)
        activity_id = self.get_argument("activity_id", "")
        logging.info("got activity_id %r", activity_id)
        _account_id = self.get_secure_cookie("account_id")
        guest_club_id = self.get_argument("guest_club_id")
        logging.info("got guest_club_id %r", guest_club_id)

        access_token = self.get_access_token()

        # 取得自己的最后一笔订单
        params = {"filter":"account", "account_id":_account_id, "page":1, "limit":1,}
        url = url_concat(API_DOMAIN + "/api/orders", params)
        http_client = HTTPClient()
        headers = {"Authorization":"Bearer " + access_token}
        response = http_client.fetch(url, method="GET", headers=headers)
        logging.info("got response.body %r", response.body)
        data = json_decode(response.body)
        rs = data['rs']
        orders = rs['data']

        _timestamp = time.time()
        # 一分钟内不能创建第二个订单,
        # 防止用户点击回退按钮,产生第二个订单
        if len(orders) > 0:
            for order in orders:
                if (_timestamp - order['create_time']) < 60:
                    self.redirect('/bf/wx/orders/wait')
                    return

        # 订单总金额
        _total_amount = self.get_argument("total_amount", 0)
        logging.info("got _total_amount %r", _total_amount)
        # 价格转换成分
        _total_amount = int(float(_total_amount) * 100)
        logging.info("got _total_amount %r", _total_amount)
        # 订单申报数目
        _applicant_num = self.get_argument("applicant_num", 1)
        # 活动金额,即已选的基本服务项金额
        amount = 0
        actual_payment = 0
        quantity = int(_applicant_num)
        logging.info("got quantity %r", quantity)

        _activity = self.get_activity(activity_id)
        logging.info("got _activity %r", _activity)
        # _activity = activity_dao.activity_dao().query(activity_id)
        _bonus_template = bonus_template_dao.bonus_template_dao().query(activity_id)
        bonus_points = int(_bonus_template['activity_shared'])

        #基本服务
        _base_fee_ids = self.get_body_argument("base_fees", [])
        logging.info("got _base_fee_ids %r", _base_fee_ids)
        # 转为列表
        _base_fee_ids = JSON.loads(_base_fee_ids)
        _base_fees = []
        base_fee_template = _activity['base_fee_template']
        for _base_fee_id in _base_fee_ids:
            for template in base_fee_template:
                if _base_fee_id == template['_id']:
                    _base_fee = {"_id":_base_fee_id, "name":template['name'], "fee":template['fee']}
                    _base_fees.append(_base_fee)
                    activity_amount = template['fee']
                    amount = amount + int(template['fee']) * quantity
                    actual_payment = actual_payment + int(template['fee']) * quantity
                    break;
        logging.info("got actual_payment %r", actual_payment)

        # 附加服务项编号数组
        # *** 接受json数组用这个 ***
        _ext_fee_ids = self.get_body_argument("ext_fees", [])
        logging.info("got _ext_fee_ids %r", _ext_fee_ids)
        # 转为列表
        _ext_fee_ids = JSON.loads(_ext_fee_ids)
        _ext_fees = []
        ext_fee_template = _activity['ext_fee_template']
        for _ext_fee_id in _ext_fee_ids:
            for template in ext_fee_template:
                if _ext_fee_id == template['_id']:
                    _ext_fee = {"_id":_ext_fee_id, "name":template['name'], "fee":template['fee']}
                    _ext_fees.append(_ext_fee)
                    amount = amount + int(template['fee']) * quantity
                    actual_payment = actual_payment + int(template['fee']) * quantity
                    break;
        logging.info("got actual_payment %r", actual_payment)

        # 保险选项,数组
        _insurance_ids = self.get_body_argument("insurances", [])
        _insurance_ids = JSON.loads(_insurance_ids)
        _insurances = []
        _insurance_templates = insurance_template_dao.insurance_template_dao().query_by_vendor(vendor_id)
        for _insurance_id in _insurance_ids:
            for _insurance_template in _insurance_templates:
                if _insurance_id == _insurance_template['_id']:
                    _insurance = {"_id":_insurance_id, "name":_insurance_template['title'], "fee":_insurance_template['amount']}
                    _insurances.append(_insurance)
                    amount = amount + int(_insurance['fee']) * quantity
                    actual_payment = actual_payment + int(_insurance['fee']) * quantity
                    break;
        logging.info("got actual_payment %r", actual_payment)

        #代金券选项,数组
        _vouchers_ids = self.get_body_argument("vouchers", [])
        _vouchers_ids = JSON.loads(_vouchers_ids)
        _vouchers = []
        for _vouchers_id in _vouchers_ids:
            logging.info("got _vouchers_id %r", _vouchers_id)
            _voucher = voucher_dao.voucher_dao().query_not_safe(_vouchers_id)
            _json = {'_id':_vouchers_id, 'fee':_voucher['amount']}
            _vouchers.append(_json)
            actual_payment = actual_payment - int(_json['fee']) * quantity
        logging.info("got actual_payment %r", actual_payment)

        # 积分选项,数组
        _bonus = 0
        _bonus_array = self.get_body_argument("bonus", [])
        if _bonus_array:
            _bonus_array = JSON.loads(_bonus_array)
            if len(_bonus_array) > 0:
                _bonus = _bonus_array[0]
                # 价格转换成分
                _bonus = - int(float(_bonus) * 100)
        logging.info("got _bonus %r", _bonus)
        points = _bonus
        actual_payment = actual_payment + points
        logging.info("got actual_payment %r", actual_payment)

        _order_id = str(uuid.uuid1()).replace('-', '')
        _status = ORDER_STATUS_BF_INIT
        if actual_payment == 0:
            _status = ORDER_STATUS_WECHAT_PAY_SUCCESS

        # 创建订单索引
        order_index = {
            "_id": _order_id,
            "order_type": "buy_activity",
            "club_id": vendor_id,
            "item_type": "activity",
            "item_id": activity_id,
            "item_name": _activity['title'],
            "distributor_type": "club",
            "distributor_id": guest_club_id,
            "create_time": _timestamp,
            "pay_type": "wxpay",
            "pay_status": _status,
            "quantity": quantity,
            "amount": amount, #已经转换为分,注意转为数值
            "actual_payment": actual_payment, #已经转换为分,注意转为数值
            "base_fees": _base_fees,
            "ext_fees": _ext_fees,
            "insurances": _insurances,
            "vouchers": _vouchers,
            "points_used": points,
            "bonus_points": bonus_points, # 活动奖励积分
            "booking_time": _activity['begin_time'],
        }
        self.create_order(order_index)

        # budge_num increase
        self.counter_increase(vendor_id, "activity_order")
        self.counter_increase(activity_id, "order")
        # TODO notify this message to vendor's administrator by SMS

        wx_app_info = vendor_wx_dao.vendor_wx_dao().query(vendor_id)
        wx_app_id = wx_app_info['wx_app_id']
        logging.info("got wx_app_id %r in uri", wx_app_id)
        wx_app_secret = wx_app_info['wx_app_secret']
        wx_mch_key = wx_app_info['wx_mch_key']
        wx_mch_id = wx_app_info['wx_mch_id']
        wx_notify_domain = wx_app_info['wx_notify_domain']

        _timestamp = (int)(time.time())
        if actual_payment != 0:
            # wechat 统一下单
            myinfo = self.get_myinfo_login()
            _openid = myinfo['login']
            _store_id = 'Aplan'
            logging.info("got _store_id %r", _store_id)
            _product_description = _activity['activity_id']
            logging.info("got _product_description %r", _product_description)
            #_ip = self.request.remote_ip
            _remote_ip = self.request.headers['X-Real-Ip']
            _order_return = wx_wrap.getUnifiedOrder(_remote_ip, wx_app_id, _store_id, _product_description, wx_notify_domain, wx_mch_id, wx_mch_key, _openid, _order_id, actual_payment, _timestamp)

            # wx统一下单记录保存
            _order_return['_id'] = _order_return['prepay_id']
            self.create_symbol_object(_order_return)

            # 微信统一下单返回成功
            order_unified = None
            if(_order_return['return_msg'] == 'OK'):
                order_unified = {'_id':_order_id,'prepay_id': _order_return['prepay_id'], 'pay_status': ORDER_STATUS_WECHAT_UNIFIED_SUCCESS}
            else:
                order_unified = {'_id':_order_id,'prepay_id': _order_return['prepay_id'], 'pay_status': ORDER_STATUS_WECHAT_UNIFIED_FAILED}
            # 微信统一下单返回成功
            # TODO: 更新订单索引中,订单状态pay_status,prepay_id
            self.update_order_unified(order_unified)

            # FIXME, 将服务模板转为字符串,客户端要用
            _servTmpls = _activity['ext_fee_template']
            _activity['json_serv_tmpls'] = json_encode(_servTmpls);
            _activity['begin_time'] = timestamp_friendly_date(float(_activity['begin_time'])) # timestamp -> %m月%d 星期%w
            _activity['end_time'] = timestamp_friendly_date(float(_activity['end_time'])) # timestamp -> %m月%d 星期%w
            # 金额转换成元
            # _activity['amount'] = float(activity_amount) / 100
            for base_fee in order_index['base_fees']:
                # 价格转换成元
                order_index['activity_amount'] = float(base_fee['fee']) / 100

            self.render('wx/order-confirm.html',
                    vendor_id=vendor_id,
                    return_msg=response.body, order_return=_order_return,
                    activity=_activity, order_index=order_index)
        else: #actual_payment == 0:
            # FIXME, 将服务模板转为字符串,客户端要用
            _servTmpls = _activity['ext_fee_template']
            _activity['json_serv_tmpls'] = tornado.escape.json_encode(_servTmpls);
            _activity['begin_time'] = timestamp_friendly_date(float(_activity['begin_time'])) # timestamp -> %m月%d 星期%w
            _activity['end_time'] = timestamp_friendly_date(float(_activity['end_time'])) # timestamp -> %m月%d 星期%w
            # 金额转换成元
            # _activity['amount'] = float(activity_amount) / 100
            for base_fee in order_index['base_fees']:
                # 价格转换成元
                order_index['activity_amount'] = float(base_fee['fee']) / 100

            # 如使用积分抵扣,则将积分减去
            if order_index['points_used'] < 0:
                # 修改个人积分信息
                bonus_points = {
                    'org_id':vendor_id,
                    'org_type':'club',
                    'account_id':_account_id,
                    'account_type':'user',
                    'action': 'buy_item',
                    'item_type': 'item',
                    'item_id': activity_id,
                    'item_name': _activity['title'],
                    'bonus_type':'bonus',
                    'points': points,
                    'order_id': order_index['_id']
                }
                self.create_points(bonus_points)
                # self.points_decrease(vendor_id, order_index['account_id'], order_index['points_used'])

            # 如使用代金券抵扣,则将代金券减去
            for _voucher in _vouchers:
                # status=2, 已使用
                voucher_dao.voucher_dao().update({'_id':_voucher['_id'], 'status':2, 'last_update_time':_timestamp})
                _customer_profile = vendor_member_dao.vendor_member_dao().query_not_safe(vendor_id, order_index['account_id'])
                # 修改个人代金券信息
                _voucher_amount = int(_customer_profile['vouchers']) - int(_voucher['fee'])
                if _voucher_amount < 0:
                    _voucher_amount = 0
                _json = {'vendor_id':vendor_id, 'account_id':order_index['account_id'], 'last_update_time':_timestamp,
                        'vouchers':_voucher_amount}
                vendor_member_dao.vendor_member_dao().update(_json)

            # send message to wx 公众号客户 by template
            wx_access_token = wx_wrap.getAccessTokenByClientCredential(WX_APP_ID, WX_APP_SECRET)
            logging.info("got wx_access_token %r", wx_access_token)
            # 通过wxpub,给俱乐部操作员发送通知
            ops = self.get_club_ops_wx(vendor_id)
            for op in ops:
                wx_openid = op['binding_id']
                logging.info("got wx_openid %r", wx_openid)
                wx_wrap.sendOrderPayedToOpsMessage(wx_access_token, WX_NOTIFY_DOMAIN, wx_openid, order_index)

            self.render('wx/order-confirm.html',
                    vendor_id=vendor_id,
                    return_msg='OK',
                    order_return={'timestamp':_timestamp,
                        'nonce_str':'',
                        'pay_sign':'',
                        'prepay_id':'',
                        'app_id': wx_app_id,
                        'return_msg':'OK'},
                    activity=_activity,
                    order_index=order_index)