Umbraco.Commerce.Issues icon indicating copy to clipboard operation
Umbraco.Commerce.Issues copied to clipboard

[Edgecase] Changing a gift card code can throw an error

Open Migaroez opened this issue 4 years ago • 0 comments

Describe the bug Changing the code of a gift card while an order in progress has that code redeemed, gives an error when adding another (same) valid gift card

Steps To Reproduce Steps to reproduce the behavior:

  • Add an active gift card to the backend
  • Create an order
  • Redeem the giftcard
  • Change the code of the gift card in the backend
  • Redeem the new giftcard => saving the order will throw the below error

Screenshots image image

Additional context

Stacktrace: [NullReferenceException: Object reference not set to an instance of an object.]
   Vendr.Core.Pipelines.Order.Tasks.CalculateOrderGiftCardAmountsTask.Execute(OrderCalculationPipelineArgs args) +831
   Vendr.Core.Pipelines.PipelineTaskWithTypedArgsBase`2.Execute(PipelineArgs`1 args) +103
   Vendr.Core.Pipelines.PipelineTaskBase`2.Execute(PipelineArgs input) +198
   Vendr.Core.Pipelines.InProcPipelineInvoker.<Vendr.Core.Pipelines.IPipelineInvoker.Invoke>g__next|2_0(PipelineArgs e, <>c__DisplayClass2_0& ) +91
   Vendr.Core.Pipelines.InProcPipelineInvoker.Vendr.Core.Pipelines.IPipelineInvoker.Invoke(IEnumerable`1 pipelineTasks, PipelineArgs args) +152
   Vendr.Core.Pipelines.Pipeline.Invoke(Func`2 argsFactory) +267
   Vendr.Core.Pipelines.SubPipelineTaskBase`2.Execute(PipelineArgs`1 input) +399
   Vendr.Core.Pipelines.PipelineTaskBase`2.Execute(PipelineArgs input) +198
   Vendr.Core.Pipelines.InProcPipelineInvoker.<Vendr.Core.Pipelines.IPipelineInvoker.Invoke>g__next|2_0(PipelineArgs e, <>c__DisplayClass2_0& ) +91
   Vendr.Core.Pipelines.InProcPipelineInvoker.<Vendr.Core.Pipelines.IPipelineInvoker.Invoke>g__next|2_0(PipelineArgs e, <>c__DisplayClass2_0& ) +161
   Vendr.Core.Pipelines.InProcPipelineInvoker.<Vendr.Core.Pipelines.IPipelineInvoker.Invoke>g__next|2_0(PipelineArgs e, <>c__DisplayClass2_0& ) +161
   Vendr.Core.Pipelines.InProcPipelineInvoker.<Vendr.Core.Pipelines.IPipelineInvoker.Invoke>g__next|2_0(PipelineArgs e, <>c__DisplayClass2_0& ) +161
   Vendr.Core.Pipelines.InProcPipelineInvoker.<Vendr.Core.Pipelines.IPipelineInvoker.Invoke>g__next|2_0(PipelineArgs e, <>c__DisplayClass2_0& ) +161
   Vendr.Core.Pipelines.InProcPipelineInvoker.<Vendr.Core.Pipelines.IPipelineInvoker.Invoke>g__next|2_0(PipelineArgs e, <>c__DisplayClass2_0& ) +161
   Vendr.Core.Pipelines.InProcPipelineInvoker.Vendr.Core.Pipelines.IPipelineInvoker.Invoke(IEnumerable`1 pipelineTasks, PipelineArgs args) +152
   Vendr.Core.Pipelines.Pipeline.Invoke(Func`2 argsFactory) +267
   Vendr.Core.Calculators.OrderCalculator.CalculateOrder(OrderReadOnly order) +225
   Vendr.Core.Models.Order.Recalculate(Boolean force, IOrderCalculator orderCalculator) +100
   Vendr.Core.Models.Order.Recalculate(IOrderCalculator orderCalculator) +44
   Vendr.Core.OrderExtensions.Recalculate(Order order) +66
   Vendr.Core.Services.OrderService.SaveOrder(Order entity) +484
   Vendr.Core.Api.CoreVendrApi.SaveOrder(Order entity) +75
   Secutec.Shop.Core.SurfaceControllers.CheckoutSurfaceController.ProcessCoupon(CheckoutDto submitModel) in C:\repos\Secutec.Shop\Secutec.Shop.Core\SurfaceControllers\CheckoutSurfaceController.cs:63
   Secutec.Shop.Core.SurfaceControllers.CheckoutSurfaceController.ProcessCheckout(CheckoutDto submitModel, String couponSubmit) in C:\repos\Secutec.Shop\Secutec.Shop.Core\SurfaceControllers\CheckoutSurfaceController.cs:33
   lambda_method(Closure , ControllerBase , Object[] ) +147
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +157
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.Async.<>c.<BeginInvokeSynchronousActionMethod>b__9_0(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32
   System.Web.Mvc.Async.<>c__DisplayClass11_0.<InvokeActionMethodFilterAsynchronouslyRecursive>b__0() +58
   System.Web.Mvc.Async.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2() +228
   System.Web.Mvc.Async.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2() +228
   System.Web.Mvc.Async.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2() +228
   System.Web.Mvc.Async.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2() +228
   System.Web.Mvc.Async.<>c__DisplayClass7_0.<BeginInvokeActionMethodWithFilters>b__1(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34
   System.Web.Mvc.Async.<>c__DisplayClass3_6.<BeginInvokeAction>b__4() +35
   System.Web.Mvc.Async.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult) +100
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
   System.Web.Mvc.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState) +11
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +45
   System.Web.Mvc.<>c.<BeginExecute>b__151_2(IAsyncResult asyncResult, Controller controller) +13
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState) +28
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +577
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +132
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +163

Versions: Vendr: 1.2.5 Umbraco: 8.2.0

Migaroez avatar Jul 02 '20 14:07 Migaroez