public override ExecutionResult ExecuteCommand(InCourseRequest inCourseRequest)
        {
            if (OrdenHelper.ObtenerOrdenOperacionByProducto(IdProducto.Value))
            {
                throw new M4TraderApplicationException("Ya se cerró una orden para este producto");
            }

            OrdenEntity orden = new OrdenEntity();

            orden.CompraVenta       = CompraOVenta;
            orden.FechaConcertacion = DateTime.Now.ToUniversalTime();

            orden.IdMercado = IdMercado;
            ProductoEntity producto = new ProductoEntity();

            if (CodigoProducto != null)
            {
                producto = CachingManager.Instance.GetProductoByCodigoMonedaDefaultAndRueda(CodigoProducto, orden.IdMercado, SegmentMarketId);
            }
            else
            {
                producto = CachingManager.Instance.GetProductoById(IdProducto.Value);
            }
            orden.IdProducto          = producto.IdProducto;
            orden.IdMoneda            = IdMoneda.HasValue ? IdMoneda.Value : producto.IdMoneda;
            orden.Rueda               = SegmentMarketId;
            orden.IdPersona           = IdPersona.HasValue ? IdPersona.Value : MAEUserSession.Instancia.IdPersona;
            orden.IdEnNombreDe        = IdEnNombreDe;
            orden.Cantidad            = Cantidad;
            orden.CantidadMinima      = OfertaParcial ? CantidadMinima : Cantidad;
            orden.IdSourceApplication = (byte)Source;
            orden.IdEstado            = (int)EstadoOrden.Ingresada;
            orden.OperoPorTasa        = OperoPorTasa;
            orden.Tasa      = Tasa;
            orden.IdUsuario = MAEUserSession.InstanciaCargada ? (int?)MAEUserSession.Instancia.IdUsuario : null;
            if (!StopType)
            {
                orden.PrecioLimite = PrecioLimite;
            }

            if (CodigoPlazoType == "")
            {
                CodigoPlazoType = "CI";
            }

            orden.Plazo = PlazoType.HasValue ? PlazoType.Value : CachingManager.Instance.GetAllPlazos().Find(x => x.Descripcion == CodigoPlazoType).IdPlazo;
            //if (orden.Plazo == (byte)PlazoOrdenEnum.Futuro)
            //{
            //    orden.FechaLiquidacion = CachingManager.Instance.GetFechaLiquidacionByIdProductoAndPlazo(orden.Plazo, orden.IdProducto).FechaLiquidacion;
            //}
            orden.IdTipoVigencia = IdTipoVigencia.HasValue ? (TipoVigencia)IdTipoVigencia.Value : TipoVigencia.NoAplica;

            if (orden.IdTipoVigencia != TipoVigencia.NoAplica)
            {
                orden.FechaVencimiento = FechaVencimiento;
            }

            if (OrderType == "")
            {
                OrderType = "0";
            }

            if (producto.IdTipoProducto == (byte)TiposProducto.FACTURAS)
            {
                OrderType            = "3";
                orden.OperoPorTasa   = true;
                orden.Tasa           = Tasa;
                orden.CantidadMinima = orden.Cantidad;
            }
            TipoOrdenEntity tipoOrden = CachingManager.Instance.GetTipoOrdenByCodigo(OrderType);

            if (tipoOrden != null)
            {
                orden.IdTipoOrden = tipoOrden.IdTipoOrden;
            }
            ResponseGenerico resultado = new ResponseGenerico();

            ordenes = new List <OrdenEntity>();
            ordenes.Add(orden);

            resultado.Resultado = (byte)eResult.Ok;
            OrdenHelper.AltaOrdenDMA(orden);
            orden.TimestampStr = BitConverter.ToString(orden.Timestamp, 0);
            resultado.Detalle  = JsonConvert.SerializeObject(orden);
            return(ExecutionResult.ReturnInmediatelyAndQueueOthers(resultado));
        }