Beispiel #1
0
        /// <summary>
        /// Formats as currency.
        /// </summary>
        /// <param name="input">The input.</param>
        /// <param name="currencyCodeDefinedValueId">The currency code defined value identifier.</param>
        /// <returns></returns>
        public static string FormatAsCurrency(this string input, int?currencyCodeDefinedValueId)
        {
            var exportValueString = input;

            if (exportValueString != null)
            {
                var currencyInfo   = new RockCurrencyCodeInfo(currencyCodeDefinedValueId);
                var currencySymbol = currencyInfo.Symbol;
                var decimalString  = exportValueString;

                // Remove currency symbol if exist.
                if (exportValueString.Contains(currencySymbol))
                {
                    decimalString = exportValueString.Replace(currencySymbol, string.Empty);
                }

                decimal exportValueDecimal;

                // Try to parse the string as decimal
                if (decimal.TryParse(decimalString, out exportValueDecimal))
                {
                    // return the input as a currency formatted string.
                    return(exportValueDecimal.FormatAsCurrency());
                }
            }

            // Otherwise just return the input back out
            return(input);
        }
        /// <summary>
        /// Reverses the currency formatting.
        /// </summary>
        /// <param name="input">The input.</param>
        /// <param name="currencyCodeDefinedValueId">The currency code defined value identifier.</param>
        /// <returns></returns>
        public static object ReverseCurrencyFormatting(this object input, int?currencyCodeDefinedValueId)
        {
            var exportValueString = input as string;

            // If the object is a string...
            if (exportValueString != null)
            {
                var currencyInfo   = new RockCurrencyCodeInfo(currencyCodeDefinedValueId);
                var currencySymbol = currencyInfo.Symbol;

                // ... that contains the currency symbol ...
                if (exportValueString.Contains(currencySymbol))
                {
                    var     decimalString = exportValueString.Replace(currencySymbol, string.Empty);
                    decimal exportValueDecimal;

                    // ... and the value without the currency symbol is a valid decimal value ...
                    if (decimal.TryParse(decimalString, out exportValueDecimal))
                    {
                        // ... that matches the input string when formatted as currency ...
                        if (exportValueDecimal.FormatAsCurrency(currencyCodeDefinedValueId) == exportValueString)
                        {
                            // ... return the input as a decimal
                            return(exportValueDecimal);
                        }
                    }
                }
            }

            // Otherwise just return the input back out
            return(input);
        }
Beispiel #3
0
        /// <summary>
        /// Formats as currency.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <param name="currencyCodeDefinedValueId">The currency code defined value identifier.</param>
        /// <param name="decimalPlaces">The decimal places.</param>
        /// <returns></returns>
        public static string FormatAsCurrency(this decimal value, int?currencyCodeDefinedValueId, int?decimalPlaces)
        {
            var currencyCodeInfo = new RockCurrencyCodeInfo(currencyCodeDefinedValueId);
            var currencyCode     = currencyCodeInfo.IsOrganizationCurrency ? string.Empty : currencyCodeInfo.CurrencyCode;
            var currencySymbol   = HttpUtility.HtmlDecode(currencyCodeInfo.Symbol);

            if (decimalPlaces == null || decimalPlaces > currencyCodeInfo.DecimalPlaces)
            {
                decimalPlaces = currencyCodeInfo.DecimalPlaces;
            }

            if (currencyCodeInfo.SymbolLocation.Equals("left", System.StringComparison.OrdinalIgnoreCase))
            {
                return(string.Format("{2} {0}{1:N" + decimalPlaces.ToString() + "}", currencySymbol, value, currencyCode));
            }

            return(string.Format("{1:N" + decimalPlaces.ToString() + "}{0}{2}", currencySymbol, value, currencyCode));
        }
        /// <summary>
        /// Gets the registration instance discount code report.
        /// </summary>
        /// <param name="registrationInstanceId">The registration instance identifier.</param>
        /// <returns></returns>
        public IEnumerable <TemplateDiscountReport> GetRegistrationInstanceDiscountCodeReport(int registrationInstanceId)
        {
            var currencySymbol = RockCurrencyCodeInfo.GetCurrencySymbol();

            string query = $@"
                WITH
	            cte([RegistrationId], [RegisteredByName], [RegistrationDate], [RegistrantCount], [DiscountCode], [DiscountAmount], [DiscountPercentage], [DiscountType], [TotalCost], [DiscountQualifiedCost])
	            AS
	            (SELECT [Registration].[Id] AS [RegistrationId]
		            , [Registration].[FirstName] + ' ' + [Registration].[LastName] AS [RegisteredByName]
		            , [Registration].[CreatedDateTime] AS [RegistrationDate]
		            , ( SELECT COUNT(*) FROM [RegistrationRegistrant] WHERE [RegistrationId] = [Registration].[Id]) AS [RegistrantCount]
		            , [Registration].[DiscountCode] AS [DiscountCode]
		            , [Registration].[DiscountAmount] AS [DiscountAmount]
		            , [Registration].[DiscountPercentage] * 100 AS [DiscountPercentage]
		            , CASE WHEN [Registration].[DiscountPercentage] > 0 THEN '%' ELSE '$' END AS [DiscountType]
		            , (( SELECT SUM([Cost]) FROM [RegistrationRegistrant] WHERE [RegistrationId] = [Registration].[id])
			            + (COALESCE(
				            (SELECT SUM([RegistrationRegistrantFee].[Cost])
				            FROM [RegistrationRegistrant]
				            LEFT JOIN [RegistrationRegistrantFee] ON [RegistrationRegistrant].[Id] = [RegistrationRegistrantFee].[RegistrationRegistrantId]
				            WHERE [RegistrationId] = [Registration].[id]), 0)
				            )
			            ) AS [TotalCost]
		            , (( SELECT SUM([Cost]) FROM [RegistrationRegistrant] WHERE [RegistrationId] = [Registration].[Id])
			            + (COALESCE(
				            (SELECT SUM([RegistrationRegistrantFee].[Cost])
				            FROM [RegistrationRegistrant]
				            LEFT JOIN [RegistrationRegistrantFee] ON [RegistrationRegistrant].[Id] = [RegistrationRegistrantFee].[RegistrationRegistrantId]
				            JOIN [RegistrationTemplateFee] ON [RegistrationTemplateFee].[Id] = [RegistrationRegistrantFee].[RegistrationTemplateFeeId]
				            WHERE [RegistrationId] = [Registration].[id] AND [RegistrationTemplateFee].[DiscountApplies] = 1)
				            , 0)
				            )
			            ) AS [DiscountQualifiedCost]
	            FROM [Registration]
	            WHERE [Registration].[RegistrationInstanceId] = @registrationInstanceId)

	            , cte2([RegistrationId], [RegisteredByName], [RegistrationDate], [RegistrantCount], [DiscountCode], [DiscountAmount], [DiscountPercentage], [DiscountType], [TotalCost], [DiscountQualifiedCost], [TotalDiscount])
	            AS
	            (SELECT [RegistrationId], [RegisteredByName], [RegistrationDate], [RegistrantCount], [DiscountCode], [DiscountAmount], [DiscountPercentage], [DiscountType], [TotalCost], [DiscountQualifiedCost]
		            , CASE WHEN [DiscountPercentage] > 0 THEN [DiscountQualifiedCost] * ([DiscountPercentage]/100)
			            ELSE ([RegistrantCount] * [DiscountAmount])
			            END AS [TotalDiscount]
	            FROM cte)

            SELECT [RegistrationId]
                , [RegisteredByName]
                , [RegistrationDate]
                , [RegistrantCount]
                , [DiscountCode]
                , [DiscountAmount]
                , [DiscountPercentage]
	            , CASE WHEN DiscountAmount > 0 THEN '{currencySymbol}' + CAST(DiscountAmount AS varchar) ELSE CAST(DiscountPercentage AS varchar) + '%' END AS [Discount]
	            , [DiscountType]
                , [TotalCost]
                , [DiscountQualifiedCost]
                , [TotalDiscount]
                , ([TotalCost] - [TotalDiscount]) AS [RegistrationCost]
            FROM cte2
            WHERE [TotalDiscount] > 0";

            var param = new System.Data.SqlClient.SqlParameter("@RegistrationInstanceId", registrationInstanceId);

            return(Context.Database.SqlQuery <TemplateDiscountReport>(query, param));
        }
        /// <summary>
        /// Method that will be called on an entity immediately before the item is saved by context
        /// </summary>
        /// <param name="dbContext">The database context.</param>
        /// <param name="entry">The database entity entry.</param>
        public override void PreSaveChanges(Rock.Data.DbContext dbContext, DbEntityEntry entry)
        {
            var rockContext = (RockContext)dbContext;

            HistoryChangeList = new History.HistoryChangeList();

            switch (entry.State)
            {
            case EntityState.Added:
            {
                HistoryChangeList.AddChange(History.HistoryVerb.Add, History.HistoryChangeType.Record, "Transaction");

                string person = History.GetValue <PersonAlias>(AuthorizedPersonAlias, AuthorizedPersonAliasId, rockContext);

                History.EvaluateChange(HistoryChangeList, "Authorized Person", string.Empty, person);
                History.EvaluateChange(HistoryChangeList, "Gateway", string.Empty, History.GetValue <FinancialGateway>(FinancialGateway, FinancialGatewayId, rockContext));
                History.EvaluateChange(HistoryChangeList, "Gateway Schedule Id", string.Empty, GatewayScheduleId);
                History.EvaluateChange(HistoryChangeList, "Transaction Code", string.Empty, TransactionCode);
                History.EvaluateChange(HistoryChangeList, "Summary", string.Empty, Summary);
                History.EvaluateChange(HistoryChangeList, "Type", (null as int?), TransactionTypeValue, TransactionTypeValueId);
                History.EvaluateChange(HistoryChangeList, "Source", (null as int?), SourceTypeValue, SourceTypeValueId);
                History.EvaluateChange(HistoryChangeList, "Frequency", (null as int?), TransactionFrequencyValue, TransactionFrequencyValueId);
                History.EvaluateChange(HistoryChangeList, "Start Date", (null as DateTime? ), StartDate);
                History.EvaluateChange(HistoryChangeList, "End Date", (null as DateTime? ), EndDate);
                History.EvaluateChange(HistoryChangeList, "Number of Payments", (null as int?), NumberOfPayments);
                History.EvaluateChange(HistoryChangeList, "Is Active", (null as bool?), IsActive);
                History.EvaluateChange(HistoryChangeList, "Card Reminder Date", (null as DateTime? ), CardReminderDate);
                History.EvaluateChange(HistoryChangeList, "Last Reminded Date", (null as DateTime? ), LastRemindedDate);
                var isOrganizationCurrency = new RockCurrencyCodeInfo(ForeignCurrencyCodeValueId).IsOrganizationCurrency;
                if (!isOrganizationCurrency)
                {
                    History.EvaluateChange(HistoryChangeList, "Currency Code", (null as int?), ForeignCurrencyCodeValue, ForeignCurrencyCodeValueId);
                }

                break;
            }

            case EntityState.Modified:
            {
                string origPerson = History.GetValue <PersonAlias>(null, entry.OriginalValues["AuthorizedPersonAliasId"].ToStringSafe().AsIntegerOrNull(), rockContext);
                string person     = History.GetValue <PersonAlias>(AuthorizedPersonAlias, AuthorizedPersonAliasId, rockContext);
                History.EvaluateChange(HistoryChangeList, "Authorized Person", origPerson, person);

                int?origGatewayId = entry.OriginalValues["FinancialGatewayId"].ToStringSafe().AsIntegerOrNull();
                if (!FinancialGatewayId.Equals(origGatewayId))
                {
                    History.EvaluateChange(HistoryChangeList, "Gateway", History.GetValue <FinancialGateway>(null, origGatewayId, rockContext), History.GetValue <FinancialGateway>(FinancialGateway, FinancialGatewayId, rockContext));
                }

                History.EvaluateChange(HistoryChangeList, "Gateway Schedule Id", entry.OriginalValues["GatewayScheduleId"].ToStringSafe(), GatewayScheduleId);
                History.EvaluateChange(HistoryChangeList, "Transaction Code", entry.OriginalValues["TransactionCode"].ToStringSafe(), TransactionCode);
                History.EvaluateChange(HistoryChangeList, "Summary", entry.OriginalValues["Summary"].ToStringSafe(), Summary);
                History.EvaluateChange(HistoryChangeList, "Type", entry.OriginalValues["TransactionTypeValueId"].ToStringSafe().AsIntegerOrNull(), TransactionTypeValue, TransactionTypeValueId);
                History.EvaluateChange(HistoryChangeList, "Source", entry.OriginalValues["SourceTypeValueId"].ToStringSafe().AsIntegerOrNull(), SourceTypeValue, SourceTypeValueId);
                History.EvaluateChange(HistoryChangeList, "Frequency", entry.OriginalValues["TransactionFrequencyValueId"].ToStringSafe().AsIntegerOrNull(), TransactionFrequencyValue, TransactionFrequencyValueId);
                History.EvaluateChange(HistoryChangeList, "Start Date", entry.OriginalValues["StartDate"].ToStringSafe().AsDateTime(), StartDate);
                History.EvaluateChange(HistoryChangeList, "End Date", entry.OriginalValues["EndDate"].ToStringSafe().AsDateTime(), EndDate);
                History.EvaluateChange(HistoryChangeList, "Number of Payments", entry.OriginalValues["EndDate"].ToStringSafe().AsIntegerOrNull(), NumberOfPayments);
                History.EvaluateChange(HistoryChangeList, "Is Active", entry.OriginalValues["IsActive"].ToStringSafe().AsBooleanOrNull(), IsActive);
                History.EvaluateChange(HistoryChangeList, "Card Reminder Date", entry.OriginalValues["CardReminderDate"].ToStringSafe().AsDateTime(), CardReminderDate);
                History.EvaluateChange(HistoryChangeList, "Last Reminded Date", entry.OriginalValues["LastRemindedDate"].ToStringSafe().AsDateTime(), LastRemindedDate);
                History.EvaluateChange(HistoryChangeList, "Currency Code", entry.OriginalValues["ForeignCurrencyCodeValueId"].ToStringSafe().AsIntegerOrNull(), ForeignCurrencyCodeValue, ForeignCurrencyCodeValueId);

                break;
            }

            case EntityState.Deleted:
            {
                HistoryChangeList.AddChange(History.HistoryVerb.Delete, History.HistoryChangeType.Record, "Transaction");

                // If a FinancialPaymentDetail was linked to this FinancialScheduledTransaction and is now orphaned, delete it.
                var financialPaymentDetailService = new FinancialPaymentDetailService(rockContext);
                financialPaymentDetailService.DeleteOrphanedFinancialPaymentDetail(entry);

                break;
            }
            }

            base.PreSaveChanges(dbContext, entry);
        }