public IssueFinancialControlViewModel(Issue issue, IssueFinancialControl view)
        {
            mView = view;
            mIssue = issue;
            CompositionInitializer.SatisfyImports(this);

            mTimer.Interval = TimeSpan.FromMilliseconds(500);
            mTimer.Tick += RefreshFinancualTableTable;

            CmsWebServiceClient cmsWebServiceClient = new CmsWebServiceClient(Utils.WcfBinding, Utils.WcfEndPoint);
            IssueFinancials = new List<IssueFinancialTableViewModel>();

            AddButtonCommand = new DelegateCommand<object>(AddButtonHandler, CanExecuteAddButtonHandler);
            DeleteButtonCommand = new DelegateCommand<object>(DeleteButtonHandler, CanExecuteDeleteButtonHandler);
            ShowHideBudgetCommand = new DelegateCommand<object>(ShowHideBudgetHandler, x=> true);
            ShowHideBaselineCommand = new DelegateCommand<object>(ShowHideBaselineHandler, x => true);

            IsBusy = true;
            cmsWebServiceClient.GetIssueFinancialVarianceCodesCompleted += (s1, e1) =>
            {
                IssueFinancialVarianceCodes = e1.Result;
                RaisePropertyChanged("IssueFinancialVarianceCodes");

                cmsWebServiceClient.GetIssueFinancialsCompleted += (s, e) =>
                {
                     mIssue.IssueFinancials = e.Result;

                     DatabaseLoader.GetIssueSettings().ContinueWith(getAccrualCutOfDateTask =>
                     {
                         CMS.UiFactory.StartNew(() =>
                         {
                             mIssueSetting = getAccrualCutOfDateTask.Result;

                             foreach (var issueFinancial in mIssue.IssueFinancials)
                             {
                                 var financialTableItem = new IssueFinancialTableViewModel(issueFinancial, IssueFinancialVarianceCodes, view,
                                     CanUserModifyFinancialData(), mIssueSetting);
                                 mIssueFinancials.Add(financialTableItem);
                             }
                             mIssueFinancials = mIssueFinancials.OrderBy(x => x.Date).ToList();
                             RaisePropertyChanged("IssueFinancials");

                             mDictionary = Utils.BuildDictionaryForCollection(mIssue.IssueFinancials.Select(x => x.Id).ToList());
                             mIssue.ModifiedObjects.FinancialsModified = true;
                             RaisePropertyChanged("TotalForecast");

                             ShowHideBaselineOnLoad();
                             IsBusy = false;
                         });
                     });

                };
                cmsWebServiceClient.GetIssueFinancialsAsync(mIssue.Id);

            };
            cmsWebServiceClient.GetIssueFinancialVarianceCodesAsync();
        }
        private void AddButtonHandler(object parameter)
        {
            if (CanExecuteAddButtonHandler(parameter))
            {
                if (AreAllValid())
                {
                    MonthPicker monthPicker = new MonthPicker(mIssueFinancials.Select(x => x.Date).Distinct().ToList());

                    monthPicker.Closed += (s1, e1) =>
                    {
                        if (monthPicker.DialogResult.HasValue && monthPicker.DialogResult.Value)
                        {
                            IsBusy = true;
                            foreach (var date in monthPicker.Dates)
                            {
                                var issueFinancial = new IssueFinancial {IssueId = mIssue.Id, Date = date.Date, LastModifiedDate = DateTime.Now, LastModifiedUserId = CMS.User.Id};

                                var newIssueFinancialTableViewModel = new IssueFinancialTableViewModel(issueFinancial, IssueFinancialVarianceCodes, mView,
                                    CanUserModifyFinancialData(), mIssueSetting);
                                newIssueFinancialTableViewModel.KpiBaselineReadOnly = mKpiBaselineEnabled;

                                mIssueFinancials.Add(newIssueFinancialTableViewModel);
                                mIssue.IssueFinancials.Add(issueFinancial);
                            }
                            mTimer.Start();
                        }
                    };
                    monthPicker.Show();
                }
            }
        }