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

223 lines
8.4 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/>.
*/
using System;
using System.Collections;
using System.Linq;
using OpenERPClient;
using outlook = Microsoft.Office.Interop.Outlook;
using System.Windows.Forms;
namespace OpenERPOutlookPlugin
{
public class OpenERPOutlookPlugin : Model
{
public Boolean isLoggedIn
{
/*
* This will check that user is logged in or not and gets the value
* returns : True if loggedIn, False otherwise.
*/
get
{
if (this.Connection != null) { return this.Connection.isLoggedIn; }
return false;
}
}
public OpenERPOutlookPlugin(OpenERPConnect connection)
{
this.Connection = connection;
//this.set_server_method();
}
public Record[] SearchRecord(string name,string model)
{
/*
* Gives name and model for search record.
*/
ArrayList object_list = new ArrayList();
Model parent_model;
parent_model = new Model(model);
ArrayList args = new ArrayList();
args.Add(parent_model.model);
if (name != null)
{
args.Add(name);
}
else
{
args.Add("");
}
object[] objects = (object[])this.openerp_connect.Execute("plugin.handler", "list_document_get", args.ToArray());
foreach (object obj in objects)
{
Hashtable document = new Hashtable();
object[] names = (object[])obj;
document.Add("id", names[0].ToString());
document.Add("name", names[1].ToString());
object_list.Add(new Record(document,parent_model));
}
return (Record[])object_list.ToArray(typeof(Record));
}
public string Name_get(outlook.MailItem mail)
{
string email = Tools.GetHeader(mail);
object doc = this.openerp_connect.Execute("plugin.handler", "document_get", email);
object[] name = (object[])doc;
return name[3].ToString();
}
public void RedirectWeb(object web_url)
{
/*
* Will open the url into the web browser.
*/
System.Diagnostics.Process.Start(web_url.ToString());
}
public object[] RedirectPartnerPage(outlook.MailItem mail)
{
/*
* Will Redirect to the web-browser and open partner.
* If it will not found partner in res.partner.address (in contact) then
it will open the contact form to create a partner.
:Param outlook.MailItem mailItem : Outlook Mail item
*/
string email_id = mail.SenderEmailAddress.ToString();
Object[] contact = (Object[])this.openerp_connect.Execute("plugin.handler", "partner_get", email_id);
return contact;
}
public void Open_Document(outlook.MailItem mail)
{
/*
* To open document attached in a url.returns the model_id and res_id of the document
:Param outlook.MailItem mail: Outlook mails.
*/
string email = Tools.GetHeader(mail);
object doc = this.openerp_connect.Execute("plugin.handler", "document_get", email);
object[] url = (object[])doc;
this.RedirectWeb(url[2].ToString());
}
public Boolean PushMail(outlook.MailItem mail, string model, int thread_id)
{
/*
* This will push the mail as per the selected items from the list.
:Param outlook.MailItem mail: selected mail from the outlook.
:Param string model : Model name to push.
:Param int thread_id : Thread id of the mail.
* If mail pushed successfully then it returns true.
* return False if mail Already Exist.
*/
OpenERPOutlookPlugin openerp_outlook = Cache.OpenERPOutlookPlugin;
OpenERPConnect openerp_connect = openerp_outlook.Connection;
ArrayList args = new ArrayList();
Hashtable vals = new Hashtable();
string email = Tools.GetHeader(mail); //TODO: Outlook.MailItem Should be Converted into MIME Message
args.Add(model);
args.Add(email.ToString());
args.Add(thread_id);
Hashtable attachments = Tools.GetAttachments(mail);
args.Add(mail.Body);
args.Add(mail.HTMLBody);
args.Add(attachments);
object push_mail = this.Connection.Execute("plugin.handler", "push_message_outlook", args.ToArray());
object[] push = (object[])push_mail;
this.RedirectWeb(push[2].ToString());
return true;
}
public long CreatePartnerRecord(string name)
{
/*
* Creates a partner record in res.partner as per the name given in the plugin form.
:Param String name: Name given to create a partner in the database.
* Returns a Long value : Partner id.
*/
Record[] partenr_list = this.SearchRecord(name,"res.partner");
int partner_id = 0;
foreach (Record partner in partenr_list)
{
partner_id = Convert.ToInt16(partner.id);
}
return partner_id;
}
public void CreateContactRecord(int partner_id, string name, string email_id)
{
/*
* Creates a Contact record in the res.partner.address as per the details given in the
plugin form of openERP outlook Plugin.
:Param string partner_id : Partner id for which it creates a contact
:Param string name : Contact name
:Param string email_id : Email address
*/
Hashtable values = new Hashtable();
values.Add("name", name);
values.Add("email", email_id);
ArrayList args = new ArrayList();
args.Add(values);
args.Add(partner_id);
object[] contact = (object[])this.openerp_connect.Execute("plugin.handler", "contact_create", args.ToArray());
this.RedirectWeb(contact[2].ToString());
}
public Model[] GetMailModels()
{
/*
* function to get objects to display in combo box
* returns the Array list of models.
*/
ArrayList obj_list = new ArrayList();
object mail_models = this.Connection.Execute("plugin.handler", "document_type");
foreach (object model in (object[])mail_models)
{
Model open_model;
string[] models = (string[])model;
open_model = new Model(models[0], models[1]);
open_model.Connection = this.Connection;
obj_list.Add(open_model);
}
return (Model[])obj_list.ToArray(typeof(Model));
}
}
}