nopCommerce 4.50.0 RC is available!

1 month ago
Dear nopCommerce community!

The official release of nopCommerce 4.50.0 will take place in two weeks. Before that, we invite everyone to join testing of nopCommerce 4.50.0 Release Candidate (RC), share the feedback and suggestions. We’re incredibly grateful to all the users who have been trying out the BETA version of nopCommerce 4.50.0 and have been giving us feedback every step of the way.

We've migrated nopCommerce to .NET 6 (the latest available version of .NET platform). No
other major features have been introduced with this release as our development efforts were
focused on architecture improvements, source code refactoring, further enhancements and fixing
bugs.  Please find release notes here and all closed work items here.

Download. In order to download nopCommerce 4.50 RC please use the following links:
RC 4.50 - Source code (download this package with source code if you are a web developer planning to customize nopCommerce.)
RC 4.50 - No source code (download this package if you want to quickly deploy your site to a web server.)

Requirements. Please note that nopCommerce 4.50 requires Visual Studio 2022 (17.0.0) or above, .NET 6 SDK
(6.0.100) (download), and ASP.NET Core Runtime (v6.0.0) - Windows Hosting Bundle
P.S. You can download .NET 6 SDK and ASP.NET Core Runtime 6.0.0 for other operating systems (e.g. Linux, macOS, Windows) and families of processors (e.g. Arm64, x64. x86) here.

Upgrade instructions. If you're upgrading nopCommerce to version 4.50 from one of the previous versions, please
ensure that your connection string contains one of the following parameters: "Encrypt=false" or
"TrustServerCertificate=True" (depending on your server requirements). You can manually add
these parameters to your connection string in the \App_Data\appsettings.json file. This step is
caused by the "Microsoft.Data.SqlClient" library that changed the default value of the "Encrypt"
option from "false" to "true".
4 weeks ago
Great :-)

BUT something happened with the regional settings.
Danish language uses ,(comma) as decimal seperator and if I select danish language and enters the products in admin i see wrong prices, weight and measures. They are multiplied with 10000.
That has never been an issue before.
Example price with Danish 12000000,00 DKK but with UK it´s correct 1200.00DKK.
Only in admin the display is wrong in storefront it always shows 1200 DKK no matter DA/UK.

If i change my regional setting on computer from , to . then it works fine. But somehow there is a problem as this is not right.
4 weeks ago
TCH wrote:
Danish language uses ,(comma) as decimal separator...

Hi Tommy! Thanks a lot! We'll check it soon -
4 weeks ago
Sounds good..
4 weeks ago
Congratulations Teams!
4 weeks ago
Hello team very congratulation there is lacs in discount module this module should not require any new discount rule.
we have to work on it together i don't know how can merge with you to enhancing features.
4 weeks ago
[email protected] wrote:
... there is lacs in discount module...

"lacs"??  Please post a new topic and clarify your question / concern.
3 weeks ago
What are the file permissions needed for Windows server. I am not able to have it start ! i have tried everything as 4.40. lol
3 weeks ago
gonze1 wrote:
What are the file permissions needed for Windows server. I am not able to have it start ! i have tried everything as 4.40. lol

I got it to work, i was missing some files from the zip extract
3 weeks ago
Here is my little contribution - when you have done the search and replace "Void" with "async Task" the order notes and some comments are now not correct - it is also the same in v4.40 :)

        /// <summary>
        /// async Tasks order (from admin panel)
        /// </summary>
        /// <param name="order">Order</param>
        /// <returns>
        /// A task that represents the asynchronous operation
        /// The task result contains the async Tasked order
        /// </returns>
        public virtual async Task<IList<string>> VoidAsync(Order order)
            if (order == null)
                throw new ArgumentNullException(nameof(order));

            if (!await CanVoidAsync(order))
                throw new NopException("Cannot do async Task for order.");

            var request = new VoidPaymentRequest();
            VoidPaymentResult result = null;
                request.Order = order;
                result = await _paymentService.VoidAsync(request);

                if (result.Success)
                    //update order info
                    order.PaymentStatus = result.NewPaymentStatus;
                    await _orderService.UpdateOrderAsync(order);

                    //add a note
                    await AddOrderNoteAsync(order, "Order has been async Tasked");

                    //check order status
                    await CheckOrderStatusAsync(order);

                    //raise event      
                    await _eventPublisher.PublishAsync(new OrderVoidedEvent(order));
            catch (Exception exc)
                if (result == null)
                    result = new VoidPaymentResult();
                result.AddError($"Error: {exc.Message}. Full exception: {exc}");

            //process errors
            var error = string.Empty;
            for (var i = 0; i < result.Errors.Count; i++)
                error += $"Error {i}: {result.Errors[i]}";
                if (i != result.Errors.Count - 1)
                    error += ". ";

            if (string.IsNullOrEmpty(error))
                return result.Errors;

            //add a note
            await AddOrderNoteAsync(order, $"Unable to async Tasking order. {error}");

            //log it
            var logError = $"Error async Tasking order #{order.Id}. Error: {error}";
            await _logger.InsertLogAsync(LogLevel.Error, logError, logError);
            return result.Errors;

Also need to change in public virtual async Task VoidOfflineAsync(Order order)

Also in this comment
        /// <summary>
        /// Handle order async Tasked event
        /// </summary>
        /// <param name="eventMessage">Event message</param>
        /// <returns>A task that represents the asynchronous operation</returns>
        public async Task HandleEventAsync(OrderVoidedEvent eventMessage)

Actually do a global search for "async Tasked" and that will reveal a few little other fixes required