using System; using System.Collections.Generic; using System.Text; using GZTW.AyaNova.BLL; using Outlook = Microsoft.Office.Interop.Outlook; using Office = Microsoft.Office.Core; using System.Windows.Forms; using System.Collections; namespace AyaNovaOL { class ImportContactsFromAyaNova { Outlook.MAPIFolder mFldr; RootObjectTypes mObjectType; List mIDList; VendorTypes mVendorType; public bool DoImport(bool bSelectedOnly, Outlook.MAPIFolder fldr, RootObjectTypes objectType, VendorTypes selectedVendorType, List IDList) { Cursor.Current = Cursors.WaitCursor; mFldr = fldr; mObjectType = objectType; mIDList = IDList; mVendorType = selectedVendorType; //build a list if it's all items if (!bSelectedOnly) BuildIDListForAll(); // Util.d("Importing / syncing " + mIDList.Count.ToString() + " contacts..."); foreach (Guid id in mIDList) try { ImportContactItem(id); } catch (Exception ex) { MessageBox.Show("Error importing contact item from AyaNova: \r\n" + ex.Message + "\r\n" + ex.StackTrace); } return true; } private Outlook.ContactItem GetContactItem(string sName) { Outlook.ContactItem ci = null; //search for it first ci = (Outlook.ContactItem)mFldr.Items.Find(String.Format("[CompanyName]='{0}'", sName.Replace("'","''"))); if (ci == null) { // MessageBox.Show("Not found creating new contact item: " + sName); ci = (Outlook.ContactItem)mFldr.Items.Add(Outlook.OlItemType.olContactItem); } //else // MessageBox.Show("Found matching contact item " + sName); return ci; } private void ImportContactItem(Guid id) { try { switch (mObjectType) { case RootObjectTypes.Client: { Client c = Client.GetItemNoMRU(id); Outlook.ContactItem ci = GetContactItem(c.Name); ci.CompanyName = c.Name; ci.Email1Address = c.Email; ci.Body = c.Notes; ci.FullName = c.Contact; ci.WebPage = c.WebAddress; ImportAddress(c.MailToAddress, AddressTypes.Postal, ci); ImportAddress(c.GoToAddress, AddressTypes.Physical, ci); ImportPhoneNumber(c.Phone1, 1, ci); ImportPhoneNumber(c.Phone2, 2, ci); ImportPhoneNumber(c.Phone3, 3, ci); ImportPhoneNumber(c.Phone4, 4, ci); ImportPhoneNumber(c.Phone5, 5, ci); ci.Save(); } break; case RootObjectTypes.HeadOffice: { HeadOffice c = HeadOffice.GetItemNoMRU(id); Outlook.ContactItem ci = GetContactItem(c.Name); ci.CompanyName = c.Name; ci.Email1Address = c.Email; ci.Body = c.Notes; ci.FullName = c.Contact; ci.WebPage = c.WebAddress; ImportAddress(c.MailToAddress, AddressTypes.Postal, ci); ImportAddress(c.GoToAddress, AddressTypes.Physical, ci); ImportPhoneNumber(c.Phone1, 1, ci); ImportPhoneNumber(c.Phone2, 2, ci); ImportPhoneNumber(c.Phone3, 3, ci); ImportPhoneNumber(c.Phone4, 4, ci); ImportPhoneNumber(c.Phone5, 5, ci); ci.Save(); } break; case RootObjectTypes.Vendor: { Vendor c = Vendor.GetItemNoMRU(id); Outlook.ContactItem ci = GetContactItem(c.Name); ci.CompanyName = c.Name; ci.Email1Address = c.Email; ci.Body = c.Notes; ci.FullName = c.Contact; ci.WebPage = c.WebAddress; ImportAddress(c.MailToAddress, AddressTypes.Postal, ci); ImportAddress(c.GoToAddress, AddressTypes.Physical, ci); ImportPhoneNumber(c.Phone1, 1, ci); ImportPhoneNumber(c.Phone2, 2, ci); ImportPhoneNumber(c.Phone3, 3, ci); ImportPhoneNumber(c.Phone4, 4, ci); ImportPhoneNumber(c.Phone5, 5, ci); ci.Save(); } break; } } catch { }; } private void ImportAddress(GZTW.AyaNova.BLL.Address adr, AddressTypes adrType, Outlook.ContactItem ci) { #region Address setting AYOLAddressType OLAddressTypeToUse = AYOLAddressType.Unused; if (adrType == AddressTypes.Physical) OLAddressTypeToUse = (AYOLAddressType)AyaNovaOL.Properties.Settings.Default.PhysicalAddressEquals; else OLAddressTypeToUse = (AYOLAddressType)AyaNovaOL.Properties.Settings.Default.PostalAddressEquals; switch (OLAddressTypeToUse) { case AYOLAddressType.Business: { ci.BusinessAddressStreet = adr.DeliveryAddress; ci.BusinessAddressCity = adr.City; ci.BusinessAddressState = adr.StateProv; ci.BusinessAddressCountry = adr.Country; ci.BusinessAddressPostalCode = adr.Postal; if (adrType == AddressTypes.Postal) { ci.BusinessAddressPostOfficeBox = adr.DeliveryAddress; ci.SelectedMailingAddress = Microsoft.Office.Interop.Outlook.OlMailingAddress.olBusiness; } return; } case AYOLAddressType.Home: { ci.HomeAddressStreet = adr.DeliveryAddress; ci.HomeAddressCity = adr.City; ci.HomeAddressState = adr.StateProv; ci.HomeAddressCountry = adr.Country; ci.HomeAddressPostalCode = adr.Postal; if (adrType == AddressTypes.Postal) { ci.HomeAddressPostOfficeBox = adr.DeliveryAddress; ci.SelectedMailingAddress = Microsoft.Office.Interop.Outlook.OlMailingAddress.olHome; } return; } case AYOLAddressType.Other: { ci.OtherAddressStreet = adr.DeliveryAddress; ci.OtherAddressCity = adr.City; ci.OtherAddressState = adr.StateProv; ci.OtherAddressCountry = adr.Country; ci.OtherAddressPostalCode = adr.Postal; if (adrType == AddressTypes.Postal) { ci.OtherAddressPostOfficeBox = adr.DeliveryAddress; ci.SelectedMailingAddress = Microsoft.Office.Interop.Outlook.OlMailingAddress.olOther; } return; } }//switch #endregion } private void ImportPhoneNumber(string sPhone, int nSlot, Outlook.ContactItem ci) { #region Determine where to put it AYOLPhoneNumberType ptype = AYOLPhoneNumberType.BusinessTelephoneNumber; switch (mObjectType) { case RootObjectTypes.Client: switch (nSlot) { case 1: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.ClientPhone1; break; case 2: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.ClientPhone2; break; case 3: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.ClientPhone3; break; case 4: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.ClientPhone4; break; case 5: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.ClientPhone5; break; } break; case RootObjectTypes.HeadOffice: switch (nSlot) { case 1: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.HeadOfficePhone1; break; case 2: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.HeadOfficePhone2; break; case 3: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.HeadOfficePhone3; break; case 4: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.HeadOfficePhone4; break; case 5: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.HeadOfficePhone5; break; } break; case RootObjectTypes.Vendor: switch (nSlot) { case 1: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.VendorPhone1; break; case 2: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.VendorPhone2; break; case 3: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.VendorPhone3; break; case 4: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.VendorPhone4; break; case 5: ptype = (AYOLPhoneNumberType)AyaNovaOL.Properties.Settings.Default.VendorPhone5; break; } break; } #endregion determine where to put it #region Import switch (ptype) { case AYOLPhoneNumberType.Unused: return; case AYOLPhoneNumberType.AssistantTelephoneNumber: ci.AssistantTelephoneNumber=sPhone;break; case AYOLPhoneNumberType.Business2TelephoneNumber: ci.Business2TelephoneNumber=sPhone;break; case AYOLPhoneNumberType.BusinessFaxNumber: ci.BusinessFaxNumber=sPhone;break; case AYOLPhoneNumberType.BusinessTelephoneNumber: ci.BusinessTelephoneNumber=sPhone;break; case AYOLPhoneNumberType.CallbackTelephoneNumber: ci.CallbackTelephoneNumber=sPhone;break; case AYOLPhoneNumberType.CarTelephoneNumber: ci.CarTelephoneNumber=sPhone;break; case AYOLPhoneNumberType.CompanyMainTelephoneNumber: ci.CompanyMainTelephoneNumber=sPhone;break; case AYOLPhoneNumberType.Home2TelephoneNumber: ci.Home2TelephoneNumber=sPhone;break; case AYOLPhoneNumberType.HomeFaxNumber: ci.HomeFaxNumber=sPhone;break; case AYOLPhoneNumberType.HomeTelephoneNumber: ci.HomeTelephoneNumber=sPhone;break; case AYOLPhoneNumberType.ISDNNumber: ci.ISDNNumber=sPhone;break; case AYOLPhoneNumberType.MobileTelephoneNumber: ci.MobileTelephoneNumber=sPhone;break; case AYOLPhoneNumberType.OtherFaxNumber: ci.OtherFaxNumber=sPhone;break; case AYOLPhoneNumberType.OtherTelephoneNumber: ci.OtherTelephoneNumber=sPhone;break; case AYOLPhoneNumberType.PagerNumber: ci.PagerNumber=sPhone;break; case AYOLPhoneNumberType.PrimaryTelephoneNumber: ci.PrimaryTelephoneNumber=sPhone;break; case AYOLPhoneNumberType.RadioTelephoneNumber: ci.RadioTelephoneNumber=sPhone;break; case AYOLPhoneNumberType.TelexNumber: ci.TelexNumber=sPhone;break; case AYOLPhoneNumberType.TTYTDDTelephoneNumber: ci.TTYTDDTelephoneNumber=sPhone;break; } #endregion getphone number } /// /// Build id list for object type selected /// private void BuildIDListForAll() { if(mIDList==null) mIDList=new List(); mIDList.Clear(); switch (mObjectType) { case RootObjectTypes.Client: { ClientPickList cpl = ClientPickList.GetList(true); foreach (ClientPickList.ClientPickListInfo i in cpl) mIDList.Add(i.ID); } break; case RootObjectTypes.HeadOffice: { GenericNVList l = GenericNVList.GetList("HEADOFFICE", "ID", "NAME", true, false, true); foreach (DictionaryEntry d in l.BindableList) mIDList.Add(new Guid(d.Key.ToString())); } break; case RootObjectTypes.Vendor: { VendorPickList cpl = VendorPickList.GetList(mVendorType); foreach (VendorPickList.VendorPickListInfo i in cpl) mIDList.Add(i.ID); } break; } } }//end class }//end ns