Django的跟踪帐户信用

django-account-balances的Python项目详细描述


Django的帐户信用跟踪
==


帐户可用于实现各种有趣的组件,包括:

*礼品卡
*网络帐户
*忠诚度计划


n一个封闭的
系统。

此软件包使用[复式记账](http://en.wikipedia.org/wiki/double-entry_booking_system)
其中每个事务记录两次(一次记录源,一次记录目的地)。这样可以确保账簿始终保持平衡,并对所有交易活动进行全面审计。

如果您的项目管理资金,您应该使用这样的库。您的
财务人员会感谢您的。

功能
--


*帐户的信用限额默认为零。账户可以设置为不带信用额度的
,以便成为系统内的资金"来源"。
至少必须设置一个没有信用额度的账户,以便资金可以在系统内移动。


*账户可以有:
-没有分配用户imary"用户-这是最常见的情况
-一组分配的用户

*一个用户可以有多个帐户

*一个帐户可以有一个开始和结束日期,以便在有限的时间内使用
窗口


*可以将帐户分类



todo:在pypi上提供pip安装。


您应该设置一个cronjob,该cronjob调用:

./manage.py close_expired_accounts


,以关闭任何过期帐户并将其资金转移到"expired"帐户。

api
--

使用管理器的状态:

``python

from decimal import decimal
import datetime

from django.contrib.auth.models import user


from accounts import models

anonymous_account=models.account.objects.create()

barry=user.objects.get(用户名="barry")
用户帐户=模型。帐户。对象。创建(主用户=barry)


无信用额度帐户=模型。帐户。对象。创建(信用额度=无)
_week=today+datetime.timedelta(days=7)
date_limited_account=models.account.objects.create(
start_date=today,end_date=next_week)
``````

="staff")
trans=facade.transfer(source=no_credit_limit_account,
destination=user_account,
amount=decimal('10.00'),
user=staff_member)
``````

反向传输:

