public FinancialReport()
        {
            InitializeComponent();
            _materialSkinManager = DesignSettings.GetDesign();
            _materialSkinManager.AddFormToManage(this);

            UserSession.ParentForm.Hide();
            LblUserName.Text            = UserSession.UserData.UserName;
            normalTransactionRepository = new NormalTransactionRepository();

            _transactionList = new List <Transaction>();

            DPickerStartDate.Value = DateTime.Now.AddDays(-1);
            DPickerEndDate.Value   = DateTime.Now;
        }
        private async void _getNormalTransactions()
        {
            lblHeading.Text = "Normal Transaction";
            NormalTransactionRepository normalTransactionRepository = new NormalTransactionRepository();
            List <Transaction>          listOfNormalTransaction     = await Task.Run(() => normalTransactionRepository.GetTransactions(UserSession.UserData.Id));

            TransactionListView.Items.Clear();
            foreach (Transaction normalTransaction in listOfNormalTransaction)
            {
                ListViewItem listView = new ListViewItem(new string[] { normalTransaction.Name, normalTransaction.Type, normalTransaction.Amount.ToString("£0.00"), normalTransaction.TransactionDate.ToString() })
                {
                    Tag = normalTransaction
                };
                TransactionListView.Items.Add(listView);
            }
        }
        private async void TransactionActionForm_Load(object sender, EventArgs e)
        {
            ContactRepository contactRepository = new ContactRepository();

            _normalTransactionRepository    = new NormalTransactionRepository();
            _recurringTransactionRepository = new RecurringTransactionRepository();

            List <Contact> contactList = await Task.Run(() => contactRepository.GetContacts(UserSession.UserData.Id));

            CmbContact.DataSource    = contactList;
            CmbContact.DisplayMember = "Name";

            if (_recurringStatus)
            {
                _setContactForTransaction(contactList, _recurringTransaction);
            }
            else
            {
                _setContactForTransaction(contactList, _normalTransaction);
            }
        }
        private async void BtnPredict_Click(object sender, EventArgs e)
        {
            NormalTransactionRepository    normalTransactionRepository    = new NormalTransactionRepository();
            RecurringTransactionRepository recurringTransactionRepository = new RecurringTransactionRepository();
            List <Transaction>             transactionList = await Task.Run(() => normalTransactionRepository.GetExpenseTransactions(UserSession.UserData.Id));

            List <RecurringTransaction> recurringTransaction = await Task.Run(() => recurringTransactionRepository.GetExpenseTransactions(UserSession.UserData.Id));

            double averageOfTransaction        = _getAverage(transactionList);
            double totalOfRecurringTransaction = _getRecurringTransactionAmount(recurringTransaction);
            double prediction = 0;

            if (averageOfTransaction > totalOfRecurringTransaction)
            {
                prediction = averageOfTransaction;
            }
            else
            {
                prediction = totalOfRecurringTransaction;
            }
            MessageBox.Show("Predicted Expense for " + DPickerDate.Value.ToShortDateString() + " : £" + prediction.ToString("0.00"), "INFORMATION", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        public async void _checkRecurringTransaction()
        {
            NormalTransactionRepository    normalTransactionRepository    = new NormalTransactionRepository();
            RecurringTransactionRepository recurringTransactionRepository = new RecurringTransactionRepository();

            List <RecurringTransaction> recurringTransactionList = recurringTransactionRepository.GetTransactions(UserSession.UserData.Id);

            foreach (RecurringTransaction recurringTransaction in recurringTransactionList)
            {
                int noOfDays = (DateTime.Now - UserSession.UserData.LastAccessDate).Days;

                DateTime recurringTime = UserSession.UserData.LastAccessDate;
                TimeSpan timeSpan      = new TimeSpan(recurringTransaction.TransactionDate.Hour, recurringTransaction.TransactionDate.Minute, recurringTransaction.TransactionDate.Second);
                recurringTime = recurringTime.Date + timeSpan;

                for (int i = 0; i <= noOfDays; i++)
                {
                    if (recurringTransaction.Status.Equals("Weekly"))
                    {
                        if (recurringTime.DayOfWeek != recurringTransaction.TransactionDate.DayOfWeek)
                        {
                            recurringTime = recurringTime.AddDays(1);
                            continue;
                        }
                    }

                    if (recurringTransaction.Status.Equals("Monthly"))
                    {
                        if (recurringTime.Day != recurringTransaction.TransactionDate.Day)
                        {
                            recurringTime = recurringTime.AddDays(1);
                            continue;
                        }
                    }

                    if (recurringTransaction.Status.Equals("Yearly"))
                    {
                        string recurringTimeString = recurringTime.ToString("dd/MM");
                        string createdDateString   = recurringTransaction.TransactionDate.ToString("dd/MM");
                        if (!recurringTimeString.Equals(createdDateString))
                        {
                            recurringTime = recurringTime.AddDays(1);
                            continue;
                        }
                    }

                    if (recurringTime > UserSession.UserData.LastAccessDate && recurringTime <= DateTime.Now && recurringTime > recurringTransaction.TransactionDate)
                    {
                        _messageStatus = await Task.Run(() => normalTransactionRepository.AddNormalTransaction(new Transaction
                        {
                            Name            = recurringTransaction.Name,
                            Amount          = recurringTransaction.Amount,
                            Type            = recurringTransaction.Type,
                            TransactionDate = recurringTime,
                            Note            = recurringTransaction.Note,
                            ContactId       = recurringTransaction.ContactId,
                            UserId          = recurringTransaction.UserId
                        }));

                        RecurringBackground.ReportProgress(1, "New Transaction has been Added");
                    }
                    recurringTime = recurringTime.AddDays(1);
                }
            }
        }
        private async void _createTransactions(DateTime selectedTime)
        {
            NormalTransactionRepository normalTransactionRepository = new NormalTransactionRepository();
            List <Transaction>          listOfTransaction           = await Task.Run(() => normalTransactionRepository.GetTransactionFromDate(selectedTime, UserSession.UserData.Id));

            _totalIncome  = 0;
            _totalExpense = 0;

            _transactionPanel.BackColor  = SystemColors.ControlLight;
            _transactionPanel.Location   = new Point(430, 140);
            _transactionPanel.Name       = "transactionPanel";
            _transactionPanel.Size       = new Size(_width, _height);
            _transactionPanel.AutoScroll = true;
            this.Controls.Add(_transactionPanel);

            _transactionPanel.Controls.Clear();

            Label lblTrasactionHeading = new Label
            {
                AutoSize  = true,
                BackColor = Color.Transparent,
                Font      = new Font("Times New Roman", 16.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))),
                Location  = new Point(10, 10),
                Size      = new Size(155, 33),
                Text      = "Transactions"
            };

            _transactionPanel.Controls.Add(lblTrasactionHeading);

            Panel line = new Panel
            {
                BackColor = Color.Black,
                Location  = new Point(10, 40),
                Anchor    = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top,
                Size      = new Size(_transactionPanel.Width - 20, 2)
            };

            _transactionPanel.Controls.Add(line);

            int count = 1;

            foreach (Transaction transaction in listOfTransaction)
            {
                Panel eachTransaction = new Panel
                {
                    Anchor    = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right,
                    BackColor = Color.White,
                    Size      = new Size(290, 80),
                    Location  = new Point(10, count * 55)
                };
                _transactionPanel.Controls.Add(eachTransaction);

                Label lblTransactionName = new Label
                {
                    Font     = new Font("Times New Roman", 18F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0))),
                    AutoSize = true,
                    Anchor   = AnchorStyles.Left | AnchorStyles.Top,
                    Location = new Point(5, 20),
                    Size     = new Size(100, 100),
                    Text     = transaction.Name
                };
                eachTransaction.Controls.Add(lblTransactionName);

                Label lblTransactionType = new Label
                {
                    Font     = new Font("Times New Roman", 10F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0))),
                    AutoSize = true,
                    Anchor   = AnchorStyles.Left | AnchorStyles.Top,
                    Location = new Point(10, 50),
                    Size     = new Size(100, 100),
                    Text     = transaction.Type
                };
                eachTransaction.Controls.Add(lblTransactionType);

                Label lblAmount = new Label
                {
                    Font     = new Font("Times New Roman", 22F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0))),
                    AutoSize = true,
                    Anchor   = AnchorStyles.Right | AnchorStyles.Top,
                    Location = new Point(200, 25),
                    Size     = new Size(100, 100),
                    Text     = "£" + transaction.Amount
                };
                eachTransaction.Controls.Add(lblAmount);


                if (transaction.Type.Equals("Expense"))
                {
                    _totalExpense               += transaction.Amount;
                    lblAmount.ForeColor          = Color.FromArgb(244, 67, 54);
                    lblTransactionType.ForeColor = Color.FromArgb(244, 67, 54);
                }
                else
                {
                    _totalIncome                += transaction.Amount;
                    lblAmount.ForeColor          = Color.FromArgb(0, 121, 107);
                    lblTransactionType.ForeColor = Color.FromArgb(0, 121, 107);
                }
                LblTotalExpense.Text = "£" + _totalExpense;
                LblTotalIncome.Text  = "£" + _totalIncome;
                count++;
            }
        }
 private async void _getTransactionForDate(DateTime selectedDate)
 {
     NormalTransactionRepository normalTransactionRepository = new NormalTransactionRepository();
     List <Transaction>          transactionList             = await Task.Run(() => normalTransactionRepository.GetTransactionFromDate(selectedDate, UserSession.UserData.Id));
 }