Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        ////////////////////////////////////////////////////////////////////////////////////////////
        //   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);
        }
Exemplo n.º 3
0
        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;
                }
            }
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        /// <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
        }
Exemplo n.º 6
0
 private DataSetModel()
 {
     ffDataSet = new FFDataSet();
 }