This commit is contained in:
2022-07-06 21:04:50 +00:00
parent c83414a68d
commit fb7291c9b0
2 changed files with 149 additions and 157 deletions

View File

@@ -71,6 +71,20 @@ namespace AyaNovaQBI
"Are you sure?", "Import AyaNova objects", MessageBoxButtons.YesNo, MessageBoxIcon.Question) "Are you sure?", "Import AyaNova objects", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
== DialogResult.No) return; == DialogResult.No) return;
await ImportToQuickBooks(); await ImportToQuickBooks();
switch (_Type)
{
case AyaType.Customer:
await util.PopulateQBClientCacheAsync();
break;
case AyaType.Vendor:
await util.PopulateQBVendorCacheAsync();
break;
case AyaType.ServiceRate:
case AyaType.TravelRate:
case AyaType.Part:
await util.PopulateQBItemCacheAsync();
break;
}
} }
else else
{ {
@@ -1029,28 +1043,39 @@ namespace AyaNovaQBI
long AyaId = (long)r.Cells[1].Value; long AyaId = (long)r.Cells[1].Value;
//only linked items can be updated //only linked items can be updated
IntegrationItem m = util.QBIntegration.Items.FirstOrDefault(z => z.ObjectId == AyaId && z.AType == _Type); IntegrationItem im = util.QBIntegration.Items.FirstOrDefault(z => z.ObjectId == AyaId && z.AType == _Type);
if (m != null) if (im != null)
{ {
switch (_Type) switch (_Type)
{ {
case AyaType.Customer: case AyaType.Customer:
sType = "Customers"; await util.RefreshAyaNovaCustomerFromQBAsync(im);
break; break;
case AyaType.Vendor: case AyaType.Vendor:
sType = "Vendors"; await util.RefreshAyaNovaVendorFromQBAsync(im);
break; break;
case AyaType.Part: case AyaType.Part:
await util.RefreshAyaNovaPartFromQB(AyaId, PricesOnly); await util.RefreshAyaNovaPartFromQBAsync(im, PricesOnly);
break; break;
} }
SaveIntegration = true; SaveIntegration = true;
} }
} }
switch (_Type)
{
case AyaType.Customer:
await util.PopulateAyaClientList();
break;
case AyaType.Vendor:
await util.PopulateAyaVendorList();
break;
case AyaType.Part:
await util.PopulateAyaPartList();
break;
}
@@ -1058,45 +1083,47 @@ namespace AyaNovaQBI
} }
else else
{ {
#region QB GRID #region QB GRID
//################
//QB GRID
//
if (gridQB.SelectedRows.Count > 1) foreach (DataGridViewRow r in gridQB.SelectedRows)
{ {
MessageBox.Show("You can not link more than one QuickBooks\r\n" + // var QBItemName = gridQB.SelectedRows[0].Cells[0].Value.ToString();
"object to a single AyaNova object", "Not supported", MessageBoxButtons.OK, MessageBoxIcon.Information); var QBItemId = gridQB.SelectedRows[0].Cells[1].Value.ToString();
return;
//only linked items can be updated
IntegrationItem im = util.QBIntegration.Items.FirstOrDefault(z => z.IntegrationItemId == QBItemId && z.AType == _Type);
if (im != null)
{
switch (_Type)
{
case AyaType.Customer:
await util.RefreshQBCustomerFromAyaNova(im);
break;
case AyaType.Vendor:
await util.RefreshQVendorFromAyaNova(im);
break;
case AyaType.Part:
await util.RefreshQBPartFromAyaNova(im, PricesOnly);
break;
}
SaveIntegration = true;
}
} }
var QBItemName = gridQB.SelectedRows[0].Cells[0].Value.ToString(); switch (_Type)
var QBItemId = gridQB.SelectedRows[0].Cells[1].Value.ToString();
MapSelectAyaNovaItem s = new MapSelectAyaNovaItem();
s.Items = _aya;
if (s.ShowDialog() == DialogResult.Cancel)
return;
var AyaId = s.SelectedItemId;
s.Dispose();
//This way is a one to one mapping so only one iteration and two potential things to do, add or change link
//Is it already present?
IntegrationItem m = util.QBIntegration.Items.FirstOrDefault(z => z.ObjectId == AyaId && z.AType == _Type);
if (m != null)
{ {
m.IntegrationItemId = QBItemId; case AyaType.Customer:
m.IntegrationItemName = QBItemName; await util.PopulateQBClientCacheAsync();
m.LastSync = System.DateTime.Now; break;
SaveIntegration = true; case AyaType.Vendor:
} await util.PopulateQBVendorCacheAsync();
else break;
{ case AyaType.ServiceRate:
//not already present, so add it case AyaType.TravelRate:
m = new IntegrationItem { AType = _Type, IntegrationItemName = QBItemName, IntegrationItemId = QBItemId, LastSync = System.DateTime.Now, ObjectId = AyaId }; case AyaType.Part:
util.QBIntegration.Items.Add(m); await util.PopulateQBItemCacheAsync();
SaveIntegration = true; break;
} }
#endregion qb grid #endregion qb grid

View File

@@ -3542,39 +3542,20 @@ namespace AyaNovaQBI
#region Import / refresh to AyaNova #region Import / refresh to AyaNova
//public static async Task RefreshAyaNovaClientFromQB(List<long> objectIDList) public static async Task RefreshAyaNovaCustomerFromQBAsync(IntegrationItem im)
//{
// await PopulateQBClientCacheAsync();
// foreach (long id in objectIDList)
// {
// try
// {
// var r = await GetAsync($"customer/{id}");
// var c = r.ObjectResponse["data"].ToObject<Customer>();
// RefreshAyaNovaClientFromQB(c);
// r = await PutAsync($"customer", Newtonsoft.Json.JsonConvert.SerializeObject(c));
// }
// catch { };
// }
//}
public static async void RefreshAyaNovaClientFromQB(Customer c)
{ {
await PopulateQBClientCacheAsync(); if (im == null) return;//this object is not linked
IntegrationItem im = util.QBIntegration.Items.FirstOrDefault(z => z.ObjectId == c.Id && z.AType == AyaType.Customer); var r = await GetAsync($"customer/{im.ObjectId}");
if (im == null) return;//this client is not linked var c = r.ObjectResponse["data"].ToObject<Customer>();
if (c == null) return;
DataRow dr = _dtQBClients.Rows.Find(im.IntegrationItemId); DataRow dr = _dtQBClients.Rows.Find(im.IntegrationItemId);
if (dr == null) return; //QBListID not found in client list? if (dr == null) return; //QBListID not found in client list?
CopyQBCustomerInfoToAyaNovaClient(dr, c); CopyQBCustomerInfoToAyaNovaClient(dr, c);
string sName = dr["FullName"].ToString(); string sName = dr["FullName"].ToString();
c.Name = sName; c.Name = sName;
await PutAsync($"customer", Newtonsoft.Json.JsonConvert.SerializeObject(c));
im.LastSync = DateTime.Now;
} }
@@ -3718,6 +3699,52 @@ namespace AyaNovaQBI
} }
public static async Task RefreshAyaNovaVendorFromQBAsync(IntegrationItem im)
{
if (im == null) return;//this object is not linked
var r = await GetAsync($"vendor/{im.ObjectId}");
var c = r.ObjectResponse["data"].ToObject<Vendor>();
if (c == null) return;
DataRow dr = _dtQBClients.Rows.Find(im.IntegrationItemId);
if (dr == null) return; //QBListID not found in client list?
//CopyQBVendorInfoToAyaNovaVendor(dr, c);
Address a = (Address)dr["MailAddress"];
c.PostAddress = a.DeliveryAddress;
c.PostCity = a.City;
c.PostRegion = a.StateProv;
c.PostCountry = a.Country;
c.PostCode = a.Postal;
a = (Address)dr["StreetAddress"];
c.Address = a.DeliveryAddress;
c.City = a.City;
c.Region = a.StateProv;
c.Country = a.Country;
c.Contact = dr["Contact"].ToString();
if (dr["Phone"].ToString() != "")
c.Phone1 = dr["Phone"].ToString();
if (dr["Fax"].ToString() != "")
c.Phone2 = dr["Fax"].ToString();
if (dr["AltPhone"].ToString() != "")
c.Phone3 = dr["AltPhone"].ToString();
if (dr["Email"].ToString() != "")
c.EmailAddress = dr["Email"].ToString();
if (dr["Account"].ToString() != "")
c.AccountNumber = dr["Account"].ToString();
string sName = dr["FullName"].ToString();
c.Name = sName;
await PutAsync($"vendor", Newtonsoft.Json.JsonConvert.SerializeObject(c));
im.LastSync = DateTime.Now;
}
/// <summary> /// <summary>
/// Import the indicated Vendor /// Import the indicated Vendor
/// to an AyaNova vendor record /// to an AyaNova vendor record
@@ -3773,73 +3800,23 @@ namespace AyaNovaQBI
c.Region = a.StateProv; c.Region = a.StateProv;
c.Country = a.Country; c.Country = a.Country;
//Contact cn=c.Contacts.Add(RootObjectTypes.Vendor,c.ID);
c.Contact = dr["Contact"].ToString(); c.Contact = dr["Contact"].ToString();
////if it's completely empty we'll substitute the word Contact instead
//if(qbcontact=="")
// cn.FirstName="Contact";
//else
//{
// //default it first
// cn.FirstName=qbcontact;
// string [] contactnames=null;
// if(qbcontact.IndexOf(" ")!=-1)
// contactnames=qbcontact.Replace(",","").Split(' ');//replace any commas if present
// else
// if(qbcontact.IndexOf(",")!=-1)
// contactnames=qbcontact.Split(',');
// //Quickbooks just has one field for contact so
// //we'll assume the english speaking tradition of firstname space lastname
// //if there is a space otherwise we'll assume it's just a first name if there are no spaces in it
// if(contactnames!=null && contactnames.GetLength(0)>1)
// {
// cn.FirstName=contactnames[0];
// cn.LastName=contactnames[1];
// }
//}
//Phone field
if (dr["Phone"].ToString() != "") if (dr["Phone"].ToString() != "")
{
//ContactPhone cp=cn.Phones.Add(cn);
//cp.ContactPhoneType=ContactPhoneTypes.Business;
c.Phone1 = dr["Phone"].ToString(); c.Phone1 = dr["Phone"].ToString();
//case 124
//cp.PhoneDefault=true;
}
//Fax field
if (dr["Fax"].ToString() != "") if (dr["Fax"].ToString() != "")
{
//ContactPhone cp=cn.Phones.Add(cn);
//cp.ContactPhoneType=ContactPhoneTypes.Fax;
c.Phone2 = dr["Fax"].ToString(); c.Phone2 = dr["Fax"].ToString();
}
//AltPhone field
if (dr["AltPhone"].ToString() != "") if (dr["AltPhone"].ToString() != "")
{ c.Phone3 = dr["AltPhone"].ToString();
//ContactPhone cp=cn.Phones.Add(cn);
//cp.ContactPhoneType=ContactPhoneTypes.Business; if (dr["Email"].ToString() != "")
c.Phone3 = dr["AltPhone"].ToString();
}
//Email field
if (dr["Email"].ToString() != "")
{
c.EmailAddress = dr["Email"].ToString(); c.EmailAddress = dr["Email"].ToString();
}
if (dr["Account"].ToString() != "")
//Account number
if (dr["Account"].ToString() != "")
{
c.AccountNumber = dr["Account"].ToString(); c.AccountNumber = dr["Account"].ToString();
}
//Try to save and return errors if not in alerrors //Try to save and return errors if not in alerrors
var r = await PostAsync($"vendor", Newtonsoft.Json.JsonConvert.SerializeObject(c)); var r = await PostAsync($"vendor", Newtonsoft.Json.JsonConvert.SerializeObject(c));
@@ -4058,44 +4035,29 @@ namespace AyaNovaQBI
//public static async Task RefreshAyaNovaPartFromQB(List<long> objectIDList)
//{
// await PopulateQBItemCache();
// foreach (long id in objectIDList)
// {
// try
// {
// var r = await GetAsync($"part/{id}");
// var c = r.ObjectResponse["data"].ToObject<Part>();
// await RefreshAyaNovaPartFromQB(c);
// r = await PutAsync($"part", Newtonsoft.Json.JsonConvert.SerializeObject(c));
// }
// catch { };
// }
//}
public static async Task RefreshAyaNovaPartFromQB(long PartId, bool pricesOnly = false) public static async Task RefreshAyaNovaPartFromQBAsync(IntegrationItem im, bool pricesOnly = false)
{ {
var r = await GetAsync($"part/{PartId}"); if (im == null) return;//this part is not linked
var r = await GetAsync($"part/{im.ObjectId}");
var c = r.ObjectResponse["data"].ToObject<Part>(); var c = r.ObjectResponse["data"].ToObject<Part>();
if (c == null) return; if (c == null) return;
IntegrationItem im = util.QBIntegration.Items.FirstOrDefault(z => z.ObjectId == c.Id && z.AType == AyaType.Part);
if (im == null) return;//this part is not linked
DataRow dr = _dtQBItems.Rows.Find(im.IntegrationItemId); DataRow dr = _dtQBItems.Rows.Find(im.IntegrationItemId);
if (dr == null) return; //QBListID not found in part list? if (dr == null) return; //QBListID not found in part list?
string sName = dr["FullName"].ToString(); if (!pricesOnly)
{
c.Name = sName; string sName = dr["FullName"].ToString();
c.Name = sName;
c.Description = T(255, dr["SalesDesc"].ToString()); c.Description = T(255, dr["SalesDesc"].ToString());
c.WholeSalerId = AyaVendorForQBItem(im.IntegrationItemId); c.WholeSalerId = AyaVendorForQBItem(im.IntegrationItemId);
}
c.Retail = (decimal)dr["Price"]; c.Retail = (decimal)dr["Price"];
c.Cost = (decimal)dr["Cost"]; c.Cost = (decimal)dr["Cost"];
await PutAsync($"part", Newtonsoft.Json.JsonConvert.SerializeObject(c));
im.LastSync = DateTime.Now;
} }
@@ -4975,17 +4937,18 @@ namespace AyaNovaQBI
/// Refresh the indicated AyaNova part /// Refresh the indicated AyaNova part
/// to it's linked QuickBooks item record /// to it's linked QuickBooks item record
/// </summary> /// </summary>
public static async Task RefreshQBPartFromAyaNova(long PartId, bool pricesOnly = false) public static async Task RefreshQBPartFromAyaNova(IntegrationItem im, bool pricesOnly = false)
{ {
var r = await GetAsync($"part/{PartId}"); if (im == null) return;//this object is not linked
var r = await GetAsync($"part/{im.ObjectId}");
var c = r.ObjectResponse["data"].ToObject<Part>(); var c = r.ObjectResponse["data"].ToObject<Part>();
if (c == null) return;
IntegrationItem im = QBIntegration.Items.FirstOrDefault(z => z.ObjectId == c.Id && z.AType == AyaType.Part);
if (im == null) return;//this part is not linked
DataRow dr = _dtQBItems.Rows.Find(im.IntegrationItemId); DataRow dr = _dtQBItems.Rows.Find(im.IntegrationItemId);
if (dr == null) return; //QBListID not found in part list? if (dr == null) return; //QBListID not found in part list?
string sName = c.Name; string sName = c.Name;
if (sName.Length > 31) if (sName.Length > 31)
sName = sName.Substring(0, 31); sName = sName.Substring(0, 31);
@@ -5083,6 +5046,8 @@ namespace AyaNovaQBI
booSessionBegun = false; booSessionBegun = false;
sessionManager.CloseConnection(); sessionManager.CloseConnection();
im.LastSync = DateTime.Now; im.LastSync = DateTime.Now;
if (!pricesOnly)
im.IntegrationItemName = sName;
} }
catch (Exception ex) catch (Exception ex)