public async Task <ActionResult> Create(DevolucionViewModel model, IEnumerable <HttpPostedFileBase> Files) { //var f = await UploadFiles(0, Files); if (ModelState.IsValid) { //Save Return model.Devolucion.Estado = EstadoFormatoPQRS.Open; model.Devolucion.FechaCreacion = DateTime.Now; db.Devoluciones.Add(model.Devolucion); await db.SaveChangesAsync(); //Genera HASHNroTracking string HASHNroTracking = Fn.HASH("D" + model.Devolucion.Id); HASHNroTracking = "D" + model.Devolucion.Id + HASHNroTracking; model.Devolucion.NroTracking = HASHNroTracking.Substring(0, 10).ToUpper(); db.Entry(model.Devolucion).State = EntityState.Modified; await db.SaveChangesAsync(); //Save Items if (model.Items != null) { int i = 1; foreach (var item in model.Items) { item.DevolucionId = model.Devolucion.Id; item.Id = i++; db.DevolucionItems.Add(item); } await db.SaveChangesAsync(); } //Save Files if (Files != null) { await UploadFiles(model.Devolucion.Id, Files, 1); } //Generar HASH y actualiza Formato AddLog("", model.Devolucion.Id, model); return(RedirectToAction("Index", GetReturnSearch())); } Seguridadcll seguridadcll = (Seguridadcll)Session["seguridad"]; ViewBag.UsuarioNombre = seguridadcll.Usuario.UsuarioId + " - " + seguridadcll.Usuario.UsuarioNombre; ViewBag.UsuarioId = seguridadcll.Usuario.UsuarioId; ViewBag.MotivoPQRS = await db.MotivosPQRS.Where(m => m.TipoPQRS == TipoPQRS.Devolucion && m.Activo == true).ToListAsync(); return(View(model)); }
public async Task <ActionResult> Edit(DevolucionViewModel model, IEnumerable <HttpPostedFileBase> Files) { if (ModelState.IsValid) { //Guardar Cabecera db.Entry(model.Devolucion).State = EntityState.Modified; await db.SaveChangesAsync(); //si es null ponerle el valor en 1 //int idx = await db.Database.SqlQuery<int>($"SELECT ISNULL(MAX(Id),0) FROM DevolucionItem WHERE DevolucionId = {model.Devolucion.Id} ").FirstOrDefaultAsync(); //Elimina los items Delete if (await DeleteItems(model.Devolucion.Id, model.ItemsDelete, true)) { int idx = 0; var currentItems = await db.DevolucionItems.Where(i => i.DevolucionId == model.Devolucion.Id).ToListAsync(); if (currentItems.Count > 0) { idx = currentItems.Select(i => i.Id).Max(); } //Actualiza los items actuales foreach (var item in currentItems) { var modelItem = model.Items.Where(i => i.Id == item.Id).FirstOrDefault(); if (modelItem != null) { item.ItemId = modelItem.ItemId; item.Cantidad = modelItem.Cantidad; item.Precio = modelItem.Precio; item.NroFactura = modelItem.NroFactura; item.NroGuia = modelItem.NroGuia; item.MotivoPQRSId = modelItem.MotivoPQRSId; item.CausaPQRSId = ((modelItem.CausaPQRSId ?? 0) != 0) ? modelItem.CausaPQRSId : null; item.Estado = modelItem.Estado; item.ComentarioAdicional = modelItem.ComentarioAdicional; item.CantidadRecibida = modelItem.CantidadRecibida; item.CantidadSubida = modelItem.CantidadSubida; item.ComentarioEstadoMercancia = modelItem.ComentarioEstadoMercancia; item.DocSoporte = modelItem.DocSoporte; item.PrecioAsumido = modelItem.PrecioAsumido; db.Entry(item).State = EntityState.Modified; } } //Agregar los nuevos items if (model.Items != null) { foreach (var item in model.Items.Where(i => i.Id == 0)) { if (item.Id == 0) { item.DevolucionId = model.Devolucion.Id; item.Id = ++idx; db.DevolucionItems.Add(item); } } } await db.SaveChangesAsync(); //Archivos var currentFiles = await db.DevolucionArchivos .Where(da => da.DevolucionId == model.Devolucion.Id) .ToListAsync(); if (model.DevolucionArchivos != null) { var FilesId = model.DevolucionArchivos.Select(a => a.Order).ToArray(); var itemsToDelete = currentFiles.Where(a => !FilesId.Contains(a.Order)).ToList(); if (itemsToDelete.Count > 0) { db.DevolucionArchivos.RemoveRange(itemsToDelete); await db.SaveChangesAsync(); } } else { var itemsToDelete = currentFiles.ToList(); if (itemsToDelete.Count > 0) { db.DevolucionArchivos.RemoveRange(itemsToDelete); await db.SaveChangesAsync(); } } //Save Files int order = 1; if (currentFiles.Count > 0) { order = currentFiles.Select(i => i.Order).Max() + 1; } if (Files != null) { await UploadFiles(model.Devolucion.Id, Files, order); } AddLog("", model.Devolucion.Id, model); return(RedirectToAction("Index", GetReturnSearch())); } else { ModelState.AddModelError("", "Error Deleting Detail (DevolucionItems)"); } } return(await GetView(model.Devolucion.Id)); }