public OrderWithItemsModel(GetOrderResponseModel order, GetOrderItemsResponseModel orderItems) { var data = order.data; BuyerName = data.shipping.address.name.full; UserName = data.buyer_name; ShippingMethod = PostageHelper.FriendlyPostageName(data.shipping.method); OrderTotal = data.cost.subtotal; Buyer = new Buyer(data.shipping.address); OrderNumber = data.order_id.ToString(); OrderDate = data.date_ordered.ToString("yyyy-MM-dd"); OrderPaid = data.payment.date_paid.ToString("yyyy-MM-dd"); SubTotal = StaticFunctions.FormatCurrencyStr(data.cost.subtotal); ServiceCharge = StaticFunctions.FormatCurrencyStr(data.cost.etc1); Coupon = StaticFunctions.FormatCurrencyStr(data.cost.coupon); PostagePackaging = StaticFunctions.FormatCurrencyStr(data.cost.shipping); Total = StaticFunctions.FormatCurrencyStr(data.cost.grand_total); Items = orderItems.data .SelectMany(x => x) .Select(x => new OrderItemModel(x)) .OrderBy(x => x.Condition) .ThenBy(x => x.RemarkLetter3) .ThenBy(x => x.RemarkLetter2) .ThenBy(x => x.RemarkLetter1) .ThenBy(x => x.RemarkNumber) .ThenBy(x => x.Colour) .ThenBy(x => x.Name); Messages = new List <BricklinkMessage>(); }
/// <summary> /// Adds an order into the DB. If it already exists, return it. /// </summary> /// <param name="order">Order response model from API</param> /// <param name="orderItems">Order items response model from API</param> /// <returns>A BL Order entity</returns> public Data.Entities.BricklinkOrder AddOrder(GetOrderResponseModel order, GetOrderItemsResponseModel orderItems, int id = 0) { var orderEntity = (id != 0 ? _orderRepo.FindOne(id) : _orderRepo.FindOne(x => x.OrderId == order.data.order_id.ToString())) as Data.Entities.BricklinkOrder; if (orderEntity == null) { throw new Exception("Order doesn't exist!!"); // todo: do something about this } if (orderEntity.OrderItems.Any()) { return(orderEntity); } orderEntity.Weight = order.data.total_weight; orderEntity.ShippingMethod = order.data.shipping?.method; orderEntity.BuyerRealName = order.data.shipping.address.name.full; orderEntity.BuyerEmail = order.data.buyer_email; orderEntity.Subtotal = decimal.Parse(order.data.cost.subtotal); orderEntity.Deductions = decimal.Parse(order.data.cost.credit) + decimal.Parse(order.data.cost.coupon); orderEntity.Shipping = decimal.Parse(order.data.cost.shipping); orderEntity.ExtraCosts = decimal.Parse(order.data.cost.salesTax) + decimal.Parse(order.data.cost.vat_amount) + decimal.Parse(order.data.cost.etc1) + decimal.Parse(order.data.cost.etc2) + decimal.Parse(order.data.cost.insurance); orderEntity.GrandTotal = decimal.Parse(order.data.cost.grand_total); orderEntity.Status = order.data.status == "CANCELLED" ? OrderStatus.Cancelled : OrderStatus.InProgress; var orderItemEntities = orderItems.data .SelectMany(x => x) .Select(x => new BricklinkOrderItem { Order = orderEntity, Name = x.item.name, Quantity = x.quantity, UnitPrice = decimal.Parse(x.unit_price_final), Part = GetPartInv(x, order) }).ToList(); orderEntity = _orderRepo.AddOrderWithItems(orderEntity, orderItemEntities); return(_orderRepo.FindOne(x => x.Id == orderEntity.Id) as Data.Entities.BricklinkOrder); PartInventory GetPartInv(OrderItemResponseModel item, GetOrderResponseModel ord) { var model = GetPartModel(item.inventory_id, updateInvDate: order.data.date_ordered); if (model != null) { return(model.PartInventory); } model = GetPartModel(item.item.no, item.color_id, item.item.type, item.new_or_used, description: item.description); if (!model.InvIsPlaceHolder) { return(model.PartInventory); } model = AddInventoryFromOrderItem(item, model); return(model.PartInventory); } }