odoo/addons/plugin_outlook/static/openerp-outlook-plugin/OpenERPOutlookPlugin/Connect.cs

355 lines
14 KiB
C#

/*
OpenERP, Open Source Business Applications
Copyright (c) 2011 OpenERP S.A. <http://openerp.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace OpenERPOutlookPlugin
{
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using office = Microsoft.Office.Core;
using outlook = Microsoft.Office.Interop.Outlook;
using OpenERPClient;
#region Read me for Add-in installation and setup information.
// When run, the Add-in wizard prepared the registry for the Add-in.
// At a later time, if the Add-in becomes unavailable for reasons such as:
// 1) You moved this project to a computer other than which is was originally created on.
// 2) You chose 'Yes' when presented with a message asking if you wish to remove the Add-in.
// 3) Registry corruption.
// you will need to re-register the Add-in by building the OpenERPOutlookPluginSetup project,
// right click the project in the Solution Explorer, then choose install.
#endregion
/// <summary>
/// The object for implementing an Add-in.
/// </summary>
/// <seealso class='IDTExtensibility2' />
[GuidAttribute("C86B5760-1254-4F40-BD25-2094A2A678C4"), ProgId("OpenERPOutlookPlugin.Connect")]
public class Connect : Object, Extensibility.IDTExtensibility2
{
/// <summary>
/// Implements the constructor for the Add-in object.
/// Place your initialization code within this method.
/// </summary>
public Connect()
{
}
public int cnt_mail = 0;
/// <summary>
/// Implements the OnConnection method of the IDTExtensibility2 interface.
/// Receives notification that the Add-in is being loaded.
/// </summary>
/// <param term='application'>
/// Root object of the host application.
/// </param>
/// <param term='connectMode'>
/// Describes how the Add-in is being loaded.
/// </param>
/// <param term='addInInst'>
/// Object representing this Add-in.
/// </param>
/// <seealso class='IDTExtensibility2' />
public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
applicationObject = application;
addInInstance = addInInst;
if (connectMode != Extensibility.ext_ConnectMode.ext_cm_Startup)
{
OnStartupComplete(ref custom);
}
}
/// <summary>
/// Implements the OnDisconnection method of the IDTExtensibility2 interface.
/// Receives notification that the Add-in is being unloaded.
/// </summary>
/// <param term='disconnectMode'>
/// Describes how the Add-in is being unloaded.
/// </param>
/// <param term='custom'>
/// Array of parameters that are host application specific.
/// </param>
/// <seealso class='IDTExtensibility2' />
public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom)
{
if (disconnectMode != Extensibility.ext_DisconnectMode.ext_dm_HostShutdown)
{
OnBeginShutdown(ref custom);
}
applicationObject = null;
}
/// <summary>
/// Implements the OnAddInsUpdate method of the IDTExtensibility2 interface.
/// Receives notification that the collection of Add-ins has changed.
/// </summary>
/// <param term='custom'>
/// Array of parameters that are host application specific.
/// </param>
/// <seealso class='IDTExtensibility2' />
public void OnAddInsUpdate(ref System.Array custom)
{
}
/// <summary>
/// Implements the OnStartupComplete method of the IDTExtensibility2 interface.
/// Receives notification that the host application has completed loading.
/// </summary>
/// <param term='custom'>
/// Array of parameters that are host application specific.
/// </param>
/// <seealso class='IDTExtensibility2' />
///
private office.CommandBarButton btn_open_partner;
private office.CommandBarButton btn_open_document;
private office.CommandBarButton btn_open_configuration_form;
private office.CommandBars oCommandBars;
private office.CommandBar menuBar;
private office.CommandBarPopup newMenuBar;
public int countMail()
{
/*
* Gives the number of selected mail.
* returns: Number of selected mail.
*/
cnt_mail = 0;
Microsoft.Office.Interop.Outlook.Application app = null;
app = new Microsoft.Office.Interop.Outlook.Application();
foreach (var selection in app.ActiveExplorer().Selection)
{
cnt_mail = app.ActiveExplorer().Selection.Count;
}
return cnt_mail;
}
public void OnStartupComplete(ref System.Array custom)
{
/*
* When outlook is opened it loads a Menu if Outlook plugin is installed.
* OpenERP - > Push, Partner ,Documents, Configuration
*/
Microsoft.Office.Interop.Outlook.Application app = null;
try
{
app = new Microsoft.Office.Interop.Outlook.Application();
object omissing = System.Reflection.Missing.Value;
menuBar = app.ActiveExplorer().CommandBars.ActiveMenuBar;
ConfigManager config = new ConfigManager();
config.LoadConfigurationSetting();
OpenERPOutlookPlugin openerp_outlook = Cache.OpenERPOutlookPlugin;
OpenERPConnect openerp_connect = openerp_outlook.Connection;
try
{
if (openerp_connect.URL != null && openerp_connect.DBName != null && openerp_connect.UserId != null && openerp_connect.pswrd != "")
{
string decodpwd = Tools.DecryptB64Pwd(openerp_connect.pswrd);
openerp_connect.Login(openerp_connect.DBName, openerp_connect.UserId, decodpwd);
}
}
catch(Exception )
{
MessageBox.Show("Unable to connect remote Server ' " + openerp_connect.URL + " '.", "OpenERP Connection",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}
newMenuBar = (office.CommandBarPopup)menuBar.Controls.Add(office.MsoControlType.msoControlPopup, omissing, omissing, omissing, true);
if (newMenuBar != null)
{
newMenuBar.Caption = "OpenERP";
newMenuBar.Tag = "My";
btn_open_partner = (office.CommandBarButton)newMenuBar.Controls.Add(office.MsoControlType.msoControlButton, omissing, omissing, 1, true);
btn_open_partner.Style = office.MsoButtonStyle.msoButtonIconAndCaption;
btn_open_partner.Caption = "Contact";
//Face ID will use to show the ICON in the left side of the menu.
btn_open_partner.FaceId = 3710;
newMenuBar.Visible = true;
btn_open_partner.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(this.btn_open_partner_Click);
btn_open_document = (office.CommandBarButton)newMenuBar.Controls.Add(office.MsoControlType.msoControlButton, omissing, omissing, 2, true);
btn_open_document.Style = office.MsoButtonStyle.msoButtonIconAndCaption;
btn_open_document.Caption = "Documents";
//Face ID will use to show the ICON in the left side of the menu.
btn_open_document.FaceId = 258;
newMenuBar.Visible = true;
btn_open_document.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(this.btn_open_document_Click);
btn_open_configuration_form = (office.CommandBarButton)newMenuBar.Controls.Add(office.MsoControlType.msoControlButton, omissing, omissing, 3, true);
btn_open_configuration_form.Style = office.MsoButtonStyle.msoButtonIconAndCaption;
btn_open_configuration_form.Caption = "Configuration";
//Face ID will use to show the ICON in the left side of the menu.
btn_open_configuration_form.FaceId = 5644;
newMenuBar.Visible = true;
btn_open_configuration_form.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(this.btn_open_configuration_form_Click);
}
}
catch (Exception)
{
object oActiveExplorer;
oActiveExplorer = applicationObject.GetType().InvokeMember("ActiveExplorer", BindingFlags.GetProperty, null, applicationObject, null);
oCommandBars = (office.CommandBars)oActiveExplorer.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, oActiveExplorer, null);
}
}
void btn_open_configuration_form_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault)
{
frm_openerp_configuration frm_config = new frm_openerp_configuration();
frm_config.Show();
}
public static bool isLoggedIn()
{
/*
* This will check that it is connecting with server or not.
* If wrong server name or port is given then it will throw the message.
* returns true If conneted with server, otherwise False.
*/
if (Cache.OpenERPOutlookPlugin == null || Cache.OpenERPOutlookPlugin.isLoggedIn == false)
{
throw new Exception("OpenERP Server is not connected!\nPlease connect OpenERP Server from Configuration Menu.");
}
return true;
}
public static void handleException(Exception e)
{
string Title;
if (Form.ActiveForm != null)
{
Title = Form.ActiveForm.Text;
}
else
{
Title = "OpenERP Addin";
}
MessageBox.Show(e.Message, Title, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
public static void displayMessage(string message)
{
string Title;
if (Form.ActiveForm != null)
{
Title = Form.ActiveForm.Text;
}
else
{
Title = "OpenERP Addin";
}
MessageBox.Show(message, Title, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
public void CheckMailCount()
{
if (countMail() == 0)
{
throw new Exception("No email selected.\nPlease select one email.");
}
if (countMail() > 1)
{
throw new Exception("Multiple selction is not allowed.\nPlease select only one email.");
}
}
void btn_open_partner_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault)
{
try
{
Connect.isLoggedIn();
this.CheckMailCount();
if (countMail() == 1)
{
foreach (outlook.MailItem mailitem in Tools.MailItems())
{
Object[] contact = Cache.OpenERPOutlookPlugin.RedirectPartnerPage(mailitem);
if ((int)contact[1] > 0)
{
Cache.OpenERPOutlookPlugin.RedirectWeb(contact[2]);
}
else
{
frm_contact contact_form = new frm_contact(mailitem.SenderName, mailitem.SenderEmailAddress);
contact_form.Show();
}
}
}
}
catch (Exception e)
{
Connect.handleException(e);
}
}
void btn_open_document_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault)
{
try
{
Connect.isLoggedIn();
this.CheckMailCount();
if (countMail() == 1)
{
frm_choose_document_opt frm_doc = new frm_choose_document_opt();
}
}
catch (Exception e)
{
Connect.handleException(e);
}
}
public void OnBeginShutdown(ref System.Array custom)
{
}
private object applicationObject;
private object addInInstance;
}
}