private OrderPartiallyFilled GenerateOrderPartiallyFilledEvent(ExecutionReport message)
        {
            var orderId          = this.GetOrderId(message);
            var executionId      = new ExecutionId(message.GetField(Tags.ExecID));
            var positionIdBroker = new PositionIdBroker(message.GetField(FxcmTags.PosID));
            var symbol           = this.GetSymbol(message.GetField(Tags.Symbol));
            var orderSide        = FxcmMessageHelper.GetOrderSide(message.GetField(Tags.Side));
            var filledQuantity   = Quantity.Create(message.GetDecimal(Tags.CumQty));
            var averagePrice     = Price.Create(message.GetDecimal(Tags.AvgPx));
            var quoteCurrency    = this.GetQuoteCurrency(symbol, message.GetField(Tags.Currency));
            var leavesQuantity   = Quantity.Create(message.GetInt(Tags.LeavesQty));
            var executionTime    = FxcmMessageHelper.ParseTimestamp(message.GetField(Tags.TransactTime));

            return(new OrderPartiallyFilled(
                       this.accountId,
                       orderId,
                       executionId,
                       positionIdBroker,
                       symbol,
                       orderSide,
                       filledQuantity,
                       leavesQuantity,
                       averagePrice,
                       quoteCurrency,
                       executionTime,
                       this.NewGuid(),
                       this.TimeNow()));
        }
        public override object GetField(Fields field)
        {
            if (ExecutionReport == null)
            {
                return(ExecutionReportFields.NULL);
            }

            if (field == Fields.KEY)
            {
                return(Key);
            }
            else
            {
                ExecutionReportFields xrField = (ExecutionReportFields)field;

                if (xrField == ExecutionReportFields.OrderID)
                {
                    return(GetOrdId(ExecutionReport, QuickFix.Fields.Tags.OrderID));
                }
                else if (xrField == ExecutionReportFields.ClOrdID)
                {
                    return(GetOrdId(ExecutionReport, QuickFix.Fields.Tags.ClOrdID));
                }
                else if (xrField == ExecutionReportFields.OrigClOrdID)
                {
                    return(GetOrdId(ExecutionReport, QuickFix.Fields.Tags.OrigClOrdID));
                }
                else if (xrField == ExecutionReportFields.ExecType)
                {
                    return(GetExecType(ExecutionReport.GetChar(QuickFix.Fields.Tags.ExecType)));
                }
                else if (xrField == ExecutionReportFields.ExecID)
                {
                    return(ExecutionReport.GetString(QuickFix.Fields.Tags.ExecID));
                }
                else if (xrField == ExecutionReportFields.OrdStatus)
                {
                    return(GetOrdStatus(ExecutionReport.GetChar(QuickFix.Fields.Tags.OrdStatus)));
                }
                else if (xrField == ExecutionReportFields.OrdRejReason)
                {
                    return(FixHelper.GetNullIntFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.OrdRejReason));
                }
                else if (xrField == ExecutionReportFields.LeavesQty)
                {
                    return(ExecutionReport.GetInt(QuickFix.Fields.Tags.LeavesQty));
                }
                else if (xrField == ExecutionReportFields.CumQty)
                {
                    return(ExecutionReport.GetInt(QuickFix.Fields.Tags.CumQty));
                }
                else if (xrField == ExecutionReportFields.AvgPx)
                {
                    return(FixHelper.GetNullDoubleFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.AvgPx));
                }
                else if (xrField == ExecutionReportFields.Commission)
                {
                    return(FixHelper.GetNullDoubleFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.Commission));
                }
                else if (xrField == ExecutionReportFields.Text)
                {
                    return(ExecutionReport.GetField(QuickFix.Fields.Tags.Text));
                }
                else if (xrField == ExecutionReportFields.TransactTime)
                {
                    return(DateTime.Now);
                }
                else if (xrField == ExecutionReportFields.LastQty)
                {
                    return(FixHelper.GetNullIntFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.LastQty));
                }
                else if (xrField == ExecutionReportFields.LastPx)
                {
                    return(FixHelper.GetNullDoubleFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.LastPx));
                }
                else if (xrField == ExecutionReportFields.LastMkt)
                {
                    return(FixHelper.GetNullFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.LastMkt));
                }


                else if (xrField == ExecutionReportFields.Symbol)
                {
                    return(FixHelper.GetNullFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.Symbol));
                }
                else if (xrField == ExecutionReportFields.OrderQty)
                {
                    return(FixHelper.GetNullDoubleFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.OrderQty));
                }
                else if (xrField == ExecutionReportFields.CashOrderQty)
                {
                    return(FixHelper.GetNullDoubleFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.CashOrderQty));
                }
                else if (xrField == ExecutionReportFields.OrdType)
                {
                    return(GetOrdType(ExecutionReport.GetChar(QuickFix.Fields.Tags.OrdType)));
                }
                else if (xrField == ExecutionReportFields.Price)
                {
                    return(FixHelper.GetNullDoubleFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.Price));
                }
                else if (xrField == ExecutionReportFields.StopPx)
                {
                    return(FixHelper.GetNullDoubleFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.StopPx));
                }
                else if (xrField == ExecutionReportFields.Currency)
                {
                    return(FixHelper.GetNullFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.Currency));
                }
                else if (xrField == ExecutionReportFields.ExpireDate)
                {
                    return(FixHelper.GetDateTimeFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.ExpireDate));
                }
                else if (xrField == ExecutionReportFields.MinQty)
                {
                    return(FixHelper.GetNullDoubleFieldIfSet(ExecutionReport, QuickFix.Fields.Tags.MinQty));
                }
                else if (xrField == ExecutionReportFields.Side)
                {
                    GetSide(ExecutionReport.GetChar(QuickFix.Fields.Tags.Side));
                }
                else if (xrField == ExecutionReportFields.QuantityType)
                {
                    return(QuantityType.SHARES);
                }
                else if (xrField == ExecutionReportFields.PriceType)
                {
                    return(PriceType.FixedAmount);
                }
                else if (xrField == ExecutionReportFields.Account)
                {
                    return(ExecutionReport.GetField(QuickFix.Fields.Tags.Account));
                }
                else if (xrField == ExecutionReportFields.ExecInst)
                {
                    return(ExecutionReport.GetField(QuickFix.Fields.Tags.ExecInst));
                }
            }

            return(ExecutionReportFields.NULL);
        }