private Dictionary <LineItemStatus, int> BuildNewLineItemStatusByQuantity(LineItemStatusChange lineItemStatusChange, HSLineItem existingLineItem, LineItemStatus newLineItemStatus) { Dictionary <LineItemStatus, int> statusDictionary = existingLineItem.xp.StatusByQuantity; var quantitySetting = lineItemStatusChange.Quantity; // increment statusDictionary[newLineItemStatus] += quantitySetting; var validPreviousStates = LineItemStatusConstants.ValidPreviousStateLineItemChangeMap[newLineItemStatus]; // decrement foreach (LineItemStatus status in validPreviousStates) { if (statusDictionary[status] != 0) { if (statusDictionary[status] <= quantitySetting) { quantitySetting -= statusDictionary[status]; statusDictionary[status] = 0; } else { statusDictionary[status] -= quantitySetting; quantitySetting = 0; } } } return(statusDictionary); }
public static LineItemProductData MapToTemplateProduct(HSLineItem lineItem, LineItemStatusChange lineItemStatusChange, LineItemStatus status) { decimal lineTotal = 0M; if (status == LineItemStatus.ReturnDenied || status == LineItemStatus.CancelDenied && lineItemStatusChange.QuantityRequestedForRefund != lineItemStatusChange.Quantity) { int quantityApproved = lineItemStatusChange.QuantityRequestedForRefund - lineItemStatusChange.Quantity; decimal costPerUnitAfterTaxes = (decimal)(lineItemStatusChange.Refund / quantityApproved); lineTotal = Math.Round(costPerUnitAfterTaxes * lineItemStatusChange.Quantity, 2); } else { lineTotal = lineItemStatusChange.Refund ?? lineItem.LineTotal; } return(new LineItemProductData { ProductName = lineItem?.Product?.Name, ImageURL = lineItem?.xp?.ImageUrl, ProductID = lineItem?.ProductID, Quantity = lineItem?.Quantity, LineTotal = lineTotal, QuantityChanged = lineItemStatusChange?.Quantity, MessageToBuyer = lineItemStatusChange.Comment }); }
public static LineItemProductData MapToTemplateProduct(HSLineItem lineItem, LineItemStatusChange lineItemStatusChange) { return(new LineItemProductData { ProductName = lineItem?.Product?.Name, ImageURL = lineItem?.xp?.ImageUrl, ProductID = lineItem?.ProductID, Quantity = lineItem?.Quantity, LineTotal = lineItem?.LineTotal, QuantityChanged = lineItemStatusChange?.Quantity }); }
private PartialLineItem BuildNewPartialLineItem(LineItemStatusChange lineItemStatusChange, List <HSLineItem> previousLineItemStates, LineItemStatus newLineItemStatus) { var existingLineItem = previousLineItemStates.First(li => li.ID == lineItemStatusChange.ID); var StatusByQuantity = BuildNewLineItemStatusByQuantity(lineItemStatusChange, existingLineItem, newLineItemStatus); if (newLineItemStatus == LineItemStatus.ReturnRequested || newLineItemStatus == LineItemStatus.Returned) { var returnRequests = existingLineItem.xp.Returns ?? new List <LineItemClaim>(); return(new PartialLineItem() { xp = new { Returns = GetUpdatedChangeRequests(returnRequests, lineItemStatusChange, lineItemStatusChange.Quantity, newLineItemStatus, StatusByQuantity), StatusByQuantity } }); } else if (newLineItemStatus == LineItemStatus.CancelRequested || newLineItemStatus == LineItemStatus.Canceled) { var cancelRequests = existingLineItem.xp.Cancelations ?? new List <LineItemClaim>(); return(new PartialLineItem() { xp = new { Cancelations = GetUpdatedChangeRequests(cancelRequests, lineItemStatusChange, lineItemStatusChange.Quantity, newLineItemStatus, StatusByQuantity), StatusByQuantity } }); } else { return(new PartialLineItem() { xp = new { StatusByQuantity } }); } }
public async Task SendLineItemStatusChangeEmail(LineItemStatusChange lineItemStatusChange, List <HSLineItem> lineItems, string firstName, string lastName, string email, EmailDisplayText lineItemEmailDisplayText) { var productsList = lineItems.Select(SendgridMappers.MapLineItemToProduct).ToList(); var templateData = new EmailTemplate <LineItemStatusChangeData>() { Data = new LineItemStatusChangeData { FirstName = firstName, LastName = lastName, Products = productsList, }, Message = new EmailDisplayText() { EmailSubject = lineItemEmailDisplayText?.EmailSubject, DynamicText = lineItemEmailDisplayText?.DynamicText, DynamicText2 = lineItemEmailDisplayText?.DynamicText2 } }; await SendSingleTemplateEmail(_settings?.SendgridSettings?.FromEmail, email, _settings?.SendgridSettings?.LineItemStatusChangeTemplateID, templateData); }
public bool ValidateCurrentQuantities(List <HSLineItem> previousLineItemStates, LineItemStatusChange lineItemStatusChange, LineItemStatus lineItemStatusChangingTo) { var relatedLineItems = previousLineItemStates.Where(previousState => previousState.ID == lineItemStatusChange.ID); if (relatedLineItems.Count() != 1) { // if the lineitem is not found on the order, invalid change return(false); } var existingLineItem = relatedLineItems.First(); var existingStatusByQuantity = existingLineItem.xp.StatusByQuantity; if (existingStatusByQuantity == null) { return(false); } var countCanBeChanged = 0; var validPreviousStates = LineItemStatusConstants.ValidPreviousStateLineItemChangeMap[lineItemStatusChangingTo]; foreach (KeyValuePair <LineItemStatus, int> entry in existingStatusByQuantity) { if (validPreviousStates.Contains(entry.Key)) { countCanBeChanged += entry.Value; } } return(countCanBeChanged >= lineItemStatusChange.Quantity); }
private List <LineItemClaim> GetUpdatedChangeRequests(List <LineItemClaim> existinglineItemStatusChangeRequests, LineItemStatusChange lineItemStatusChange, int QuantitySetting, LineItemStatus newLineItemStatus, Dictionary <LineItemStatus, int> lineItemStatuses) { if (newLineItemStatus == LineItemStatus.Returned || newLineItemStatus == LineItemStatus.Canceled) { // go through the return requests and resolve each request until there aren't enough returned or canceled items // to resolve an additional request var numberReturnedOrCanceled = lineItemStatuses[newLineItemStatus]; var currentClaimIndex = 0; while (numberReturnedOrCanceled > 0 && currentClaimIndex < existinglineItemStatusChangeRequests.Count()) { if (existinglineItemStatusChangeRequests[currentClaimIndex].Quantity <= numberReturnedOrCanceled) { existinglineItemStatusChangeRequests[currentClaimIndex].IsResolved = true; numberReturnedOrCanceled -= existinglineItemStatusChangeRequests[currentClaimIndex].Quantity; currentClaimIndex++; } else { currentClaimIndex++; } } } else { existinglineItemStatusChangeRequests.Add(new LineItemClaim() { Comment = lineItemStatusChange.Comment, Reason = lineItemStatusChange.Reason, IsResolved = false, Quantity = QuantitySetting }); } return(existinglineItemStatusChangeRequests); }