public void WriteOff(Loan loan, DateTime onDate, int writeOffMethodId) { using (SqlConnection conn = _loanManager.GetConnection()) using (SqlTransaction sqlTransaction = conn.BeginTransaction()) { try { WriteOffEvent writeOffEvent = loan.WriteOff(onDate); writeOffEvent.User = User.CurrentUser; writeOffEvent.WriteOffMethod = writeOffMethodId; if (Teller.CurrentTeller != null && Teller.CurrentTeller.Id != 0) writeOffEvent.TellerId = Teller.CurrentTeller.Id; _ePs.FireEvent(writeOffEvent, loan, sqlTransaction); //lciw ~ loan credit insurance write-off foreach (Event item in loan.Events) { if (item is CreditInsuranceEvent) if (item.Code == "LCIW" && item.Deleted == false) _ePs.FireEvent(item, loan, sqlTransaction); } if (loan.Project.Client is Person) { loan.Project.Client.Active = false; loan.Project.Client.Status = OClientStatus.Inactive; _clientManager.UpdateClientStatus(loan.Project.Client, sqlTransaction); } UpdateLoan(ref loan, sqlTransaction); CallInterceptor(new Dictionary<string, object> { {"Loan", loan}, {"Event", writeOffEvent}, {"SqlTransaction", sqlTransaction} }); if (sqlTransaction != null) sqlTransaction.Commit(); if (loan.Project.Client is Group) UpdateGroupMembersStatuses(loan); } catch (Exception) { if (sqlTransaction != null) sqlTransaction.Rollback(); throw; } } }