[MERGE] forward port of branch 7.0 up to e07bc5d
This commit is contained in:
commit
ebf317a3b0
|
@ -21,6 +21,8 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
import pytz
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
import openerp
|
import openerp
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
|
@ -31,6 +33,8 @@ from openerp.tools.translate import _
|
||||||
|
|
||||||
class survey_browse_response(report_rml):
|
class survey_browse_response(report_rml):
|
||||||
def create(self, cr, uid, ids, datas, context):
|
def create(self, cr, uid, ids, datas, context):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
_divide_columns_for_matrix = 0.7
|
_divide_columns_for_matrix = 0.7
|
||||||
_display_ans_in_rows = 5
|
_display_ans_in_rows = 5
|
||||||
_pageSize = ('29.7cm','21.1cm')
|
_pageSize = ('29.7cm','21.1cm')
|
||||||
|
@ -207,7 +211,9 @@ class survey_browse_response(report_rml):
|
||||||
for survey in surv_obj.browse(cr, uid, [response.survey_id.id]):
|
for survey in surv_obj.browse(cr, uid, [response.survey_id.id]):
|
||||||
tbl_width = float(_tbl_widths.replace('cm', ''))
|
tbl_width = float(_tbl_widths.replace('cm', ''))
|
||||||
colwidth = "2.5cm,4.8cm," + str(tbl_width - 15.0) +"cm,3.2cm,4.5cm"
|
colwidth = "2.5cm,4.8cm," + str(tbl_width - 15.0) +"cm,3.2cm,4.5cm"
|
||||||
resp_create = tools.ustr(time.strftime('%d-%m-%Y %I:%M:%S %p', time.strptime(response.date_create.split('.')[0], '%Y-%m-%d %H:%M:%S')))
|
timezone = pytz.timezone(context.get('tz') or 'UTC')
|
||||||
|
create_date = pytz.UTC.localize(datetime.strptime(response.date_create.split('.')[0], tools.DEFAULT_SERVER_DATETIME_FORMAT))
|
||||||
|
resp_create = create_date.astimezone(timezone).strftime("%Y-%m-%d %H:%M:%S") #Converting date to user's timezone
|
||||||
rml += """<blockTable colWidths='""" + colwidth + """' style="Table_heading">
|
rml += """<blockTable colWidths='""" + colwidth + """' style="Table_heading">
|
||||||
<tr>
|
<tr>
|
||||||
<td><para style="terp_default_9_Bold">""" + _('Print Date : ') + """</para></td>
|
<td><para style="terp_default_9_Bold">""" + _('Print Date : ') + """</para></td>
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
|
import pytz
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
from time import strftime
|
from time import strftime
|
||||||
|
@ -667,10 +668,15 @@ class survey_response(osv.osv):
|
||||||
def name_get(self, cr, uid, ids, context=None):
|
def name_get(self, cr, uid, ids, context=None):
|
||||||
if not len(ids):
|
if not len(ids):
|
||||||
return []
|
return []
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
reads = self.read(cr, uid, ids, ['user_id','date_create'], context=context)
|
reads = self.read(cr, uid, ids, ['user_id','date_create'], context=context)
|
||||||
res = []
|
res = []
|
||||||
for record in reads:
|
for record in reads:
|
||||||
name = (record['user_id'] and record['user_id'][1] or '' )+ ' (' + record['date_create'].split('.')[0] + ')'
|
timezone = pytz.timezone(context.get('tz') or 'UTC')
|
||||||
|
create_date = pytz.UTC.localize(datetime.strptime(record['date_create'].split('.')[0], tools.DEFAULT_SERVER_DATETIME_FORMAT))
|
||||||
|
localized_create_date = create_date.astimezone(timezone)
|
||||||
|
name = (record['user_id'] and record['user_id'][1] or '' )+ ' (' + localized_create_date.strftime("%Y-%m-%d %H:%M:%S") + ')'
|
||||||
res.append((record['id'], name))
|
res.append((record['id'], name))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
|
import pytz
|
||||||
import datetime
|
import datetime
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
import os
|
import os
|
||||||
|
@ -173,7 +174,10 @@ class survey_question_wiz(osv.osv_memory):
|
||||||
# TODO: l10n, cleanup this code to make it readable. Or template?
|
# TODO: l10n, cleanup this code to make it readable. Or template?
|
||||||
xml_group = etree.SubElement(xml_form, 'group', {'col': '40', 'colspan': '4'})
|
xml_group = etree.SubElement(xml_form, 'group', {'col': '40', 'colspan': '4'})
|
||||||
record = sur_response_obj.browse(cr, uid, context['response_id'][context['response_no']])
|
record = sur_response_obj.browse(cr, uid, context['response_id'][context['response_no']])
|
||||||
etree.SubElement(xml_group, 'label', {'string': to_xml(tools.ustr(_('Answer Of :- ') + record.user_id.name + _(', Date :- ') + record.date_create.split('.')[0] )), 'align':"0.0"})
|
timezone = pytz.timezone(context.get('tz') or 'UTC')
|
||||||
|
response_date = pytz.UTC.localize(datetime.datetime.strptime(record['date_create'].split('.')[0], tools.DEFAULT_SERVER_DATETIME_FORMAT))
|
||||||
|
localized_response_date = response_date.astimezone(timezone)
|
||||||
|
etree.SubElement(xml_group, 'label', {'string': to_xml(tools.ustr(_('Answer Of :- ') + record.user_id.name + _(', Date :- ') + localized_response_date.strftime("%Y-%m-%d %H:%M:%S") )), 'align':"0.0"})
|
||||||
etree.SubElement(xml_group, 'label', {'string': to_xml(tools.ustr(_(" Answer :- ") + str(context.get('response_no',0) + 1) +"/" + str(len(context.get('response_id',0))) )), 'align':"0.0"})
|
etree.SubElement(xml_group, 'label', {'string': to_xml(tools.ustr(_(" Answer :- ") + str(context.get('response_no',0) + 1) +"/" + str(len(context.get('response_id',0))) )), 'align':"0.0"})
|
||||||
if context.get('response_no',0) > 0:
|
if context.get('response_no',0) > 0:
|
||||||
etree.SubElement(xml_group, 'button', {'colspan':"1",'icon':"gtk-go-back",'name':"action_forward_previous",'string': tools.ustr("Previous Answer"),'type':"object"})
|
etree.SubElement(xml_group, 'button', {'colspan':"1",'icon':"gtk-go-back",'name':"action_forward_previous",'string': tools.ustr("Previous Answer"),'type':"object"})
|
||||||
|
|
|
@ -449,17 +449,31 @@ class res_partner(osv.osv, format_address):
|
||||||
def _commercial_sync_from_company(self, cr, uid, partner, context=None):
|
def _commercial_sync_from_company(self, cr, uid, partner, context=None):
|
||||||
""" Handle sync of commercial fields when a new parent commercial entity is set,
|
""" Handle sync of commercial fields when a new parent commercial entity is set,
|
||||||
as if they were related fields """
|
as if they were related fields """
|
||||||
if partner.commercial_partner_id != partner:
|
commercial_partner = partner.commercial_partner_id
|
||||||
|
if not commercial_partner:
|
||||||
|
# On child partner creation of a parent partner,
|
||||||
|
# the commercial_partner_id is not yet computed
|
||||||
|
commercial_partner_id = self._commercial_partner_compute(
|
||||||
|
cr, uid, [partner.id], 'commercial_partner_id', [], context=context)[partner.id]
|
||||||
|
commercial_partner = self.browse(cr, uid, commercial_partner_id, context=context)
|
||||||
|
if commercial_partner != partner:
|
||||||
commercial_fields = self._commercial_fields(cr, uid, context=context)
|
commercial_fields = self._commercial_fields(cr, uid, context=context)
|
||||||
sync_vals = self._update_fields_values(cr, uid, partner.commercial_partner_id,
|
sync_vals = self._update_fields_values(cr, uid, commercial_partner,
|
||||||
commercial_fields, context=context)
|
commercial_fields, context=context)
|
||||||
partner.write(sync_vals)
|
partner.write(sync_vals)
|
||||||
|
|
||||||
def _commercial_sync_to_children(self, cr, uid, partner, context=None):
|
def _commercial_sync_to_children(self, cr, uid, partner, context=None):
|
||||||
""" Handle sync of commercial fields to descendants """
|
""" Handle sync of commercial fields to descendants """
|
||||||
commercial_fields = self._commercial_fields(cr, uid, context=context)
|
commercial_fields = self._commercial_fields(cr, uid, context=context)
|
||||||
sync_vals = self._update_fields_values(cr, uid, partner.commercial_partner_id,
|
commercial_partner = partner.commercial_partner_id
|
||||||
commercial_fields, context=context)
|
if not commercial_partner:
|
||||||
|
# On child partner creation of a parent partner,
|
||||||
|
# the commercial_partner_id is not yet computed
|
||||||
|
commercial_partner_id = self._commercial_partner_compute(
|
||||||
|
cr, uid, [partner.id], 'commercial_partner_id', [], context=context)[partner.id]
|
||||||
|
commercial_partner = self.browse(cr, uid, commercial_partner_id, context=context)
|
||||||
|
sync_vals = self._update_fields_values(cr, uid, commercial_partner,
|
||||||
|
commercial_fields, context=context)
|
||||||
sync_children = [c for c in partner.child_ids if not c.is_company]
|
sync_children = [c for c in partner.child_ids if not c.is_company]
|
||||||
for child in sync_children:
|
for child in sync_children:
|
||||||
self._commercial_sync_to_children(cr, uid, child, context=context)
|
self._commercial_sync_to_children(cr, uid, child, context=context)
|
||||||
|
|
|
@ -250,20 +250,24 @@ class test_base(common.TransactionCase):
|
||||||
'parent_id': p1.id}))
|
'parent_id': p1.id}))
|
||||||
p2 = self.res_partner.browse(cr, uid, self.res_partner.search(cr, uid,
|
p2 = self.res_partner.browse(cr, uid, self.res_partner.search(cr, uid,
|
||||||
[('email', '=', 'agr@sunhelm.com')])[0])
|
[('email', '=', 'agr@sunhelm.com')])[0])
|
||||||
|
self.res_partner.write(cr, uid, sunhelm.id, {'child_ids': [(0, 0, {'name': 'Ulrik Greenthorn',
|
||||||
|
'email': 'ugr@sunhelm.com'})]})
|
||||||
|
p3 = self.res_partner.browse(cr, uid, self.res_partner.search(cr, uid,
|
||||||
|
[('email', '=', 'ugr@sunhelm.com')])[0])
|
||||||
|
|
||||||
for p in (p0, p1, p11, p2):
|
for p in (p0, p1, p11, p2, p3):
|
||||||
p.refresh()
|
p.refresh()
|
||||||
self.assertEquals(p.commercial_partner_id, sunhelm, 'Incorrect commercial entity resolution')
|
self.assertEquals(p.commercial_partner_id, sunhelm, 'Incorrect commercial entity resolution')
|
||||||
self.assertEquals(p.vat, sunhelm.vat, 'Commercial fields must be automatically synced')
|
self.assertEquals(p.vat, sunhelm.vat, 'Commercial fields must be automatically synced')
|
||||||
sunhelmvat = 'BE0123456789'
|
sunhelmvat = 'BE0123456789'
|
||||||
sunhelm.write({'vat': sunhelmvat})
|
sunhelm.write({'vat': sunhelmvat})
|
||||||
for p in (p0, p1, p11, p2):
|
for p in (p0, p1, p11, p2, p3):
|
||||||
p.refresh()
|
p.refresh()
|
||||||
self.assertEquals(p.vat, sunhelmvat, 'Commercial fields must be automatically and recursively synced')
|
self.assertEquals(p.vat, sunhelmvat, 'Commercial fields must be automatically and recursively synced')
|
||||||
|
|
||||||
p1vat = 'BE0987654321'
|
p1vat = 'BE0987654321'
|
||||||
p1.write({'vat': p1vat})
|
p1.write({'vat': p1vat})
|
||||||
for p in (sunhelm, p0, p11, p2):
|
for p in (sunhelm, p0, p11, p2, p3):
|
||||||
p.refresh()
|
p.refresh()
|
||||||
self.assertEquals(p.vat, sunhelmvat, 'Sync to children should only work downstream and on commercial entities')
|
self.assertEquals(p.vat, sunhelmvat, 'Sync to children should only work downstream and on commercial entities')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue