/// <summary>
        /// Adds the edit report settings.
        /// </summary>
        /// <param name="selectedSettings">The selected settings.</param>
        private void AddEditReportSettings(FinancialStatementReportConfiguration selectedSettings)
        {
            ReportConfigurationModalWindow reportSettingsModalWindow = new ReportConfigurationModalWindow(selectedSettings);

            reportSettingsModalWindow.Owner = Window.GetWindow(this);
            var showDialogResult = reportSettingsModalWindow.ShowDialog();

            if (showDialogResult == true)
            {
                FinancialStatementReportConfiguration updatedSettings = reportSettingsModalWindow.GetFinancialStatementReportConfiguration();
                ReportOptions.Current.ReportConfigurationList = ReportOptions.Current.ReportConfigurationList ?? new List <FinancialStatementReportConfiguration>();
                var settingsToUpdate = ReportOptions.Current.ReportConfigurationList.FirstOrDefault(a => a.Guid == updatedSettings.Guid);
                if (settingsToUpdate != null)
                {
                    // replace the settings with the new ones
                    ReportOptions.Current.ReportConfigurationList.Remove(settingsToUpdate);
                }

                ReportOptions.Current.ReportConfigurationList.Add(updatedSettings);

                var rockConfig = RockConfig.Load();
                rockConfig.ReportConfigurationListJson = ReportOptions.Current.ReportConfigurationList.ToJson();
                rockConfig.Save();

                BindGrid();
            }
        }
        /// <summary>
        /// Binds the grid.
        /// </summary>
        private void BindGrid()
        {
            var rockConfig = RockConfig.Load();

            List <FinancialStatementReportConfiguration> reportConfigurationList = null;

            try
            {
                if (rockConfig.ReportConfigurationListJson.IsNotNullOrWhiteSpace())
                {
                    reportConfigurationList = rockConfig.ReportConfigurationListJson.FromJsonOrNull <List <FinancialStatementReportConfiguration> >();
                }
            }
            catch
            {
                // ignore
            }

            if (reportConfigurationList == null)
            {
                // if this is the first time the generator has run, create a default.
                // If they delete this default, that is OK. See https://app.asana.com/0/0/1200266899611805/f
                reportConfigurationList = new List <FinancialStatementReportConfiguration>();
                var defaultConfiguration = new FinancialStatementReportConfiguration
                {
                    DestinationFolder             = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Statements"),
                    ExcludeOptedOutIndividuals    = true,
                    FilenamePrefix                = "statement-",
                    IncludeInternationalAddresses = false,
                    MaxStatementsPerChapter       = 500,
                    MinimumContributionAmount     = 1.00M,
                    PreventSplittingPrimarySortValuesAcrossChapters = true,
                    PrimarySortOrder             = Client.Enums.FinancialStatementOrderBy.PostalCode,
                    SecondarySortOrder           = Client.Enums.FinancialStatementOrderBy.LastName,
                    SplitFilesOnPrimarySortValue = true,
                    CreatedDateTime = DateTime.Now,
                    Guid            = Guid.NewGuid()
                };

                reportConfigurationList.Add(defaultConfiguration);
                rockConfig.ReportConfigurationListJson = reportConfigurationList.ToJson();
                rockConfig.Save();
            }

            ReportOptions.Current.ReportConfigurationList = reportConfigurationList;

            grdReportSettings.DataContext = reportConfigurationList.OrderBy(a => a.CreatedDateTime);
        }
 /// <summary>
 /// Copies the base properties from a source FinancialStatementReportConfiguration object
 /// </summary>
 /// <param name="source">The source.</param>
 public void CopyPropertiesFrom(FinancialStatementReportConfiguration source)
 {
     this.DestinationFolder          = source.DestinationFolder;
     this.ExcludeOptedOutIndividuals = source.ExcludeOptedOutIndividuals;
     this.ExcludeRecipientsThatHaveAnIncompleteAddress = source.ExcludeRecipientsThatHaveAnIncompleteAddress;
     this.FilenamePrefix = source.FilenamePrefix;
     this.IncludeInternationalAddresses = source.IncludeInternationalAddresses;
     this.MaxStatementsPerChapter       = source.MaxStatementsPerChapter;
     this.MinimumContributionAmount     = source.MinimumContributionAmount;
     this.PreventSplittingPrimarySortValuesAcrossChapters = source.PreventSplittingPrimarySortValuesAcrossChapters;
     this.PrimarySortOrder             = source.PrimarySortOrder;
     this.SecondarySortOrder           = source.SecondarySortOrder;
     this.SplitFilesOnPrimarySortValue = source.SplitFilesOnPrimarySortValue;
     this.CreatedDateTime = source.CreatedDateTime;
     this.Guid            = source.Guid;
 }
