// Make payment on external bills public async Task <string> MakePaymentOnExternalBill(int ExternalHeaderId, double NewPaymentAmt) { try { ExternalBillHeader ExternalHeader = _db.ExternalBillHeader.FirstOrDefault(h => h.Id == ExternalHeaderId); CustAcc Acc = _db.CustAcc.FirstOrDefault(ac => ac.CustId == ExternalHeader.CustId); // updating bill header will the payment ExternalHeader.PaidAmt += NewPaymentAmt; // if the bill paid all, change status to completed if (ExternalHeader.TotalNetAmt == ExternalHeader.PaidAmt) { ExternalHeader.Status = SD.Completed; } // updating customer Acc //Acc.Paid += PaidAmt; //Acc.Debt -= PaidAmt; UpdateCustomerAcc(ExternalHeader.CustId ?? 0, NewPaymentAmt, NewPaymentAmt, "Old"); // add a new payment to bill payments table AddExternalBillPayment(ExternalHeader.CustId ?? 0, ExternalHeader.Id, NewPaymentAmt); await _db.SaveChangesAsync(); return("تمت عملية الدفع"); } catch (Exception ex) { return("لم تتم عملية الدفع"); } }
// this function will update customer account manually, only for admin public async Task <string> UpdateCustomerAccManually(int CustId, double Payment, double Debt) { try { CustAcc Acc = _db.CustAcc.FirstOrDefault(ac => ac.CustId == CustId); if (Payment > 0) { Acc.Paid = Payment; } if (Debt > 0) { Acc.Debt = Debt; } await _db.SaveChangesAsync(); return("تم تعديل الحساب"); } catch { return("Error! حصل خطأ لم يتم تعديل الحساب"); } }
public async Task <IActionResult> OnGet(int CustId) { Customer = await _db.Customer.FirstOrDefaultAsync(cus => cus.Id == CustId); CustAcc = await _db.CustAcc.FirstOrDefaultAsync(acc => acc.CustId == CustId); return(Page()); }
// Revert customer acc, when bill is cancelled private void RevertCustomerAcc(int CustId, double Paid, double Debt) { CustAcc Acc = _db.CustAcc.FirstOrDefault(cu => cu.CustId == CustId); if (Acc != null) { // reverting both amount of customer's account Acc.Paid -= Paid; Acc.Debt -= Debt; } }
// Helper functions // private void CreateCustomerAccount(int CustId) { CustAcc NewAcc = new CustAcc { CustId = CustId, Paid = 0, Debt = 0 }; _db.CustAcc.Add(NewAcc); _db.SaveChangesAsync().GetAwaiter().GetResult(); }
// this function will be used to update customer acc when a bill is edited private void UpdateCustAccOnBillEdit(int CustId, double NewPayment, double OldPayment, double NewDebt, double OldDebt) { CustAcc Acc = _db.CustAcc.FirstOrDefault(cu => cu.CustId == CustId); // update new payment if (NewPayment > 0) { Acc.Paid -= OldPayment; Acc.Paid += NewPayment; } //update new debt if (NewDebt > 0) { Acc.Debt += OldDebt; Acc.Debt -= NewDebt; } }
// updating customer Accs private void UpdateCustomerAcc(int CustId, double Paid, double Debt, string Status) { CustAcc Acc = _db.CustAcc.FirstOrDefault(cu => cu.CustId == CustId); Acc.Paid += Paid; // if new means new bill and will add more debit (in case customer didnt make full payment) if (Status == "New") { Acc.Debt += Debt; } else // this will be used when a customer makes a new payment on existing bill, so debt will be minus { if (Acc.Debt > 0) { Acc.Debt -= Debt; } } }
public async Task <string> MakePaymentToAcc(int CustId, double NewPaymentAmt) { try { CustAcc Acc = _db.CustAcc.FirstOrDefault(ac => ac.CustId == CustId); // updating customer Acc //Acc.Paid += PaidAmt; //Acc.Debt -= PaidAmt; UpdateCustomerAcc(CustId, NewPaymentAmt, NewPaymentAmt, "Old"); await _db.SaveChangesAsync(); return("تمت عملية الدفع"); } catch (Exception ex) { return("لم تتم عملية الدفع"); } }