public Response_GetFacturaWithDetailscs Get(int userId) // buscar una factura en curso { Response_GetFacturaWithDetailscs facturaResponse = new Response_GetFacturaWithDetailscs(); RespuestaTransaccion RT = new RespuestaTransaccion(); GetFacturaDetailResponse consulta = new GetFacturaDetailResponse(); using (FacturadorWebContext bd = new FacturadorWebContext()) { var usuario = bd.Usuario.SingleOrDefault(x => x.Id == userId && x.Estado == true); if (usuario != null) { var factura = bd.Factura.SingleOrDefault(x => x.IdUsuario == userId && x.IdEstado == 1); if (factura != null) { facturaResponse = consulta.ConsultarDetalleFactura(factura); } else { facturaResponse.respuestaTransaccion = RT.GenerarRespuesta("Error. El operador no tiene facturas en proceso", "0025"); } } else { facturaResponse.respuestaTransaccion = RT.GenerarRespuesta("Error. El operador no existe o no tiene permisos para facturar", "0026"); } } return(facturaResponse); }
public async Task <RespuestaTransaccion> PutAsync([FromBody] Request_Objetc_Add_Producto_To_Factura entrada) // restar producto de la factura { RespuestaTransaccion RG = new RespuestaTransaccion(); GetFacturaDetailResponse consulta = new GetFacturaDetailResponse(); Response_GetFacturaWithDetailscs facturaResponse = new Response_GetFacturaWithDetailscs(); using (FacturadorWebContext bd = new FacturadorWebContext()) { var facturaEnProceso = bd.Factura.FirstOrDefault(x => x.IdUsuario == entrada.idUsuario && x.IdEstado == 1); if (facturaEnProceso != null) { var productoInventario = bd.Inventario.FirstOrDefault(x => x.Id == entrada.codBarras); if (productoInventario != null) { productoInventario.TotalProceso--; bd.SaveChanges(); var productoProductoEnProceso = bd.Producto.FirstOrDefault(x => x.IdInventario == entrada.codBarras && x.IdFactura == facturaEnProceso.Id); if (productoProductoEnProceso != null) { if (productoProductoEnProceso.Cantidad > 0) { productoProductoEnProceso.Cantidad--; productoProductoEnProceso.ValorTotal = productoProductoEnProceso.ValorUnitario * productoProductoEnProceso.Cantidad; productoProductoEnProceso.ValorTotalDescuento = (productoProductoEnProceso.PorcentajeDescuento * productoProductoEnProceso.ValorTotal) / 100; productoProductoEnProceso.ValorTotalIva = (productoProductoEnProceso.PorcentajeIva * productoProductoEnProceso.ValorTotal) / 100; bd.SaveChanges(); } else { return(RG.GenerarRespuesta("Error, ya se desconto el total de unidades disponibles del producto para la factura", "0026")); } } else { return(RG.GenerarRespuesta("Error, El producto no esta asociado a la factura", "0025")); } facturaResponse = consulta.ConsultarDetalleFactura(facturaEnProceso); await _hubContext.Clients.All.SendAsync("SignalrFacturaReceived", facturaResponse); return(RG.GenerarRespuesta("Producto descontado de la factura. Transaccion exitosa", "0000")); } else { return(RG.GenerarRespuesta("Error, el codigo de producto no existe en BD", "0027")); } } else { return(RG.GenerarRespuesta("Error, El operador no tiene una factura en proceso", "0028")); } } }
public RespuestaTransaccion Put([FromBody] UpdateFactura datos) { RespuestaTransaccion RG = new RespuestaTransaccion(); Response_GetFacturaWithDetailscs facturaResponse = new Response_GetFacturaWithDetailscs(); GetFacturaDetailResponse consulta = new GetFacturaDetailResponse(); using (FacturadorWebContext bd = new FacturadorWebContext()) { var facturaEnProceso = bd.Factura.FirstOrDefault(x => x.IdUsuario == datos.idUsuario && x.IdEstado == 1); facturaResponse = consulta.ConsultarDetalleFactura(facturaEnProceso); if (facturaEnProceso != null) { facturaEnProceso.ValorTotal = facturaResponse.valorTotal; facturaEnProceso.ValorSubtotal = facturaResponse.valorSubtotal; facturaEnProceso.ValorIva = facturaResponse.valorIva; facturaEnProceso.ValorDescuento = facturaResponse.valorDescuento; facturaEnProceso.FechaCierre = DateTime.Now; if (datos.operacion == 1) { facturaEnProceso.IdEstado = 2; } if (datos.operacion == 2) { facturaEnProceso.IdEstado = 3; } bd.SaveChanges(); foreach (Productos p in facturaResponse.productos) { var inventario = bd.Inventario.SingleOrDefault(x => x.Id == p.Codigo); if (datos.operacion == 1) { inventario.TotalVendidos = inventario.TotalVendidos + p.Cantidad; } inventario.TotalProceso = inventario.TotalProceso - p.Cantidad; bd.SaveChanges(); } return(RG.GenerarRespuesta("Operacion Exitosa", "0000")); } else { return(RG.GenerarRespuesta("Error, El operador no tiene una factura en proceso", "0029")); } } }
public async Task <RespuestaTransaccion> PostAsync([FromBody] Request_Objetc_Add_Producto_To_Factura entrada) // agregar producto a la factura { RespuestaTransaccion RG = new RespuestaTransaccion(); GetFacturaDetailResponse consulta = new GetFacturaDetailResponse(); Response_GetFacturaWithDetailscs facturaResponse = new Response_GetFacturaWithDetailscs(); using (FacturadorWebContext bd = new FacturadorWebContext()) { var facturaEnProceso = bd.Factura.FirstOrDefault(x => x.IdUsuario == entrada.idUsuario && x.IdEstado == 1); if (facturaEnProceso != null) { var productoInventario = bd.Inventario.FirstOrDefault(x => x.Id == entrada.codBarras); if (productoInventario != null) { //varificar si hay unidades disponibles y si hay unidades entonces descontar unidad del total disponible y aumentar unidades en proceso if ((productoInventario.TotalRecibidos - productoInventario.TotalVendidos - productoInventario.TotalProceso - productoInventario.TotalDevueltos - productoInventario.TotalDesincorporados) > 0) { productoInventario.TotalProceso++; bd.SaveChanges(); var productoProductoEnProceso = bd.Producto.FirstOrDefault(x => x.IdInventario == entrada.codBarras && x.IdFactura == facturaEnProceso.Id); if (productoProductoEnProceso != null) { productoProductoEnProceso.Cantidad++; productoProductoEnProceso.ValorTotal = productoProductoEnProceso.ValorUnitario * productoProductoEnProceso.Cantidad; productoProductoEnProceso.ValorTotalDescuento = (productoProductoEnProceso.PorcentajeDescuento * productoProductoEnProceso.ValorTotal) / 100; productoProductoEnProceso.ValorTotalIva = (productoProductoEnProceso.PorcentajeIva * productoProductoEnProceso.ValorTotal) / 100; } else { Producto producto = new Producto(); producto.ValorUnitario = productoInventario.PrecioVenta; producto.ValorTotal = productoInventario.PrecioVenta; producto.Cantidad = 1; producto.PorcentajeIva = productoInventario.PorcentajeIva; producto.ValorTotalIva = (productoInventario.PorcentajeIva * producto.ValorTotal) / 100; producto.PorcentajeDescuento = productoInventario.PorcentajeDescuento; producto.ValorTotalDescuento = (productoInventario.PorcentajeDescuento * producto.ValorTotal) / 100; producto.IdFactura = facturaEnProceso.Id; producto.IdInventario = entrada.codBarras; bd.Producto.Add(producto); } bd.SaveChanges(); facturaResponse = consulta.ConsultarDetalleFactura(facturaEnProceso); await _hubContext.Clients.All.SendAsync("SignalrFacturaReceived", facturaResponse); return(RG.GenerarRespuesta("Producto añadido con exito", "0000")); } else { return(RG.GenerarRespuesta("Error. el producto bajo el codigo indicado no tiene unidades disponibles en el inventario", "0017")); } } else { return(RG.GenerarRespuesta("Error, el codigo de producto no existe en BD", "0016")); } } else { return(RG.GenerarRespuesta("Error, El operador no tiene una factura en proceso", "0018")); } } }
public Response_GetFacturaWithDetailscs ConsultarDetalleFactura(Factura factura) { Response_GetFacturaWithDetailscs facturaResponse = new Response_GetFacturaWithDetailscs(); RespuestaTransaccion RT = new RespuestaTransaccion(); try { using (FacturadorWebContext bd = new FacturadorWebContext()) { List <Productos> ListadoProductos = new List <Productos>(); Datoscliente cliente = new Datoscliente(); var query1 = from C in bd.Cliente join P in bd.Persona on C.IdPersona equals P.Id join T in bd.TipoDocumento on P.IdTipoDocumento equals T.Id where C.Id == factura.IdCliente select new Datoscliente { nombreCliente = P.Nombre, apellidoCliente = P.Apellido, acronimoCliente = T.Acronimo, documentoCliente = P.NumeroDocumento }; cliente = query1.FirstOrDefault(); var productos = bd.Producto.Where(x => x.IdFactura == factura.Id && x.Cantidad > 0).ToList(); facturaResponse.valorSubtotal = 0; facturaResponse.valorIva = 0; facturaResponse.valorDescuento = 0; facturaResponse.valorTotal = 0; foreach (Producto p in productos) { var inventario = bd.Inventario.FirstOrDefault(x => x.Id == p.IdInventario); Productos prod = new Productos(); prod.Codigo = Convert.ToInt32(p.IdInventario); prod.nombre = inventario.Nombre; prod.descripcion = inventario.Descripcion; prod.Cantidad = p.Cantidad; prod.ValorUnitario = p.ValorUnitario; prod.ValorTotal = p.ValorTotal; prod.PorcentajeDescuento = p.PorcentajeDescuento; prod.ValorTotalDescuento = p.ValorTotalDescuento; prod.PorcentajeIva = p.PorcentajeIva; prod.ValorTotalIva = p.ValorTotalIva; /* valores en factura */ facturaResponse.valorSubtotal = facturaResponse.valorSubtotal + p.ValorTotal; facturaResponse.valorIva = facturaResponse.valorIva + p.ValorTotalIva; facturaResponse.valorDescuento = facturaResponse.valorDescuento + p.ValorTotalDescuento; ListadoProductos.Add(prod); } facturaResponse.valorTotal = facturaResponse.valorSubtotal - facturaResponse.valorDescuento + facturaResponse.valorIva; facturaResponse.numeroFactura = factura.Numero.ToString(); facturaResponse.cliente = cliente; facturaResponse.respuestaTransaccion = RT.GenerarRespuesta("Consulta exitosa", "0000"); facturaResponse.productos = ListadoProductos; } } catch (Exception ex) { facturaResponse.respuestaTransaccion = RT.GenerarRespuesta("Ocurrio un error: " + ex.Message, "9090"); return(facturaResponse); } return(facturaResponse); }