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  }