Esempio n. 1
0
        public string PostMovimiento(MovimientoProducto movimiento)
        {
            try
            {
                DataTable table = new DataTable();


                string query = @"insert into MovimientosProductos values ('" + movimiento.ClaveProducto + "','" + movimiento.Producto + "','" + movimiento.Marca + "','" + movimiento.Origen + "','" + movimiento.Presentacion + "','" + movimiento.Tipo + "'," + movimiento.Cantidad + ")";

                using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["Prolapp"].ConnectionString))
                    using (var cmd = new SqlCommand(query, con))
                        using (var da = new SqlDataAdapter(cmd))
                        {
                            cmd.CommandType = CommandType.Text;
                            da.Fill(table);
                        }



                return("Movimiento Agregado");
            }
            catch (Exception)
            {
                return("Se produjo un error");
            }
        }
        public JsonResult CrearDetalle(MovimientoProducto movimientoProducto, string lotesJson)
        {
            var jsonResponse = new JsonResponse();

            if (ModelState.IsValid)
            {
                try
                {
                    var lotes        = new JavaScriptSerializer().Deserialize <IList <MovimientoProductoStock> >(lotesJson);
                    var presentacion = PresentacionBL.Instancia.Single(movimientoProducto.IdPresentacion);
                    var producto     = ProductoBL.Instancia.Single(movimientoProducto.IdProducto);
                    var operacion    = OperacionBL.Instancia.Single(IdOperacion);

                    movimientoProducto.Secuencia          = DetalleDevolucion.Count + 1;
                    movimientoProducto.CodigoProducto     = producto.Codigo;
                    movimientoProducto.NombreProducto     = producto.Nombre;
                    movimientoProducto.TipoProducto       = producto.TipoProducto;
                    movimientoProducto.TipoClasificacion  = producto.TipoClasificacion;
                    movimientoProducto.NombrePresentacion = presentacion.Nombre;


                    if (!producto.EsExonerado)
                    {
                        movimientoProducto.MontoImpuesto      = movimientoProducto.PrecioNeto * (Igv.Monto / 100);
                        movimientoProducto.PorcentajeImpuesto = Igv.Monto / 100;
                    }

                    movimientoProducto.SubTotal   = movimientoProducto.PrecioNeto + movimientoProducto.MontoImpuesto;
                    movimientoProducto.SignoStock = operacion.SignoStock;
                    movimientoProducto.Peso       = presentacion.Peso;
                    movimientoProducto.MovimientoProductoStock = new List <MovimientoProductoStock>();

                    foreach (var movimientoProductoStock in lotes)
                    {
                        movimientoProductoStock.FechaVencimiento = Convert.ToDateTime(movimientoProductoStock.FechaVencimientoFormato);
                        movimientoProducto.MovimientoProductoStock.Add(movimientoProductoStock);
                    }

                    if (movimientoProducto.IdMovimientoProducto == 0)
                    {
                        movimientoProducto.IdMovimientoProducto = DetalleDevolucion.Count == 0 ? 1 : DetalleDevolucion.Max(p => p.IdMovimientoProducto) + 1;
                    }

                    DetalleDevolucion.Add(movimientoProducto);

                    jsonResponse.Success = true;
                    jsonResponse.Message = "Se Proceso con exito.";
                }
                catch (Exception ex)
                {
                    jsonResponse.Message = ex.Message;
                }
            }
            else
            {
                jsonResponse.Message = "Por favor ingrese todos los campos requeridos";
            }
            return(Json(jsonResponse, JsonRequestBehavior.AllowGet));
        }
