我正在開發零售應用程序。通常在零售銷售中可以有多種支付類型和金額(以及一段時間內的多種相同類型)。我遇到了一個錯誤,並希望確保我有意義的修復。確定每種付款類型實際使用多少付款和金額
這些付款總額可能大於或等於付款類型(用於出售)。我遇到了一個奇怪的場景,我不確定自己有沒有正確的想法。
實例問題我有:
售總+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;
}