public ActionResult Create(int NoProductos) { var Sucursales = db.Sucursales.Where(s => s.Usuarios.Any(u => u.Username == HttpContext.User.Identity.Name)); var SucursalesDestino = db.Sucursales.OrderBy(s => s.Nombre); int noProductos = NoProductos; if (noProductos == 0) { return RedirectToAction("Error", new { Error = "Debes indicar el numero de productos a incluir en la orden de compra" }); } ViewBag.SucursalesOrigen = Sucursales.ToList(); ViewBag.SucursalesDestino = SucursalesDestino.ToList(); ViewBag.Productos = db.Productos.OrderBy(p => p.Nombre); ViewBag.noProductos = noProductos; var traslado = new OrdenTraslado(); return View(traslado); }
public ActionResult Create(OrdenTraslado orden) { int IdSucursalOrigen = int.Parse(Request.Form["IdSucursalOrigen"]); int IdSucursalDestino = int.Parse(Request.Form["IdSucursalDestino"]); int noProductos = int.Parse(Request.Form["noProductos"]); if (IdSucursalOrigen == 0 || IdSucursalDestino == 0) { return RedirectToAction("Error", new { Error = "Debes indicar las sucursales involucradas en el traslado" }); } orden.IdSucursalDestino = IdSucursalDestino; orden.IdSucursalOrigen = IdSucursalOrigen; orden.FechaGenerada = DateTime.Now; orden.Activa = true; if (ModelState.IsValid) { //Guardamos la orden db.Traslados.Add(orden); db.SaveChanges(); int IdOrden = orden.ID; orden = db.Traslados.Find(IdOrden); int i = 0; /* * Guardamos cada uno de los productos */ orden.Productos = new List<ProductoTraslado>(); for (i = 1; i <= noProductos; i++) { string labelId = "IdProducto" + i; string labelCantidad = "CantidadProducto" + i; int idProd = int.Parse(Request.Form[labelId]); decimal cantidad = decimal.Parse(Request.Form[labelCantidad]); /*Checamos que haya en existencia para la sucursal origen el producto a trasladar*/ try { var ProdSuc = db.ProductosSucursal.Single(p => p.IdProducto == idProd && p.IdSucursal == IdSucursalOrigen); if (ProdSuc.cantidad < cantidad) { db.Traslados.Remove(orden); return RedirectToAction("Error", new { Error = "No existe la suficiente cantidad de productos para ser trasladada" }); } } catch { db.Traslados.Remove(orden); return RedirectToAction("Error", new { Error = "No hay existencia de el producto " + idProd + " - No se guardará el traslado" }); } /**/ var PO = new ProductoTraslado { cantidad = cantidad, IdProducto = idProd, Producto = db.Productos.Find(idProd), IdTraslado = IdOrden }; orden.Productos.Add(PO); db.ProductosTraslado.Add(PO); db.SaveChanges(); } return RedirectToAction("Index"); } return View(orden); } public ActionResult Details(int id) { var orden = db.Traslados.Find(id); ViewBag.SucursalOrigen = db.Sucursales.Find(orden.IdSucursalOrigen); Sucursal s = db.Sucursales.Find(orden.IdSucursalDestino); ViewBag.SucursalDestino = s ; ViewBag.Permiso = permisoSucursal(s.ID); return View(orden); } [HttpPost] public ActionResult Details(int id, int x = 1) { var orden = db.Traslados.Find(id); if (permisoSucursal(orden.IdSucursalDestino) == 0) { return RedirectToAction("Error", new { Error = "No puede aceptar el traslado ya que no cuenta con los permisos necesarios" }); } //Actualizamos la orden de traslado de acuerdo a la información dada foreach (var item in orden.Productos) { string label = "cantidad" + item.IdProducto; try { decimal cantidad = decimal.Parse(Request.Form[label]); item.cantidad = cantidad; } catch { ViewBag.SucursalOrigen = db.Sucursales.Find(orden.IdSucursalOrigen); ViewBag.SucursalOrigen = db.Sucursales.Find(orden.IdSucursalDestino); ViewBag.Proveedor = db.Proveedores.Find(orden.IdProveedor); return View(orden); } } /*Registramos como procesada la orden*/ orden.Activa = false; orden.usuario = HttpContext.User.Identity.Name; OrdenTraslado Orden = orden; db.SaveChanges(); //Ahora damos de alta los productos en el inventario de sucursal destino y de baja en la sucursal origen foreach (var item in Orden.Productos) { /*Verificamos la existencia en el origen*/ try { //Averiguamos la existencia en la sucursal de origen var existencia = db.ProductosSucursal.Single(p => p.IdProducto == item.IdProducto && p.IdSucursal == Orden.IdSucursalOrigen); if (existencia.cantidad < item.cantidad) { orden.Activa = true; db.SaveChanges(); return RedirectToAction("Error", new { Error = "No existe la suficiente cantidad de productos para ser trasladada" }); } } catch { orden.Activa = true; db.SaveChanges(); return RedirectToAction("Error", new { Error = "No existe la suficiente cantidad de productos para ser trasladada" }); } /****************************************/ try { //Esta parte de ty se ejecutara si solo hay que actualizar cantidad var ProdD = db.ProductosSucursal.Single(p => p.IdProducto == item.IdProducto && p.IdSucursal == Orden.IdSucursalDestino); ProdD.cantidad += item.cantidad; //Generamos el movimiento var Movimiento = new MovimientoAlmacen { Count = item.cantidad, DescripcionMovimiento = "Alta por Traslado desde sucursal " + Orden.IdSucursalOrigen, FechaMovimiento = DateTime.Now, IdOrednCompra = 0, IdProducto = item.IdProducto, IdSucursal = Orden.IdSucursalDestino, IdVenta = 0, Producto = item.Producto, TipoMovimiento = "Ingreso" }; db.MovimientosAlmacen.Add(Movimiento); var ProdO = db.ProductosSucursal.Single(p => p.IdProducto == item.IdProducto && p.IdSucursal == Orden.IdSucursalOrigen); ProdO.cantidad -= item.cantidad; //Generamos el movimiento Movimiento = new MovimientoAlmacen { Count = item.cantidad, DescripcionMovimiento = "Baja por Traslado hacia sucursal " + Orden.IdSucursalDestino, FechaMovimiento = DateTime.Now, IdOrednCompra = 0, IdProducto = item.IdProducto, IdSucursal = Orden.IdSucursalOrigen, IdVenta = 0, Producto = item.Producto, TipoMovimiento = "Salida" }; db.SaveChanges(); } catch { //Creamos un nuevo producto Sucursal, para darlo de alta en el inventario de la sucursal var ProdD = new ProductoSucursal { cantidad = item.cantidad, IdProducto = item.IdProducto, IdSucursal = Orden.IdSucursalDestino, Producto = db.Productos.Find(item.IdProducto), Sucursal = db.Sucursales.Find(Orden.IdSucursalDestino) }; db.ProductosSucursal.Add(ProdD); //Generamos el movimiento var Movimiento = new MovimientoAlmacen { Count = item.cantidad, DescripcionMovimiento = "Alta por Traslado desde sucursal " + Orden.IdSucursalOrigen, FechaMovimiento = DateTime.Now, IdOrednCompra = 0, IdProducto = item.IdProducto, IdSucursal = Orden.IdSucursalDestino, IdVenta = 0, Producto = item.Producto, TipoMovimiento = "Ingreso" }; db.MovimientosAlmacen.Add(Movimiento); //Damos de baja en el Origen var ProdO = db.ProductosSucursal.Single(p => p.IdProducto == item.IdProducto && p.IdSucursal == Orden.IdSucursalOrigen); ProdO.cantidad -= item.cantidad; //Generamos el movimiento Movimiento = new MovimientoAlmacen { Count = item.cantidad, DescripcionMovimiento = "Baja por Traslado hacia sucursal " + Orden.IdSucursalDestino, FechaMovimiento = DateTime.Now, IdOrednCompra = 0, IdProducto = item.IdProducto, IdSucursal = Orden.IdSucursalOrigen, IdVenta = 0, Producto = item.Producto, TipoMovimiento = "Salida" }; db.MovimientosAlmacen.Add(Movimiento); db.SaveChanges(); } } return RedirectToAction("Index"); }