Esempio n. 3
0
        public JsonResult ModificarDetalle(MovimientoProducto movimientoProducto, int tipoCompra)
        {
            var jsonResponse = new JsonResponse();

            if (ModelState.IsValid)
            {
                try
                {
                    var movimientoProductoOriginal = DetalleOrdenCompra.SingleOrDefault(p => p.IdMovimientoProducto == movimientoProducto.IdMovimientoProducto);

                    if (movimientoProductoOriginal != null)
                    {
                        var presentacion = PresentacionBL.Instancia.Single(movimientoProducto.IdPresentacion);
                        var producto     = ProductoBL.Instancia.Single(movimientoProducto.IdProducto);
                        var operacion    = OperacionBL.Instancia.Single(IdOperacion);

                        movimientoProductoOriginal.IdProducto          = movimientoProducto.IdProducto;
                        movimientoProductoOriginal.IdPresentacion      = movimientoProducto.IdPresentacion;
                        movimientoProductoOriginal.CodigoProducto      = producto.Codigo;
                        movimientoProductoOriginal.NombreProducto      = producto.Nombre;
                        movimientoProductoOriginal.TipoProducto        = producto.TipoProducto;
                        movimientoProductoOriginal.TipoClasificacion   = producto.TipoClasificacion;
                        movimientoProductoOriginal.NombrePresentacion  = presentacion.Nombre;
                        movimientoProductoOriginal.PrecioBase          = movimientoProducto.PrecioBase;
                        movimientoProductoOriginal.Cantidad            = movimientoProducto.Cantidad;
                        movimientoProductoOriginal.MontoDescuento      = movimientoProducto.MontoDescuento;
                        movimientoProductoOriginal.PorcentajeDescuento = movimientoProducto.PorcentajeDescuento;
                        movimientoProductoOriginal.PrecioNeto          = movimientoProducto.PrecioNeto;

                        if (tipoCompra == 1)
                        {
                            if (!producto.EsExonerado)
                            {
                                movimientoProductoOriginal.MontoImpuesto      = movimientoProducto.PrecioNeto * (Igv.Monto / 100);
                                movimientoProductoOriginal.PorcentajeImpuesto = Igv.Monto / 100;
                            }
                        }

                        movimientoProductoOriginal.SubTotal   = movimientoProducto.PrecioNeto + movimientoProducto.MontoImpuesto;
                        movimientoProductoOriginal.SignoStock = operacion.SignoStock;
                        movimientoProductoOriginal.Peso       = presentacion.Peso;
                    }

                    jsonResponse.Success = true;
                    jsonResponse.Message = "Se Proceso con exito";
                }
                catch (Exception ex)
                {
                    jsonResponse.Message = ex.Message;
                }
            }
            else
            {
                jsonResponse.Message = "Por favor ingrese todos los campos requeridos";
            }
            return(Json(jsonResponse, JsonRequestBehavior.AllowGet));
        }
        public ActionResult CrearDetalle()
        {
            ViewData["Accion"] = "CrearDetalle";

            var movimientoProducto = new MovimientoProducto();

            movimientoProducto.IdMovimientoProducto    = DetalleTransferencia.Count == 0 ? 1 : DetalleTransferencia.Max(p => p.IdMovimientoProducto) + 1;
            movimientoProducto.MovimientoProductoStock = new List <MovimientoProductoStock>();

            return(PartialView("DetalleTransferenciaPanel", movimientoProducto));
        }
        private void AsignarCampoMovimiento(MovimientoProducto movimiento, string nombreColumna, string valorCelda)
        {
            switch (nombreColumna)
            {
            case "fecha":
                movimiento.Fecha = valorCelda;
                break;

            case "código":
                movimiento.IdProducto = valorCelda;
                break;

            case "producto":
                movimiento.Producto = valorCelda;
                break;

            case "precio":
                movimiento.Precio = valorCelda != "-" ? Convert.ToDouble(valorCelda) : 0;
                break;

            case "stock bajo":
                movimiento.StockBajo = valorCelda != "-" ? Convert.ToDouble(valorCelda) : 0;
                break;

            case "stock":
                if (valorCelda != "-")
                {
                    movimiento.Stock = Convert.ToDouble(valorCelda);
                }
                break;

            case "cantidad":
                movimiento.Cantidad = valorCelda != "-" ? Convert.ToDouble(valorCelda) : 0;
                break;

            case "precio total":
                movimiento.PrecioTotal = valorCelda != "-" ? Convert.ToDouble(valorCelda) : 0;
                break;

            case "lugar":
                movimiento.Lugar = valorCelda;
                break;

            case "usuario":
                movimiento.Usuario = valorCelda;
                break;

            case "eliminado":
                movimiento.Eliminado = valorCelda == "sí" ? true : false;
                break;
            }
        }
        public JsonResult ModificarDetalle(MovimientoProducto movimientoProducto, string lotesJson, string idAlmacen)
        {
            var jsonResponse = new JsonResponse();

            if (ModelState.IsValid)
            {
                try
                {
                    var movimientoProductoOriginal = DetalleTransferencia.SingleOrDefault(p => p.IdMovimientoProducto == movimientoProducto.IdMovimientoProducto);

                    if (movimientoProductoOriginal != null)
                    {
                        var lotes        = new JavaScriptSerializer().Deserialize <IList <MovimientoProductoStock> >(lotesJson);
                        var presentacion = PresentacionBL.Instancia.Single(movimientoProducto.IdPresentacion);
                        var producto     = ProductoBL.Instancia.Single(movimientoProducto.IdProducto);
                        var operacion    = OperacionBL.Instancia.Single(IdOperacion);

                        movimientoProductoOriginal.CodigoProducto     = producto.Codigo;
                        movimientoProductoOriginal.NombreProducto     = producto.Nombre;
                        movimientoProductoOriginal.TipoProducto       = producto.TipoProducto;
                        movimientoProductoOriginal.TipoClasificacion  = producto.TipoClasificacion;
                        movimientoProductoOriginal.NombrePresentacion = presentacion.Nombre;
                        movimientoProductoOriginal.SignoStock         = operacion.SignoStock;
                        movimientoProductoOriginal.Peso              = presentacion.Peso;
                        movimientoProductoOriginal.Cantidad          = movimientoProducto.Cantidad;
                        movimientoProductoOriginal.CantidadDocumento = movimientoProducto.CantidadDocumento;

                        var secuencia = 0;
                        movimientoProductoOriginal.MovimientoProductoStock = new List <MovimientoProductoStock>();
                        foreach (var movimientoProductoStock in lotes)
                        {
                            movimientoProductoStock.Secuencia        = ++secuencia;
                            movimientoProductoStock.FechaVencimiento = Convert.ToDateTime(movimientoProductoStock.FechaVencimientoFormato);
                            movimientoProductoOriginal.MovimientoProductoStock.Add(movimientoProductoStock);
                        }
                    }

                    jsonResponse.Success = true;
                    jsonResponse.Message = "Se Proceso con exito";
                }
                catch (Exception ex)
                {
                    jsonResponse.Message = ex.Message;
                }
            }
            else
            {
                jsonResponse.Message = "Por favor ingrese todos los campos requeridos";
            }
            return(Json(jsonResponse, JsonRequestBehavior.AllowGet));
        }
