diff --git a/addons/account/board_account_view.xml b/addons/account/board_account_view.xml
index 4cf8cd89ec5..83365d79f51 100644
--- a/addons/account/board_account_view.xml
+++ b/addons/account/board_account_view.xml
@@ -53,7 +53,7 @@
-
+
diff --git a/addons/auction/auction_view.xml b/addons/auction/auction_view.xml
index 41c6cea2f77..dad4d39b776 100644
--- a/addons/auction/auction_view.xml
+++ b/addons/auction/auction_view.xml
@@ -1540,7 +1540,7 @@ Object encoded
report.unclassified.objects
tree
-
+
diff --git a/addons/auction/board_auction_view.xml b/addons/auction/board_auction_view.xml
index ca4b30bd688..6693622d55c 100644
--- a/addons/auction/board_auction_view.xml
+++ b/addons/auction/board_auction_view.xml
@@ -58,7 +58,7 @@
menu
-
+
@@ -94,16 +95,23 @@
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
+
+
@@ -113,7 +121,8 @@
-
+
+
@@ -133,13 +142,13 @@
-
+
-
+
@@ -176,10 +185,13 @@
icon="terp-mail-replied" type="action" />
-
+
@@ -210,6 +222,7 @@
domain="[('state','in',('draft','open'))]"
help="All new and in progress jobs"
default="1"
+ name="current"
/>
+
+
-
+
@@ -254,6 +272,24 @@
+
+
+
+ Hr Applicants Calendar
+ hr.applicant
+ calendar
+
+
+
+
+
+
+
+
+
+
+
# ------------------------------------------------------
# HR Job
# ------------------------------------------------------
@@ -321,5 +357,42 @@
action="hr_recruitment_stage_act"
sequence="1"/>
+
+
+
+ hr.recruitment.degree.tree
+ hr.recruitment.degree
+ tree
+
+
+
+
+
+
+
+
+
+
+
+ hr.recruitment.degree.form
+ hr.recruitment.degree
+ form
+
+
+
+
+
+
+
+
+ Degree
+ hr.recruitment.degree
+ form
+
+
+
diff --git a/addons/hr_recruitment/report/hr_recruitment_report_view.xml b/addons/hr_recruitment/report/hr_recruitment_report_view.xml
index 83fb9e6d9b0..3ebdfdf8a0f 100644
--- a/addons/hr_recruitment/report/hr_recruitment_report_view.xml
+++ b/addons/hr_recruitment/report/hr_recruitment_report_view.xml
@@ -60,7 +60,7 @@
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
help="Recruitment during last 7 days"/>
-
@@ -73,9 +73,9 @@
domain="[('state','=','pending')]"
help = "Pending recruitment"/>
-
+
-
+
new
-
+
\ No newline at end of file
diff --git a/addons/hr_timesheet/hr_timesheet.py b/addons/hr_timesheet/hr_timesheet.py
index ea13dba89e6..ec6fbc2d1fc 100644
--- a/addons/hr_timesheet/hr_timesheet.py
+++ b/addons/hr_timesheet/hr_timesheet.py
@@ -47,7 +47,9 @@ class hr_analytic_timesheet(osv.osv):
'partner_id': fields.related('account_id', 'partner_id', type='many2one', string='Partner Id', relation='account.analytic.account', store=True),
}
- def unlink(self, cr, uid, ids, context={}):
+ def unlink(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
toremove = {}
for obj in self.browse(cr, uid, ids, context=context):
toremove[obj.line_id.id] = True
@@ -55,7 +57,9 @@ class hr_analytic_timesheet(osv.osv):
return super(hr_analytic_timesheet, self).unlink(cr, uid, ids, context=context)
- def on_change_unit_amount(self, cr, uid, id, prod_id, unit_amount, unit, context={}):
+ def on_change_unit_amount(self, cr, uid, id, prod_id, unit_amount, unit, context=None):
+ if context is None:
+ context = {}
res = {}
if prod_id and unit_amount:
# find company
@@ -63,9 +67,11 @@ class hr_analytic_timesheet(osv.osv):
res = self.pool.get('account.analytic.line').on_change_unit_amount(cr, uid, id, prod_id, unit_amount, company_id, unit, context=context)
return res
- def _getEmployeeProduct(self, cr, uid, context={}):
+ def _getEmployeeProduct(self, cr, uid, context=None):
+ if context is None:
+ context = {}
emp_obj = self.pool.get('hr.employee')
- emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))])
+ emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))], context=context)
if emp_id:
emp=emp_obj.browse(cr, uid, emp_id[0], context=context)
if emp.product_id:
@@ -76,7 +82,7 @@ class hr_analytic_timesheet(osv.osv):
emp_obj = self.pool.get('hr.employee')
if context is None:
context = {}
- emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))])
+ emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))], context=context)
if emp_id:
emp=emp_obj.browse(cr, uid, emp_id[0], context=context)
if emp.product_id:
@@ -87,7 +93,7 @@ class hr_analytic_timesheet(osv.osv):
emp_obj = self.pool.get('hr.employee')
if context is None:
context = {}
- emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))])
+ emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))], context=context)
if emp_id:
emp = emp_obj.browse(cr, uid, emp_id[0], context=context)
if bool(emp.product_id):
@@ -102,7 +108,7 @@ class hr_analytic_timesheet(osv.osv):
emp_obj = self.pool.get('hr.employee')
if context is None:
context = {}
- emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))])
+ emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))], context=context)
if emp_id:
emp = emp_obj.browse(cr, uid, emp_id[0], context=context)
if emp.journal_id:
@@ -129,7 +135,9 @@ class hr_analytic_timesheet(osv.osv):
return {'value':{},'warning':warning}
return {'value':{}}
- def create(self, cr, uid, vals, context={}):
+ def create(self, cr, uid, vals, context=None):
+ if context is None:
+ context = {}
emp_obj = self.pool.get('hr.employee')
emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))], context=context)
ename = ''
diff --git a/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py b/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py
index d2e9a54f836..4bcdb614e2f 100644
--- a/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py
+++ b/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py
@@ -33,6 +33,8 @@ class analytical_timesheet_employee(osv.osv_memory):
}
def _get_user(self, cr, uid, context=None):
+ if context is None:
+ context = {}
return uid
_defaults = {
@@ -42,6 +44,8 @@ class analytical_timesheet_employee(osv.osv_memory):
}
def print_report(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
data = self.read(cr, uid, ids, context=context)[0]
datas = {
'ids': [],
@@ -54,4 +58,5 @@ class analytical_timesheet_employee(osv.osv_memory):
'datas': datas,
}
analytical_timesheet_employee()
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/hr_timesheet/wizard/hr_timesheet_print_users.py b/addons/hr_timesheet/wizard/hr_timesheet_print_users.py
index f7358eca990..1f3bd0ddf74 100644
--- a/addons/hr_timesheet/wizard/hr_timesheet_print_users.py
+++ b/addons/hr_timesheet/wizard/hr_timesheet_print_users.py
@@ -39,6 +39,8 @@ class analytical_timesheet_employees(osv.osv_memory):
}
def print_report(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
data = self.read(cr, uid, ids, context=context)[0]
datas = {
'ids': [],
diff --git a/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py b/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py
index 58bd24680dd..47645ce11c3 100644
--- a/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py
+++ b/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py
@@ -33,31 +33,37 @@ class hr_so_project(osv.osv_memory):
'date': fields.datetime('Closing Date'),
'analytic_amount': fields.float('Minimum Analytic Amount'),
'name': fields.char('Employees name', size=32, required=True, readonly=True),
- 'state': fields.char('Current state', size=32, required=True, readonly=True),
+# 'state': fields.char('Current state', size=32, required=True, readonly=True),
+ 'state': fields.related('emp_id', 'state', string='Current state', type='char', required=True, readonly=True),
'server_date': fields.datetime('Current Date', required=True, readonly=True),
'emp_id': fields.many2one('hr.employee', 'Employee ID')
}
-
+
def _get_empid(self, cr, uid, context=None):
emp_obj = self.pool.get('hr.employee')
- emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)])
- if emp_id:
- for employee in emp_obj.browse(cr, uid, emp_id):
- return {'name': employee.name, 'state': employee.state, 'emp_id': emp_id[0], 'server_date':time.strftime('%Y-%m-%d %H:%M:%S')}
+ if context is None:
+ context = {}
+ emp_ids = emp_obj.search(cr, uid, [('user_id', '=', uid)], context=context)
+ if emp_ids:
+ for employee in emp_obj.browse(cr, uid, emp_ids, context=context):
+ return {'name': employee.name, 'state': employee.state, 'emp_id': emp_ids[0], 'server_date':time.strftime('%Y-%m-%d %H:%M:%S')}
- def _get_empid2(self, cr, uid, context):
-
- res = self._get_empid(cr, uid, context)
+ def _get_empid2(self, cr, uid, context=None):
+ if context is None:
+ context = {}
+ res = self._get_empid(cr, uid, context=context)
cr.execute('select name,action from hr_attendance where employee_id=%s order by name desc limit 1', (res['emp_id'],))
-
+
res['server_date'] = time.strftime('%Y-%m-%d %H:%M:%S')
date_start = cr.fetchone()
-
+
if date_start:
res['date_start'] = date_start[0]
return res
def default_get(self, cr, uid, fields_list, context=None):
+ if context is None:
+ context = {}
res = super(hr_so_project, self).default_get(cr, uid, fields_list, context=context)
res.update(self._get_empid2(cr, uid, context=context))
return res
@@ -65,41 +71,44 @@ class hr_so_project(osv.osv_memory):
def _write(self, cr, uid, data, emp_id, context=None):
timesheet_obj = self.pool.get('hr.analytic.timesheet')
emp_obj = self.pool.get('hr.employee')
+ if context is None:
+ context = {}
hour = (time.mktime(time.strptime(data['date'] or time.strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S')) -
time.mktime(time.strptime(data['date_start'], '%Y-%m-%d %H:%M:%S'))) / 3600.0
minimum = data['analytic_amount']
if minimum:
hour = round(round((hour + minimum / 2) / minimum) * minimum, 2)
- res = timesheet_obj.default_get(cr, uid, ['product_id','product_uom_id'])
-
+ res = timesheet_obj.default_get(cr, uid, ['product_id','product_uom_id'], context=context)
+
if not res['product_uom_id']:
raise osv.except_osv(_('UserError'), _('No cost unit defined for this employee !'))
up = timesheet_obj.on_change_unit_amount(cr, uid, False, res['product_id'], hour, res['product_uom_id'])['value']
-
+
res['name'] = data['info']
res['account_id'] = data['account_id'].id
res['unit_amount'] = hour
- emp_journal = emp_obj.browse(cr, uid, emp_id, context).journal_id
+ emp_journal = emp_obj.browse(cr, uid, emp_id, context=context).journal_id
res['journal_id'] = emp_journal and emp_journal.id or False
res.update(up)
up = timesheet_obj.on_change_account_id(cr, uid, [], res['account_id']).get('value', {})
res.update(up)
return timesheet_obj.create(cr, uid, res, context=context)
-
+
def sign_out_result_end(self, cr, uid, ids, context=None):
-
+ if context is None:
+ context = {}
emp_obj = self.pool.get('hr.employee')
-
- for data in self.browse(cr, uid, ids):
+ for data in self.browse(cr, uid, ids, context=context):
emp_id = data.emp_id.id
- emp_obj.attendance_action_change(cr, uid, [emp_id], type='sign_out',dt=data.date)
+ emp_obj.attendance_action_change(cr, uid, [emp_id], type='sign_out', dt=data.date)
self._write(cr, uid, data, emp_id, context=context)
return {}
def sign_out_result(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
emp_obj = self.pool.get('hr.employee')
-
- for data in self.browse(cr, uid, ids):
+ for data in self.browse(cr, uid, ids, context=context):
emp_id = data.emp_id.id
emp_obj.attendance_action_change(cr, uid, [emp_id], type='action', dt=data.date)
self._write(cr, uid, data, emp_id, context=context)
@@ -108,7 +117,7 @@ class hr_so_project(osv.osv_memory):
hr_so_project()
class hr_si_project(osv.osv_memory):
-
+
_name = 'hr.sign.in.project'
_description = 'Sign In By Project'
_columns = {
@@ -117,9 +126,9 @@ class hr_si_project(osv.osv_memory):
'date': fields.datetime('Starting Date'),
'server_date': fields.datetime('Current Date', readonly=True),
# 'emp_id': fields.char('Employee ID', size=512, required=False),
- 'emp_id': fields.many2one('hr.employee', 'Employee ID')
+ 'emp_id': fields.many2one('hr.employee', 'Employee ID')
}
-
+
def view_init(self, cr, uid, fields, context=None):
"""
This function checks for precondition before wizard executes
@@ -130,22 +139,25 @@ class hr_si_project(osv.osv_memory):
@param context: A standard dictionary for contextual values
"""
emp_obj = self.pool.get('hr.employee')
- emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)])
+ if context is None:
+ context = {}
+ emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)], context=context)
if not emp_id:
raise osv.except_osv(_('UserError'), _('No employee defined for your user !'))
- return False
+ return False
def check_state(self, cr, uid, ids, context=None):
-
obj_model = self.pool.get('ir.model.data')
+ if context is None:
+ context = {}
emp_id = self.default_get(cr, uid, context)['emp_id']
# get the latest action (sign_in or out) for this employee
cr.execute('select action from hr_attendance where employee_id=%s and action in (\'sign_in\',\'sign_out\') order by name desc limit 1', (emp_id,))
res = (cr.fetchone() or ('sign_out',))[0]
in_out = res == 'sign_out' and 'out' or 'in'
#TODO: invert sign_in et sign_out
- model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_hr_timesheet_sign_%s' % in_out)])
- resource_id = obj_model.read(cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
+ model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_hr_timesheet_sign_%s' % in_out)], context=context)
+ resource_id = obj_model.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
return {
'name': 'Sign in / Sign out',
'view_type': 'form',
@@ -156,20 +168,24 @@ class hr_si_project(osv.osv_memory):
'target': 'new'
}
- def sign_in_result(self, cr, uid, ids, context):
+ def sign_in_result(self, cr, uid, ids, context=None):
emp_obj = self.pool.get('hr.employee')
- for data in self.browse(cr, uid, ids, context):
+ if context is None:
+ context = {}
+ for data in self.browse(cr, uid, ids, context=context):
emp_id = data.emp_id.id
success = emp_obj.attendance_action_change(cr, uid, [emp_id], type = 'sign_in' ,dt=data.date or False)
return {}
def default_get(self, cr, uid, fields_list, context=None):
res = super(hr_si_project, self).default_get(cr, uid, fields_list, context=context)
+ if context is None:
+ context = {}
emp_obj = self.pool.get('hr.employee')
- emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)])
- if emp_id:
- for employee in emp_obj.browse(cr, uid, emp_id):
- res.update({'emp_id': employee.name, 'state': employee.state, 'emp_id': emp_id[0], 'server_date':time.strftime('%Y-%m-%d %H:%M:%S')})
+ emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)], context=context)
+ if emp_id:
+ for employee in emp_obj.browse(cr, uid, emp_id, context=context):
+ res.update({'name': employee.name, 'state': employee.state, 'emp_id': emp_id[0], 'server_date':time.strftime('%Y-%m-%d %H:%M:%S')})
return res
hr_si_project()
diff --git a/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out_view.xml b/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out_view.xml
index 9a77ae938f3..18e5e4f11df 100644
--- a/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out_view.xml
+++ b/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out_view.xml
@@ -70,11 +70,13 @@
-
-
+
+
-
+
+
+
diff --git a/addons/hr_timesheet_invoice/board_hr_timesheet_invoice.xml b/addons/hr_timesheet_invoice/board_hr_timesheet_invoice.xml
index 7a7fbce1024..e54e95c3a17 100644
--- a/addons/hr_timesheet_invoice/board_hr_timesheet_invoice.xml
+++ b/addons/hr_timesheet_invoice/board_hr_timesheet_invoice.xml
@@ -14,26 +14,26 @@
board.hr.timesheet.invoice
board.board
- form
-
+ form
+
-
+
-
+
board.hr.timesheet.invoice
board.board
- form
-
+ form
+
-
+
-
+
diff --git a/addons/mrp/board_manufacturing_view.xml b/addons/mrp/board_manufacturing_view.xml
index 4f62030999c..2c0182bb704 100644
--- a/addons/mrp/board_manufacturing_view.xml
+++ b/addons/mrp/board_manufacturing_view.xml
@@ -35,7 +35,7 @@
-
diff --git a/addons/project/project.py b/addons/project/project.py
index 816e85c29b4..3f7412fa8dc 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -134,7 +134,6 @@ class project(osv.osv):
'warn_header': fields.text('Mail Header', help="Header added at the beginning of the email for the warning message sent to the customer when a task is closed."),
'warn_footer': fields.text('Mail Footer', help="Footer added at the beginning of the email for the warning message sent to the customer when a task is closed."),
'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages'),
- 'project_escalation_id': fields.many2one('project.project','Project Escalation', help='If any issue is escalated from the current Project, it will be listed under the project selected here.'),
}
_order = "sequence"
@@ -153,16 +152,8 @@ class project(osv.osv):
return False
return True
- def _check_escalation(self, cr, uid, ids):
- project_obj = self.browse(cr, uid, ids[0])
- if project_obj.project_escalation_id:
- if project_obj.project_escalation_id.id == project_obj.id:
- return False
- return True
-
_constraints = [
- (_check_dates, 'Error! project start-date must be lower then project end-date.', ['date_start', 'date']),
- (_check_escalation, 'Error! You cannot assign escalation to the same project!', ['project_escalation_id'])
+ (_check_dates, 'Error! project start-date must be lower then project end-date.', ['date_start', 'date'])
]
def set_template(self, cr, uid, ids, context=None):
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index ce92e9875fa..850cef4eda6 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -40,7 +40,6 @@
-
@@ -166,7 +165,7 @@
{'search_default_Current':1}
- Consult and define yours projects here. A project content a set of related activities that will be performed by your company. Any project can be put into a hierarchy, as a child of a Parent Project. This allows you to design large project structure very useful for work organization.
+ Consult and define your projects here. A project contains a set of related activities that will be performed by your company. Any project can be put into a hierarchy, as a child of a Parent Project. This allows you to design large project structure very useful for work organization.
diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml
index 8fe05eddebe..343d0e98b35 100644
--- a/addons/project_issue/board_project_issue_view.xml
+++ b/addons/project_issue/board_project_issue_view.xml
@@ -86,6 +86,6 @@
+ action="open_board_project_issue"/>
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 4b070a6682b..b61c4a03c0b 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -181,7 +181,7 @@ class project_issue(osv.osv, crm.crm_case):
method=True, multi='day_open', type="float", store=True),
'day_close': fields.function(_compute_day, string='Days to Close', \
method=True, multi='day_close', type="float", store=True),
- 'assigned_to': fields.related('task_id', 'user_id', type='many2one', relation='res.users', string='Assigned to', help='This is the current user to whom the related task have been assigned', readonly=True),
+ 'assigned_to': fields.many2one('res.users', 'Assigned to', help='This is the current user to whom the related task have been assigned'),
'working_hours_open': fields.function(_compute_day, string='Working Hours to Open the Issue', \
method=True, multi='working_days_open', type="float", store=True),
'working_hours_close': fields.function(_compute_day, string='Working Hours to Close the Issue', \
@@ -406,8 +406,21 @@ project_issue()
class project(osv.osv):
_inherit = "project.project"
_columns = {
- 'resource_calendar_id': fields.many2one('resource.calendar', 'Working Time', help="Timetable working hours to adjust the gantt diagram report"),
+ 'resource_calendar_id' : fields.many2one('resource.calendar', 'Working Time', help="Timetable working hours to adjust the gantt diagram report"),
+ 'project_escalation_id' : fields.many2one('project.project','Project Escalation', help='If any issue is escalated from the current Project, it will be listed under the project selected here.'),
+ 'reply_to' : fields.char('Reply-To Email Address', size=256)
}
+
+ def _check_escalation(self, cr, uid, ids):
+ project_obj = self.browse(cr, uid, ids[0])
+ if project_obj.project_escalation_id:
+ if project_obj.project_escalation_id.id == project_obj.id:
+ return False
+ return True
+
+ _constraints = [
+ (_check_escalation, 'Error! You cannot assign escalation to the same project!', ['project_escalation_id'])
+ ]
project()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index 766850038c6..3845cf6bce0 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -286,5 +286,23 @@
+ # ------------------------------------------------------
+ # Project
+ # ------------------------------------------------------
+
+
+ project.project.form.inherited
+ project.project
+ form
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/project_scrum/board_project_scrum_view.xml b/addons/project_scrum/board_project_scrum_view.xml
index 3889e8f7af3..f0a29ffe7e4 100644
--- a/addons/project_scrum/board_project_scrum_view.xml
+++ b/addons/project_scrum/board_project_scrum_view.xml
@@ -58,6 +58,6 @@
+ action="open_board_project_scrum"/>
diff --git a/addons/purchase/board_purchase_view.xml b/addons/purchase/board_purchase_view.xml
index 10e35e0e04c..1a90dc49e92 100644
--- a/addons/purchase/board_purchase_view.xml
+++ b/addons/purchase/board_purchase_view.xml
@@ -5,7 +5,6 @@
diff --git a/addons/sale/board_sale_view.xml b/addons/sale/board_sale_view.xml
index 0e25af519b4..b25e7e5b1b2 100644
--- a/addons/sale/board_sale_view.xml
+++ b/addons/sale/board_sale_view.xml
@@ -50,7 +50,7 @@
form
-
+
diff --git a/addons/sale_order_dates/sale_order_dates.py b/addons/sale_order_dates/sale_order_dates.py
index c58e68bdbe7..ad36d7c582d 100644
--- a/addons/sale_order_dates/sale_order_dates.py
+++ b/addons/sale_order_dates/sale_order_dates.py
@@ -21,7 +21,9 @@
from osv import fields, osv
import time
-from mx import DateTime
+from datetime import datetime
+from dateutil.relativedelta import relativedelta
+
class sale_order_dates(osv.osv):
_inherit = 'sale.order'
_name = 'sale.order'
@@ -45,7 +47,7 @@ class sale_order_dates(osv.osv):
for order in self.browse(cr, uid, ids):
dates_list = []
for line in order.order_line:
- dt=DateTime.strptime(order.date_order, '%Y-%m-%d') + DateTime.RelativeDateTime(days=line.delay or 0.0)
+ dt = datetime.strptime(order.date_order, '%Y-%m-%d') + relativedelta(days=line.delay or 0.0)
dt_s = dt.strftime('%Y-%m-%d')
dates_list.append(dt_s)
if dates_list:
diff --git a/addons/stock/board_warehouse_view.xml b/addons/stock/board_warehouse_view.xml
index e733c9496d8..df33d91a2a3 100644
--- a/addons/stock/board_warehouse_view.xml
+++ b/addons/stock/board_warehouse_view.xml
@@ -43,8 +43,8 @@
-
+
-
\ No newline at end of file
+