/// <summary> /// Deletes a shipment order product variant /// </summary> /// <param name="sopv">Shipment order product variant</param> public virtual void DeleteShipmentOrderProductVariant(ShipmentOrderProductVariant sopv) { if (sopv == null) throw new ArgumentNullException("sopv"); _sopvRepository.Delete(sopv); //event notification _eventPublisher.EntityDeleted(sopv); }
public void Can_save_and_load_shipmentOrderProductVariant() { var sopv = new ShipmentOrderProductVariant() { Shipment = GetTestShipment(), OrderProductVariantId = 2, Quantity = 3, }; var fromDb = SaveAndLoadEntity(sopv); fromDb.ShouldNotBeNull(); fromDb.Shipment.ShouldNotBeNull(); fromDb.OrderProductVariantId.ShouldEqual(2); fromDb.Quantity.ShouldEqual(3); }
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 opv in order.OrderProductVariants) { //is shippable if (!opv.ProductVariant.IsShipEnabled) continue; //ensure that this product variant can be shipped (have at least one item to ship) var maxQtyToAdd = opv.GetTotalNumberOfItemsCanBeAddedToShipment(); if (maxQtyToAdd <= 0) continue; int qtyToAdd = 0; //parse quantity foreach (string formKey in form.AllKeys) if (formKey.Equals(string.Format("qtyToAdd{0}", opv.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 opvTotalWeight = opv.ItemWeight.HasValue ? opv.ItemWeight * qtyToAdd : null; if (opvTotalWeight.HasValue) { if (!totalWeight.HasValue) totalWeight = 0; totalWeight += opvTotalWeight.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 order product variant var sopv = new ShipmentOrderProductVariant() { OrderProductVariantId = opv.Id, Quantity = qtyToAdd, }; shipment.ShipmentOrderProductVariants.Add(sopv); } //if we have at least one item in the shipment, then save it if (shipment != null && shipment.ShipmentOrderProductVariants.Count > 0) { shipment.TotalWeight = totalWeight; _shipmentService.InsertShipment(shipment); SuccessNotification(_localizationService.GetResource("Admin.Orders.Shipments.Added")); return continueEditing ? RedirectToAction("ShipmentDetails", new {id = shipment.Id}) : RedirectToAction("Edit", new { id = orderId }); } else { ErrorNotification(_localizationService.GetResource("Admin.Orders.Shipments.NoProductsSelected")); return RedirectToAction("AddShipment", new { orderId = orderId }); } }