From b4f5d7f8df6e8d22e1b67cd4a58bb511bcfd5c54 Mon Sep 17 00:00:00 2001 From: rga Date: Wed, 2 Jun 2010 19:43:12 +0530 Subject: [PATCH 001/541] Change type of partner title field, selection to many2one bzr revid: rga@rga-desktop-20100602141312-xmd2fv5dwuei10lv --- bin/addons/base/res/partner/partner.py | 16 ++-------------- bin/addons/base/res/partner/partner_demo.xml | 9 --------- bin/addons/base/res/partner/partner_view.xml | 8 ++++---- 3 files changed, 6 insertions(+), 27 deletions(-) diff --git a/bin/addons/base/res/partner/partner.py b/bin/addons/base/res/partner/partner.py index e5bb6a4f1cb..bab92eab179 100644 --- a/bin/addons/base/res/partner/partner.py +++ b/bin/addons/base/res/partner/partner.py @@ -90,18 +90,6 @@ class res_partner_title(osv.osv): _order = 'name' res_partner_title() -def _contact_title_get(self, cr, uid, context={}): - obj = self.pool.get('res.partner.title') - ids = obj.search(cr, uid, [('domain', '=', 'contact')]) - res = obj.read(cr, uid, ids, ['shortcut','name'], context) - return [(r['shortcut'], r['name']) for r in res] + [('','')] - -def _partner_title_get(self, cr, uid, context={}): - obj = self.pool.get('res.partner.title') - ids = obj.search(cr, uid, [('domain', '=', 'partner')]) - res = obj.read(cr, uid, ids, ['shortcut','name'], context) - return [(r['shortcut'], r['name']) for r in res] + [('','')] - def _lang_get(self, cr, uid, context={}): obj = self.pool.get('res.lang') ids = obj.search(cr, uid, [], context=context) @@ -116,7 +104,7 @@ class res_partner(osv.osv): _columns = { 'name': fields.char('Name', size=128, required=True, select=True), 'date': fields.date('Date', select=1), - 'title': fields.selection(_partner_title_get, 'Title', size=32), + 'title': fields.many2one('res.partner.title','Title'), 'parent_id': fields.many2one('res.partner','Parent Partner', select=2), 'child_ids': fields.one2many('res.partner', 'parent_id', 'Partner Ref.'), 'ref': fields.char('Reference', size=64), @@ -277,7 +265,7 @@ class res_partner_address(osv.osv): 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null', select=True, help="Keep empty for a private address, not related to partner."), 'type': fields.selection( [ ('default','Default'),('invoice','Invoice'), ('delivery','Delivery'), ('contact','Contact'), ('other','Other') ],'Address Type', help="Used to select automatically the right address according to the context in sales and purchases documents."), 'function': fields.char('Function', size=64), - 'title': fields.selection(_contact_title_get, 'Title', size=32), + 'title': fields.many2one('res.partner.title','Title'), 'name': fields.char('Contact Name', size=64, select=1), 'street': fields.char('Street', size=128), 'street2': fields.char('Street2', size=128), diff --git a/bin/addons/base/res/partner/partner_demo.xml b/bin/addons/base/res/partner/partner_demo.xml index f5d70a2490d..ccb1ae13658 100644 --- a/bin/addons/base/res/partner/partner_demo.xml +++ b/bin/addons/base/res/partner/partner_demo.xml @@ -229,7 +229,6 @@ Taiwan Tang 23410 - M. 31 Hong Kong street default @@ -239,7 +238,6 @@ Hong Kong Wong 23540 - M. 56 Beijing street default @@ -249,7 +247,6 @@ Bruxelles Etienne Lacarte 2365 - M. 23 rue du Vieux Bruges default @@ -259,7 +256,6 @@ Namur Jean Guy Lavente 2541 - M. 42 rue de la Lesse default @@ -269,7 +265,6 @@ Wavre Sylvie Lelitre 5478 - Ms. 69 rue de Chimay default @@ -279,7 +274,6 @@ Paris Arthur Grosbonnet 75016 - M. 1 rue Rockfeller default @@ -289,7 +283,6 @@ Alencon Sebastien LANGE 61000 - M. contact@syleam.fr 1 place de l'Église +33 (0) 2 33 31 22 10 @@ -301,7 +294,6 @@ Liege Karine Lesbrouffe 6985 - Mss 2 Impasse de la Soif default @@ -311,7 +303,6 @@ Shanghai Zen 4785552 - M. 52 Chop Suey street default diff --git a/bin/addons/base/res/partner/partner_view.xml b/bin/addons/base/res/partner/partner_view.xml index 55a98112506..ff7da63109a 100644 --- a/bin/addons/base/res/partner/partner_view.xml +++ b/bin/addons/base/res/partner/partner_view.xml @@ -64,7 +64,7 @@ - + @@ -122,7 +122,7 @@
- + @@ -235,7 +235,7 @@ - + @@ -250,7 +250,7 @@ - + From f33171198680a04a1dc6a2802531abf41f054884 Mon Sep 17 00:00:00 2001 From: "Anup (OpenERP)" Date: Fri, 11 Jun 2010 16:53:32 +0530 Subject: [PATCH 002/541] [IMP] Security fixes for SQL injections. bzr revid: ach@tinyerp.com-20100611112332-8tsrkea948wnv0ap --- bin/addons/__init__.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/addons/__init__.py b/bin/addons/__init__.py index 0370fa9a236..559c70cd562 100644 --- a/bin/addons/__init__.py +++ b/bin/addons/__init__.py @@ -88,8 +88,7 @@ class Graph(dict): ## Then we get the values from the database cr.execute('SELECT name, id, state, demo AS dbdemo, latest_version AS installed_version' ' FROM ir_module_module' - ' WHERE name in (%s)' % (','.join(['%s'] * len(self))), - additional_data.keys() + ' WHERE name in %s',(tuple(additional_data),) ) ## and we update the default values with values from the database @@ -821,7 +820,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False): loop_guardrail += 1 if loop_guardrail > 100: raise ProgrammingError() - cr.execute("SELECT name from ir_module_module WHERE state in (%s)" % ','.join(['%s']*len(STATES_TO_LOAD)), STATES_TO_LOAD) + cr.execute("SELECT name from ir_module_module WHERE state in %s" ,(tuple(STATES_TO_LOAD),)) module_list = [name for (name,) in cr.fetchall() if name not in graph] if not module_list: From f210cfcb3d8fcf5efa28d0abfa8b82d86e5bee76 Mon Sep 17 00:00:00 2001 From: uco Date: Fri, 18 Jun 2010 19:07:41 +0530 Subject: [PATCH 003/541] [IMP]: Put action buttons on the modules list. bzr revid: uco@tinyerp.com-20100618133741-gwcmrntwg5iub6d7 --- bin/addons/base/module/module_view.xml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/bin/addons/base/module/module_view.xml b/bin/addons/base/module/module_view.xml index 37a519fa2d5..7925284d668 100644 --- a/bin/addons/base/module/module_view.xml +++ b/bin/addons/base/module/module_view.xml @@ -104,12 +104,12 @@ - + + Forward to Partner crm.lead.forward.to.partner form form + new diff --git a/addons/crm/wizard/crm_send_email.py b/addons/crm/wizard/crm_send_email.py index bc2b5357c15..02acee1c1d2 100644 --- a/addons/crm/wizard/crm_send_email.py +++ b/addons/crm/wizard/crm_send_email.py @@ -49,7 +49,7 @@ class crm_send_new_email(osv.osv_memory): 'email_cc' : fields.char('CC', size=512, help="Carbon Copy: list of recipients that will receive"\ " a copy of this mail, and future communication related to this case"), 'subject': fields.char('Subject', size=512, required=True), - 'text': fields.text('Message', required=True), + 'body': fields.text('Message Body', required=True), 'state': fields.selection(crm.AVAILABLE_STATES, string='Set New State To', required=True), 'attachment_ids' : fields.one2many('crm.send.mail.attachment', 'wizard_id'), } @@ -68,10 +68,10 @@ class crm_send_new_email(osv.osv_memory): if not context: context = {} - if not context.get('model'): + if not context.get('active_model'): raise osv.except_osv(_('Error'), _('Can not send mail!')) - model = context.get('model') + model = context.get('active_model') case_pool = self.pool.get(model) res_id = context and context.get('active_id', False) or False @@ -91,16 +91,16 @@ class crm_send_new_email(osv.osv_memory): hist = hist_obj.browse(cr, uid, res_id) message_id = hist.message_id model = hist.model - model_pool = self.pool.get(model) + case_pool = self.pool.get(model) res_id = hist.res_id ref_id = hist.ref_id - case = model_pool.browse(cr, uid, res_id) + case = case_pool.browse(cr, uid, res_id) emails = [obj.email_to] email_cc = obj.email_cc and obj.email_cc.split(',') or '' emails = filter(None, emails) - body = obj.text + body = obj.body - body = case_pool.format_body(body) + body = body and tools.ustr(body) or '' email_from = getattr(obj, 'email_from', False) x_headers = {} if message_id: @@ -124,7 +124,7 @@ class crm_send_new_email(osv.osv_memory): case_pool.history(cr, uid, [case], _('Send'), history=True, \ email=obj.email_to, details=body, \ subject=obj.subject, email_from=email_from, \ - email_cc=email_cc, message_id=message_id, \ + email_cc=', '.join(email_cc), message_id=message_id, \ references=ref_id or message_id, attach=attach) if obj.state == 'unchanged': pass @@ -145,7 +145,7 @@ class crm_send_new_email(osv.osv_memory): if not context: context = {} - if not context.get('model'): + if not context.get('active_model'): raise osv.except_osv(_('Error'), _('Can not send mail!')) res = super(crm_send_new_email, self).default_get(cr, uid, fields, context=context) @@ -154,7 +154,7 @@ class crm_send_new_email(osv.osv_memory): res.update(self.get_reply_defaults(cr, uid, fields, context=context)) return res - model = context.get('model') + model = context.get('active_model') mod_obj = self.pool.get(model) res_id = context and context.get('active_ids', []) or [] @@ -172,8 +172,8 @@ class crm_send_new_email(osv.osv_memory): res.update({'subject': tools.ustr(context.get('subject', case.name) or '')}) if 'email_cc' in fields: res.update({'email_cc': tools.ustr(case.email_cc or '')}) - if 'text' in fields: - res.update({'text': u'\n'+(tools.ustr(case.user_id.signature or ''))}) + if 'body' in fields: + res.update({'body': u'\n'+(tools.ustr(case.user_id.signature or ''))}) if 'state' in fields: res.update({'state': u'pending'}) @@ -209,7 +209,7 @@ class crm_send_new_email(osv.osv_memory): signature = u'\n' + (tools.ustr(case.user_id.signature or '')) + u'\n' original = [signature] - if include_original == True and 'text' in fields: + if include_original == True and 'body' in fields: header = u'-------- Original Message --------' sender = u'From: %s' %(tools.ustr(hist.email_from or '')) to = u'To: %s' % (tools.ustr(hist.email_to or '')) @@ -218,10 +218,14 @@ class crm_send_new_email(osv.osv_memory): original = [signature, header, sender, to, sentdate, desc] - res['text']= u'\n' + u'\n'.join(original) + res['body']= u'\n' + u'\n'.join(original) if 'subject' in fields: res.update({u'subject': u'Re: %s' %(tools.ustr(hist.name or ''))}) + if 'email_cc' in fields: + res.update({'email_cc': case.email_cc and tools.ustr(case.email_cc) or False}) + if 'reply_to' in fields: + res.update({'reply_to': case.section_id.reply_to}) if 'state' in fields: res['state'] = u'pending' return res @@ -239,7 +243,7 @@ class crm_send_new_email(osv.osv_memory): if not context: context = {} - if not context.get('model'): + if not context.get('active_model'): raise osv.except_osv(_('Error'), _('Can not send mail!')) return True diff --git a/addons/crm/wizard/crm_send_email_view.xml b/addons/crm/wizard/crm_send_email_view.xml index df7218cbc02..aac7d854b88 100644 --- a/addons/crm/wizard/crm_send_email_view.xml +++ b/addons/crm/wizard/crm_send_email_view.xml @@ -9,7 +9,7 @@ crm.send.mail form -
+ @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ - Send New Mail + Send Mail crm.send.mail form form @@ -77,7 +77,7 @@ - +