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 index 503ee136f87..4e40d9e989a 100644 Binary files a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/openerp_logo1.bmp and b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/openerp_logo1.bmp differ 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 + 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 - 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 + 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))) + 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 + 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