Files
ayanova7/source/Plugins/AyaNovaOL/ImportContactsFromAyaNova.cs
2018-06-29 19:47:36 +00:00

378 lines
16 KiB
C#

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<Guid> mIDList;
VendorTypes mVendorType;
public bool DoImport(bool bSelectedOnly, Outlook.MAPIFolder fldr, RootObjectTypes objectType, VendorTypes selectedVendorType, List<Guid> 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
}
/// <summary>
/// Build id list for object type selected
/// </summary>
private void BuildIDListForAll()
{
if(mIDList==null) mIDList=new List<Guid>();
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