private ActionResult ModifyState(ClientSubscription clientSubscription, ClientSubscriptionState state) { if (ModelState.IsValid) { DateTime time = clientSubscription.Timestamp; ClientSubscription subscription = db.ClientSubscriptions.Find(clientSubscription.ClientSubscriptionId); long clientAccountId = subscription.ClientAccountId; subscription.State = state; subscription.Timestamp = DateTime.Now; subscription.Notes = clientSubscription.Notes; db.Entry(subscription).State = EntityState.Modified; var clientSubscriptionHistory = new ClientSubscriptionHistory() { UnitPrice = subscription.UnitPrice, State = state, Quantity = subscription.CurrentQuantity, Notes = subscription.Notes, VesselName = subscription.VesselName, ClientSubscriptionId = subscription.ClientSubscriptionId, Timestamp = time }; db.ClientSubscriptionHistories.Add(clientSubscriptionHistory); db.SaveChanges(); return(RedirectToAction("Index", new { accountId = clientAccountId })); } return(View("Invalid state.")); }
public ActionResult PayConfirmed([Bind(Include = "ClientSubscriptionId, Notes, Timestamp")] ClientSubscription subscription) { if (ModelState.IsValid) { DateTime time = subscription.Timestamp; ClientSubscription clientSubscription = db.ClientSubscriptions.Find(subscription.ClientSubscriptionId); long clientAccountId = clientSubscription.ClientAccountId; ClientAccount client = db.ClientAccounts.Find(clientAccountId); if (client.Balance >= clientSubscription.UnitPrice * clientSubscription.StartQuantity) { clientSubscription.State = ClientSubscriptionState.Paid; db.Entry(clientSubscription).State = EntityState.Modified; client.Balance -= clientSubscription.UnitPrice * clientSubscription.StartQuantity; clientSubscription.Timestamp = time; db.Entry(client).State = EntityState.Modified; var clientSubscriptionHistory = new ClientSubscriptionHistory() { UnitPrice = clientSubscription.UnitPrice, State = ClientSubscriptionState.Paid, Quantity = clientSubscription.StartQuantity, VesselName = subscription.VesselName, Notes = clientSubscription.Notes, ClientSubscriptionId = clientSubscription.ClientSubscriptionId, Timestamp = time }; db.ClientSubscriptionHistories.Add(clientSubscriptionHistory); var clientBalanceHistory = new ClientBalanceHistory() { Amount = clientSubscription.UnitPrice * clientSubscription.StartQuantity * -1, BalanceType = BalanceChangeType.Pay, ClientAccountId = clientAccountId, Description = string.Format("Pay for Subscription: {0}.", subscription.ClientSubscriptionId), Timestamp = time }; db.ClientBalanceHistories.Add(clientBalanceHistory); db.SaveChanges(); return(RedirectToAction("Index", new { accountId = clientAccountId })); } return(View("The balance is not enough to pay the subscription.")); } return(View("The state is not valid.")); }
public ActionResult Create([Bind(Include = "ClientAccountId,StationAccountId, VesselName, Quantity,UnitPrice,Notes,Timestamp")] ClientSubscriptionViewModel clientSubscriptionViewModel) { if (ModelState.IsValid) { DateTime time = clientSubscriptionViewModel.Timestamp; var clientSubscription = new ClientSubscription() { UnitPrice = clientSubscriptionViewModel.UnitPrice, State = ClientSubscriptionState.Created, StartQuantity = clientSubscriptionViewModel.Quantity, CurrentQuantity = clientSubscriptionViewModel.Quantity, ClientAccountId = clientSubscriptionViewModel.ClientAccountId, Notes = clientSubscriptionViewModel.Notes, VesselName = clientSubscriptionViewModel.VesselName, StationAccountId = int.Parse(clientSubscriptionViewModel.StationAccountId), Timestamp = time }; db.ClientSubscriptions.Add(clientSubscription); db.SaveChanges(); var clientSubscriptionHistory = new ClientSubscriptionHistory() { UnitPrice = clientSubscriptionViewModel.UnitPrice, State = ClientSubscriptionState.Created, Quantity = clientSubscriptionViewModel.Quantity, Notes = clientSubscriptionViewModel.Notes, VesselName = clientSubscriptionViewModel.VesselName, ClientSubscriptionId = clientSubscription.ClientSubscriptionId, Timestamp = time }; db.ClientSubscriptionHistories.Add(clientSubscriptionHistory); db.SaveChanges(); return(RedirectToAction("Index", new { accountId = clientSubscriptionViewModel.ClientAccountId })); } return(View(clientSubscriptionViewModel)); }
public ActionResult DeliverConfirmed([Bind(Include = "ClientSubscriptionId, Quantity, Notes")] ClientSubscriptionDeliverViewModel model) { if (ModelState.IsValid) { DateTime time = DateTime.Now; ClientSubscription subscription = db.ClientSubscriptions.Find(model.ClientSubscriptionId); long clientAccountId = subscription.ClientAccountId; float leftQuantity = subscription.CurrentQuantity - model.Quantity; if (leftQuantity == 0) { subscription.State = ClientSubscriptionState.Delivered; } else { subscription.State = ClientSubscriptionState.PartialDelivered; } subscription.CurrentQuantity = leftQuantity; subscription.Timestamp = time; subscription.Notes = model.Notes; db.Entry(subscription).State = EntityState.Modified; var clientSubscriptionHistory = new ClientSubscriptionHistory() { UnitPrice = subscription.UnitPrice, State = subscription.State, Quantity = model.Quantity, Notes = model.Notes, VesselName = subscription.VesselName, ClientSubscriptionId = subscription.ClientSubscriptionId, Timestamp = time }; db.ClientSubscriptionHistories.Add(clientSubscriptionHistory); db.SaveChanges(); return(RedirectToAction("Index", new { accountId = clientAccountId })); } return(View("Invalid state.")); }
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.")); }