public ActionResult Deliver(long?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Subscription subscription = db.Subscriptions.Find(id); if (subscription == null) { return(HttpNotFound()); } SubscriptionDeliverViewModel model = new SubscriptionDeliverViewModel() { StationAccountId = subscription.StationAccountId, SubscriptionId = subscription.SubscriptionId, StationAccountName = subscription.Station.StationName, Quantity = subscription.CurrentQuantity }; return(View(model)); }
public ActionResult DeliverConfirmed([Bind(Include = "SubscriptionId, Quantity,ClientSubscriptionId, Notes, Timestamp")] SubscriptionDeliverViewModel model) { if (ModelState.IsValid) { DateTime time = model.Timestamp; Subscription subscription = db.Subscriptions.Find(model.SubscriptionId); ClientSubscription cs = db.ClientSubscriptions.Find(model.ClientSubscriptionId); long csId = cs.ClientSubscriptionId; if (cs.State != ClientSubscriptionState.Paid) { if (cs.State != ClientSubscriptionState.PartialDelivered) { throw new Exception("The client subscription state must be 'paid'."); } } if (cs.StationAccountId != subscription.StationAccountId) { throw new Exception("The station does not match."); } string clientAccountName = cs.Client.ClientAccountName; string vesselName = cs.VesselName; long accountId = subscription.StationAccountId; float leftQuantity = subscription.CurrentQuantity - model.Quantity; if (leftQuantity == 0) { subscription.State = SubscriptionState.Delivered; } else { subscription.State = SubscriptionState.PartialDelivered; } subscription.CurrentQuantity = leftQuantity; subscription.Timestamp = time; subscription.Notes = model.Notes; db.Entry(subscription).State = EntityState.Modified; var subscriptionHistory = new SubscriptionHistory() { UnitPrice = subscription.UnitPrice, State = subscription.State, Quantity = model.Quantity, Notes = model.Notes, ClientSubscriptionId = model.ClientSubscriptionId, ClientAccountName = clientAccountName, VesselName = vesselName, SubscriptionId = subscription.SubscriptionId, Timestamp = time }; db.SubscriptionHistories.Add(subscriptionHistory); float csLeftQuantity = cs.CurrentQuantity - model.Quantity; if (csLeftQuantity == 0) { cs.State = ClientSubscriptionState.Delivered; } else { cs.State = ClientSubscriptionState.PartialDelivered; } cs.CurrentQuantity = csLeftQuantity; cs.Timestamp = time; cs.Notes = model.Notes; db.Entry(cs).State = EntityState.Modified; var clientSubscriptionHistory = new ClientSubscriptionHistory() { UnitPrice = subscription.UnitPrice, State = cs.State, Quantity = model.Quantity, Notes = model.Notes, VesselName = vesselName, ClientSubscriptionId = cs.ClientSubscriptionId, Timestamp = time }; db.ClientSubscriptionHistories.Add(clientSubscriptionHistory); db.SaveChanges(); return(RedirectToAction("Index", new { accountId = accountId })); } return(View("Invalid state.")); }