diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py
index 3923add4fe0..96412077840 100644
--- a/addons/account/__openerp__.py
+++ b/addons/account/__openerp__.py
@@ -52,6 +52,7 @@ module named account_voucher.
'wizard/account_statement_from_invoice_view.xml',
'wizard/account_move_bank_reconcile_view.xml',
'wizard/account_use_model_view.xml',
+ 'account_installer.xml',
'account_view.xml',
'account_report.xml',
'wizard/account_report_common_view.xml',
@@ -108,7 +109,6 @@ module named account_voucher.
'process/supplier_invoice_process.xml',
'sequence_view.xml',
'company_view.xml',
- 'account_installer.xml',
'report/account_invoice_report_view.xml',
'report/account_entries_report_view.xml',
'report/account_report_view.xml',
diff --git a/addons/account/account.py b/addons/account/account.py
index a82c39572a9..2a07154461c 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -1949,12 +1949,14 @@ class account_model(osv.osv):
'name': fields.char('Model Name', size=64, required=True, help="This is a model for recurring accounting entries"),
'ref': fields.char('Reference', size=64),
'journal_id': fields.many2one('account.journal', 'Journal', required=True),
+ 'company_id': fields.many2one('res.company', 'Company', required=True),
'lines_id': fields.one2many('account.model.line', 'model_id', 'Model Entries'),
'legend' :fields.text('Legend', readonly=True, size=100),
}
_defaults = {
'legend': lambda self, cr, uid, context:_('You can specify year, month and date in the name of the model using the following labels:\n\n%(year)s : To Specify Year \n%(month)s : To Specify Month \n%(date)s : Current Date\n\ne.g. My model on %(date)s'),
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id
}
def generate(self, cr, uid, ids, datas={}, context={}):
move_ids = []
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index c1954e26288..111fafdd18c 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -1551,6 +1551,7 @@
+
@@ -1568,6 +1569,7 @@
+
@@ -2234,7 +2236,7 @@
new
-
+
account.account.graph
diff --git a/addons/account/security/account_security.xml b/addons/account/security/account_security.xml
index e9360cad741..43e3e32eefd 100644
--- a/addons/account/security/account_security.xml
+++ b/addons/account/security/account_security.xml
@@ -222,4 +222,18 @@
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
+
+ Account fiscal position company rule
+
+
+ [('company_id','=',user.company_id.id)]
+
+
+
+ Account model company rule
+
+
+ [('company_id','=',user.company_id.id)]
+
+
diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py
index 15754399927..a27a2d2e72d 100644
--- a/addons/account_payment/account_payment.py
+++ b/addons/account_payment/account_payment.py
@@ -46,9 +46,12 @@ class payment_mode(osv.osv):
required=True,help='Bank Account for the Payment Mode'),
'journal': fields.many2one('account.journal', 'Journal', required=True,
domain=[('type', '=', 'cash')], help='Cash Journal for the Payment Mode'),
+ 'company_id': fields.many2one('res.company', 'Company', required=True),
'type': fields.many2one('payment.type', 'Payment type', required=True, help='Select the Payment Type for the Payment Mode.'),
}
-
+ _defaults = {
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id
+ }
def suitable_bank_types(self, cr, uid, payment_code=None, context={}):
"""Return the codes of the bank type that are suitable
for the given payment type code"""
diff --git a/addons/account_payment/account_payment_view.xml b/addons/account_payment/account_payment_view.xml
index 880ac0de94b..4fe86cf44c6 100644
--- a/addons/account_payment/account_payment_view.xml
+++ b/addons/account_payment/account_payment_view.xml
@@ -69,6 +69,7 @@
+
@@ -82,6 +83,7 @@
+
diff --git a/addons/account_payment/security/account_payment_security.xml b/addons/account_payment/security/account_payment_security.xml
index dd6b117d184..6561373bafb 100644
--- a/addons/account_payment/security/account_payment_security.xml
+++ b/addons/account_payment/security/account_payment_security.xml
@@ -6,5 +6,12 @@
Accounting / Payments
+
+ Payment Mode company rule
+
+
+ [('company_id','=',user.company_id.id)]
+
+
diff --git a/addons/analytic/__openerp__.py b/addons/analytic/__openerp__.py
index 80585ee39da..1f21fb3fce3 100644
--- a/addons/analytic/__openerp__.py
+++ b/addons/analytic/__openerp__.py
@@ -29,7 +29,8 @@
"description": """Module for defining analytic accounting object.
""",
"init_xml" : [],
- "update_xml": ["security/ir.model.access.csv",
+ "update_xml": ['security/analytic_security.xml',
+ "security/ir.model.access.csv",
],
'demo_xml': [
],
diff --git a/addons/analytic/security/analytic_security.xml b/addons/analytic/security/analytic_security.xml
new file mode 100644
index 00000000000..a382380d962
--- /dev/null
+++ b/addons/analytic/security/analytic_security.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ analytic company rule
+
+
+ [('company_id','=',user.company_id.id)]
+
+
+
diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py
index d436f6778b7..1beb7e90d41 100644
--- a/addons/base_calendar/base_calendar.py
+++ b/addons/base_calendar/base_calendar.py
@@ -962,6 +962,19 @@ class calendar_event(osv.osv):
return {'value': value}
+ def unlink_events(self, cr, uid, ids, context=None):
+ """
+ This function deletes event which are linked with the event with recurrent_uid
+ (Removes the events which refers to the same UID value)
+ """
+ if not context:
+ context = {}
+ for event_id in ids:
+ cr.execute('select id from %s where recurrent_uid=%s' % (self._table, event_id))
+ r_ids = map(lambda x: x[0], cr.fetchall())
+ self.unlink(cr, uid, r_ids, context=context)
+ return True
+
def _set_rrulestring(self, cr, uid, id, name, value, arg, context=None):
"""
Sets values of fields that defines event recurrence from the value of rrule string
@@ -1074,6 +1087,10 @@ class calendar_event(osv.osv):
else:
result[event] = self.compute_rule_string(cr, uid, {'freq': datas.get('rrule_type').upper(), 'interval': 1}, context=context)
+ for id, myrule in result.items():
+ #Remove the events generated from recurrent event
+ if not myrule:
+ self.unlink_events(cr, uid, [id], context=context)
return result
_columns = {
@@ -1545,23 +1562,25 @@ true, it will allow you to hide the event alarm information without removing it.
@return: True
"""
res = False
- for event_id in ids:
+ for event_datas in self.read(cr, uid, ids, ['date', 'rrule', 'exdate'], context=context):
+ event_id = event_datas['id']
if isinstance(event_id, (int, long)):
- res = super(calendar_event, self).unlink(cr, uid, event_id)
+ res = super(calendar_event, self).unlink(cr, uid, event_id, context=context)
self.pool.get('res.alarm').do_alarm_unlink(cr, uid, [event_id], self._name)
- continue
- event_id, date_new = event_id.split('-')
- event_id = [int(event_id)]
- for record in self.read(cr, uid, event_id, ['date', 'rrule', 'exdate'], context=context):
- if record['rrule']:
+ self.unlink_events(cr, uid, [event_id], context=context)
+ else:
+ str_event, date_new = event_id.split('-')
+ event_id = int(str_event)
+ if event_datas['rrule']:
# Remove one of the recurrent event
date_new = time.strftime("%Y%m%dT%H%M%S", \
time.strptime(date_new, "%Y%m%d%H%M%S"))
- exdate = (record['exdate'] and (record['exdate'] + ',') or '') + date_new
- res = self.write(cr, uid, event_id, {'exdate': exdate})
+ exdate = (event_datas['exdate'] and (event_datas['exdate'] + ',') or '') + date_new
+ res = self.write(cr, uid, [event_id], {'exdate': exdate})
else:
- res = super(calendar_event, self).unlink(cr, uid, event_id)
- self.pool.get('res.alarm').do_alarm_unlink(cr, uid, event_id, self._name)
+ res = super(calendar_event, self).unlink(cr, uid, [event_id], context=context)
+ self.pool.get('res.alarm').do_alarm_unlink(cr, uid, [event_id], self._name)
+ self.unlink_events(cr, uid, [event_id], context=context)
return res
def create(self, cr, uid, vals, context=None):
diff --git a/addons/document/__openerp__.py b/addons/document/__openerp__.py
index 3a18406f607..16bbcd41c83 100644
--- a/addons/document/__openerp__.py
+++ b/addons/document/__openerp__.py
@@ -22,7 +22,7 @@
{
'name': 'Integrated Document Management System',
- 'version': '1.99',
+ 'version': '1.1',
'category': 'Generic Modules/Others',
'description': """This is a complete document management system:
* User Authentication
@@ -57,7 +57,7 @@
],
'installable': True,
'active': False,
- 'certificate': None,
+ 'certificate': '0070515416461',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr/hr_department_view.xml b/addons/hr/hr_department_view.xml
index 29e3b04f2c9..c2bb6ac7390 100644
--- a/addons/hr/hr_department_view.xml
+++ b/addons/hr/hr_department_view.xml
@@ -72,10 +72,11 @@
hr.department
form
+ Your Company's Departments Structure is used to manage all documents related to employees by departments: expenses and timesheet validation, leaves management, recruitements, etc.
-
+
res.users.form
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index 5ebf9b81019..659ddfa36e9 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -145,6 +145,7 @@
[]
+ The employee directory contains all data related to your employees: from their photo up to their hourly estimated costs for the timesheets. Employees are managed by departments and can be linked to users to manage their access rights.
@@ -394,6 +395,7 @@
tree,form
{'search_default_Current':1}
+ Job Positions are used to define the jobs, the requirements. You can attach a survey to a job position. This survey will be used in the recruitement process to evaluate the applicants for this job position.
diff --git a/addons/hr_attendance/hr_attendance_view.xml b/addons/hr_attendance/hr_attendance_view.xml
index fb6911a6656..da3218d9c6c 100644
--- a/addons/hr_attendance/hr_attendance_view.xml
+++ b/addons/hr_attendance/hr_attendance_view.xml
@@ -72,6 +72,7 @@
tree,form
{"search_default_employee":1}
+ Time Tracking functionality aims to manage employee's attendances on the basis of the actions (Sign in/Sign out) performed by them. You can also link this to an attendance machine using OpenERP's webservices features.
diff --git a/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml b/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml
index 8d3aa343b15..e9b5fecf330 100644
--- a/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml
+++ b/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml
@@ -19,7 +19,7 @@
- Attendances by month
+ Attendances By Month
ir.actions.act_window
hr.attendance.month
form
@@ -30,7 +30,7 @@
- Attendances by month
+ Attendances By Month
client_print_multi
action
diff --git a/addons/hr_evaluation/hr_evaluation.py b/addons/hr_evaluation/hr_evaluation.py
index b4743a7ffdc..0b497c461e0 100644
--- a/addons/hr_evaluation/hr_evaluation.py
+++ b/addons/hr_evaluation/hr_evaluation.py
@@ -36,11 +36,11 @@ class hr_evaluation_plan(osv.osv):
'month_first': fields.integer('First Evaluation After'),
'month_next': fields.integer('Next Evaluation After'),
'active': fields.boolean('Active')
- }
+ }
_defaults = {
'active': True,
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'account.account', context=c),
- }
+ }
hr_evaluation_plan()
class hr_evaluation_plan_phase(osv.osv):
@@ -131,7 +131,7 @@ class hr_employee(osv.osv):
evaluation_date=(dt.ISO.ParseAny(evaluation_date)+ dt.RelativeDateTime(months=+evaluation_plan.month_next)).strftime('%Y-%m-%d')
flag = True
if ids and flag:
- self.pool.get("hr_evaluation.evaluation").create(cr, uid, {'employee_id': ids[0], 'plan_id': evaluation_plan_id}, context=context)
+ obj_evaluation.create(cr, uid, {'employee_id': ids[0], 'plan_id': evaluation_plan_id}, context=context)
return {'value': {'evaluation_date': evaluation_date}}
def create(self, cr, uid, vals, context=None):
@@ -139,7 +139,7 @@ class hr_employee(osv.osv):
context = {}
id = super(hr_employee, self).create(cr, uid, vals, context=context)
if vals.get('evaluation_plan_id', False):
- obj_evaluation.create(cr, uid, {'employee_id' : id, 'plan_id': vals['evaluation_plan_id']}, context=context)
+ self.pool.get('hr_evaluation.evaluation').create(cr, uid, {'employee_id' : id, 'plan_id': vals['evaluation_plan_id']}, context=context)
return id
hr_employee()
@@ -289,10 +289,10 @@ class hr_evaluation_interview(osv.osv):
'request_id': fields.many2one('survey.request','Request_id', ondelete='cascade', required=True),
'user_to_review_id': fields.many2one('hr.employee', 'Employee to Interview'),
'evaluation_id': fields.many2one('hr_evaluation.evaluation', 'Evaluation Type'),
- }
+ }
_defaults = {
'is_evaluation': True,
- }
+ }
def survey_req_waiting_answer(self, cr, uid, ids, context=None):
if context is None:
diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml
index 45efab642c8..55bc22ac505 100644
--- a/addons/hr_evaluation/hr_evaluation_view.xml
+++ b/addons/hr_evaluation/hr_evaluation_view.xml
@@ -260,6 +260,7 @@
form
tree,form,graph
+ Each employee can be assigned to an evaluation plan. These plans define the frequency and the way you manage your periodic personnal evalautions. You will be able to define steps and attach interview forms to each step. OpenERP manages all kind of evaluations: bottom-up, top-down, self evaluation and final evaluation by the manager.