using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Ventas.Core.DTOs; using Ventas.Services; namespace Ventas.API.Controllers; [ApiController] [Route("api/[controller]")] [Authorize] public class CotizacionController : ControllerBase { private readonly CotizacionService _cotizacionService; public CotizacionController(CotizacionService cotizacionService) { _cotizacionService = cotizacionService; } [HttpPost] public async Task Ingresar([FromBody] CotizacionIngresoRequest request) { var result = await _cotizacionService.IngresarAsync(request.ApoderadoId, request.VendedorId, request.SolicitudDescuento, request.Descuento, request.TipoDescuento, request.Fecha, request.Alumnos, request.Curso, request.Monto, request.Validez, request.LeadId); return Ok(new { id = result }); } [HttpPost("detalle")] public async Task IngresarDetalle([FromBody] CotizacionDetalleRequest request) { var result = await _cotizacionService.IngresarDetalleAsync(request.CotizacionId, request.AlumnoId, request.CursoId, request.Cantidad, request.Tarifa); return Ok(new { mensaje = result }); } [HttpPost("detalle-sin-curso")] public async Task DetalleSinCurso([FromBody] CotizacionDetalleSinCursoRequest request) { var result = await _cotizacionService.DetalleSinCursoAsync(request.CotizacionId, request.AlumnoId, request.ApoderadoId, request.ProgramaId, request.Cantidad, request.Tarifa, request.SedeId); return Ok(new { mensaje = result }); } [HttpGet("lead/{lead}")] public async Task BuscarPorLead(int lead) { var result = await _cotizacionService.BuscarAsync(lead); return Ok(result); } [HttpGet("lead/{lead}/sin-curso")] public async Task BuscarSinCurso(int lead) { var result = await _cotizacionService.BuscarSinCursoAsync(lead); return Ok(result); } [HttpGet("buscar")] public async Task BuscarInfo([FromQuery] string tipoBusqueda, [FromQuery] string nombre) { var result = await _cotizacionService.BuscarInfoAsync(tipoBusqueda, nombre); return Ok(result); } [HttpGet("{id}/detalle")] public async Task Detalle(int id) { var result = await _cotizacionService.DetalleAsync(id); return Ok(result); } [HttpPost("{id}/pagar")] public async Task Pagar(int id) { var result = await _cotizacionService.PersonaPagarAsync(id); return Ok(new { mensaje = result }); } [HttpPut("{id}/desactivar")] public async Task Desactivar(int id) { var result = await _cotizacionService.DesactivarAsync(id); return Ok(new { mensaje = result }); } [HttpPost("empresa")] public async Task CotizacionEmpIngreso([FromBody] CotizacionEmpRequest request) { var result = await _cotizacionService.CotizacionEmpIngresoAsync( request.EmpresaId, request.Vendedor, request.Alumnos, request.Curso, request.EmpresaMonto, request.OticMonto, request.AlumnoMonto, request.CotizacionTipo, request.Validez, request.DescuentoId, request.EstadoId, request.OticId, request.Motivo); return Ok(new { id = result }); } [HttpPut("{id}/estado")] public async Task ActualizarEstado(int id, [FromBody] CotizacionEstadoUpdateRequest request) { var result = await _cotizacionService.ActualizaEstadoCotizacionAsync(request.Tipo, id, request.ValorA ?? "", request.ValorB); return Ok(new { mensaje = result }); } }