Я работаю с MVC , как вы видите, я начинаю с этим ..Хорошая практика, где должна быть логика? MVC (бизнес уровень)
У меня есть построить простой модуль продажи
следующего код для возврата на частичный виде деталей.
Я не уверен, что весь этот код должен находиться на контроллере. где я могу поставить «логику»?
Я считаю, что это эквивалентно, мне нужен его «бизнес-уровень», но для mvc.
[HttpPost]
public ActionResult getdetail(int productoid, int ventaid, float cantidad, string codigobarras)
{
codigobarras =((string.IsNullOrEmpty(codigobarras))?"":codigobarras.ToLower());
Models.Helper.Ventah vh = new Models.Helper.Ventah();
vh.listadoclientes = db.accounts.ToList();
vh.listadoproductos = db.products.ToList();
vh.venta = db.sales.Where(x => x.id == ventaid).FirstOrDefault();
if (productoid == 0)
{
//si es 0 lo busco por el código de barras
vh.productoseleccionado = vh.listadoproductos.Where(x => x.code.ToLower().Equals(codigobarras)).FirstOrDefault();
}
else {
//busco el producto por el id
vh.productoseleccionado = vh.listadoproductos.Where(x => x.id == productoid).FirstOrDefault();
}
//regreso el partialview si el objecto es null, de lo contrario continuo
//gracias a esto podre mandar un mensaje "producto no encontrado"
if (vh.productoseleccionado == null)
{
vh.mensaje = "No se encontró ningun producto con el código "+codigobarras;
return PartialView(vh);
}
productoid = vh.productoseleccionado.id;
//veo si ya tiene el producto agregado
var detalle=vh.venta.saledetails.Where(x => x.idproduct == productoid).FirstOrDefault();
if (detalle != null)//significa que ya tiene el producto agregado por lo tanto solo lo sumo
{
//valido que, quepa la cantidad que se ingresó
if (vh.productoseleccionado.amount >= cantidad)
{
vh.productoseleccionado.amount = vh.productoseleccionado.amount - cantidad;
detalle.amount += cantidad;
}
}
else//significa que no tiene el producto aún por lo tanto debo agregarlo
{
//valido que, quepa la cantidaqd que se ingresó
if (vh.productoseleccionado.amount >= cantidad)
{
//agrego el detalle
vh.venta.saledetails.Add(
//creo el detalle
detalle = new Models.saledetail()
{
amount = cantidad,
idproduct = vh.productoseleccionado.id,
idsale = vh.venta.id,
inputprice = vh.productoseleccionado.inputprice,
outputprice = vh.productoseleccionado.outputprice,
ivaprice = vh.productoseleccionado.ivaprice,
});
}
}
db.SaveChanges();
return PartialView(vh);
}