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)); }
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)); }
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)); }
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)); }
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."); } } }
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)); }