Esempio n. 7
0
        public ActionResult CrearDetalle()
        {
            ViewData["Accion"] = "CrearDetalle";

            var movimientoProducto = new MovimientoProducto();

            if (DetalleCompra == null)
            {
                DetalleCompra = new List <MovimientoProducto>();
            }

            movimientoProducto.IdMovimientoProducto    = DetalleCompra.Count == 0 ? 1 : DetalleCompra.Max(p => p.IdMovimientoProducto) + 1;
            movimientoProducto.MovimientoProductoStock = new List <MovimientoProductoStock>();

            return(PartialView("DetalleCompraPanel", movimientoProducto));
        }
        private List <MovimientoProducto> ObtenerDatosDesdeHG()
        {
            var      linkHistoricosCeldas = CuentaUsuario.ObtenerLinkHojaHistoricosCeldas(CuentaUsuario.ObtenerLinkHojaConsulta());
            CellFeed celdas = _servicioGoogle.ObtenerCeldasDeUnaHoja(linkHistoricosCeldas, _servicio);

            var listaMovimientos  = new List <MovimientoProducto>();
            var movimiento        = new MovimientoProducto();
            var diccionarioCampos = new Dictionary <uint, string>();

            foreach (CellEntry celda in celdas.Entries)
            {
                var valorCelda = celda.Value.Trim().ToLower();
                if (celda.Row != 1)
                {
                    if (celda.Column == 1)
                    {
                        movimiento = new MovimientoProducto();
                    }

                    var nombreColumna = diccionarioCampos[celda.Column];
                    if (nombreColumna != null)
                    {
                        AsignarCampoMovimiento(movimiento, nombreColumna, valorCelda);
                    }

                    if (celda.Column == celdas.ColCount.Count)
                    {
                        listaMovimientos.Add(movimiento);
                    }
                }
                else
                {
                    if (!valorCelda.Contains("stock") || valorCelda == "stock bajo")
                    {
                        diccionarioCampos[celda.Column] = valorCelda;
                    }
                    else
                    {
                        diccionarioCampos[celda.Column] = "stock";
                    }
                }
            }

            return(listaMovimientos);
        }
        public JsonResult CrearDetalle(int idMovimientoProducto, string lote, int idAlmacen, int cantidad)
        {
            var jsonResponse = new JsonResponse();

            try
            {
                foreach (var movimientoProducto in CompraSeleccionada.MovimientoProducto)
                {
                    if (movimientoProducto.IdMovimientoProducto == idMovimientoProducto)
                    {
                        var movimientoProductoStock = movimientoProducto.MovimientoProductoStock.FirstOrDefault(p => p.LoteSerie == lote);
                        if (movimientoProductoStock != null)
                        {
                            movimientoProductoStock.Cantidad -= cantidad;
                            movimientoProducto.Cantidad      -= cantidad;

                            var detalle = DetalleTransferencia.FirstOrDefault(p => p.IdMovimientoProducto == idMovimientoProducto);

                            if (detalle == null)
                            {
                                detalle = new MovimientoProducto
                                {
                                    IdMovimientoProducto    = movimientoProducto.IdMovimientoProducto,
                                    Secuencia               = DetalleTransferencia.Count + 1,
                                    IdProducto              = movimientoProducto.IdProducto,
                                    IdPresentacion          = movimientoProducto.IdPresentacion,
                                    TipoClasificacion       = movimientoProducto.TipoClasificacion,
                                    TipoProducto            = movimientoProducto.TipoProducto,
                                    SignoStock              = -1 * movimientoProducto.SignoStock,
                                    CodigoProducto          = movimientoProducto.CodigoProducto,
                                    NombreProducto          = movimientoProducto.NombreProducto,
                                    MovimientoProductoStock = new List <MovimientoProductoStock>(),
                                    IdAlmacen               = idAlmacen
                                };
                                DetalleTransferencia.Add(detalle);
                            }
                            detalle.Cantidad += cantidad;

                            var detalleLote = detalle.MovimientoProductoStock.FirstOrDefault(p => p.LoteSerie == lote);

                            if (detalleLote == null)
                            {
                                var almacen = AlmacenBL.Instancia.Single(idAlmacen);
                                detalleLote = new MovimientoProductoStock
                                {
                                    LoteSerie               = lote,
                                    Cantidad                = cantidad,
                                    IdAlmacen               = idAlmacen,
                                    NombreAlmacen           = almacen.Nombre,
                                    FechaVencimiento        = movimientoProductoStock.FechaVencimiento,
                                    FechaVencimientoFormato = movimientoProductoStock.FechaVencimientoFormato
                                };
                                detalle.MovimientoProductoStock.Add(detalleLote);
                            }
                            else
                            {
                                if (detalleLote.IdAlmacen == idAlmacen)
                                {
                                    detalleLote.Cantidad += cantidad;
                                }
                                else
                                {
                                    var almacen = AlmacenBL.Instancia.Single(idAlmacen);
                                    detalleLote = new MovimientoProductoStock
                                    {
                                        LoteSerie               = lote,
                                        Cantidad                = cantidad,
                                        IdAlmacen               = idAlmacen,
                                        NombreAlmacen           = almacen.Nombre,
                                        FechaVencimiento        = movimientoProductoStock.FechaVencimiento,
                                        FechaVencimientoFormato = movimientoProductoStock.FechaVencimientoFormato
                                    };
                                    detalle.MovimientoProductoStock.Add(detalleLote);
                                }
                            }
                        }
                        break;
                    }
                }

                jsonResponse.Data    = DetalleTransferencia;
                jsonResponse.Success = true;
                jsonResponse.Message = "Se Proceso con exito.";
            }
            catch (Exception ex)
            {
                jsonResponse.Message = ex.Message;
            }

            return(Json(jsonResponse, JsonRequestBehavior.AllowGet));
        }
