/// <summary> /// The sum total of the quantities of all the source orders in a given working order. /// </summary> /// <param name="dataModelTransaction"></param> /// <param name="workingOrderRow">A working order row.</param> /// <returns>The total quantity of all the source orders associated with the working order.</returns> internal static Decimal GetSourceOrderQuantity(DataModelTransaction dataModelTransaction, WorkingOrderRow workingOrderRow) { // This will aggregate all the source order quantities. Note that the rows are kept locked for the duration of the transaction. This guarantees // the integrity of the aggregate values. Decimal sourceOrderQuantity = 0.0m; foreach (SourceOrderRow sourceOrderRow in workingOrderRow.GetSourceOrderRows()) { try { sourceOrderRow.AcquireReaderLock(dataModelTransaction.TransactionId, DataModel.LockTimeout); sourceOrderQuantity += sourceOrderRow.OrderedQuantity; } finally { sourceOrderRow.ReleaseLock(dataModelTransaction.TransactionId); } } // This is the sum total of all the source orders in the given working order. return(sourceOrderQuantity); }
/// <summary> /// Initialize the data used in this application. /// </summary> private void InitializeData(object parameter) { String title = String.Empty; String symbol = String.Empty; String name = String.Empty; String logoSource = null; Decimal leavesQuantity = 0.0m; NegotiationState negotiationState = NegotiationState.None; lock (DataModel.SyncRoot) { // Find the Match record. MatchRow matchRow = DataModel.Match.MatchKey.Find(this.matchId); WorkingOrderRow workingOrderRow = matchRow.WorkingOrderRow; OrderTypeRow orderTypeRow = workingOrderRow.OrderTypeRow; SecurityRow securityRow = workingOrderRow.SecurityRowByFK_Security_WorkingOrder_SecurityId; symbol = securityRow.Symbol; name = securityRow.EntityRow.Name; logoSource = securityRow.IsLogoNull() ? String.Empty : securityRow.Logo; title = String.Format("{0} of {1}", orderTypeRow.Description, symbol); leavesQuantity = 0.0M; foreach (SourceOrderRow sourceOrderRow in workingOrderRow.GetSourceOrderRows()) { leavesQuantity += sourceOrderRow.OrderedQuantity; } foreach (DestinationOrderRow destinationOrderRow in workingOrderRow.GetDestinationOrderRows()) { foreach (ExecutionRow executionRow in destinationOrderRow.GetExecutionRows()) { leavesQuantity -= executionRow.ExecutionQuantity; } } leavesQuantity /= securityRow.QuantityFactor; } this.Dispatcher.Invoke(DispatcherPriority.Normal, new SetDialogAttributesDelegate(SetDialogAttributes), title, symbol, name, logoSource, leavesQuantity, negotiationState); }