Example #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ReportConfigurationModalWindow" /> class.
        /// </summary>
        /// <param name="financialStatementReportConfiguration">The financial statement report configuration.</param>
        public ReportConfigurationModalWindow(FinancialStatementReportConfiguration financialStatementReportConfiguration)
        {
            InitializeComponent();

            if (financialStatementReportConfiguration == null)
            {
                lblActionTitle.Content = "Add Report";
                financialStatementReportConfiguration = new FinancialStatementReportConfiguration();
                financialStatementReportConfiguration.CreatedDateTime = DateTime.Now;
                financialStatementReportConfiguration.Guid            = Guid.NewGuid();
            }
            else
            {
                lblActionTitle.Content = "Edit Report";
            }

            cboPrimarySort.Items.Clear();
            var orderByOptions = Enum.GetValues(typeof(FinancialStatementOrderBy)).OfType <FinancialStatementOrderBy>();

            foreach (var orderByOption in orderByOptions)
            {
                var primarySortItem = new ComboBoxItem {
                    Content = orderByOption.ConvertToString(true), Tag = orderByOption
                };
                primarySortItem.IsSelected = financialStatementReportConfiguration.PrimarySortOrder == orderByOption;
                cboPrimarySort.Items.Add(primarySortItem);

                var secondarySortItem = new ComboBoxItem {
                    Content = orderByOption.ConvertToString(true), Tag = orderByOption
                };
                secondarySortItem.IsSelected = financialStatementReportConfiguration.SecondarySortOrder == orderByOption;
                cboSecondarySort.Items.Add(secondarySortItem);
            }

            tbDestinationFolder.Text = financialStatementReportConfiguration.DestinationFolder;
            tbFilenamePrefix.Text    = financialStatementReportConfiguration.FilenamePrefix;
            cbSplitFilesOnPrimarySortValue.IsChecked = financialStatementReportConfiguration.SplitFilesOnPrimarySortValue;
            tbMaxStatementsInChapter.Text            = financialStatementReportConfiguration.MaxStatementsPerChapter.ToString();
            cbPreventSplittingPrimarySortValuesAcrossChapters.IsChecked = financialStatementReportConfiguration.PreventSplittingPrimarySortValuesAcrossChapters;
            tbMinimumContributionAmount.Text            = financialStatementReportConfiguration.MinimumContributionAmount.ToString();
            cbIncludeInternationalAddresses.IsChecked   = financialStatementReportConfiguration.IncludeInternationalAddresses;
            cbDoNotIncludeIncompleteAddresses.IsChecked = financialStatementReportConfiguration.ExcludeRecipientsThatHaveAnIncompleteAddress;
            cbDoNotIncludeStatementsForThoseWhoHaveOptedOut.IsChecked = financialStatementReportConfiguration.ExcludeOptedOutIndividuals;

            FinancialStatementReportConfigurationCreateDateTime = financialStatementReportConfiguration.CreatedDateTime;
            FinancialStatementReportConfigurationGuid           = financialStatementReportConfiguration.Guid;
        }