Esempio n. 10
0
        public JsonResult CrearDetalle(MovimientoProducto movimientoProducto)
        {
            var jsonResponse = new JsonResponse();

            if (ModelState.IsValid)
            {
                try
                {
                    var existePorductoRepetido = false;
                    foreach (var detalle in DetalleVenta)
                    {
                        if (movimientoProducto.IdProducto == detalle.IdProducto &&
                            movimientoProducto.IdPresentacion == detalle.IdPresentacion)
                        {
                            existePorductoRepetido = true;
                        }
                    }

                    if (existePorductoRepetido)
                    {
                        jsonResponse.Success = false;
                        jsonResponse.Message = "No puede ingresar un mismo producto en mas de un Item.";
                    }
                    else
                    {
                        //var productoStock  = ProductoStockBL.Instancia.Single(movimientoProducto.IdPresentacion, movimientoProducto.IdAlmacen, )

                        var presentacion = PresentacionBL.Instancia.Single(movimientoProducto.IdPresentacion);
                        var producto     = ProductoBL.Instancia.Single(movimientoProducto.IdProducto);
                        var operacion    = OperacionBL.Instancia.Single(IdOperacion);

                        movimientoProducto.Secuencia          = DetalleVenta.Count + 1;
                        movimientoProducto.CodigoProducto     = producto.Codigo;
                        movimientoProducto.NombreProducto     = producto.Nombre;
                        movimientoProducto.TipoProducto       = producto.TipoProducto;
                        movimientoProducto.TipoClasificacion  = producto.TipoClasificacion;
                        movimientoProducto.NombrePresentacion = presentacion.Nombre;

                        if (!producto.EsExonerado)
                        {
                            movimientoProducto.MontoImpuesto      = (movimientoProducto.PrecioNeto.Redondear(2) * (Igv.Monto / 100)).Redondear(2);
                            movimientoProducto.PorcentajeImpuesto = Igv.Monto / 100;
                        }

                        movimientoProducto.SubTotal   = movimientoProducto.PrecioNeto.Redondear(2) + movimientoProducto.MontoImpuesto.Redondear(2);
                        movimientoProducto.SignoStock = operacion.SignoStock;
                        movimientoProducto.Peso       = presentacion.Peso;
                        movimientoProducto.MovimientoProductoStock = new List <MovimientoProductoStock>();

                        if (movimientoProducto.IdMovimientoProducto == 0)
                        {
                            movimientoProducto.IdMovimientoProducto = DetalleVenta.Count == 0 ? 1 : DetalleVenta.Max(p => p.IdMovimientoProducto) + 1;
                        }

                        DetalleVenta.Add(movimientoProducto);

                        jsonResponse.Success = true;
                        jsonResponse.Message = "El detalle del producto fue ingresado correctamente.";
                    }
                }
                catch (Exception ex)
                {
                    jsonResponse.Message = ex.Message;
                }
            }
            else
            {
                jsonResponse.Message = "Por favor ingrese todos los campos requeridos";
            }
            return(Json(jsonResponse, JsonRequestBehavior.AllowGet));
        }
