public static Subasta VerSubastaActual()
        {
            var x = new Subasta();

            try
            {
                x = DSubasta.VerSubastaActual();
                var fechaActual = ParamsB.GetBDTime();
                if (x.Ronda != null)
                {
                    var vendedor = new Vendedor();
                    vendedor.IdSubasta = x.Id;
                    vendedor           = VerVendedor(vendedor);
                    if (x.Ronda.NumeroRonda > 0 &&
                        (x.Ronda.Valor == vendedor.PrecioPiso || x.Ronda.Valor == vendedor.PrecioTecho))
                    {
                        x.UltimaRonda = true;
                    }
                    x.RondaEnCurso = (fechaActual >= x.Ronda.FechaInicio && fechaActual <= x.Ronda.FechaFin);
                }
                return(x);
            }
            catch (System.Exception ex)
            {
                x.ErrorMensaje     = "Error al consultar" + ex.Message;
                x.EstadoPeticionOK = false;
                var user = new UserAutentication();
                GasLogB.CrearLogError(ex);
                return(x);
            }
        }
 public static Vendedor GuardarVendedor(Vendedor entidad)
 {
     try
     {
         var subasta = VerSubastaActual();
         if (subasta.Estado == 0)
         {
             entidad.ErrorMensaje     = "La subasta no se encuentra activa";
             entidad.EstadoPeticionOK = false;
             return(entidad);
         }
         if (entidad.Id == 0)
         {
             if (DSubasta.ValidarGuardadoVendedor(entidad).Any())
             {
                 entidad.ErrorMensaje     = "Ya se encuentra registrado el vendedor para esta subasta";
                 entidad.EstadoPeticionOK = false;
                 return(entidad);
             }
             return(DSubasta.GuardarVendedor(entidad));
         }
         else
         {
             return(DSubasta.ActualizarVendedor(entidad));
         }
     }
     catch (System.Exception ex)
     {
         entidad.ErrorMensaje     = ex.Message;
         entidad.EstadoPeticionOK = false;
         GasLogB.CrearLogError(ex);
         return(entidad);
     }
 }
 public static Ronda TerminarRonda(Ronda entidad)
 {
     try
     {
         DSubasta.TerminarRonda(entidad.Id);
         var rondaActual = DSubasta.VerRondaActual(entidad.IdSubasta);
         var vendedor    = new Vendedor();
         var subasta     = VerSubastaActual();
         vendedor.IdSubasta = entidad.IdSubasta;
         vendedor           = VerVendedor(vendedor);
         if (rondaActual == null)
         {
             rondaActual    = new Ronda();
             rondaActual.Id = 0;
         }
         if ((rondaActual.CantidadOfertada == 0 && rondaActual.Id != 0) ||
             ((subasta.TipoSubasta == 1 && vendedor.PrecioTecho == rondaActual.Valor) ||
              (subasta.TipoSubasta == 2 && vendedor.PrecioPiso == rondaActual.Valor)))
         {
             CierreSubasta(entidad.IdSubasta);
         }
         return(rondaActual);
     }
     catch (System.Exception ex)
     {
         entidad.EstadoPeticionOK = false;
         entidad.ErrorMensaje     = ex.Message;
         GasLogB.CrearLogError(ex);
         return(entidad);
     }
 }
        public static Comprador GuardarComprador(Comprador entidad)
        {
            try
            {
                var comprador = DSubasta.VerComprador(entidad);
                if (comprador != null && comprador.Id != 0)
                {
                    entidad.EstadoPeticionOK = false;
                    entidad.ErrorMensaje     = "El comprador ya se encuentra registrado para esta subasta.";
                }
                if (entidad.Id == 0)
                {
                    entidad = DSubasta.GuardarComprador(entidad);
                }

                return(entidad);
            }
            catch (System.Exception ex)
            {
                entidad.ErrorMensaje     = ex.Message;
                entidad.EstadoPeticionOK = false;
                GasLogB.CrearLogError(ex);
                return(entidad);
            }
        }
        public static void CierreSubasta(int idsubasta)
        {
            var subasta = new Subasta();

            try
            {
                DSubasta.CierreSubasta(idsubasta);
            }
            catch (System.Exception ex)
            {
            }
        }
 public static List <Demanda> VerHistorialGeneralDemandas(Demanda entidad)
 {
     try
     {
         var retorno = DSubasta.VerHistorialGeneralDemandas(entidad);
         if (retorno == null)
         {
             retorno = new List <Demanda>();
         }
         return(retorno);
     }
     catch (System.Exception ex)
     {
         GasLogB.CrearLogError(ex);
         return(new List <Demanda>());
     }
 }
 public static Demanda VerDemanda(Demanda entidad)
 {
     try
     {
         var retorno = DSubasta.VerDemanda(entidad);
         if (retorno == null)
         {
             retorno = entidad;
         }
         return(retorno);
     }
     catch (System.Exception ex)
     {
         GasLogB.CrearLogError(ex);
         return(entidad);
     }
 }
 public static Comprador VerComprador(Comprador entidad)
 {
     try
     {
         var retorno = DSubasta.VerComprador(entidad);
         if (retorno == null)
         {
             retorno = entidad;
         }
         return(retorno);
     }
     catch (System.Exception ex)
     {
         GasLogB.CrearLogError(ex);
         return(entidad);
     }
 }
        public static Subasta CancelarSubastas()
        {
            var x = new Subasta();

            try
            {
                x = DSubasta.CancelarSubastas();
                return(x);
            }
            catch (System.Exception ex)
            {
                x.ErrorMensaje     = "Error al cancelar subastas" + ex.Message;
                x.EstadoPeticionOK = false;
                var user = new UserAutentication();
                GasLogB.CrearLogError(ex);
                return(x);
            }
        }
        public static Demanda GuardarDemanda(Demanda entidad)
        {
            try
            {
                double ofertaNueva           = 0;
                double demandaNueva          = 0;
                var    RegistroRondaDemandas = new Ronda();
                var    demandaActual         = VerDemanda(entidad);
                var    demandaEnCuestion     = entidad.Demandas;
                var    rondaActual           = DSubasta.VerRondaActual(entidad.IdSubasta);
                if (demandaActual.Id != 0)
                {
                    entidad.Demandas = demandaActual.Demandas + demandaEnCuestion;
                    DSubasta.ActualizarDemanda(entidad);
                }
                else
                {
                    DSubasta.GuardarDemanda(entidad);
                }
                ofertaNueva  = rondaActual.CantidadOfertada - demandaEnCuestion;
                demandaNueva = rondaActual.CantidadDemandada + demandaEnCuestion;

                rondaActual.CantidadDemandada = demandaNueva;
                rondaActual.CantidadOfertada  = ofertaNueva;
                DSubasta.ActualizarOfertaRonda(rondaActual);
                var responseDemanda = VerDemanda(entidad);
                if (ofertaNueva == 0)
                {
                    responseDemanda.NotificarCierreSubasta = true;
                    rondaActual = DSubasta.VerRondaActual(entidad.IdSubasta);
                    TerminarRonda(rondaActual);
                }

                return(responseDemanda);
            }
            catch (System.Exception ex)
            {
                entidad.EstadoPeticionOK = false;
                entidad.ErrorMensaje     = ex.Message;
                GasLogB.CrearLogError(ex);
                return(entidad);
            }
        }
        public static Infrastructure.Models.Subasta CrearSubasta(Infrastructure.Models.Subasta auctionObj)
        {
            var subasta = new Subasta();

            try
            {
                var validarSubasta = VerSubastaActual();
                if (validarSubasta.Id != 0 && validarSubasta.Estado == 1)
                {
                    subasta.ErrorMensaje     = "Debe terminar o cancelar la subasta actual para poder crear una nueva";
                    subasta.EstadoPeticionOK = false;
                    return(subasta);
                }
                return(DSubasta.CrearSubasta(auctionObj));
            }
            catch (System.Exception ex)
            {
                GasLogB.CrearLogError(ex);
                return(subasta);
            }
        }
        public static Ronda CancelarRonda(Ronda entidad)
        {
            var subasta = new Subasta();

            try
            {
                DSubasta.CancelarRonda(entidad.Id);
                var rondaActual = DSubasta.VerRondaActual(entidad.IdSubasta);
                if (rondaActual == null)
                {
                    rondaActual    = new Ronda();
                    rondaActual.Id = 0;
                }
                return(rondaActual);
            }
            catch (System.Exception ex)
            {
                entidad.EstadoPeticionOK = false;
                entidad.ErrorMensaje     = ex.Message;
                GasLogB.CrearLogError(ex);
                return(entidad);
            }
        }
        public static Ronda CrearRonda(Ronda entidad)
        {
            var subasta = new Subasta();

            try
            {
                var vendedor = new Vendedor();
                vendedor.IdSubasta = entidad.IdSubasta;
                var subastaActual = VerSubastaActual();
                entidad.FechaFin    = entidad.FechaFin.AddSeconds(-entidad.FechaFin.Second);
                entidad.FechaInicio = entidad.FechaInicio.AddSeconds(-entidad.FechaInicio.Second);
                vendedor            = VerVendedor(vendedor);
                if (vendedor.Id == 0)
                {
                    entidad.EstadoPeticionOK = false;
                    entidad.ErrorMensaje     = "No se encuentra registrada la oferta por parte del vendedor aun.";
                    return(entidad);
                }
                entidad.IdVendedor = vendedor.Id;
                entidad.Estado     = 1;
                var rondaActual = DSubasta.VerRondaActual(entidad.IdSubasta);
                if (rondaActual == null)
                {
                    entidad.CantidadOfertada = vendedor.Cantidad;
                    entidad.Valor            = subastaActual.TipoSubasta == 1
                        ? vendedor.PrecioPiso
                        : vendedor.PrecioTecho;
                }
                else
                {
                    entidad.Valor = subastaActual.TipoSubasta == 1
                        ? rondaActual.Valor + vendedor.Variacion > vendedor.PrecioTecho ? vendedor.PrecioTecho : rondaActual.Valor + vendedor.Variacion
                        : rondaActual.Valor - vendedor.Variacion < vendedor.PrecioPiso ? vendedor.PrecioPiso : rondaActual.Valor - vendedor.Variacion;
                    if (rondaActual.Estado == 2)
                    {
                        // entidad.CantidadOfertada = rondaActual.CantidadOfertada - rondaActual.CantidadDemandada;
                        entidad.NumeroRonda = rondaActual.NumeroRonda + 1;
                    }
                    else
                    {
                        entidad = DSubasta.ActualizarRonda(entidad);
                        if (entidad.Valor == vendedor.PrecioPiso || entidad.Valor == vendedor.PrecioTecho)
                        {
                            entidad.UltimaRonda = true;
                        }
                        return(entidad);
                    }
                }
                entidad = DSubasta.CrearRonda(entidad);
                if (entidad.NumeroRonda > 0 && (entidad.Valor == vendedor.PrecioPiso || entidad.Valor == vendedor.PrecioTecho))
                {
                    entidad.UltimaRonda = true;
                }

                return(entidad);
            }
            catch (System.Exception ex)
            {
                entidad.EstadoPeticionOK = false;
                entidad.ErrorMensaje     = ex.Message;
                GasLogB.CrearLogError(ex);
                return(entidad);
            }
        }