flamingo.me/flamingo-commerce/v3@v3.11.0/cart/interfaces/templatefunctions/getItemAdjustment.go (about) 1 package templatefunctions 2 3 import ( 4 "context" 5 6 "go.opencensus.io/trace" 7 8 "flamingo.me/flamingo-commerce/v3/cart/application" 9 "flamingo.me/flamingo/v3/framework/web" 10 11 "flamingo.me/flamingo-commerce/v3/cart/domain/cart" 12 ) 13 14 type ( 15 // GetQuantityAdjustmentDeletedItemsMessages is exported as a template function 16 GetQuantityAdjustmentDeletedItemsMessages struct{} 17 18 // GetQuantityAdjustmentUpdatedItemsMessage is exported as a template function 19 GetQuantityAdjustmentUpdatedItemsMessage struct{} 20 21 // GetQuantityAdjustmentCouponCodesRemoved is exported as a template function 22 GetQuantityAdjustmentCouponCodesRemoved struct{} 23 24 // RemoveQuantityAdjustmentMessages is exported as a template function 25 RemoveQuantityAdjustmentMessages struct{} 26 27 // QuantityAdjustment is returned by the template function 28 QuantityAdjustment struct { 29 Item cart.Item 30 DeliveryCode string 31 PrevQty int 32 CurrQty int 33 Reason string 34 } 35 ) 36 37 // Func defines the GetQuantityAdjustmentDeletedItemsMessages template function 38 func (gdm *GetQuantityAdjustmentDeletedItemsMessages) Func(ctx context.Context) interface{} { 39 return func() []QuantityAdjustment { 40 ctx, span := trace.StartSpan(ctx, "cart/GetQuantityAdjustmentDeletedItemsMessages/Func") 41 defer span.End() 42 43 session := web.SessionFromContext(ctx) 44 45 deletedAdjustments := make([]QuantityAdjustment, 0) 46 47 if sessionAdjustments, found := session.Load("cart.view.quantity.adjustments"); found { 48 if adjustments, ok := sessionAdjustments.(application.QtyAdjustmentResults); ok { 49 for _, a := range adjustments { 50 if a.WasDeleted { 51 deletedAdjustments = append(deletedAdjustments, QuantityAdjustment{ 52 Item: a.OriginalItem, 53 DeliveryCode: a.DeliveryCode, 54 PrevQty: a.NewQty - a.RestrictionResult.RemainingDifference, 55 CurrQty: a.NewQty, 56 Reason: a.RestrictionResult.RestrictorName, 57 }) 58 } 59 } 60 } 61 } 62 63 return deletedAdjustments 64 } 65 } 66 67 // Func defines the GetQuantityAdjustmentUpdatedItemsMessage template function 68 func (gum *GetQuantityAdjustmentUpdatedItemsMessage) Func(ctx context.Context) interface{} { 69 return func(item cart.Item, deliveryCode string) QuantityAdjustment { 70 ctx, span := trace.StartSpan(ctx, "cart/GetQuantityAdjustmentUpdatedItemsMessage/Func") 71 defer span.End() 72 73 session := web.SessionFromContext(ctx) 74 75 if sessionAdjustments, found := session.Load("cart.view.quantity.adjustments"); found { 76 if adjustments, ok := sessionAdjustments.(application.QtyAdjustmentResults); ok { 77 for _, a := range adjustments { 78 if a.OriginalItem.ID == item.ID && a.DeliveryCode == deliveryCode { 79 return QuantityAdjustment{ 80 Item: a.OriginalItem, 81 DeliveryCode: a.DeliveryCode, 82 PrevQty: a.NewQty - a.RestrictionResult.RemainingDifference, 83 CurrQty: a.NewQty, 84 Reason: a.RestrictionResult.RestrictorName, 85 } 86 } 87 } 88 } 89 } 90 91 return QuantityAdjustment{ 92 Item: item, 93 DeliveryCode: deliveryCode, 94 PrevQty: item.Qty, 95 CurrQty: item.Qty, 96 } 97 } 98 } 99 100 // Func defines the GetQuantityAdjustmentCouponCodesRemoved template function 101 func (gcd *GetQuantityAdjustmentCouponCodesRemoved) Func(ctx context.Context) interface{} { 102 return func() bool { 103 ctx, span := trace.StartSpan(ctx, "cart/GetQuantityAdjustmentCouponCodesRemoved/Func") 104 defer span.End() 105 106 session := web.SessionFromContext(ctx) 107 108 if sessionAdjustments, found := session.Load("cart.view.quantity.adjustments"); found { 109 if adjustments, ok := sessionAdjustments.(application.QtyAdjustmentResults); ok { 110 return adjustments.HasRemovedCouponCodes() 111 } 112 } 113 114 return false 115 } 116 } 117 118 // Func defines the RemoveQuantityAdjustmentMessages template function 119 func (rm *RemoveQuantityAdjustmentMessages) Func(ctx context.Context) interface{} { 120 return func() bool { 121 ctx, span := trace.StartSpan(ctx, "cart/RemoveQuantityAdjustmentMessages/Func") 122 defer span.End() 123 124 session := web.SessionFromContext(ctx) 125 126 session.Delete("cart.view.quantity.adjustments") 127 128 return true 129 } 130 }