Example #1
0
        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;
                }
            }
        }