/* OpenERP, Open Source Business Applications Copyright (c) 2011 OpenERP S.A. 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 . */ 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 /// /// The object for implementing an Add-in. /// /// [GuidAttribute("C86B5760-1254-4F40-BD25-2094A2A678C4"), ProgId("OpenERPOutlookPlugin.Connect")] public class Connect : Object, Extensibility.IDTExtensibility2 { /// /// Implements the constructor for the Add-in object. /// Place your initialization code within this method. /// public Connect() { } public int cnt_mail = 0; /// /// Implements the OnConnection method of the IDTExtensibility2 interface. /// Receives notification that the Add-in is being loaded. /// /// /// Root object of the host application. /// /// /// Describes how the Add-in is being loaded. /// /// /// Object representing this Add-in. /// /// 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); } } /// /// Implements the OnDisconnection method of the IDTExtensibility2 interface. /// Receives notification that the Add-in is being unloaded. /// /// /// Describes how the Add-in is being unloaded. /// /// /// Array of parameters that are host application specific. /// /// public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom) { if (disconnectMode != Extensibility.ext_DisconnectMode.ext_dm_HostShutdown) { OnBeginShutdown(ref custom); } applicationObject = null; } /// /// Implements the OnAddInsUpdate method of the IDTExtensibility2 interface. /// Receives notification that the collection of Add-ins has changed. /// /// /// Array of parameters that are host application specific. /// /// public void OnAddInsUpdate(ref System.Array custom) { } /// /// Implements the OnStartupComplete method of the IDTExtensibility2 interface. /// Receives notification that the host application has completed loading. /// /// /// Array of parameters that are host application specific. /// /// /// 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; } }