bzr revid: hmo@tinyerp.com-20100610094052-w1c0gzswgkjvp108
This commit is contained in:
Harry (OpenERP)
2010-06-10 15:10:52 +05:30
26 changed files with 133 additions and 97 deletions
+2
View File
@@ -26,6 +26,7 @@ class res_partner_contact(osv.osv):
_name = "res.partner.contact"
_description = "Contact"
_log_create = True
def _title_get(self,cr, user, context={}):
"""
@@ -207,6 +208,7 @@ class res_partner_job(osv.osv):
_name = 'res.partner.job'
_description ='Contact Partner Function'
_order = 'sequence_contact'
_log_create = True
_columns = {
'name': fields.related('address_id', 'partner_id', type='many2one',\
@@ -0,0 +1,32 @@
# -*- coding: utf8 -*-
__name__ = "res.partner.adress: for each address it should create a contact with the name of the address"
def migrate(cr, version):
generate_contact(cr)
def generate_contact(cr):
cr.execute("""DROP TRIGGER IF EXISTS contactjob on res_partner_contact;
DROP LANGUAGE IF EXISTS plpgsql CASCADE;
CREATE LANGUAGE plpgsql ;
CREATE OR REPLACE FUNCTION add_to_job() RETURNS TRIGGER AS $contactjob$
DECLARE
new_name varchar;
new_phonenum varchar;
BEGIN
IF(TG_OP='INSERT') THEN
INSERT INTO res_partner_job(contact_id, address_id, function, state) VALUES(NEW.id, NEW.website::integer,NEW.first_name, 'current');
UPDATE res_partner_contact set first_name=Null, website=Null, active=True where id=NEW.id;
END IF;
RETURN NEW;
END;
$contactjob$ LANGUAGE plpgsql;
CREATE TRIGGER contactjob AFTER INSERT ON res_partner_contact FOR EACH ROW EXECUTE PROCEDURE add_to_job();""")
cr.commit()
cr.execute("INSERT into res_partner_contact (name, title, email, first_name, website) (SELECT coalesce(name, 'Noname'), title, email, function , to_char(id, '99999999') from res_partner_address)")
cr.commit()
cr.execute("DROP TRIGGER IF EXISTS contactjob on res_partner_contact")
cr.execute("DROP LANGUAGE IF EXISTS plpgsql CASCADE;")
cr.execute("DROP FUNCTION IF EXISTS add_to_job()")
cr.commit()
+3 -10
View File
@@ -32,16 +32,6 @@ class calendar_event_export(osv.osv_memory):
"""
Export Calendar Event.
"""
def process_export_ics(self, cr, uid, ids, context):
"""
Get Default value for file_path field.
"""
model = context.get('model', 'basic.calendar')
model_obj = self.pool.get(model)
calendar = model_obj.export_cal(cr, uid, context['active_ids'], context)
self.write(cr, uid, ids, {'file_path': base64.encodestring(calendar)})
return False
def default_get(self, cr, uid, fields, context):
"""
@@ -54,6 +44,9 @@ class calendar_event_export(osv.osv_memory):
name = 'OpenERP %s.ics' % (model_obj._description)
if 'name' in fields:
res.update({'name': name})
if 'file_path' in fields:
calendar = model_obj.export_cal(cr, uid, context['active_ids'], context)
res.update({'file_path': base64.encodestring(calendar)})
return res
_name = "calendar.event.export"
@@ -13,8 +13,8 @@
</group>
<separator string="" colspan="4" />
<group colspan="4" col="6">
<button name="process_export_ics" icon="gtk-execute" string="Genetate ics" type="object"/>
<button icon="gtk-cancel" special="cancel" string="_Cancel"/>
<label string=""/>
<button icon="gtk-close" special="cancel" string="_Close"/>
</group>
</form>
</field>
+2 -1
View File
@@ -32,10 +32,11 @@ class crm_lead(osv.osv, crm_case):
""" CRM Lead Case """
_name = "crm.lead"
_description = "Lead"
_description = "Lead/Opportunity"
_order = "priority, id desc"
_inherit = ['res.partner.address']
_inherits = {'mailgate.thread': 'thread_id'}
_log_create=True
def _compute_day(self, cr, uid, ids, fields, args, context={}):
"""
+1
View File
@@ -45,6 +45,7 @@ class crm_meeting(osv.osv, crm_case):
_order = "id desc"
_inherit = ["calendar.event"]
_inherits = {'mailgate.thread': 'thread_id'}
_log_create=True
_columns = {
# From crm.case
-1
View File
@@ -37,7 +37,6 @@ AVAILABLE_STATES = [
class crm_opportunity(osv.osv):
""" Opportunity Cases """
_name = "crm.lead"
_description = "Opportunity"
_order = "priority,date_action,id desc"
_inherit = 'crm.lead'
_columns = {
+1
View File
@@ -32,6 +32,7 @@ class crm_phonecall(osv.osv, crm_case):
_description = "Phonecall"
_order = "id desc"
_inherits = {'mailgate.thread': 'thread_id'}
_log_create=True
_columns = {
# From crm.case
+1
View File
@@ -30,6 +30,7 @@ class crm_claim(osv.osv, crm.crm_case):
_description = "Claim Cases"
_order = "id desc"
_inherits = {'mailgate.thread': 'thread_id'}
_log_create=True
_columns = {
'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False),
@@ -29,6 +29,7 @@ class crm_fundraising(osv.osv, crm.crm_case):
_description = "Fund Raising Cases"
_order = "id desc"
_inherits = {'mailgate.thread': 'thread_id'}
_log_create=True
_columns = {
'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False),
+1
View File
@@ -29,6 +29,7 @@ class crm_helpdesk(osv.osv, crm.crm_case):
_description = "Helpdesk Cases"
_order = "id desc"
_inherits = {'mailgate.thread': 'thread_id'}
_log_create=True
_columns = {
'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False),
+1
View File
@@ -158,6 +158,7 @@ class questionnaire(osv.osv):
_name="crm_profiling.questionnaire"
_description= "Questionnaire"
_log_create = True
def build_form(self, cr, uid, data, context):
"""
+2
View File
@@ -47,6 +47,8 @@ class document_directory_content(osv.osv):
_name = 'document.directory.content'
_description = 'Directory Content'
_order = "sequence"
_log_create = True
def _extension_get(self, cr, uid, context={}):
cr.execute('select code,name from document_directory_content_type where active')
res = cr.fetchall()
+2
View File
@@ -41,6 +41,8 @@ DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config['roo
class document_file(osv.osv):
_inherit = 'ir.attachment'
_rec_name = 'datas_fname'
_log_create=True
def _get_filestore(self, cr):
return os.path.join(DMS_ROOT_PATH, cr.dbname)
+3 -1
View File
@@ -33,6 +33,8 @@ class document_directory(osv.osv):
_name = 'document.directory'
_description = 'Directory'
_order = 'name desc'
_log_create=True
_columns = {
'name': fields.char('Name', size=64, required=True, select=1),
'write_date': fields.datetime('Date Modified', readonly=True),
@@ -112,7 +114,7 @@ class document_directory(osv.osv):
while d2 and d2.parent_id:
s = d2.name + (s and ('/' + s) or '')
d2 = d2.parent_id
res.append((d.id, s))
res.append((d.id, s or d.name))
return res
def get_full_path(self, cr, uid, dir_id, context=None):
+2
View File
@@ -96,6 +96,8 @@ class document_storage(osv.osv):
"""
_name = 'document.storage'
_description = 'Storage Media'
_log_create=True
_columns = {
'name': fields.char('Name', size=64, required=True, select=1),
'write_date': fields.datetime('Date Modified', readonly=True),
+1 -1
View File
@@ -24,7 +24,7 @@
{
"name" : "Fetchmail Server",
"version" : "1.0",
"depends" : ["base"],
"depends" : ["base", 'mail_gateway'],
"author" : "Tiny",
"description": """Fetchmail:
* Fetch email from Pop / IMAP server
+25 -18
View File
@@ -181,7 +181,7 @@ class email_server(osv.osv):
context.update({
'server_id':server.id
})
history_pool = self.pool.get('mail.server.history')
history_pool = self.pool.get('mailgate.message')
msg_txt = email.message_from_string(message)
message_id = msg_txt.get('Message-ID', False)
@@ -282,7 +282,6 @@ class email_server(osv.osv):
ref = msg.get('references').split('\r\n')
else:
ref = msg.get('references').split(' ')
if ref:
hids = history_pool.search(cr, uid, [('name','=',ref[0].strip())])
if hids:
@@ -306,9 +305,18 @@ class email_server(osv.osv):
if hasattr(model_pool, 'message_new'):
res_id = model_pool.message_new(cr, uid, msg, context)
else:
logger.notifyChannel('imap', netsvc.LOG_WARNING, 'method def message_new is not define in model %s' % (model_pool._name))
return False
data = {
'name': msg.get('subject'),
'email_from': msg.get('from'),
'email_cc': msg.get('cc'),
'user_id': False,
'description': msg.get('body'),
'state' : 'draft',
}
res_id = model_pool.create(cr, uid, data, context=context)
logger.notifyChannel('imap', netsvc.LOG_WARNING, 'method def message_new is not define in model %s. Using default method' % (model_pool._name))
att_ids = []
if server.attach:
for attactment in attachents or []:
data_attach = {
@@ -319,19 +327,25 @@ class email_server(osv.osv):
'res_model': server.object_id.model,
'res_id': res_id,
}
self.pool.get('ir.attachment').create(cr, uid, data_attach)
att_ids.append(self.pool.get('ir.attachment').create(cr, uid, data_attach))
if server.action_id:
action_pool = self.pool.get('ir.actions.server')
action_pool.run(cr, uid, [server.action_id.id], {'active_id':res_id, 'active_ids':[res_id]})
res = {
'name': message_id,
'name': msg.get('subject', 'No subject'),
'message_id': message_id,
'date': msg.get('date'),
'res_id': res_id,
'email_from': msg.get('from'),
'email_to': msg.get('to'),
'email_cc': msg.get('cc'),
'model': server.object_id.model,
'server_id': server.id,
'note': msg.get('body', msg.get('from')),
'description': msg.get('body', msg.get('from')),
'ref_id':msg.get('references', msg.get('id')),
'type':server.type
'type':server.type,
'attachment_ids': [(6, 0, att_ids)]
}
his_id = history_pool.create(cr, uid, res)
@@ -412,17 +426,10 @@ email_server()
class mail_server_history(osv.osv):
_name = "mail.server.history"
_description = "Mail Server History"
_inherit = "mailgate.message"
_columns = {
'name': fields.char('Message Id', size=256, readonly=True, help="Message Id in Email Server.", select=True),
'ref_id': fields.char('Referance Id', size=256, readonly=True, help="Message Id in Email Server.", select=True),
'res_id': fields.integer("Resource ID", readonly=True, select=True),
'server_id': fields.many2one('email.server',"Mail Server", readonly=True, select=True),
'model_id':fields.related('server_id', 'object_id', type='many2one', relation='ir.model', string='Model', readonly=True, select=True),
'note': fields.text('Notes', readonly=True),
'create_date': fields.datetime('Created Date', readonly=True),
'type':fields.selection([
('pop','POP Server'),
('imap','IMAP Server'),
+22 -50
View File
@@ -103,82 +103,54 @@
action="action_email_server_tree_imap"
/>
<record model="ir.ui.view" id="view_mail_server_history_tree">
<field name="name">mail.server.history.tree</field>
<field name="model">mail.server.history</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Received Mail History">
<field name="server_id" select="1"/>
<field name="create_date" select="1"/>
<field name="model_id"/>
<field name="name" select="1"/>
<field name="ref_id"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_email_server_history_form">
<field name="name">mail.server.history.form</field>
<field name="model">mail.server.history</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Email History">
<group col="6" colspan="4">
<record model="ir.ui.view" id="mailgate_message_tree_view">
<field name="name">mailgate.message.tree</field>
<field name="model">mailgate.message</field>
<field name="type">tree</field>
<field name="inherit_id" ref="mail_gateway.view_mailgate_message_tree"/>
<field name="arch" type="xml">
<field name="user_id" position="after">
<field name="server_id" select="1"/>
<field name="create_date" select="1"/>
</group>
<group col="2" colspan="2">
<separator string="Resource Information" colspan="2"/>
<field name="model_id" select="1"/>
<field name="res_id"/>
</group>
<group col="2" colspan="2">
<separator string="Meta Information" colspan="2"/>
<field name="name" select="1"/>
<field name="ref_id"/>
</group>
<newline/>
<separator string="Description" colspan="4"/>
<field name="note" colspan="4" nolabel="1"/>
</form>
</field>
</record>
</field>
</field>
</record>
<act_window
context="{'server_id': active_id}"
domain="[('server_id', '=', active_id)]"
id="act_server_history" name="Email History"
res_model="mail.server.history" src_model="email.server"/>
res_model="mailgate.message" src_model="email.server"/>
<record model="ir.actions.act_window" id="action_email_server_history_tree">
<record model="ir.actions.act_window" id="action_mailgate_message_tree">
<field name="name">Received Email History</field>
<field name="res_model">mail.server.history</field>
<field name="res_model">mailgate.message</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_mail_server_history_tree"/>
<field name="view_id" ref="mailgate_message_tree_view"/>
<field name="context">{'type':'imap'}</field>
<field name="domain">[('type','=','imap')]</field>
</record>
<menuitem
parent="menu_action_email_server_tree_imap"
id="menu_action_email_server_history_tree"
action="action_email_server_history_tree"/>
id="menu_action_mailgate_message_tree"
action="action_mailgate_message_tree"/>
<record model="ir.actions.act_window" id="action_email_server_history_tree_pop">
<record model="ir.actions.act_window" id="action_mailgate_message_tree_pop">
<field name="name">Received Email History</field>
<field name="res_model">mail.server.history</field>
<field name="res_model">mailgate.message</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_mail_server_history_tree"/>
<field name="view_id" ref="mailgate_message_tree_view"/>
<field name="context">{'type':'pop'}</field>
<field name="domain">[('type','=','pop')]</field>
</record>
<menuitem
parent="menu_action_email_server_tree"
id="menu_action_email_server_history_tree_pop"
action="action_email_server_history_tree_pop"/>
id="menu_action_mailgate_message_tree_pop"
action="action_mailgate_message_tree_pop"/>
</data>
</openerp>
@@ -1,4 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_email_server","email.server","model_email_server",,1,1,1,1
"access_mail_server_history","mail.server.history","model_mail_server_history",,1,1,1,1
"access_email_server_tools","email.server.tools","model_email_server_tools",,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_email_server email.server model_email_server 1 1 1 1
access_mail_server_history mail.server.history model_mail_server_history 1 1 1 1
3 access_email_server_tools email.server.tools model_email_server_tools 1 1 1 1
+3
View File
@@ -33,6 +33,7 @@ class idea_category(osv.osv):
_name = "idea.category"
_description = "Idea Category"
_log_create=True
_columns = {
'name': fields.char('Category', size=64, required=True),
@@ -52,6 +53,7 @@ class idea_idea(osv.osv):
""" Idea """
_name = 'idea.idea'
_rec_name = 'title'
_log_create=True
def _vote_avg_compute(self, cr, uid, ids, name, arg, context = None):
@@ -302,6 +304,7 @@ class idea_vote(osv.osv):
_name = 'idea.vote'
_description = 'Idea Vote'
_rec_name = 'score'
_log_create = True
_columns = {
'user_id': fields.many2one('res.users', 'By user', readonly="True"),
+1
View File
@@ -115,6 +115,7 @@ class lunch_order(osv.osv):
_name = 'lunch.order'
_description = "Lunch Order"
_rec_name = "user_id"
_log_create=True
def _price_get(self, cr, uid, ids, name, args, context=None):
+3 -1
View File
@@ -75,7 +75,6 @@ class mailgate_thread(osv.osv):
if all(isinstance(case_id, (int, long)) for case_id in cases) and context.get('model'):
cases = self.pool.get(context['model']).browse(cr, uid, cases, context=context)
model_obj = self.pool.get('ir.model')
att_obj = self.pool.get('ir.attachment')
obj = self.pool.get('mailgate.message')
@@ -114,6 +113,7 @@ class mailgate_thread(osv.osv):
'attachment_ids': [(6, 0, attachments)]
}
res = obj.create(cr, uid, data, context)
case._table.log(cr, uid, case.id, case._description + " '" + case.name + "': " + keyword, context=context)
return True
_history = __history
@@ -129,10 +129,12 @@ class mailgate_message(osv.osv):
_name = 'mailgate.message'
_description = 'Mailgateway Message'
_order = 'date desc'
_log_create=True
_columns = {
'name':fields.char('Message', size=64),
'thread_id':fields.many2one('mailgate.thread', 'Thread'),
'ref_id': fields.char('Reference Id', size=256, readonly=True, help="Message Id in Email Server.", select=True),
'date': fields.datetime('Date'),
'history': fields.boolean('Is History?', required=False),
'user_id': fields.many2one('res.users', 'User Responsible', readonly=True),
+2 -1
View File
@@ -26,7 +26,8 @@
<separator string="Message Details" colspan="4"/>
<field name="model" readonly="1"/>
<field name="res_id" readonly="1"/>
<field name="message_id" />
<field name="message_id" />
<field name="ref_id" />
</group>
<separator string="Description" colspan="4"/>
<field name="description" nolabel="1" colspan="4" />
@@ -177,13 +177,19 @@ class email_parser(object):
s = decode_header(s.replace('\r', ''))
return ''.join(map(lambda x:self._to_decode(x[0], [x[1]]), s or []))
def history(self, model, new_id, msg_id, subject, msg_to, msg_from, body, attach):
def history(self, model, new_id, msg_id, ref_id, subject, msg_to, msg_from, body, attach):
try:
thread_id = self.rpc(model, 'read', new_id, ['thread_id'])['thread_id'][0]
except Exception, e:
thread_id = None
msg_data = {
'name': subject,
'history': True,
'model': model,
'res_id': new_id,
'thread_id': thread_id,
'message_id': msg_id,
'ref_id': ref_id or '',
'user_id': self.rpc.user_id,
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
'email_from': msg_from,
@@ -228,7 +234,7 @@ class email_parser(object):
try:
self.rpc(self.model, 'history', [new_id], 'Receive', True, msg_to, message['body'], msg_from, False, {'model' : self.model})
except Exception, e:
self.history(self.model, new_id, msg['Message-Id'], msg_subject, msg_to, msg_from, message['body'], att_ids)
self.history(self.model, new_id, msg['Message-Id'], msg['References'], msg_subject, msg_to, msg_from, message['body'], att_ids)
except Exception, e:
if getattr(e, 'faultCode', '') and 'AccessError' in e.faultCode:
e = '\n\nThe Specified user does not have an access to the Model.'
@@ -294,22 +300,23 @@ class email_parser(object):
return False
del msg['To']
msg['To'] = emails[0]
msg['Subject'] = 'OpenERP Record-id:' + msg['Subject']
if len(emails)>1:
if 'Cc' in msg:
del msg['Cc']
msg['Cc'] = ','.join(emails[1:])
del msg['Reply-To']
msg['Reply-To'] = self.email
s = smtplib.SMTP(self.smtp_server, self.smtp_port)
s.ehlo()
s.starttls()
s.ehlo()
if self.smtp_user and self.smtp_password:
s = smtplib.SMTP(self.smtp_server, self.smtp_port)
s.ehlo()
s.starttls()
s.ehlo()
s.login(self.smtp_user, self.smtp_password)
s.sendmail(self.email, emails, msg.as_string())
s.close()
return True
s.close()
return True
return False
def parse(self, msg):
@@ -319,7 +326,7 @@ class email_parser(object):
if msg.get('Subject', ''):
del msg['Subject']
msg['Subject'] = '['+str(res_id)+'] '+subject
msg['Message-Id'] = '<'+str(time.time())+'-openerpcrm-'+str(res_id)+'@'+socket.gethostname()+'>'
# msg['Message-Id'] = '<'+str(time.time())+'-openerpcrm-'+str(res_id)+'@'+socket.gethostname()+'>'
mm = [self._decode_header(msg['From']), self._decode_header(msg['To'])]+self._decode_header(msg.get('Cc', '')).split(',')
msg_mails = map(self.email_get, filter(None, mm))
+3
View File
@@ -45,6 +45,7 @@ class survey(osv.osv):
_name = 'survey'
_description = 'Survey'
_rec_name = 'title'
_log_create = True
def default_get(self, cr, uid, fields, context={}):
data = super(survey, self).default_get(cr, uid, fields, context)
@@ -588,6 +589,8 @@ survey_answer()
class survey_response(osv.osv):
_name = "survey.response"
_rec_name = 'date_create'
_log_create = True
_columns = {
'survey_id' : fields.many2one('survey', 'Survey', required=1, ondelete='cascade'),
'date_create' : fields.datetime('Create Date', required=1),