/// <summary>
		/// Where the actual allocation occurs.  Put it in this method so that we could run the allocator in different 
		/// circumstances.
		/// </summary>
		/// <param name="iGuarantor"></param>
		private static void _AllocateExecute(long iGuarantor) {
			OpenDental.Reporting.Allocators.MyAllocator1.GuarantorLedgerItemsCollection Ledger =
								new OpenDental.Reporting.Allocators.MyAllocator1.GuarantorLedgerItemsCollection(iGuarantor);
			Ledger.Fill(false);
			Ledger.EqualizePaymentsV2();

		}
		/// <summary>
		/// The method that actually calls the Equalizer.  Currently the equalizer just equalizes this instances
		/// data so that we can see the data via the returned DataTable
		/// 
		/// Note this Erases the old ledger item and replaces it with a new one for the Specified Guarantor
		/// </summary>
		/// <param name="uGuarantor"></param>
		/// <returns></returns>
		public DataTable EqualizeGuarantorPayments(int iGuarantor)
		{
			this.Ledger = new GuarantorLedgerItemsCollection(iGuarantor);

			Ledger.Fill(false);
			// Old call need to keep to figure out what I was thinking before
			//Ledger.FillFromDansLedgerOriginalTable(openConnection);
			Ledger.EqualizePaymentsV2();

			Ledger.FullLedger.Sort();
		//	int c2 = Ledger.FullLedger[0].CompareTo(Ledger.FullLedger[1]);

			DataTable dt = new DataTable();
			string[] cols = { "Item Date", "Patient", "Guarantor", "ItemType", 
							  "Provider",  "Charge",  "Payment",   "Balance" };
			foreach (string s in cols)
				dt.Columns.Add(new DataColumn(s));

			//GuarantorLedgerItemsCollection MixedCollection = new GuarantorLedgerItemsCollection(
			decimal runningBalance = 0;
			decimal runningCharges = 0;
			decimal runningPayments = 0;
			DateTime CurDate = DateTime.MinValue;
			foreach (PP_LedgerItem li in Ledger.FullLedger)
			{
				if (!(li is PP_PaymentItem))
				{
					runningBalance += li.AMMOUNT;
					runningCharges += li.AMMOUNT;
					DataRow dr = dt.NewRow();
					//string s3 = li.ITEMDATE.ToShortDateString();
					if (li.ITEMDATE > CurDate)
					{
						CurDate = li.ITEMDATE;
						dr[0] = li.ITEMDATE.ToShortDateString();
						if (dt.Rows.Count > 0)
							dt.Rows[dt.Rows.Count - 1][7] = runningBalance.ToString();
					}
					else
						dr[0] = "";
					dr[1] = li.PATNUM.ToString();
					dr[2] = li.GUARANTOR.ToString();
					dr[3] = ((MyAllocator1.LedgerItemTypes)li.ITEMTYPE).ToString();
					dr[4] = li.PROVNUM.ToString();
					dr[5] = li.AMMOUNT.ToString();
					dr[6] = ""; //Payment Column
					dt.Rows.Add(dr);

				}
				else
				{
					PP_PaymentItem payitem = (PP_PaymentItem)li;
					foreach (PP_PaySplitItem psi in payitem.PAYMENT_SPLITS)
					{
						runningBalance += psi.AMMOUNT;
						runningPayments += psi.AMMOUNT;
						DataRow dr = dt.NewRow();
						if (li.ITEMDATE > CurDate)
						{
							CurDate = payitem.ITEMDATE;
							dr[0] = payitem.ITEMDATE.ToShortDateString();
							if (dt.Rows.Count > 0)
								dt.Rows[dt.Rows.Count - 1][7] = runningBalance.ToString();
						}
						else
							dr[0] = "";
						dr[1] = payitem.PATNUM.ToString();
						dr[2] = payitem.GUARANTOR.ToString();
						dr[3] = ((MyAllocator1.LedgerItemTypes)payitem.ITEMTYPE).ToString();
						dr[4] = psi.PROVNUM.ToString();
						dr[5] = ""; // Charge Column
						dr[6] = psi.AMMOUNT.ToString();
						dt.Rows.Add(dr);

					}
				}
			}
			if (dt.Rows.Count > 0)
				dt.Rows[dt.Rows.Count - 1][7] = runningBalance.ToString();
			{
				dt.Rows.Add(dt.NewRow()); // blank line
				DataRow dr = dt.NewRow();
				dr[0] = CurDate.ToShortDateString();
				dr[4] = "Totals";
				dr[5] = runningCharges.ToString();
				dr[6] = runningPayments.ToString();
				dr[7] = runningBalance.ToString();
				dt.Rows.Add(dr);
			}
			return dt;
		}
 /// <summary>
 /// Where the actual allocation occurs.  Put it in this method so that we could run the allocator in different
 /// circumstances.
 /// </summary>
 /// <param name="iGuarantor"></param>
 private static void _AllocateExecute(long iGuarantor)
 {
     OpenDental.Reporting.Allocators.MyAllocator1.GuarantorLedgerItemsCollection Ledger =
         new OpenDental.Reporting.Allocators.MyAllocator1.GuarantorLedgerItemsCollection(iGuarantor);
     Ledger.Fill(false);
     Ledger.EqualizePaymentsV2();
 }