public void Can_save_and_load_shipmentItem() { var shipmentItem = new ShipmentItem() { Shipment = GetTestShipment(), OrderItemId = 2, Quantity = 3, }; var fromDb = SaveAndLoadEntity(shipmentItem); fromDb.ShouldNotBeNull(); fromDb.Shipment.ShouldNotBeNull(); fromDb.OrderItemId.ShouldEqual(2); fromDb.Quantity.ShouldEqual(3); }
/// <summary> /// Deletes a shipment item /// </summary> /// <param name="shipmentItem">Shipment item</param> public virtual void DeleteShipmentItem(ShipmentItem shipmentItem) { if (shipmentItem == null) throw new ArgumentNullException("shipmentItem"); int orderId = shipmentItem.Shipment.OrderId; _siRepository.Delete(shipmentItem); //event notifications _eventPublisher.EntityDeleted(shipmentItem); if (orderId != 0) { var order = _orderRepository.GetById(orderId); _eventPublisher.PublishOrderUpdated(order); } }
public ActionResult AddShipment(int orderId, FormCollection form, bool continueEditing) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(orderId); if (order == null) //No order found with the specified id return RedirectToAction("List"); Shipment shipment = null; decimal? totalWeight = null; foreach (var orderItem in order.OrderItems) { //is shippable if (!orderItem.Product.IsShipEnabled) continue; //ensure that this product can be shipped (have at least one item to ship) var maxQtyToAdd = orderItem.GetTotalNumberOfItemsCanBeAddedToShipment(); if (maxQtyToAdd <= 0) continue; int qtyToAdd = 0; //parse quantity foreach (string formKey in form.AllKeys) if (formKey.Equals(string.Format("qtyToAdd{0}", orderItem.Id), StringComparison.InvariantCultureIgnoreCase)) { int.TryParse(form[formKey], out qtyToAdd); break; } //validate quantity if (qtyToAdd <= 0) continue; if (qtyToAdd > maxQtyToAdd) qtyToAdd = maxQtyToAdd; //ok. we have at least one item. let's create a shipment (if it does not exist) var orderItemTotalWeight = orderItem.ItemWeight.HasValue ? orderItem.ItemWeight * qtyToAdd : null; if (orderItemTotalWeight.HasValue) { if (!totalWeight.HasValue) totalWeight = 0; totalWeight += orderItemTotalWeight.Value; } if (shipment == null) { shipment = new Shipment() { OrderId = order.Id, TrackingNumber = form["TrackingNumber"], TotalWeight = null, ShippedDateUtc = null, DeliveryDateUtc = null, CreatedOnUtc = DateTime.UtcNow, }; } //create a shipment item var shipmentItem = new ShipmentItem() { OrderItemId = orderItem.Id, Quantity = qtyToAdd, }; shipment.ShipmentItems.Add(shipmentItem); } //if we have at least one item in the shipment, then save it if (shipment != null && shipment.ShipmentItems.Count > 0) { shipment.TotalWeight = totalWeight; _shipmentService.InsertShipment(shipment); NotifySuccess(_localizationService.GetResource("Admin.Orders.Shipments.Added")); return continueEditing ? RedirectToAction("ShipmentDetails", new {id = shipment.Id}) : RedirectToAction("Edit", new { id = orderId }); } else { NotifyError(_localizationService.GetResource("Admin.Orders.Shipments.NoProductsSelected")); return RedirectToAction("AddShipment", new { orderId = orderId }); } }
/// <summary> /// Updates the shipment item /// </summary> /// <param name="shipmentItem">shipment item</param> public virtual void UpdateShipmentItem(ShipmentItem shipmentItem) { if (shipmentItem == null) throw new ArgumentNullException("shipmentItem"); _siRepository.Update(shipmentItem); //event notifications _eventPublisher.EntityUpdated(shipmentItem); if (shipmentItem.Shipment != null && shipmentItem.Shipment.Order != null) { _eventPublisher.PublishOrderUpdated(shipmentItem.Shipment.Order); } else { var shipment = _shipmentRepository.Table .Expand(x => x.Order) .FirstOrDefault(x => x.Id == shipmentItem.ShipmentId); if (shipment != null) _eventPublisher.PublishOrderUpdated(shipment.Order); } }
/// <summary> /// Updates the shipment item /// </summary> /// <param name="shipmentItem">shipment item</param> public virtual void UpdateShipmentItem(ShipmentItem shipmentItem) { if (shipmentItem == null) throw new ArgumentNullException("shipmentItem"); _siRepository.Update(shipmentItem); //event notifications _eventPublisher.EntityUpdated(shipmentItem); _eventPublisher.PublishOrderUpdated(shipmentItem.Shipment.Order); }
public virtual Shipment AddShipment(Order order, string trackingNumber, Dictionary<int, int> quantities) { Guard.ArgumentNotNull(() => order); Shipment shipment = null; decimal? totalWeight = null; foreach (var orderItem in order.OrderItems) { if (!orderItem.Product.IsShipEnabled) continue; //ensure that this product can be shipped (have at least one item to ship) var maxQtyToAdd = orderItem.GetTotalNumberOfItemsCanBeAddedToShipment(); if (maxQtyToAdd <= 0) continue; var qtyToAdd = 0; if (quantities != null && quantities.ContainsKey(orderItem.Id)) qtyToAdd = quantities[orderItem.Id]; else if (quantities == null) qtyToAdd = maxQtyToAdd; if (qtyToAdd <= 0) continue; if (qtyToAdd > maxQtyToAdd) qtyToAdd = maxQtyToAdd; var orderItemTotalWeight = orderItem.ItemWeight.HasValue ? orderItem.ItemWeight * qtyToAdd : null; if (orderItemTotalWeight.HasValue) { if (!totalWeight.HasValue) totalWeight = 0; totalWeight += orderItemTotalWeight.Value; } if (shipment == null) { shipment = new Shipment { OrderId = order.Id, Order = order, // otherwise order updated event would not be fired during InsertShipment TrackingNumber = trackingNumber, TotalWeight = null, ShippedDateUtc = null, DeliveryDateUtc = null, CreatedOnUtc = DateTime.UtcNow, }; } var shipmentItem = new ShipmentItem { OrderItemId = orderItem.Id, Quantity = qtyToAdd }; shipment.ShipmentItems.Add(shipmentItem); } if (shipment != null && shipment.ShipmentItems.Count > 0) { shipment.TotalWeight = totalWeight; _shipmentService.InsertShipment(shipment); return shipment; } return null; }
/// <summary> /// Inserts a shipment item /// </summary> /// <param name="shipmentItem">shipment item</param> public virtual void InsertShipmentItem(ShipmentItem shipmentItem) { if (shipmentItem == null) throw new ArgumentNullException("shipmentItem"); _siRepository.Insert(shipmentItem); //event notification _eventPublisher.EntityInserted(shipmentItem); }