public void Editar(Transferencia transferencia, bool aprobar)
        {
            var trans = Uow.Transferencias.Obtener(t => t.TransferenciaId == transferencia.TransferenciaId,
                                                    t => t.TransferenciaProductos);
            var originales = trans.TransferenciaProductos.Where(tp => !tp.Eliminado);

            var paraEliminar = originales.Select(o => o.TransferenciaProductoId).ToList();

            var i = 1;
            foreach (var tp in transferencia.TransferenciaProductos)
            {
                tp.Orden = i;
                if (tp.TransferenciaProductoId == 0)
                {
                    tp.TransferenciaId = transferencia.TransferenciaId;
                    Uow.TransferenciaProductos.Agregar(tp);
                }
                else
                {
                    var original = originales.FirstOrDefault(o => tp.TransferenciaProductoId == o.TransferenciaProductoId);
                    if (original != null)
                    {
                        original.Cantidad = tp.Cantidad;
                        original.PrecioVenta = tp.PrecioVenta;
                        original.ProductoId = tp.ProductoId;
                        original.StockDestino = tp.StockDestino;
                        original.StockOrigen = tp.StockDestino;
                        Uow.TransferenciaProductos.Modificar(original);
                        paraEliminar.Remove(original.TransferenciaProductoId);
                    }
                }
                i++;
            }

            foreach (var id in paraEliminar)
            {
                Uow.TransferenciaProductos.Eliminar(id);
            }

            trans.OrigenId = transferencia.OrigenId;
            trans.DestinoId = transferencia.DestinoId;

            if (aprobar)
            {
                Aprobar(trans);
            }
            else
            {
                trans.FechaUltimaModificacion = DateTime.Now;
                trans.Desincronizado = true;
                Uow.Commit();
            }
        }
 public void Aprobar(Transferencia transferencia)
 {
     foreach (TransferenciaProducto transferenciaProd in transferencia.TransferenciaProductos)
     {
         ProcesarStock(transferenciaProd, true, transferencia.DestinoId);
         ProcesarStock(transferenciaProd, false, transferencia.OrigenId);
     }
     transferencia.FechaUltimaModificacion = DateTime.Now;
     transferencia.Desincronizado = true;
     transferencia.FechaAprobacion = DateTime.Now;
     //Uow.Transferencias.Modificar(transferencia);
     Uow.Commit();
 }
        public void Crear(Transferencia transferencia)
        {
            transferencia.Identifier = Guid.NewGuid();
            transferencia.FechaCreacion = DateTime.Now;

            //Agregar una trasaccion por cada transferencia producto.
            for (int i = 0; i < transferencia.TransferenciaProductos.Count; i++)
            {
                var transferenciaProd = transferencia.TransferenciaProductos.ElementAt(i);
                transferenciaProd.Identifier = Guid.NewGuid();
                transferenciaProd.FechaUltimaModificacion = DateTime.Now;
                transferenciaProd.Orden = i + 1;
            }

            Uow.Transferencias.Agregar(transferencia);
            Uow.Commit();
        }
        public ActionResult Crear(Transferencia transferencia)
        {
            if (!ModelState.IsValid)
            {
                return new HttpStatusCodeResult(HttpStatusCode.InternalServerError);
            }

            int ultima = Uow.Transferencias.Listado().Where(x => x.AutoNumero.StartsWith("WEB_")).Max(t => t.TransferenciaId);
            transferencia.AutoNumero = String.Format("WEB_{0}", ultima + 1);
            TransferenciasNegocio.Crear(transferencia);

            return Json(new { exito = true, transferencia.TransferenciaId });
        }
        public ActionResult Crear()
        {
            var ultima = Uow.Transferencias.Listado().Where(x => x.AutoNumero.StartsWith("WEB_")).OrderByDescending(x => x.TransferenciaId).FirstOrDefault();
            var numero = ultima == null
                ? 1
                : Convert.ToInt32(ultima.AutoNumero.Replace("WEB_", "")) + 1;
            var transferencia = new Transferencia()
                                {
                                    FechaCreacion = DateTime.Now,
                                    AutoNumero = String.Format("WEB_{0}", numero),
                                    UsuarioId = UsuarioActual.Usuario.UsuarioId
                                };

            if (UsuarioActual.Cuenta.MaxiKioscoIdentifierPredeterminadoTransferencias != null)
            {
                var maxi = Uow.MaxiKioscos.Obtener(m => m.Identifier == UsuarioActual.Cuenta.MaxiKioscoIdentifierPredeterminadoTransferencias);
                transferencia.OrigenId = maxi.MaxiKioscoId;
            }
            ViewBag.CantidadIngresada = null;
            return PartialView(transferencia);
        }
        public ActionResult Editar(Transferencia transferencia, FormCollection collection)
        {
            if (!ModelState.IsValid)
            {
                return new HttpStatusCodeResult(HttpStatusCode.InternalServerError);
            }

            var aprobar = Convert.ToBoolean(collection["aprobar"]);

            TransferenciasNegocio.Editar(transferencia, aprobar);

            return Json(new { exito = true, transferencia.TransferenciaId });
        }