/// <summary> /// Handles a change to the WorkingOrder row. /// </summary> /// <param name="sender">The object that originated the event.</param> /// <param name="workingOrderRowChangeEventArgs">The event arguments.</param> protected override void OnWorkingOrderRowChanged(Object sender, DataModel.WorkingOrderRowChangeEventArgs workingOrderRowChangeEventArgs) { // Validate the parameters. if (sender == null) { throw new ArgumentNullException("sender"); } if (workingOrderRowChangeEventArgs == null) { throw new ArgumentNullException("workingOrderRowChangeEventArgs"); } // If the new working order belongs to this blotter or one of its descendants, then add it in the proper place. if (workingOrderRowChangeEventArgs.Action == DataRowAction.Add) { DataModel.WorkingOrderRow workingOrderRow = workingOrderRowChangeEventArgs.Row; if (this.BlotterIdSet.Contains(workingOrderRow.BlotterId)) { Int32 index = this.BinarySearch(order => order.WorkingOrderId, workingOrderRow.WorkingOrderId); this.Insert(~index, this.CreateInstanceCore(workingOrderRowChangeEventArgs.Row)); } } // This will copy the modified elements from the data model into the collection and commit the changes. if (workingOrderRowChangeEventArgs.Action == DataRowAction.Change) { DataModel.WorkingOrderRow workingOrderRow = workingOrderRowChangeEventArgs.Row; if (this.BlotterIdSet.Contains(workingOrderRow.BlotterId)) { Int32 index = this.BinarySearch(order => order.WorkingOrderId, workingOrderRow.WorkingOrderId); TType equityWorkingOrder = this[index]; this.View.EditItem(equityWorkingOrder); equityWorkingOrder.IsActive = workingOrderRow.StatusRow.StatusCode != StatusCode.Filled; equityWorkingOrder.BlotterName = workingOrderRow.BlotterRow.EntityRow.Name; equityWorkingOrder.CreatedBy = workingOrderRow.UserRowByFK_User_WorkingOrder_CreatedUserId.EntityRow.Name; equityWorkingOrder.CreatedTime = workingOrderRow.CreatedTime; equityWorkingOrder.IsCrossing = workingOrderRow.CrossingRow.CrossingCode == CrossingCode.AlwaysMatch; equityWorkingOrder.IsBrokerMatch = workingOrderRow.IsBrokerMatch; equityWorkingOrder.IsHedgeMatch = workingOrderRow.IsHedgeMatch; equityWorkingOrder.IsInstitutionMatch = workingOrderRow.IsInstitutionMatch; equityWorkingOrder.LimitPrice = workingOrderRow.IsLimitPriceNull() ? 0.0M : workingOrderRow.LimitPrice; equityWorkingOrder.ModifiedBy = workingOrderRow.UserRowByFK_User_WorkingOrder_ModifiedUserId.EntityRow.Name; equityWorkingOrder.ModifiedTime = workingOrderRow.ModifiedTime; equityWorkingOrder.RowVersion = workingOrderRow.RowVersion; equityWorkingOrder.OrderTypeMnemonic = workingOrderRow.OrderTypeRow.Mnemonic; equityWorkingOrder.OrderTypeCode = workingOrderRow.OrderTypeRow.OrderTypeCode; equityWorkingOrder.SecurityName = workingOrderRow.SecurityRowByFK_Security_WorkingOrder_SecurityId.EntityRow.Name; equityWorkingOrder.SettlementDate = workingOrderRow.SettlementDate; equityWorkingOrder.SideCode = workingOrderRow.SideRow.SideCode; equityWorkingOrder.SideMnemonic = workingOrderRow.SideRow.Mnemonic; equityWorkingOrder.StatusCode = workingOrderRow.StatusRow.StatusCode; equityWorkingOrder.StopPrice = workingOrderRow.IsStopPriceNull() ? 0.0M : workingOrderRow.StopPrice; equityWorkingOrder.Symbol = workingOrderRow.SecurityRowByFK_Security_WorkingOrder_SecurityId.Symbol; equityWorkingOrder.TimeInForceCode = workingOrderRow.TimeInForceRow.TimeInForceCode; equityWorkingOrder.TradeDate = workingOrderRow.TradeDate; equityWorkingOrder.WorkingOrderId = workingOrderRow.WorkingOrderId; this.View.CommitEdit(); } } }
/// <summary> /// Copy the values from the data model. /// </summary> /// <param name="workingOrderRow">The data model row that is the source of the data.</param> public override void Copy(DataModel.WorkingOrderRow workingOrderRow) { // Validate the parameters. if (workingOrderRow == null) { throw new ArgumentNullException("workingOrderRow"); } // Allow the base class to copy the core of the working order. base.Copy(workingOrderRow); // Copy the scalar that are specific to the Equity instruments directly from the data model. this.IsCrossing = workingOrderRow.CrossingRow.CrossingCode == CrossingCode.AlwaysMatch; this.IsBrokerMatch = workingOrderRow.IsBrokerMatch; this.IsHedgeMatch = workingOrderRow.IsHedgeMatch; this.IsInstitutionMatch = workingOrderRow.IsInstitutionMatch; this.LimitPrice = workingOrderRow.IsLimitPriceNull() ? 0.0M : workingOrderRow.LimitPrice; this.OrderTypeMnemonic = workingOrderRow.OrderTypeRow.Mnemonic; this.OrderTypeCode = workingOrderRow.OrderTypeRow.OrderTypeCode; this.StopPrice = workingOrderRow.IsStopPriceNull() ? 0.0M : workingOrderRow.StopPrice; this.TimeInForceCode = workingOrderRow.TimeInForceRow.TimeInForceCode; }