У меня есть два бизнес-правила, я пытаюсь их применить:
- пользователь может вставить новый счет только тогда, когда все счета закрыты.
- когда счет закрыт, пользователь не может его редактировать.
счет имеет два состояния: текущий, закрытый, оплаченный и отмененный
дляЯ реализовал свою бизнес-логику в методе создания на бизнес-уровне
, и когда пользователь пытается нажать кнопку отправки, метод действия httppost вызывает бизнес-код.
, но я хочу применить этиправила в httpget создают / редактируют метод действия, поэтому, когда пользователь пытается нажать на кнопку добавления, чтобы отобразить представление создания / редактирования, он получает сообщения об исключениях соответственно для создания и редактирования
вот мой код
//business logic
public AddInvoice(Invoice invoice)
{
var invoicesCount = Context.Invoices.Count(x=>x.State !=
InvoiceState.Closed);//InvoiceState is enum
if (invoicesCount > 0)
throw new BusinessReulesException("you should close all your
invoices before insert");
Context.Invoices.Add(invoice);
Context.SaveChanges();
}
public UpdateInvoice(Invoice invoice)
{
if (Context.Entry(invoice).State == EntityState.Detached)
Context.Invoices.Attach(invoice);
if (invoices.State == InvoiceState.Closed)
throw new BusinessReulesException("you can't update an closed invoices );
Context.Entry(invoice).State =EntityState.Modified;
Context.SaveChanges();
}
//controller code
[httpGet]
public ActionResult Create()
{
//how to apply business logic for catch Exception here
}
[httpPost]
public ActionResult Create(Invoice invoice)
{
if(ModelState.isValide){
try{
invoiceBll.AddInvoice(invoice);
return RedirectToAction("Index");
}
catch(BusinessRulesException ex){
ViewBag.Message = ex.Message;
}
}
}
//the same thing for update
//the rest of code
есть идеи?