} //dgv_ShowFills_CellMouseClick() public static void dgv_ShowFillsSystemMenuItem_Click(object sender, MouseEventArgs e) { // // Purpose: A generic menu click event for the Order Right-Click // // Local Variables ToolStripMenuItem ts_From = (ToolStripMenuItem)sender; OrderMenuStruct myOrderStr = (OrderMenuStruct)ts_From.Tag; String myQuestion = ""; String myMessage = ""; String OrderRefID = myOrderStr.OrderRefID; Decimal Quantity = myOrderStr.Quantity; Decimal FillAmount = myOrderStr.FillAmount; Decimal RoutedAmount = myOrderStr.RoutedAmount; ShowFillStatus myForm = myOrderStr.myParentForm; if (OrderRefID.Length > 0) { switch (myOrderStr.Instruction) { case "Delete": if (myOrderStr.FillAmount != 0) { myQuestion = "WARNING: This order has already been filled " + myOrderStr.FillAmount.ToString("#,###") + " @" + myOrderStr.FillPrice.ToString("#,###.####") + ", so you should 'Resize to Fill' rather than Delete\r\n\r\n"; } else if (myOrderStr.RoutedAmount != 0) { myQuestion = "WARNING: Part of this order has already been routed " + myOrderStr.RoutedAmount.ToString("#,###") + " and should be cancelled first.\r\n\r\n"; } myQuestion = myQuestion + "You are about to Delete the Order for\r\n\r\n" + myOrderStr.Side + " " + myOrderStr.Quantity + " " + myOrderStr.BBG_Ticker + "\r\n"; if (myOrderStr.EMSX_Sequence.Length > 0) { myQuestion = myQuestion + "\r\nBloomberg Order# " + myOrderStr.EMSX_Sequence; } myQuestion = myQuestion + "\r\n\r\n" + "Is this Ok?"; if (MessageBox.Show(myQuestion, "Delete Order", MessageBoxButtons.YesNo) == DialogResult.Yes) { if (myOrderStr.EMSX_Sequence.Length > 0) { myMessage = SendToBloomberg.EMSXAPI_Delete(OrderRefID); } if (myMessage.Length > 0) { if (MessageBox.Show("We received the UNEXPECTED message below from Bloomberg while trying to delete the order.\r\n\r\n" + "Do you wish to continue with the Delete?\r\n\r\n" + "=============================================\r\n\r\n\r\n" + myMessage, "Delete Order", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.No) { return; } } // Delete the Order SystemLibrary.SQLExecute("Exec sp_ReverseOrder '" + OrderRefID + "'"); myForm.bt_Refresh_Click(null, null); // Update The Positions Table myForm.NeedUpdate = true; myForm.NeedFullUpdate = true; // Refresh the Portfolio Tab //myForm.ParentForm1.LoadPortfolioIncr(); // Report what Bloomberg says if (myMessage.Length > 0) { SystemLibrary.SQLExecute("Exec sp_Fills_From_EMSX_API"); MessageBox.Show("Changed in the Portfolio Management System, but received this messagae from Bloomberg.\r\n\r\n" + myMessage, myOrderStr.Instruction); } } break; case "ResizeToFill": myQuestion = "You are about to Resize the Order for\r\n\r\n" + myOrderStr.Side + " " + myOrderStr.FormattedQuantity + " " + myOrderStr.BBG_Ticker + "\r\n\n" + "To the FillAmount of " + myOrderStr.FormattedFillAmount + "\r\n\r\n" + "Is this Ok?"; if (Math.Abs(RoutedAmount) > Math.Abs(FillAmount)) { myQuestion = "WARNING: The Routed part of this order (" + myOrderStr.RoutedAmount.ToString("#,###") + ") is greater than the Filled Amount (" + myOrderStr.FillAmount.ToString("#,###") + ") and should be cancelled first.\r\n\r\n" + myQuestion; } if (FillAmount == 0) { MessageBox.Show("The Order has not been Filled (Fill Amount = 0).\r\n\r\nPlease use the [Delete Order] menu if that is your intention", "Resize order to Fill Amount"); } else if (MessageBox.Show(myQuestion, "Resize Order", MessageBoxButtons.YesNo) == DialogResult.Yes) { myMessage = SendToBloomberg.EMSXAPI_Modify(OrderRefID, myOrderStr.BBG_Ticker, Convert.ToInt32(myOrderStr.FillAmount)); // Resize the Order SystemLibrary.SQLExecute("Exec sp_ResizeOrder '" + OrderRefID + "', " + myOrderStr.FillAmount.ToString()); myForm.bt_Refresh_Click(null, null); // Update The Positions Table myForm.NeedUpdate = true; // Refresh the Portfolio Tab //myForm.ParentForm1.LoadPortfolioIncr(); // Report what Bloomberg says if (myMessage.Length > 0) { MessageBox.Show("Changed in the Portfolio Management System, but received this messagae from Bloomberg.\r\n\r\n" + myMessage, myOrderStr.Instruction); } } break; case "ResizeToRouted": if (RoutedAmount == 0) { MessageBox.Show("The Order has not been Routed (Routed Amount = 0).\r\n\r\nPlease use the [Delete Order] menu if that is your intention", "Resize order to Routed Amount"); } else if (MessageBox.Show("You are about to Resize the Order for\r\n\r\n" + myOrderStr.Side + " " + myOrderStr.FormattedQuantity + " " + myOrderStr.BBG_Ticker + "\r\n\n" + "To the RoutedAmount of " + myOrderStr.FormattedRoutedAmount + "\r\n\r\n" + "Is this Ok?", "Resize Order", MessageBoxButtons.YesNo) == DialogResult.Yes) { myMessage = SendToBloomberg.EMSXAPI_Modify(OrderRefID, myOrderStr.BBG_Ticker, Convert.ToInt32(myOrderStr.RoutedAmount)); // Resize the Order SystemLibrary.SQLExecute("Exec sp_ResizeOrder '" + OrderRefID + "', " + myOrderStr.RoutedAmount.ToString()); myForm.bt_Refresh_Click(null, null); // Update The Positions Table myForm.NeedUpdate = true; // Refresh the Portfolio Tab //myForm.ParentForm1.LoadPortfolioIncr(); // Report what Bloomberg says if (myMessage.Length > 0) { MessageBox.Show("Changed in the Portfolio Management System, but received this messagae from Bloomberg.\r\n\r\n" + myMessage, myOrderStr.Instruction); } } break; case "ResizeToDouble": Decimal DoubleQuantity = myOrderStr.Quantity * 2; if (MessageBox.Show("You are about to Double the Order for\r\n\r\n" + myOrderStr.Side + " " + myOrderStr.FormattedQuantity + " " + myOrderStr.BBG_Ticker + "\r\n\n" + "Is this Ok?", "Resize Order", MessageBoxButtons.YesNo) == DialogResult.Yes) { myMessage = SendToBloomberg.EMSXAPI_Modify(OrderRefID, myOrderStr.BBG_Ticker, Convert.ToInt32(DoubleQuantity)); // Resize the Order SystemLibrary.SQLExecute("Exec sp_ResizeOrder '" + OrderRefID + "', " + DoubleQuantity.ToString()); myForm.bt_Refresh_Click(null, null); // Update The Positions Table myForm.NeedUpdate = true; // Refresh the Portfolio Tab //myForm.ParentForm1.LoadPortfolioIncr(); // Report what Bloomberg says if (myMessage.Length > 0) { MessageBox.Show("Changed in the Portfolio Management System, but received this messagae from Bloomberg.\r\n\r\n" + myMessage, myOrderStr.Instruction); } } break; case "ResizeOrder": String myValue = myOrderStr.FormattedQuantity; long myQty; String mySql; if (SystemLibrary.InputBox("Resize Order for " + myOrderStr.BBG_Ticker + " from " + myOrderStr.FormattedQuantity, "Change the Size of the Order OR Cancel", ref myValue, myForm.validate_ResizOrder, MessageBoxIcon.Question) == DialogResult.OK) { myQty = SystemLibrary.ToInt32(myValue); if (Math.Sign(myQty) != Math.Sign(myOrderStr.Quantity)) { MessageBox.Show(@"Cannot swap between Buy & Sell.", "Resize aborted"); return; } if (Math.Abs(myQty) < Math.Abs(myOrderStr.FillAmount)) { MessageBox.Show(@"Cannot resize below the Fill Amount of " + myOrderStr.FillAmount.ToString("#,###") + ".", "Resize aborted"); return; } if (Math.Abs(myQty) < Math.Abs(myOrderStr.RoutedAmount)) { MessageBox.Show(@"Cannot resize below the Routed Amount of " + myOrderStr.RoutedAmount.ToString("#,###") + ".", "Resize aborted"); return; } myMessage = SendToBloomberg.EMSXAPI_Modify(OrderRefID, myOrderStr.BBG_Ticker, (Int32)myQty); mySql = "Exec sp_ResizeOrder '" + OrderRefID + "', " + myQty.ToString(); SystemLibrary.SQLExecute(mySql); myForm.bt_Refresh_Click(null, null); // Update The Positions Table myForm.NeedUpdate = true; // Refresh the Portfolio Tab //myForm.ParentForm1.LoadPortfolioIncr(); // Report what Bloomberg says if (myMessage.Length > 0) { MessageBox.Show("Changed in the Portfolio Management System, but received this messagae from Bloomberg.\r\n\r\n" + myMessage, myOrderStr.Instruction); } } break; } } } //dgv_ShowFillsSystemMenuItem_Click()
private void dgv_ShowFills_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { // Show the popup menu try { if (e.Button == MouseButtons.Right && e.RowIndex > -1 && e.ColumnIndex > -1) { Point myLocation = new Point(this.Location.X + CXLocation, this.Location.Y + CYLocation); // Select the Order as needed in code later on. String EMSX_Sequence = SystemLibrary.ToString(dgv_ShowFills.Rows[e.RowIndex].Cells["Order#"].Value); String mySql = "select OrderRefID, BBG_Ticker, Amount as Quantity, Sum(RoutedAmount) as RoutedAmount, Sum(FillAmount) as FillAmount, Side " + "From Fills " + "Where OrderRefID = (Select OrderRefID From Orders where Emsx_Sequence = " + EMSX_Sequence + ") " + "Group By OrderRefID, BBG_Ticker, Amount, Side " + "Union " + "Select OrderRefID, BBG_Ticker, Quantity, 0 as RoutedAmount, 0 as FillAmount, Side " + "From Orders " + "Where Emsx_Sequence = " + EMSX_Sequence + " " + "And Not Exists (Select 'x' from Fills Where Fills.OrderRefID = Orders.OrderRefID) "; DataTable dt_Order = SystemLibrary.SQLSelectToDataTable(mySql); if (dt_Order.Rows.Count > 0) { String OrderRefID = SystemLibrary.ToString(dt_Order.Rows[0]["OrderRefID"]); String BBG_Ticker = SystemLibrary.ToString(dt_Order.Rows[0]["BBG_Ticker"]); String Side = SystemLibrary.ToString(dt_Order.Rows[0]["Side"]); Decimal Quantity = SystemLibrary.ToDecimal(dt_Order.Rows[0]["Quantity"]); Decimal RoutedAmount = SystemLibrary.ToDecimal(dt_Order.Rows[0]["RoutedAmount"]); Decimal FillAmount = SystemLibrary.ToDecimal(dt_Order.Rows[0]["FillAmount"]); String FormattedQuantity = Quantity.ToString("#,##0"); String FormattedFillAmount = FillAmount.ToString("#,##0"); String FormattedRoutedAmount = RoutedAmount.ToString("#,##0"); Qty_Order = Quantity; ContextMenuStrip myMenu = new ContextMenuStrip(); ToolStripMenuItem mySubMenu = new ToolStripMenuItem(); OrderMenuStruct myOrderStr = new OrderMenuStruct(); myOrderStr.OrderRefID = OrderRefID; myOrderStr.EMSX_Sequence = EMSX_Sequence; myOrderStr.BBG_Ticker = BBG_Ticker; myOrderStr.FormattedQuantity = FormattedQuantity; myOrderStr.FormattedFillAmount = FormattedFillAmount; myOrderStr.FormattedRoutedAmount = FormattedRoutedAmount; myOrderStr.Quantity = Quantity; myOrderStr.FillAmount = FillAmount; //myOrderStr.FillPrice = FillPrice; myOrderStr.RoutedAmount = RoutedAmount; myOrderStr.Side = Side; myOrderStr.myParentForm = this; // Resize to Fill Menu if (Quantity != FillAmount) { mySubMenu = new ToolStripMenuItem("Resize Order (" + FormattedQuantity + ") to the Fill Amount (" + FormattedFillAmount + ")"); myOrderStr.Instruction = "ResizeToFill"; mySubMenu.Tag = myOrderStr; mySubMenu.MouseUp += new MouseEventHandler(dgv_ShowFillsSystemMenuItem_Click); myMenu.Items.Add(mySubMenu); } // Resize to Fill Menu if (Quantity != RoutedAmount) { mySubMenu = new ToolStripMenuItem("Resize Order (" + FormattedQuantity + ") to the Routed Amount (" + FormattedRoutedAmount + ")"); myOrderStr.Instruction = "ResizeToRouted"; mySubMenu.Tag = myOrderStr; mySubMenu.MouseUp += new MouseEventHandler(dgv_ShowFillsSystemMenuItem_Click); myMenu.Items.Add(mySubMenu); } // Double Order Menu mySubMenu = new ToolStripMenuItem("Double Order Size"); myOrderStr.Instruction = "ResizeToDouble"; mySubMenu.Tag = myOrderStr; mySubMenu.MouseUp += new MouseEventHandler(dgv_ShowFillsSystemMenuItem_Click); myMenu.Items.Add(mySubMenu); // Resize Order Menu myMenu.Items.Add("-"); mySubMenu = new ToolStripMenuItem("Resize Order"); myOrderStr.Instruction = "ResizeOrder"; mySubMenu.Tag = myOrderStr; mySubMenu.MouseUp += new MouseEventHandler(dgv_ShowFillsSystemMenuItem_Click); myMenu.Items.Add(mySubMenu); // Delete Order Menu myMenu.Items.Add("-"); mySubMenu = new ToolStripMenuItem("Delete Order"); myOrderStr.Instruction = "Delete"; mySubMenu.Tag = myOrderStr; mySubMenu.MouseUp += new MouseEventHandler(dgv_ShowFillsSystemMenuItem_Click); myMenu.Items.Add(mySubMenu); // Show the Menu myMenu.Show(myLocation); } } } catch { } } //dgv_ShowFills_CellMouseClick()