diff --git a/AyaNovaQBI/Map.Designer.cs b/AyaNovaQBI/Map.Designer.cs
index a75d38d..e78f570 100644
--- a/AyaNovaQBI/Map.Designer.cs
+++ b/AyaNovaQBI/Map.Designer.cs
@@ -28,8 +28,8 @@
///
private void InitializeComponent()
{
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.objectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.customersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -169,17 +169,17 @@
this.grid.AllowUserToAddRows = false;
this.grid.AllowUserToDeleteRows = false;
this.grid.AllowUserToResizeRows = false;
- dataGridViewCellStyle17.BackColor = System.Drawing.Color.WhiteSmoke;
- this.grid.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle17;
+ dataGridViewCellStyle19.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.grid.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle19;
this.grid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
- dataGridViewCellStyle18.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
- dataGridViewCellStyle18.BackColor = System.Drawing.SystemColors.Control;
- dataGridViewCellStyle18.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- dataGridViewCellStyle18.ForeColor = System.Drawing.SystemColors.WindowText;
- dataGridViewCellStyle18.SelectionBackColor = System.Drawing.SystemColors.Control;
- dataGridViewCellStyle18.SelectionForeColor = System.Drawing.SystemColors.WindowText;
- dataGridViewCellStyle18.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.grid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle18;
+ dataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle20.BackColor = System.Drawing.SystemColors.Control;
+ dataGridViewCellStyle20.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ dataGridViewCellStyle20.ForeColor = System.Drawing.SystemColors.WindowText;
+ dataGridViewCellStyle20.SelectionBackColor = System.Drawing.SystemColors.Control;
+ dataGridViewCellStyle20.SelectionForeColor = System.Drawing.SystemColors.WindowText;
+ dataGridViewCellStyle20.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.grid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle20;
this.grid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.grid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.AyaName,
@@ -254,6 +254,7 @@
this.MainMenuStrip = this.menuStrip1;
this.Name = "Map";
this.Text = "Map";
+ this.Load += new System.EventHandler(this.Map_Load);
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.grid)).EndInit();
diff --git a/AyaNovaQBI/Map.cs b/AyaNovaQBI/Map.cs
index 20b7660..f9cf2ca 100644
--- a/AyaNovaQBI/Map.cs
+++ b/AyaNovaQBI/Map.cs
@@ -12,12 +12,280 @@ namespace AyaNovaQBI
{
public partial class Map : Form
{
+ private AyaType _Type = AyaType.Customer;
+ private DataTable _aya;
+ private DataTable _qb;
+
+ //private VendorTypes _currentVendorType = 0;
+ private viewtypes _currentView = viewtypes.All;
+ //private RateTypes _currentRateType = 0;
+ //private long _MostLikelyRateUnitChargeDescriptionID = 0;
+
+ private enum viewtypes
+ {
+ All,
+ Unlinked,
+ Linked
+ }
+
public Map()
{
InitializeComponent();
this.Icon = AyaNovaQBI.Properties.Resources.logo;
+
+ _aya = new DataTable("AyaNova");
+ _aya.Columns.Add("ayaid", typeof(long));
+ _aya.Columns.Add("qbid", typeof(string));
+ _aya.Columns.Add("AyaName", typeof(string));
+ _aya.Columns.Add("QBName", typeof(bool));
+ //Case 339
+ _aya.DefaultView.Sort = "AyaName asc";
+
+ _qb = new DataTable("QuickBooks");
+ _qb.Columns.Add("ID", typeof(string));
+ _qb.Columns.Add("Name", typeof(string));
+ _qb.Columns.Add("Linked", typeof(bool));
+ //Case 339
+ _qb.DefaultView.Sort = "Name asc";
+ grid.DataSource = _aya;
}
+ private void Map_Load(object sender, EventArgs e)
+ {
+ Initialize();
+ }
+
+ ///
+ /// Determine if row should be added to grid or now
+ /// based on current view preferences and if item is already
+ /// linked or not
+ ///
+ ///
+ ///
+ private bool DisplayRow(bool bLinked)
+ {
+ switch (_currentView)
+ {
+ case viewtypes.All:
+ return true;
+
+ case viewtypes.Linked:
+ return bLinked;
+
+ case viewtypes.Unlinked:
+ return !bLinked;
+
+
+ }
+ return true;
+ }
+
+
+ private void Initialize()
+ {
+
+ //clear both lists
+ _aya.Rows.Clear();
+ _qb.Rows.Clear();
+
+ //Case 147
+ updateAyaNovaPricesToolStripMenuItem.Visible = false;
+
+ switch (_Type)
+ {
+
+ case AyaType.Customer:
+ #region client
+
+
+ foreach (var i in util.AyaClientList)
+ {
+ if (i.Active)
+ {
+ bool bLinked = util.QBIntegration.Items.Any(z => z.AType == _Type && z.Id == i.Id);
+ if (DisplayRow(bLinked))
+ {
+ var qbItem = util.QBIntegration.Items.FirstOrDefault(z => z.AType == _Type && z.Id == i.Id);
+ _aya.Rows.Add(new object[] { i.Id, qbItem.IntegrationItemId, i.Name, qbItem.IntegrationItemName });
+ }
+
+ }
+ }
+
+ //Fill QB table with QB Customers from prefetched table
+ foreach (DataRow dr in util.QBClients.Rows)
+ {
+ bool bLinked = util.QBIntegration.Items.Any(z => z.AType == _Type && z.IntegrationItemId == dr["ID"].ToString());
+ if (DisplayRow(bLinked))
+ _qb.Rows.Add(new object[] { dr["ID"].ToString(), dr["FullName"].ToString(), bLinked });
+ }
+ #endregion client
+ break;
+ case AyaType.Vendor:
+ #region Vendor
+
+
+ foreach (var i in util.AyaVendorList)
+ {
+ if (i.Active)
+ {
+ bool bLinked = util.QBIntegration.Items.Any(z => z.AType == _Type && z.Id == i.Id);
+ if (DisplayRow(bLinked))
+ {
+ var qbItem = util.QBIntegration.Items.FirstOrDefault(z => z.AType == _Type && z.Id == i.Id);
+ _aya.Rows.Add(new object[] { i.Id, qbItem.IntegrationItemId, i.Name, qbItem.IntegrationItemName });
+ }
+
+ }
+ }
+
+ //Fill QB table with QB Customers from prefetched table
+ foreach (DataRow dr in util.QBVendors.Rows)
+ {
+ bool bLinked = util.QBIntegration.Items.Any(z => z.AType == _Type && z.IntegrationItemId == dr["ID"].ToString());
+ if (DisplayRow(bLinked))
+ _qb.Rows.Add(new object[] { dr["ID"].ToString(), dr["FullName"].ToString(), bLinked });
+ }
+ #endregion Vendor
+ break;
+ case AyaType.ServiceRate:
+ #region Service rates
+ //_MostLikelyRateUnitChargeDescriptionID = 0;
+
+
+ foreach (var i in util.AyaServiceRateList)
+ {
+ if (i.Active)
+ {
+ // //Determine the most likely description for purposes
+ // //of importing a rate from QB later by picking the first one
+ // //in the existing rate list that is non-empty
+ // //typically this will just be hours and every rate will
+ // //probably use the same one or for travel "miles" or "km's" etc
+ // if(_MostLikelyRateUnitChargeDescriptionID==Guid.Empty && i.RateUnitChargeDescriptionID!=Guid.Empty)
+ // _MostLikelyRateUnitChargeDescriptionID=i.RateUnitChargeDescriptionID;
+
+ //After discussion we decided to not us any rate unit charge description
+ //so leaving the code in but defaulted to guid.empty for now.
+
+ bool bLinked = util.QBIntegration.Items.Any(z => z.AType == _Type && z.Id == i.Id);
+ if (DisplayRow(bLinked))
+ {
+ var qbItem = util.QBIntegration.Items.FirstOrDefault(z => z.AType == _Type && z.Id == i.Id);
+ _aya.Rows.Add(new object[] { i.Id, qbItem.IntegrationItemId, i.Name, qbItem.IntegrationItemName });
+ }
+
+ }
+ }
+
+ //Fill QB table with QB items from prefetched table
+ foreach (DataRow dr in util.QBItems.Rows)
+ {
+ if ((util.qbitemtype)dr["Type"] == util.qbitemtype.Service || (util.qbitemtype)dr["Type"] == util.qbitemtype.OtherCharge)
+ {
+ bool bLinked = util.QBIntegration.Items.Any(z => z.AType == _Type && z.IntegrationItemId == dr["ID"].ToString());
+ if (DisplayRow(bLinked))
+ _qb.Rows.Add(new object[] { dr["ID"].ToString(), dr["FullName"].ToString(), bLinked });
+ }
+ }
+ #endregion Rate
+ break;
+
+ case AyaType.TravelRate:
+ #region TravelRate rates
+ //_MostLikelyRateUnitChargeDescriptionID = 0;
+
+
+ foreach (var i in util.AyaServiceRateList)
+ {
+ if (i.Active)
+ {
+ // //Determine the most likely description for purposes
+ // //of importing a rate from QB later by picking the first one
+ // //in the existing rate list that is non-empty
+ // //typically this will just be hours and every rate will
+ // //probably use the same one or for travel "miles" or "km's" etc
+ // if(_MostLikelyRateUnitChargeDescriptionID==Guid.Empty && i.RateUnitChargeDescriptionID!=Guid.Empty)
+ // _MostLikelyRateUnitChargeDescriptionID=i.RateUnitChargeDescriptionID;
+
+ //After discussion we decided to not us any rate unit charge description
+ //so leaving the code in but defaulted to guid.empty for now.
+
+ bool bLinked = util.QBIntegration.Items.Any(z => z.AType == _Type && z.Id == i.Id);
+ if (DisplayRow(bLinked))
+ {
+ var qbItem = util.QBIntegration.Items.FirstOrDefault(z => z.AType == _Type && z.Id == i.Id);
+ _aya.Rows.Add(new object[] { i.Id, qbItem.IntegrationItemId, i.Name, qbItem.IntegrationItemName });
+ }
+
+ }
+ }
+
+ //Fill QB table with QB items from prefetched table
+ foreach (DataRow dr in util.QBItems.Rows)
+ {
+ if ((util.qbitemtype)dr["Type"] == util.qbitemtype.Service || (util.qbitemtype)dr["Type"] == util.qbitemtype.OtherCharge)
+ {
+ bool bLinked = util.QBIntegration.Items.Any(z => z.AType == _Type && z.IntegrationItemId == dr["ID"].ToString());
+ if (DisplayRow(bLinked))
+ _qb.Rows.Add(new object[] { dr["ID"].ToString(), dr["FullName"].ToString(), bLinked });
+ }
+ }
+ #endregion Rate
+ break;
+
+ case AyaType.Part:
+ #region Service parts
+ //case 632
+ //gridQB.DisplayLayout.Rows.TemplateAddRow.Hidden=true;
+
+ //Case 147
+ updateAyaNovaPricesToolStripMenuItem.Visible = true;
+
+ foreach (var i in util.AyaPartList)
+ {
+ if (i.Active)
+ {
+
+ bool bLinked = util.QBIntegration.Items.Any(z => z.AType == _Type && z.Id == i.Id);
+ if (DisplayRow(bLinked))
+ {
+ var qbItem = util.QBIntegration.Items.FirstOrDefault(z => z.AType == _Type && z.Id == i.Id);
+ _aya.Rows.Add(new object[] { i.Id, qbItem.IntegrationItemId, i.Name, qbItem.IntegrationItemName });
+ }
+
+ }
+ }
+
+ //Fill QB table with QB items from prefetched table
+ foreach (DataRow dr in util.QBItems.Rows)
+ {
+ if ((util.qbitemtype)dr["Type"] == util.qbitemtype.Inventory || (util.qbitemtype)dr["Type"] == util.qbitemtype.NonInventory || (util.qbitemtype)dr["Type"] == util.qbitemtype.Assembly)
+ {
+ bool bLinked = util.QBIntegration.Items.Any(z => z.AType == _Type && z.IntegrationItemId == dr["ID"].ToString());
+ if (DisplayRow(bLinked))
+ _qb.Rows.Add(new object[] { dr["ID"].ToString(), dr["FullName"].ToString(), bLinked });
+ }
+ }
+ #endregion Part
+ break;
+
+ }
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
private void showSubItemToolStripMenuItem_Click(object sender, EventArgs e)
{
// Set the current clicked item to item
@@ -67,6 +335,8 @@ namespace AyaNovaQBI
}
+
+
/*
* Simplified, no drag and drop just pick and choose with clicks
* A menu to select the ayanova object type which then populates the ayanova items grid of that type showing:
@@ -76,7 +346,19 @@ namespace AyaNovaQBI
a menu item appears saying "MAP Selected items" when they select they can pick a qb item of the type they want and accept in a popup dialog which also shows how many ayanova items are selected
a menyu tiem apepars saying UNMAP selected items when they select it it removes the mapping after confirmation dialog from all selected items
+ //public static List GetInvoiceableItems()
+ //{
+ // var random = new Random();
+ // var l = new List();
+ // for (int i = 1; i < random.Next(25, 100); i++)
+ // l.Add(new InvoiceableItem { Customer = $"Customer {random.Next(1, 5)}", Linked = random.Next(2) == 1, Project = $"project {i}", ServiceDate = DateTime.Now.ToString("g"), ServiceNumber = (40 + i).ToString(), Status = $"Waiting to be invoiced", StatusColor = "FF00FFAA", WorkorderId = 4 });
+ // return l.OrderBy(x => x.Customer)
+ // .ThenBy(x => x.ServiceNumber)
+ // .ThenBy(x => x.ServiceDate)
+ // .ToList();
+
+ //}
*/
}
diff --git a/AyaNovaQBI/util.cs b/AyaNovaQBI/util.cs
index d7b1c38..887243a 100644
--- a/AyaNovaQBI/util.cs
+++ b/AyaNovaQBI/util.cs
@@ -498,19 +498,7 @@ namespace AyaNovaQBI
Cancel = 2
}
- //public static List GetInvoiceableItems()
- //{
- // var random = new Random();
- // var l = new List();
- // for (int i = 1; i < random.Next(25, 100); i++)
- // l.Add(new InvoiceableItem { Customer = $"Customer {random.Next(1, 5)}", Linked = random.Next(2) == 1, Project = $"project {i}", ServiceDate = DateTime.Now.ToString("g"), ServiceNumber = (40 + i).ToString(), Status = $"Waiting to be invoiced", StatusColor = "FF00FFAA", WorkorderId = 4 });
-
- // return l.OrderBy(x => x.Customer)
- // .ThenBy(x => x.ServiceNumber)
- // .ThenBy(x => x.ServiceDate)
- // .ToList();
-
- //}
+
/*