public ResponseBussiness <TotalizarVentaResponse> TotalizarVenta(TotalizarVentaRequest totalizarVentaRequest) { TokenDto token = new TokenService().Get(); ResponseBussiness <TotalizarVentaResponse> response = new SalesBusiness(token).TotalizarVenta(totalizarVentaRequest); return(response); }
/// <summary> /// Cerrar una devolución sin pagos /// </summary> /// <param name="totalizarVentaRequest">Objeto de peticion de la venta a totalizar</param> /// <returns></returns> public ResponseBussiness <OperationResponse> CerrarDevolucionSinPagos(TotalizarVentaRequest totalizarVentaRequest) { return(tryCatch.SafeExecutor(() => { ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); return imprimeTicketsMM.PrintTicket(totalizarVentaRequest.cabeceraVentaRequest.FolioOperacion, false); })); }
/// <summary> /// Totalización de venta /// </summary> /// <param name="totalizarVentaRequest">Objeto de peticion de la venta a totalizar</param> /// <returns></returns> public ResponseBussiness <TotalizarVentaResponse> TotalizarVenta(TotalizarVentaRequest totalizarVentaRequest) { return(tryCatch.SafeExecutor(() => { // Variables de control y respuesta TotalizarVentaResponse response = new TotalizarVentaResponse(); decimal totalDescuentosAplicadosPorMotorPromociones = 0.0M; using (TransactionScope scope = new TransactionScope()) { // Se invoca a Totalizar la Venta/Devolución response = repository.TotalizarVenta(totalizarVentaRequest, token.CodeStore, token.CodeBox, token.CodeEmployee); // Se aplican promociones por motor de promociones List <DescuentoPromocionalVenta> DescuentosPromocionalesPosiblesVenta = new List <DescuentoPromocionalVenta>(); List <DescuentoPromocionalVenta> DescuentosPromocionalesAplicadosVenta = new List <DescuentoPromocionalVenta>(); List <DescuentoPromocionalVenta> DescuentosPromocionalesPosiblesLinea = new List <DescuentoPromocionalVenta>(); List <DescuentoPromocionalVenta> DescuentosPromocionalesAplicadosLinea = new List <DescuentoPromocionalVenta>(); // Eliminar promociones previas otorgados por motor de promociones repository.EliminarPromocionesCab(response.FolioOperacion, token.CodeStore, token.CodeBox); repository.EliminarPromocionesDet(response.FolioOperacion, token.CodeStore, token.CodeBox); // Obtener las promociones vigentes DescuentoPromocionalVenta[] descuentosPromocionalesEncontrados = descuentosPromocionesRepository.ObtenerPromocionesVenta(response.FolioOperacion, token.CodeStore, token.CodeBox); // Agregar descuentos promocionales existentes en motor de promociones foreach (DescuentoPromocionalVenta descuentoPromocionalVenta in descuentosPromocionalesEncontrados) { // Validar si se trata de descuento promocional por linea if (descuentoPromocionalVenta.Secuencia > 0) { if (descuentoPromocionalVenta.DescuentosPromocionalesFormaPago != null && descuentoPromocionalVenta.DescuentosPromocionalesFormaPago.Length > 0) { DescuentosPromocionalesPosiblesLinea.Add(descuentoPromocionalVenta); } else { DescuentosPromocionalesAplicadosLinea.Add(descuentoPromocionalVenta); } } else { if (descuentoPromocionalVenta.DescuentosPromocionalesFormaPago != null && descuentoPromocionalVenta.DescuentosPromocionalesFormaPago.Length > 0) { DescuentosPromocionalesPosiblesVenta.Add(descuentoPromocionalVenta); } else { DescuentosPromocionalesAplicadosVenta.Add(descuentoPromocionalVenta); } } } response.DescuentosPromocionalesAplicadosVenta = DescuentosPromocionalesAplicadosVenta.ToArray(); response.DescuentosPromocionalesPosiblesVenta = DescuentosPromocionalesPosiblesVenta.ToArray(); response.DescuentosPromocionalesAplicadosLinea = DescuentosPromocionalesAplicadosLinea.ToArray(); response.DescuentosPromocionalesPosiblesLinea = DescuentosPromocionalesPosiblesLinea.ToArray(); // Se persisten las promociones aplicadas por venta foreach (var item in response.DescuentosPromocionalesAplicadosVenta) { OperationResponse responsePersist = new OperationResponse(); responsePersist = repository.PersistirPromocionesVenta(response.FolioOperacion, token.CodeStore, token.CodeBox, item.ImporteDescuento , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, string.Empty); totalDescuentosAplicadosPorMotorPromociones = totalDescuentosAplicadosPorMotorPromociones + item.ImporteDescuento; } // Se persisten las promociones aplicadas por linea foreach (var item in response.DescuentosPromocionalesAplicadosLinea) { OperationResponse responsePersist = new OperationResponse(); responsePersist = repository.PersistirPromocionesLineaVenta(response.FolioOperacion, token.CodeStore, token.CodeBox, item.Secuencia, item.ImporteDescuento , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, string.Empty); totalDescuentosAplicadosPorMotorPromociones = totalDescuentosAplicadosPorMotorPromociones + item.ImporteDescuento; } // Se agrega ajuste necesario para DEVOLUCIONES-PROMOCIONES if (!(String.IsNullOrEmpty(totalizarVentaRequest.cabeceraVentaRequest.FolioDevolucion))) { // Validar si la devolución debe terminarse if ((response.InformacionAsociadaDevolucion == null) && ((totalizarVentaRequest.cabeceraVentaRequest.DevolucionSaldoAFavor >= 0) && (totalizarVentaRequest.cabeceraVentaRequest.ClienteTieneSaldoPendientePagar == false))) { response.InformacionAsociadaDevolucion = repository.FinalizarVentaDevolucion(totalizarVentaRequest.cabeceraVentaRequest.FolioOperacion, totalizarVentaRequest.cabeceraVentaRequest.FolioDevolucion, totalizarVentaRequest.cabeceraVentaRequest.FolioVentaOriginal, token.CodeBox, token.CodeStore, totalizarVentaRequest.cabeceraVentaRequest.CodigoMayorista, totalizarVentaRequest.cabeceraVentaRequest.ImporteVentaDescuentos, totalizarVentaRequest.cabeceraVentaRequest.ImporteDevolucionImpuestos, totalizarVentaRequest.cabeceraVentaRequest.ImporteVentaBruto, totalizarVentaRequest.cabeceraVentaRequest.ImporteVentaImpuestos, totalizarVentaRequest.cabeceraVentaRequest.ImporteVentaNeto, totalizarVentaRequest.cabeceraVentaRequest.ImporteDevolucionNeto, totalizarVentaRequest.cabeceraVentaRequest.ImporteDevolucionImpuestos, totalizarVentaRequest.cabeceraVentaRequest.DevolucionSaldoAFavor, totalizarVentaRequest.cabeceraVentaRequest.ImporteDevolucionTotal); } // Hacer los ajustes a las propiedades si la devolución fue cerrada if (response.InformacionAsociadaDevolucion != null) { // No se regresan promociones response.DescuentosPromocionalesAplicadosVenta = new DescuentoPromocionalVenta[0]; response.DescuentosPromocionalesPosiblesVenta = new DescuentoPromocionalVenta[0]; response.DescuentosPromocionalesAplicadosLinea = new DescuentoPromocionalVenta[0]; response.DescuentosPromocionalesPosiblesLinea = new DescuentoPromocionalVenta[0]; // No se regresan formas de pago response.InformacionAsociadaFormasPago = null; response.InformacionAsociadaFormasPagoMonedaExtranjera = null; } } // Se termina el bloque de transacción scope.Complete(); } // Validar si debe imprimirse ticket por una devolución que no pasa a formas de pago if (!(String.IsNullOrEmpty(totalizarVentaRequest.cabeceraVentaRequest.FolioDevolucion))) { if (response.InformacionAsociadaDevolucion != null) { ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(totalizarVentaRequest.cabeceraVentaRequest.FolioOperacion, false); } } // Se regresa la respuesta final return response; })); }