生成贷款收据报告(退款或反向交易)

时间:2017-02-15 17:44:15

标签: php mysql codeigniter

我正在为非政府组织制定系统,为没有任何利益的穷人提供贷款,借款人每月向组织偿还款项 当员工插入错误值的付款时,我发生逆向交易或退款的问题,因此他应该对此交易进行反向操作 我通过插入此付款的负值

来实现

我有贷款 ,其中包含以下列:

id ║   amount  ║ loan_date  ║ created_on  ║ emp_id      ║   client_id ║
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣
1  ║    10,000 ║ 2011-01-01 ║  2010-01-01 ║    100      ║    600      ║

收据

id ║  loan_id  ║ p_amount   ║ p_date      ║ rev_p_id    ║ created_on  ║
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣
1  ║    1      ║ 500        ║  2011-01-01 ║   null      ║  2011-01-01 ║
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣
2  ║    1      ║ 500        ║  2011-02-01 ║   null      ║  2011-01-01 ║
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣
3  ║    1      ║ 500        ║  2011-03-01 ║   null      ║  2011-01-01 ║
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣
4  ║    1      ║ -500       ║  2011-04-01 ║    2        ║  2011-01-01 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣
5  ║    1      ║ 500        ║  2011-05-01 ║   null      ║  2011-01-01 ║
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣
6  ║    1      ║ 500        ║  2011-06-01 ║   null      ║  2011-01-01 ║
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣
7  ║    1      ║ 500        ║  2011-07-01 ║   null      ║  2011-01-01 ║

当我想要生成报告时我的问题我在日期之间使用求和查询 情况1 2011-01-01到2011-06-01之间应该给我= 2500 这是真的,因为付款号码2和它在日期范围之间的反向

案例2 在2011-03-01到2011-06-01之间应该给我= 1500并且不对负收据求和,因为它与付款ID 2相反并且不在此期间

我如何确定何时应该通过mysql对反向值求和 和php我正在使用codeigniter和mysql

1 个答案:

答案 0 :(得分:0)

我会在您的receipts表格上进行自我加入以获取任何撤消的逆转交易日期,并使用此日期来决定是否在报告期间发生逆转:

select r1.loan_id, sum(r1.p_amount) sum_amount
from receipts r1
left join receipts r2 on r1.rev_p_id=r2.id
where coalesce(r2.p_date,r1.p_date)>=... and coalesce(r2.p_date,r1.p_date)<=...
group by r1.loan_id

coalesce()函数用于返回第一个非空日期。对于常规付款,r2.p_date将为空(它不会撤消任何内容),因此将使用实际的p_date。如果撤消r2.p_date将不为空(它将有相反的付款日期),因此coalesce()将返回此日期。