Exemplo n.º 1
0
    def payfor_shopcart(self, userobj):
        """
        购物车结算模块,功能包括:购物车付款、购物记录写入文件、
        :param kwargs: 字典参数 {cost=购物车金额, userobj=用户对象}
        :return:
        """
        # 判断用户有没有绑定信用卡
        if not userobj.bindcard:
            # 用户没有绑定信用卡,直接返回错误,在外层绑卡
            return errorcode.CARD_NOT_BINDED
        else:
            # 用户绑定了信用卡了, 获取信用卡信息(实例化对象)
            cardobj = CreditCard(userobj.bindcard)
            # 卡余额够吗
            if cardobj.credit_balance < self.shopping_cost:
                common.show_message("您的信用卡本月额度不够! ", "NOTICE")
                return errorcode.BALANCE_NOT_ENOUGHT
            else:
                # 生成一个流水号
                serno = common.create_serialno()
                # 调用卡的支付模块进行支付
                cardobj.card_pay(self.shopping_cost, 1, serno)
                # 记录购物流水
                shopping_record = {userobj.username: {"time": datetime.now().strftime("%Y-%m-%d %H:%M"),
                                                      "cost": self.shopping_cost,
                                                      "serno": serno,
                                                      "detail": self.shopping_cart}}
                # 写入报表记录文件
                dbapi.append_db_json(shopping_record, self.__shop_report_file)

                # 购物结算完成后将对象的购物车清空, 购物车商品总价清0 ,待下次购物
                self.shopping_cart.clear()
                self.shopping_cost = 0
                return errorcode.NO_ERROR
Exemplo n.º 2
0
    def card_pay(self, cost, paytype, sereialno):
        """
        信用卡支付,从信用卡可透支余额中扣费
        :param sereialno: 流水号
        :param cost: 消费金额 float类型
        :param paytype: 消费类型 int类型  ( 1:消费、2:转账、3:提现、4:手续费 ) 对于2,3类型的支付要扣手续费,单记录一条流水单
        :return:
        """
        if paytype == 1:
            payfor = "消费"
        elif paytype == 2:
            payfor = "转账"
        elif paytype == 3:
            payfor = "提现"
        elif paytype == 4:
            payfor = "手续费"
        else:
            payfor = "未知"

        # 支付扣款
        self.credit_balance -= cost

        # 记录消费流水对账单,将发生了费用还没有还款的账单信息写入文件 report_bill 中
        _tmp_bill_record = dict(cardno="{0}".format(self.cardno),
                                starttime=datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M"),
                                payfor=payfor,
                                cost=cost,
                                serialno=sereialno)
        dbapi.append_db_json(_tmp_bill_record, os.path.join(settings.REPORT_PATH, "report_bill"))

        # 更新信用卡可透支余额信息到数据库 creditcard.db
        self.credit_card[self.cardno]["credit_balance"] = self.credit_balance
        dbapi.write_db_json(self.credit_card, self.__database)
Exemplo n.º 3
0
    def payfor_shopcart(self, userobj):
        """
        购物车结算模块,功能包括:购物车付款、购物记录写入文件、
        :param kwargs: 字典参数 {cost=购物车金额, userobj=用户对象}
        :return:
        """
        # 判断用户有没有绑定信用卡
        if not userobj.bindcard:
            # 用户没有绑定信用卡,直接返回错误,在外层绑卡
            return errorcode.CARD_NOT_BINDED
        else:
            # 用户绑定了信用卡了, 获取信用卡信息(实例化对象)
            cardobj = CreditCard(userobj.bindcard)
            # 卡余额够吗
            if cardobj.credit_balance < self.shopping_cost:
                common.show_message("您的信用卡本月额度不够! ", "NOTICE")
                return errorcode.BALANCE_NOT_ENOUGHT
            else:
                # 生成一个流水号
                serno = common.create_serialno()
                # 调用卡的支付模块进行支付
                cardobj.card_pay(self.shopping_cost, 1, serno)
                # 记录购物流水
                shopping_record = {userobj.username: {"time": datetime.now().strftime("%Y-%m-%d %H:%M"),
                                                      "cost": self.shopping_cost,
                                                      "serno": serno,
                                                      "detail": self.shopping_cart}}
                # 写入报表记录文件
                dbapi.append_db_json(shopping_record, self.__shop_report_file)

                # 购物结算完成后将对象的购物车清空, 购物车商品总价清0 ,待下次购物
                self.shopping_cart.clear()
                self.shopping_cost = 0
                return errorcode.NO_ERROR
