private static bool copyFromOppLines(FFDataSet dataSet, FFDataSet.LineItemRow line, decimal envSum) { bool copied = false; List <FFDataSet.EnvelopeLineRow> oppELines = new List <FFDataSet.EnvelopeLineRow>(); decimal sum = 0.0m; // get opp Envelope lines foreach (FFDataSet.EnvelopeLineRow oppELine in dataSet.EnvelopeLine) { if (oppELine.LineItemRow.transactionID == line.transactionID && oppELine.LineItemRow.creditDebit != line.creditDebit) { oppELines.Add(oppELine); sum += oppELine.amount; } } if (sum == line.amount - envSum) { foreach (FFDataSet.EnvelopeLineRow eLine in oppELines) { FFDataSet.EnvelopeLineRow newEline = dataSet.EnvelopeLine.NewEnvelopeLineRow(); newEline.lineItemID = line.id; newEline.envelopeID = eLine.envelopeID; newEline.description = eLine.description; newEline.amount = eLine.amount; dataSet.EnvelopeLine.AddEnvelopeLineRow(newEline); if (oppELines.Count == 1) { newEline.LineItemRow.envelopeID = eLine.envelopeID; } else if (oppELines.Count > 1) { newEline.LineItemRow.envelopeID = SpclEnvelope.SPLIT; } } copied = true; } return(copied); }
//////////////////////////////////////////////////////////////////////////////////////////// // Public Functions //////////////////////////////////////////////////////////////////////////////////////////// public ImportQIF(string filePath) { this.fileName = filePath; this.ffDataSet = new FFDataSet(); this.ffDataSet.myInit(); this.qifAccounts = new List <QifAccount>(); this.qifTransfers = new List <QifTransaction>(); // Setup the worker this.importWorker = new BackgroundWorker(); this.importWorker.WorkerReportsProgress = true; this.importWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(importWorker_RunWorkerCompleted); this.importWorker.ProgressChanged += new ProgressChangedEventHandler(importWorker_ProgressChanged); this.importWorker.DoWork += new DoWorkEventHandler(importWorker_DoWork); }
private static void fillInFromEnvelopeLines(FFDataSet dataSet, LineSum lineSum, List <EnvBal> envelopes, decimal skipAmount) { decimal remainingAmount = lineSum.RemainingAmount - skipAmount; while (remainingAmount > 0.0m) { FFDataSet.EnvelopeLineRow envLine = null; EnvBal envelope = getNegativeEnvelope(envelopes); if (envelope == null) { break; } // Make a new envelope line for this envelope envLine = dataSet.EnvelopeLine.NewEnvelopeLineRow(); envLine.lineItemID = lineSum.Line.id; envLine.envelopeID = envelope.envelopeID; envLine.description = ""; envLine.amount = 0.0m; dataSet.EnvelopeLine.AddEnvelopeLineRow(envLine); // decide how much to change the envelopeLine.amount if (remainingAmount >= +Math.Abs(envelope.balance)) { envLine.amount = Math.Abs(envelope.balance); remainingAmount -= Math.Abs(envelope.balance); envelope.balance = 0.0m; } else { envLine.amount = remainingAmount; envelope.balance += remainingAmount; remainingAmount = 0.0m; } } }
static public void Distribute(int accountID) { List <EnvBal> envelopes = new List <EnvBal>(); Queue <LineSum> holdLines = new Queue <LineSum>(); decimal skipAmount = 0.0m; FFDataSet dataSet = new FFDataSet(); dataSet.myInit(); dataSet.myFillForAutoDistribute(); for (int index = 0; index < dataSet.LineItem.Count; index++) { FFDataSet.LineItemRow line = dataSet.LineItem[index]; if (line.accountID != accountID) { continue; } FFDataSet.EnvelopeLineRow[] envLines = line.GetEnvelopeLineRows(); decimal envSum = envLineSum(envLines); // Decide what to do with this line if (envSum == line.amount) { updateEnvelopes(line.creditDebit, envLines, envelopes); } else if (copyFromOppLines(dataSet, line, envSum)) { envLines = line.GetEnvelopeLineRows(); updateEnvelopes(line.creditDebit, envLines, envelopes); if (envLines.Length > 1) { line.envelopeID = SpclEnvelope.SPLIT; } else if (envLines.Length == 1) { line.envelopeID = envLines[0].envelopeID; } } else if (line.creditDebit == LineCD.CREDIT && envLines.Length > 0) { updateEnvelopes(line.creditDebit, envLines, envelopes); skipAmount += line.amount - envSum; } else if (line.creditDebit == LineCD.CREDIT && envLines.Length == 0) { skipAmount += line.amount; } else if (line.creditDebit == LineCD.DEBIT) { if (envLines.Length > 0) { updateEnvelopes(line.creditDebit, envLines, envelopes); } holdLines.Enqueue(new LineSum(line, line.amount - envSum)); } // See if there are enough negative envelopes and skip amounts to disribute the // next line being held. while (holdLines.Count > 0 && holdLines.Peek().RemainingAmount <= skipAmount) { LineSum lineSum = holdLines.Dequeue(); skipAmount -= lineSum.RemainingAmount; } while (holdLines.Count > 0 && holdLines.Peek().RemainingAmount <= skipAmount + getNegativeSum(envelopes)) { LineSum lineSum = holdLines.Dequeue(); fillInFromEnvelopeLines(dataSet, lineSum, envelopes, skipAmount); skipAmount = 0.0m; envLines = lineSum.Line.GetEnvelopeLineRows(); if (envLines.Length > 1) { lineSum.Line.envelopeID = SpclEnvelope.SPLIT; } else if (envLines.Length == 1) { lineSum.Line.envelopeID = envLines[0].envelopeID; } } } dataSet.mySaveData(); dataSet.Clear(); envelopes.Clear(); holdLines.Clear(); }
/// <summary> /// Prevents instantiation of this class. Instantiates the singleton instance of this /// class. /// </summary> private MyData() { // Initialize the dataset this.ffDataSet = new FFDataSet(); // Initialize the tables this.EnvelopeGroup = this.ffDataSet.EnvelopeGroup; this.Envelope = this.ffDataSet.Envelope; this.EnvelopeLine = this.ffDataSet.EnvelopeLine; this.LineType = this.ffDataSet.LineType; this.Transaction = this.ffDataSet.Transaction; this.LineItem = this.ffDataSet.LineItem; this.FitLine = this.ffDataSet.FitLine; this.Account = this.ffDataSet.Account; this.AccountType = this.ffDataSet.AccountType; this.Bills = this.ffDataSet.Bills; this.Settings = this.ffDataSet.Settings; this.Bank = this.ffDataSet.Bank; this.BankInfo = this.ffDataSet.BankInfo; this.OFXFiles = this.ffDataSet.OFXFiles; // Set the clear before fill this.envelopeGroupTA.ClearBeforeFill = true; this.envelopeTA.ClearBeforeFill = true; this.envelopeLineTA.ClearBeforeFill = true; this.lineTypeTA.ClearBeforeFill = true; this.transactionTA.ClearBeforeFill = true; this.lineItemTA.ClearBeforeFill = true; this.fitLineTA.ClearBeforeFill = true; this.accountTypeTA.ClearBeforeFill = true; this.accountTA.ClearBeforeFill = true; this.billsTA.ClearBeforeFill = true; this.settingsTA.ClearBeforeFill = true; this.bankTA.ClearBeforeFill = true; this.bankInfoTA.ClearBeforeFill = true; this.ofxFilesTA.ClearBeforeFill = true; // Fill all the tables this.envelopeGroupTA.Fill(EnvelopeGroup); this.envelopeTA.Fill(Envelope); this.lineTypeTA.Fill(LineType); this.transactionTA.Fill(Transaction); this.fitLineTA.Fill(FitLine); this.accountTypeTA.Fill(AccountType); this.accountTA.Fill(Account); this.lineItemTA.Fill(LineItem); this.envelopeLineTA.Fill(EnvelopeLine); this.billsTA.Fill(Bills); this.settingsTA.Fill(Settings); this.bankTA.Fill(Bank); this.bankInfoTA.Fill(BankInfo); this.ofxFilesTA.Fill(OFXFiles); // Subscribe to the new lines this.Account.TableNewRow += new System.Data.DataTableNewRowEventHandler(Account_TableNewRow); this.AccountType.TableNewRow += new System.Data.DataTableNewRowEventHandler(AccountType_TableNewRow); this.Bank.TableNewRow += new System.Data.DataTableNewRowEventHandler(Bank_TableNewRow); this.BankInfo.TableNewRow += new System.Data.DataTableNewRowEventHandler(BankInfo_TableNewRow); this.Bills.TableNewRow += new System.Data.DataTableNewRowEventHandler(Bills_TableNewRow); this.Envelope.TableNewRow += new System.Data.DataTableNewRowEventHandler(Envelope_TableNewRow); this.EnvelopeGroup.TableNewRow += new System.Data.DataTableNewRowEventHandler(EnvelopeGroup_TableNewRow); this.EnvelopeLine.TableNewRow += new System.Data.DataTableNewRowEventHandler(EnvelopeLine_TableNewRow); this.FitLine.TableNewRow += new System.Data.DataTableNewRowEventHandler(FitLine_TableNewRow); this.LineItem.TableNewRow += new System.Data.DataTableNewRowEventHandler(LineItem_TableNewRow); this.LineType.TableNewRow += new System.Data.DataTableNewRowEventHandler(LineType_TableNewRow); this.OFXFiles.TableNewRow += new System.Data.DataTableNewRowEventHandler(OFXFiles_TableNewRow); // this.Settings this.Transaction.TableNewRow += new System.Data.DataTableNewRowEventHandler(Transaction_TableNewRow); // Subscribe to column Changing this.Account.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); this.AccountType.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); this.Bank.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); this.BankInfo.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); this.Envelope.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); this.EnvelopeGroup.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); this.FitLine.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); this.LineType.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); // Not Bills this.Bills.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); // Not Settings this.Settings.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); // Not EnvelopeLine this.EnvelopeLine.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); // Not LineItem this.LineItem.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); // Not OFXFiles this.OFXFiles.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); // Not Transaction this.Transaction.ColumnChanging += new System.Data.DataColumnChangeEventHandler(ColumnChanging); // not Goal }
private DataSetModel() { ffDataSet = new FFDataSet(); }