我正在开发零售应用程序。通常在零售销售中可以有多种支付类型和金额(以及一段时间内的多种相同类型)。我遇到了一个错误,并希望确保我有意义的修复。确定每种付款类型实际使用多少付款和金额
这些付款总额可能大于或等于付款类型(用于出售)。我遇到了一个奇怪的场景,我不确定自己有没有正确的想法。
实例问题我有:
售总+20
他们支付-2
上cash
,然后debit
+22
。下面的功能报告+20
现金和0
借方。我想要一个方法来报告-2
cash
和+22
上debit
。
还有其他一些简单的情况,如总销售+18
,他们在cash
支付+20
。这种情况下工作并报告+18
在cash
。
还可以按不同的顺序输入付款;但我认为它应该根据它输入的顺序来完成。
我遇到的问题是积极销售的负支付。
逻辑首先获得总销售余额。 (可能对销售有积极影响,对于退货可能为负数;甚至可能为0)。从这里检查支付金额是正面还是负面。
- 如果是肯定的,它会尝试尽可能多地使用付款金额直到总销售余额(我认为这是正确的)。
2.负向支付类型存在逆逻辑。我认为在正面销售中出现负付款会造成问题。我不知道如何解决这个问题,我没有预想到这种情况。
经过这些检查后,它会从总销售余额中扣除付款,并对所有付款执行相同的逻辑。
$total_sale_balance = $sales_totals[$sale_id];
foreach($payment_rows as $payment_row)
{
if ($payment_row['payment_amount'] >=0)
{
$payment_amount = $payment_row['payment_amount'] <= $total_sale_balance ? $payment_row['payment_amount'] : $total_sale_balance;
}
else
{
$payment_amount = $payment_row['payment_amount'] >= $total_sale_balance ? $payment_row['payment_amount'] : $total_sale_balance;
}
if (!isset($payment_data[$payment_row['payment_type']]))
{
$payment_data[$payment_row['payment_type']] = array('payment_type' => $payment_row['payment_type'], 'payment_amount' => 0);
}
$exists = $this->_does_payment_exist_in_array($payment_row['payment_id'], $payments_by_sale[$sale_id]);
if ($total_sale_balance != 0 && $exists)
{
$payment_data[$payment_row['payment_type']]['payment_amount'] += $payment_amount;
}
$total_sale_balance-=$payment_amount;
}
我正在寻找一种不同的方式来查看问题,因为我遇到了针对销售和退货的不同付款类型的问题。
我是否需要4种可能的逻辑?(这似乎是有道理的)
1:销售总阳性,付款方式正
$payment_amount = $payment_row['payment_amount'] <= $total_sale_balance ? $payment_row['payment_amount'] : $total_sale_balance;
2:销售总阳性,付款类型负
$payment_amount = $payment_row['payment_amount'];
3:住宅总负,付款类型正面
$payment_amount = $payment_row['payment_amount'];
4:销售总计负面,付款方式负面
$payment_amount = $payment_row['payment_amount'] >= $total_sale_balance ? $payment_row['payment_amount'] : $total_sale_balance;
我只是想确保覆盖所有场景。
这与上述逻辑的最终代码....我俯瞰什么?这似乎是有道理的吗?
$total_sale_balance = $sales_totals[$sale_id];
foreach($payment_rows as $payment_row)
{
//Postive sale total, positive payment
if ($sales_totals[$sale_id] >= 0 && $payment_row['payment_amount'] >=0)
{
$payment_amount = $payment_row['payment_amount'] <= $total_sale_balance ? $payment_row['payment_amount'] : $total_sale_balance;
}//Negative sale total negative payment
elseif ($sales_totals[$sale_id] < 0 && $payment_row['payment_amount'] < 0)
{
$payment_amount = $payment_row['payment_amount'] >= $total_sale_balance ? $payment_row['payment_amount'] : $total_sale_balance;
}//Positive Sale total negative payment
elseif($sales_totals[$sale_id] >= 0 && $payment_row['payment_amount'] < 0)
{
$payment_amount = $payment_row['payment_amount'];
}//Negtive sale total postive payment
elseif($sales_totals[$sale_id] < 0 && $payment_row['payment_amount'] >= 0)
{
$payment_amount = $payment_row['payment_amount'];
}
if (!isset($payment_data[$payment_row['payment_type']]))
{
$payment_data[$payment_row['payment_type']] = array('payment_type' => $payment_row['payment_type'], 'payment_amount' => 0);
}
$exists = $this->_does_payment_exist_in_array($payment_row['payment_id'], $payments_by_sale[$sale_id]);
if ($total_sale_balance != 0 && $exists)
{
$payment_data[$payment_row['payment_type']]['payment_amount'] += $payment_amount;
}
$total_sale_balance-=$payment_amount;
}