Beispiel #1
0
        /// <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;
            }));
        }
Beispiel #2
0
 /// <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);
     }));
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 /// <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;
     }));
 }
Beispiel #5
0
 /// <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;
     }));
 }
Beispiel #6
0
 /// <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;
     }));
 }
Beispiel #7
0
        /// <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;
            }));
        }
Beispiel #8
0
        /// <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;
            }));
        }
Beispiel #9
0
 /// <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;
         });
     }));
 }
Beispiel #10
0
        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;
            }));
        }
Beispiel #11
0
        /// <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;
            }));
        }