/// <summary> /// Abonar a un apartado /// </summary> /// <param name="request"></param> /// <returns></returns> public ResponseBussiness <OperationResponse> Abonar(AbonoApartadoRequest request) { return(tryCatch.SafeExecutor(() => { TransApartadoResponse response = new TransApartadoResponse(); OperationResponse operationResponse = new OperationResponse(); //OperationResponse operationResponseSW = new OperationResponse(); //AdministracionTipoCambio administracionTipoCambio = new AdministracionTipoCambio(); using (TransactionScope scope = new TransactionScope()) { response = new ApartadoAbonoRepository().Abonar(this.token.CodeStore, this.token.CodeBox, this.token.CodeEmployee, request, "APARTADO"); //operationResponseSW = administracionTipoCambio.GetSaleExternalService(request.FormasPagoUtilizadas, request.FolioApartado, this.token.CodeEmployee); if (((response.CodeNumber == "349") || (response.CodeNumber == "350"))) //&& operationResponseSW.CodeNumber == "000") { scope.Complete(); } //else //{ // operationResponse.CodeDescription = operationResponseSW.CodeDescription; // operationResponse.CodeNumber = operationResponseSW.CodeNumber; //} } ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(response.FolioVenta, false); operationResponse.CodeDescription = response.CodeDescription; operationResponse.CodeNumber = response.CodeNumber; operationResponse.informacionAsociadaRetiroEfectivo = response.informacionAsociadaRetiroEfectivo; return operationResponse; })); }
/// <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); })); }
public ResponseBussiness <OperationResponse> ReimprimirTicket(string folio) { new SecurityBusiness().ValidarPermisos("imprimirTicket", "E"); TokenDto token = new TokenService().Get(); ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); OperationResponse operation = imprimeTicketsMM.PrintTicket(folio, true); return(operation); }
/// <summary> /// Suspender una Venta /// </summary> /// <param name="suspenderVentaRequest">Objeto de peticion de la venta a suspender</param> /// <returns></returns> public ResponseBussiness <OperationResponse> SuspenderVenta(SuspenderVentaRequest suspenderVentaRequest) { return(tryCatch.SafeExecutor(() => { OperationResponse operationResponse = repository.SuspenderVenta(suspenderVentaRequest, token.CodeStore, token.CodeBox, token.CodeEmployee); ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(suspenderVentaRequest.cabeceraVentaRequest.FolioOperacion, false); return operationResponse; })); }
/// <summary> /// Anular una Venta /// </summary> /// <param name="anularTotalizarVentaRequest">Folio de venta y razón</param> /// <returns></returns> public ResponseBussiness <OperationResponse> AnularTotalizarVenta(AnularTotalizarVentaRequest anularTotalizarVentaRequest) { return(tryCatch.SafeExecutor(() => { OperationResponse operationResponse = repository.AnularVenta(anularTotalizarVentaRequest, this.token); ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(anularTotalizarVentaRequest.FolioVenta, false); return operationResponse; })); }
/// <summary> /// Post-anular una Venta /// </summary> /// <param name="postAnularVentaRequest">Folio de venta y razón</param> /// <returns></returns> public ResponseBussiness <OperationResponse> PostAnularVenta(PostAnularVentaRequest postAnularVentaRequest) { return(tryCatch.SafeExecutor(() => { AnularTotalizarVentaRequest anularTotalizarVentaRequest = new AnularTotalizarVentaRequest(); anularTotalizarVentaRequest.FolioVenta = postAnularVentaRequest.FolioVenta; anularTotalizarVentaRequest.CodigoRazon = postAnularVentaRequest.CodigoRazon; OperationResponse operationResponse = repository.AnularVenta(anularTotalizarVentaRequest, this.token); ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(postAnularVentaRequest.FolioVenta, false); return operationResponse; })); }
/// <summary> /// Finalizar Apartado /// </summary> /// <param name="request"></param> /// <returns></returns> public ResponseBussiness <OperationResponse> FinalizarApartado(FinalizarApartadoRequest request) { return(tryCatch.SafeExecutor(() => { TransApartadoResponse response = FinalizarApartadoInternal(request); OperationResponse operationResponse = new OperationResponse(); ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(response.FolioVenta, false); operationResponse.CodeNumber = response.CodeNumber; operationResponse.CodeDescription = response.CodeDescription; operationResponse.informacionAsociadaRetiroEfectivo = response.informacionAsociadaRetiroEfectivo; return operationResponse; })); }
/// <summary> /// Anular el apartado despues de totalizar /// </summary> /// <param name="request"></param> /// <returns></returns> public ResponseBussiness <OperationResponse> AnularTotalizarApartado(AnularTotalizarApartadoRequest request) { return(tryCatch.SafeExecutor(() => { TransApartadoResponse transApartadoResponse = repository.AnularApartado(request, this.token); OperationResponse operationResponse = new OperationResponse(); operationResponse.CodeNumber = transApartadoResponse.CodeNumber; operationResponse.CodeDescription = transApartadoResponse.CodeDescription; ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(transApartadoResponse.FolioVenta, false); return operationResponse; })); }
/// <summary> /// Cancelar apartado /// </summary> /// <param name="folioApartado"></param> /// <returns>Respuesta</returns> public ResponseBussiness <OperationResponse> CancelarApartado(string folioApartado) { return(tryCatch.SafeExecutor(() => { return tryCatch.SafeExecutor(() => { TransApartadoResponse transApartadoResponse = repository.CancelarApartado(folioApartado, this.token.CodeBox, this.token.CodeStore, this.token.CodeEmployee); OperationResponse operationResponse = new OperationResponse(); // TODO: Invocar servicio de Lealtad // Imprimir Cancelación de Apartado y Nota de Crédito en caso de Aplicar ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(transApartadoResponse.FolioVenta, false); PrintTicketEmisionNotaCredito printTicketEmisionNotaCredito = new PrintTicketEmisionNotaCredito(token); OperationResponse operation = printTicketEmisionNotaCredito.PrintNow(transApartadoResponse.FolioNotaCreditoGenerada); // Regresar el resultado operationResponse.CodeDescription = transApartadoResponse.CodeDescription; operationResponse.CodeNumber = transApartadoResponse.CodeNumber; return operationResponse; }); })); }
private ResponseBussiness <OperationResponse> FinalizarVentaInternal(FinalizarVentaRequest finalizarVentaRequest) { return(tryCatch.SafeExecutor(() => { OperationResponse result = new OperationResponse(); string mensajeVentaFinalizada = "Venta finalizada exitosamente. "; using (TransactionScope scope = new TransactionScope()) { result = repository.FinalizarVenta(token.CodeStore, token.CodeBox, token.CodeEmployee, finalizarVentaRequest, "REGULAR"); // Procesamos promociones que generan Cupones CuponPromocionalVenta[] cuponesPromocionalesEncontrados = descuentosPromocionesRepository.ProcesarPromocionesCupones(finalizarVentaRequest.cabeceraVentaRequest.FolioOperacion, token.CodeStore, token.CodeBox); foreach (var cupon in cuponesPromocionalesEncontrados) { CuponPersistirResponse cuponPersistirResponse = new CuponPersistirResponse(); cuponPersistirResponse = repository.PersistirCuponPromocionalGenerado(cupon); mensajeVentaFinalizada += "Cupón Generado: " + cupon.MensajeCupon + " $" + cupon.ImporteDescuento + ". "; } // Procesamos descuentos por mercancía dañada o picos de mercancía descuentoMercanciaDaniadaBusiness.ProcesarDescuentosExternosPicosMercancia(finalizarVentaRequest.FolioVenta); // ******************************************* INVOCAR A MÉTODOS DE ACUERDO A CADA TIPO DE VENTA FINALIZADA // TIPO DE VENTA/DEVOLUCIÓN REGULAR CONSIDERANDO TARJETAS DE REGALO if (result.CodeNumber.Equals("332") && (finalizarVentaRequest.TipoCabeceraVenta == "1")) { OperationResponse respuesta = this.ActivarTarjetaRegalo(finalizarVentaRequest); if (respuesta.CodeNumber == "1") { result.CodeDescription = mensajeVentaFinalizada; ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(finalizarVentaRequest.FolioVenta, false); scope.Complete(); } else { result.CodeDescription = respuesta.CodeDescription; } } // TIPO DE VENTA PAGO TCMM if (result.CodeNumber.Equals("332") && finalizarVentaRequest.TipoCabeceraVenta == "46") { OperationResponse respuesta = this.PagoTCMM(finalizarVentaRequest); if (respuesta.CodeNumber == "1") { result.CodeDescription = mensajeVentaFinalizada; ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(finalizarVentaRequest.FolioVenta, false); scope.Complete(); } else { result.CodeDescription = respuesta.CodeDescription; } } // TIPO DE VENTA MAYORISTA CONSIDERANDO TARJETAS DE REGALO else if (result.CodeNumber.Equals("332") && finalizarVentaRequest.TipoCabeceraVenta == "2") { var respuesta = this.PagoVentaCreditoMayorista(finalizarVentaRequest); if (respuesta.CodeNumber == "1") { // Se procesan las tarjetas de regalo en caso de aplicar OperationResponse operationResponse = this.ActivarTarjetaRegalo(finalizarVentaRequest); if (operationResponse.CodeNumber == "1") { result.CodeDescription = mensajeVentaFinalizada; ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(finalizarVentaRequest.FolioVenta, false); scope.Complete(); } else { result.CodeDescription = respuesta.CodeDescription; } } else { result.CodeDescription = respuesta.CodeDescription; } } // TIPO DE VENTA EMPLEADO CONSIDERANDO TARJETAS DE REGALO else if (result.CodeNumber.Equals("332") && finalizarVentaRequest.TipoCabeceraVenta == "4") { OperationResponse respuesta = this.ActivarTarjetaRegalo(finalizarVentaRequest); if (respuesta.CodeNumber == "1") { result.CodeDescription = mensajeVentaFinalizada; ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(finalizarVentaRequest.FolioVenta, false); scope.Complete(); } else { result.CodeDescription = respuesta.CodeDescription; } } // TIPO DE VENTA TIEMPO AIRE else if (result.CodeNumber.Equals("332") && finalizarVentaRequest.TipoCabeceraVenta == "5") { var respuesta = this.TiempoAire(finalizarVentaRequest); if (respuesta.CodeNumber == "1") { ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(finalizarVentaRequest.FolioVenta, false); scope.Complete(); } else { result.CodeNumber = respuesta.CodeNumber; result.CodeDescription = respuesta.CodeDescription; } } // TIPO DE VENTA PAGO DE SERVICIOS else if (result.CodeNumber.Equals("332") && finalizarVentaRequest.TipoCabeceraVenta == "6") { var respuesta = this.PagoServicios(finalizarVentaRequest); if (respuesta.CodeNumber == "1") { ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(finalizarVentaRequest.FolioVenta, false); scope.Complete(); } else { result.CodeNumber = respuesta.CodeNumber; result.CodeDescription = respuesta.CodeDescription; } } // SE TRATA DE UNA DEVOLUCIÓN CONSIDERANDO TARJETAS DE REGALO else if (result.CodeNumber.Equals("399")) { OperationResponse respuesta = this.ActivarTarjetaRegalo(finalizarVentaRequest); if (respuesta.CodeNumber == "1") { result.CodeDescription = mensajeVentaFinalizada; ImprimeTicketsMM imprimeTicketsMM = new ImprimeTicketsMM(token); imprimeTicketsMM.PrintTicket(finalizarVentaRequest.FolioVenta, false); scope.Complete(); } else { result.CodeDescription = respuesta.CodeDescription; } } } return result; })); }
/// <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; })); }