Esempio n. 11
0
        public JsonResult ModificarDetalle(MovimientoProducto movimientoProducto, string lotesJson, int tipoCompra)
        {
            var jsonResponse = new JsonResponse();

            if (ModelState.IsValid)
            {
                try
                {
                    var movimientoProductoOriginal = DetalleCompra.SingleOrDefault(p => p.IdMovimientoProducto == movimientoProducto.IdMovimientoProducto);

                    if (movimientoProductoOriginal != null)
                    {
                        var existePorductoRepetido = false;
                        foreach (var detalle in DetalleCompra)
                        {
                            if (movimientoProducto.IdProducto == detalle.IdProducto &&
                                movimientoProducto.IdPresentacion == detalle.IdPresentacion &&
                                movimientoProducto.IdMovimientoProducto != detalle.IdMovimientoProducto)
                            {
                                existePorductoRepetido = true;
                            }
                        }

                        if (existePorductoRepetido)
                        {
                            jsonResponse.Success = false;
                            jsonResponse.Message = "No puede ingresar un mismo producto en mas de un Item.";
                        }
                        else
                        {
                            var lotes        = new JavaScriptSerializer().Deserialize <IList <MovimientoProductoStock> >(lotesJson);
                            var presentacion = PresentacionBL.Instancia.Single(movimientoProducto.IdPresentacion);
                            var producto     = ProductoBL.Instancia.Single(movimientoProducto.IdProducto);
                            var operacion    = OperacionBL.Instancia.Single(IdOperacion);

                            movimientoProductoOriginal.IdProducto          = movimientoProducto.IdProducto;
                            movimientoProductoOriginal.IdPresentacion      = movimientoProducto.IdPresentacion;
                            movimientoProductoOriginal.CodigoProducto      = producto.Codigo;
                            movimientoProductoOriginal.NombreProducto      = producto.Nombre;
                            movimientoProductoOriginal.TipoProducto        = producto.TipoProducto;
                            movimientoProductoOriginal.TipoClasificacion   = producto.TipoClasificacion;
                            movimientoProductoOriginal.NombrePresentacion  = presentacion.Nombre;
                            movimientoProductoOriginal.PrecioBase          = movimientoProducto.PrecioBase;
                            movimientoProductoOriginal.Cantidad            = movimientoProducto.Cantidad;
                            movimientoProductoOriginal.MontoDescuento      = movimientoProducto.MontoDescuento;
                            movimientoProductoOriginal.PorcentajeDescuento = movimientoProducto.PorcentajeDescuento;
                            movimientoProductoOriginal.PrecioNeto          = movimientoProducto.PrecioNeto;
                            movimientoProductoOriginal.CantidadDocumento   = movimientoProducto.CantidadDocumento;

                            if (tipoCompra == 1)
                            {
                                if (!producto.EsExonerado)
                                {
                                    movimientoProductoOriginal.MontoImpuesto      = movimientoProducto.PrecioNeto * (Igv.Monto / 100);
                                    movimientoProductoOriginal.PorcentajeImpuesto = Igv.Monto / 100;
                                }
                            }

                            movimientoProductoOriginal.SubTotal   = movimientoProducto.PrecioNeto + movimientoProducto.MontoImpuesto;
                            movimientoProductoOriginal.SignoStock = operacion.SignoStock;
                            movimientoProductoOriginal.Peso       = presentacion.Peso;
                            movimientoProductoOriginal.MovimientoProductoStock = new List <MovimientoProductoStock>();

                            foreach (var movimientoProductoStock in lotes)
                            {
                                movimientoProductoStock.FechaVencimiento = Convert.ToDateTime(movimientoProductoStock.FechaVencimientoFormato);
                                movimientoProductoOriginal.MovimientoProductoStock.Add(movimientoProductoStock);
                            }

                            jsonResponse.Success = true;
                            jsonResponse.Message = "El detalle del producto fue ingresado correctamente.";
                        }
                    }
                    else
                    {
                        jsonResponse.Success = false;
                        jsonResponse.Message = "No existe el producto dentro de la lista de los ya ingresados.";
                    }
                }
                catch (Exception ex)
                {
                    jsonResponse.Message = ex.Message;
                }
            }
            else
            {
                jsonResponse.Message = "Por favor ingrese todos los campos requeridos";
            }
            return(Json(jsonResponse, JsonRequestBehavior.AllowGet));
        }
        public JsonResult CrearDetalle(MovimientoProducto movimientoProducto, string lotesJson, string idAlmacen)
        {
            var jsonResponse = new JsonResponse();

            if (ModelState.IsValid)
            {
                try
                {
                    var lotes        = new JavaScriptSerializer().Deserialize <IList <MovimientoProductoStock> >(lotesJson);
                    var presentacion = PresentacionBL.Instancia.Single(movimientoProducto.IdPresentacion);
                    var producto     = ProductoBL.Instancia.Single(movimientoProducto.IdProducto);
                    var operacion    = OperacionBL.Instancia.Single(IdOperacion);

                    movimientoProducto.Secuencia          = DetalleTransferencia.Count + 1;
                    movimientoProducto.CodigoProducto     = producto.Codigo;
                    movimientoProducto.NombreProducto     = producto.Nombre;
                    movimientoProducto.TipoProducto       = producto.TipoProducto;
                    movimientoProducto.TipoClasificacion  = producto.TipoClasificacion;
                    movimientoProducto.NombrePresentacion = presentacion.Nombre;
                    movimientoProducto.SignoStock         = operacion.SignoStock;
                    movimientoProducto.Peso = presentacion.Peso;

                    foreach (var movimientoProductoStock in lotes)
                    {
                        foreach (var detalle in DetalleTransferencia)
                        {
                            if (movimientoProducto.IdPresentacion == detalle.IdPresentacion)
                            {
                                foreach (var lote in detalle.MovimientoProductoStock)
                                {
                                    if (movimientoProductoStock.LoteSerie == lote.LoteSerie)
                                    {
                                        throw new Exception(string.Format("El lote {0}, ya ha sido ingresado junto con el detalle Nro. {1}", lote.LoteSerie, detalle.Secuencia));
                                    }
                                }
                            }
                        }
                    }

                    foreach (var movimientoProductoStock in lotes)
                    {
                        var productoStock = ProductoStockBL.Instancia.Single(movimientoProducto.IdPresentacion,
                                                                             Convert.ToInt32(idAlmacen),
                                                                             movimientoProductoStock.LoteSerie);
                        if (productoStock == null)
                        {
                            throw new Exception(string.Format("El lote {0} no tiene Stock para el Lote de origen.", movimientoProductoStock.LoteSerie));
                        }
                        else
                        {
                            if (movimientoProductoStock.Cantidad > productoStock.StockFisico)
                            {
                                throw new Exception(string.Format("La cantidad ingresada para el lote {0} es mayor al stock actual, el cual es {1}", movimientoProductoStock.LoteSerie, productoStock.StockFisico));
                            }
                        }
                    }

                    var secuencia = 0;
                    movimientoProducto.MovimientoProductoStock = new List <MovimientoProductoStock>();
                    foreach (var movimientoProductoStock in lotes)
                    {
                        movimientoProductoStock.Secuencia        = ++secuencia;
                        movimientoProductoStock.FechaVencimiento = Convert.ToDateTime(movimientoProductoStock.FechaVencimientoFormato);
                        movimientoProducto.MovimientoProductoStock.Add(movimientoProductoStock);
                    }

                    if (movimientoProducto.IdMovimientoProducto == 0)
                    {
                        movimientoProducto.IdMovimientoProducto = DetalleTransferencia.Count == 0 ? 1 : DetalleTransferencia.Max(p => p.IdMovimientoProducto) + 1;
                    }

                    DetalleTransferencia.Add(movimientoProducto);

                    jsonResponse.Success = true;
                    jsonResponse.Message = "Se Proceso con exito.";
                }
                catch (Exception ex)
                {
                    jsonResponse.Message = ex.Message;
                }
            }
            else
            {
                jsonResponse.Message = "Por favor ingrese todos los campos requeridos";
            }
            return(Json(jsonResponse, JsonRequestBehavior.AllowGet));
        }
        public void AplicarTraslado(int intIdTraslado, int intIdUsuario)
        {
            decimal           decTotalInventario = 0;
            ParametroContable ivaPorPagarParam   = null;
            ParametroContable efectivoParam      = null;
            ParametroContable trasladosParam     = null;
            ParametroContable lineaParam         = null;
            DataTable         dtbInventarios     = new DataTable();

            dtbInventarios.Columns.Add("IdLinea", typeof(int));
            dtbInventarios.Columns.Add("Total", typeof(decimal));
            dtbInventarios.PrimaryKey = new DataColumn[] { dtbInventarios.Columns[0] };
            Asiento asiento = null;

            using (IDbContext dbContext = localContainer.Resolve <IDbContext>())
            {
                try
                {
                    Traslado traslado = dbContext.TrasladoRepository.Include("DetalleTraslado").Where(x => x.IdTraslado == intIdTraslado).FirstOrDefault();
                    if (traslado == null)
                    {
                        throw new Exception("El registro de traslado por aplicar no existe.");
                    }
                    Empresa empresa = dbContext.EmpresaRepository.Find(traslado.IdEmpresa);
                    if (empresa == null)
                    {
                        throw new BusinessException("Empresa no registrada en el sistema. Por favor, pongase en contacto con su proveedor del servicio.");
                    }
                    SucursalPorEmpresa sucursal = dbContext.SucursalPorEmpresaRepository.FirstOrDefault(x => x.IdEmpresa == traslado.IdEmpresa && x.IdSucursal == traslado.IdSucursalDestino);
                    if (sucursal == null)
                    {
                        throw new BusinessException("Sucursal no registrada en el sistema. Por favor, pongase en contacto con su proveedor del servicio.");
                    }
                    if (sucursal.CierreEnEjecucion)
                    {
                        throw new BusinessException("Se está ejecutando el cierre en este momento. No es posible registrar la transacción.");
                    }
                    if (empresa.Contabiliza)
                    {
                        ivaPorPagarParam = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.IVAPorPagar).FirstOrDefault();
                        efectivoParam    = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.Efectivo).FirstOrDefault();
                        if (ivaPorPagarParam == null || efectivoParam == null)
                        {
                            throw new BusinessException("La parametrización contable está incompleta y no se puede continuar. Por favor verificar.");
                        }
                    }
                    traslado.Aplicado      = true;
                    traslado.IdAplicadoPor = intIdUsuario;
                    dbContext.NotificarModificacion(traslado);
                    foreach (var detalleTraslado in traslado.DetalleTraslado)
                    {
                        Producto producto = dbContext.ProductoRepository.Include("Linea").FirstOrDefault(x => x.IdProducto == detalleTraslado.IdProducto);
                        if (producto == null)
                        {
                            throw new Exception("El producto asignado al detalle del traslado no existe");
                        }
                        if (producto.Tipo != StaticTipoProducto.Producto)
                        {
                            throw new BusinessException("El tipo de producto por trasladar no puede ser un servicio. Por favor verificar.");
                        }
                        ExistenciaPorSucursal existencias = dbContext.ExistenciaPorSucursalRepository.Where(x => x.IdEmpresa == producto.IdEmpresa && x.IdProducto == producto.IdProducto && x.IdSucursal == traslado.IdSucursalOrigen).FirstOrDefault();
                        if (existencias != null)
                        {
                            existencias.Cantidad -= detalleTraslado.Cantidad;
                            dbContext.NotificarModificacion(existencias);
                        }
                        else
                        {
                            ExistenciaPorSucursal nuevoRegistro = new ExistenciaPorSucursal
                            {
                                IdEmpresa  = traslado.IdEmpresa,
                                IdSucursal = traslado.IdSucursalOrigen,
                                IdProducto = detalleTraslado.IdProducto,
                                Cantidad   = detalleTraslado.Cantidad * -1
                            };
                            dbContext.ExistenciaPorSucursalRepository.Add(nuevoRegistro);
                        }
                        MovimientoProducto movimiento = new MovimientoProducto
                        {
                            IdProducto  = producto.IdProducto,
                            IdSucursal  = traslado.IdSucursalOrigen,
                            Fecha       = DateTime.Now,
                            PrecioCosto = detalleTraslado.PrecioCosto,
                            Origen      = "Salida de mercancía por traslado entre sucursales",
                            Tipo        = StaticTipoMovimientoProducto.Salida,
                            Cantidad    = detalleTraslado.Cantidad
                        };
                        producto.MovimientoProducto.Add(movimiento);
                        existencias = dbContext.ExistenciaPorSucursalRepository.Where(x => x.IdEmpresa == producto.IdEmpresa && x.IdProducto == producto.IdProducto && x.IdSucursal == traslado.IdSucursalDestino).FirstOrDefault();
                        if (existencias != null)
                        {
                            existencias.Cantidad += detalleTraslado.Cantidad;
                            dbContext.NotificarModificacion(existencias);
                        }
                        else
                        {
                            ExistenciaPorSucursal nuevoRegistro = new ExistenciaPorSucursal
                            {
                                IdEmpresa  = traslado.IdEmpresa,
                                IdSucursal = traslado.IdSucursalDestino,
                                IdProducto = detalleTraslado.IdProducto,
                                Cantidad   = detalleTraslado.Cantidad
                            };
                            dbContext.ExistenciaPorSucursalRepository.Add(nuevoRegistro);
                        }
                        movimiento = new MovimientoProducto
                        {
                            IdProducto  = producto.IdProducto,
                            IdSucursal  = traslado.IdSucursalDestino,
                            Fecha       = DateTime.Now,
                            PrecioCosto = detalleTraslado.PrecioCosto,
                            Origen      = "Ingreso de mercancía por traslado entre sucursales",
                            Tipo        = StaticTipoMovimientoProducto.Entrada,
                            Cantidad    = detalleTraslado.Cantidad
                        };
                        producto.MovimientoProducto.Add(movimiento);
                        if (empresa.Contabiliza)
                        {
                            decimal decTotalPorLinea = Math.Round(detalleTraslado.PrecioCosto * detalleTraslado.Cantidad, 2, MidpointRounding.AwayFromZero);
                            decTotalInventario += decTotalPorLinea;
                            int intExiste = dtbInventarios.Rows.IndexOf(dtbInventarios.Rows.Find(producto.Linea.IdLinea));
                            if (intExiste >= 0)
                            {
                                dtbInventarios.Rows[intExiste]["Total"] = (decimal)dtbInventarios.Rows[intExiste]["Total"] + decTotalPorLinea;
                            }
                            else
                            {
                                DataRow data = dtbInventarios.NewRow();
                                data["IdLinea"] = producto.Linea.IdLinea;
                                data["Total"]   = decTotalPorLinea;
                                dtbInventarios.Rows.Add(data);
                            }
                        }
                    }
                    if (empresa.Contabiliza)
                    {
                        decimal decTotalDiff = decTotalInventario - traslado.Total;
                        if (decTotalDiff != 0)
                        {
                            if (decTotalDiff >= 1 || decTotalDiff <= -1)
                            {
                                throw new Exception("La diferencia de ajuste sobrepasa el valor permitido.");
                            }
                            dtbInventarios.Rows[0]["Total"] = (decimal)dtbInventarios.Rows[0]["Total"] - decTotalDiff;
                            decTotalInventario -= decTotalDiff;
                        }
                        asiento = new Asiento
                        {
                            IdEmpresa    = traslado.IdEmpresa,
                            Fecha        = traslado.Fecha,
                            TotalCredito = 0,
                            TotalDebito  = 0
                        };
                        asiento.Detalle = "Registro de traslado de mercancías entre sucursales.";
                        //Detalle asiento sucursal origne
                        DetalleAsiento detalleAsiento         = new DetalleAsiento();
                        int            intLineaDetalleAsiento = 1;
                        detalleAsiento.Linea = intLineaDetalleAsiento;
                        trasladosParam       = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.Traslados && x.IdProducto == traslado.IdSucursalOrigen).FirstOrDefault();
                        if (trasladosParam == null)
                        {
                            throw new BusinessException("No existe parametrización contable para la sucursal origen " + traslado.IdSucursalOrigen + " y no se puede continuar. Por favor verificar.");
                        }
                        detalleAsiento.IdCuenta      = trasladosParam.IdCuenta;
                        detalleAsiento.Debito        = traslado.Total;
                        detalleAsiento.SaldoAnterior = dbContext.CatalogoContableRepository.Find(detalleAsiento.IdCuenta).SaldoActual;
                        asiento.DetalleAsiento.Add(detalleAsiento);
                        asiento.TotalDebito += detalleAsiento.Debito;
                        foreach (DataRow data in dtbInventarios.Rows)
                        {
                            detalleAsiento          = new DetalleAsiento();
                            intLineaDetalleAsiento += 1;
                            detalleAsiento.Linea    = intLineaDetalleAsiento;
                            int intIdLinea = (int)data["IdLinea"];
                            lineaParam = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.LineaDeProductos && x.IdProducto == intIdLinea).FirstOrDefault();
                            if (lineaParam == null)
                            {
                                throw new BusinessException("No existe parametrización contable para la línea de producto " + intIdLinea + " y no se puede continuar. Por favor verificar.");
                            }
                            detalleAsiento.IdCuenta      = lineaParam.IdCuenta;
                            detalleAsiento.Credito       = (decimal)data["Total"];
                            detalleAsiento.SaldoAnterior = dbContext.CatalogoContableRepository.Find(detalleAsiento.IdCuenta).SaldoActual;
                            asiento.DetalleAsiento.Add(detalleAsiento);
                            asiento.TotalCredito += detalleAsiento.Credito;
                        }
                        //Detalle asiento sucursal destino
                        detalleAsiento         = new DetalleAsiento();
                        intLineaDetalleAsiento = 2;
                        detalleAsiento.Linea   = intLineaDetalleAsiento;
                        trasladosParam         = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.Traslados && x.IdProducto == traslado.IdSucursalDestino).FirstOrDefault();
                        if (trasladosParam == null)
                        {
                            throw new BusinessException("No existe parametrización contable para la sucursal destino " + traslado.IdSucursalOrigen + " y no se puede continuar. Por favor verificar.");
                        }
                        detalleAsiento.IdCuenta      = trasladosParam.IdCuenta;
                        detalleAsiento.Credito       = traslado.Total;
                        detalleAsiento.SaldoAnterior = dbContext.CatalogoContableRepository.Find(detalleAsiento.IdCuenta).SaldoActual;
                        asiento.DetalleAsiento.Add(detalleAsiento);
                        asiento.TotalCredito += detalleAsiento.Credito;
                        foreach (DataRow data in dtbInventarios.Rows)
                        {
                            detalleAsiento          = new DetalleAsiento();
                            intLineaDetalleAsiento += 1;
                            detalleAsiento.Linea    = intLineaDetalleAsiento;
                            int intIdLinea = (int)data["IdLinea"];
                            lineaParam = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.LineaDeProductos && x.IdProducto == intIdLinea).FirstOrDefault();
                            if (lineaParam == null)
                            {
                                throw new BusinessException("No existe parametrización contable para la línea de producto " + intIdLinea + " y no se puede continuar. Por favor verificar.");
                            }
                            detalleAsiento.IdCuenta      = lineaParam.IdCuenta;
                            detalleAsiento.Debito        = (decimal)data["Total"];
                            detalleAsiento.SaldoAnterior = dbContext.CatalogoContableRepository.Find(detalleAsiento.IdCuenta).SaldoActual;
                            asiento.DetalleAsiento.Add(detalleAsiento);
                            asiento.TotalDebito += detalleAsiento.Debito;
                        }
                        IContabilidadService servicioContabilidad = new ContabilidadService();
                        servicioContabilidad.AgregarAsiento(dbContext, asiento);
                    }
                    dbContext.Commit();
                    if (asiento != null)
                    {
                        traslado.IdAsiento = asiento.IdAsiento;
                        dbContext.NotificarModificacion(traslado);
                        asiento.Detalle += traslado.IdTraslado;
                        dbContext.NotificarModificacion(asiento);
                    }
                    dbContext.Commit();
                }
                catch (BusinessException ex)
                {
                    dbContext.RollBack();
                    throw ex;
                }
                catch (Exception ex)
                {
                    dbContext.RollBack();
                    log.Error("Error al aplicar el registro de traslado: ", ex);
                    throw new Exception("Se produjo un error aplicando la información del traslado. Por favor consulte con su proveedor.");
                }
            }
        }
