Ejemplo n.º 1
0
        public ResponseBussiness <TotalizarVentaResponse> TotalizarVenta(TotalizarVentaRequest totalizarVentaRequest)
        {
            TokenDto token = new TokenService().Get();
            ResponseBussiness <TotalizarVentaResponse> response = new SalesBusiness(token).TotalizarVenta(totalizarVentaRequest);

            return(response);
        }
Ejemplo n.º 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);
     }));
 }
Ejemplo n.º 3
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;
            }));
        }