public void Build_FeeCarrier(decimal totalPrice, decimal totalVat, decimal expectedPrice, decimal expectedVat) { var fee = new FeeCarrier { // We assume the TotalPrice was rounded by OrderTotalCalculator TotalAmount = totalPrice, TotalVATAmount = totalVat }; var paymentInfoID = Guid.NewGuid(); var result = PaymentInfoRowBuilder.Build(fee, paymentInfoID, 1); Assert.Equal(expectedPrice, result.TotalPrice); Assert.Equal(expectedVat, result.TotalVatAmount); }
public void Build_DeliveryCarrier_WithDescription(decimal totalPrice, decimal totalVat, decimal expectedPrice, decimal expectedVat) { var delivery = new DeliveryCarrier { // We assume the TotalPrice was rounded by OrderTotalCalculator TotalDeliveryCost = totalPrice, TotalVATAmount = totalVat }; var paymentInfoID = Guid.NewGuid(); var result = PaymentInfoRowBuilder.Build(delivery, "description", paymentInfoID, 1); Assert.Equal(expectedPrice, result.TotalPrice); Assert.Equal(expectedVat, result.TotalVatAmount); Assert.Equal("description", result.Description); }
public void Build_OrderRowCarrier(decimal totalPrice, decimal totalVat, decimal expectedPrice, decimal expectedVat) { var row = new OrderRowCarrier { // We assume the TotalPrice was rounded by OrderTotalCalculator TotalPrice = totalPrice, TotalVATAmount = totalVat, VATPercentage = 0.19m }; var paymentInfoID = Guid.NewGuid(); var result = PaymentInfoRowBuilder.Build(row, paymentInfoID, 1); Assert.Equal(expectedPrice, result.TotalPrice); Assert.Equal(expectedVat, result.TotalVatAmount); }
public virtual IEnumerable <PaymentInfoCarrier> Create(OrderCarrier orderCarrier, SecurityToken token) { var pi = orderCarrier.PaymentInfo.Where(r => !r.CarrierState.IsMarkedForDeleting).FirstOrDefault(); if (pi == null) { return(new PaymentInfoCarrier[0]); } foreach (var row in pi.Rows.Where(r => !r.CarrierState.IsMarkedForCreating)) { row.CarrierState.IsMarkedForDeleting = true; } pi.Rows.RemoveAll(r => r.CarrierState.IsMarkedForCreating); int index = 1; pi.Rows.AddRange(orderCarrier.OrderRows.Select(r => PaymentInfoRowBuilder.Build(r, pi.ID, index++))); pi.Rows.AddRange(orderCarrier.Deliveries.Select(r => Build(r, pi.ID, index++, orderCarrier.ChannelID))); pi.Rows.AddRange(orderCarrier.Fees.Select(r => PaymentInfoRowBuilder.Build(r, pi.ID, index++))); var leftForDiscount = GetOrderTotal(orderCarrier); foreach (var discount in orderCarrier.OrderDiscounts) { var row = PaymentInfoRowBuilder.Build(discount, pi.ID, index++); decimal discountAmount = discount.DiscountAmount; if (discount.DiscountAmount > leftForDiscount) { discountAmount = Math.Min(leftForDiscount, discount.DiscountAmount); row.TotalPrice = Math.Abs(discountAmount) * -1; row.TotalVatAmount = row.TotalPrice * discount.VATPercentage; } leftForDiscount = leftForDiscount + row.TotalPrice; pi.Rows.Add(row); } return(new PaymentInfoCarrier[] { pi }); }
private PaymentInfoRowCarrier Build(DeliveryCarrier delivery, Guid paymentInfoId, int index, Guid channelId) { var description = deliveryMethodService.GetPaymentInfoDescription(delivery.DeliveryMethodID, channelId); return(PaymentInfoRowBuilder.Build(delivery, description, paymentInfoId, index)); }