``python
facade.reversen example")
```

如果提议的传输无效,将引发异常。所有
异常都是"accounts.exceptions.accountexception"的子类。您的
客户机代码应查找此类异常并适当处理它们。


客户机代码应仅使用"accounts.models.budget"类和"accounts.facade"中的
两个函数-不需要其他任何功能。

/>
请注意,传输操作包装在自己的数据库事务中,以确保只写出完整的传输。使用django的
事务中间件时,需要小心。如果您有一个未处理的
异常,那么即使没有
其他异常,帐户转移仍将被提交。要处理此问题,您需要确保,如果在您的支付后代码中发生异常,则回滚任何转账。

acade

def submit(self,order嫒total):
先付款
transfer=facade.transfer(self.get嫒user嫒account(),
self.get嫒merchant嫒account(),
创建订单模型
尝试:
self.place嫒order()
除了异常,e:
下订单时出错。回滚以前的
transfer
facade.reverse(transfer)
````

在这种情况下,将创建两个transfer,但没有订单。
虽然这不是理想的,但这是处理订单放置期间发生的异常的最佳方法。

jets通常允许用户拥有多个账户,并使用多个账户支付订单费用。这将涉及多个传输,需要在应用程序代码中仔细处理


这里有一个例子:

``python
decimal import decimal as d
from account s import models,exceptions,facade



def resempt(订单号,用户,金额):
订单日期('结束日期')

-=要转移
如果要分配的金额=d('0.00'):
中断
如果要分配的金额>;d('0.00'):
引发异常。资金不足()


/>对于帐户,传输中的金额:
传输=门面。传输(
帐户、目的地、金额、用户=用户,
说明="订单%s"(订单号)
已完成传输。附加(传输)
例外情况除外。帐户例外情况,传输例外情况:
发生了一些问题我们尝试将所有已完成的传输回滚到干净的状态。
我们可以得到部分救赎。这将需要管理员进行干预。确保您的记录器在出现错误时向管理员发送邮件。
logger.error("Order%s,Transfers Failed(%s)and Reverse Failed(%s)",
Order_Number,Transfer_Exc,Reverse_Exc)
logger.exception(Reverse_Exc)

引发异常,以便您的客户端代码可以适当地通知用户。
raise redemptionfailed()
否则:
总收入(含税)
例外情况除外:
通知用户付款失败
其他情况:
对于转入转账:
来源类型,来源=来源(
来源类型=来源类型,
分配金额=转账.amoUNT,
借方金额=转账金额,
参考erence=transfer.reference)
self.add_payment_source(source)
````


core accounts and account types
=-


post syncdb信号将为account types和
accounts创建公共结构。一些名称可以通过设置进行控制,如括号中所示。

-**资产**

-**销售**
-赎回(`accounts\u redemptions\u name`)–当一个账户用于支付某物时,将钱转入该账户。
-失效(`accounts\u lapsed\u name`)–当账户到期时,资金转移到
。这是通过
"关闭过期帐户"管理命令完成的。此
帐户的名称可以使用"accounts\u lapsed\u name"设置。

-**现金**
-"银行"("accounts\u bank\u name")—用于创建新的
帐户的源帐户,这些帐户由客户支付(例如礼品卡)。此
帐户没有信贷限额,通常会有
负余额,因为钱只会转出。

-**未付**-此帐户包含用作其他
帐户来源但不由客户支付的帐户。例如,您可以
允许管理员在仪表板中创建新帐户。
类型的帐户将是初始转账的源帐户。

-**负债**

-**递延收入**-包含客户帐户/礼品卡。您可能需要在此类型中创建
其他帐户类型以对帐户进行分类。


示例事务
---------


请考虑以下帐户和帐户类型:

-**资产**
-**销售**
-赎回
-lapsed
-**现金**
-银行
-**未付**
-商户出资
-**负债**
-**递延收入**


请注意,所有账户均以余额0开头,且所有余额之和始终为零。

*客户购买价值50英镑的礼品卡d*

-创建一个"递延收入"类型的新帐户,其结束日期
-将50英镑从银行转移到该新帐户

*客户使用其50英镑的礼品卡支付30英镑的订单*

-将30英镑从礼品卡帐户转移到赎回帐户

*客户的礼品卡到期时仍有20英镑*

-将20英镑从礼品卡账户转移到失效账户

*客户打电话投诉,员工创建一个20英镑的新礼品卡*

-创建一个"递延收入"类型的新账户
-20英镑从"商户资助"帐户转移到此新帐户

创建
帐户(或用于充值)

*`accounts\u max_initial_value`可以传输到
帐户的最大值。

contribution
----


fork repo、设置virtualenv并运行:


./runtests.py

history
----


这个项目过去在很多地方依赖电子商务框架[oscar](https://github.com/tangentlabs/django-oscar)。如果您希望oscar集成,您可能会对上游回购感兴趣。这项回购协议是为那些希望在没有奥斯卡整合的情况下获得账户余额的人提供的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中的开源字典组件   即使在成功执行删除查询之后,java更新的列表也不会显示在jsp页面中   java Apache:无法启动上下文路径/网站上的失败应用程序   java验证CSV中的特定列   对于具有专用内存的java应用程序,最小堆大小低于最大堆大小有意义吗?   java将数组中的值转换为多维数组   java在给定程序中,垃圾收集器在对象被取消引用之前正在运行。。。使用jre 7(32位)   java在运行时动态刷新文件夹   eclipse如何解决“java.net.BindException:地址已在使用:JVM_Bind”错误?   Java数组与数组   每次任务完成任务时,Java多线程都会安排任务   java部分编译时使用maven编织第三方jar   java Dokku单一回购中的多个应用程序   用apachevelocity生成javac/C++语言文件   java如何使用spring应用程序上下文中的属性文件实例化列表   java访问智能卡文件结构   具有GlobalMethodSecurity的java自定义UserDetailService循环引用   java如何集成Spring和JSF