private void Add_Click() { Transaction trans = new Transaction(); trans.UserNum = Security.CurUser.UserNum; Transactions.Insert(trans); //we now have a TransactionNum, and datetimeEntry has been set FormTransactionEdit FormT = new FormTransactionEdit(trans.TransactionNum, AccountCur.AccountNum); FormT.IsNew = true; FormT.ShowDialog(); if (FormT.DialogResult == DialogResult.Cancel) { //no need to try-catch, since no journal entries were saved. Transactions.Delete(trans); } FillGrid(); }
private void butDelete_Click(object sender, System.EventArgs e) { if (IsNew) { DialogResult = DialogResult.Cancel; return; } //If deposit is attached to a transaction which is more than 48 hours old, then not allowed to delete. //This is hard coded. User would have to delete or detach from within transaction rather than here. Transaction trans = Transactions.GetAttachedToDeposit(DepositCur.DepositNum); if (trans != null) { if (trans.DateTimeEntry < MiscData.GetNowDateTime().AddDays(-2)) { MsgBox.Show(this, "Not allowed to delete. This deposit is already attached to an accounting transaction. You will need to detach it from within the accounting section of the program."); return; } if (Transactions.IsReconciled(trans)) { MsgBox.Show(this, "Not allowed to delete. This deposit is attached to an accounting transaction that has been reconciled. You will need to detach it from within the accounting section of the program."); return; } try{ Transactions.Delete(trans); } catch (ApplicationException ex) { MessageBox.Show(ex.Message); return; } } if (!MsgBox.Show(this, true, "Delete?")) { return; } Deposits.Delete(DepositCur); DialogResult = DialogResult.OK; }
///<summary>Only called once from FormPayment when trying to change an amount or an account on a payment that's already linked to the Accounting section or when trying to create a new link. This automates updating the Accounting section. Do not surround with try-catch, because it was already validated in ValidateLinkedEntries above. Use -1 for newAcct to indicate no changed. The name is required to give descriptions to new entries.</summary> public static void AlterLinkedEntries(double oldAmt, double newAmt, bool isNew, int payNum, int newAcct, DateTime payDate, string patName) { if (!Accounts.PaymentsLinked()) { return; //user has not even set up accounting links. } bool amtChanged = false; if (oldAmt != newAmt) { amtChanged = true; } Transaction trans = Transactions.GetAttachedToPayment(payNum); //this gives us the oldAcctNum double absNew = newAmt; //absolute value of the new amount if (newAmt < 0) { absNew = -newAmt; } //if(trans==null && (newAcct==0 || newAcct==-1)) {//then this method will not even be called if (trans == null) //no previous link, but user is trying to create one. //this is the only case where a new trans is required. { trans = new Transaction(); trans.PayNum = payNum; trans.UserNum = Security.CurUser.UserNum; Transactions.Insert(trans); //sets entry date //first the deposit entry JournalEntry je = new JournalEntry(); je.AccountNum = newAcct; //DepositAccounts[comboDepositAccount.SelectedIndex]; je.CheckNumber = Lan.g("Payments", "DEP"); je.DateDisplayed = payDate; //it would be nice to add security here. if (absNew == newAmt) //amount is positive { je.DebitAmt = newAmt; } else { je.CreditAmt = absNew; } je.Memo = Lan.g("Payments", "Payment -") + " " + patName; je.Splits = Accounts.GetDescript(PrefB.GetInt("AccountingCashIncomeAccount")); je.TransactionNum = trans.TransactionNum; JournalEntries.Insert(je); //then, the income entry je = new JournalEntry(); je.AccountNum = PrefB.GetInt("AccountingCashIncomeAccount"); //je.CheckNumber=; je.DateDisplayed = payDate; //it would be nice to add security here. if (absNew == newAmt) //amount is positive { je.CreditAmt = newAmt; } else { je.DebitAmt = absNew; } je.Memo = Lan.g("Payments", "Payment -") + " " + patName; je.Splits = Accounts.GetDescript(newAcct); je.TransactionNum = trans.TransactionNum; JournalEntries.Insert(je); return; } //at this point, we have established that there is a previous transaction. ArrayList jeAL = JournalEntries.GetForTrans(trans.TransactionNum); int oldAcct = 0; JournalEntry jeDebit = null; JournalEntry jeCredit = null; bool signChanged = false; double absOld = oldAmt;//the absolute value of the old amount if (oldAmt < 0) { absOld = -oldAmt; } if (oldAmt < 0 && newAmt > 0) { signChanged = true; } if (oldAmt > 0 && newAmt < 0) { signChanged = true; } for (int i = 0; i < 2; i++) { if (Accounts.GetAccount(((JournalEntry)jeAL[i]).AccountNum).AcctType == AccountType.Asset) { oldAcct = ((JournalEntry)jeAL[i]).AccountNum; } if (((JournalEntry)jeAL[i]).DebitAmt == absOld) { jeDebit = (JournalEntry)jeAL[i]; } //old credit entry if (((JournalEntry)jeAL[i]).CreditAmt == absOld) { jeCredit = (JournalEntry)jeAL[i]; } } //Already validated that both je's are not null, and that oldAcct is not 0. if (newAcct == 0) //detaching it from a linked transaction. We will delete the transaction //we don't care about the amount { Transactions.Delete(trans); //we need to make sure this doesn't throw any exceptions by carefully checking all //possibilities in the validation routine above. return; } //Either the amount or the account changed on an existing linked transaction. bool acctChanged = false; if (newAcct != -1 && oldAcct != newAcct) { acctChanged = true; //changing linked acctNum } if (amtChanged) { if (signChanged) { jeDebit.DebitAmt = 0; jeDebit.CreditAmt = absNew; jeCredit.DebitAmt = absNew; jeCredit.CreditAmt = 0; } else { jeDebit.DebitAmt = absNew; jeCredit.CreditAmt = absNew; } } if (acctChanged) { if (jeDebit.AccountNum == oldAcct) { jeDebit.AccountNum = newAcct; } if (jeCredit.AccountNum == oldAcct) { jeCredit.AccountNum = newAcct; } } JournalEntries.Update(jeDebit); JournalEntries.Update(jeCredit); }