Example #5
0
        /// <summary>
        /// Gets the financial statement report configuration.
        /// </summary>
        /// <returns></returns>
        public FinancialStatementReportConfiguration GetFinancialStatementReportConfiguration()
        {
            FinancialStatementReportConfiguration financialStatementReportConfiguration = new FinancialStatementReportConfiguration();

            financialStatementReportConfiguration.PrimarySortOrder             = ( FinancialStatementOrderBy? )(cboPrimarySort.SelectedValue as ComboBoxItem).Tag ?? FinancialStatementOrderBy.PostalCode;
            financialStatementReportConfiguration.SecondarySortOrder           = ( FinancialStatementOrderBy? )(cboSecondarySort.SelectedValue as ComboBoxItem).Tag ?? FinancialStatementOrderBy.LastName;
            financialStatementReportConfiguration.DestinationFolder            = tbDestinationFolder.Text;
            financialStatementReportConfiguration.FilenamePrefix               = tbFilenamePrefix.Text;
            financialStatementReportConfiguration.SplitFilesOnPrimarySortValue = cbSplitFilesOnPrimarySortValue.IsChecked ?? false;
            financialStatementReportConfiguration.MaxStatementsPerChapter      = tbMaxStatementsInChapter.Text.AsIntegerOrNull();
            financialStatementReportConfiguration.PreventSplittingPrimarySortValuesAcrossChapters = cbPreventSplittingPrimarySortValuesAcrossChapters.IsChecked ?? true;
            financialStatementReportConfiguration.MinimumContributionAmount     = tbMinimumContributionAmount.Text.AsDecimalOrNull();
            financialStatementReportConfiguration.IncludeInternationalAddresses = cbIncludeInternationalAddresses.IsChecked ?? true;
            financialStatementReportConfiguration.ExcludeOptedOutIndividuals    = cbDoNotIncludeStatementsForThoseWhoHaveOptedOut.IsChecked ?? true;
            financialStatementReportConfiguration.CreatedDateTime = FinancialStatementReportConfigurationCreateDateTime ?? DateTime.Now;
            financialStatementReportConfiguration.Guid            = FinancialStatementReportConfigurationGuid;

            return(financialStatementReportConfiguration);
        }
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ReportPaperStatementsSummary"/> class.
        /// </summary>
        /// <param name="completedRecipients">The completed recipients.</param>
        /// <param name="financialStatementReportConfiguration">The financial statement report configuration.</param>
        public ReportPaperStatementsSummary(List <FinancialStatementGeneratorRecipient> completedRecipients, FinancialStatementReportConfiguration financialStatementReportConfiguration)
        {
            PrimarySortName = financialStatementReportConfiguration.PrimarySortOrder.ConvertToString(true);

            var includedRecipients = completedRecipients.ToList();

            if (financialStatementReportConfiguration.MinimumContributionAmount.HasValue)
            {
                var excludedRecipients = includedRecipients.Where(a => a.ContributionTotal < financialStatementReportConfiguration.MinimumContributionAmount.Value);
                StatementsExcludedMinAmountSummary = $"{excludedRecipients.Count()} | {excludedRecipients.Sum( x => x.ContributionTotal ?? 0.00M ).ToString( "C" ) }";

                includedRecipients                    = includedRecipients.Where(a => a.ContributionTotal >= financialStatementReportConfiguration.MinimumContributionAmount.Value).ToList();
                StatementsExcludedMinAmount           = financialStatementReportConfiguration.MinimumContributionAmount;
                StatementsExcludedMinAmountVisibility = Visibility.Visible;
            }

            if (financialStatementReportConfiguration.IncludeInternationalAddresses == false)
            {
                var excludedRecipients = includedRecipients.Where(a => a.IsInternationalAddress != false);
                StatementsExcludedInternationalSummary = $"{excludedRecipients.Count()} | {excludedRecipients.Sum( x => x.ContributionTotal ?? 0.00M ).ToString( "C" ) }";

                includedRecipients = includedRecipients.Where(a => a.IsInternationalAddress == false).ToList();
                StatementsExcludedInternationalVisibility = Visibility.Visible;
            }

            if (financialStatementReportConfiguration.ExcludeRecipientsThatHaveAnIncompleteAddress)
            {
                var excludedRecipients = includedRecipients.Where(a => a.HasValidMailingAddress == false);
                StatementsExcludedIncompleteAddressSummary = $"{excludedRecipients.Count()} | {excludedRecipients.Sum( x => x.ContributionTotal ?? 0.00M ).ToString( "C" ) }";

                includedRecipients = includedRecipients.Where(a => a.HasValidMailingAddress == true).ToList();
                StatementsExcludedIncompleteAddressVisibility = Visibility.Visible;
            }

            if (financialStatementReportConfiguration.ExcludeOptedOutIndividuals)
            {
                var excludedRecipients = includedRecipients.Where(a => a.OptedOut != false);
                StatementExcludedOptedOutSummary     = $"{excludedRecipients.Count()} | {excludedRecipients.Sum( x => x.ContributionTotal ?? 0.00M ).ToString( "C" ) }";
                StatementsExcludedOptedOutVisibility = Visibility.Visible;
                includedRecipients = includedRecipients.Where(a => a.OptedOut == false).ToList();
            }

            NumberOfStatements = includedRecipients.Count();
            TotalAmount        = includedRecipients.Sum(a => a.ContributionTotal ?? 0.00M);
        }