Exemplo n.º 4
0
    def card_pay(self, cost, paytype, sereialno):
        """
        信用卡支付,从信用卡可透支余额中扣费
        :param sereialno: 流水号
        :param cost: 消费金额 float类型
        :param paytype: 消费类型 int类型  ( 1:消费、2:转账、3:提现、4:手续费 ) 对于2,3类型的支付要扣手续费,单记录一条流水单
        :return:
        """
        if paytype == 1:
            payfor = "消费"
        elif paytype == 2:
            payfor = "转账"
        elif paytype == 3:
            payfor = "提现"
        elif paytype == 4:
            payfor = "手续费"
        else:
            payfor = "未知"

        # 支付扣款
        self.credit_balance -= cost

        # 记录消费流水对账单,将发生了费用还没有还款的账单信息写入文件 report_bill 中
        _tmp_bill_record = dict(cardno="{0}".format(self.cardno),
                                starttime=datetime.strftime(
                                    datetime.now(), "%Y-%m-%d %H:%M"),
                                payfor=payfor,
                                cost=cost,
                                serialno=sereialno)
        dbapi.append_db_json(_tmp_bill_record,
                             os.path.join(settings.REPORT_PATH, "report_bill"))

        # 更新信用卡可透支余额信息到数据库 creditcard.db
        self.credit_card[self.cardno]["credit_balance"] = self.credit_balance
        dbapi.write_db_json(self.credit_card, self.__database)
Exemplo n.º 5
0
def create_card_statement(cardno):
    """
    生成信用卡对账单
    :param cardno:卡号
    :return:
    """
    # 获得当前时间
    currday = datetime.now().strftime("%Y-%m-%d")
    today = date.today().day
    # 如果是账单日22号 开始生成账单
    if today == settings.STATEMENT_DAY:
        # 生成对账单数据库中存放对账单数据的字典 key
        startday = (datetime.now() + timedelta(days=-30)).strftime(
            "%Y%m{0}".format(settings.STATEMENT_DAY))
        endday = datetime.now().strftime("%Y%m%d")
        statement_key = "{start}{end}".format(start=startday, end=endday)

        # 从对账单流水中计算出要还款的金额
        startdate = (datetime.now() + timedelta(days=-30)).strftime(
            "%Y-%m-{0} 00:00:00".format(settings.STATEMENT_DAY))
        enddate = datetime.now().strftime("%Y-%m-%d 00:00:00")
        # 获取卡号对应的消费流水记录列表
        bill_list = dbapi.load_bill_report(cardno, startdate, enddate)

        statement_total = 0.00
        # 如果有消费记录,生成对账单
        if len(bill_list) > 0:
            for bill in bill_list:
                # 获取一个对账单日期的消费总费用
                statement_total += bill["cost"]

            # 获取还款日期 下个月10号
            statement_pdate = (datetime.now() +
                               timedelta(days=30)).strftime("%Y-%m-10")

            # 生成对账单的统计数据字典{"2016012220160222":{"账单日":currday,
            #                                             "账单范围":startdate至enddate,
            #                                             "账单金额":statement_bill,
            #                                             "已还款":0,
            #                                             "还款日":pdate
            #                                             "已还完":0}}

            statement_dict = {
                statement_key: {
                    "billdate": currday,
                    "startdate": startdate,
                    "enddate": enddate,
                    "total": statement_total,
                    "payed": 0,
                    "pdate": statement_pdate,
                    "interest": 0,
                    "isfinished": 0
                }
            }
            # 对账单文件名
            file_name = os.path.join(settings.REPORT_PATH,
                                     "statement_{0}".format(cardno))
            # 写入文件
            dbapi.append_db_json(statement_dict, file_name)
Exemplo n.º 6
0
def create_card_statement(cardno):
    """
    生成信用卡对账单
    :param cardno:卡号
    :return:
    """
    # 获得当前时间
    currday = datetime.now().strftime("%Y-%m-%d")
    today = date.today().day

    # 如果是账单日22号 开始生成账单
    if today == settings.STATEMENT_DAY:
        # 生成对账单数据库中存放对账单数据的字典 key

        startday = (datetime.now() + timedelta(days=-30)).strftime("%Y%m{0}".format(settings.STATEMENT_DAY))
        endday = datetime.now().strftime("%Y%m%d")
        statement_key = "{start}{end}".format(start=startday, end=endday)


        # 从对账单流水中计算出要还款的金额
        startdate = (datetime.now() + timedelta(days=-30)).strftime("%Y-%m-{0} 00:00:00".format(settings.STATEMENT_DAY))
        enddate = (datetime.now()  + timedelta(days=1)).strftime("%Y-%m-%d 00:00:00")
        # 获取卡号对应的消费流水记录列表
        bill_list = dbapi.load_bill_report(cardno, startdate, enddate)

        statement_total = 0.00
        # 如果有消费记录,生成对账单
        if len(bill_list) > 0:
            for bill in bill_list:
                # 获取一个对账单日期的消费总费用
                statement_total += bill["cost"]

            # 获取还款日期 下个月10号
            statement_pdate = (datetime.now() + timedelta(days=30)).strftime("%Y-%m-10")

            # 生成对账单的统计数据字典{"2016012220160222":{"账单日":currday,
            #                                             "账单范围":startdate至enddate,
            #                                             "账单金额":statement_bill,
            #                                             "已还款":0,
            #                                             "还款日":pdate
            #                                             "已还完":0}}

            statement_dict = {statement_key: {"billdate": currday,
                                              "startdate": startdate,
                                              "enddate": enddate,
                                              "total": statement_total,
                                              "payed": 0,
                                              "pdate": statement_pdate,
                                              "interest": 0,
                                              "isfinished": 0}}
            # 对账单文件名
            file_name = os.path.join(settings.REPORT_PATH, "statement_{0}".format(cardno))
            # 写入文件
            dbapi.append_db_json(statement_dict, file_name)