/// <summary>
        /// Return the total price for a line item without the VAT included
        /// </summary>
        /// <remarks>
        /// Use this to get the total price for 1 or more products without VAT if
        /// your prices include VAT by default.
        /// </remarks>
        /// <param name="lineItem"></param>
        /// <param name="vatPercent"></param>
        /// <returns></returns>
        private decimal GetTotalPriceWithoutVat(LineItem lineItem, int vatPercent)
        {
            decimal vatFactor = 1 + (vatPercent / 100m);
            // IMPORTANT: The extended price is for all items (quantities)
            // Hence we MUST NOT multiply by quantity. DIBS expect us to
            // give the price per item, so we need to divide by quantity)
            decimal linePriceWithoutVat = (lineItem.ExtendedPrice / vatFactor) / lineItem.Quantity;

            // Round, DIBS limits us to 2 decimal values
            return(Math.Round(linePriceWithoutVat, 2));
        }
        /// <summary>
        /// Calculates VAT according to http://tech.dibspayment.com/DPW_hosted_input_parameters_order_information
        /// </summary>
        /// <remarks>
        /// Important! This assumes the ExtendedPrice is without VAT.
        /// </remarks>
        /// <param name="lineItem"></param>
        /// <param name="vatPercent"></param>
        /// <returns></returns>
        private int CalculateVatAmount(LineItem lineItem, int vatPercent)
        {
            // Count: 2	Price: 11.25 VAT%:50.25
            // Product2 = Round (1125 * 2 * (1 + 5025/10000)) = Round (3380.625) = 3381

            throw new NotImplementedException("This method has not been verified. Please test before use.");
            //int priceNormalized = (int)lineItem.ExtendedPrice*100;
            //int vatPercentNormalized = vatPercent*100;
            //// IMPORTANT: The extended price is for all items (quantities)
            //// Hence we MUST NOT multiply by quantity
            //int total = (int)Math.Round((decimal)priceNormalized * (1 + vatPercentNormalized / 10000));
            //return total;
        }
 private LineItemModel MapToModel(Mediachase.Commerce.Orders.LineItem item)
 {
     return(new LineItemModel()
     {
         ArticleNumber = item.GetStringValue(Constants.Metadata.LineItem.ArticleNumber),
         CatalogEntryId = item.Code,
         Color = item.GetStringValue(Constants.Metadata.LineItem.Color),
         Description = item.GetStringValue(Constants.Metadata.LineItem.Description),
         Discounts = MapDiscounts(item.Discounts),
         DisplayName = item.DisplayName,
         ExtendedPrice = item.ExtendedPrice,
         LineItemDiscountAmount = item.LineItemDiscountAmount,
         OrderLevelDiscountAmount = item.OrderLevelDiscountAmount,
         Quantity = (int)item.Quantity,
         Size = item.GetStringValue(Constants.Metadata.LineItem.Size),
         WarehouseCode = item.WarehouseCode
     });
 }
Example #4
0
 public LineItem(Mediachase.Commerce.Orders.LineItem lineItem, string language)
 {
     Code                       = lineItem.Code;
     Name                       = lineItem.GetStringValue(Constants.Metadata.LineItem.DisplayName);
     ArticleNumber              = lineItem.GetStringValue(Constants.Metadata.LineItem.ArticleNumber);
     ImageUrl                   = lineItem.GetString(Constants.Metadata.LineItem.ImageUrl);
     Color                      = lineItem.GetStringValue(Constants.Metadata.LineItem.Color);
     ColorImageUrl              = lineItem.GetStringValue(Constants.Metadata.LineItem.ColorImageUrl);
     Description                = lineItem.GetStringValue(Constants.Metadata.LineItem.Description);
     Size                       = lineItem.GetStringValue(Constants.Metadata.LineItem.Size);
     PlacedPrice                = lineItem.PlacedPrice;
     LineItemTotal              = lineItem.Quantity * lineItem.PlacedPrice;
     LineItemDiscount           = lineItem.LineItemDiscountAmount;
     LineItemOrderLevelDiscount = lineItem.OrderLevelDiscountAmount;
     Quantity                   = Convert.ToInt32(lineItem.Quantity);
     Url                  = lineItem.GetEntryLink(language);
     Discounts            = lineItem.Discounts.Cast <Discount>().Select(x => new DiscountItem(x)).ToList();
     IsInventoryAllocated = lineItem.IsInventoryAllocated;
 }
        /// <summary>
        /// Updates the data for a line item object based on data we might know, but that has not been
        /// set previously. The line item could have been added from Commerce Manager or some other API
        /// </summary>
        /// <param name="lineItemDto">The line item dto.</param>
        /// <param name="lineItem">The line item.</param>
        public static void UpdateData(this OxxCommerceStarterKit.Core.Objects.LineItem lineItemDto, Mediachase.Commerce.Orders.LineItem lineItem)
        {
            if (string.IsNullOrEmpty(lineItemDto.ArticleNumber))
            {
                lineItemDto.ArticleNumber = lineItem.Code;
            }

            if (string.IsNullOrEmpty(lineItemDto.ImageUrl))
            {
                // Attempt to get it again - the variation could have been added
                // manually from Commerce Mangager
                var entryContent = GetEntryContent <EntryContentBase>(lineItem);
                if (entryContent != null)
                {
                    lineItemDto.ImageUrl = entryContent.GetImage();
                }
            }
        }