diff options
Diffstat (limited to 'addons/outlook/plugin')
| -rw-r--r-- | addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/openerp_logo1.bmp | bin | 8166 -> 306 bytes | |||
| -rw-r--r-- | addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py | 878 |
2 files changed, 459 insertions, 419 deletions
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/openerp_logo1.bmp b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/openerp_logo1.bmp Binary files differindex 503ee136f87..4e40d9e989a 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/openerp_logo1.bmp +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/openerp_logo1.bmp diff --git a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py index 2c2ab3b787f..3883e08ad78 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py @@ -30,6 +30,7 @@ import email from win32com.mapi import mapi, mapiutil, mapitags
import pythoncom
import win32com
+import win32ui
waittime = 10
wait_count = 0
wait_limit = 12
@@ -38,19 +39,19 @@ def execute(connector, method, *args): global wait_count
res = False
try:
- res = getattr(connector,method)(*args)
+ res = getattr(connector,method)(*args)
except socket.error,e:
if e.args[0] == 111:
if wait_count > wait_limit:
- print "Server is taking too long to start, it has exceeded the maximum limit of %d seconds."%(wait_limit)
- clean()
- sys.exit(1)
+ print "Server is taking too long to start, it has exceeded the maximum limit of %d seconds."%(wait_limit)
+ clean()
+ sys.exit(1)
print 'Please wait %d sec to start server....'%(waittime)
wait_count += 1
time.sleep(waittime)
res = execute(connector, method, *args)
else:
- return res
+ return res
wait_count = 0
return res
@@ -58,475 +59,514 @@ class XMLRpcConn(object): __name__ = 'XMLRpcConn'
_com_interfaces_ = ['_IDTExtensibility2']
_public_methods_ = ['GetDBList', 'login', 'GetAllObjects', 'GetObjList', 'InsertObj', 'DeleteObject', 'GetCSList', \
- 'ArchiveToOpenERP', 'IsCRMInstalled', 'GetPartners', 'GetObjectItems', \
- 'CreateCase', 'MakeAttachment', 'CreateContact', 'CreatePartner', 'getitem', 'setitem', \
- 'SearchPartnerDetail', 'WritePartnerValues', 'GetAllState', 'GetAllCountry', 'SearchPartner', 'SearchEmailResources', \
- 'GetCountry', 'GetStates', 'FindCountryForState']
+ 'ArchiveToOpenERP', 'IsCRMInstalled', 'GetPartners', 'GetObjectItems', \
+ 'CreateCase', 'MakeAttachment', 'CreateContact', 'CreatePartner', 'getitem', 'setitem', \
+ 'SearchPartnerDetail', 'WritePartnerValues', 'GetAllState', 'GetAllCountry', 'SearchPartner', 'SearchEmailResources', \
+ 'GetCountry', 'GetStates', 'FindCountryForState','CreateEmailAttachment']
_reg_clsctx_ = pythoncom.CLSCTX_INPROC_SERVER
_reg_clsid_ = "{C6399AFD-763A-400F-8191-7F9D0503CAE2}"
_reg_progid_ = "Python.OpenERP.XMLRpcConn"
_reg_policy_spec_ = "win32com.server.policy.EventHandlerPolicy"
def __init__(self,server='localhost',port=8069,uri='http://localhost:8069'):
- self._server=server
- self._port=port
- self._uri=uri
- self._obj_list=[]
- self._dbname=''
- self._uname='admin'
- self._pwd='a'
- self._login=False
- self._running=False
- self._uid=False
- self._iscrm=True
- self.partner_id_list=None
- self.protocol=None
+ self._server=server
+ self._port=port
+ self._uri=uri
+ self._obj_list=[]
+ self._dbname=''
+ self._uname='admin'
+ self._pwd='a'
+ self._login=False
+ self._running=False
+ self._uid=False
+ self._iscrm=True
+ self.partner_id_list=None
+ self.protocol=None
def getitem(self, attrib):
- v=self.__getattribute__(attrib)
- return str(v)
+ v=self.__getattribute__(attrib)
+ return str(v)
def setitem(self, attrib, value):
- return self.__setattr__(attrib, value)
+ return self.__setattr__(attrib, value)
def GetDBList(self):
- conn = xmlrpclib.ServerProxy(self._uri + '/xmlrpc/db')
- try:
- db_list = execute(conn, 'list')
- if db_list == False:
- self._running=False
- return []
- else:
- self._running=True
- except:
- db_list=-1
- self._running=True
- return db_list
+ conn = xmlrpclib.ServerProxy(self._uri + '/xmlrpc/db')
+ try:
+ db_list = execute(conn, 'list')
+ if db_list == False:
+ self._running=False
+ return []
+ else:
+ self._running=True
+ except:
+ db_list=-1
+ self._running=True
+ return db_list
def login(self,dbname, user, pwd):
- self._dbname = dbname
- self._uname = user
- self._pwd = pwd
- conn = xmlrpclib.ServerProxy(str(self._uri) + '/xmlrpc/common')
- uid = execute(conn,'login',dbname, ustr(user), ustr(pwd))
- return uid
+ self._dbname = dbname
+ self._uname = user
+ self._pwd = pwd
+ conn = xmlrpclib.ServerProxy(str(self._uri) + '/xmlrpc/common')
+ uid = execute(conn,'login',dbname, ustr(user), ustr(pwd))
+ return uid
def GetAllObjects(self):
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[])
- objects = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','read',ids,['model'])
- obj_list = [item['model'] for item in objects]
- return obj_list
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[])
+ objects = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','read',ids,['model'])
+ obj_list = [item['model'] for item in objects]
+ return obj_list
def GetObjList(self):
- self._obj_list=list(self._obj_list)
- self._obj_list.sort(reverse=True)
- return self._obj_list
+ self._obj_list=list(self._obj_list)
+ self._obj_list.sort(reverse=True)
+ return self._obj_list
def InsertObj(self, obj_title,obj_name,image_path):
- self._obj_list=list(self._obj_list)
- self._obj_list.append((obj_title,obj_name,ustr(image_path)))
- self._obj_list.sort(reverse=True)
+ self._obj_list=list(self._obj_list)
+ self._obj_list.append((obj_title,obj_name,ustr(image_path)))
+ self._obj_list.sort(reverse=True)
def DeleteObject(self,sel_text):
- self._obj_list=list(self._obj_list)
- for obj in self._obj_list:
- if obj[0] == sel_text:
- self._obj_list.remove(obj)
- break
+ self._obj_list=list(self._obj_list)
+ for obj in self._obj_list:
+ if obj[0] == sel_text:
+ self._obj_list.remove(obj)
+ break
def ArchiveToOpenERP(self, recs, mail):
- import win32ui, win32con
- conn = xmlrpclib.ServerProxy(self._uri + '/xmlrpc/object')
- import eml
- flag = False
- new_msg = files = ext_msg =""
- message_id = referances = None
- try:
- outlook = win32com.client.Dispatch("Outlook.Application")
- session = win32com.client.Dispatch("MAPI.session")
- session.Logon('Outlook')
- objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
- objFields = objMessage.Fields
- strheader = objFields.Item(mapitags.PR_TRANSPORT_MESSAGE_HEADERS)
- strheader = ustr(strheader).encode('iso-8859-1')
- headers = {}
- strheader = strheader.replace("\n ", " ").splitlines()
- for line in strheader:
- split_here = line.find(":")
- headers[line[:split_here]] = line[split_here:]
- temp1 = headers.get('Message-ID')
- temp2 = headers.get('Message-Id')
- referances = headers.get('References')
- if temp1 == None: message_id = temp2
- if temp2 == None: message_id = temp1
- startCut = message_id.find("<")
- endCut = message_id.find(">")
- message_id = message_id[startCut:endCut+1]
- if not referances == None:
- startCut = referances.find("<")
- endCut = referances.find(">")
- referances = referances[startCut:endCut+1]
- except Exception,e:
- win32ui.MessageBox(str(e),"Archive To OpenERP")
- return
- new_mail=eml.generateEML(mail)
- attachments=mail.Attachments
- for rec in recs: #[('res.partner', 3, 'Agrolait')]
- model = rec[0]
- res_id = rec[1]
- #Check if mailgate installed
- object_id = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=','mailgate.message')])
- if not object_id:
- win32ui.MessageBox("Mailgate is not installed on your configured database '%s' !!\n\nPlease install it to archive the mail."%(self._dbname),"Mailgate not installed",win32con.MB_ICONERROR)
- return
-
- object_ids = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=',model)])
- object_name = execute( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','read',object_ids,['name'])[0]['name']
-
- #Reading the Object ir.model Name
-
- ext_ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'mailgate.message','search',[('message_id','=',message_id),('model','=',model),('res_id','=',res_id)])
- if ext_ids:
- name = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,model,'read',res_id,['name'])['name']
- ext_msg += """This mail is already archived to {0} '{1}'.\n""".format(object_name,name)
- flag = True
- continue
- msg = {
- 'subject':mail.Subject,
- 'date':str(mail.ReceivedTime),
- 'body':mail.Body,
- 'cc':mail.CC,
- 'from':mail.SenderEmailAddress,
- 'to':mail.To,
- 'message-id':message_id,
- 'references':ustr(referances),
- }
- result = {}
- if attachments:
- result = self.MakeAttachment([rec], mail)
- attachment_ids = result.get(model, {}).get(res_id, [])
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','history',model, res_id, msg, attachment_ids)
- new_msg += """- {0} : {1}\n""".format(object_name,str(rec[2]))
- flag = True
-
- if flag:
- t = """Mail archived Successfully with attachments.\n"""+ext_msg
- t += "\n"+new_msg
- win32ui.MessageBox(t,"Archived to OpenERP",win32con.MB_ICONINFORMATION)
- return flag
+ import win32ui, win32con
+ conn = xmlrpclib.ServerProxy(self._uri + '/xmlrpc/object')
+ import eml
+ flag = False
+ new_msg = files = ext_msg =""
+ message_id = referances = None
+ try:
+ outlook = win32com.client.Dispatch("Outlook.Application")
+ session = win32com.client.Dispatch("MAPI.session")
+ session.Logon('Outlook')
+ objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
+ objFields = objMessage.Fields
+ strheader = objFields.Item(mapitags.PR_TRANSPORT_MESSAGE_HEADERS)
+ strheader = ustr(strheader).encode('iso-8859-1')
+ headers = {}
+ strheader = strheader.replace("\n ", " ").splitlines()
+ for line in strheader:
+ split_here = line.find(":")
+ headers[line[:split_here]] = line[split_here:]
+ temp1 = headers.get('Message-ID')
+ temp2 = headers.get('Message-Id')
+ referances = headers.get('References')
+ if temp1 == None: message_id = temp2
+ if temp2 == None: message_id = temp1
+ startCut = message_id.find("<")
+ endCut = message_id.find(">")
+ message_id = message_id[startCut:endCut+1]
+ if not referances == None:
+ startCut = referances.find("<")
+ endCut = referances.find(">")
+ referances = referances[startCut:endCut+1]
+ except Exception,e:
+ win32ui.MessageBox(str(e),"Archive To OpenERP")
+ return
+ new_mail=eml.generateEML(mail)
+ attachments=mail.Attachments
+ for rec in recs: #[('res.partner', 3, 'Agrolait')]
+ model = rec[0]
+ res_id = rec[1]
+ #Check if mailgate installed
+ object_id = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=','mailgate.message')])
+ if not object_id:
+ win32ui.MessageBox("Mailgate is not installed on your configured database '%s' !!\n\nPlease install it to archive the mail."%(self._dbname),"Mailgate not installed",win32con.MB_ICONERROR)
+ return
+ object_ids = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=',model)])
+ object_name = execute( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','read',object_ids,['name'])[0]['name']
+ #Reading the Object ir.model Name
+ ext_ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'mailgate.message','search',[('message_id','=',message_id),('model','=',model),('res_id','=',res_id)])
+ if ext_ids:
+ name = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,model,'read',res_id,['name'])['name']
+ ext_msg += """This mail is already archived to {0} '{1}'.\n""".format(object_name,name)
+ flag = True
+ continue
+ msg = {
+ 'subject':mail.Subject,
+ 'date':str(mail.ReceivedTime),
+ 'body':mail.Body,
+ 'cc':mail.CC,
+ 'from':mail.SenderEmailAddress,
+ 'to':mail.To,
+ 'message-id':message_id,
+ 'references':ustr(referances),
+ }
+ obj_list= ['crm.lead','project.issue','hr.applicant','res.partner']
+ if rec[0] not in obj_list:
+ ids = self.CreateEmailAttachment(rec,mail)
+ result = {}
+ if attachments:
+ result = self.MakeAttachment([rec], mail)
+ attachment_ids = result.get(model, {}).get(res_id, [])
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','history',model, res_id, msg, attachment_ids)
+ new_msg += """- {0} : {1}\n""".format(object_name,str(rec[2]))
+ flag = True
+
+ if flag:
+ t = """Mail archived Successfully with attachments.\n"""+ext_msg
+ t += "\n"+new_msg
+ win32ui.MessageBox(t,"Archived to OpenERP",win32con.MB_ICONINFORMATION)
+ return flag
def IsCRMInstalled(self):
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=','crm.lead')])
- return id
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=','crm.lead')])
+ return id
def GetCSList(self):
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- ids = execute(conn,'execute',self._dbname,int(int(self._uid)),self._pwd,'crm.case.section','search',[])
- objects = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'crm.case.section','read',ids,['name'])
- obj_list = [ustr(item['name']).encode('iso-8859-1') for item in objects]
- return obj_list
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids = execute(conn,'execute',self._dbname,int(int(self._uid)),self._pwd,'crm.case.section','search',[])
+ objects = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'crm.case.section','read',ids,['name'])
+ obj_list = [ustr(item['name']).encode('iso-8859-1') for item in objects]
+ return obj_list
def GetPartners(self, search_partner=''):
- import win32ui
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- ids=[]
- obj_list=[]
- domain = []
- if not search_partner.strip() == '':
- domain.append(('name','ilike',ustr(search_partner)))
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner','search',domain)
- if ids:
- ids.sort()
- obj_list.append((-999, ustr('')))
- for id in ids:
- object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner','read',[id],['id','name'])[0]
- obj_list.append((object['id'], ustr(object['name'])))
- obj_list.sort(lambda x, y: cmp(x[1],y[1]))
- return obj_list
+ import win32ui
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids=[]
+ obj_list=[]
+ domain = []
+ if not search_partner.strip() == '':
+ domain.append(('name','ilike',ustr(search_partner)))
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner','search',domain)
+ if ids:
+ ids.sort()
+ obj_list.append((-999, ustr('')))
+ for id in ids:
+ object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner','read',[id],['id','name'])[0]
+ obj_list.append((object['id'], ustr(object['name'])))
+ obj_list.sort(lambda x, y: cmp(x[1],y[1]))
+ return obj_list
def GetObjectItems(self, search_list=[], search_text=''):
- import win32ui
- res = []
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- for obj in search_list:
- object_ids = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=',obj)])
- object_name = execute( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','read',object_ids,['name'])[0]['name']
- if obj == "res.partner.address":
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'search',['|',('name','ilike',ustr(search_text)),('email','ilike',ustr(search_text))])
- recs = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'read',ids,['id','name','street','city'])
- for rec in recs:
- name = ustr(rec['name'])
- if rec['street']:
- name += ', ' + ustr(rec['street'])
- if rec['city']:
- name += ', ' + ustr(rec['city'])
- res.append((obj,rec['id'],name,object_name))
- else:
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'search',[('name','ilike',ustr(search_text))])
- recs = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'read',ids,['id','name'])
- for rec in recs:
- name = ustr(rec['name'])
- res.append((obj,rec['id'],name,object_name))
- return res
+ import win32ui
+ res = []
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ for obj in search_list:
+ object_ids = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=',obj)])
+ object_name = execute( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','read',object_ids,['name'])[0]['name']
+ if obj == "res.partner.address":
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'search',['|',('name','ilike',ustr(search_text)),('email','ilike',ustr(search_text))])
+ recs = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'read',ids,['id','name','street','city'])
+ for rec in recs:
+ name = ustr(rec['name'])
+ if rec['street']:
+ name += ', ' + ustr(rec['street'])
+ if rec['city']:
+ name += ', ' + ustr(rec['city'])
+ res.append((obj,rec['id'],name,object_name))
+ else:
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'search',[('name','ilike',ustr(search_text))])
+ recs = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,obj,'read',ids,['id','name'])
+ for rec in recs:
+ name = ustr(rec['name'])
+ res.append((obj,rec['id'],name,object_name))
+ return res
def CreateCase(self, section, mail, partner_ids, with_attachments=True):
- import win32ui
- import eml
- flag = False
- id = -1
- try:
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- email=eml.generateEML(mail)
- message_id = referances = None
- outlook = win32com.client.Dispatch("Outlook.Application")
- session = win32com.client.Dispatch("MAPI.session")
- session.Logon('Outlook')
- objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
- objFields = objMessage.Fields
- strheader = objFields.Item(mapitags.PR_TRANSPORT_MESSAGE_HEADERS)
- strheader = ustr(strheader).encode('iso-8859-1')
- headers = {}
- strheader = strheader.replace("\n ", " ").splitlines()
- for line in strheader:
- split_here = line.find(":")
- headers[line[:split_here]] = line[split_here:]
- temp1 = headers.get('Message-ID')
- temp2 = headers.get('Message-Id')
- if temp1 == None: message_id = temp2
- if temp2 == None: message_id = temp1
- startCut = message_id.find("<")
- endCut = message_id.find(">")
- message_id = message_id[startCut:endCut+1]
- email.replace_header('Message-Id',message_id)
- id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','process_email',section, str(email))
- if id > 0:
- flag = True
- return flag
- else:
- flag = False
- return flag
- except Exception,e:
- win32ui.MessageBox("Create Case\n"+str(e),"Mail Reading Error")
- return flag
+ import win32ui
+ import eml
+ flag = False
+ id = -1
+ try:
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ email=eml.generateEML(mail)
+ message_id = referances = None
+ outlook = win32com.client.Dispatch("Outlook.Application")
+ session = win32com.client.Dispatch("MAPI.session")
+ session.Logon('Outlook')
+ objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
+ objFields = objMessage.Fields
+ strheader = objFields.Item(mapitags.PR_TRANSPORT_MESSAGE_HEADERS)
+ strheader = ustr(strheader).encode('iso-8859-1')
+ headers = {}
+ strheader = strheader.replace("\n ", " ").splitlines()
+ for line in strheader:
+ split_here = line.find(":")
+ headers[line[:split_here]] = line[split_here:]
+ temp1 = headers.get('Message-ID')
+ temp2 = headers.get('Message-Id')
+ if temp1 == None: message_id = temp2
+ if temp2 == None: message_id = temp1
+ startCut = message_id.find("<")
+ endCut = message_id.find(">")
+ message_id = message_id[startCut:endCut+1]
+ email.replace_header('Message-Id',message_id)
+ id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','process_email',section, str(email))
+ if id > 0:
+ flag = True
+ return flag
+ else:
+ flag = False
+ return flag
+ except Exception,e:
+ win32ui.MessageBox("Create Case\n"+str(e),"Mail Reading Error")
+ return flag
def MakeAttachment(self, recs, mail):
- attachments = mail.Attachments
- result = {}
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- att_folder_path = os.path.abspath(os.path.dirname("%temp%\\"))
- if not os.path.exists(att_folder_path):
- os.makedirs(att_folder_path)
- for rec in recs: #[('res.partner', 3, 'Agrolait')]
-
- obj = rec[0]
- obj_id = rec[1]
- res={}
- res['res_model'] = obj
- attachment_ids = []
- if obj not in result:
- result[obj] = {}
- for i in xrange(1, attachments.Count+1):
- fn = ustr(attachments[i].FileName)
- if len(fn) > 64:
- l = 64 - len(fn)
- f = fn.split('.')
- fn = f[0][0:l] + '.' + f[-1]
- att_path = os.path.join(att_folder_path,fn)
- attachments[i].SaveAsFile(att_path)
- f=open(att_path,"rb")
- content = "".join(f.readlines()).encode('base64')
- f.close()
- res['name'] = ustr(attachments[i].DisplayName)
- res['datas_fname'] = ustr(fn)
- res['datas'] = content
- res['res_id'] = obj_id
- id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.attachment','create',res)
- attachment_ids.append(id)
- result[obj].update({obj_id: attachment_ids})
- return result
+ attachments = mail.Attachments
+ result = {}
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ att_folder_path = os.path.abspath(os.path.dirname("%temp%\\"))
+ if not os.path.exists(att_folder_path):
+ os.makedirs(att_folder_path)
+ for rec in recs: #[('res.partner', 3, 'Agrolait')]
+ obj = rec[0]
+ obj_id = rec[1]
+ res={}
+ res['res_model'] = obj
+ attachment_ids = []
+ if obj not in result:
+ result[obj] = {}
+ for i in xrange(1, attachments.Count+1):
+ fn = ustr(attachments[i].FileName)
+ if len(fn) > 64:
+ l = 64 - len(fn)
+ f = fn.split('.')
+ fn = f[0][0:l] + '.' + f[-1]
+ att_path = os.path.join(att_folder_path,fn)
+ attachments[i].SaveAsFile(att_path)
+ f=open(att_path,"rb")
+ content = "".join(f.readlines()).encode('base64')
+ f.close()
+ res['name'] = ustr(attachments[i].DisplayName)
+ res['datas_fname'] = ustr(fn)
+ res['datas'] = content
+ res['res_id'] = obj_id
+ id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.attachment','create',res)
+ attachment_ids.append(id)
+ result[obj].update({obj_id: attachment_ids})
+ return result
def CreateContact(self, res=None):
- res=eval(str(res))
- partner = res['partner_id']
- state = res['state_id']
- country = res['country_id']
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- if not partner.strip() == '':
- partner_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner', 'search', [('name','=',ustr(partner))])
- res.update({'partner_id' : partner_id[0]})
- else:
- res.pop('partner_id')
- if not state == "":
- country_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', [('name','=',ustr(country))])
- res.update({'country_id' : country_id[0]})
- else:
- res.pop('country_id')
- if not country == "":
- state_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', [('name','=',ustr(state))])
- res.update({'state_id' : state_id[0]})
- else:
- res.pop('state_id')
- id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner.address','create',res)
- return id
+ res=eval(str(res))
+ partner = res['partner_id']
+ state = res['state_id']
+ country = res['country_id']
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ if not partner.strip() == '':
+ partner_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner', 'search', [('name','=',ustr(partner))])
+ res.update({'partner_id' : partner_id[0]})
+ else:
+ res.pop('partner_id')
+ if not state == "":
+ country_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', [('name','=',ustr(country))])
+ res.update({'country_id' : country_id[0]})
+ else:
+ res.pop('country_id')
+ if not country == "":
+ state_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', [('name','=',ustr(state))])
+ res.update({'state_id' : state_id[0]})
+ else:
+ res.pop('state_id')
+ id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner.address','create',res)
+ return id
def CreatePartner(self, res):
- res=eval(str(res))
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner','search',[('name','=',res['name'])])
- if ids:
- return False
- id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner','create',res)
- return id
+ res=eval(str(res))
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner','search',[('name','=',res['name'])])
+ if ids:
+ return False
+ id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner','create',res)
+ return id
def SearchPartnerDetail(self, search_email_id):
- import win32ui
- res_vals = []
- address = {}
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- address_id = execute(conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'search', [('email','ilike',ustr(search_email_id))])
- if not address_id :
- return
- address = execute(conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address','read',address_id[0],['id','partner_id','name','street','street2','city','state_id','country_id','phone','mobile','email','fax','zip'])
- for key, vals in address.items():
- res_vals.append([key,vals])
- return res_vals
+ import win32ui
+ res_vals = []
+ address = {}
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ address_id = execute(conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'search', [('email','ilike',ustr(search_email_id))])
+ if not address_id :
+ return
+ address = execute(conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address','read',address_id[0],['id','partner_id','name','street','street2','city','state_id','country_id','phone','mobile','email','fax','zip'])
+ for key, vals in address.items():
+ res_vals.append([key,vals])
+ return res_vals
def WritePartnerValues(self, new_vals):
- import win32ui
- flag = -1
- new_dict = dict(new_vals)
- email=new_dict['email']
- partner = new_dict['partner']
- country_val = new_dict['country']
- state_val = new_dict['state']
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- partner_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner', 'search', [('name','=',ustr(partner))])
- country_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', [('name','=',ustr(country_val))])
- state_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', [('name','=',ustr(state_val))])
- address_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'search', [('email','=',ustr(email))])
- if not partner_id or not address_id or not country_id or not state_id:
- return flag
- address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address','read',address_id[0],['id','partner_id','state_id','country_id'])
- vals_res_address={
- 'partner_id' : partner_id[0],
- 'name' : new_dict['name'],
- 'street':new_dict['street'],
- 'street2' : new_dict['street2'],
- 'city' : new_dict['city'],
- 'phone' : new_dict['phone'],
- 'mobile' : new_dict['mobile'],
- 'fax' : new_dict['fax'],
- 'zip' : new_dict['zip'],
- 'country_id' : country_id[0],
- 'state_id' : state_id[0]
- }
- temp = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'write', address_id, vals_res_address)
- if temp:
- flag=1
- else:
- flag=0
- return flag
+ import win32ui
+ flag = -1
+ new_dict = dict(new_vals)
+ email=new_dict['email']
+ partner = new_dict['partner']
+ country_val = new_dict['country']
+ state_val = new_dict['state']
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ partner_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner', 'search', [('name','=',ustr(partner))])
+ country_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', [('name','=',ustr(country_val))])
+ state_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', [('name','=',ustr(state_val))])
+ address_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'search', [('email','=',ustr(email))])
+ if not partner_id or not address_id or not country_id or not state_id:
+ return flag
+ address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address','read',address_id[0],['id','partner_id','state_id','country_id'])
+ vals_res_address={
+ 'partner_id' : partner_id[0],
+ 'name' : new_dict['name'],
+ 'street':new_dict['street'],
+ 'street2' : new_dict['street2'],
+ 'city' : new_dict['city'],
+ 'phone' : new_dict['phone'],
+ 'mobile' : new_dict['mobile'],
+ 'fax' : new_dict['fax'],
+ 'zip' : new_dict['zip'],
+ 'country_id' : country_id[0],
+ 'state_id' : state_id[0]
+ }
+ temp = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'write', address_id, vals_res_address)
+ if temp:
+ flag=1
+ else:
+ flag=0
+ return flag
def GetAllState(self):
- import win32ui
- state_list = []
- state_ids = []
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- state_ids = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', [])
- for state_id in state_ids:
- obj = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'read', [state_id],['id','name'])[0]
- state_list.append((obj['id'], ustr(obj['name'])))
- return state_list
+ import win32ui
+ state_list = []
+ state_ids = []
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ state_ids = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', [])
+ for state_id in state_ids:
+ obj = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'read', [state_id],['id','name'])[0]
+ state_list.append((obj['id'], ustr(obj['name'])))
+ return state_list
def GetAllCountry(self):
- import win32ui
- country_list = []
- country_ids = []
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- country_ids = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', [])
- for country_id in country_ids:
- obj = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country','read', [country_id], ['id','name'])[0]
- country_list.append((obj['id'], ustr(obj['name'])))
- return country_list
+ import win32ui
+ country_list = []
+ country_ids = []
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ country_ids = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', [])
+ for country_id in country_ids:
+ obj = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country','read', [country_id], ['id','name'])[0]
+ country_list.append((obj['id'], ustr(obj['name'])))
+ return country_list
def SearchPartner(self, mail_id = ""):
- import win32ui
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'search', [('email','=',ustr(mail_id))])
- if not address:
- return None
- else:
- add_rec = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'read', address[0])
- partner = add_rec.get('partner_id',False)
- if partner:
- return partner[0]
- else:
- return True
- return partner_id[0]
+ import win32ui
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'search', [('email','=',ustr(mail_id))])
+ if not address:
+ return None
+ else:
+ add_rec = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'read', address[0])
+ partner = add_rec.get('partner_id',False)
+ if partner:
+ return partner[0]
+ else:
+ return True
+ return partner_id[0]
def SearchEmailResources(self, message_id):
- import win32ui
- import eml
+ import win32ui
+ import eml
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- sub = ""
- res_vals = []
- mail_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'mailgate.message', 'search', [('message_id','=',message_id)])
- if not mail_id:
- return None
- address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'mailgate.message','read',mail_id[0],['model','res_id'])
- for key, vals in address.items():
- res_vals.append([key,vals])
- return res_vals
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ sub = ""
+ res_vals = []
+ mail_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'mailgate.message', 'search', [('message_id','=',message_id)])
+ if not mail_id:
+ return None
+ address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'mailgate.message','read',mail_id[0],['model','res_id'])
+ for key, vals in address.items():
+ res_vals.append([key,vals])
+ return res_vals
def GetCountry(self, country_search=''):
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- ids=[]
- obj_list=[]
- domain = []
- if not country_search.strip() == '':
- domain.append(('name','ilike',ustr(country_search)))
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','search',domain)
- if ids:
- ids.sort()
- for id in ids:
- object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','read',[id],['id','name'])[0]
- obj_list.append((object['id'], ustr(object['name'])))
- obj_list.sort(lambda x, y: cmp(x[1],y[1]))
- return obj_list
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids=[]
+ obj_list=[]
+ domain = []
+ if not country_search.strip() == '':
+ domain.append(('name','ilike',ustr(country_search)))
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','search',domain)
+ if ids:
+ ids.sort()
+ for id in ids:
+ object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','read',[id],['id','name'])[0]
+ obj_list.append((object['id'], ustr(object['name'])))
+ obj_list.sort(lambda x, y: cmp(x[1],y[1]))
+ return obj_list
def GetStates(self, state_search='', country=None):
- import win32ui
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- ids = []
- c_id = []
- obj_list = []
- domain = []
- if not state_search.strip() == '':
- domain.append(('name','ilike',ustr(state_search)))
-
- if country == None:
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',domain)
- if not country == None:
- c_id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','search',[('name','=',ustr(country))])
- domain.append(('country_id','=',c_id[0]))
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',domain)
- if ids:
- ids.sort()
- for id in ids:
- object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','read',[id],['id','name'])[0]
- obj_list.append((object['id'], ustr(object['name'])))
- obj_list.sort(lambda x, y: cmp(x[1],y[1]))
- return obj_list
+ import win32ui
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids = []
+ c_id = []
+ obj_list = []
+ domain = []
+ if not state_search.strip() == '':
+ domain.append(('name','ilike',ustr(state_search)))
+
+ if country == None:
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',domain)
+ if not country == None:
+ c_id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','search',[('name','=',ustr(country))])
+ domain.append(('country_id','=',c_id[0]))
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',domain)
+ if ids:
+ ids.sort()
+ for id in ids:
+ object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','read',[id],['id','name'])[0]
+ obj_list.append((object['id'], ustr(object['name'])))
+ obj_list.sort(lambda x, y: cmp(x[1],y[1]))
+ return obj_list
def FindCountryForState(self, state_search=''):
- import win32ui
- res_vals = []
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',[('name','=',ustr(state_search))])
- if not ids:
- return None
- object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','read',ids)[0]
- country = object['country_id'][1]
- return country
+ import win32ui
+ res_vals = []
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',[('name','=',ustr(state_search))])
+ if not ids:
+ return None
+ object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','read',ids)[0]
+ country = object['country_id'][1]
+ return country
+ def CreateEmailAttachment(self, rec, email):
+ result = {}
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ att_folder_path = os.path.abspath(os.path.dirname("%temp%\\"))
+ if not os.path.exists(att_folder_path):
+ os.makedirs(att_folder_path)
+ obj = rec[0]
+ obj_id = rec[1]
+ res={}
+ res['res_model'] = obj
+ ls = ['*', '/', '\\', '<', '>', ':', '?', '"', '|', '\t', '\n',':','~']
+ sub = (email.Subject).replace(' ','')
+ if sub.strip() == '':
+ sub = 'NO SBUJECT'
+ fn = sub
+ for c in ls:
+ fn = fn.replace(c,'')
+ if len(fn) > 64:
+ l = 64 - len(fn)
+ f = fn.split('-')
+ fn = '-'.join(f[1:])
+ if len(fn) > 64:
+ l = 64 - len(fn)
+ f = fn.split('.')
+ fn = f[0][0:l] + '.' + f[-1]
+ fn = fn+'.txt'
+ att_path = os.path.join(att_folder_path,fn)
+ f=open(fn,"w")
+ f.writelines(ustr(email.Body).encode('iso-8859-1'))
+ f.close()
+ f=open(fn,"r")
+ content = "".join(f.readlines()).encode('base64')
+ f.close()
+ att_path = os.path.join(att_folder_path,fn)
+ res['name'] = ustr(sub)
+ res['datas_fname'] = ustr(fn)
+ res['datas'] = content
+ res['res_id'] = obj_id
+ id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.attachment','create',res)
+ return id
|