Esempio n. 14
0
        public JsonResult ModificarDetalle(MovimientoProducto movimientoProducto, string lotesJson)
        {
            var jsonResponse = new JsonResponse();

            if (ModelState.IsValid)
            {
                try
                {
                    var movimientoProductoOriginal = DetalleOrdenPedido.SingleOrDefault(p => p.IdMovimientoProducto == movimientoProducto.IdMovimientoProducto);

                    if (movimientoProductoOriginal != null)
                    {
                        var lotes        = new JavaScriptSerializer().Deserialize <IList <MovimientoProductoStock> >(lotesJson);
                        var presentacion = PresentacionBL.Instancia.Single(movimientoProducto.IdPresentacion);
                        var producto     = ProductoBL.Instancia.Single(movimientoProducto.IdProducto);
                        var operacion    = OperacionBL.Instancia.Single(IdOperacion);

                        movimientoProductoOriginal.IdProducto           = movimientoProducto.IdProducto;
                        movimientoProductoOriginal.IdPresentacion       = movimientoProducto.IdPresentacion;
                        movimientoProductoOriginal.CodigoProducto       = producto.Codigo;
                        movimientoProductoOriginal.NombreProducto       = producto.Nombre;
                        movimientoProductoOriginal.TipoProducto         = producto.TipoProducto;
                        movimientoProductoOriginal.TipoClasificacion    = producto.TipoClasificacion;
                        movimientoProductoOriginal.NombrePresentacion   = presentacion.Nombre;
                        movimientoProductoOriginal.PrecioBase           = movimientoProducto.PrecioBase;
                        movimientoProductoOriginal.Cantidad             = movimientoProducto.Cantidad;
                        movimientoProductoOriginal.MontoDescuento       = movimientoProducto.MontoDescuento;
                        movimientoProductoOriginal.PorcentajeDescuento  = movimientoProducto.PorcentajeDescuento;
                        movimientoProductoOriginal.MontoDescuento2      = movimientoProducto.MontoDescuento2;
                        movimientoProductoOriginal.PorcentajeDescuento2 = movimientoProducto.PorcentajeDescuento2;
                        movimientoProductoOriginal.PrecioNeto           = movimientoProducto.PrecioNeto;

                        if (!producto.EsExonerado)
                        {
                            movimientoProductoOriginal.MontoImpuesto      = (movimientoProducto.PrecioNeto.Redondear(2) * (Igv.Monto / 100)).Redondear(2);
                            movimientoProductoOriginal.PorcentajeImpuesto = Igv.Monto / 100;
                        }

                        movimientoProductoOriginal.SubTotal   = movimientoProducto.PrecioNeto.Redondear(2) + movimientoProductoOriginal.MontoImpuesto.Redondear(2);
                        movimientoProductoOriginal.SignoStock = operacion.SignoStock;
                        movimientoProductoOriginal.Peso       = presentacion.Peso;

                        movimientoProductoOriginal.MovimientoProductoStock = new List <MovimientoProductoStock>();

                        foreach (var movimientoProductoStock in lotes)
                        {
                            movimientoProductoStock.FechaVencimiento = Convert.ToDateTime(movimientoProductoStock.FechaVencimientoFormato);
                            movimientoProductoOriginal.MovimientoProductoStock.Add(movimientoProductoStock);
                        }
                    }

                    jsonResponse.Success = true;
                    jsonResponse.Message = "Se Proceso con exito";
                }
                catch (Exception ex)
                {
                    jsonResponse.Message = ex.Message;
                }
            }
            else
            {
                jsonResponse.Message = "Por favor ingrese todos los campos requeridos";
            }
            return(Json(jsonResponse, JsonRequestBehavior.AllowGet));
        }