-
-
-
-
-
-
+
+
+
+
+
+
@@ -78,29 +84,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -126,6 +109,9 @@
+
+
+
@@ -147,23 +133,6 @@
-
-
-
-
-
-
diff --git a/addons/email_template/email_template_view.xml b/addons/email_template/email_template_view.xml
index 387b97ae01d..127d255ec6b 100644
--- a/addons/email_template/email_template_view.xml
+++ b/addons/email_template/email_template_view.xml
@@ -116,8 +116,6 @@
-
diff --git a/addons/event/event.py b/addons/event/event.py
index f01caac175f..a348e005d06 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -48,6 +48,7 @@ class event_event(osv.osv):
_name = 'event.event'
_description = __doc__
_order = 'date_begin'
+ _inherit = ['ir.needaction_mixin','mail.thread']
def name_get(self, cr, uid, ids, context=None):
if not ids:
@@ -70,6 +71,11 @@ class event_event(osv.osv):
res = self.name_get(cr, uid, ids, context=context)
return dict(res)
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(event_event, self).create(cr, uid, vals, context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
def copy(self, cr, uid, id, default=None, context=None):
""" Reset the state and the registrations while copying an event
"""
@@ -82,6 +88,7 @@ class event_event(osv.osv):
return super(event_event, self).copy(cr, uid, id, default=default, context=context)
def button_draft(self, cr, uid, ids, context=None):
+ self.button_draft_send_note(cr, uid, ids, context=context)
return self.write(cr, uid, ids, {'state': 'draft'}, context=context)
def button_cancel(self, cr, uid, ids, context=None):
@@ -91,9 +98,11 @@ class event_event(osv.osv):
if event_reg.state == 'done':
raise osv.except_osv(_('Error!'),_("You have already set a registration for this event as 'Attended'. Please reset it to draft if you want to cancel this event.") )
registration.write(cr, uid, reg_ids, {'state': 'cancel'}, context=context)
+ self.button_cancel_send_note(cr, uid, ids, context=context)
return self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
def button_done(self, cr, uid, ids, context=None):
+ self.button_done_send_note(cr, uid, ids, context=context)
return self.write(cr, uid, ids, {'state': 'done'}, context=context)
def check_registration_limits(self, cr, uid, ids, context=None):
@@ -127,6 +136,7 @@ class event_event(osv.osv):
if isinstance(ids, (int, long)):
ids = [ids]
self.check_registration_limits(cr, uid, ids, context=context)
+ self.button_confirm_send_note(cr, uid, ids, context=context)
return self.confirm_event(cr, uid, ids, context=context)
def _get_register(self, cr, uid, ids, fields, args, context=None):
@@ -256,13 +266,50 @@ class event_event(osv.osv):
'register_max': type_info.default_registration_max,
}
return {'value': dic}
+
+ # ----------------------------------------
+ # OpenChatter methods and notifications
+ # ----------------------------------------
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.state == 'draft' and obj.user_id:
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ message = _("Event has been
created.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
+ def button_cancel_send_note(self, cr, uid, ids, context=None):
+ message = _("Event has been
cancelled.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
+ def button_draft_send_note(self, cr, uid, ids, context=None):
+ message = _("Event has been set to
draft.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
+ def button_done_send_note(self, cr, uid, ids, context=None):
+ message = _("Event has been
done.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
+ def button_confirm_send_note(self, cr, uid, ids, context=None):
+ message = _("Event has been
confirmed.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
event_event()
class event_registration(osv.osv):
"""Event Registration"""
_name= 'event.registration'
_description = __doc__
- _inherit = ['mail.thread','res.partner']
+ _inherit = ['ir.needaction_mixin','mail.thread','res.partner']
_columns = {
'id': fields.integer('ID'),
'origin': fields.char('Source', size=124,readonly=True,help="Name of the sale order which create the registration"),
@@ -293,12 +340,17 @@ class event_registration(osv.osv):
def do_draft(self, cr, uid, ids, context=None):
+ self.do_draft_send_note(cr, uid, ids, context=context)
return self.write(cr, uid, ids, {'state': 'draft'}, context=context)
def confirm_registration(self, cr, uid, ids, context=None):
self.message_append(cr, uid, ids,_('State set to open'),body_text= _('Open'))
return self.write(cr, uid, ids, {'state': 'open'}, context=context)
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(event_registration, self).create(cr, uid, vals, context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
def registration_open(self, cr, uid, ids, context=None):
""" Open Registration
@@ -395,6 +447,27 @@ class event_registration(osv.osv):
data.update(d['value'])
return {'value': data}
+ # ----------------------------------------
+ # OpenChatter methods and notifications
+ # ----------------------------------------
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.state == 'draft' and obj.user_id:
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ message = _("Registration has been
created.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
+ def do_draft_send_note(self, cr, uid, ids, context=None):
+ message = _("Registration has been set as
draft.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
event_registration()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index 6c4fada6621..bfa3b496aed 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -130,7 +130,10 @@
-
+
+
+
+
@@ -153,10 +156,6 @@
-
-
-
-
@@ -346,10 +345,6 @@
-
-
-
-
@@ -414,7 +409,10 @@
-
+
+
+
+
diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml
index d82f89930ef..edc6f0fd243 100644
--- a/addons/hr_expense/hr_expense_view.xml
+++ b/addons/hr_expense/hr_expense_view.xml
@@ -35,8 +35,6 @@
-
-
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index a9359d8ecf5..bbcec416aff 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -103,7 +103,7 @@
-
+
@@ -153,7 +153,7 @@
-
+
@@ -177,8 +177,6 @@
-
-
@@ -234,9 +232,6 @@
-
-
-
@@ -262,8 +257,6 @@
-
-
diff --git a/addons/hr_payroll_account/i18n/lv.po b/addons/hr_payroll_account/i18n/lv.po
new file mode 100644
index 00000000000..dd9e84c71a1
--- /dev/null
+++ b/addons/hr_payroll_account/i18n/lv.po
@@ -0,0 +1,140 @@
+# Latvian translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR
, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-06-01 07:35+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Latvian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
+
+#. module: hr_payroll_account
+#: field:hr.payslip,move_id:0
+msgid "Accounting Entry"
+msgstr ""
+
+#. module: hr_payroll_account
+#: field:hr.salary.rule,account_tax_id:0
+msgid "Tax Code"
+msgstr ""
+
+#. module: hr_payroll_account
+#: field:hr.payslip,journal_id:0
+#: field:hr.payslip.run,journal_id:0
+msgid "Expense Journal"
+msgstr ""
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:157
+#: code:addons/hr_payroll_account/hr_payroll_account.py:173
+#, python-format
+msgid "Adjustment Entry"
+msgstr ""
+
+#. module: hr_payroll_account
+#: field:hr.contract,analytic_account_id:0
+#: field:hr.salary.rule,analytic_account_id:0
+msgid "Analytic Account"
+msgstr ""
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_salary_rule
+msgid "hr.salary.rule"
+msgstr ""
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payslip_run
+msgid "Payslip Batches"
+msgstr ""
+
+#. module: hr_payroll_account
+#: field:hr.contract,journal_id:0
+msgid "Salary Journal"
+msgstr ""
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payslip
+msgid "Pay Slip"
+msgstr "Algas Lapa"
+
+#. module: hr_payroll_account
+#: constraint:hr.payslip:0
+msgid "Payslip 'Date From' must be before 'Date To'."
+msgstr ""
+
+#. module: hr_payroll_account
+#: help:hr.payslip,period_id:0
+msgid "Keep empty to use the period of the validation(Payslip) date."
+msgstr ""
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:171
+#, python-format
+msgid ""
+"The Expense Journal \"%s\" has not properly configured the Debit Account!"
+msgstr ""
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:155
+#, python-format
+msgid ""
+"The Expense Journal \"%s\" has not properly configured the Credit Account!"
+msgstr ""
+
+#. module: hr_payroll_account
+#: field:hr.salary.rule,account_debit:0
+msgid "Debit Account"
+msgstr ""
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:102
+#, python-format
+msgid "Payslip of %s"
+msgstr ""
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_contract
+msgid "Contract"
+msgstr ""
+
+#. module: hr_payroll_account
+#: constraint:hr.contract:0
+msgid "Error! contract start-date must be lower then contract end-date."
+msgstr ""
+
+#. module: hr_payroll_account
+#: field:hr.payslip,period_id:0
+msgid "Force Period"
+msgstr ""
+
+#. module: hr_payroll_account
+#: field:hr.salary.rule,account_credit:0
+msgid "Credit Account"
+msgstr ""
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payslip_employees
+msgid "Generate payslips for all selected employees"
+msgstr ""
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:155
+#: code:addons/hr_payroll_account/hr_payroll_account.py:171
+#, python-format
+msgid "Configuration Error!"
+msgstr ""
+
+#. module: hr_payroll_account
+#: view:hr.contract:0
+#: view:hr.salary.rule:0
+msgid "Accounting"
+msgstr ""
diff --git a/addons/hr_recruitment/__openerp__.py b/addons/hr_recruitment/__openerp__.py
index 4a29befbfaf..b83a482e1c1 100644
--- a/addons/hr_recruitment/__openerp__.py
+++ b/addons/hr_recruitment/__openerp__.py
@@ -37,7 +37,14 @@ system to store and search in your CV base.
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',
'images': ['images/hr_recruitment_analysis.jpeg','images/hr_recruitment_applicants.jpeg'],
- 'depends': ['decimal_precision', 'hr', 'survey', 'crm', 'fetchmail'],
+ 'depends': [
+ 'base_status',
+ 'decimal_precision',
+ 'hr',
+ 'survey',
+ 'crm',
+ 'fetchmail',
+ ],
'update_xml': [
'wizard/hr_recruitment_phonecall_view.xml',
'wizard/hr_recruitment_employee_hired.xml',
diff --git a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml
index 8af4b0f8553..e9054416eea 100644
--- a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml
+++ b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py
index 505509058e1..73cec8fccf2 100644
--- a/addons/hr_recruitment/hr_recruitment.py
+++ b/addons/hr_recruitment/hr_recruitment.py
@@ -19,6 +19,7 @@
#
##############################################################################
+from base_status.base_stage import base_stage
import time
from datetime import datetime, timedelta
@@ -57,8 +58,6 @@ class hr_recruitment_source(osv.osv):
_columns = {
'name': fields.char('Source Name', size=64, required=True, translate=True),
}
-hr_recruitment_source()
-
class hr_recruitment_stage(osv.osv):
""" Stage of HR Recruitment """
@@ -69,12 +68,15 @@ class hr_recruitment_stage(osv.osv):
'name': fields.char('Name', size=64, required=True, translate=True),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of stages."),
'department_id':fields.many2one('hr.department', 'Specific to a Department', help="Stages of the recruitment process may be different per department. If this stage is common to all departments, keep tempy this field."),
- 'requirements': fields.text('Requirements')
+ 'state': fields.selection(AVAILABLE_STATES, 'State', required=True, help="The related state for the stage. The state of your document will automatically change regarding the selected stage. Example, a stage is related to the state 'Close', when your document reach this stage, it will be automatically closed."),
+ 'fold': fields.boolean('Hide in views if empty', help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."),
+ 'requirements': fields.text('Requirements'),
}
_defaults = {
'sequence': 1,
+ 'state': 'draft',
+ 'fold': False,
}
-hr_recruitment_stage()
class hr_recruitment_degree(osv.osv):
""" Degree of HR Recruitment """
@@ -90,14 +92,60 @@ class hr_recruitment_degree(osv.osv):
_sql_constraints = [
('name_uniq', 'unique (name)', 'The name of the Degree of Recruitment must be unique!')
]
-hr_recruitment_degree()
-class hr_applicant(crm.crm_case, osv.osv):
+class hr_applicant(base_stage, osv.Model):
_name = "hr.applicant"
_description = "Applicant"
_order = "id desc"
_inherit = ['ir.needaction_mixin', 'mail.thread']
+ def _get_default_department_id(self, cr, uid, context=None):
+ """ Gives default department by checking if present in the context """
+ return (self._resolve_department_id_from_context(cr, uid, context=context) or False)
+
+ def _get_default_stage_id(self, cr, uid, context=None):
+ """ Gives default stage_id """
+ department_id = self._get_default_department_id(cr, uid, context=context)
+ return self.stage_find(cr, uid, [], department_id, [('state', '=', 'draft')], context=context)
+
+ def _resolve_department_id_from_context(self, cr, uid, context=None):
+ """ Returns ID of department based on the value of 'default_department_id'
+ context key, or None if it cannot be resolved to a single
+ department.
+ """
+ if context is None:
+ context = {}
+ if type(context.get('default_department_id')) in (int, long):
+ return context.get('default_department_id')
+ if isinstance(context.get('default_department_id'), basestring):
+ department_name = context['default_department_id']
+ department_ids = self.pool.get('hr.department').name_search(cr, uid, name=department_name, context=context)
+ if len(department_ids) == 1:
+ return int(department_ids[0][0])
+ return None
+
+ def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
+ access_rights_uid = access_rights_uid or uid
+ stage_obj = self.pool.get('hr.recruitment.stage')
+ order = stage_obj._order
+ # lame hack to allow reverting search, should just work in the trivial case
+ if read_group_order == 'stage_id desc':
+ order = "%s desc" % order
+ # retrieve section_id from the context and write the domain
+ # - ('id', 'in', 'ids'): add columns that should be present
+ # - OR ('department_id', '=', False), ('fold', '=', False): add default columns that are not folded
+ # - OR ('department_id', 'in', department_id), ('fold', '=', False) if department_id: add department columns that are not folded
+ department_id = self._resolve_department_id_from_context(cr, uid, context=context)
+ search_domain = []
+ if department_id:
+ search_domain += ['|', '&', ('department_id', '=', department_id), ('fold', '=', False)]
+ search_domain += ['|', ('id', 'in', ids), '&', ('department_id', '=', False), ('fold', '=', False)]
+ stage_ids = stage_obj._search(cr, uid, search_domain, order=order, access_rights_uid=access_rights_uid, context=context)
+ result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
+ # restore order of the search
+ result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
+ return result
+
def _compute_day(self, cr, uid, ids, fields, args, context=None):
"""
@param cr: the current row, from the database cursor,
@@ -134,7 +182,6 @@ class hr_applicant(crm.crm_case, osv.osv):
_columns = {
'name': fields.char('Name', size=128, required=True),
- 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the case without removing it."),
'description': fields.text('Description'),
'email_from': fields.char('Email', size=128, help="These people will receive email."),
@@ -143,12 +190,15 @@ class hr_applicant(crm.crm_case, osv.osv):
'partner_id': fields.many2one('res.partner', 'Partner'),
'create_date': fields.datetime('Creation Date', readonly=True, select=True),
'write_date': fields.datetime('Update Date', readonly=True),
- 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage'),
- 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True,
- help='The state is set to \'Draft\', when a case is created.\
- \nIf the case is in progress the state is set to \'Open\'.\
- \nWhen the case is over, the state is set to \'Done\'.\
- \nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
+ 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage',
+ domain="['|', ('department_id', '=', department_id), ('department_id', '=', False)]"),
+ 'state': fields.related('stage_id', 'state', type="selection", store=True,
+ selection=AVAILABLE_STATES, string="State", readonly=True,
+ help='The state is set to \'Draft\', when a case is created.\
+ If the case is in progress the state is set to \'Open\'.\
+ When the case is over, the state is set to \'Done\'.\
+ If the case needs to be reviewed then the state is \
+ set to \'Pending\'.'),
'company_id': fields.many2one('res.company', 'Company'),
'user_id': fields.many2one('res.users', 'Responsible'),
# Applicant Columns
@@ -169,7 +219,6 @@ class hr_applicant(crm.crm_case, osv.osv):
'partner_mobile': fields.char('Mobile', size=32),
'type_id': fields.many2one('hr.recruitment.degree', 'Degree'),
'department_id': fields.many2one('hr.department', 'Department'),
- 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True),
'survey': fields.related('job_id', 'survey_id', type='many2one', relation='survey', string='Survey'),
'response': fields.integer("Response"),
'reference': fields.char('Refered By', size=128),
@@ -185,33 +234,19 @@ class hr_applicant(crm.crm_case, osv.osv):
_defaults = {
'active': lambda *a: 1,
- 'user_id': lambda self, cr, uid, context: uid,
- 'email_from': crm.crm_case. _get_default_email,
- 'state': lambda *a: 'draft',
+ 'user_id': lambda s, cr, uid, c: uid,
+ 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c),
+ 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),
+ 'department_id': lambda s, cr, uid, c: s._get_default_department_id(cr, uid, c),
'priority': lambda *a: '',
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
'color': 0,
}
- def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
- access_rights_uid = access_rights_uid or uid
- stage_obj = self.pool.get('hr.recruitment.stage')
- order = stage_obj._order
- if read_group_order == 'stage_id desc':
- # lame hack to allow reverting search, should just work in the trivial case
- order = "%s desc" % order
- stage_ids = stage_obj._search(cr, uid, ['|',('id','in',ids),('department_id','=',False)], order=order,
- access_rights_uid=access_rights_uid, context=context)
- result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
- # restore order of the search
- result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
- return result
-
_group_by_full = {
'stage_id': _read_group_stage_ids
}
-
def onchange_job(self,cr, uid, ids, job, context=None):
result = {}
@@ -229,47 +264,33 @@ class hr_applicant(crm.crm_case, osv.osv):
stage_id = stage_ids and stage_ids[0] or False
return {'value': {'stage_id': stage_id}}
- def stage_previous(self, cr, uid, ids, context=None):
- """This function computes previous stage for case from its current stage
- using available stage for that case type
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case IDs
- @param context: A standard dictionary for contextual values"""
- stage_obj = self.pool.get('hr.recruitment.stage')
- for case in self.browse(cr, uid, ids, context=context):
- department = (case.department_id.id or False)
- st = case.stage_id.id or False
- stage_ids = stage_obj.search(cr, uid, ['|',('department_id','=',department),('department_id','=',False)], context=context)
- if st and stage_ids.index(st):
- self.write(cr, uid, [case.id], {'stage_id': stage_ids[stage_ids.index(st)-1]}, context=context)
- else:
- self.write(cr, uid, [case.id], {'stage_id': False}, context=context)
- return True
-
- def stage_next(self, cr, uid, ids, context=None):
- """This function computes next stage for case from its current stage
- using available stage for that case type
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case IDs
- @param context: A standard dictionary for contextual values"""
- stage_obj = self.pool.get('hr.recruitment.stage')
- for case in self.browse(cr, uid, ids, context=context):
- department = (case.department_id.id or False)
- st = case.stage_id.id or False
- stage_ids = stage_obj.search(cr, uid, ['|',('department_id','=',department),('department_id','=',False)], context=context)
- val = False
- if st and len(stage_ids) != stage_ids.index(st)+1:
- val = stage_ids[stage_ids.index(st)+1]
- elif (not st) and stage_ids:
- val = stage_ids[0]
- else:
- val = False
- self.write(cr, uid, [case.id], {'stage_id': val}, context=context)
- return True
+ def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
+ """ Override of the base.stage method
+ Parameter of the stage search taken from the lead:
+ - department_id: if set, stages must belong to this section or
+ be a default case
+ """
+ if isinstance(cases, (int, long)):
+ cases = self.browse(cr, uid, cases, context=context)
+ # collect all section_ids
+ department_ids = []
+ if section_id:
+ department_ids.append(section_id)
+ for case in cases:
+ if case.department_id:
+ department_ids.append(case.department_id.id)
+ # OR all section_ids and OR with case_default
+ search_domain = []
+ if department_ids:
+ search_domain += ['|', ('department_id', 'in', department_ids)]
+ search_domain.append(('department_id', '=', False))
+ # AND with the domain in parameter
+ search_domain += list(domain)
+ # perform search, return the first found
+ stage_ids = self.pool.get('hr.recruitment.stage').search(cr, uid, search_domain, order=order, context=context)
+ if stage_ids:
+ return stage_ids[0]
+ return False
def action_makeMeeting(self, cr, uid, ids, context=None):
"""
@@ -474,12 +495,6 @@ class hr_applicant(crm.crm_case, osv.osv):
"""
return self.set_priority(cr, uid, ids, '3')
- def write(self, cr, uid, ids, vals, context=None):
- if 'stage_id' in vals and vals['stage_id']:
- stage = self.pool.get('hr.recruitment.stage').browse(cr, uid, vals['stage_id'], context=context)
- self.message_append_note(cr, uid, ids, body=_("Stage changed to %s.") % stage.name, context=context)
- return super(hr_applicant,self).write(cr, uid, ids, vals, context=context)
-
# -------------------------------------------------------
# OpenChatter methods and notifications
# -------------------------------------------------------
@@ -497,7 +512,13 @@ class hr_applicant(crm.crm_case, osv.osv):
if obj.state == 'draft' and obj.user_id:
result[obj.id] = [obj.user_id.id]
return result
-
+
+ def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
+ """ Override of the (void) default notification method. """
+ if not stage_id: return True
+ stage_name = self.pool.get('hr.recruitment.stage').name_get(cr, uid, [stage_id], context=context)[0][1]
+ return self.message_append_note(cr, uid, ids, body= _("Stage changed to %s.") % (stage_name), context=context)
+
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
return 'Applicant'
@@ -529,7 +550,6 @@ class hr_applicant(crm.crm_case, osv.osv):
message = _("Applicant has been created.")
return self.message_append_note(cr, uid, ids, body=message, context=context)
-hr_applicant()
class hr_job(osv.osv):
_inherit = "hr.job"
@@ -537,6 +557,6 @@ class hr_job(osv.osv):
_columns = {
'survey_id': fields.many2one('survey', 'Interview Form', help="Choose an interview form for this job position and you will be able to print/answer this interview from all applicants who apply for this job"),
}
-hr_job()
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_recruitment/hr_recruitment_data.xml b/addons/hr_recruitment/hr_recruitment_data.xml
index d6cb5952d38..8cbebda5f1f 100644
--- a/addons/hr_recruitment/hr_recruitment_data.xml
+++ b/addons/hr_recruitment/hr_recruitment_data.xml
@@ -1,7 +1,9 @@
+
+
@@ -37,30 +39,36 @@
Doctoral Degree
4
-
Initial Qualification
+ draft
1
First Interview
+ open
2
Second Interview
+ open
3
Contract Proposed
+ pending
4
Contract Signed
+ done
5
Refused
+ cancel
6
+
Job Survey
diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml
index 5c8b560b380..93a9d01107d 100644
--- a/addons/hr_recruitment/hr_recruitment_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_view.xml
@@ -50,8 +50,6 @@
-
-
@@ -62,9 +60,7 @@
-
-
-
+
@@ -76,14 +72,24 @@
@@ -241,7 +250,7 @@
-
+
@@ -360,6 +369,7 @@
+
@@ -377,6 +387,7 @@
+
diff --git a/addons/hr_recruitment/test/recruitment_process.yml b/addons/hr_recruitment/test/recruitment_process.yml
index e856747ed99..38b84fccab2 100644
--- a/addons/hr_recruitment/test/recruitment_process.yml
+++ b/addons/hr_recruitment/test/recruitment_process.yml
@@ -1,7 +1,7 @@
-
In Order to test process of Recruitment,
-
- Applicant interested in job position. so He send resume by email.
+ An applicant is interested in the job position. So he sends a resume by email.
-
!python {model: mail.thread}: |
import addons
@@ -9,27 +9,42 @@
request_message = request_file.read()
self.message_process(cr, uid, 'hr.applicant', request_message)
-
- After getting the mail, I check details of new applicant.
+ After getting the mail, I check the details of the new applicant.
-
!python {model: hr.applicant}: |
applicant_ids = self.search(cr, uid, [('email_from','=', 'Mr. Richard Anderson ')])
assert applicant_ids, "Applicant is not created after getting the mail"
applicant = self.browse(cr, uid, applicant_ids[0], context=context)
resume_ids = self.pool.get('ir.attachment').search(cr, uid, [('datas_fname','=','resume.doc'),('res_model','=',self._name),('res_id','=',applicant.id)])
- assert applicant.name == "Application for the post of Jr.application Programmer.", "Subject does not match"
- assert applicant.state == "draft"
- assert len(resume_ids), "Resume does not attached."
+ assert applicant.name == "Application for the post of Jr.application Programmer.", "Applicant name does not match."
+ assert applicant.stage_id.id == ref('hr_recruitment.stage_job1'), "Stage should be 'Initial qualification' and is '%s'." % (applicant.stage_id.name)
+ assert applicant.state == "draft", "Applicant state should be 'draft'."
+ assert len(resume_ids), "Resume is not attached."
-
- I refuse applicant for the Recruitment.
+ I refuse the applicant (hr_case_programmer)
-
!python {model: hr.applicant}: |
- self.case_close(cr, uid, [ref("hr_case_programmer")])
+ self.case_cancel(cr, uid, [ref("hr_case_programmer")])
-
- I open applicant for the Recruitment.
+ I check the details of the refused applicant.
+-
+ !python {model: hr.applicant}: |
+ applicant = self.browse(cr, uid, ref("hr_case_programmer"), context=context)
+ assert applicant.stage_id.id == ref('hr_recruitment.stage_job6'), "Stage should be 'Refused' and is %s." % (applicant.stage_id.name)
+ assert applicant.state == 'cancel', "Applicant is not in 'cancel' state."
+-
+ I reset and re-open the previously refused applicant.
-
!python {model: hr.applicant}: |
self.case_reset(cr, uid, [ref("hr_case_programmer")])
self.case_open(cr, uid, [ref("hr_case_programmer")])
+-
+ I check the details of the re-opened applicant.
+-
+ !python {model: hr.applicant}: |
+ applicant = self.browse(cr, uid, ref("hr_case_programmer"), context=context)
+ assert applicant.stage_id.id == ref('hr_recruitment.stage_job2'), "Stage should be 'First interview' and is '%s'." % (applicant.stage_id.name)
+ assert applicant.state == "open", "Applicant state should be 'open'."
-
I assign the Job position to the applicant
-
@@ -91,7 +106,7 @@
-
I check that applicant is "Hired".
-
- !assert {model: hr.applicant, id: hr_case_programmer}:
+ !assert {model: hr.applicant, id: hr_case_programmer, string: Applicant state is done}:
- state == 'done'
-
I do not give employment to the hired the applicant.
diff --git a/addons/idea/i18n/gu.po b/addons/idea/i18n/gu.po
index 3cd7b9f5054..f2ef969fa3e 100644
--- a/addons/idea/i18n/gu.po
+++ b/addons/idea/i18n/gu.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
"X-Generator: Launchpad (build 15342)\n"
#. module: idea
diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml
index 3d541f8aa8e..eacb0804658 100644
--- a/addons/idea/idea_view.xml
+++ b/addons/idea/idea_view.xml
@@ -267,10 +267,6 @@
-
-
-
-
diff --git a/addons/lunch/lunch_view.xml b/addons/lunch/lunch_view.xml
index adfccfc2041..aeb5eed5034 100644
--- a/addons/lunch/lunch_view.xml
+++ b/addons/lunch/lunch_view.xml
@@ -60,16 +60,6 @@
-
-
@@ -340,7 +330,7 @@
tree
-
+
diff --git a/addons/mail/doc/index.rst.inc b/addons/mail/doc/index.rst.inc
index 4679cd56fdf..822d855d5b4 100644
--- a/addons/mail/doc/index.rst.inc
+++ b/addons/mail/doc/index.rst.inc
@@ -9,3 +9,4 @@ Mail Module documentation topics
mail_thread
mail_openchatter_howto
mail_needaction_howto
+ mail_partner
diff --git a/addons/mail/doc/mail_openchatter_howto.rst b/addons/mail/doc/mail_openchatter_howto.rst
index fe28017be83..7ca52348d99 100644
--- a/addons/mail/doc/mail_openchatter_howto.rst
+++ b/addons/mail/doc/mail_openchatter_howto.rst
@@ -38,7 +38,7 @@ Make your module inheriting from the ``mail.thread`` class.
# inherit from mail.thread allows the use of OpenChatter
_inherit = ['mail.thread']
-Use the thread viewer widget inside your form view by using the ThreadView widget on the message_ids_social field inherited from mail.thread.
+Use the thread viewer widget inside your form view by using the ThreadView widget on the message_ids field inherited from mail.thread.
::
@@ -50,7 +50,7 @@ Use the thread viewer widget inside your form view by using the ThreadView widge
diff --git a/addons/mail/doc/mail_partner.rst b/addons/mail/doc/mail_partner.rst
new file mode 100644
index 00000000000..a99246395d7
--- /dev/null
+++ b/addons/mail/doc/mail_partner.rst
@@ -0,0 +1,10 @@
+What is shown
+==============
+ - for every module which are related to partner show apporopriate message in the partner view like opportunities, sale orders and invoices.
+
+
+How it is done
+===============
+ - _inherit = 'mail.thread'
+
+ - Override def message_load_ids(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[], context=None) search by the partner
diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml
index 7258db2d9dc..67b2efc84a0 100644
--- a/addons/mail/mail_group_view.xml
+++ b/addons/mail/mail_group_view.xml
@@ -69,7 +69,8 @@
-
+
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index 8cd8ef415c3..b1b6c68e4cc 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -61,29 +61,29 @@ class mail_thread(osv.osv):
'''
_name = 'mail.thread'
_description = 'Email Thread'
-
+
def _get_message_ids(self, cr, uid, ids, name, arg, context=None):
res = {}
for id in ids:
res[id] = self.message_load_ids(cr, uid, [id], context=context)
return res
-
- # OpenChatter: message_ids_social is a dummy field that should not be used
+
+ # OpenChatter: message_ids is a dummy field that should not be used
_columns = {
- 'message_ids_social': fields.function(_get_message_ids, method=True,
+ 'message_ids': fields.function(_get_message_ids, method=True,
type='one2many', obj='mail.message', string='Temp messages', _fields_id = 'res_id'),
}
#------------------------------------------------------
# Automatic subscription when creating/reading
#------------------------------------------------------
-
+
def create(self, cr, uid, vals, context=None):
"""Automatically subscribe the creator"""
thread_id = super(mail_thread, self).create(cr, uid, vals, context=context);
self.message_subscribe(cr, uid, [thread_id], [uid], context=context)
return thread_id;
-
+
def write(self, cr, uid, ids, vals, context=None):
"""Automatically subscribe the writer"""
if isinstance(ids, (int, long)):
@@ -92,7 +92,7 @@ class mail_thread(osv.osv):
if write_res:
self.message_subscribe(cr, uid, ids, [uid], context=context)
return write_res;
-
+
def unlink(self, cr, uid, ids, context=None):
"""Override unlink, to automatically delete
- subscriptions
@@ -111,13 +111,13 @@ class mail_thread(osv.osv):
# delete notifications
msg_to_del_ids = msg_obj.search(cr, uid, [('model', '=', self._name), ('res_id', 'in', ids)], context=context)
msg_obj.unlink(cr, uid, msg_to_del_ids, context=context)
-
+
return super(mail_thread, self).unlink(cr, uid, ids, context=context)
-
+
#------------------------------------------------------
# Generic message api
#------------------------------------------------------
-
+
def message_create(self, cr, uid, thread_id, vals, context=None):
"""OpenSocial: wrapper of mail.message create method
- creates the mail.message
@@ -131,15 +131,15 @@ class mail_thread(osv.osv):
notification_obj = self.pool.get('mail.notification')
res_users_obj = self.pool.get('res.users')
body = vals.get('body_html', '') if vals.get('subtype', 'plain') == 'html' else vals.get('body_text', '')
-
+
# automatically subscribe the writer of the message
if vals['user_id']:
self.message_subscribe(cr, uid, [thread_id], [vals['user_id']], context=context)
-
+
# get users that will get a notification pushed
user_to_push_ids = self.message_create_get_notification_user_ids(cr, uid, [thread_id], vals, context=context)
user_to_push_from_parse_ids = self.message_parse_users(cr, uid, [thread_id], body, context=context)
-
+
# set email_from and email_to for comments and notifications
if vals.get('type', False) and vals['type'] == 'comment' or vals['type'] == 'notification':
current_user = res_users_obj.browse(cr, uid, [uid], context=context)[0]
@@ -159,24 +159,24 @@ class mail_thread(osv.osv):
if email_to:
vals['email_to'] = email_to
vals['state'] = 'outgoing'
-
+
# create message
msg_id = message_obj.create(cr, uid, vals, context=context)
-
+
# special: if install mode, do not push demo data
if context.get('install_mode', False):
return True
-
+
# push to users
for id in user_to_push_ids:
notification_obj.create(cr, uid, {'user_id': id, 'message_id': msg_id}, context=context)
-
+
return msg_id
-
+
def message_create_get_notification_user_ids(self, cr, uid, thread_ids, new_msg_vals, context=None):
if context is None:
context = {}
-
+
notif_user_ids = []
body = new_msg_vals.get('body_html', '') if new_msg_vals.get('subtype', 'plain') == 'html' else new_msg_vals.get('body_text', '')
for thread_id in thread_ids:
@@ -193,7 +193,7 @@ class mail_thread(osv.osv):
parent_notif_ids = notif_obj.search(cr, uid, [('message_id', '=', new_msg_vals.get('parent_id'))], context=context)
parent_notifs = notif_obj.read(cr, uid, parent_notif_ids, context=context)
notif_user_ids += [parent_notif['user_id'][0] for parent_notif in parent_notifs]
-
+
# remove duplicate entries
notif_user_ids = list(set(notif_user_ids))
return notif_user_ids
@@ -214,7 +214,7 @@ class mail_thread(osv.osv):
for model_name in self.pool.obj_list():
model = self.pool.get(model_name)
if 'mail.thread' in getattr(model, '_inherit', []):
- ret_dict[model_name] = model._description
+ ret_dict[model_name] = model._description
return ret_dict
def message_append(self, cr, uid, threads, subject, body_text=None, body_html=None,
@@ -259,7 +259,7 @@ class mail_thread(osv.osv):
to determine the model of the thread to
update (instead of the current model).
"""
- if context is None:
+ if context is None:
context = {}
if attachments is None:
attachments = {}
@@ -329,7 +329,7 @@ class mail_thread(osv.osv):
'headers': headers,
'reply_to': reply_to,
'original': original, })
-
+
new_msg_ids.append(self.message_create(cr, uid, thread.id, data, context=context))
return new_msg_ids
@@ -390,7 +390,7 @@ class mail_thread(osv.osv):
if (cur_iter > max_iter):
_logger.warning("Possible infinite loop in _message_add_ancestor_ids. Note that this algorithm is intended to check for cycle in message graph.")
return child_ids
-
+
def message_load_ids(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[], context=None):
""" OpenChatter feature: return thread messages ids. It searches in
mail.messages where res_id = ids, (res_)model = current model.
@@ -408,13 +408,15 @@ class mail_thread(osv.osv):
limit=limit, offset=offset, context=context)
if (ascent): msg_ids = self._message_add_ancestor_ids(cr, uid, ids, msg_ids, root_ids, context=context)
return msg_ids
-
+
def message_load(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[], context=None):
""" OpenChatter feature: return thread messages
"""
msg_ids = self.message_load_ids(cr, uid, ids, limit, offset, domain, ascent, root_ids, context=context)
- return self.pool.get('mail.message').read(cr, uid, msg_ids, context=context)
-
+ msgs = self.pool.get('mail.message').read(cr, uid, msg_ids, context=context)
+ msgs = sorted(msgs, key=lambda d: (-d['id']))
+ return msgs
+
def get_pushed_messages(self, cr, uid, ids, limit=100, offset=0, msg_search_domain=[], ascent=False, root_ids=[], context=None):
""" OpenChatter: wall: get messages to display (=pushed notifications)
:param domain: domain to add to the search; especially child_of
@@ -442,7 +444,7 @@ class mail_thread(osv.osv):
if (ascent): msg_ids = self._message_add_ancestor_ids(cr, uid, ids, msg_ids, root_ids, context=context)
msgs = msg_obj.read(cr, uid, msg_ids, context=context)
return msgs
-
+
#------------------------------------------------------
# Email specific
#------------------------------------------------------
@@ -534,7 +536,7 @@ class mail_thread(osv.osv):
def message_new(self, cr, uid, msg_dict, custom_values=None, context=None):
"""Called by ``message_process`` when a new message is received
- for a given thread model, if the message did not belong to
+ for a given thread model, if the message did not belong to
an existing thread.
The default behavior is to create a new record of the corresponding
model (based on some very basic info extracted from the message),
@@ -660,7 +662,7 @@ class mail_thread(osv.osv):
The keys used in the returned dict are meant to map
to usual names for relationships towards a partner
and one of its addresses.
-
+
:param email: email address for which a partner
should be searched for.
:rtype: dict
@@ -685,7 +687,7 @@ class mail_thread(osv.osv):
#------------------------------------------------------
# Note specific
#------------------------------------------------------
-
+
def message_broadcast(self, cr, uid, ids, subject=None, body=None, parent_id=False, type='notification', subtype='html', context=None):
if context is None:
context = {}
@@ -710,11 +712,11 @@ class mail_thread(osv.osv):
for msg_id in msg_ids:
notification_obj.create(cr, uid, {'user_id': user.id, 'message_id': msg_id}, context=context)
return True
-
+
def log(self, cr, uid, id, message, secondary=False, context=None):
_logger.warning("log() is deprecated. Please use OpenChatter notification system instead of the res.log mechanism.")
self.message_append_note(cr, uid, [id], 'res.log', message, context=context)
-
+
def message_append_note(self, cr, uid, ids, subject=None, body=None, parent_id=False, type='notification', subtype='html', context=None):
if subject is None:
if type == 'notification':
@@ -730,29 +732,29 @@ class mail_thread(osv.osv):
body_html = body
body_text = body
return self.message_append(cr, uid, ids, subject, body_html=body_html, body_text=body_text, parent_id=parent_id, type=type, subtype=subtype, context=context)
-
+
#------------------------------------------------------
# Subscription mechanism
#------------------------------------------------------
-
+
def message_get_subscribers_ids(self, cr, uid, ids, context=None):
subscr_obj = self.pool.get('mail.subscription')
subscr_ids = subscr_obj.search(cr, uid, ['&', ('res_model', '=', self._name), ('res_id', 'in', ids)], context=context)
subs = subscr_obj.read(cr, uid, subscr_ids, context=context)
return [sub['user_id'][0] for sub in subs]
-
+
def message_get_subscribers(self, cr, uid, ids, context=None):
user_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context)
users = self.pool.get('res.users').read(cr, uid, user_ids, fields=['id', 'name', 'avatar'], context=context)
return users
-
+
def message_is_subscriber(self, cr, uid, ids, user_id = None, context=None):
users = self.message_get_subscribers(cr, uid, ids, context=context)
sub_user_id = uid if user_id is None else user_id
if sub_user_id in [user['id'] for user in users]:
return True
return False
-
+
def message_subscribe(self, cr, uid, ids, user_ids = None, context=None):
subscription_obj = self.pool.get('mail.subscription')
to_subscribe_uids = [uid] if user_ids is None else user_ids
@@ -776,7 +778,7 @@ class mail_thread(osv.osv):
#------------------------------------------------------
# Notification API
#------------------------------------------------------
-
+
def message_remove_pushed_notifications(self, cr, uid, ids, msg_ids, remove_childs=True, context=None):
if context is None:
context = {}
diff --git a/addons/mail/res_partner.py b/addons/mail/res_partner.py
index 637922ff75c..922f3e4b6ed 100644
--- a/addons/mail/res_partner.py
+++ b/addons/mail/res_partner.py
@@ -24,11 +24,32 @@ from osv import fields
class res_partner(osv.osv):
""" Inherits partner and adds CRM information in the partner form """
- _inherit = 'res.partner'
+ _name = "res.partner"
+ _inherit = ['res.partner', 'mail.thread']
_columns = {
'emails': fields.one2many('mail.message', 'partner_id', 'Emails', readonly=True, domain=[('email_from','!=',False)]),
}
+ def message_load_ids(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[False], context=None):
+ """ Override of message_load_ids
+ partner discussion page :
+ - messages posted on res.partner, partner_id = partner.id
+ - messages directly sent to partner
+ """
+ msg_obj = self.pool.get('mail.message')
+ msg_ids = []
+ partner_ids=[]
+ for partner in self.browse(cr, uid, ids, context=context):
+ msg_ids += msg_obj.search(cr, uid, [ ('res_id', '=', partner.id), ('model', '=' ,self._name)] + domain,
+ limit=limit, offset=offset, context=context)
+ if self._name=='res.partner':
+ partner_ids=msg_obj.search(cr, uid, [ ('partner_id', 'in', ids)] + domain,
+ limit=limit, offset=offset, context=context)
+ if partner_ids :
+ msg_ids+= partner_ids
+ if (ascent): msg_ids = self._message_add_ancestor_ids(cr, uid, ids, msg_ids, root_ids, context=context)
+ return msg_ids
+
res_partner()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/mail/res_partner_view.xml b/addons/mail/res_partner_view.xml
index 7fc001e4fd4..eb97b725fff 100644
--- a/addons/mail/res_partner_view.xml
+++ b/addons/mail/res_partner_view.xml
@@ -23,6 +23,10 @@
+
+
+
diff --git a/addons/mail/res_users_view.xml b/addons/mail/res_users_view.xml
index 0411bd418dc..7df155b13c0 100644
--- a/addons/mail/res_users_view.xml
+++ b/addons/mail/res_users_view.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js
index bed8faea5e0..1ec6fe32eb5 100644
--- a/addons/mail/static/src/js/mail.js
+++ b/addons/mail/static/src/js/mail.js
@@ -476,10 +476,12 @@ openerp.mail = function(session) {
// QWeb template to use when rendering the object
template: 'RecordThread',
- init: function() {
+ init: function() {
this._super.apply(this, arguments);
this.see_subscribers = true;
this.thread = null;
+ this.params = this.get_definition_options();
+ this.params.thread_level = this.params.thread_level || 0;
// datasets
this.ds = new session.web.DataSet(this, this.view.model);
this.ds_users = new session.web.DataSet(this, 'res.users');
@@ -520,12 +522,8 @@ openerp.mail = function(session) {
// create and render Thread widget
this.$element.find('div.oe_mail_recthread_left').empty();
if (this.thread) this.thread.destroy();
- // hack: for groups and users
- if (this.view.model == 'mail.group') thread_level = 1;
- if (this.view.model == 'res.users') thread_level = 1;
- else thread_level = 0;
this.thread = new mail.Thread(this, {'res_model': this.view.model, 'res_id': this.view.datarecord.id, 'uid': this.session.uid,
- 'thread_level': thread_level, 'show_post_comment': true, 'limit': 15});
+ 'thread_level': this.params.thread_level, 'show_post_comment': true, 'limit': 15});
var thread_done = this.thread.appendTo(this.$element.find('div.oe_mail_recthread_left'));
return fetch_sub_done && thread_done;
},
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index 4f401b386ef..a8edeb81ca4 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -189,7 +189,6 @@
-
diff --git a/addons/mrp/i18n/ja.po b/addons/mrp/i18n/ja.po
index 2943ce294da..b4316fe0196 100644
--- a/addons/mrp/i18n/ja.po
+++ b/addons/mrp/i18n/ja.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:49+0000\n"
-"PO-Revision-Date: 2012-05-31 06:17+0000\n"
+"PO-Revision-Date: 2012-06-02 04:49+0000\n"
"Last-Translator: Akira Hiyama \n"
"Language-Team: Japanese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-06-01 05:32+0000\n"
+"X-Launchpad-Export-Date: 2012-06-03 04:47+0000\n"
"X-Generator: Launchpad (build 15342)\n"
#. module: mrp
@@ -387,9 +387,9 @@ msgid ""
"sales person creates a sales order, he can relate it to several properties "
"and OpenERP will automatically select the BoM to use according the needs."
msgstr ""
-"同じ製品で異なった構築方法を持つ場合、OpenERPのプロパティは製品製造のための正しい部品表を選択するのに使用されます。それぞれの部品表には幾つかのプロ"
-"パティを割り当てることができます。販売員が販売オーダーを作成した時、彼はそれを幾つかのプロパティに関連付けることができ、そして、OpenERPは要求によっ"
-"て使用する部品表を自動的に選択します。"
+"同じ製品で異なった構築方法を持つ場合、OpenERPの属性は製品製造のための正しい部品表を選択するのに使用されます。それぞれの部品表には幾つかの属性を割り"
+"当てることができます。販売員が販売オーダーを作成した時、彼はそれを幾つかの属性に関連付けることができ、そして、OpenERPは要求によって使用する部品表を"
+"自動的に選択します。"
#. module: mrp
#: help:mrp.production,picking_id:0
@@ -460,7 +460,7 @@ msgstr "会社名は固有でなければいけません。"
msgid ""
"Define specific property groups that can be assigned to the properties of "
"your bill of materials."
-msgstr "部品表のプロパティに割り当てることができる特定のプロパティグループを定義して下さい。"
+msgstr "部品表の属性に割り当てることができる特定の属性グループを定義して下さい。"
#. module: mrp
#: help:mrp.workcenter,costs_cycle:0
@@ -932,7 +932,7 @@ msgstr "時間数"
#: view:mrp.property:0
#: view:mrp.property.group:0
msgid "Property Group"
-msgstr "プロパティグループ"
+msgstr "属性グループ"
#. module: mrp
#: view:mrp.production:0
@@ -1601,7 +1601,7 @@ msgstr "承認"
#. module: mrp
#: view:mrp.property.group:0
msgid "Properties categories"
-msgstr "プロパティの分類"
+msgstr "属性の分類"
#. module: mrp
#: help:mrp.production.workcenter.line,sequence:0
@@ -2072,7 +2072,7 @@ msgstr "部品表"
#: view:procurement.order:0
#: field:procurement.order,property_ids:0
msgid "Properties"
-msgstr "プロパティ"
+msgstr "属性"
#. module: mrp
#: view:mrp.routing.workcenter:0
@@ -2120,12 +2120,12 @@ msgstr "作業オーダー"
#. module: mrp
#: view:board.board:0
msgid "Procurements in Exception"
-msgstr "例外の調達"
+msgstr "調達の例外"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_minimumstockprocure0
msgid "'Minimum stock rule' material"
-msgstr "材料の最上在庫ルール"
+msgstr "材料の最小在庫ルール"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_product_price
@@ -2190,7 +2190,7 @@ msgstr "次の生産オーダー"
#: model:ir.actions.act_window,name:mrp.mrp_property_group_action
#: model:ir.ui.menu,name:mrp.menu_mrp_property_group_action
msgid "Property Groups"
-msgstr "プロパティグループ"
+msgstr "属性グループ"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_procurestockableproduct0
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index fb5d07c1754..f856622c8a1 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -658,6 +658,8 @@
icon="terp-accessories-archiver+"
name="%(mrp.action_change_production_qty)d"
string="Change Qty" states="ready,confirmed" />
+
+
@@ -791,7 +793,7 @@
-
+
diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py
index 4086a401f56..363f98e35d1 100644
--- a/addons/mrp/procurement.py
+++ b/addons/mrp/procurement.py
@@ -43,7 +43,7 @@ class procurement_order(osv.osv):
cr.execute('update procurement_order set message=%s where id=%s', (_('No BoM defined for this product !'), procurement.id))
for (id, name) in self.name_get(cr, uid, procurement.id):
message = _("Procurement '%s' has an exception: 'No BoM defined for this product !'") % name
- self.log(cr, uid, id, message)
+ self.message_append_note(cr, uid, [procurement.id], body=message, context=context)
return False
return True
@@ -97,6 +97,7 @@ class procurement_order(osv.osv):
})
res[procurement.id] = produce_id
self.write(cr, uid, [procurement.id], {'state': 'running'})
+ self.running_send_note(cr, uid, ids, context=context)
bom_result = production_obj.action_compute(cr, uid,
[produce_id], properties=[x.id for x in procurement.property_ids])
wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr)
diff --git a/addons/mrp_operations/i18n/ja.po b/addons/mrp_operations/i18n/ja.po
index 02be80e9da7..9a0445ff6c2 100644
--- a/addons/mrp_operations/i18n/ja.po
+++ b/addons/mrp_operations/i18n/ja.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
"X-Generator: Launchpad (build 15342)\n"
#. module: mrp_operations
diff --git a/addons/mrp_operations/mrp_operations_view.xml b/addons/mrp_operations/mrp_operations_view.xml
index 53a14fe52da..73a74baa471 100644
--- a/addons/mrp_operations/mrp_operations_view.xml
+++ b/addons/mrp_operations/mrp_operations_view.xml
@@ -57,10 +57,6 @@
-
-
-
-
@@ -121,7 +117,9 @@
-
+
+
+
diff --git a/addons/mrp_repair/i18n/ja.po b/addons/mrp_repair/i18n/ja.po
index 2b3d8b6b3d0..69cd8c15e8a 100644
--- a/addons/mrp_repair/i18n/ja.po
+++ b/addons/mrp_repair/i18n/ja.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
"X-Generator: Launchpad (build 15342)\n"
#. module: mrp_repair
diff --git a/addons/point_of_sale/i18n/ja.po b/addons/point_of_sale/i18n/ja.po
index 98a5e9cb828..f65e8872a7c 100644
--- a/addons/point_of_sale/i18n/ja.po
+++ b/addons/point_of_sale/i18n/ja.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
-"PO-Revision-Date: 2012-06-01 05:21+0000\n"
+"PO-Revision-Date: 2012-06-01 20:39+0000\n"
"Last-Translator: Akira Hiyama \n"
"Language-Team: Japanese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-06-01 05:32+0000\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
"X-Generator: Launchpad (build 15342)\n"
#. module: point_of_sale
#: field:report.transaction.pos,product_nb:0
msgid "Product Nb."
-msgstr "製品番号"
+msgstr "商品番号"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_today
@@ -50,7 +50,7 @@ msgstr "本日"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.plain_water
msgid "Plain Water"
-msgstr ""
+msgstr "一般の水"
#. module: point_of_sale
#: view:report.cash.register:0
@@ -65,7 +65,7 @@ msgstr "全ての注文を記帳"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.spa_2l_product_template
msgid "Spa Reine 2L"
-msgstr ""
+msgstr "SPA REINE 2L"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_box_out
@@ -104,7 +104,7 @@ msgstr "説明 / 理由"
#: field:report.sales.by.margin.pos,product_name:0
#: field:report.sales.by.margin.pos.month,product_name:0
msgid "Product Name"
-msgstr "製品名"
+msgstr "商品名"
#. module: point_of_sale
#: view:report.cash.register:0
@@ -136,7 +136,7 @@ msgstr "POS分類"
#: model:ir.actions.act_window,name:point_of_sale.action_box_out
#: model:ir.ui.menu,name:point_of_sale.menu_wizard_enter_jrnl2
msgid "Take Money Out"
-msgstr "お金の取り出し"
+msgstr "現金取出"
#. module: point_of_sale
#: report:pos.lines:0
@@ -194,7 +194,7 @@ msgstr "キャッシュレジスタ管理"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_naturel_45g_product_template
msgid "Lays Naturel 45g"
-msgstr ""
+msgstr "Lays ナチュラル 45g"
#. module: point_of_sale
#: view:pos.order:0
@@ -204,7 +204,7 @@ msgstr "会計情報"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_regular_2l_product_template
msgid "Coca-Cola Regular 2L"
-msgstr ""
+msgstr "コカコーラ 2L"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_month
@@ -240,7 +240,7 @@ msgstr "合計価格"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.leffe_brune_33cl_product_template
msgid "Leffe Brune 33cl"
-msgstr ""
+msgstr "Leffe Brune 330ml"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user
@@ -256,7 +256,7 @@ msgstr "飲物"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.stella_50cl_product_template
msgid "Stella Artois 50cl"
-msgstr ""
+msgstr "Stella Artois 500ml"
#. module: point_of_sale
#: view:pos.details:0
@@ -288,7 +288,7 @@ msgstr "割引(%)"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_speciale_product_template
msgid "Dr. Oetker Ristorante Speciale"
-msgstr "ピザレストランスペシャル"
+msgstr "Dr. Oetker レストラン スペシャル"
#. module: point_of_sale
#: view:pos.order.line:0
@@ -298,7 +298,7 @@ msgstr "合計数量"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.fanta_orange_33cl_product_template
msgid "Fanta Orange 33cl"
-msgstr ""
+msgstr "ファンタ オレンジ 330ml"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_user_pos_month
@@ -329,12 +329,12 @@ msgstr "設定エラーです。"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.sparkling_water
msgid "Sparkling Water"
-msgstr ""
+msgstr "スパークリングウォーター"
#. module: point_of_sale
#: view:pos.box.entries:0
msgid "Fill in this form if you put money in the cash register:"
-msgstr "キャッシュレジスタ内にお金を入れる場合はこのフォームに記入して下さい。"
+msgstr "キャッシュレジスタ内にお金を装填する場合はこのフォームに記入して下さい。"
#. module: point_of_sale
#: view:account.bank.statement:0
@@ -349,7 +349,7 @@ msgstr "8月"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.pepsi_max_lemon_33cl_product_template
msgid "Pepsi Max Cool Lemon 33cl"
-msgstr ""
+msgstr "ペプシマックス クールレモン 330ml"
#. module: point_of_sale
#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
@@ -364,7 +364,7 @@ msgstr "POSオーダー行"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.fanta_orange_50cl_product_template
msgid "Fanta Orange 50cl"
-msgstr ""
+msgstr "ファンタ オレンジ 500ml"
#. module: point_of_sale
#: field:pos.category,child_id:0
@@ -381,7 +381,7 @@ msgstr "支払日"
msgid ""
"If you want to sell this product through the point of sale, select the "
"category it belongs to."
-msgstr "POSを通してこの製品を販売したい場合は、それが属する分類を選択して下さい。"
+msgstr "POSを通してこの商品を販売したい場合は、それが属する分類を選択して下さい。"
#. module: point_of_sale
#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
@@ -396,7 +396,7 @@ msgstr "10月"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_light_1l_product_template
msgid "Coca-Cola Light 1L"
-msgstr ""
+msgstr "コカコーラ ライト 1L"
#. module: point_of_sale
#: report:pos.details:0 report:pos.details_summary:0
@@ -406,7 +406,7 @@ msgstr "要約"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.chaudfontaine_50cl_product_template
msgid "Chaudfontaine 50cl"
-msgstr ""
+msgstr "Chaudfontaine 500ml"
#. module: point_of_sale
#: report:pos.invoice:0 report:pos.lines:0 field:pos.order.line,qty:0
@@ -476,7 +476,7 @@ msgstr "レポートの印刷"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_bolognese_product_template
msgid "Dr. Oetker Ristorante Bolognese"
-msgstr ""
+msgstr "Dr. Oetker レストランボロネーゼ"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_box_entries.py:105
@@ -487,14 +487,14 @@ msgstr "その損益勘定が %s にセットされていることをチェッ
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.pizza
msgid "Pizza"
-msgstr ""
+msgstr "ピザ"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_return.py:85
#: code:addons/point_of_sale/wizard/pos_return.py:240
#, python-format
msgid "Add Product"
-msgstr "製品追加"
+msgstr "商品追加"
#. module: point_of_sale
#: field:report.transaction.pos,invoice_am:0
@@ -504,7 +504,7 @@ msgstr "請求書金額"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.coke
msgid "Coke"
-msgstr ""
+msgstr "コーク"
#. module: point_of_sale
#: report:pos.invoice:0
@@ -535,17 +535,17 @@ msgstr "現在月中に作成された現金分析"
#. module: point_of_sale
#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
msgid "Ending Balance"
-msgstr "期末残高"
+msgstr "終了残高"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.pepsi_max_50cl_product_template
msgid "Pepsi Max 50cl"
-msgstr ""
+msgstr "ペプシマックス 500ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.san_pellegrino_1l_product_template
msgid "San Pellegrino 1L"
-msgstr ""
+msgstr "サンペレグリノ 1L"
#. module: point_of_sale
#: view:pos.order:0
@@ -555,7 +555,7 @@ msgstr "エントリーの記帳"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.spa_1l_product_template
msgid "Spa Reine 1L"
-msgstr ""
+msgstr "SPA REINE 1L"
#. module: point_of_sale
#: report:pos.details_summary:0
@@ -613,7 +613,7 @@ msgstr "キャッシュレジスタのリスト"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.maes_50cl_product_template
msgid "Maes 50cl"
-msgstr ""
+msgstr "メイズ 500ml"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_transaction_pos
@@ -634,7 +634,7 @@ msgstr "3月"
#: model:ir.actions.report.xml,name:point_of_sale.pos_users_product_re
#: report:pos.user.product:0
msgid "User's Product"
-msgstr "ユーザ製品"
+msgstr "ユーザ商品"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:641
@@ -644,17 +644,17 @@ msgid ""
"Please set one before choosing a product."
msgstr ""
"販売フォームの中の価格リストを選択する必要があります。\n"
-"製品を選択する前にそれをセットして下さい。"
+"商品を選択する前にそれをセットして下さい。"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.fanta_orange_2l_product_template
msgid "Fanta Orange 2L"
-msgstr ""
+msgstr "ファンタ オレンジ 2L"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.spa_33cl_product_template
msgid "Spa Reine 33cl"
-msgstr ""
+msgstr "SPA REINE 330ml"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_discount
@@ -669,23 +669,23 @@ msgstr "小計"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_prosciutto_product_template
msgid "Dr. Oetker Ristorante Prosciutto"
-msgstr ""
+msgstr "Dr. Oetker レストラン プロシュート"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_light_paprika_170g_product_template
#: model:product.template,name:point_of_sale.lays_paprika_170g_product_template
msgid "Lays Light Paprika 170g"
-msgstr ""
+msgstr "Lays ライト パプリカ 170g"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_light_lemon_50cl_product_template
msgid "Coca-Cola Light Lemon 50cl"
-msgstr ""
+msgstr "コカコーラ ライト レモン 500ml"
#. module: point_of_sale
#: field:report.cash.register,balance_end_real:0
msgid "Closing Balance"
-msgstr "期末残高"
+msgstr "締切残高"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.act_pos_open_statement
@@ -696,7 +696,7 @@ msgstr "取引明細書を閉じる"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.croky_naturel_45g_product_template
msgid "Croky Naturel 45g"
-msgstr ""
+msgstr "Croky ナチュラル 45g"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.product_product_putmoneyforchange1_product_template
@@ -706,7 +706,7 @@ msgstr "現金引出"
#. module: point_of_sale
#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
msgid "Starting Balance"
-msgstr "期首残高"
+msgstr "開始残高"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_category
@@ -717,7 +717,7 @@ msgstr "POS分類"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.chimay_bleu_75cl_product_template
msgid "Chimay Bleu 75cl"
-msgstr ""
+msgstr "シメイ Bleu 750ml"
#. module: point_of_sale
#: report:pos.payment.report.user:0
@@ -734,7 +734,7 @@ msgstr "行数"
msgid ""
"This field authorize Validation of Cashbox without controlling the closing "
"balance."
-msgstr "この項目は期末残高を制御することなく金庫の検証を許可します。"
+msgstr "この項目は締切残高を制御することなく金庫の検証を許可します。"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_details
@@ -775,7 +775,7 @@ msgstr "合計取引"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.chaudfontaine_petillante_50cl_product_template
msgid "Chaudfontaine Petillante 50cl"
-msgstr ""
+msgstr "Chaudfontaine ペティアント 500ml"
#. module: point_of_sale
#: field:pos.order.line,create_date:0
@@ -790,7 +790,7 @@ msgstr "本日の販売"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_naturel_300g_product_template
msgid "Lays Naturel XXL 300g"
-msgstr ""
+msgstr "Lays ナチュラル XXL 300g"
#. module: point_of_sale
#: view:report.sales.by.margin.pos:0 view:report.sales.by.margin.pos.month:0
@@ -840,7 +840,7 @@ msgstr "オーダー日"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.stella_33cl_product_template
msgid "Stella Artois 33cl"
-msgstr ""
+msgstr "Stella Artois 330ml"
#. module: point_of_sale
#: view:report.cash.register:0
@@ -867,12 +867,12 @@ msgstr "会計ポジションの注釈:"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.evian_2l_product_template
msgid "Evian 2L"
-msgstr ""
+msgstr "エビアン 2L"
#. module: point_of_sale
#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
msgid "September"
-msgstr ""
+msgstr "9月"
#. module: point_of_sale
#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
@@ -887,12 +887,12 @@ msgstr "税金:"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_light_2l_product_template
msgid "Coca-Cola Light 2L"
-msgstr ""
+msgstr "コカコーラ ライト 2L"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_funghi_product_template
msgid "Dr. Oetker Ristorante Funghi"
-msgstr ""
+msgstr "Dr. Oetker レストラン フンギ"
#. module: point_of_sale
#: field:report.transaction.pos,disc:0
@@ -902,12 +902,12 @@ msgstr "割引"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lindemans_kriek_37,5cl_product_template
msgid "Lindemans Kriek 37.5cl"
-msgstr ""
+msgstr "リンデマンス Kriek 375ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_zero_33cl_product_template
msgid "Coca-Cola Zero 33cl"
-msgstr ""
+msgstr "コカコーラ ゼロ 330ml"
#. module: point_of_sale
#: report:pos.invoice:0
@@ -958,12 +958,12 @@ msgstr "ユーザ"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_light_33cl_product_template
msgid "Coca-Cola Light 33cl"
-msgstr ""
+msgstr "コカコーラ ライト 330ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.perrier_1l_product_template
msgid "Perrier 1L"
-msgstr ""
+msgstr "ペリエ 1L"
#. module: point_of_sale
#: report:pos.details:0 report:pos.details_summary:0
@@ -978,7 +978,7 @@ msgstr "POSボックスエントリー"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.boon_framboise_37,5cl_product_template
msgid "Boon Framboise 37.5cl"
-msgstr ""
+msgstr "Boon Framboise 375ml"
#. module: point_of_sale
#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
@@ -1003,7 +1003,7 @@ msgstr "仕訳帳"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.timmermans_faro_37,5cl_product_template
msgid "Timmermans Faro 37.5cl"
-msgstr ""
+msgstr "Timmermans Faro 375ml"
#. module: point_of_sale
#: view:account.bank.statement:0 view:pos.order:0 field:pos.order,state:0
@@ -1031,7 +1031,7 @@ msgstr "販売(合計)"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.timmermans_kriek_37,5cl_product_template
msgid "Timmermans Kriek 37.5cl"
-msgstr ""
+msgstr "Timmermans Kriek 375ml"
#. module: point_of_sale
#: field:account.journal,check_dtls:0
@@ -1076,7 +1076,7 @@ msgstr "価格"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.ijsboerke_stracciatella_2,5l_product_template
msgid "ijsboerke Stracciatella 2.5L"
-msgstr ""
+msgstr "アイスブルク Stracciatella 2.5L"
#. module: point_of_sale
#: field:account.journal,journal_user:0
@@ -1088,7 +1088,7 @@ msgstr "POS支払方法"
msgid ""
"This is a product you can use to take cash from a statement for the point of "
"sale backend, exemple: money lost, transfer to bank, etc."
-msgstr "これはPOS後方事務のための取引明細書から現金を出すために使用できる製品です。例えば、現金の紛失、銀行への転送など。"
+msgstr "これはPOS後方事務のための取引明細書から現金を出すために使用できる商品です。例えば、現金の紛失、銀行への転送など。"
#. module: point_of_sale
#: field:report.cash.register,date:0
@@ -1098,7 +1098,7 @@ msgstr "作成日"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_regular_33cl_product_template
msgid "Coca-Cola Regular 33cl"
-msgstr ""
+msgstr "コカコーラ 330ml"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:65
@@ -1109,7 +1109,7 @@ msgstr "削除できません。"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_paprika_oven_150g_product_template
msgid "Lays Paprika Oven Baked 150g"
-msgstr ""
+msgstr "Lays パプリカ オーブンベークド 150g"
#. module: point_of_sale
#: report:pos.details:0 report:pos.details_summary:0
@@ -1126,7 +1126,7 @@ msgstr "名前"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.spa_gazeuse_33cl_product_template
msgid "Spa Barisart 33cl"
-msgstr ""
+msgstr "SPA Barisart 330ml"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:284
@@ -1176,148 +1176,148 @@ msgstr "仕訳帳の名前は会社ごとに固有でなければなりません
#: model:product.template,name:point_of_sale.lays_light_naturel_170g_product_template
#: model:product.template,name:point_of_sale.lays_naturel_170g_product_template
msgid "Lays Light Naturel 170g"
-msgstr ""
+msgstr "Lays ライト ナチュラル 170g"
#. module: point_of_sale
#: report:pos.details:0 report:pos.details_summary:0 report:pos.lines:0
#: report:pos.payment.report.user:0 report:pos.sales.user:0
#: report:pos.sales.user.today:0 report:pos.user.product:0
msgid "Print Date"
-msgstr ""
+msgstr "印刷日"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:282
#, python-format
msgid "There is no receivable account defined to make payment"
-msgstr ""
+msgstr "支払のための売掛金勘定が定義されていません。"
#. module: point_of_sale
#: view:pos.open.statement:0
msgid "Do you want to open cash registers?"
-msgstr ""
+msgstr "キャッシュレジスタを開きますか?"
#. module: point_of_sale
#: help:pos.category,sequence:0
msgid ""
"Gives the sequence order when displaying a list of product categories."
-msgstr ""
+msgstr "商品分類のリストを表示する時に並び順を与えて下さい。"
#. module: point_of_sale
#: field:product.product,expense_pdt:0
msgid "PoS Cash Output"
-msgstr ""
+msgstr "POS現金払出"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.soda
msgid "Soda"
-msgstr ""
+msgstr "ソーダ"
#. module: point_of_sale
#: view:account.bank.statement:0 view:pos.order:0 view:report.cash.register:0
#: view:report.pos.order:0
msgid "Group By..."
-msgstr ""
+msgstr "グループ化…"
#. module: point_of_sale
#: view:pos.order:0
msgid "POS Orders"
-msgstr ""
+msgstr "POSオーダー"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.all_closed_cashbox_of_the_day
msgid "All Closed CashBox"
-msgstr ""
+msgstr "全ての閉じた金庫"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:640
#, python-format
msgid "No Pricelist !"
-msgstr ""
+msgstr "価格リストがありません。"
#. module: point_of_sale
#: view:pos.order:0
msgid "Update"
-msgstr ""
+msgstr "更新"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Base"
-msgstr ""
+msgstr "基本"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.categ_others
msgid "Others"
-msgstr ""
+msgstr "その他"
#. module: point_of_sale
#: view:product.product:0
msgid "Point-of-Sale"
-msgstr ""
+msgstr "POS"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.evian_50cl_product_template
msgid "Evian 50cl"
-msgstr ""
+msgstr "エビアン 500ml"
#. module: point_of_sale
#: view:pos.order:0
msgid "Notes"
-msgstr ""
+msgstr "注記"
#. module: point_of_sale
#: view:pos.order:0
msgid "Sale Order"
-msgstr ""
+msgstr "販売オーダー"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_light_lemon_2l_product_template
msgid "Coca-Cola Light Lemon 2L"
-msgstr ""
+msgstr "コカコーラ ライト レモン 2L"
#. module: point_of_sale
#: report:pos.details:0 report:pos.invoice:0 field:pos.order,amount_tax:0
msgid "Taxes"
-msgstr ""
+msgstr "税金"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_day
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_form
msgid "Sale line"
-msgstr ""
+msgstr "販売行"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_naturel_oven_150g_product_template
msgid "Lays Naturel Oven Baked 150g"
-msgstr ""
+msgstr "Lays ナチュラル オーブンベークド 150g"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_light_decaf_33cl_product_template
msgid "Coca-Cola Light Decaf 33cl"
-msgstr ""
+msgstr "コカコーラ ライト デカフェ 330ml"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.product_normal_action
#: model:ir.ui.menu,name:point_of_sale.menu_point_of_sale_product
#: model:ir.ui.menu,name:point_of_sale.menu_pos_products
msgid "Products"
-msgstr ""
+msgstr "商品"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_4formaggi_product_template
msgid "Dr. Oetker Ristorante Quattro Formaggi"
-msgstr ""
+msgstr "Dr. Oetker レストラン クアトロフォルマッジ"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_zero_1l_product_template
msgid "Coca-Cola Zero 1L"
-msgstr ""
+msgstr "コカコーラ ゼロ 1L"
#. module: point_of_sale
#: report:pos.sales.user:0 report:pos.sales.user.today:0
#: field:report.pos.order,date:0
msgid "Date Order"
-msgstr ""
+msgstr "日付順"
#. module: point_of_sale
#: view:report.sales.by.margin.pos:0 view:report.sales.by.margin.pos.month:0
@@ -1330,55 +1330,55 @@ msgstr ""
#: model:ir.actions.act_window,name:point_of_sale.action_product_output
#: model:ir.ui.menu,name:point_of_sale.products_for_output_operations
msgid "Products 'Put Money In'"
-msgstr ""
+msgstr "現金装填という商品"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.croky_bolognaise_250g_product_template
msgid "Croky Bolognaise 250g"
-msgstr ""
+msgstr "Croky ボロネーズ 250g"
#. module: point_of_sale
#: view:pos.order:0
msgid "Extra Info"
-msgstr ""
+msgstr "追加情報"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Fax :"
-msgstr ""
+msgstr "FAX:"
#. module: point_of_sale
#: field:pos.order,user_id:0
msgid "Connected Salesman"
-msgstr ""
+msgstr "担当販売員"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_sale_all
#: model:ir.ui.menu,name:point_of_sale.menu_point_ofsale_all
msgid "All Sales Orders"
-msgstr ""
+msgstr "全販売オーダー"
#. module: point_of_sale
#: help:product.product,income_pdt:0
msgid ""
"This is a product you can use to put cash into a statement for the point of "
"sale backend."
-msgstr "これはPOS後方事務のために取引明細書の中に現金を入れるために使用できる製品です。"
+msgstr "これはPOS後方事務のために取引明細書の中に現金を入れるために使用できる商品です。"
#. module: point_of_sale
#: view:pos.receipt:0
msgid "Print the Receipt of the Sale"
-msgstr ""
+msgstr "販売レシートの印刷"
#. module: point_of_sale
#: field:pos.make.payment,journal:0
msgid "Payment Mode"
-msgstr ""
+msgstr "支払モード"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_paprika_45g_product_template
msgid "Lays Paprika 45g"
-msgstr ""
+msgstr "Lays パプリカ 45g"
#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
#. module: point_of_sale
@@ -1390,120 +1390,120 @@ msgstr ""
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:32
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:59
msgid "Qty"
-msgstr ""
+msgstr "数量"
#. module: point_of_sale
#: view:report.cash.register:0 view:report.pos.order:0
msgid "Month -1"
-msgstr ""
+msgstr "月 -1"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_sale_user
#: model:ir.model,name:point_of_sale.model_pos_sale_user
#: view:pos.payment.report.user:0
msgid "Sale by User"
-msgstr ""
+msgstr "ユーザ毎の販売"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.evian_1l_product_template
msgid "Evian 1L"
-msgstr ""
+msgstr "エビアン 1L"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_open_statement
msgid "Open Cash Registers"
-msgstr ""
+msgstr "キャッシュレジスタを開く"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.water
msgid "Water"
-msgstr ""
+msgstr "水"
#. module: point_of_sale
#: view:report.cash.register:0
msgid "state"
-msgstr ""
+msgstr "状態"
#. module: point_of_sale
#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
msgid "July"
-msgstr ""
+msgstr "7月"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_poivre_sel_oven_150g_product_template
msgid "Lays Sel et Poivre Oven Baked 150g"
-msgstr ""
+msgstr "Lays 塩コショウ オーブンベークド 150g"
#. module: point_of_sale
#: report:pos.details:0 report:pos.details_summary:0
msgid "Qty of product"
-msgstr ""
+msgstr "商品の数量"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.chimay_rouge_33cl_product_template
msgid "Chimay Rouge 33cl"
-msgstr ""
+msgstr "シメイ Rouge 330ml"
#. module: point_of_sale
#: field:report.pos.order,delay_validation:0
msgid "Delay Validation"
-msgstr ""
+msgstr "検証の遅延"
#. module: point_of_sale
#: field:pos.order,nb_print:0
msgid "Number of Print"
-msgstr ""
+msgstr "印刷数"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_make_payment
msgid "Point of Sale Payment"
-msgstr ""
+msgstr "POS支払"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_light_50cl_product_template
msgid "Coca-Cola Light 50cl"
-msgstr ""
+msgstr "コカコーラ ライト 500ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.jupiler_50cl_product_template
msgid "Jupiler 50cl"
-msgstr ""
+msgstr "ジュピラー 500ml"
#. module: point_of_sale
#: report:pos.details:0 report:pos.details_summary:0
msgid "End Period"
-msgstr ""
+msgstr "期末日"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_light_lemon_33cl_product_template
msgid "Coca-Cola Light Lemon 33cl"
-msgstr ""
+msgstr "コカコーラ ライト レモン 330ml"
#. module: point_of_sale
#: field:account.journal,auto_cash:0
msgid "Automatic Opening"
-msgstr ""
+msgstr "自動開始"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_ketchup_250g_product_template
msgid "Lays Ketchup 250g"
-msgstr ""
+msgstr "Lays ケチャップ 250g"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.perrier_50cl_product_template
msgid "Perrier 50cl"
-msgstr ""
+msgstr "ペリエ 500ml"
#. module: point_of_sale
#: selection:report.pos.order,state:0
msgid "Synchronized"
-msgstr ""
+msgstr "同期"
#. module: point_of_sale
#: view:report.cash.register:0 field:report.cash.register,month:0
#: view:report.pos.order:0 field:report.pos.order,month:0
msgid "Month"
-msgstr ""
+msgstr "月"
#. module: point_of_sale
#: report:account.statement:0
@@ -1513,13 +1513,13 @@ msgstr "取引明細書名"
#. module: point_of_sale
#: view:report.pos.order:0
msgid "Year of order date"
-msgstr ""
+msgstr "オーダー日の年"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_new_bank_statement_tree
#: field:pos.box.entries,journal_id:0 field:pos.box.out,journal_id:0
msgid "Cash Register"
-msgstr ""
+msgstr "キャッシュレジスタ"
#. module: point_of_sale
#: view:pos.close.statement:0
@@ -1529,72 +1529,72 @@ msgstr ""
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_receipt
msgid "Point of sale receipt"
-msgstr ""
+msgstr "販売レシート印刷"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_margin_pos_today
msgid "Sales by User Daily margin"
-msgstr ""
+msgstr "ユーザの1日の利鞘別販売"
#. module: point_of_sale
#: view:pos.open.statement:0
msgid "Open Registers"
-msgstr ""
+msgstr "レジスタを開く"
#. module: point_of_sale
#: field:report.transaction.pos,journal_id:0
msgid "Sales Journal"
-msgstr ""
+msgstr "売上仕訳帳"
#. module: point_of_sale
#: field:report.cash.register,balance_start:0
msgid "Opening Balance"
-msgstr ""
+msgstr "開始残高"
#. module: point_of_sale
#: view:account.bank.statement:0 selection:report.pos.order,state:0
msgid "Closed"
-msgstr ""
+msgstr "閉じた"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_vegetale_product_template
msgid "Dr. Oetker Ristorante Vegetale"
-msgstr ""
+msgstr "Dr. Oetker レストラン ベジタブル"
#. module: point_of_sale
#: view:report.pos.order:0
msgid "POS ordered created by today"
-msgstr ""
+msgstr "本日作成されたPOSオーダー"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_zero_2l_product_template
msgid "Coca-Cola Zero 2L"
-msgstr ""
+msgstr "コカコーラ ゼロ 2L"
#. module: point_of_sale
#: field:pos.order,amount_paid:0 selection:pos.order,state:0
msgid "Paid"
-msgstr ""
+msgstr "支払済"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_all_sales_lines
msgid "All sales lines"
-msgstr ""
+msgstr "全販売行"
#. module: point_of_sale
#: view:pos.order:0
msgid "Discount"
-msgstr ""
+msgstr "割引"
#. module: point_of_sale
#: view:report.cash.register:0
msgid "Cash Analysis created in last month"
-msgstr ""
+msgstr "先月に作成された現金分析"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.beers
msgid "Beers"
-msgstr ""
+msgstr "ビール"
#. module: point_of_sale
#: view:pos.close.statement:0
@@ -1603,21 +1603,23 @@ msgid ""
"validation. He will also open all cash registers for which you have to "
"control the ending belance before closing manually."
msgstr ""
+"OpenERPは検証なしで自動的に全てのキャッシュレジスタを閉じることができます。また、手動で閉じる前に終了残高を管理しなければならない全てのキャッシュレ"
+"ジスタを開くこともできます。"
#. module: point_of_sale
#: view:report.cash.register:0
msgid "Cash Analysis created by today"
-msgstr ""
+msgstr "本日作成された現金分析"
#. module: point_of_sale
#: selection:report.cash.register,state:0
msgid "Quotation"
-msgstr ""
+msgstr "見積"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.product_product_putmoneyforchange0_product_template
msgid "Cash In"
-msgstr ""
+msgstr "現金入金"
#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
#. module: point_of_sale
@@ -1629,17 +1631,17 @@ msgstr ""
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:93
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:271
msgid "Total:"
-msgstr ""
+msgstr "合計:"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos
msgid "Sales by margin"
-msgstr ""
+msgstr "利鞘別売上"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_config_journal
msgid "Journal Configuration"
-msgstr ""
+msgstr "仕訳帳設定"
#. module: point_of_sale
#: view:pos.order:0
@@ -1649,24 +1651,24 @@ msgstr "取引明細書行"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.croky_paprika_45g_product_template
msgid "Croky Paprika 45g"
-msgstr ""
+msgstr "Croky パプリカ 45g"
#. module: point_of_sale
#: view:pos.order:0
msgid "Reprint"
-msgstr ""
+msgstr "再印刷"
#. module: point_of_sale
#: help:pos.order,user_id:0
msgid ""
"Person who uses the the cash register. It could be a reliever, a student or "
"an interim employee."
-msgstr ""
+msgstr "キャッシュレジスタのユーザとなる人は救援者や学生、一時的な従業員かもしれません。"
#. module: point_of_sale
#: field:report.transaction.pos,invoice_id:0
msgid "Nbr Invoice"
-msgstr ""
+msgstr "請求書番号"
#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
#. module: point_of_sale
@@ -1675,7 +1677,7 @@ msgstr ""
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_receipt
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:231
msgid "Receipt"
-msgstr ""
+msgstr "レシート"
#. module: point_of_sale
#: view:pos.open.statement:0
@@ -1684,48 +1686,49 @@ msgid ""
"payments. We suggest you to control the opening balance of each register, "
"using their CashBox tab."
msgstr ""
+"システムは全てのキャッシュレジスタを開きます。それで支払の記録を開始できます。金庫タブを使って各レジスタの開始残高を管理することを推奨します。"
#. module: point_of_sale
#: report:pos.invoice:0 report:pos.lines:0 field:pos.order.line,price_unit:0
#: report:pos.payment.report.user:0
msgid "Unit Price"
-msgstr ""
+msgstr "単価"
#. module: point_of_sale
#: view:pos.order:0
msgid "Done"
-msgstr ""
+msgstr "完了"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_invoice_report
#: report:pos.invoice:0 view:pos.order:0 field:pos.order,invoice_id:0
msgid "Invoice"
-msgstr ""
+msgstr "請求書"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.rochefort_8_33cl_product_template
msgid "Rochefort \"8\" 33cl"
-msgstr ""
+msgstr "ロシュフォール 8 330ml"
#. module: point_of_sale
#: view:account.bank.statement:0 selection:report.cash.register,state:0
msgid "Open"
-msgstr ""
+msgstr "開く"
#. module: point_of_sale
#: field:pos.order,name:0 field:pos.order.line,order_id:0
msgid "Order Ref"
-msgstr ""
+msgstr "オーダー参照"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.timmermans_geuze_37,5cl_product_template
msgid "Timmermans Geuze 37.5cl"
-msgstr ""
+msgstr "Timmermans Geuze 375ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_pickles_250g_product_template
msgid "Lays Pickels 250g"
-msgstr ""
+msgstr "Lays ピクルス 250g"
#. module: point_of_sale
#: field:report.sales.by.margin.pos,net_margin_per_qty:0
@@ -1736,38 +1739,38 @@ msgstr "1個当り正味利鞘"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_sales_by_user_pos_month
msgid "Sales by user monthly"
-msgstr ""
+msgstr "月間ユーザ別販売"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.spa_et_fruit_50cl_product_template
msgid "Spa et Fruit Orange 50cl"
-msgstr ""
+msgstr "SPA et Fruit Orange 500ml"
#. module: point_of_sale
#: view:report.sales.by.margin.pos:0 view:report.sales.by.margin.pos.month:0
msgid "Sales by User Margin"
-msgstr ""
+msgstr "ユーザ利鞘別売上"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_payment.py:59
#, python-format
msgid "Paiement"
-msgstr ""
+msgstr "支払"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Taxes:"
-msgstr ""
+msgstr "税金:"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.pepsi_max_33cl_product_template
msgid "Pepsi Max 33cl"
-msgstr ""
+msgstr "ペプシマックス 330ml"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_pos_order
msgid "Point of Sale Orders Statistics"
-msgstr ""
+msgstr "POSオーダー統計"
#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
#. module: point_of_sale
@@ -1779,32 +1782,32 @@ msgstr ""
#: view:report.pos.order:0 field:report.pos.order,product_id:0
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:29
msgid "Product"
-msgstr ""
+msgstr "商品"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_pollo_product_template
msgid "Dr. Oetker Ristorante Pollo"
-msgstr ""
+msgstr "Dr. Oetker レストラン ポロ"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_lines_report
msgid "Pos Lines"
-msgstr ""
+msgstr "POS行"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.grisette_cerise_25cl_product_template
msgid "Grisette Cerise 25cl"
-msgstr ""
+msgstr "Grisette Cerise 250ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.chaudfontaine_33cl_product_template
msgid "Chaudfontaine 33cl"
-msgstr ""
+msgstr "Chaudfontaine 330ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_margherita_product_template
msgid "Dr. Oetker La Margherita"
-msgstr ""
+msgstr "Dr. Oetker ラ マルゲリータ"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_point_root
@@ -1814,65 +1817,65 @@ msgstr "POS後方事務"
#. module: point_of_sale
#: view:pos.order:0 selection:pos.order,state:0
msgid "Posted"
-msgstr ""
+msgstr "記帳済"
#. module: point_of_sale
#: field:pos.order,date_order:0
msgid "Date Ordered"
-msgstr ""
+msgstr "オーダー日"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment_report_user
#: model:ir.model,name:point_of_sale.model_pos_payment_report_user
msgid "Sales lines by Users"
-msgstr ""
+msgstr "ユーザ別販売傾向"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.pepsi_2l_product_template
msgid "Pepsi 2L"
-msgstr ""
+msgstr "ペプシ 2L"
#. module: point_of_sale
#: report:pos.details:0
msgid "Order"
-msgstr ""
+msgstr "順番"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:472
#, python-format
msgid "There is no income account defined for this product: \"%s\" (id:%d)"
-msgstr ""
+msgstr "この商品のために定義された損益勘定がありません:%s(ID:%d)"
#. module: point_of_sale
#: view:pos.details:0
msgid "POS Details"
-msgstr ""
+msgstr "POS詳細"
#. module: point_of_sale
#: field:pos.details,user_ids:0
msgid "Salesmen"
-msgstr ""
+msgstr "販売員"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_cash_register
#: view:report.cash.register:0
msgid "Point of Sale Cash Register Analysis"
-msgstr ""
+msgstr "POSキャッシュレジスタ分析"
#. module: point_of_sale
#: report:pos.lines:0
msgid "Net Total :"
-msgstr ""
+msgstr "合計:"
#. module: point_of_sale
#: model:res.groups,name:point_of_sale.group_pos_manager
msgid "Manager"
-msgstr ""
+msgstr "マネジャ"
#. module: point_of_sale
#: field:pos.details,date_start:0 field:pos.sale.user,date_start:0
msgid "Date Start"
-msgstr ""
+msgstr "開始日"
#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
#. module: point_of_sale
@@ -1883,50 +1886,50 @@ msgstr ""
#: field:report.sales.by.user.pos.month,amount:0
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:33
msgid "Total"
-msgstr ""
+msgstr "合計"
#. module: point_of_sale
#: view:pos.sale.user:0
msgid "Sale By User"
-msgstr ""
+msgstr "ユーザ別販売"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_open_statement
msgid "Open Cash Register"
-msgstr ""
+msgstr "キャッシュレジスタを開く"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lindemans_pecheresse_37,5cl_product_template
msgid "Lindemans Pecheresse 37.5cl"
-msgstr ""
+msgstr "リンデマンス Pecheresse 375ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.pepsi_33cl_product_template
msgid "Pepsi 33cl"
-msgstr ""
+msgstr "ペプシ 330ml"
#. module: point_of_sale
#: report:account.statement:0
#: model:ir.actions.report.xml,name:point_of_sale.account_statement
msgid "Statement"
-msgstr ""
+msgstr "取引明細書"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_payment_report
#: model:ir.model,name:point_of_sale.model_pos_payment_report
#: view:pos.payment.report:0
msgid "Payment Report"
-msgstr ""
+msgstr "支払レポート"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.fanta_orange_25cl_product_template
msgid "Fanta Orange 25cl"
-msgstr ""
+msgstr "ファンタ オレンジ 250ml"
#. module: point_of_sale
#: view:pos.confirm:0
msgid "Generate Journal Entries"
-msgstr ""
+msgstr "仕訳帳エントリーの生成"
#. module: point_of_sale
#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
@@ -1936,49 +1939,49 @@ msgstr ""
#: report:pos.sales.user.today:0 report:pos.user.product:0
#: field:report.pos.order,company_id:0
msgid "Company"
-msgstr ""
+msgstr "会社"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Invoice Date"
-msgstr ""
+msgstr "請求日"
#. module: point_of_sale
#: field:pos.box.entries,name:0
msgid "Reason"
-msgstr ""
+msgstr "理由"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.orangina_33cl_product_template
msgid "Orangina 33cl"
-msgstr ""
+msgstr "オランジーナ 330ml"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_product_input
#: model:ir.ui.menu,name:point_of_sale.products_for_input_operations
msgid "Products 'Take Money Out'"
-msgstr ""
+msgstr "現金取出という商品"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.chimay_bleu_33cl_product_template
msgid "Chimay Bleu 33cl"
-msgstr ""
+msgstr "シメイ Bleu 330ml"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_account_journal_form
#: model:ir.ui.menu,name:point_of_sale.menu_action_account_journal_form_open
msgid "Payment Methods"
-msgstr ""
+msgstr "支払方法"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.chips
msgid "Chips"
-msgstr ""
+msgstr "チップス"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_spinaci_product_template
msgid "Dr. Oetker Ristorante Spinaci"
-msgstr ""
+msgstr "Dr. Oetker レストラン スピナッチ"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:293
@@ -1986,227 +1989,227 @@ msgstr ""
#: code:addons/point_of_sale/wizard/pos_box_out.py:88
#, python-format
msgid "You have to open at least one cashbox"
-msgstr ""
+msgstr "少なくとも1個の金庫を開く必要があります。"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_payment_report_user
msgid "Today's Payment By User"
-msgstr ""
+msgstr "ユーザ別本日の支払"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_box_entries
#: model:ir.ui.menu,name:point_of_sale.menu_wizard_enter_jrnl
msgid "Put Money In"
-msgstr ""
+msgstr "現金装填"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:238
#: code:addons/point_of_sale/point_of_sale.py:253
#, python-format
msgid "Error!"
-msgstr ""
+msgstr "エラー"
#. module: point_of_sale
#: report:pos.lines:0
msgid "No. Of Articles"
-msgstr ""
+msgstr "品目数"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.ijsboerke_vanille_2,5l_product_template
msgid "ijsboerke Vanille 2.5L"
-msgstr ""
+msgstr "アイスブルク バニラ 2.5L"
#. module: point_of_sale
#: selection:pos.order,state:0 selection:report.pos.order,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "キャンセル済"
#. module: point_of_sale
#: report:pos.user.product:0
msgid "Ending Date"
-msgstr ""
+msgstr "終了日"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.orangina_1,5l_product_template
msgid "Orangina 1.5L"
-msgstr ""
+msgstr "オランジーナ 1.5L"
#. module: point_of_sale
#: field:pos.order,picking_id:0
msgid "Picking"
-msgstr ""
+msgstr "集荷"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.ice_cream
msgid "Ice Cream"
-msgstr ""
+msgstr "アイスクリーム"
#. module: point_of_sale
#: field:pos.order,shop_id:0 field:report.pos.order,shop_id:0
msgid "Shop"
-msgstr ""
+msgstr "店"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_account_bank_statement_line
msgid "Bank Statement Line"
-msgstr ""
+msgstr "銀行取引明細書行"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.belle_vue_kriek_25cl_product_template
msgid "Belle-Vue Kriek 25cl"
-msgstr ""
+msgstr "ベルビュー Kriek 250ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.chaudfontaine_petillante_1,5l_product_template
msgid "Chaudfontaine Petillante 1.5l"
-msgstr ""
+msgstr "Chaudfontaine ペティアント 1.5L"
#. module: point_of_sale
#: view:report.sales.by.user.pos:0 view:report.sales.by.user.pos.month:0
#: view:report.transaction.pos:0
msgid "POS Report"
-msgstr ""
+msgstr "POSレポート"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.chaudfontaine_1,5l_product_template
msgid "Chaudfontaine 1.5l"
-msgstr ""
+msgstr "Chaudfontaine 1.5L"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_close_statement
msgid "Close Cash Register"
-msgstr ""
+msgstr "キャッシュレジスタを閉じる"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:65
#, python-format
msgid "In order to delete a sale, it must be new or cancelled."
-msgstr ""
+msgstr "販売を削除するために、それは新規またはキャンセルする必要があります。"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_regular_50cl_product_template
msgid "Coca-Cola Regular 50cl"
-msgstr ""
+msgstr "コカコーラ 500ml"
#. module: point_of_sale
#: view:pos.confirm:0
msgid "Generate Entries"
-msgstr ""
+msgstr "エントリーの生成"
#. module: point_of_sale
#: field:pos.box.entries,product_id:0 field:pos.box.out,product_id:0
msgid "Operation"
-msgstr ""
+msgstr "操作"
#. module: point_of_sale
#: field:pos.order,account_move:0
msgid "Journal Entry"
-msgstr ""
+msgstr "仕訳帳入力"
#. module: point_of_sale
#: selection:report.cash.register,state:0
msgid "Confirmed"
-msgstr ""
+msgstr "確認済"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Cancelled Invoice"
-msgstr ""
+msgstr "キャンセル済請求書"
#. module: point_of_sale
#: view:report.cash.register:0
msgid "Confirm"
-msgstr ""
+msgstr "確認"
#. module: point_of_sale
#: help:account.journal,auto_cash:0
msgid ""
"This field authorize the automatic creation of the cashbox, without control "
"of the initial balance."
-msgstr ""
+msgstr "この項目は初期残高の制御なしに金庫の自動作成を許可します。"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_zero_50cl_product_template
msgid "Coca-Cola Zero 50cl"
-msgstr ""
+msgstr "コカコーラ ゼロ 500ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_tonno_product_template
msgid "Dr. Oetker Ristorante Tonno"
-msgstr ""
+msgstr "Dr. Oetker レストラン トンノ"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Supplier Invoice"
-msgstr ""
+msgstr "仕入先請求書"
#. module: point_of_sale
#: constraint:account.bank.statement:0
msgid "The journal and period chosen have to belong to the same company."
-msgstr ""
+msgstr "選択された仕訳帳と期間は同じ会社に属していなければなりません。"
#. module: point_of_sale
#: view:pos.order:0 selection:pos.order,state:0
#: selection:report.pos.order,state:0
msgid "New"
-msgstr ""
+msgstr "新規"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:238
#, python-format
msgid "In order to set to draft a sale, it must be cancelled."
-msgstr ""
+msgstr "販売をドラフトにセットするためには、それをキャンセルする必要があります。"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.fanta_zero_orange_33cl_product_template
msgid "Fanta Zero Orange 33cl"
-msgstr ""
+msgstr "ファンタ ゼロ オレンジ 330ml"
#. module: point_of_sale
#: view:report.pos.order:0
msgid "Day of order date"
-msgstr ""
+msgstr "オーダー日の日"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_point_rep
msgid "Reporting"
-msgstr ""
+msgstr "レポート"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.maes_33cl_product_template
msgid "Maes 33cl"
-msgstr ""
+msgstr "メイズ 330ml"
#. module: point_of_sale
#: view:pos.box.entries:0
msgid "Put Money"
-msgstr ""
+msgstr "現金装填"
#. module: point_of_sale
#: sql_constraint:account.journal:0
msgid "The code of the journal must be unique per company !"
-msgstr ""
+msgstr "仕訳帳のコードは会社ごとに固有でなければなりません。"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_point_config_product
msgid "Configuration"
-msgstr ""
+msgstr "設定"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.orval_33cl_product_template
msgid "Orval 33cl"
-msgstr ""
+msgstr "オルヴァル 330ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_regular_1l_product_template
msgid "Coca-Cola Regular 1L"
-msgstr ""
+msgstr "コカコーラ 1L"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:253
#, python-format
msgid "Unable to cancel the picking."
-msgstr ""
+msgstr "集荷をキャンセルできません。"
#. module: point_of_sale
#: view:report.pos.order:0
@@ -2216,74 +2219,74 @@ msgstr "現在月中に作成されたPOSオーダー"
#. module: point_of_sale
#: view:report.pos.order:0
msgid "POS ordered created last month"
-msgstr ""
+msgstr "先月作成されたPOSオーダー"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_invoice
msgid "Invoices"
-msgstr ""
+msgstr "請求書"
#. module: point_of_sale
#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
msgid "December"
-msgstr ""
+msgstr "12月"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.spa_gazeuse_1,5l_product_template
msgid "Spa Barisart 1.5l"
-msgstr ""
+msgstr "SPA Barisart 1.5L"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:329 view:pos.order:0
#, python-format
msgid "Return Products"
-msgstr ""
+msgstr "商品の返品"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.jupiler_33cl_product_template
msgid "Jupiler 33cl"
-msgstr ""
+msgstr "ジュピラー 330ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.ijsboerke_chocolat_2,5l_product_template
msgid "ijsboerke Chocolat 2.5L"
-msgstr ""
+msgstr "アイスブルク チョコレート 2.5L"
#. module: point_of_sale
#: view:pos.box.out:0
msgid "Take Money"
-msgstr ""
+msgstr "現金取出"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_details
msgid "Sales Details"
-msgstr ""
+msgstr "販売詳細"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_close_statement.py:50
#, python-format
msgid "Message"
-msgstr ""
+msgstr "メッセージ"
#. module: point_of_sale
#: view:account.journal:0 model:ir.model,name:point_of_sale.model_pos_order
#: model:ir.ui.menu,name:point_of_sale.menu_point_root_touchscreen
#: view:product.product:0
msgid "Point of Sale"
-msgstr ""
+msgstr "POS"
#. module: point_of_sale
#: view:pos.order:0 field:pos.payment.report.user,user_id:0
#: field:pos.sale.user,user_id:0 field:pos.sales.user.today,user_id:0
#: view:report.pos.order:0 field:report.pos.order,user_id:0
msgid "Salesman"
-msgstr ""
+msgstr "販売員"
#. module: point_of_sale
#: report:pos.details:0 view:pos.order:0 selection:pos.order,state:0
#: view:report.pos.order:0 selection:report.pos.order,state:0
msgid "Invoiced"
-msgstr ""
+msgstr "請求済"
#. module: point_of_sale
#: view:pos.close.statement:0
@@ -2293,101 +2296,101 @@ msgstr ""
#. module: point_of_sale
#: model:product.template,name:point_of_sale.spa_gazeuse_50cl_product_template
msgid "Spa Barisart 50cl"
-msgstr ""
+msgstr "SPA Barisart 500ml"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.special_beers
msgid "Special Beers"
-msgstr ""
+msgstr "特別なビール"
#. module: point_of_sale
#: field:pos.order.line,notice:0
msgid "Discount Notice"
-msgstr ""
+msgstr "割引注記"
#. module: point_of_sale
#: view:pos.order:0
msgid "Re-Print"
-msgstr ""
+msgstr "再印刷"
#. module: point_of_sale
#: view:report.cash.register:0
msgid "Draft"
-msgstr ""
+msgstr "ドラフト"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.fanta_zero_orange_1,5l_product_template
msgid "Fanta Zero Orange 1.5L"
-msgstr ""
+msgstr "ファンタ ゼロ オレンジ 1.5L"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "PRO-FORMA"
-msgstr ""
+msgstr "プロフォーマ"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:358
#, python-format
msgid "Please provide a partner for the sale."
-msgstr ""
+msgstr "販売のためのパートナを提供して下さい。"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.fruity_beers
msgid "Fruity Beers"
-msgstr ""
+msgstr "フルーティなビール"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.ijsboerke_dame_blanche_2,5l_product_template
msgid "ijsboerke Dame Blanche 2.5L"
-msgstr ""
+msgstr "アイスブルク Dame Blanche 2.5L"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.ijsboerke_moka_2,5l_product_template
msgid "ijsboerke Moka 2.5L"
-msgstr ""
+msgstr "アイスブルク モカ 2.5L"
#. module: point_of_sale
#: view:pos.order:0
msgid "Search Sales Order"
-msgstr ""
+msgstr "販売オーダーの検索"
#. module: point_of_sale
#: model:ir.actions.act_window,help:point_of_sale.action_account_journal_form
msgid ""
"Payment methods are defined by accounting journals having the field Payment "
"Method checked."
-msgstr ""
+msgstr "支払方法はチェックされた支払方法項目を持つ会計仕訳帳によって定義されます。"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree
#: model:ir.model,name:point_of_sale.model_report_sales_by_user_pos
msgid "Sales by user"
-msgstr ""
+msgstr "ユーザ別販売"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_hawaii_product_template
msgid "Dr. Oetker Ristorante Hawaii"
-msgstr ""
+msgstr "Dr. Oetker レストラン ハワイ"
#. module: point_of_sale
#: view:pos.receipt:0
msgid "Print Receipt"
-msgstr ""
+msgstr "レシート印刷"
#. module: point_of_sale
#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
msgid "January"
-msgstr ""
+msgstr "1月"
#. module: point_of_sale
#: view:pos.order.line:0
msgid "POS Orders lines"
-msgstr ""
+msgstr "POSオーダー行"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.chaudfontaine_petillante_33cl_product_template
msgid "Chaudfontaine Petillante 33cl"
-msgstr ""
+msgstr "Chaudfontaine ペティアント 330ml"
#. module: point_of_sale
#: model:ir.actions.act_window,help:point_of_sale.product_normal_action
@@ -2397,43 +2400,45 @@ msgid ""
"contains detailed information about your products related to procurement "
"logistics, sales price, product category, suppliers and so on."
msgstr ""
+"購入または販売する全ての商品を定義する必要があります。商品は原材料、在庫可能商品、消耗品、またはサービスです。商品フォームはその商品が関連する調達の物流、"
+"販売価格、商品分類、仕入先などについての詳細な情報を含みます。"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.pepsi_max_2l_product_template
msgid "Pepsi Max 2L"
-msgstr ""
+msgstr "ペプシマックス 2L"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:358
#, python-format
msgid "Error"
-msgstr ""
+msgstr "エラー"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_paprika_300g_product_template
msgid "Lays Paprika XXL 300g"
-msgstr ""
+msgstr "Lays パプリカ XXL 300g"
#. module: point_of_sale
#: view:pos.close.statement:0
msgid "Do you want to close your cash registers?"
-msgstr ""
+msgstr "キャッシュレジスタを閉じますか?"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Refund"
-msgstr ""
+msgstr "返金"
#. module: point_of_sale
#: code:addons/point_of_sale/report/pos_invoice.py:46
#, python-format
msgid "Please create an invoice for this sale."
-msgstr ""
+msgstr "この販売の請求書を作成して下さい。"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.oetker_mozzarella_product_template
msgid "Dr. Oetker Ristorante Mozzarella"
-msgstr ""
+msgstr "Dr. Oetker レストラン モッツァレッラ"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_close_statement.py:66
@@ -2441,17 +2446,17 @@ msgstr ""
#: view:pos.close.statement:0
#, python-format
msgid "Close Cash Registers"
-msgstr ""
+msgstr "キャッシュレジスタを閉じる"
#. module: point_of_sale
#: report:pos.details:0 report:pos.payment.report.user:0
msgid "Disc(%)"
-msgstr ""
+msgstr "割引(%)"
#. module: point_of_sale
#: view:pos.order:0
msgid "General Information"
-msgstr ""
+msgstr "一般情報"
#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
#. module: point_of_sale
@@ -2461,265 +2466,265 @@ msgstr ""
#: view:pos.payment.report.user:0 view:pos.sale.user:0
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:13
msgid "Close"
-msgstr ""
+msgstr "閉じる"
#. module: point_of_sale
#: view:pos.order:0
msgid "Order lines"
-msgstr ""
+msgstr "オーダー行"
#. module: point_of_sale
#: view:account.journal:0
msgid "Extended Configuration"
-msgstr ""
+msgstr "拡張設定"
#. module: point_of_sale
#: field:pos.order.line,price_subtotal:0
msgid "Subtotal w/o Tax"
-msgstr ""
+msgstr "税抜小計"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.spa_50cl_product_template
msgid "Spa Reine 50cl"
-msgstr ""
+msgstr "SPA REINE 500ml"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.leffe_blonde_33cl_product_template
msgid "Leffe Blonde 33cl"
-msgstr ""
+msgstr "レフ ブロンド 330ml"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment
msgid "Pyament Report"
-msgstr ""
+msgstr "支払レポート"
#. module: point_of_sale
#: field:report.transaction.pos,jl_id:0
msgid "Cash Journals"
-msgstr ""
+msgstr "現金仕訳帳"
#. module: point_of_sale
#: report:pos.sales.user.today:0
msgid "Today's Sales By User"
-msgstr ""
+msgstr "ユーザ別本日販売"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Customer Code"
-msgstr ""
+msgstr "顧客コード"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_box_out.py:86
#, python-format
msgid "please check that account is set to %s"
-msgstr ""
+msgstr "そのアカウントが %s にセットされていることを確認して下さい。"
#. module: point_of_sale
#: field:pos.config.journal,name:0 report:pos.invoice:0 report:pos.lines:0
msgid "Description"
-msgstr ""
+msgstr "説明"
#. module: point_of_sale
#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
msgid "May"
-msgstr ""
+msgstr "5月"
#. module: point_of_sale
#: report:pos.lines:0
msgid "Sales lines"
-msgstr ""
+msgstr "販売行"
#. module: point_of_sale
#: view:pos.order:0
msgid "Yesterday"
-msgstr ""
+msgstr "昨日"
#. module: point_of_sale
#: field:pos.order,note:0
msgid "Internal Notes"
-msgstr ""
+msgstr "内部注記"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_zero_decaf_33cl_product_template
msgid "Coca-Cola Zero Decaf 33cl"
-msgstr ""
+msgstr "コカコーラ ゼロ デカフェ 330ml"
#. module: point_of_sale
#: view:pos.box.out:0
msgid "Describe why you take money from the cash register:"
-msgstr ""
+msgstr "キャッシュレジスタから現金取出をした理由を説明して下さい。"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_order_all
#: model:ir.ui.menu,name:point_of_sale.menu_report_pos_order_all
#: view:report.pos.order:0
msgid "Point of Sale Analysis"
-msgstr ""
+msgstr "POS分析"
#. module: point_of_sale
#: view:pos.order:0 field:pos.order,partner_id:0 view:report.pos.order:0
msgid "Customer"
-msgstr ""
+msgstr "顧客"
#. module: point_of_sale
#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
msgid "February"
-msgstr ""
+msgstr "2月"
#. module: point_of_sale
#: view:report.cash.register:0
msgid " Today "
-msgstr ""
+msgstr " 本日 "
#. module: point_of_sale
#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
msgid "April"
-msgstr ""
+msgstr "4月"
#. module: point_of_sale
#: field:pos.order,statement_ids:0
msgid "Payments"
-msgstr ""
+msgstr "支払"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Supplier Refund"
-msgstr ""
+msgstr "仕入先返金"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_margin_pos_month
msgid "Sales by User Monthly margin"
-msgstr ""
+msgstr "ユーザ月間利鞘別売上"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.leffe_9_33cl_product_template
msgid "Leffe Brune \"9\" 33cl"
-msgstr ""
+msgstr "Leffe Brune 9 330ml"
#. module: point_of_sale
#: help:account.journal,journal_user:0
msgid ""
"Check this box if this journal define a payment method that can be used in "
"point of sales."
-msgstr ""
+msgstr "この仕訳帳がPOSで使用する支払方法を定義している場合はこのボックスをチェックして下さい。"
#. module: point_of_sale
#: field:pos.category,sequence:0
msgid "Sequence"
-msgstr ""
+msgstr "順序"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_return.py:316 view:pos.make.payment:0
#, python-format
msgid "Make Payment"
-msgstr ""
+msgstr "支払の作成"
#. module: point_of_sale
#: constraint:pos.category:0
msgid "Error ! You cannot create recursive categories."
-msgstr ""
+msgstr "エラー:再帰カテゴリーを作成することはできません。"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_sales_user_today
msgid "Sales User Today"
-msgstr ""
+msgstr "ユーザの本日販売"
#. module: point_of_sale
#: view:report.pos.order:0
msgid "Month of order date"
-msgstr ""
+msgstr "オーダー日の月"
#. module: point_of_sale
#: field:product.product,income_pdt:0
msgid "PoS Cash Input"
-msgstr ""
+msgstr "POS現金装填"
#. module: point_of_sale
#: view:report.cash.register:0 field:report.cash.register,year:0
#: view:report.pos.order:0 field:report.pos.order,year:0
msgid "Year"
-msgstr ""
+msgstr "年"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:31
msgid "Disc (%)"
-msgstr ""
+msgstr "割引(%)"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:41
msgid "Subtotal:"
-msgstr ""
+msgstr "小計:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:45
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:268
msgid "Tax:"
-msgstr ""
+msgstr "税金:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:64
msgid "Disc"
-msgstr ""
+msgstr "割引"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:71
msgid "+/-"
-msgstr ""
+msgstr "+ / -"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:105
msgid "Paid:"
-msgstr ""
+msgstr "支払済:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:113
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:288
msgid "Change:"
-msgstr ""
+msgstr "手数料:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:124
msgid "Back to Products"
-msgstr ""
+msgstr "商品に戻る"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:127
msgid "Validate"
-msgstr ""
+msgstr "検証"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:140
msgid "pending orders"
-msgstr ""
+msgstr "保留中オーダー"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:145
msgid ""
"There are pending operations that could not be saved into the database, are "
"you sure you want to exit?"
-msgstr ""
+msgstr "データベースの保存することができなかった保留中の操作がありますが、本当に終了しますか?"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:236
msgid "Print"
-msgstr ""
+msgstr "印刷"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:238
msgid "Next Order"
-msgstr ""
+msgstr "次のオーダー"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:248
msgid "Phone:"
-msgstr ""
+msgstr "TEL:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:249
msgid "User:"
-msgstr ""
+msgstr "ユーザ:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:250
msgid "Shop:"
-msgstr ""
+msgstr "店:"
diff --git a/addons/portal/i18n/ja.po b/addons/portal/i18n/ja.po
new file mode 100644
index 00000000000..32590f36985
--- /dev/null
+++ b/addons/portal/i18n/ja.po
@@ -0,0 +1,407 @@
+# Japanese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-06-01 23:22+0000\n"
+"Last-Translator: Akira Hiyama \n"
+"Language-Team: Japanese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
+
+#. module: portal
+#: code:addons/portal/wizard/share_wizard.py:51
+#, python-format
+msgid "Please select at least one user to share with"
+msgstr "共有するためには少なくとも1ユーザと共有して下さい。"
+
+#. module: portal
+#: code:addons/portal/wizard/share_wizard.py:55
+#, python-format
+msgid "Please select at least one group to share with"
+msgstr "共有するためには少なくとも1グループと共有して下さい。"
+
+#. module: portal
+#: field:res.portal,group_id:0
+msgid "Group"
+msgstr "グループ"
+
+#. module: portal
+#: view:share.wizard:0
+#: field:share.wizard,group_ids:0
+msgid "Existing groups"
+msgstr "既存のグループ"
+
+#. module: portal
+#: model:ir.model,name:portal.model_res_portal_wizard_user
+msgid "Portal User Config"
+msgstr "ポータルユーザ設定"
+
+#. module: portal
+#: view:res.portal.wizard.user:0
+msgid "Portal User"
+msgstr "ポータルユーザ"
+
+#. module: portal
+#: model:res.groups,comment:portal.group_portal_manager
+msgid ""
+"Portal managers have access to the portal definitions, and can easily "
+"configure the users, access rights and menus of portal users."
+msgstr "ポータルマネジャはポータル定義へアクセスして、ユーザ、アクセス権、ユーザのポータルメニューの設定を簡単にできます。"
+
+#. module: portal
+#: help:res.portal,override_menu:0
+msgid "Enable this option to override the Menu Action of portal users"
+msgstr "ポータルユーザのメニューアクションを無効にするためにはこのオプションを有効にして下さい。"
+
+#. module: portal
+#: field:res.portal.wizard.user,user_email:0
+msgid "E-mail"
+msgstr "Eメール"
+
+#. module: portal
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr "選択した会社は、このユーザに許された会社ではありません。"
+
+#. module: portal
+#: view:res.portal:0
+#: field:res.portal,widget_ids:0
+msgid "Widgets"
+msgstr "ウィジェット"
+
+#. module: portal
+#: view:res.portal.wizard:0
+msgid "Send Invitations"
+msgstr "招待の送信"
+
+#. module: portal
+#: view:res.portal:0
+msgid "Widgets Assigned to Users"
+msgstr "ユーザ割当ウィジット"
+
+#. module: portal
+#: help:res.portal,url:0
+msgid "The url where portal users can connect to the server"
+msgstr "ポータルユーザがサーバに接続できるURL"
+
+#. module: portal
+#: model:res.groups,comment:portal.group_portal_officer
+msgid "Portal officers can create new portal users with the portal wizard."
+msgstr "ポータル役員はポータルウィザードを使って新しいポータルユーザを作成できます。"
+
+#. module: portal
+#: help:res.portal.wizard,message:0
+msgid "This text is included in the welcome email sent to the users"
+msgstr "このテキストはユーザに送信される歓迎Eメールに含まれます。"
+
+#. module: portal
+#: help:res.portal,menu_action_id:0
+msgid "If set, replaces the standard menu for the portal's users"
+msgstr "セットした場合、ポータルユーザのための標準メニューを置き換えます。"
+
+#. module: portal
+#: field:res.portal.wizard.user,lang:0
+msgid "Language"
+msgstr "言語"
+
+#. module: portal
+#: view:res.portal:0
+msgid "Portal Name"
+msgstr "ポータル名"
+
+#. module: portal
+#: view:res.portal.wizard.user:0
+msgid "Portal Users"
+msgstr "ポータルユーザ"
+
+#. module: portal
+#: field:res.portal,override_menu:0
+msgid "Override Menu Action of Users"
+msgstr "ユーザのメニューアクションの無効化"
+
+#. module: portal
+#: field:res.portal,menu_action_id:0
+msgid "Menu Action"
+msgstr "メニューアクション"
+
+#. module: portal
+#: field:res.portal.wizard.user,name:0
+msgid "User Name"
+msgstr "ユーザ名"
+
+#. module: portal
+#: help:res.portal,group_id:0
+msgid "The group corresponding to this portal"
+msgstr "このポータルに対応するグループ"
+
+#. module: portal
+#: model:ir.model,name:portal.model_res_portal_widget
+msgid "Portal Widgets"
+msgstr "ポータルウィジット"
+
+#. module: portal
+#: model:ir.model,name:portal.model_res_portal
+#: model:ir.module.category,name:portal.module_category_portal
+#: view:res.portal:0
+#: field:res.portal.widget,portal_id:0
+#: field:res.portal.wizard,portal_id:0
+msgid "Portal"
+msgstr "ポータル"
+
+#. module: portal
+#: code:addons/portal/wizard/portal_wizard.py:35
+#, python-format
+msgid "Your OpenERP account at %(company)s"
+msgstr "%(company)s 上のあなたのOpenERPアカウント"
+
+#. module: portal
+#: code:addons/portal/portal.py:107
+#: code:addons/portal/portal.py:184
+#, python-format
+msgid "%s Menu"
+msgstr "%s メニュー"
+
+#. module: portal
+#: help:res.portal.wizard,portal_id:0
+msgid "The portal in which new users must be added"
+msgstr "新しいユーザを追加すべきポータル"
+
+#. module: portal
+#: model:ir.model,name:portal.model_res_portal_wizard
+msgid "Portal Wizard"
+msgstr "ポータルウィザード"
+
+#. module: portal
+#: help:res.portal,widget_ids:0
+msgid "Widgets assigned to portal users"
+msgstr "ポータルユーザ割当ウィザード"
+
+#. module: portal
+#: code:addons/portal/wizard/portal_wizard.py:163
+#, python-format
+msgid "(missing url)"
+msgstr "(不足しているURL)"
+
+#. module: portal
+#: view:share.wizard:0
+#: field:share.wizard,user_ids:0
+msgid "Existing users"
+msgstr "既存ユーザ"
+
+#. module: portal
+#: field:res.portal.wizard.user,wizard_id:0
+msgid "Wizard"
+msgstr "ウィザード"
+
+#. module: portal
+#: help:res.portal.wizard.user,user_email:0
+msgid ""
+"Will be used as user login. Also necessary to send the account information "
+"to new users"
+msgstr "ユーザログインとして使用されます。新しいユーザへのアカウント情報を送信するためにも必要です。"
+
+#. module: portal
+#: field:res.portal,parent_menu_id:0
+msgid "Parent Menu"
+msgstr "親メニュー"
+
+#. module: portal
+#: field:res.portal,url:0
+msgid "URL"
+msgstr "URL"
+
+#. module: portal
+#: field:res.portal.widget,widget_id:0
+msgid "Widget"
+msgstr "ウィジット"
+
+#. module: portal
+#: help:res.portal.wizard.user,lang:0
+msgid "The language for the user's user interface"
+msgstr "ユーザのユーザインタフェースのための言語"
+
+#. module: portal
+#: view:res.portal.wizard:0
+msgid "Cancel"
+msgstr "キャンセル"
+
+#. module: portal
+#: view:res.portal:0
+msgid "Website"
+msgstr "Webサイト"
+
+#. module: portal
+#: view:res.portal:0
+msgid "Create Parent Menu"
+msgstr "親メニュー作成"
+
+#. module: portal
+#: view:res.portal.wizard:0
+msgid ""
+"The following text will be included in the welcome email sent to users."
+msgstr "次のテキストはユーザに送信する歓迎Eメールに含まれます。"
+
+#. module: portal
+#: code:addons/portal/wizard/portal_wizard.py:135
+#, python-format
+msgid "Email required"
+msgstr "Eメールは必須"
+
+#. module: portal
+#: model:ir.model,name:portal.model_res_users
+msgid "res.users"
+msgstr ""
+
+#. module: portal
+#: constraint:res.portal.wizard.user:0
+msgid "Invalid email address"
+msgstr "無効なEメールアドレスです。"
+
+#. module: portal
+#: code:addons/portal/wizard/portal_wizard.py:136
+#, python-format
+msgid ""
+"You must have an email address in your User Preferences to send emails."
+msgstr "Eメール送信のためのユーザ設定の中にEメールアドレスを持つ必要があります。"
+
+#. module: portal
+#: model:ir.model,name:portal.model_ir_ui_menu
+msgid "ir.ui.menu"
+msgstr ""
+
+#. module: portal
+#: view:res.portal:0
+#: view:res.portal.wizard:0
+#: field:res.portal.wizard,user_ids:0
+msgid "Users"
+msgstr "ユーザ"
+
+#. module: portal
+#: model:ir.actions.act_window,name:portal.portal_list_action
+#: model:ir.ui.menu,name:portal.portal_list_menu
+#: model:ir.ui.menu,name:portal.portal_menu
+#: view:res.portal:0
+msgid "Portals"
+msgstr "ポータル"
+
+#. module: portal
+#: help:res.portal,parent_menu_id:0
+msgid "The menu action opens the submenus of this menu item"
+msgstr "メニューアクションはこのメニュー項目のサブメニューを開きます。"
+
+#. module: portal
+#: field:res.portal.widget,sequence:0
+msgid "Sequence"
+msgstr "順序"
+
+#. module: portal
+#: field:res.users,partner_id:0
+msgid "Related Partner"
+msgstr "関連パートナ"
+
+#. module: portal
+#: view:res.portal:0
+msgid "Portal Menu"
+msgstr "ポータルメニュー"
+
+#. module: portal
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr "同じログインでは2つのユーザを持てません。"
+
+#. module: portal
+#: view:res.portal.wizard:0
+#: field:res.portal.wizard,message:0
+msgid "Invitation message"
+msgstr "招待メッセージ"
+
+#. module: portal
+#: code:addons/portal/wizard/portal_wizard.py:36
+#, python-format
+msgid ""
+"Dear %(name)s,\n"
+"\n"
+"You have been created an OpenERP account at %(url)s.\n"
+"\n"
+"Your login account data is:\n"
+"Database: %(db)s\n"
+"User: %(login)s\n"
+"Password: %(password)s\n"
+"\n"
+"%(message)s\n"
+"\n"
+"--\n"
+"OpenERP - Open Source Business Applications\n"
+"http://www.openerp.com\n"
+msgstr ""
+"%(name)s 様、\n"
+"\n"
+"あなたのOpenERPアカウントは作成されました。%(url)s\n"
+"\n"
+"あなたのログイン情報は次のとおりです:\n"
+"データベース:%(db)s\n"
+"ユーザ:%(login)s\n"
+"パスワード:%(password)s\n"
+"\n"
+"%(message)s\n"
+"\n"
+"--\n"
+"OpenERP - Open Source Business Applications\n"
+"http://www.openerp.com\n"
+
+#. module: portal
+#: model:res.groups,name:portal.group_portal_manager
+msgid "Manager"
+msgstr "マネジャ"
+
+#. module: portal
+#: help:res.portal.wizard.user,name:0
+msgid "The user's real name"
+msgstr "ユーザの本名"
+
+#. module: portal
+#: model:ir.actions.act_window,name:portal.address_wizard_action
+#: model:ir.actions.act_window,name:portal.partner_wizard_action
+#: view:res.portal.wizard:0
+msgid "Add Portal Access"
+msgstr "ポータルアクセスの追加"
+
+#. module: portal
+#: field:res.portal.wizard.user,partner_id:0
+msgid "Partner"
+msgstr "パートナ"
+
+#. module: portal
+#: model:ir.actions.act_window,help:portal.portal_list_action
+msgid ""
+"\n"
+"A portal helps defining specific views and rules for a group of users (the\n"
+"portal group). A portal menu, widgets and specific groups may be assigned "
+"to\n"
+"the portal's users.\n"
+" "
+msgstr ""
+"\n"
+"ポータルはユーザのグループ(ポータルグループ)のために特定のビューやルールの\n"
+"定義ができます。ポータルメニュー、ウィジット、特定のグループはポータルユーザに\n"
+"割り当てることができます。\n"
+" "
+
+#. module: portal
+#: model:ir.model,name:portal.model_share_wizard
+msgid "Share Wizard"
+msgstr "共有ウィザード"
+
+#. module: portal
+#: model:res.groups,name:portal.group_portal_officer
+msgid "Officer"
+msgstr "役員"
diff --git a/addons/process/i18n/ja.po b/addons/process/i18n/ja.po
new file mode 100644
index 00000000000..fbb68f8de5b
--- /dev/null
+++ b/addons/process/i18n/ja.po
@@ -0,0 +1,313 @@
+# Japanese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-06-01 23:37+0000\n"
+"Last-Translator: Akira Hiyama \n"
+"Language-Team: Japanese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-03 04:47+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
+
+#. module: process
+#: model:ir.model,name:process.model_process_node
+#: view:process.node:0
+#: view:process.process:0
+msgid "Process Node"
+msgstr "処理ノード"
+
+#. module: process
+#: help:process.process,active:0
+msgid ""
+"If the active field is set to False, it will allow you to hide the process "
+"without removing it."
+msgstr "アクティブ項目にFalseを設定すると、処理を削除することなく非表示にできます。"
+
+#. module: process
+#: field:process.node,menu_id:0
+msgid "Related Menu"
+msgstr "関連メニュー"
+
+#. module: process
+#: field:process.transition,action_ids:0
+msgid "Buttons"
+msgstr "ボタン"
+
+#. module: process
+#: view:process.node:0
+#: view:process.process:0
+msgid "Group By..."
+msgstr "グループ化…"
+
+#. module: process
+#: selection:process.node,kind:0
+msgid "State"
+msgstr "状態"
+
+#. module: process
+#: view:process.node:0
+msgid "Kind Of Node"
+msgstr "ノードの種類"
+
+#. module: process
+#: field:process.node,help_url:0
+msgid "Help URL"
+msgstr "ヘルプURL"
+
+#. module: process
+#: model:ir.actions.act_window,name:process.action_process_node_form
+#: model:ir.ui.menu,name:process.menu_process_node_form
+#: view:process.node:0
+#: view:process.process:0
+msgid "Process Nodes"
+msgstr "処理ノード"
+
+#. module: process
+#: view:process.process:0
+#: field:process.process,node_ids:0
+msgid "Nodes"
+msgstr "ノード"
+
+#. module: process
+#: view:process.node:0
+#: field:process.node,condition_ids:0
+#: view:process.process:0
+msgid "Conditions"
+msgstr "条件"
+
+#. module: process
+#: view:process.transition:0
+msgid "Search Process Transition"
+msgstr "処理遷移の検索"
+
+#. module: process
+#: field:process.condition,node_id:0
+msgid "Node"
+msgstr "ノード"
+
+#. module: process
+#: selection:process.transition.action,state:0
+msgid "Workflow Trigger"
+msgstr "ワークフロートリガー"
+
+#. module: process
+#: field:process.transition,note:0
+msgid "Description"
+msgstr "説明"
+
+#. module: process
+#: model:ir.model,name:process.model_process_transition_action
+msgid "Process Transitions Actions"
+msgstr "処理遷移アクション"
+
+#. module: process
+#: field:process.condition,model_id:0
+#: view:process.node:0
+#: field:process.node,model_id:0
+#: view:process.process:0
+#: field:process.process,model_id:0
+msgid "Object"
+msgstr "オブジェクト"
+
+#. module: process
+#: field:process.transition,source_node_id:0
+msgid "Source Node"
+msgstr "元ノード"
+
+#. module: process
+#: view:process.transition:0
+#: field:process.transition,transition_ids:0
+msgid "Workflow Transitions"
+msgstr "ワークフロー遷移"
+
+#. module: process
+#: field:process.transition.action,action:0
+msgid "Action ID"
+msgstr "アクションID"
+
+#. module: process
+#: model:ir.model,name:process.model_process_transition
+#: view:process.transition:0
+msgid "Process Transition"
+msgstr "処理遷移"
+
+#. module: process
+#: model:ir.model,name:process.model_process_condition
+msgid "Condition"
+msgstr "条件"
+
+#. module: process
+#: selection:process.transition.action,state:0
+msgid "Dummy"
+msgstr "ダミー"
+
+#. module: process
+#: model:ir.actions.act_window,name:process.action_process_form
+#: model:ir.ui.menu,name:process.menu_process_form
+msgid "Processes"
+msgstr "処理"
+
+#. module: process
+#: field:process.condition,name:0
+#: field:process.node,name:0
+#: field:process.process,name:0
+#: field:process.transition,name:0
+#: field:process.transition.action,name:0
+msgid "Name"
+msgstr "名前"
+
+#. module: process
+#: field:process.node,transition_in:0
+msgid "Starting Transitions"
+msgstr "遷移の始点"
+
+#. module: process
+#: view:process.node:0
+#: field:process.node,note:0
+#: view:process.process:0
+#: field:process.process,note:0
+#: view:process.transition:0
+msgid "Notes"
+msgstr "注記"
+
+#. module: process
+#: field:process.transition.action,transition_id:0
+msgid "Transition"
+msgstr "遷移"
+
+#. module: process
+#: view:process.process:0
+msgid "Search Process"
+msgstr "処理検索"
+
+#. module: process
+#: selection:process.node,kind:0
+#: field:process.node,subflow_id:0
+msgid "Subflow"
+msgstr "サブフロー"
+
+#. module: process
+#: field:process.process,active:0
+msgid "Active"
+msgstr "アクティブ"
+
+#. module: process
+#: view:process.transition:0
+msgid "Associated Groups"
+msgstr "関連グループ"
+
+#. module: process
+#: field:process.node,model_states:0
+msgid "States Expression"
+msgstr "状態式"
+
+#. module: process
+#: selection:process.transition.action,state:0
+msgid "Action"
+msgstr "アクション"
+
+#. module: process
+#: field:process.node,flow_start:0
+msgid "Starting Flow"
+msgstr "開始フロー"
+
+#. module: process
+#: field:process.condition,model_states:0
+msgid "Expression"
+msgstr "式"
+
+#. module: process
+#: field:process.transition,group_ids:0
+msgid "Required Groups"
+msgstr "グループは必須"
+
+#. module: process
+#: view:process.node:0
+#: view:process.process:0
+msgid "Incoming Transitions"
+msgstr "内向き遷移"
+
+#. module: process
+#: field:process.transition.action,state:0
+msgid "Type"
+msgstr "タイプ"
+
+#. module: process
+#: field:process.node,transition_out:0
+msgid "Ending Transitions"
+msgstr "遷移の終点"
+
+#. module: process
+#: model:ir.model,name:process.model_process_process
+#: field:process.node,process_id:0
+#: view:process.process:0
+msgid "Process"
+msgstr "処理"
+
+#. module: process
+#: view:process.node:0
+msgid "Search ProcessNode"
+msgstr "処理ノード検索"
+
+#. module: process
+#: view:process.node:0
+#: view:process.process:0
+msgid "Other Conditions"
+msgstr "他の条件"
+
+#. module: process
+#: model:ir.ui.menu,name:process.menu_process
+msgid "Enterprise Process"
+msgstr "企業の処理"
+
+#. module: process
+#: view:process.transition:0
+msgid "Actions"
+msgstr "アクション"
+
+#. module: process
+#: view:process.node:0
+#: view:process.process:0
+msgid "Properties"
+msgstr "属性"
+
+#. module: process
+#: model:ir.actions.act_window,name:process.action_process_transition_form
+#: model:ir.ui.menu,name:process.menu_process_transition_form
+msgid "Process Transitions"
+msgstr "処理遷移"
+
+#. module: process
+#: field:process.transition,target_node_id:0
+msgid "Target Node"
+msgstr "対象ノード"
+
+#. module: process
+#: field:process.node,kind:0
+msgid "Kind of Node"
+msgstr "ノードの種類"
+
+#. module: process
+#: view:process.node:0
+#: view:process.process:0
+msgid "Outgoing Transitions"
+msgstr "外向き遷移"
+
+#. module: process
+#: view:process.node:0
+#: view:process.process:0
+msgid "Transitions"
+msgstr "遷移"
+
+#. module: process
+#: selection:process.transition.action,state:0
+msgid "Object Method"
+msgstr "オブジェクトメソッド"
diff --git a/addons/procurement/i18n/ja.po b/addons/procurement/i18n/ja.po
new file mode 100644
index 00000000000..c1a3125723e
--- /dev/null
+++ b/addons/procurement/i18n/ja.po
@@ -0,0 +1,1001 @@
+# Japanese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:37+0000\n"
+"PO-Revision-Date: 2012-06-02 05:39+0000\n"
+"Last-Translator: Akira Hiyama \n"
+"Language-Team: Japanese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-03 04:47+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
+
+#. module: procurement
+#: view:make.procurement:0
+msgid "Ask New Products"
+msgstr "新製品を求める"
+
+#. module: procurement
+#: model:ir.ui.menu,name:procurement.menu_stock_sched
+msgid "Schedulers"
+msgstr "スケジュール"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_make_procurement
+msgid "Make Procurements"
+msgstr "調達の作成"
+
+#. module: procurement
+#: help:procurement.order.compute.all,automatic:0
+msgid ""
+"Triggers an automatic procurement for all products that have a virtual stock "
+"under 0. You should probably not use this option, we suggest using a MTO "
+"configuration on products."
+msgstr ""
+"実質上の在庫が0未満である全製品のために自動調達のトリガーです。恐らくこのオプションは使用すべきではありません。製品のMTO(make to "
+"order:受注生産)設定を使用することを推奨します。"
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Group By..."
+msgstr "グループ化…"
+
+#. module: procurement
+#: help:stock.warehouse.orderpoint,procurement_draft_ids:0
+msgid "Draft procurement of the product and location of that orderpoint"
+msgstr "ドラフトの製品の調達とその発注点の場所"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:291
+#, python-format
+msgid "No supplier defined for this product !"
+msgstr "この製品には仕入先が定義されていません。"
+
+#. module: procurement
+#: field:make.procurement,uom_id:0
+msgid "Unit of Measure"
+msgstr "単位"
+
+#. module: procurement
+#: field:procurement.order,procure_method:0
+msgid "Procurement Method"
+msgstr "調達方法"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:307
+#, python-format
+msgid "No address defined for the supplier"
+msgstr "仕入先の住所が定義されていません。"
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.action_procurement_compute
+msgid "Compute Stock Minimum Rules Only"
+msgstr "在庫最小ルールのみ計算"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Temporary Procurement Exceptions"
+msgstr "一時的な調達例外"
+
+#. module: procurement
+#: field:procurement.order,company_id:0
+#: field:stock.warehouse.orderpoint,company_id:0
+msgid "Company"
+msgstr "会社"
+
+#. module: procurement
+#: field:procurement.order,product_uos_qty:0
+msgid "UoS Quantity"
+msgstr "販売単位の数量"
+
+#. module: procurement
+#: view:procurement.order:0
+#: field:procurement.order,name:0
+msgid "Reason"
+msgstr "理由"
+
+#. module: procurement
+#: view:procurement.order.compute:0
+msgid "Compute Procurements"
+msgstr "調達計算"
+
+#. module: procurement
+#: field:procurement.order,message:0
+msgid "Latest error"
+msgstr "最新のエラー"
+
+#. module: procurement
+#: help:mrp.property,composition:0
+msgid "Not used in computations, for information purpose only."
+msgstr "情報目的のみであるため、計算には使用されません。"
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,procurement_id:0
+msgid "Latest procurement"
+msgstr "最新の調達"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Notes"
+msgstr "注記"
+
+#. module: procurement
+#: selection:procurement.order,procure_method:0
+msgid "on order"
+msgstr "オーダー中"
+
+#. module: procurement
+#: help:procurement.order,message:0
+msgid "Exception occurred while computing procurement orders."
+msgstr "調達オーダーの計算中に例外が発生しました。"
+
+#. module: procurement
+#: help:procurement.order,state:0
+msgid ""
+"When a procurement is created the state is set to 'Draft'.\n"
+" If the procurement is confirmed, the state is set to 'Confirmed'. "
+" \n"
+"After confirming the state is set to 'Running'.\n"
+" If any exception arises in the order then the state is set to 'Exception'.\n"
+" Once the exception is removed the state becomes 'Ready'.\n"
+" It is in 'Waiting'. state when the procurement is waiting for another one "
+"to finish."
+msgstr ""
+"調達が生成されると、状態はドラフトにセットされます。\n"
+" 調達が確認されると、状態は確認済にセットされます。\n"
+"確認の後に状態は実行中にセットされます。 \n"
+" オーダーで何らかの例外が発生すると、状態は例外にセットされます。\n"
+" 例外が取り除かれると、状態は準備完了になります。\n"
+" 調達が他の調達の完了を待っている時は、待機中の状態になります。"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Permanent Procurement Exceptions"
+msgstr "継続する調達の例外"
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Minimum Stock Rules Search"
+msgstr "最小在庫ルールの検索"
+
+#. module: procurement
+#: view:procurement.order.compute.all:0
+msgid "Scheduler Parameters"
+msgstr "スケジューラのパラメータ"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_stock_move
+msgid "Stock Move"
+msgstr "在庫移動"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_procurement_order_compute_all
+msgid "Compute all schedulers"
+msgstr "全スケジュールを計算"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Planification"
+msgstr "計画化"
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Ready"
+msgstr "準備完了"
+
+#. module: procurement
+#: field:procurement.order.compute.all,automatic:0
+msgid "Automatic orderpoint"
+msgstr "自動発注点"
+
+#. module: procurement
+#: code:addons/procurement/schedulers.py:123
+#, python-format
+msgid ""
+"Here is the procurement scheduling report.\n"
+"\n"
+" Start Time: %s \n"
+" End Time: %s \n"
+" Total Procurements processed: %d \n"
+" Procurements with exceptions: %d \n"
+" Skipped Procurements (scheduled date outside of scheduler range) %d "
+"\n"
+"\n"
+" Exceptions:\n"
+msgstr ""
+"これは調達スケジュールレポートです。\n"
+"\n"
+" 開始時間:%s \n"
+" 終了時間:%s \n"
+" 合計調達処理:%d \n"
+" 調達の例外:%d \n"
+" スキップした調達(スケジューラーの範囲外の予定日):%d \n"
+"\n"
+" 例外:\n"
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Confirmed"
+msgstr "確認済"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Retry"
+msgstr "再試行"
+
+#. module: procurement
+#: help:stock.warehouse.orderpoint,product_max_qty:0
+msgid ""
+"When the virtual stock goes below the Min Quantity, OpenERP generates a "
+"procurement to bring the virtual stock to the Quantity specified as Max "
+"Quantity."
+msgstr "実質上の在庫が最小数量を下回った時に、OpenERPは最大数量として定義された数量まで実質上の在庫を持ってくるために調達を生成します。"
+
+#. module: procurement
+#: view:procurement.order.compute:0
+#: view:procurement.orderpoint.compute:0
+msgid "Parameters"
+msgstr "パラメータ"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Confirm"
+msgstr "確認"
+
+#. module: procurement
+#: help:procurement.order,origin:0
+msgid ""
+"Reference of the document that created this Procurement.\n"
+"This is automatically completed by OpenERP."
+msgstr ""
+"この調達を作成したドキュメントへの参照です。\n"
+"これはOpenERPによって自動的に完了します。"
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Procurement Orders to Process"
+msgstr "調達オーダーの処理"
+
+#. module: procurement
+#: constraint:res.company:0
+msgid "Error! You can not create recursive companies."
+msgstr "エラー。再帰的な関係となる会社を作ることはできません。"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:386
+#, python-format
+msgid "Procurement '%s' is in exception: "
+msgstr "調達 %s は例外です: "
+
+#. module: procurement
+#: field:procurement.order,priority:0
+msgid "Priority"
+msgstr "優先度"
+
+#. module: procurement
+#: view:procurement.order:0
+#: field:procurement.order,state:0
+msgid "State"
+msgstr "状態"
+
+#. module: procurement
+#: field:procurement.order,location_id:0
+#: view:stock.warehouse.orderpoint:0
+#: field:stock.warehouse.orderpoint,location_id:0
+msgid "Location"
+msgstr "場所"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_stock_picking
+msgid "Picking List"
+msgstr "集荷リスト"
+
+#. module: procurement
+#: field:make.procurement,warehouse_id:0
+#: view:stock.warehouse.orderpoint:0
+#: field:stock.warehouse.orderpoint,warehouse_id:0
+msgid "Warehouse"
+msgstr "倉庫"
+
+#. module: procurement
+#: selection:stock.warehouse.orderpoint,logic:0
+msgid "Best price (not yet active!)"
+msgstr "最良価格(まだアクティブでない)"
+
+#. module: procurement
+#: code:addons/procurement/schedulers.py:111
+#, python-format
+msgid "PROC %d: from stock - %3.2f %-5s - %s"
+msgstr "調達 %d: 元在庫 - %3.2f %-5s - %s"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Product & Location"
+msgstr "製品と場所"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_procurement_order_compute
+msgid "Compute Procurement"
+msgstr "調達計算"
+
+#. module: procurement
+#: field:stock.move,procurements:0
+msgid "Procurements"
+msgstr "調達"
+
+#. module: procurement
+#: field:res.company,schedule_range:0
+msgid "Scheduler Range Days"
+msgstr "スケジューラ範囲日数"
+
+#. module: procurement
+#: model:ir.actions.act_window,help:procurement.procurement_action
+msgid ""
+"A procurement order is used to record a need for a specific product at a "
+"specific location. A procurement order is usually created automatically from "
+"sales orders, a Pull Logistics rule or Minimum Stock Rules. When the "
+"procurement order is confirmed, it automatically creates the necessary "
+"operations to fullfil the need: purchase order proposition, manufacturing "
+"order, etc."
+msgstr ""
+"調達オーダーは特定の場所で特定の製品のためのニーズを記録するために使われます。調達オーダーは通常、仕入オーダー、プル型物流ルールまたは最小在庫ルールから自"
+"動的に作成されます。調達オーダーが確認された時、ニーズを埋めるために必要な操作を自動的に作成します:仕入オーダーの提案、製造オーダーなど。"
+
+#. module: procurement
+#: field:make.procurement,date_planned:0
+msgid "Planned Date"
+msgstr "予定日"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Group By"
+msgstr "グループ化"
+
+#. module: procurement
+#: field:make.procurement,qty:0
+#: field:procurement.order,product_qty:0
+msgid "Quantity"
+msgstr "数量"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:379
+#, python-format
+msgid "Not enough stock and no minimum orderpoint rule defined."
+msgstr "十分な在庫がなく、かつ最小発注点ルールが定義されていません。"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:137
+#, python-format
+msgid "Invalid action !"
+msgstr "無効なアクションです。"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "References"
+msgstr "参照"
+
+#. module: procurement
+#: view:product.product:0
+#: field:product.product,orderpoint_ids:0
+msgid "Minimum Stock Rule"
+msgstr "最小在庫ルール"
+
+#. module: procurement
+#: view:res.company:0
+msgid "Configuration"
+msgstr "設定"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:328
+#, python-format
+msgid ""
+"Please check the quantity in procurement order(s), it should not be 0 or "
+"less!"
+msgstr "調達オーダーの数量をチェックして下さい。0やそれ以下であってはなりません。"
+
+#. module: procurement
+#: help:procurement.order,procure_method:0
+msgid ""
+"If you encode manually a Procurement, you probably want to use a make to "
+"order method."
+msgstr "調達を手動で作成する場合、あなたは恐らくオーダー方法のための型を使うことを望むでしょう。"
+
+#. module: procurement
+#: model:ir.ui.menu,name:procurement.menu_stock_procurement
+msgid "Automatic Procurements"
+msgstr "自動調達"
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,product_max_qty:0
+msgid "Max Quantity"
+msgstr "最大数量"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_procurement_order
+#: model:process.process,name:procurement.process_process_procurementprocess0
+#: view:procurement.order:0
+msgid "Procurement"
+msgstr "調達"
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.procurement_action
+msgid "Procurement Orders"
+msgstr "調達オーダー"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "To Fix"
+msgstr "修正"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Exceptions"
+msgstr "例外"
+
+#. module: procurement
+#: model:process.node,note:procurement.process_node_serviceonorder0
+msgid "Assignment from Production or Purchase Order."
+msgstr "生産または仕入オーダーから割り当てて下さい。"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_mrp_property
+msgid "Property"
+msgstr "属性"
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.act_make_procurement
+#: view:make.procurement:0
+msgid "Procurement Request"
+msgstr "調達要求"
+
+#. module: procurement
+#: view:procurement.orderpoint.compute:0
+msgid "Compute Stock"
+msgstr "在庫計算"
+
+#. module: procurement
+#: help:stock.warehouse.orderpoint,product_min_qty:0
+msgid ""
+"When the virtual stock goes below the Min Quantity specified for this field, "
+"OpenERP generates a procurement to bring the virtual stock to the Max "
+"Quantity."
+msgstr ""
+"実質上の在庫がこの項目のために定義された最小数量を下回った時に、OpenERPは最大数量まで実質上の在庫を持ってくるために調達を生成します。"
+
+#. module: procurement
+#: model:process.process,name:procurement.process_process_serviceproductprocess0
+msgid "Service"
+msgstr "サービス"
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,procurement_draft_ids:0
+msgid "Related Procurement Orders"
+msgstr "関連する調達オーダー"
+
+#. module: procurement
+#: view:procurement.orderpoint.compute:0
+msgid ""
+"Wizard checks all the stock minimum rules and generate procurement order."
+msgstr "ウィザードは全ての在庫最小ルールをチェックし調達オーダーを生成します。"
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,product_min_qty:0
+msgid "Min Quantity"
+msgstr "最小数量"
+
+#. module: procurement
+#: selection:procurement.order,priority:0
+msgid "Urgent"
+msgstr "緊急"
+
+#. module: procurement
+#: selection:mrp.property,composition:0
+msgid "plus"
+msgstr "+"
+
+#. module: procurement
+#: constraint:stock.move:0
+msgid "You can not move products from or to a location of the type view."
+msgstr "タイプビューの場所から、あるいは場所へは製品を動かすことはできません。"
+
+#. module: procurement
+#: help:stock.warehouse.orderpoint,active:0
+msgid ""
+"If the active field is set to False, it will allow you to hide the "
+"orderpoint without removing it."
+msgstr "アクティブな項目がFalseにセットされている場合は、発注点を削除することなく非表示にできます。"
+
+#. module: procurement
+#: help:procurement.orderpoint.compute,automatic:0
+msgid "If the stock of a product is under 0, it will act like an orderpoint"
+msgstr "製品の在庫が0未満の時は、それは発注点のように動作します。"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Procurement Lines"
+msgstr "調達行"
+
+#. module: procurement
+#: view:procurement.order.compute.all:0
+msgid ""
+"This wizard allows you to run all procurement, production and/or purchase "
+"orders that should be processed based on their configuration. By default, "
+"the scheduler is launched automatically every night by OpenERP. You can use "
+"this menu to force it to be launched now. Note that it runs in the "
+"background, you may have to wait for a few minutes until it has finished "
+"computing."
+msgstr ""
+"このウィザードはそれらの設定に基づき実行されるべき全ての調達、生産や仕入オーダーを実行することができます。デフォルトでは、スケジューラはOpenERPによ"
+"って毎夜自動的に起動されます。このメニューを使うと強制的に今起動することができます。ただ、それはバックグラウンドで実行されるので、計算が終わるまで数分待た"
+"されるかもしれません。"
+
+#. module: procurement
+#: view:procurement.order:0
+#: field:procurement.order,note:0
+msgid "Note"
+msgstr "注記"
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Draft"
+msgstr "ドラフト"
+
+#. module: procurement
+#: view:procurement.order.compute:0
+msgid "This wizard will schedule procurements."
+msgstr "ウィザードは調達をスケジュールします。"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Status"
+msgstr "状態"
+
+#. module: procurement
+#: selection:procurement.order,priority:0
+msgid "Normal"
+msgstr "通常"
+
+#. module: procurement
+#: constraint:stock.move:0
+msgid "You try to assign a lot which is not from the same product"
+msgstr "違う製品のロットを割り当てることはできません。"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:383
+#, python-format
+msgid "Not enough stock."
+msgstr "十分な在庫ではありません。"
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,active:0
+msgid "Active"
+msgstr "アクティブ"
+
+#. module: procurement
+#: model:process.node,name:procurement.process_node_procureproducts0
+msgid "Procure Products"
+msgstr "調達製品"
+
+#. module: procurement
+#: field:procurement.order,date_planned:0
+msgid "Scheduled date"
+msgstr "予定日"
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Exception"
+msgstr "例外"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:381
+#, python-format
+msgid "No minimum orderpoint rule defined."
+msgstr "最小発注点ルールが定義されていません。"
+
+#. module: procurement
+#: code:addons/procurement/schedulers.py:151
+#, python-format
+msgid "Automatic OP: %s"
+msgstr "自動発注点:%s"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_procurement_orderpoint_compute
+msgid "Automatic Order Point"
+msgstr "自動発注点"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_stock_warehouse_orderpoint
+msgid "Minimum Inventory Rule"
+msgstr "最小在庫ルール"
+
+#. module: procurement
+#: help:stock.warehouse.orderpoint,qty_multiple:0
+msgid "The procurement quantity will be rounded up to this multiple."
+msgstr "調達数量はこの倍数に切り上げされます。"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_res_company
+msgid "Companies"
+msgstr "会社"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Extra Information"
+msgstr "追加情報"
+
+#. module: procurement
+#: help:procurement.order,name:0
+msgid "Procurement name."
+msgstr "調達名"
+
+#. module: procurement
+#: constraint:stock.move:0
+msgid "You must assign a production lot for this product"
+msgstr "この製品に生産ロットを割り当てて下さい。"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Procurement Reason"
+msgstr "調達理由"
+
+#. module: procurement
+#: sql_constraint:stock.warehouse.orderpoint:0
+msgid "Qty Multiple must be greater than zero."
+msgstr "数量倍数は0より大きい必要があります。"
+
+#. module: procurement
+#: selection:stock.warehouse.orderpoint,logic:0
+msgid "Order to Max"
+msgstr "最大まで発注"
+
+#. module: procurement
+#: sql_constraint:stock.picking:0
+msgid "Reference must be unique per Company!"
+msgstr "参照は会社ごとに固有でなければいけません。"
+
+#. module: procurement
+#: field:procurement.order,date_close:0
+msgid "Date Closed"
+msgstr "終了日"
+
+#. module: procurement
+#: field:mrp.property,composition:0
+msgid "Properties composition"
+msgstr "属性の構成"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:327
+#, python-format
+msgid "Data Insufficient !"
+msgstr "データが不足しています。"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_mrp_property_group
+#: field:mrp.property,group_id:0
+#: field:mrp.property.group,name:0
+msgid "Property Group"
+msgstr "属性グループ"
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Misc"
+msgstr "その他"
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Locations"
+msgstr "場所"
+
+#. module: procurement
+#: selection:procurement.order,procure_method:0
+msgid "from stock"
+msgstr "在庫から"
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "General Information"
+msgstr "一般情報"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Run Procurement"
+msgstr "調達実行"
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Done"
+msgstr "完了"
+
+#. module: procurement
+#: view:make.procurement:0
+#: view:procurement.order:0
+#: selection:procurement.order,state:0
+#: view:procurement.order.compute:0
+#: view:procurement.order.compute.all:0
+#: view:procurement.orderpoint.compute:0
+msgid "Cancel"
+msgstr "キャンセル"
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,logic:0
+msgid "Reordering Mode"
+msgstr "再オーダーのモード"
+
+#. module: procurement
+#: field:procurement.order,origin:0
+msgid "Source Document"
+msgstr "基となるドキュメント"
+
+#. module: procurement
+#: selection:procurement.order,priority:0
+msgid "Not urgent"
+msgstr "緊急外"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:297
+#, python-format
+msgid "No default supplier defined for this product"
+msgstr "この製品には仕入先が定義されていません。"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Late"
+msgstr "遅延"
+
+#. module: procurement
+#: view:board.board:0
+msgid "Procurements in Exception"
+msgstr "調達の例外"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Details"
+msgstr "詳細"
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.procurement_action5
+#: model:ir.actions.act_window,name:procurement.procurement_action_board
+#: model:ir.actions.act_window,name:procurement.procurement_exceptions
+#: model:ir.ui.menu,name:procurement.menu_stock_procurement_action
+#: view:procurement.order:0
+msgid "Procurement Exceptions"
+msgstr "調達の例外"
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.act_procurement_2_stock_warehouse_orderpoint
+#: model:ir.actions.act_window,name:procurement.act_product_product_2_stock_warehouse_orderpoint
+#: model:ir.actions.act_window,name:procurement.act_stock_warehouse_2_stock_warehouse_orderpoint
+#: model:ir.actions.act_window,name:procurement.action_orderpoint_form
+#: model:ir.ui.menu,name:procurement.menu_stock_order_points
+#: view:product.product:0
+#: view:stock.warehouse.orderpoint:0
+msgid "Minimum Stock Rules"
+msgstr "最小在庫ルール"
+
+#. module: procurement
+#: field:procurement.order,close_move:0
+msgid "Close Move at end"
+msgstr "終わりに移動して閉じる"
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,qty_multiple:0
+msgid "Qty Multiple"
+msgstr "数量倍数"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Scheduled Date"
+msgstr "予定日"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_product_product
+#: field:make.procurement,product_id:0
+#: view:procurement.order:0
+#: field:procurement.order,product_id:0
+#: field:stock.warehouse.orderpoint,product_id:0
+msgid "Product"
+msgstr "製品"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Temporary"
+msgstr "一時的"
+
+#. module: procurement
+#: field:mrp.property,description:0
+#: field:mrp.property.group,description:0
+msgid "Description"
+msgstr "説明"
+
+#. module: procurement
+#: selection:mrp.property,composition:0
+msgid "min"
+msgstr "最小"
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Quantity Rules"
+msgstr "数量のルール"
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Running"
+msgstr "実行中"
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,product_uom:0
+msgid "Product UOM"
+msgstr "製品単位"
+
+#. module: procurement
+#: model:process.node,name:procurement.process_node_serviceonorder0
+msgid "Make to Order"
+msgstr "オーダーの作成"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "UOM"
+msgstr "単位"
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Waiting"
+msgstr "待機中"
+
+#. module: procurement
+#: model:ir.actions.act_window,help:procurement.action_orderpoint_form
+msgid ""
+"You can define your minimum stock rules, so that OpenERP will automatically "
+"create draft manufacturing orders or purchase quotations according to the "
+"stock level. Once the virtual stock of a product (= stock on hand minus all "
+"confirmed orders and reservations) is below the minimum quantity, OpenERP "
+"will generate a procurement request to increase the stock up to the maximum "
+"quantity."
+msgstr ""
+"最小在庫ルールを定義できます。それによってOpenERPは自動的に在庫レベルに応じて、ドラフトの製造オーダーまたは仕入見積を作成します。ひとたび、製品の実"
+"質上の在庫(全ての確認済オーダーと予約を在庫から差し引く)が最小在庫を下回ったなら、OpenERPは在庫を最大数量まで増加させるための調達要求を生成します"
+"。"
+
+#. module: procurement
+#: field:procurement.order,move_id:0
+msgid "Reservation"
+msgstr "予約"
+
+#. module: procurement
+#: model:process.node,note:procurement.process_node_procureproducts0
+msgid "The way to procurement depends on the product type."
+msgstr "調達方法は製品タイプに依存します。"
+
+#. module: procurement
+#: view:make.procurement:0
+msgid ""
+"This wizard will plan the procurement for this product. This procurement may "
+"generate task, production orders or purchase orders."
+msgstr "このウィザードはこの製品のための調達を計画します。この調達は生産オーダーまたは仕入オーダーのタスクを生成します。"
+
+#. module: procurement
+#: view:res.company:0
+msgid "MRP & Logistics Scheduler"
+msgstr "MRPと物流のスケジューラ"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:138
+#, python-format
+msgid "Cannot delete Procurement Order(s) which are in %s state!"
+msgstr "%s 状態であるため調達オーダーは削除できません。"
+
+#. module: procurement
+#: sql_constraint:res.company:0
+msgid "The company name must be unique !"
+msgstr "会社名は固有でなければいけません。"
+
+#. module: procurement
+#: field:mrp.property,name:0
+#: field:stock.warehouse.orderpoint,name:0
+msgid "Name"
+msgstr "名前"
+
+#. module: procurement
+#: selection:mrp.property,composition:0
+msgid "max"
+msgstr "最大"
+
+#. module: procurement
+#: field:procurement.order,product_uos:0
+msgid "Product UoS"
+msgstr "製品販売単位"
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:356
+#, python-format
+msgid "from stock: products assigned."
+msgstr "在庫から:製品は割当済"
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.action_compute_schedulers
+#: model:ir.ui.menu,name:procurement.menu_stock_proc_schedulers
+#: view:procurement.order.compute.all:0
+msgid "Compute Schedulers"
+msgstr "スケジューラを計算"
+
+#. module: procurement
+#: model:ir.actions.act_window,help:procurement.procurement_exceptions
+msgid ""
+"Procurement Orders represent the need for a certain quantity of products, at "
+"a given time, in a given location. Sales Orders are one typical source of "
+"Procurement Orders (but these are distinct documents). Depending on the "
+"procurement parameters and the product configuration, the procurement engine "
+"will attempt to satisfy the need by reserving products from stock, ordering "
+"products from a supplier, or passing a manufacturing order, etc. A "
+"Procurement Exception occurs when the system cannot find a way to fulfill a "
+"procurement. Some exceptions will resolve themselves automatically, but "
+"others require manual intervention (those are identified by a specific error "
+"message)."
+msgstr ""
+"調達オーダーは与えられた時間と場所において製品の確かなすうりょおうのためのニーズを表しています。販売オーダーは調達オーダーのひとつの典型的な元(しかし、こ"
+"れらは別個のドキュメントです)となっています。調達パラメータ、製品の設定に依存して、調達エンジンは在庫から製品を予約する、仕入先に製品をオーダーする、製造"
+"オーダーを出すなどによりニーズを満たそうとします。システムが調達を満たす方法を見つけることができない場合、調達の例外が発生します。幾つかの例外は自動的に自"
+"分自身で解決します。しかし、他は手動による介入を要求します(それらは特定のエラーメッセージにより識別されます)。"
+
+#. module: procurement
+#: field:procurement.order,product_uom:0
+msgid "Product UoM"
+msgstr "製品単位"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Search Procurement"
+msgstr "調達の検索"
+
+#. module: procurement
+#: help:res.company,schedule_range:0
+msgid ""
+"This is the time frame analysed by the scheduler when computing "
+"procurements. All procurements that are not between today and today+range "
+"are skipped for future computation."
+msgstr ""
+"これは、計算による調達の時のスケジューラによる時間枠分析です。本日から本日+範囲の範囲にない全ての調達は、今後の計算のためにスキップされます。"
+
+#. module: procurement
+#: selection:procurement.order,priority:0
+msgid "Very Urgent"
+msgstr "非常に緊急"
+
+#. module: procurement
+#: field:procurement.orderpoint.compute,automatic:0
+msgid "Automatic Orderpoint"
+msgstr "自動発注点"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Procurement Details"
+msgstr "調達の詳細"
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Procurement started late"
+msgstr "遅れて開始された調達"
+
+#. module: procurement
+#: constraint:product.product:0
+msgid "Error: Invalid ean code"
+msgstr "エラー:無効な商品識別番号です。"
+
+#. module: procurement
+#: code:addons/procurement/schedulers.py:152
+#, python-format
+msgid "SCHEDULER"
+msgstr "スケジューラ"
+
+#. module: procurement
+#: code:addons/procurement/schedulers.py:88
+#, python-format
+msgid "PROC %d: on order - %3.2f %-5s - %s"
+msgstr "調達 %d:オーダー中 - %3.2f %-5s - %s"
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index 2263a441363..db313e65353 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -81,6 +81,7 @@ class procurement_order(osv.osv):
_name = "procurement.order"
_description = "Procurement"
_order = 'priority,date_planned desc'
+ _inherit = ['mail.thread']
_log_create = False
_columns = {
'name': fields.char('Reason', size=64, required=True, help='Procurement name.'),
@@ -103,7 +104,7 @@ class procurement_order(osv.osv):
" a make to order method."),
'note': fields.text('Note'),
- 'message': fields.char('Latest error', size=64, help="Exception occurred while computing procurement orders."),
+ 'message': fields.char('Latest error', size=124, help="Exception occurred while computing procurement orders."),
'state': fields.selection([
('draft','Draft'),
('cancel','Cancelled'),
@@ -276,7 +277,7 @@ class procurement_order(osv.osv):
if not res:
return False
return True
-
+
def check_buy(self, cr, uid, ids):
""" Checks product type.
@return: True or Product Id.
@@ -287,24 +288,26 @@ class procurement_order(osv.osv):
if procurement.product_id.product_tmpl_id.supply_method <> 'buy':
return False
if not procurement.product_id.seller_ids:
- cr.execute('update procurement_order set message=%s where id=%s',
- (_('No supplier defined for this product !'), procurement.id))
+ message = _('No supplier defined for this product !')
+ self.message_append_note(cr, uid, [procurement.id], body=message)
+ cr.execute('update procurement_order set message=%s where id=%s', (message, procurement.id))
return False
partner = procurement.product_id.seller_id #Taken Main Supplier of Product of Procurement.
if not partner:
- cr.execute('update procurement_order set message=%s where id=%s',
- (_('No default supplier defined for this product'), procurement.id))
+ message = _('No default supplier defined for this product')
+ self.message_append_note(cr, uid, [procurement.id], body=message)
+ cr.execute('update procurement_order set message=%s where id=%s', (message, procurement.id))
return False
-
if user.company_id and user.company_id.partner_id:
if partner.id == user.company_id.partner_id.id:
return False
address_id = partner_obj.address_get(cr, uid, [partner.id], ['delivery'])['delivery']
if not address_id:
- cr.execute('update procurement_order set message=%s where id=%s',
- (_('No address defined for the supplier'), procurement.id))
+ message = _('No address defined for the supplier')
+ self.message_append_note(cr, uid, [procurement.id], body=message)
+ cr.execute('update procurement_order set message=%s where id=%s', (message, procurement.id))
return False
return True
@@ -346,14 +349,18 @@ class procurement_order(osv.osv):
move_obj.action_confirm(cr, uid, [id], context=context)
self.write(cr, uid, [procurement.id], {'move_id': id, 'close_move': 1})
self.write(cr, uid, ids, {'state': 'confirmed', 'message': ''})
+ self.confirm_send_note(cr, uid, ids, context)
return True
def action_move_assigned(self, cr, uid, ids, context=None):
""" Changes procurement state to Running and writes message.
@return: True
"""
+ message = _('From stock: products assigned.')
self.write(cr, uid, ids, {'state': 'running',
- 'message': _('from stock: products assigned.')})
+ 'message': message}, context=context)
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ self.running_send_note(cr, uid, ids, context=context)
return True
def _check_make_to_stock_service(self, cr, uid, procurement, context=None):
@@ -383,8 +390,9 @@ class procurement_order(osv.osv):
message = _("Not enough stock.")
if message:
- self.log(cr, uid, procurement.id, _("Procurement '%s' is in exception: ") % (procurement.name) + message)
+ message = _("Procurement '%s' is in exception: ") % (procurement.name) + message
cr.execute('update procurement_order set message=%s where id=%s', (message, procurement.id))
+ self.message_append_note(cr, uid, [procurement.id], body=message, context=context)
return ok
def action_produce_assign_service(self, cr, uid, ids, context=None):
@@ -393,6 +401,7 @@ class procurement_order(osv.osv):
"""
for procurement in self.browse(cr, uid, ids, context=context):
self.write(cr, uid, [procurement.id], {'state': 'running'})
+ self.running_send_note(cr, uid, ids, context=None)
return True
def action_produce_assign_product(self, cr, uid, ids, context=None):
@@ -427,6 +436,7 @@ class procurement_order(osv.osv):
if len(todo):
move_obj.write(cr, uid, todo, {'state': 'assigned'})
self.write(cr, uid, ids, {'state': 'cancel'})
+ self.cancel_send_note(cr, uid, ids, context=None)
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_trigger(uid, 'procurement.order', id, cr)
@@ -451,6 +461,7 @@ class procurement_order(osv.osv):
@return: True
"""
res = self.write(cr, uid, ids, {'state': 'ready'})
+ self.ready_send_note(cr, uid, ids, context=None)
return res
def action_done(self, cr, uid, ids):
@@ -463,11 +474,39 @@ class procurement_order(osv.osv):
if procurement.close_move and (procurement.move_id.state <> 'done'):
move_obj.action_done(cr, uid, [procurement.move_id.id])
res = self.write(cr, uid, ids, {'state': 'done', 'date_close': time.strftime('%Y-%m-%d')})
+ self.done_send_note(cr, uid, ids, context=None)
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_trigger(uid, 'procurement.order', id, cr)
return res
+ # ----------------------------------------
+ # OpenChatter methods and notifications
+ # ----------------------------------------
+
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(procurement_order, self).create(cr, uid, vals, context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Procurement has been created."), context=context)
+
+ def confirm_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Procurement has been confirmed."), context=context)
+
+ def running_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Procurement has been set to running."), context=context)
+
+ def ready_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Procurement has been set to ready."), context=context)
+
+ def cancel_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Procurement has been cancelled."), context=context)
+
+ def done_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Procurement has been done."), context=context)
+
procurement_order()
class StockPicking(osv.osv):
diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml
index 5343d6aaf0f..427b699e0f6 100644
--- a/addons/procurement/procurement_view.xml
+++ b/addons/procurement/procurement_view.xml
@@ -96,6 +96,9 @@
+
+
+
diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py
index 446463ecf4d..410a802c810 100644
--- a/addons/procurement/schedulers.py
+++ b/addons/procurement/schedulers.py
@@ -19,15 +19,15 @@
#
##############################################################################
-import time
from datetime import datetime
from dateutil.relativedelta import relativedelta
+import netsvc
+import pooler
from osv import osv
+from osv import fields
from tools.translate import _
from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
import tools
-import netsvc
-import pooler
class procurement_order(osv.osv):
_inherit = 'procurement.order'
@@ -69,7 +69,7 @@ class procurement_order(osv.osv):
cr.commit()
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
maxdate = (datetime.today() + relativedelta(days=company.schedule_range)).strftime(tools.DEFAULT_SERVER_DATE_FORMAT)
- start_date = time.strftime('%Y-%m-%d, %Hh %Mm %Ss')
+ start_date = fields.datetime.now()
offset = 0
report = []
report_total = 0
@@ -113,13 +113,14 @@ class procurement_order(osv.osv):
proc.product_id.name,))
report_except += 1
+
if use_new_cursor:
cr.commit()
offset += len(ids)
if not ids: break
- end_date = time.strftime('%Y-%m-%d, %Hh %Mm %Ss')
+ end_date = fields.datetime.now()
if uid:
- request = self.pool.get('res.request')
+ # Chatter: old res.request is now a chatter on res.users, id=uid
summary = _("""Here is the procurement scheduling report.
Start Time: %s
@@ -130,12 +131,7 @@ class procurement_order(osv.osv):
Exceptions:\n""") % (start_date, end_date, report_total, report_except, report_later)
summary += '\n'.join(report)
- request.create(cr, uid,
- {'name': "Procurement Processing Report.",
- 'act_from': uid,
- 'act_to': uid,
- 'body': summary,
- })
+ self.pool.get('res.users').message_append_note(cr, uid, [uid], body=summary, context=context)
if use_new_cursor:
cr.commit()
@@ -237,7 +233,6 @@ class procurement_order(osv.osv):
orderpoint_obj = self.pool.get('stock.warehouse.orderpoint')
location_obj = self.pool.get('stock.location')
procurement_obj = self.pool.get('procurement.order')
- request_obj = self.pool.get('res.request')
wf_service = netsvc.LocalService("workflow")
report = []
offset = 0
@@ -293,12 +288,8 @@ class procurement_order(osv.osv):
if use_new_cursor:
cr.commit()
if user_id and report:
- request_obj.create(cr, uid, {
- 'name': 'Orderpoint report.',
- 'act_from': user_id,
- 'act_to': user_id,
- 'body': '\n'.join(report)
- })
+ # Chatter: old res.request is now a chatter on res.users, id=uid
+ self.pool.get('res.users').message_append_note(cr, uid, [user_id], body='\n'.join(report), subject=_('Orderpoint report'), context=context)
if use_new_cursor:
cr.commit()
cr.close()
diff --git a/addons/product/i18n/ja.po b/addons/product/i18n/ja.po
new file mode 100644
index 00000000000..326bcce9365
--- /dev/null
+++ b/addons/product/i18n/ja.po
@@ -0,0 +1,2334 @@
+# Japanese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:37+0000\n"
+"PO-Revision-Date: 2012-06-02 06:21+0000\n"
+"Last-Translator: Akira Hiyama \n"
+"Language-Team: Japanese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-03 04:47+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
+
+#. module: product
+#: model:product.template,name:product.product_product_ram512_product_template
+msgid "DDR 512MB PC400"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,rows:0
+msgid "Number of Layers"
+msgstr "層の数"
+
+#. module: product
+#: constraint:product.pricelist.item:0
+msgid ""
+"Error ! You cannot assign the Main Pricelist as Other Pricelist in PriceList "
+"Item!"
+msgstr "エラー。価格表項目の中に他の価格表としてメインの価格表を割り当てることはできません。"
+
+#. module: product
+#: help:product.pricelist.item,product_tmpl_id:0
+msgid ""
+"Set a template if this rule only apply to a template of product. Keep empty "
+"for all products"
+msgstr "このルールを製品のテンプレートのみに適用するのであれば、テンプレートを設定して下さい。全ての製品のために空を保って下さい。"
+
+#. module: product
+#: help:product.product,virtual_available:0
+msgid ""
+"Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n"
+"In a context with a single Stock Location, this includes goods stored at "
+"this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the "
+"Stock Location of this Warehouse, or any of its children.\n"
+"In a context with a single Shop, this includes goods stored in the Stock "
+"Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location typed as "
+"'internal'."
+msgstr ""
+"予測数量(手作業による数量の計算 - 出て行く + 入ってくる)\n"
+"単数の在庫場所:商品がこの場所または子の何れかの場所に格納されるものが含まれます。\n"
+"単数の倉庫:商品がこの倉庫の在庫場所または子の何れかの場所に格納されるものが含まれます。\n"
+"単数の店:商品がこの店の倉庫の在庫場所または子の何れかの場所に格納されるものが含まれます。\n"
+"他:商品が在庫場所タイプが内部となっている何れかの場所に格納されるものが含まれます。"
+
+#. module: product
+#: model:product.category,name:product.cat1
+msgid "Sellable"
+msgstr "販売可能"
+
+#. module: product
+#: model:product.template,name:product.product_product_mb2_product_template
+msgid "Mainboard ASUStek A7V8X-X"
+msgstr ""
+
+#. module: product
+#: help:product.template,seller_qty:0
+msgid "This is minimum quantity to purchase from Main Supplier."
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.uom_day
+msgid "Day"
+msgstr "日"
+
+#. module: product
+#: view:product.product:0
+msgid "UoM"
+msgstr "単位"
+
+#. module: product
+#: model:product.template,name:product.product_product_pc2_product_template
+msgid "Basic+ PC (assembly on order)"
+msgstr ""
+
+#. module: product
+#: field:product.product,incoming_qty:0
+msgid "Incoming"
+msgstr "入ってくる"
+
+#. module: product
+#: help:res.partner,property_product_pricelist:0
+msgid ""
+"This pricelist will be used, instead of the default one, for sales to the "
+"current partner"
+msgstr "この価格リストは現在のパートナに販売するために、デフォルトのそれに代って使用されます。"
+
+#. module: product
+#: field:product.template,seller_qty:0
+msgid "Supplier Quantity"
+msgstr "仕入数量"
+
+#. module: product
+#: selection:product.template,mes_type:0
+msgid "Fixed"
+msgstr "固定"
+
+#. module: product
+#: code:addons/product/pricelist.py:178
+#, python-format
+msgid "Warning !"
+msgstr "警告"
+
+#. module: product
+#: model:ir.actions.report.xml,name:product.report_product_pricelist
+#: model:ir.model,name:product.model_product_pricelist
+#: field:product.product,price:0
+#: field:product.product,pricelist_id:0
+#: view:product.supplierinfo:0
+msgid "Pricelist"
+msgstr "価格リスト"
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Base Prices"
+msgstr "基本価格"
+
+#. module: product
+#: field:product.pricelist.item,name:0
+msgid "Rule Name"
+msgstr "ルール名"
+
+#. module: product
+#: field:product.product,code:0
+#: field:product.product,default_code:0
+msgid "Reference"
+msgstr "参照"
+
+#. module: product
+#: help:pricelist.partnerinfo,min_quantity:0
+msgid ""
+"The minimal quantity to trigger this rule, expressed in the supplier UoM if "
+"any or in the default UoM of the product otherrwise."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_24_product_template
+msgid "Keyboard"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:143
+#, python-format
+msgid ""
+"Conversion from Product UoM %s to Default UoM %s is not possible as they "
+"both belong to different Category!."
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_dozen
+msgid "Dozen"
+msgstr ""
+
+#. module: product
+#: selection:product.template,cost_method:0
+msgid "Average Price"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,name:0
+msgid "Explicit rule name for this pricelist line."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_cpu1_product_template
+msgid "Processor AMD Athlon XP 1800+"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_20_product_template
+msgid "HDD on demand"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,price_list:0
+msgid "PriceList"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "UOM"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_unit
+msgid "PCE"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "Miscelleanous"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_worker0_product_template
+msgid "Worker"
+msgstr ""
+
+#. module: product
+#: help:product.template,sale_ok:0
+msgid ""
+"Determines if the product can be visible in the list of product within a "
+"selection from a sale order line."
+msgstr ""
+
+#. module: product
+#: model:product.pricelist.version,name:product.ver0
+msgid "Default Public Pricelist Version"
+msgstr ""
+
+#. module: product
+#: selection:product.template,cost_method:0
+msgid "Standard Price"
+msgstr ""
+
+#. module: product
+#: model:product.pricelist.type,name:product.pricelist_type_sale
+#: field:res.partner,property_product_pricelist:0
+msgid "Sale Pricelist"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+#: field:product.template,type:0
+msgid "Product Type"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_form_config_action
+msgid ""
+"Create a product form for everything you buy or sell. Specify a supplier if "
+"the product can be purchased."
+msgstr ""
+
+#. module: product
+#: view:product.uom:0
+msgid " e.g: 1 * (this unit) = ratio * (reference unit)"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:418
+#, python-format
+msgid "Products: "
+msgstr ""
+
+#. module: product
+#: field:product.category,parent_id:0
+msgid "Parent Category"
+msgstr ""
+
+#. module: product
+#: help:product.template,procure_method:0
+msgid ""
+"'Make to Stock': When needed, take from the stock or wait until re-"
+"supplying. 'Make to Order': When needed, purchase or produce for the "
+"procurement request."
+msgstr ""
+
+#. module: product
+#: model:process.node,note:product.process_node_supplier0
+msgid "Supplier name, price, product code, ..."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_hdd3_product_template
+msgid "HDD Seagate 7200.8 160GB"
+msgstr ""
+
+#. module: product
+#: field:product.product,ean13:0
+msgid "EAN13"
+msgstr ""
+
+#. module: product
+#: field:product.template,seller_id:0
+msgid "Main Supplier"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_ul_form_action
+#: model:ir.model,name:product.model_product_packaging
+#: model:ir.ui.menu,name:product.menu_product_ul_form_action
+#: view:product.packaging:0
+#: view:product.product:0
+#: view:product.ul:0
+msgid "Packaging"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: field:product.template,categ_id:0
+msgid "Category"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,min_quantity:0
+msgid ""
+"The rule only applies if the partner buys/sells more than this quantity."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_woodmm0_product_template
+msgid "Wood 2mm"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,qty1:0
+msgid "Quantity-1"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,ul_qty:0
+msgid "The number of packages by layer"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,qty:0
+msgid "Quantity by Package"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,state:0
+msgid "Status"
+msgstr ""
+
+#. module: product
+#: help:product.template,categ_id:0
+msgid "Select category for the current product"
+msgstr ""
+
+#. module: product
+#: field:product.product,outgoing_qty:0
+msgid "Outgoing"
+msgstr ""
+
+#. module: product
+#: selection:product.uom,uom_type:0
+msgid "Reference UoM for this category"
+msgstr ""
+
+#. module: product
+#: model:product.price.type,name:product.list_price
+#: field:product.product,lst_price:0
+msgid "Public Price"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,qty5:0
+msgid "Quantity-5"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_10
+msgid "IT components"
+msgstr ""
+
+#. module: product
+#: field:product.template,product_manager:0
+msgid "Product Manager"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,product_name:0
+msgid "Supplier Product Name"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_pc3_product_template
+msgid "Medium PC"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_normal_action_puchased
+msgid ""
+"Products can be purchased and/or sold. They can be raw materials, stockable "
+"products, consumables or services. The Product form contains detailed "
+"information about your products related to procurement logistics, sales "
+"price, product category, suppliers and so on."
+msgstr ""
+
+#. module: product
+#: help:product.product,qty_available:0
+msgid ""
+"Current quantity of products.\n"
+"In a context with a single Stock Location, this includes goods stored at "
+"this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the "
+"Stock Location of this Warehouse, or any of its children.\n"
+"In a context with a single Shop, this includes goods stored in the Stock "
+"Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location typed as "
+"'internal'."
+msgstr ""
+
+#. module: product
+#: view:product.pricelist:0
+msgid "Products Price Search"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,description_sale:0
+msgid "Sale Description"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Storage Localisation"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,length:0
+msgid "The length of the package"
+msgstr ""
+
+#. module: product
+#: help:product.template,weight_net:0
+msgid "The net weight in Kg."
+msgstr ""
+
+#. module: product
+#: help:product.template,state:0
+msgid "Tells the user if he can use the product or not."
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,min_quantity:0
+#: field:product.supplierinfo,qty:0
+msgid "Quantity"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,height:0
+msgid "Height"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.version,date_end:0
+msgid "Ending date for this pricelist version to be valid."
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.cat0
+msgid "All products"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_pricelist_partnerinfo
+msgid "pricelist.partnerinfo"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,qty2:0
+msgid "Quantity-2"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,qty3:0
+msgid "Quantity-3"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Codes"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,qty4:0
+msgid "Quantity-4"
+msgstr ""
+
+#. module: product
+#: view:res.partner:0
+msgid "Sales & Purchases"
+msgstr ""
+
+#. module: product
+#: model:product.uom.categ,name:product.uom_categ_wtime
+msgid "Working Time"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_pricelist_action2
+#: model:ir.actions.act_window,help:product.product_pricelist_action_for_purchase
+msgid ""
+"A price list contains rules to be evaluated in order to compute the purchase "
+"or sales price for all the partners assigned to a price list. Price lists "
+"have several versions (2010, 2011, Promotion of February 2010, etc.) and "
+"each version has several rules. Example: the customer price of a product "
+"category will be based on the supplier price multiplied by 1.80."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_metalcleats0_product_template
+msgid "Metal Cleats"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:175
+#, python-format
+msgid "Cannot change the category of existing UoM '%s'."
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_uom_categ
+msgid "Product uom categ"
+msgstr ""
+
+#. module: product
+#: model:product.ul,name:product.product_ul_box
+msgid "Box 20x20x40"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Price Computation"
+msgstr ""
+
+#. module: product
+#: model:res.groups,name:product.group_uos
+msgid "Product UoS View"
+msgstr ""
+
+#. module: product
+#: field:product.template,purchase_ok:0
+msgid "Can be Purchased"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_cpu2_product_template
+msgid "High speed processor config"
+msgstr ""
+
+#. module: product
+#: model:process.transition,note:product.process_transition_supplierofproduct0
+msgid ""
+"1 or several supplier(s) can be linked to a product. All information stands "
+"in the product form."
+msgstr ""
+
+#. module: product
+#: help:product.uom,category_id:0
+msgid ""
+"Quantity conversions may happen automatically between Units of Measure in "
+"the same category, according to their respective ratios."
+msgstr ""
+
+#. module: product
+#: help:product.packaging,width:0
+msgid "The width of the package"
+msgstr ""
+
+#. module: product
+#: selection:product.category,type:0
+msgid "View"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_template_action_tree
+msgid "Product Templates"
+msgstr ""
+
+#. module: product
+#: field:product.category,parent_left:0
+msgid "Left Parent"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_restaurantexpenses0_product_template
+msgid "Restaurant Expenses"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,qty:0
+msgid "The total number of products you can put by pallet or box."
+msgstr ""
+
+#. module: product
+#: constraint:product.packaging:0
+#: constraint:product.product:0
+msgid "Error: Invalid ean code"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,min_quantity:0
+msgid "Min. Quantity"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_price_type
+msgid "Price Type"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:363
+#, python-format
+msgid ""
+"New UoM '%s' must belong to same UoM category '%s' as of old UoM '%s'. If "
+"you need to change the unit of measure, you may desactivate this product "
+"from the 'Procurement & Locations' tab and create a new one."
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Max. Margin"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Base Price"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_consultant_product_template
+msgid "Service on Timesheet"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_fan2_product_template
+msgid "Silent fan"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,name:0
+msgid "Supplier of this product"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.version,active:0
+msgid ""
+"When a version is duplicated it is set to non active, so that the dates do "
+"not overlaps with original version. You should change the dates and "
+"reactivate the pricelist"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_kitshelfofcm0_product_template
+msgid "KIT Shelf of 100cm"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,name:0
+msgid "Supplier"
+msgstr ""
+
+#. module: product
+#: field:product.product,qty_available:0
+msgid "Quantity On Hand"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_26_product_template
+msgid "Kit Keyboard + Mouse"
+msgstr ""
+
+#. module: product
+#: field:product.price.type,name:0
+msgid "Price Name"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_arm_product_template
+msgid "Cabinet"
+msgstr ""
+
+#. module: product
+#: help:product.product,incoming_qty:0
+msgid ""
+"Quantity of products that are planned to arrive.\n"
+"In a context with a single Stock Location, this includes goods arriving to "
+"this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods arriving to the "
+"Stock Location of this Warehouse, or any of its children.\n"
+"In a context with a single Shop, this includes goods arriving to the Stock "
+"Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods arriving to any Stock Location typed as "
+"'internal'."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_woodentable0_product_template
+msgid "Wooden Table"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_cpu3_product_template
+msgid "Processor AMD Athlon XP 2200+"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.action_product_price_list
+#: model:ir.model,name:product.model_product_price_list
+#: view:product.price_list:0
+#: report:product.pricelist:0
+#: field:product.pricelist.version,pricelist_id:0
+msgid "Price List"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Suppliers"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "To Purchase"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,min_qty:0
+msgid ""
+"The minimal quantity to purchase to this supplier, expressed in the supplier "
+"Product UoM if not empty, in the default unit of measure of the product "
+"otherwise."
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "New Price ="
+msgstr ""
+
+#. module: product
+#: help:pricelist.partnerinfo,price:0
+msgid ""
+"This price will be considered as a price for the supplier UoM if any or the "
+"default Unit of Measure of the product otherwise"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_accessories
+msgid "Accessories"
+msgstr ""
+
+#. module: product
+#: field:product.template,sale_delay:0
+msgid "Customer Lead Time"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_25_product_template
+msgid "Mouse"
+msgstr ""
+
+#. module: product
+#: help:product.template,uos_id:0
+msgid ""
+"Used by companies that manage two units of measure: invoicing and inventory "
+"management. For example, in food industries, you will manage a stock of ham "
+"but invoice in Kg. Keep empty to use the default UOM."
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Min. Margin"
+msgstr ""
+
+#. module: product
+#: field:product.category,child_id:0
+msgid "Child Categories"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.version,date_end:0
+msgid "End Date"
+msgstr ""
+
+#. module: product
+#: view:product.price_list:0
+msgid "Print"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: field:product.ul,type:0
+msgid "Type"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_pricelist_action2
+#: model:ir.actions.act_window,name:product.product_pricelist_action_for_purchase
+#: model:ir.ui.menu,name:product.menu_product_pricelist_action2
+#: model:ir.ui.menu,name:product.menu_product_pricelist_main
+msgid "Pricelists"
+msgstr ""
+
+#. module: product
+#: field:product.product,partner_ref:0
+msgid "Customer ref"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Miscellaneous"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.type,key:0
+msgid "Key"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Rules Test Match"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,product_id:0
+msgid ""
+"Set a product if this rule only apply to one product. Keep empty for all "
+"products"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Procurement & Locations"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_kitchendesignproject0_product_template
+msgid "Kitchen Design Project"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.uom_hour
+msgid "Hour"
+msgstr ""
+
+#. module: product
+#: selection:product.template,state:0
+msgid "In Development"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:363
+#, python-format
+msgid "UoM categories Mismatch!"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_shelfofcm1_product_template
+msgid "Shelf of 200cm"
+msgstr ""
+
+#. module: product
+#: view:product.uom:0
+msgid "Ratio & Precision"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_gram
+msgid "g"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_11
+msgid "IT components kits"
+msgstr ""
+
+#. module: product
+#: selection:product.category,type:0
+#: selection:product.template,state:0
+msgid "Normal"
+msgstr ""
+
+#. module: product
+#: model:process.node,name:product.process_node_supplier0
+#: view:product.supplierinfo:0
+msgid "Supplier Information"
+msgstr ""
+
+#. module: product
+#: field:product.price.type,currency_id:0
+#: report:product.pricelist:0
+#: field:product.pricelist,currency_id:0
+msgid "Currency"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_ram_product_template
+msgid "DDR 256MB PC400"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_category_action_form
+#: model:ir.ui.menu,name:product.menu_product_category_action_form
+#: view:product.category:0
+msgid "Product Categories"
+msgstr ""
+
+#. module: product
+#: view:product.uom:0
+msgid " e.g: 1 * (reference unit) = ratio * (this unit)"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_uom_form_action
+msgid ""
+"Create and manage the units of measure you want to be used in your system. "
+"You can define a conversion rate between several Units of Measure within the "
+"same category."
+msgstr ""
+
+#. module: product
+#: field:product.packaging,weight:0
+msgid "Total Package Weight"
+msgstr ""
+
+#. module: product
+#: field:product.template,seller_info_id:0
+msgid "unknown"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,code:0
+msgid "The code of the transport unit."
+msgstr ""
+
+#. module: product
+#: help:product.template,standard_price:0
+msgid ""
+"Product's cost for accounting stock valuation. It is the base price for the "
+"supplier price."
+msgstr ""
+
+#. module: product
+#: view:product.price.type:0
+msgid "Products Price Type"
+msgstr ""
+
+#. module: product
+#: field:product.product,price_extra:0
+msgid "Variant Price Extra"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_fan_product_template
+msgid "Regular case fan 80mm"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_supplierinfo
+msgid "Information about a product supplier"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,description_purchase:0
+msgid "Purchase Description"
+msgstr ""
+
+#. module: product
+#: constraint:product.pricelist.version:0
+msgid "You cannot have 2 pricelist versions that overlap!"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,delay:0
+msgid ""
+"Lead time in days between the confirmation of the purchase order and the "
+"reception of the products in your warehouse. Used by the scheduler for "
+"automatic computation of the purchase order planning."
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_pricelist_action
+msgid ""
+"There can be more than one version of a pricelist. Here you can create and "
+"manage new versions of a price list. Some examples of versions: 2010, 2011, "
+"Summer Promotion, etc."
+msgstr ""
+
+#. module: product
+#: selection:product.template,type:0
+msgid "Stockable Product"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,code:0
+msgid "Code"
+msgstr ""
+
+#. module: product
+#: view:product.supplierinfo:0
+msgid "Seq"
+msgstr ""
+
+#. module: product
+#: view:product.price_list:0
+msgid "Calculate Product Price per Unit Based on Pricelist Version."
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_ul
+msgid "Shipping Unit"
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,suppinfo_id:0
+msgid "Partner Information"
+msgstr ""
+
+#. module: product
+#: selection:product.ul,type:0
+#: model:product.uom.categ,name:product.product_uom_categ_unit
+msgid "Unit"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Information"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Products Listprices Items"
+msgstr ""
+
+#. module: product
+#: view:product.packaging:0
+msgid "Other Info"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.version,items_id:0
+msgid "Price List Items"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_uom_categ_form_action
+msgid ""
+"Create and manage the units of measure categories you want to be used in "
+"your system. If several units of measure are in the same category, they can "
+"be converted to each other. For example, in the unit of measure category "
+"\"Time\", you will have the following UoM: Hours, Days."
+msgstr ""
+
+#. module: product
+#: selection:product.uom,uom_type:0
+msgid "Bigger than the reference UoM"
+msgstr ""
+
+#. module: product
+#: field:product.category,parent_right:0
+msgid "Right Parent"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "To Sell"
+msgstr ""
+
+#. module: product
+#: help:product.product,outgoing_qty:0
+msgid ""
+"Quantity of products that are planned to leave.\n"
+"In a context with a single Stock Location, this includes goods leaving from "
+"this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods leaving from the "
+"Stock Location of this Warehouse, or any of its children.\n"
+"In a context with a single Shop, this includes goods leaving from the Stock "
+"Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods leaving from any Stock Location typed as "
+"'internal'."
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_services0
+msgid "Marketable Services"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_surcharge:0
+msgid "Price Surcharge"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_mb1_product_template
+msgid "Mainboard ASUStek A7N8X"
+msgstr ""
+
+#. module: product
+#: field:product.product,packaging:0
+msgid "Logistical Units"
+msgstr ""
+
+#. module: product
+#: field:product.category,complete_name:0
+#: field:product.category,name:0
+#: field:product.pricelist.type,name:0
+#: field:product.pricelist.version,name:0
+#: view:product.product:0
+#: field:product.product,name_template:0
+#: field:product.template,name:0
+#: field:product.ul,name:0
+#: field:product.uom,name:0
+#: field:product.uom.categ,name:0
+msgid "Name"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_woodlintelm0_product_template
+msgid "Wood Lintel 4m"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_normal_action
+#: model:ir.actions.act_window,help:product.product_normal_action_sell
+msgid ""
+"You must define a Product for everything you buy or sell. Products can be "
+"raw materials, stockable products, consumables or services. The Product form "
+"contains detailed information about your products related to procurement "
+"logistics, sales price, product category, suppliers and so on."
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_kgm
+msgid "kg"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_meter
+msgid "m"
+msgstr ""
+
+#. module: product
+#: selection:product.template,state:0
+msgid "Obsolete"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_km
+msgid "km"
+msgstr ""
+
+#. module: product
+#: help:product.template,cost_method:0
+msgid ""
+"Standard Price: the cost price is fixed and recomputed periodically (usually "
+"at the end of the year), Average Price: the cost price is recomputed at each "
+"reception of products."
+msgstr ""
+
+#. module: product
+#: help:product.category,sequence:0
+msgid ""
+"Gives the sequence order when displaying a list of product categories."
+msgstr ""
+
+#. module: product
+#: field:product.uom,factor:0
+#: field:product.uom,factor_inv:0
+msgid "Ratio"
+msgstr ""
+
+#. module: product
+#: help:product.template,purchase_ok:0
+msgid ""
+"Determine if the product is visible in the list of products within a "
+"selection from a purchase order line."
+msgstr ""
+
+#. module: product
+#: field:product.template,weight_net:0
+msgid "Net Weight"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,width:0
+msgid "Width"
+msgstr ""
+
+#. module: product
+#: help:product.price.type,field:0
+msgid "Associated field in the product form."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Unit of Measure"
+msgstr ""
+
+#. module: product
+#: field:product.template,procure_method:0
+msgid "Procurement Method"
+msgstr ""
+
+#. module: product
+#: report:product.pricelist:0
+msgid "Printing Date"
+msgstr ""
+
+#. module: product
+#: field:product.template,uos_id:0
+msgid "Unit of Sale"
+msgstr ""
+
+#. module: product
+#: help:product.template,seller_delay:0
+msgid ""
+"This is the average delay in days between the purchase order confirmation "
+"and the reception of goods for this product and for the default supplier. It "
+"is used by the scheduler to order requests based on reordering delays."
+msgstr ""
+
+#. module: product
+#: help:product.template,seller_id:0
+msgid "Main Supplier who has highest priority in Supplier List."
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_services
+#: view:product.product:0
+msgid "Services"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_form_config_action
+msgid "Create or Import Products"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,base_pricelist_id:0
+msgid "If Other Pricelist"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_normal_action
+#: model:ir.actions.act_window,name:product.product_normal_action_puchased
+#: model:ir.actions.act_window,name:product.product_normal_action_sell
+#: model:ir.actions.act_window,name:product.product_normal_action_tree
+#: model:ir.ui.menu,name:product.menu_products
+#: model:ir.ui.menu,name:product.prod_config_main
+#: view:product.product:0
+msgid "Products"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,rows:0
+msgid "The number of layers on a pallet or box"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,base:0
+msgid "The mode for computing the price for this rule."
+msgstr ""
+
+#. module: product
+#: view:product.packaging:0
+#: view:product.product:0
+msgid "Pallet Dimension"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:668
+#, python-format
+msgid " (copy)"
+msgstr ""
+
+#. module: product
+#: field:product.template,seller_ids:0
+msgid "Partners"
+msgstr ""
+
+#. module: product
+#: help:product.template,sale_delay:0
+msgid ""
+"This is the average delay in days between the confirmation of the customer "
+"order and the delivery of the finished products. It's the time you promise "
+"to your customers."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Second UoM"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:143
+#, python-format
+msgid "Error !"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_uom_form_action
+#: model:ir.ui.menu,name:product.menu_product_uom_form_action
+#: model:ir.ui.menu,name:product.next_id_16
+#: view:product.uom:0
+msgid "Units of Measure"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,min_qty:0
+msgid "Minimal Quantity"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_pc
+msgid "PC"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,product_code:0
+msgid ""
+"This supplier's product code will be used when printing a request for "
+"quotation. Keep empty to use the internal one."
+msgstr ""
+
+#. module: product
+#: selection:product.template,procure_method:0
+msgid "Make to Stock"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_version_id:0
+msgid "Price List Version"
+msgstr ""
+
+#. module: product
+#: field:product.product,virtual_available:0
+msgid "Quantity Available"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,sequence:0
+msgid ""
+"Gives the order in which the pricelist items will be checked. The evaluation "
+"gives highest priority to lowest sequence and stops as soon as a matching "
+"item is found."
+msgstr ""
+
+#. module: product
+#: selection:product.template,type:0
+msgid "Consumable"
+msgstr ""
+
+#. module: product
+#: help:product.price.type,currency_id:0
+msgid "The currency the field is expressed in."
+msgstr ""
+
+#. module: product
+#: help:product.template,weight:0
+msgid "The gross weight in Kg."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_sidepanel0_product_template
+msgid "Side Panel"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Procurement"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Weights"
+msgstr ""
+
+#. module: product
+#: field:product.uom,category_id:0
+msgid "UoM Category"
+msgstr ""
+
+#. module: product
+#: field:product.template,loc_rack:0
+msgid "Rack"
+msgstr ""
+
+#. module: product
+#: field:product.template,uom_po_id:0
+msgid "Purchase Unit of Measure"
+msgstr ""
+
+#. module: product
+#: field:product.template,supply_method:0
+msgid "Supply Method"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_category_action
+msgid ""
+"Here is a list of all your products classified by category. You can click a "
+"category to get the list of all products linked to this category or to a "
+"child of this category."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Group by..."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_cpu_gen_product_template
+msgid "Regular processor config"
+msgstr ""
+
+#. module: product
+#: help:product.template,type:0
+msgid ""
+"Will change the way procurements are processed. Consumable are product where "
+"you don't manage stock."
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.version,date_start:0
+msgid "Start Date"
+msgstr ""
+
+#. module: product
+#: help:product.template,produce_delay:0
+msgid ""
+"Average delay in days to produce this product. This is only for the "
+"production order and, if it is a multi-level bill of material, it's only for "
+"the level of this product. Different lead times will be summed for all "
+"levels and purchase orders."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_pc1_product_template
+msgid "Basic PC"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist,active:0
+msgid ""
+"If the active field is set to False, it will allow you to hide the pricelist "
+"without removing it."
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_cm
+msgid "cm"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_uom
+msgid "Product Unit of Measure"
+msgstr ""
+
+#. module: product
+#: constraint:product.template:0
+msgid ""
+"Error: The default UOM and the purchase UOM must be in the same category."
+msgstr ""
+
+#. module: product
+#: field:product.uom,rounding:0
+msgid "Rounding Precision"
+msgstr ""
+
+#. module: product
+#: view:product.uom:0
+msgid "Unit of Measure Properties"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_shelf1_product_template
+msgid "Rack 200cm"
+msgstr ""
+
+#. module: product
+#: selection:product.template,supply_method:0
+msgid "Buy"
+msgstr ""
+
+#. module: product
+#: view:product.uom.categ:0
+msgid "Units of Measure categories"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,weight_ul:0
+msgid "The weight of the empty UL"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_woodmm10_product_template
+msgid "Wood 10mm"
+msgstr ""
+
+#. module: product
+#: selection:product.uom,uom_type:0
+msgid "Smaller than the reference UoM"
+msgstr ""
+
+#. module: product
+#: field:product.price.type,active:0
+#: field:product.pricelist,active:0
+#: field:product.pricelist.version,active:0
+#: field:product.product,active:0
+#: field:product.uom,active:0
+msgid "Active"
+msgstr ""
+
+#. module: product
+#: field:product.product,price_margin:0
+msgid "Variant Price Margin"
+msgstr ""
+
+#. module: product
+#: sql_constraint:product.uom:0
+msgid "The conversion ratio for a unit of measure cannot be 0!"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,ean:0
+msgid "The EAN code of the package unit."
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,product_uom:0
+msgid "This comes from the product form."
+msgstr ""
+
+#. module: product
+#: field:product.packaging,weight_ul:0
+msgid "Empty Package Weight"
+msgstr ""
+
+#. module: product
+#: field:product.price.type,field:0
+msgid "Product Field"
+msgstr ""
+
+#. module: product
+#: field:product.template,mes_type:0
+msgid "Measure Type"
+msgstr ""
+
+#. module: product
+#: help:product.uom,factor:0
+msgid ""
+"How many times this UoM is smaller than the reference UoM in this category:\n"
+"1 * (reference unit) = ratio * (this unit)"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_price_type_action
+#: model:ir.ui.menu,name:product.menu_product_price_type
+msgid "Price Types"
+msgstr ""
+
+#. module: product
+#: help:product.template,uom_id:0
+msgid "Default Unit of Measure used for all stock operation."
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_misc0
+msgid "Misc"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_pc4_product_template
+msgid "Customizable PC"
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,price:0
+msgid "Unit Price"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_7
+#: model:product.template,name:product.product_product_1_product_template
+msgid "Onsite Intervention"
+msgstr ""
+
+#. module: product
+#: model:product.pricelist,name:product.list0
+msgid "Public Pricelist"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_marketableproduct0
+msgid "Marketable Products"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,product_code:0
+msgid "Supplier Product Code"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Default UOM"
+msgstr ""
+
+#. module: product
+#: selection:product.ul,type:0
+msgid "Pallet"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,ul_qty:0
+msgid "Package by layer"
+msgstr ""
+
+#. module: product
+#: field:product.template,warranty:0
+msgid "Warranty (months)"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,categ_id:0
+msgid ""
+"Set a category of product if this rule only apply to products of a category "
+"and his children. Keep empty for all products"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_product
+#: model:process.node,name:product.process_node_product0
+#: model:process.process,name:product.process_process_productprocess0
+#: field:product.packaging,product_id:0
+#: field:product.pricelist.item,product_id:0
+#: view:product.product:0
+#: field:product.supplierinfo,product_id:0
+#: model:res.request.link,name:product.req_link_product
+msgid "Product"
+msgstr ""
+
+#. module: product
+#: selection:product.template,supply_method:0
+msgid "Produce"
+msgstr ""
+
+#. module: product
+#: selection:product.template,procure_method:0
+msgid "Make to Order"
+msgstr ""
+
+#. module: product
+#: help:product.template,supply_method:0
+msgid ""
+"Produce will generate production order or tasks, according to the product "
+"type. Buy will trigger purchase orders when requested."
+msgstr ""
+
+#. module: product
+#: field:product.product,variants:0
+msgid "Variants"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_category_action
+#: model:ir.ui.menu,name:product.menu_products_category
+msgid "Products by Category"
+msgstr ""
+
+#. module: product
+#: field:product.template,uos_coeff:0
+msgid "UOM -> UOS Coeff"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,sequence:0
+msgid "Assigns the priority to the list of product supplier."
+msgstr ""
+
+#. module: product
+#: field:product.template,uom_id:0
+msgid "Default Unit of Measure"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_tow1_product_template
+msgid "ATX Mid-size Tower"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Rounding Method"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_assembly
+msgid "Assembly Service"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.report.xml,name:product.report_product_label
+msgid "Products Labels"
+msgstr ""
+
+#. module: product
+#: model:product.ul,name:product.product_ul_big_box
+msgid "Box 30x40x60"
+msgstr ""
+
+#. module: product
+#: selection:product.template,type:0
+msgid "Service"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,height:0
+msgid "The height of the package"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist:0
+msgid "Products Price List"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist,company_id:0
+#: field:product.pricelist.item,company_id:0
+#: field:product.pricelist.version,company_id:0
+#: view:product.product:0
+#: field:product.supplierinfo,company_id:0
+#: field:product.template,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: product
+#: help:product.template,list_price:0
+msgid ""
+"Base price for computing the customer price. Sometimes called the catalog "
+"price."
+msgstr ""
+
+#. module: product
+#: code:addons/product/pricelist.py:376
+#, python-format
+msgid "Partner section of the product form"
+msgstr ""
+
+#. module: product
+#: help:product.price.type,name:0
+msgid "Name of this kind of price."
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,product_uom:0
+msgid "Supplier UoM"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.version,date_start:0
+msgid "Starting date for this pricelist version to be valid."
+msgstr ""
+
+#. module: product
+#: help:product.template,uom_po_id:0
+msgid ""
+"Default Unit of Measure used for purchase orders. It must be in the same "
+"category than the default unit of measure."
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_cpu1_product_template
+msgid "This product is configured with example of push/pull flows"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,length:0
+msgid "Length"
+msgstr ""
+
+#. module: product
+#: model:product.uom.categ,name:product.uom_categ_length
+msgid "Length / Distance"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_0_product_template
+msgid "Onsite Senior Intervention"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_pricelist_type
+#: field:product.pricelist,type:0
+msgid "Pricelist Type"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_otherproducts0
+msgid "Other Products"
+msgstr ""
+
+#. module: product
+#: field:product.product,color:0
+msgid "Color Index"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Characteristics"
+msgstr ""
+
+#. module: product
+#: field:product.template,sale_ok:0
+msgid "Can be Sold"
+msgstr ""
+
+#. module: product
+#: field:product.template,produce_delay:0
+msgid "Manufacturing Lead Time"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,pricelist_ids:0
+msgid "Supplier Pricelist"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:175
+#, python-format
+msgid "Warning"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,base:0
+msgid "Based on"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_ton
+msgid "t"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_rawmaterial0
+msgid "Raw Materials"
+msgstr ""
+
+#. module: product
+#: help:product.template,product_manager:0
+msgid "This is use as task responsible"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist,name:0
+msgid "Pricelist Name"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_pricelist_version
+#: view:product.pricelist:0
+#: view:product.pricelist.version:0
+msgid "Pricelist Version"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "* ( 1 + "
+msgstr ""
+
+#. module: product
+#: help:product.packaging,weight:0
+msgid "The weight of a full package, pallet or box."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_hdd2_product_template
+msgid "HDD Seagate 7200.8 120GB"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_employee0_product_template
+msgid "Employee"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_shelfofcm0_product_template
+msgid "Shelf of 100cm"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_category
+#: field:product.pricelist.item,categ_id:0
+msgid "Product Category"
+msgstr ""
+
+#. module: product
+#: report:product.pricelist:0
+msgid "Price List Name"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,delay:0
+msgid "Delivery Lead Time"
+msgstr ""
+
+#. module: product
+#: help:product.uom,active:0
+msgid ""
+"By unchecking the active field you can disable a unit of measure without "
+"deleting it."
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_uom_categ_form_action
+#: model:ir.ui.menu,name:product.menu_product_uom_categ_form_action
+msgid "UoM Categories"
+msgstr ""
+
+#. module: product
+#: field:product.template,seller_delay:0
+msgid "Supplier Lead Time"
+msgstr ""
+
+#. module: product
+#: selection:product.ul,type:0
+msgid "Box"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_ul_form_action
+msgid ""
+"Create and manage your packaging dimensions and types you want to be "
+"maintained in your system."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_rearpanelarm1_product_template
+msgid "Rear Panel SHE200"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.type,key:0
+msgid ""
+"Used in the code to select specific prices based on the context. Keep "
+"unchanged."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Context..."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_hdd1_product_template
+msgid "HDD Seagate 7200.8 80GB"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,qty:0
+msgid "This is a quantity which is converted into Default Uom."
+msgstr ""
+
+#. module: product
+#: field:product.packaging,ul:0
+msgid "Type of Package"
+msgstr ""
+
+#. module: product
+#: selection:product.ul,type:0
+msgid "Pack"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_4
+msgid "Dello Computer"
+msgstr ""
+
+#. module: product
+#: model:product.uom.categ,name:product.product_uom_categ_kgm
+msgid "Weight"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_22_product_template
+msgid "Processor on demand"
+msgstr ""
+
+#. module: product
+#: model:process.transition,name:product.process_transition_supplierofproduct0
+msgid "Supplier of the product"
+msgstr ""
+
+#. module: product
+#: field:product.product,product_image:0
+msgid "Image"
+msgstr ""
+
+#. module: product
+#: field:product.uom,uom_type:0
+msgid "UoM Type"
+msgstr ""
+
+#. module: product
+#: help:product.product,active:0
+msgid ""
+"If the active field is set to False, it will allow you to hide the product "
+"without removing it."
+msgstr ""
+
+#. module: product
+#: help:product.uom,rounding:0
+msgid ""
+"The computed quantity will be a multiple of this value. Use 1.0 for a UoM "
+"that cannot be further split, such as a piece."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Descriptions"
+msgstr ""
+
+#. module: product
+#: field:product.template,loc_row:0
+msgid "Row"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_rearpanelarm0_product_template
+msgid "Rear Panel SHE100"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_23_product_template
+msgid "Complete PC With Peripherals"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_hotelexpenses0_product_template
+msgid "Hotel Expenses"
+msgstr ""
+
+#. module: product
+#: help:product.uom,factor_inv:0
+msgid ""
+"How many times this UoM is bigger than the reference UoM in this category:\n"
+"1 * (this unit) = ratio * (reference unit)"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_shelf0_product_template
+msgid "Rack 100cm"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,sequence:0
+msgid "Gives the sequence order when displaying a list of packaging."
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_round:0
+msgid "Price Rounding"
+msgstr ""
+
+#. module: product
+#: code:addons/product/pricelist.py:178
+#, python-format
+msgid ""
+"At least one pricelist has no active version !\n"
+"Please create or activate one."
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_max_margin:0
+msgid "Max. Price Margin"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,product_name:0
+msgid ""
+"This supplier's product name will be used when printing a request for "
+"quotation. Keep empty to use the internal one."
+msgstr ""
+
+#. module: product
+#: selection:product.template,mes_type:0
+msgid "Variable"
+msgstr ""
+
+#. module: product
+#: field:product.template,rental:0
+msgid "Can be Rent"
+msgstr ""
+
+#. module: product
+#: model:product.price.type,name:product.standard_price
+#: field:product.template,standard_price:0
+msgid "Cost Price"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_min_margin:0
+msgid "Min. Price Margin"
+msgstr ""
+
+#. module: product
+#: field:product.template,weight:0
+msgid "Gross Weight"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_assemblysection0_product_template
+msgid "Assembly Section"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_3
+msgid "Computer Stuff"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_8
+msgid "Phone Help"
+msgstr ""
+
+#. module: product
+#: field:product.category,sequence:0
+#: field:product.packaging,sequence:0
+#: field:product.pricelist.item,sequence:0
+#: field:product.supplierinfo,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_assembly_product_template
+msgid "Assembly Service Cost"
+msgstr ""
+
+#. module: product
+#: view:product.price_list:0
+msgid "Close"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_pricelist_item
+msgid "Pricelist item"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_21_product_template
+msgid "RAM on demand"
+msgstr ""
+
+#. module: product
+#: view:res.partner:0
+msgid "Sales Properties"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Delays"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Both stockable and consumable products"
+msgstr ""
+
+#. module: product
+#: model:process.node,note:product.process_node_product0
+msgid "Creation of the product"
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,name:0
+#: field:product.packaging,name:0
+#: report:product.pricelist:0
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,description:0
+msgid "Description"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,ean:0
+msgid "EAN"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "Product Description"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid " ) + "
+msgstr ""
+
+#. module: product
+#: field:product.template,volume:0
+msgid "Volume"
+msgstr ""
+
+#. module: product
+#: field:product.template,loc_case:0
+msgid "Case"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: model:res.groups,name:product.group_product_variant
+msgid "Product Variant"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_shelves0
+msgid "Shelves"
+msgstr ""
+
+#. module: product
+#: code:addons/product/pricelist.py:375
+#, python-format
+msgid "Other Pricelist"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_template
+#: field:product.pricelist.item,product_tmpl_id:0
+#: field:product.product,product_tmpl_id:0
+#: view:product.template:0
+msgid "Product Template"
+msgstr ""
+
+#. module: product
+#: field:product.template,cost_method:0
+msgid "Costing Method"
+msgstr ""
+
+#. module: product
+#: view:product.packaging:0
+#: view:product.product:0
+msgid "Palletization"
+msgstr ""
+
+#. module: product
+#: help:product.template,volume:0
+msgid "The volume in m3."
+msgstr ""
+
+#. module: product
+#: selection:product.template,state:0
+msgid "End of Lifecycle"
+msgstr ""
+
+#. module: product
+#: help:product.product,packaging:0
+msgid ""
+"Gives the different ways to package the same product. This has no impact on "
+"the picking order and is mainly used if you use the EDI module."
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_pricelist_action
+#: model:ir.ui.menu,name:product.menu_product_pricelist_action
+#: field:product.pricelist,version_id:0
+msgid "Pricelist Versions"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_span100_product_template
+msgid "Shelf Panel"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,price_round:0
+msgid ""
+"Sets the price so that it is a multiple of this value.\n"
+"Rounding is applied after the discount and before the surcharge.\n"
+"To have prices that end in 9.99, set rounding 10, surcharge -0.01"
+msgstr ""
+
+#. module: product
+#: field:product.template,list_price:0
+msgid "Sale Price"
+msgstr ""
+
+#. module: product
+#: constraint:product.category:0
+msgid "Error ! You cannot create recursive categories."
+msgstr ""
+
+#. module: product
+#: field:product.category,type:0
+msgid "Category Type"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.cat2
+msgid "Private"
+msgstr ""
+
+#. module: product
+#: help:product.template,uos_coeff:0
+msgid ""
+"Coefficient to convert UOM to UOS\n"
+" uos = uom * coeff"
+msgstr ""
+
+#. module: product
+#: constraint:res.partner:0
+msgid "Error ! You cannot create recursive associated members."
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_discount:0
+msgid "Price Discount"
+msgstr ""
diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml
index 5d06a80b024..eb5a585976e 100644
--- a/addons/product/product_view.xml
+++ b/addons/product/product_view.xml
@@ -68,7 +68,7 @@
form
-
-
+
+
+
diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py
index ef26425d3c9..2c53fc2a28a 100644
--- a/addons/project/__openerp__.py
+++ b/addons/project/__openerp__.py
@@ -28,7 +28,7 @@
"category": "Project Management",
"sequence": 8,
"images": ["images/gantt.png", "images/project_dashboard.jpeg","images/project_task_tree.jpeg","images/project_task.jpeg","images/project.jpeg","images/task_analysis.jpeg"],
- "depends": ["base_setup", "product", "analytic", "board", "mail", "resource","web_kanban"],
+ "depends": ["base_setup", "base_status", "product", "analytic", "board", "mail", "resource","web_kanban"],
"description": """
Project management module tracks multi-level projects, tasks, work done on tasks, eso.
======================================================================================
diff --git a/addons/project/board_project_view.xml b/addons/project/board_project_view.xml
index fa6816ebbf7..a4b302f33f2 100644
--- a/addons/project/board_project_view.xml
+++ b/addons/project/board_project_view.xml
@@ -17,11 +17,8 @@
-
-
-
-
-
+
+
@@ -39,10 +36,8 @@
-
-
-
-
+
+
diff --git a/addons/project/project.py b/addons/project/project.py
index 0b23196a67f..e7af9f49b7d 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -2,7 +2,7 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
+# Copyright (C) 2004-today OpenERP SA ()
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -19,18 +19,15 @@
#
##############################################################################
-from lxml import etree
-import time
+from base_status.base_stage import base_stage
from datetime import datetime, date
-
-from tools.translate import _
+from lxml import etree
from osv import fields, osv
from openerp.addons.resource.faces import task as Task
+import time
+from tools.translate import _
-# I think we can remove this in v6.1 since VMT's improvements in the framework ?
-#class project_project(osv.osv):
-# _name = 'project.project'
-#project_project()
+_TASK_STATE = [('draft', 'New'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done'), ('cancelled', 'Cancelled')]
class project_task_type(osv.osv):
_name = 'project.task.type'
@@ -40,14 +37,20 @@ class project_task_type(osv.osv):
'name': fields.char('Stage Name', required=True, size=64, translate=True),
'description': fields.text('Description'),
'sequence': fields.integer('Sequence'),
- 'project_default': fields.boolean('Common to All Projects', help="If you check this field, this stage will be proposed by default on each new project. It will not assign this stage to existing projects."),
+ 'case_default': fields.boolean('Common to All Projects',
+ help="If you check this field, this stage will be proposed by default on each new project. It will not assign this stage to existing projects."),
'project_ids': fields.many2many('project.project', 'project_task_type_rel', 'type_id', 'project_id', 'Projects'),
+ 'state': fields.selection(_TASK_STATE, 'State', required=True,
+ help="The related state for the stage. The state of your document will automatically change regarding the selected stage. Example, a stage is related to the state 'Close', when your document reach this stage, it will be automatically closed."),
+ 'fold': fields.boolean('Hide in views if empty',
+ help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."),
}
_defaults = {
- 'sequence': 1
+ 'sequence': 1,
+ 'state': 'draft',
+ 'fold': False,
}
_order = 'sequence'
-project_task_type()
class project(osv.osv):
_name = "project.project"
@@ -208,7 +211,7 @@ class project(osv.osv):
return True
def _get_type_common(self, cr, uid, context):
- ids = self.pool.get('project.task.type').search(cr, uid, [('project_default','=',1)], context=context)
+ ids = self.pool.get('project.task.type').search(cr, uid, [('case_default','=',1)], context=context)
return ids
_order = "sequence"
@@ -239,7 +242,7 @@ class project(osv.osv):
def set_done(self, cr, uid, ids, context=None):
task_obj = self.pool.get('project.task')
task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', 'not in', ('cancelled', 'done'))])
- task_obj.write(cr, uid, task_ids, {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
+ task_obj.case_close(cr, uid, task_ids, context=context)
self.write(cr, uid, ids, {'state':'close'}, context=context)
self.set_close_send_note(cr, uid, ids, context=context)
return True
@@ -247,7 +250,7 @@ class project(osv.osv):
def set_cancel(self, cr, uid, ids, context=None):
task_obj = self.pool.get('project.task')
task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', '!=', 'done')])
- task_obj.write(cr, uid, task_ids, {'state': 'cancelled', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
+ task_obj.case_cancel(cr, uid, task_ids, context=context)
self.write(cr, uid, ids, {'state':'cancelled'}, context=context)
self.set_cancel_send_note(cr, uid, ids, context=context)
return True
@@ -501,49 +504,60 @@ def Project():
def set_close_send_note(self, cr, uid, ids, context=None):
message = _("Project has been closed.")
return self.message_append_note(cr, uid, ids, body=message, context=context)
-
-project()
-class task(osv.osv):
+
+class task(base_stage, osv.osv):
_name = "project.task"
_description = "Task"
- _log_create = True
_date_name = "date_start"
_inherit = ['ir.needaction_mixin', 'mail.thread']
+ def _get_default_project_id(self, cr, uid, context=None):
+ """ Gives default section by checking if present in the context """
+ return (self._resolve_project_id_from_context(cr, uid, context=context) or False)
+
+ def _get_default_stage_id(self, cr, uid, context=None):
+ """ Gives default stage_id """
+ project_id = self._get_default_project_id(cr, uid, context=context)
+ return self.stage_find(cr, uid, [], project_id, [('state', '=', 'draft')], context=context)
def _resolve_project_id_from_context(self, cr, uid, context=None):
- """Return ID of project based on the value of 'project_id'
- context key, or None if it cannot be resolved to a single project.
+ """ Returns ID of project based on the value of 'default_project_id'
+ context key, or None if it cannot be resolved to a single
+ project.
"""
if context is None: context = {}
if type(context.get('default_project_id')) in (int, long):
- project_id = context['default_project_id']
- return project_id
+ return context['default_project_id']
if isinstance(context.get('default_project_id'), basestring):
project_name = context['default_project_id']
- project_ids = self.pool.get('project.project').name_search(cr, uid, name=project_name)
+ project_ids = self.pool.get('project.project').name_search(cr, uid, name=project_name, context=context)
if len(project_ids) == 1:
return project_ids[0][0]
+ return None
- def _read_group_type_id(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
+ def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
stage_obj = self.pool.get('project.task.type')
- project_id = self._resolve_project_id_from_context(cr, uid, context=context)
order = stage_obj._order
access_rights_uid = access_rights_uid or uid
- if read_group_order == 'type_id desc':
- # lame way to allow reverting search, should just work in the trivial case
+ # lame way to allow reverting search, should just work in the trivial case
+ if read_group_order == 'stage_id desc':
order = '%s desc' % order
+ # retrieve section_id from the context and write the domain
+ # - ('id', 'in', 'ids'): add columns that should be present
+ # - OR ('case_default', '=', True), ('fold', '=', False): add default columns that are not folded
+ # - OR ('project_ids', 'in', project_id), ('fold', '=', False) if project_id: add project columns that are not folded
+ search_domain = []
+ project_id = self._resolve_project_id_from_context(cr, uid, context=context)
if project_id:
- domain = ['|', ('id','in',ids), ('project_ids','in',project_id)]
- else:
- domain = ['|', ('id','in',ids), ('project_default','=',1)]
- stage_ids = stage_obj._search(cr, uid, domain, order=order, access_rights_uid=access_rights_uid, context=context)
+ search_domain += ['|', '&', ('project_ids', '=', project_id), ('fold', '=', False)]
+ search_domain += ['|', ('id', 'in', ids), '&', ('case_default', '=', True), ('fold', '=', False)]
+ stage_ids = stage_obj._search(cr, uid, search_domain, order=order, access_rights_uid=access_rights_uid, context=context)
result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
# restore order of the search
result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
return result
-
+
def _read_group_user_id(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
res_users = self.pool.get('res.users')
project_id = self._resolve_project_id_from_context(cr, uid, context=context)
@@ -562,11 +576,10 @@ class task(osv.osv):
return result
_group_by_full = {
- 'type_id': _read_group_type_id,
- 'user_id': _read_group_user_id
+ 'stage_id': _read_group_stage_ids,
+ 'user_id': _read_group_user_id,
}
-
def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False):
obj_project = self.pool.get('project.project')
for domain in args:
@@ -597,7 +610,6 @@ class task(osv.osv):
res[task.id]['progress'] = 100.0
return res
-
def onchange_remaining(self, cr, uid, ids, remaining=0.0, planned = 0.0):
if remaining and not planned:
return {'value':{'planned_hours': remaining}}
@@ -640,7 +652,7 @@ class task(osv.osv):
if not default.get('remaining_hours', False):
default['remaining_hours'] = float(self.read(cr, uid, id, ['planned_hours'])['planned_hours'])
default['active'] = True
- default['type_id'] = False
+ default['stage_id'] = False
if not default.get('name', False):
default['name'] = self.browse(cr, uid, id, context=context).name or ''
if not context.get('copy',False):
@@ -670,10 +682,15 @@ class task(osv.osv):
'description': fields.text('Description'),
'priority': fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Important'), ('0','Very important')], 'Priority', select=True),
'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of tasks."),
- 'type_id': fields.many2one('project.task.type', 'Stage'),
- 'state': fields.selection([('draft', 'New'),('cancelled', 'Cancelled'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done')], 'Status', readonly=True, required=True,
- help='If the task is created the state is \'Draft\'.\n If the task is started, the state becomes \'In Progress\'.\n If review is needed the task is in \'Pending\' state.\
- \n If the task is over, the states is set to \'Done\'.'),
+ 'stage_id': fields.many2one('project.task.type', 'Stage',
+ domain="['|', ('project_ids', '=', project_id), ('case_default', '=', True)]"),
+ 'state': fields.related('stage_id', 'state', type="selection", store=True,
+ selection=_TASK_STATE, string="State", readonly=True,
+ help='The state is set to \'Draft\', when a case is created.\
+ If the case is in progress the state is set to \'Open\'.\
+ When the case is over, the state is set to \'Done\'.\
+ If the case needs to be reviewed then the state is \
+ set to \'Pending\'.'),
'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready To Pull')], 'Kanban State',
help="A task's kanban state indicates special situations affecting it:\n"
" * Normal is the default situation\n"
@@ -722,6 +739,8 @@ class task(osv.osv):
}
_defaults = {
+ 'stage_id': _get_default_stage_id,
+ 'project_id': _get_default_project_id,
'state': 'draft',
'kanban_state': 'normal',
'priority': '2',
@@ -729,7 +748,7 @@ class task(osv.osv):
'sequence': 10,
'active': True,
'user_id': lambda obj, cr, uid, context: uid,
- 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'project.task', context=c)
+ 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'project.task', context=c),
}
_order = "priority, sequence, date_start, name, id"
@@ -828,6 +847,41 @@ class task(osv.osv):
res['fields'][f]['string'] = res['fields'][f]['string'].replace('Hours',tm)
return res
+ # ****************************************
+ # Case management
+ # ****************************************
+
+ def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
+ """ Override of the base.stage method
+ Parameter of the stage search taken from the lead:
+ - section_id: if set, stages must belong to this section or
+ be a default stage; if not set, stages must be default
+ stages
+ """
+ if isinstance(cases, (int, long)):
+ cases = self.browse(cr, uid, cases, context=context)
+ # collect all section_ids
+ section_ids = []
+ if section_id:
+ section_ids.append(section_id)
+ for task in cases:
+ if task.project_id:
+ section_ids.append(task.project_id.id)
+ # OR all section_ids and OR with case_default
+ search_domain = []
+ if section_ids:
+ search_domain += [('|')] * len(section_ids)
+ for section_id in section_ids:
+ search_domain.append(('project_ids', '=', section_id))
+ search_domain.append(('case_default', '=', True))
+ # AND with the domain in parameter
+ search_domain += list(domain)
+ # perform search, return the first found
+ stage_ids = self.pool.get('project.task.type').search(cr, uid, search_domain, order=order, context=context)
+ if stage_ids:
+ return stage_ids[0]
+ return False
+
def _check_child_task(self, cr, uid, ids, context=None):
if context == None:
context = {}
@@ -840,9 +894,9 @@ class task(osv.osv):
return True
def action_close(self, cr, uid, ids, context=None):
- # This action open wizard to send email to partner or project manager after close task.
- if context == None:
- context = {}
+ """ This action closes the task, then opens the wizard to send an
+ email to the partner or the project manager.
+ """
task_id = len(ids) and ids[0] or False
self._check_child_task(cr, uid, ids, context=context)
if not task_id: return False
@@ -863,28 +917,17 @@ class task(osv.osv):
}
return res
- def do_close(self, cr, uid, ids, context={}):
- """
- Close Task
- """
+ def do_close(self, cr, uid, ids, context=None):
+ """ Compatibility when changing to case_close. """
+ return self.case_close(cr, uid, ids, context=context)
+
+ def case_close(self, cr, uid, ids, context=None):
+ """ Closes Task """
request = self.pool.get('res.request')
- if not isinstance(ids,list): ids = [ids]
+ if not isinstance(ids, list): ids = [ids]
for task in self.browse(cr, uid, ids, context=context):
vals = {}
project = task.project_id
- if project:
- # Send request to project manager
- if project.warn_manager and project.user_id and (project.user_id.id != uid):
- request.create(cr, uid, {
- 'name': _("Task '%s' closed") % task.name,
- 'state': 'waiting',
- 'act_from': uid,
- 'act_to': project.user_id.id,
- 'ref_partner_id': task.partner_id.id,
- 'ref_doc1': 'project.task,%d'% (task.id,),
- 'ref_doc2': 'project.project,%d'% (project.id,),
- }, context=context)
-
for parent_id in task.parent_ids:
if parent_id.state in ('pending','draft'):
reopen = True
@@ -893,71 +936,61 @@ class task(osv.osv):
reopen = False
if reopen:
self.do_reopen(cr, uid, [parent_id.id], context=context)
- vals.update({'state': 'done'})
- vals.update({'remaining_hours': 0.0})
+ # close task
+ vals['remaining_hours'] = 0.0
if not task.date_end:
- vals.update({ 'date_end':time.strftime('%Y-%m-%d %H:%M:%S')})
- self.write(cr, uid, [task.id],vals, context=context)
- self.do_close_send_note(cr, uid, [task.id], context)
+ vals['date_end'] = fields.datetime.now()
+ self.case_set(cr, uid, [task.id], 'done', vals, context=context)
+ self.case_close_send_note(cr, uid, [task.id], context=context)
return True
def do_reopen(self, cr, uid, ids, context=None):
- request = self.pool.get('res.request')
-
for task in self.browse(cr, uid, ids, context=context):
project = task.project_id
- if project and project.warn_manager and project.user_id.id and (project.user_id.id != uid):
- request.create(cr, uid, {
- 'name': _("Task '%s' set in progress") % task.name,
- 'state': 'waiting',
- 'act_from': uid,
- 'act_to': project.user_id.id,
- 'ref_partner_id': task.partner_id.id,
- 'ref_doc1': 'project.task,%d' % task.id,
- 'ref_doc2': 'project.project,%d' % project.id,
- }, context=context)
-
- self.write(cr, uid, [task.id], {'state': 'open'}, context=context)
- self.do_open_send_note(cr, uid, [task.id], context)
+ self.case_set(cr, uid, [task.id], 'open', {}, context=context)
+ self.case_open_send_note(cr, uid, [task.id], context)
return True
- def do_cancel(self, cr, uid, ids, context={}):
+ def do_cancel(self, cr, uid, ids, context=None):
+ """ Compatibility when changing to case_cancel. """
+ return self.case_cancel(cr, uid, ids, context=context)
+
+ def case_cancel(self, cr, uid, ids, context=None):
request = self.pool.get('res.request')
tasks = self.browse(cr, uid, ids, context=context)
self._check_child_task(cr, uid, ids, context=context)
for task in tasks:
- project = task.project_id
- if project.warn_manager and project.user_id and (project.user_id.id != uid):
- request.create(cr, uid, {
- 'name': _("Task '%s' cancelled") % task.name,
- 'state': 'waiting',
- 'act_from': uid,
- 'act_to': project.user_id.id,
- 'ref_partner_id': task.partner_id.id,
- 'ref_doc1': 'project.task,%d' % task.id,
- 'ref_doc2': 'project.project,%d' % project.id,
- }, context=context)
- self.write(cr, uid, [task.id], {'state': 'cancelled', 'remaining_hours':0.0}, context=context)
- self.do_cancel_send_note(cr, uid, [task.id], context)
+ self.case_set(cr, uid, [task.id], 'cancelled', {'remaining_hours': 0.0}, context=context)
+ self.case_cancel_send_note(cr, uid, [task.id], context=context)
return True
- def do_open(self, cr, uid, ids, context={}):
+ def do_open(self, cr, uid, ids, context=None):
+ """ Compatibility when changing to case_open. """
+ return self.case_open(cr, uid, ids, context=context)
+
+ def case_open(self, cr, uid, ids, context=None):
if not isinstance(ids,list): ids = [ids]
- tasks= self.browse(cr, uid, ids, context=context)
- for t in tasks:
- data = {'state': 'open'}
- if not t.date_start:
- data['date_start'] = time.strftime('%Y-%m-%d %H:%M:%S')
- self.write(cr, uid, [t.id], data, context=context)
- self.do_open_send_note(cr, uid, [t.id], context)
+ self.case_set(cr, uid, ids, 'open', {'date_start': fields.datetime.now()}, context=context)
+ self.case_open_send_note(cr, uid, ids, context)
return True
- def do_draft(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state': 'draft'}, context=context)
- self.do_draft_send_note(cr, uid, ids, context)
+ def do_draft(self, cr, uid, ids, context=None):
+ """ Compatibility when changing to case_draft. """
+ return self.case_draft(cr, uid, ids, context=context)
+
+ def case_draft(self, cr, uid, ids, context=None):
+ self.case_set(cr, uid, ids, 'draft', {}, context=context)
+ self.case_draft_send_note(cr, uid, ids, context=context)
return True
-
+ def do_pending(self, cr, uid, ids, context=None):
+ """ Compatibility when changing to case_pending. """
+ return self.case_pending(cr, uid, ids, context=context)
+
+ def case_pending(self, cr, uid, ids, context=None):
+ self.case_set(cr, uid, ids, 'pending', {}, context=context)
+ return self.case_pending_send_note(cr, uid, ids, context=context)
+
def _delegate_task_attachments(self, cr, uid, task_id, delegated_task_id, context=None):
attachment = self.pool.get('ir.attachment')
attachment_ids = attachment.search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', task_id)], context=context)
@@ -966,7 +999,6 @@ class task(osv.osv):
new_attachment_ids.append(attachment.copy(cr, uid, attachment_id, default={'res_id': delegated_task_id}, context=context))
return new_attachment_ids
-
def do_delegate(self, cr, uid, ids, delegate_data={}, context=None):
"""
Delegate Task to another users.
@@ -1000,11 +1032,6 @@ class task(osv.osv):
delegated_tasks[task.id] = delegated_task_id
return delegated_tasks
- def do_pending(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state': 'pending'}, context=context)
- self.do_pending_send_note(cr, uid, ids, context)
- return True
-
def set_remaining_time(self, cr, uid, ids, remaining_time=1.0, context=None):
for task in self.browse(cr, uid, ids, context=context):
if (task.state=='draft') or (task.planned_hours==0.0):
@@ -1033,36 +1060,6 @@ class task(osv.osv):
def set_kanban_state_done(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'kanban_state': 'done'}, context=context)
- def _change_type(self, cr, uid, ids, next, context=None):
- """
- go to the next stage
- if next is False, go to previous stage
- """
- for task in self.browse(cr, uid, ids):
- if task.project_id.type_ids:
- typeid = task.type_id.id
- types_seq={}
- for type in task.project_id.type_ids :
- types_seq[type.id] = type.sequence
- if next:
- types = sorted(types_seq.items(), lambda x, y: cmp(x[1], y[1]))
- else:
- types = sorted(types_seq.items(), lambda x, y: cmp(y[1], x[1]))
- sorted_types = [x[0] for x in types]
- if not typeid:
- self.write(cr, uid, task.id, {'type_id': sorted_types[0]})
- elif typeid and typeid in sorted_types and sorted_types.index(typeid) != len(sorted_types)-1:
- index = sorted_types.index(typeid)
- self.write(cr, uid, task.id, {'type_id': sorted_types[index+1]})
- self.state_change_send_note(cr, uid, [task.id], context)
- return True
-
- def next_type(self, cr, uid, ids, context=None):
- return self._change_type(cr, uid, ids, True, context=context)
-
- def prev_type(self, cr, uid, ids, context=None):
- return self._change_type(cr, uid, ids, False, context=context)
-
def _store_history(self, cr, uid, ids, context=None):
for task in self.browse(cr, uid, ids, context=context):
self.pool.get('project.task.history').create(cr, uid, {
@@ -1070,7 +1067,7 @@ class task(osv.osv):
'remaining_hours': task.remaining_hours,
'planned_hours': task.planned_hours,
'kanban_state': task.kanban_state,
- 'type_id': task.type_id.id,
+ 'type_id': task.stage_id.id,
'state': task.state,
'user_id': task.user_id.id
@@ -1084,22 +1081,25 @@ class task(osv.osv):
return task_id
# Overridden to reset the kanban_state to normal whenever
- # the stage (type_id) of the task changes.
+ # the stage (stage_id) of the task changes.
def write(self, cr, uid, ids, vals, context=None):
if isinstance(ids, (int, long)):
ids = [ids]
- if vals and not 'kanban_state' in vals and 'type_id' in vals:
- new_stage = vals.get('type_id')
+ if vals and not 'kanban_state' in vals and 'stage_id' in vals:
+ new_stage = vals.get('stage_id')
vals_reset_kstate = dict(vals, kanban_state='normal')
for t in self.browse(cr, uid, ids, context=context):
- write_vals = vals_reset_kstate if t.type_id != new_stage else vals
+ #TO FIX:Kanban view doesn't raise warning
+ #stages = [stage.id for stage in t.project_id.type_ids]
+ #if new_stage not in stages:
+ #raise osv.except_osv(_('Warning !'), _('Stage is not defined in the project.'))
+ write_vals = vals_reset_kstate if t.stage_id != new_stage else vals
super(task,self).write(cr, uid, [t.id], write_vals, context=context)
result = True
else:
result = super(task,self).write(cr, uid, ids, vals, context=context)
- if ('type_id' in vals) or ('remaining_hours' in vals) or ('user_id' in vals) or ('state' in vals) or ('kanban_state' in vals):
+ if ('stage_id' in vals) or ('remaining_hours' in vals) or ('user_id' in vals) or ('state' in vals) or ('kanban_state' in vals):
self._store_history(cr, uid, ids, context=context)
- self.state_change_send_note(cr, uid, ids, context)
return result
def unlink(self, cr, uid, ids, context=None):
@@ -1139,7 +1139,11 @@ class task(osv.osv):
# ---------------------------------------------------
# OpenChatter methods and notifications
# ---------------------------------------------------
-
+
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ """ Override of default prefix for notifications. """
+ return 'Task'
+
def get_needaction_user_ids(self, cr, uid, ids, context=None):
result = dict.fromkeys(ids, [])
for obj in self.browse(cr, uid, ids, context=context):
@@ -1156,28 +1160,16 @@ class task(osv.osv):
sub_ids.append(obj.manager_id.id)
return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
+ def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
+ """ Override of the (void) default notification method. """
+ stage_name = self.pool.get('project.task.type').name_get(cr, uid, [stage_id], context=context)[0][1]
+ return self.message_append_note(cr, uid, ids, body= _("Stage changed to %s.") % (stage_name), context=context)
+
def create_send_note(self, cr, uid, ids, context=None):
return self.message_append_note(cr, uid, ids, body=_("Task has been created."), context=context)
- def do_pending_send_note(self, cr, uid, ids, context=None):
- if not isinstance(ids,list): ids = [ids]
- msg = _('Task is now pending.')
- return self.message_append_note(cr, uid, ids, body=msg, context=context)
-
- def do_open_send_note(self, cr, uid, ids, context=None):
- msg = _('Task has been opened.')
- return self.message_append_note(cr, uid, ids, body=msg, context=context)
-
- def do_cancel_send_note(self, cr, uid, ids, context=None):
- msg = _('Task has been canceled.')
- return self.message_append_note(cr, uid, ids, body=msg, context=context)
-
- def do_close_send_note(self, cr, uid, ids, context=None):
- msg = _('Task has been closed.')
- return self.message_append_note(cr, uid, ids, body=msg, context=context)
-
- def do_draft_send_note(self, cr, uid, ids, context=None):
- msg = _('Task has been renewed.')
+ def case_draft_send_note(self, cr, uid, ids, context=None):
+ msg = _('Task has been set as draft.')
return self.message_append_note(cr, uid, ids, body=msg, context=context)
def do_delegation_send_note(self, cr, uid, ids, context=None):
@@ -1186,13 +1178,6 @@ class task(osv.osv):
self.message_append_note(cr, uid, [task.id], body=msg, context=context)
return True
- def state_change_send_note(self, cr, uid, ids, context=None):
- for task in self.browse(cr, uid, ids, context=context):
- msg = _('Stage changed to %s') % (task.type_id.name)
- self.message_append_note(cr, uid, [task.id], body=msg, context=context)
- return True
-
-task()
class project_work(osv.osv):
_name = "project.task.work"
@@ -1231,7 +1216,7 @@ class project_work(osv.osv):
for work in self.browse(cr, uid, ids):
cr.execute('update project_task set remaining_hours=remaining_hours + %s where id=%s', (work.hours, work.task_id.id))
return super(project_work,self).unlink(cr, uid, ids,*args, **kwargs)
-project_work()
+
class account_analytic_account(osv.osv):
@@ -1252,7 +1237,6 @@ class account_analytic_account(osv.osv):
raise osv.except_osv(_('Warning !'), _('Please delete the project linked with this account first.'))
return super(account_analytic_account, self).unlink(cr, uid, ids, *args, **kwargs)
-account_analytic_account()
#
# Tasks History, used for cumulative flow charts (Lean/Agile)
@@ -1313,7 +1297,7 @@ class project_task_history(osv.osv):
_defaults = {
'date': fields.date.context_today,
}
-project_task_history()
+
class project_task_history_cumulative(osv.osv):
_name = 'project.task.history.cumulative'
@@ -1341,4 +1325,4 @@ class project_task_history_cumulative(osv.osv):
) as history
)
""")
-project_task_history_cumulative()
+
diff --git a/addons/project/project_data.xml b/addons/project/project_data.xml
index b7b59911fa4..4c95373d91f 100644
--- a/addons/project/project_data.xml
+++ b/addons/project/project_data.xml
@@ -24,22 +24,40 @@
1
Design
-
+ draft
+
2
Development
-
+ open
+
3
Testing
-
+ open
+
+
+
+ 4
+ Pending
+ pending
+
+
- 4
+ 5
Deployment
-
+ done
+
+
+
+ 6
+ Cancelled
+ cancelled
+
+
diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml
index 2f8c9e9638a..f685f14c85b 100644
--- a/addons/project/project_demo.xml
+++ b/addons/project/project_demo.xml
@@ -77,7 +77,7 @@
2
Prepare Requirements Document
-
+
3
@@ -88,7 +88,7 @@
2
Make SRS
-
+
@@ -99,7 +99,7 @@
Design Use Cases
-
+
@@ -112,7 +112,7 @@
Use the account_budget module
3
-
+
@@ -125,7 +125,7 @@
done
0
-
+
@@ -135,7 +135,7 @@
2
Risk Management Planning
-
+
@@ -145,7 +145,7 @@
2
Create Project Schedules
-
+
@@ -156,7 +156,7 @@
Dataflow Design
0
-
+
@@ -166,7 +166,7 @@
2
User Interface Design
-
+
@@ -177,7 +177,7 @@
Develop Module in Sale Management
blocked
-
+
@@ -187,7 +187,7 @@
2
Develop module in Warehouse
-
+
@@ -199,7 +199,7 @@
2
Integrate Modules
-
+
@@ -211,7 +211,7 @@
2
Unit Testing
-
+
@@ -223,8 +223,7 @@
2
Regression Test
-
- pending
+
@@ -234,7 +233,7 @@
2
Documentation
-
+
2011-02-06
@@ -247,7 +246,7 @@
Performance Tuning
Test on Runbot
-
+
@@ -258,7 +257,7 @@
2
Deploy and Review on Customer System
-
+
@@ -269,7 +268,7 @@
2
Training and Presentation
-
+
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 70cdac1efa0..d5aff449816 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -102,7 +102,7 @@
-
+
@@ -161,7 +161,7 @@
-
+
-
+
project.task.kanban
project.task
kanban
-
+
-
+
-
+
@@ -508,20 +517,11 @@
-
-
+
+
-
-
-
-
@@ -589,7 +589,7 @@
-
+
@@ -660,7 +660,7 @@
-
+
@@ -674,10 +674,14 @@
form
@@ -707,10 +712,10 @@
-
+
-
-
+
+
diff --git a/addons/project/report/project_cumulative.xml b/addons/project/report/project_cumulative.xml
index 89667992f0a..3c04d36feb6 100644
--- a/addons/project/report/project_cumulative.xml
+++ b/addons/project/report/project_cumulative.xml
@@ -15,7 +15,8 @@
-
+
+
diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py
index 1012ca9d518..58f7739e96d 100644
--- a/addons/project/report/project_report.py
+++ b/addons/project/report/project_report.py
@@ -82,7 +82,7 @@ class report_project_task_user(osv.osv):
t.name as name,
t.company_id,
t.partner_id,
- t.type_id,
+ t.stage_id,
remaining_hours as remaining_hours,
total_hours as total_hours,
t.delay_hours as hours_delay,
@@ -114,7 +114,7 @@ class report_project_task_user(osv.osv):
name,
t.company_id,
t.partner_id,
- t.type_id
+ t.stage_id
""")
diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml
index 3bdec47fcb9..240176f7941 100644
--- a/addons/project/report/project_report_view.xml
+++ b/addons/project/report/project_report_view.xml
@@ -214,7 +214,7 @@
-
+
diff --git a/addons/project/test/task_process.yml b/addons/project/test/task_process.yml
index c4d17f783f6..ad4bbe53bb3 100644
--- a/addons/project/test/task_process.yml
+++ b/addons/project/test/task_process.yml
@@ -40,7 +40,7 @@
I change the stage of task to next stage.
-
!python {model: project.task}: |
- self.next_type(cr, uid, [ref("project_task_1")])
+ self.stage_next(cr, uid, [ref("project_task_1")])
-
!record {model: project.task.reevaluate, id: reevaluate_id}:
remaining_hours : 120
@@ -68,9 +68,9 @@
I change the stage of task to previous stage.
-
!python {model: project.task}: |
- self.prev_type(cr, uid, [ref("project_task_1")])
+ self.stage_previous(cr, uid, [ref("project_task_1")])
-
I cancel Task.
-
!python {model: project.task}: |
- self.do_cancel(cr, uid, [ref("project_task_2")])
\ No newline at end of file
+ self.do_cancel(cr, uid, [ref("project_task_2")])
diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py
index fc88372fe90..9037523d41e 100644
--- a/addons/project_issue/__openerp__.py
+++ b/addons/project_issue/__openerp__.py
@@ -38,6 +38,7 @@ and decide on their status as they evolve.
'website': 'http://www.openerp.com',
'images': ['images/issue_analysis.jpeg','images/project_issue.jpeg'],
'depends': [
+ 'base_status',
'crm',
'project',
],
diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml
index a070bdbe521..b6e1f8a5d99 100644
--- a/addons/project_issue/board_project_issue_view.xml
+++ b/addons/project_issue/board_project_issue_view.xml
@@ -35,7 +35,7 @@
graph
-
+
@@ -96,18 +96,10 @@
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 176ffa61acd..ad6e7afdbcc 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -19,6 +19,7 @@
#
##############################################################################
+from base_status.base_stage import base_stage
from crm import crm
from datetime import datetime
from osv import fields,osv
@@ -42,12 +43,62 @@ class project_issue_version(osv.osv):
}
project_issue_version()
-class project_issue(crm.crm_case, osv.osv):
+_ISSUE_STATE= [('draft', 'New'), ('open', 'In Progress'), ('cancel', 'Cancelled'), ('done', 'Done'),('pending', 'Pending')]
+
+class project_issue(base_stage, osv.osv):
_name = "project.issue"
_description = "Project Issue"
_order = "priority, create_date desc"
_inherit = ['ir.needaction_mixin', 'mail.thread']
+ def _get_default_project_id(self, cr, uid, context=None):
+ """ Gives default project by checking if present in the context """
+ return self._resolve_project_id_from_context(cr, uid, context=context)
+
+ def _get_default_stage_id(self, cr, uid, context=None):
+ """ Gives default stage_id """
+ project_id = self._get_default_project_id(cr, uid, context=context)
+ return self.stage_find(cr, uid, [], project_id, [('state', '=', 'draft')], context=context)
+
+ def _resolve_project_id_from_context(self, cr, uid, context=None):
+ """ Returns ID of project based on the value of 'default_project_id'
+ context key, or None if it cannot be resolved to a single
+ project.
+ """
+ if context is None:
+ context = {}
+ if type(context.get('default_project_id')) in (int, long):
+ return context.get('default_project_id')
+ if isinstance(context.get('default_project_id'), basestring):
+ project_name = context['default_project_id']
+ project_ids = self.pool.get('project.project').name_search(cr, uid, name=project_name, context=context)
+ if len(project_ids) == 1:
+ return int(project_ids[0][0])
+ return None
+
+ def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
+ access_rights_uid = access_rights_uid or uid
+ stage_obj = self.pool.get('project.task.type')
+ order = stage_obj._order
+ # lame hack to allow reverting search, should just work in the trivial case
+ if read_group_order == 'stage_id desc':
+ order = "%s desc" % order
+ # retrieve section_id from the context and write the domain
+ # - ('id', 'in', 'ids'): add columns that should be present
+ # - OR ('case_default', '=', True), ('fold', '=', False): add default columns that are not folded
+ # - OR ('project_ids', 'in', project_id), ('fold', '=', False) if project_id: add project columns that are not folded
+ search_domain = []
+ project_id = self._resolve_project_id_from_context(cr, uid, context=context)
+ if project_id:
+ search_domain += ['|', '&', ('project_ids', '=', project_id), ('fold', '=', False)]
+ search_domain += ['|', ('id', 'in', ids), '&', ('case_default', '=', True), ('fold', '=', False)]
+ # perform search
+ stage_ids = stage_obj._search(cr, uid, search_domain, order=order, access_rights_uid=access_rights_uid, context=context)
+ result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
+ # restore order of the search
+ result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
+ return result
+
def _compute_day(self, cr, uid, ids, fields, args, context=None):
"""
@param cr: the current row, from the database cursor,
@@ -173,11 +224,13 @@ class project_issue(crm.crm_case, osv.osv):
'partner_id': fields.many2one('res.partner', 'Partner', select=1),
'company_id': fields.many2one('res.company', 'Company'),
'description': fields.text('Description'),
- 'state': fields.selection([('draft', 'New'), ('cancel', 'Cancelled'), ('open', 'In Progress'),('pending', 'Pending'),('done', 'Done') ], 'Status', size=16, readonly=True,
- help='The state is set to \'Draft\', when a case is created.\
- \nIf the case is in progress the state is set to \'Open\'.\
- \nWhen the case is over, the state is set to \'Done\'.\
- \nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
+ 'state': fields.related('stage_id', 'state', type="selection", store=True,
+ selection=_ISSUE_STATE, string="State", readonly=True,
+ help='The state is set to \'Draft\', when a case is created.\
+ If the case is in progress the state is set to \'Open\'.\
+ When the case is over, the state is set to \'Done\'.\
+ If the case needs to be reviewed then the state is \
+ set to \'Pending\'.'),
'email_from': fields.char('Email', size=128, help="These people will receive email.", select=1),
'email_cc': fields.char('Watchers Emails', size=256, help="These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"),
'date_open': fields.datetime('Opened', readonly=True,select=True),
@@ -188,7 +241,8 @@ class project_issue(crm.crm_case, osv.osv):
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('object_id.model', '=', 'crm.project.bug')]"),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True),
'version_id': fields.many2one('project.issue.version', 'Version'),
- 'type_id': fields.many2one ('project.task.type', 'Stages', domain="[('project_ids', '=', project_id)]"),
+ 'stage_id': fields.many2one ('project.task.type', 'Stages',
+ domain="['|', ('project_ids', '=', project_id), ('case_default', '=', True)]"),
'project_id':fields.many2one('project.project', 'Project'),
'duration': fields.float('Duration'),
'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]"),
@@ -205,7 +259,6 @@ class project_issue(crm.crm_case, osv.osv):
multi='compute_day', type="integer", help="Difference in days between last action and current date"),
'color': fields.integer('Color Index'),
'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True),
- 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'date_action_last': fields.datetime('Last Action', readonly=1),
'date_action_next': fields.datetime('Next Action', readonly=1),
'progress': fields.function(_hours_get, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.",
@@ -221,15 +274,20 @@ class project_issue(crm.crm_case, osv.osv):
_defaults = {
'active': 1,
- 'partner_id': crm.crm_case._get_default_partner,
- 'email_from': crm.crm_case._get_default_email,
+ 'partner_id': lambda s, cr, uid, c: s._get_default_partner(cr, uid, c),
+ 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c),
'state': 'draft',
- 'section_id': crm.crm_case._get_section,
+ 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),
+ 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c),
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
'priority': crm.AVAILABLE_PRIORITIES[2][0],
'categ_id' : lambda *a: False,
}
+ _group_by_full = {
+ 'stage_id': _read_group_stage_ids
+ }
+
def set_priority(self, cr, uid, ids, priority):
"""Set lead priority
"""
@@ -312,36 +370,20 @@ class project_issue(crm.crm_case, osv.osv):
def convert_to_bug(self, cr, uid, ids, context=None):
return self._convert(cr, uid, ids, 'bug_categ', context=context)
- def next_type(self, cr, uid, ids, context=None):
- for task in self.browse(cr, uid, ids):
- typeid = task.type_id.id
- types = map(lambda x:x.id, task.project_id.type_ids or [])
- if types:
- if not typeid:
- self.write(cr, uid, [task.id], {'type_id': types[0]})
- elif typeid and typeid in types and types.index(typeid) != len(types)-1 :
- index = types.index(typeid)
- self.write(cr, uid, [task.id], {'type_id': types[index+1]})
- return True
-
- def prev_type(self, cr, uid, ids, context=None):
- for task in self.browse(cr, uid, ids):
- typeid = task.type_id.id
- types = map(lambda x:x.id, task.project_id and task.project_id.type_ids or [])
- if types:
- if typeid and typeid in types:
- index = types.index(typeid)
- self.write(cr, uid, [task.id], {'type_id': index and types[index-1] or False})
- return True
-
+ def copy(self, cr, uid, id, default=None, context=None):
+ issue = self.read(cr, uid, id, ['name'], context=context)
+ if not default:
+ default = {}
+ default = default.copy()
+ default['name'] = issue['name'] + _(' (copy)')
+ return super(project_issue, self).copy(cr, uid, id, default=default,
+ context=context)
+
def write(self, cr, uid, ids, vals, context=None):
#Update last action date every time the user change the stage, the state or send a new email
- logged_fields = ['type_id', 'state', 'message_ids']
+ logged_fields = ['stage_id', 'state', 'message_ids']
if any([field in vals for field in logged_fields]):
vals['date_action_last'] = time.strftime('%Y-%m-%d %H:%M:%S')
- if vals.get('type_id', False):
- stage = self.pool.get('project.task.type').browse(cr, uid, vals['type_id'], context=context)
- self.message_append_note(cr, uid, ids, body=_("Stage changed to %s.") % stage.name, context=context)
return super(project_issue, self).write(cr, uid, ids, vals, context)
def onchange_task_id(self, cr, uid, ids, task_id, context=None):
@@ -363,15 +405,51 @@ class project_issue(crm.crm_case, osv.osv):
self.create_send_note(cr, uid, [obj_id], context=context)
return obj_id
- def case_open(self, cr, uid, ids, context=None):
- res = super(project_issue, self).case_open(cr, uid, ids, context)
- self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'), 'user_id' : uid})
- return res
+ # -------------------------------------------------------
+ # Stage management
+ # -------------------------------------------------------
+
+ def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
+ """ Override of the base.stage method
+ Parameter of the stage search taken from the issue:
+ - type: stage type must be the same or 'both'
+ - section_id: if set, stages must belong to this section or
+ be a default case
+ """
+ if isinstance(cases, (int, long)):
+ cases = self.browse(cr, uid, cases, context=context)
+ # collect all section_ids
+ section_ids = []
+ if section_id:
+ section_ids.append(section_id)
+ for task in cases:
+ if task.project_id:
+ section_ids.append(task.project_id.id)
+ # OR all section_ids and OR with case_default
+ search_domain = []
+ if section_ids:
+ search_domain += [('|')] * len(section_ids)
+ for section_id in section_ids:
+ search_domain.append(('project_ids', '=', section_id))
+ search_domain.append(('case_default', '=', True))
+ # AND with the domain in parameter
+ search_domain += list(domain)
+ # perform search, return the first found
+ stage_ids = self.pool.get('project.task.type').search(cr, uid, search_domain, order=order, context=context)
+ if stage_ids:
+ return stage_ids[0]
+ return False
+
+ def case_cancel(self, cr, uid, ids, context=None):
+ """ Cancels case """
+ self.case_set(cr, uid, ids, 'cancelled', {'active': True}, context=context)
+ self.case_cancel_send_note(cr, uid, ids, context=context)
+ return True
def case_escalate(self, cr, uid, ids, context=None):
cases = self.browse(cr, uid, ids)
for case in cases:
- data = {'state' : 'draft'}
+ data = {}
if case.project_id.project_escalation_id:
data['project_id'] = case.project_id.project_escalation_id.id
if case.project_id.project_escalation_id.user_id:
@@ -380,10 +458,14 @@ class project_issue(crm.crm_case, osv.osv):
self.pool.get('project.task').write(cr, uid, [case.task_id.id], {'project_id': data['project_id'], 'user_id': False})
else:
raise osv.except_osv(_('Warning !'), _('You cannot escalate this issue.\nThe relevant Project has not configured the Escalation Project!'))
- self.write(cr, uid, [case.id], data)
- self.case_escalate_send_note(cr, uid, [case.id], context)
+ self.case_set(cr, uid, ids, 'draft', data, context=context)
+ self.case_escalate_send_note(cr, uid, [case.id], context=context)
return True
+ # -------------------------------------------------------
+ # Mail gateway
+ # -------------------------------------------------------
+
def message_new(self, cr, uid, msg, custom_values=None, context=None):
"""Automatically called when new email message arrives"""
if context is None:
@@ -434,7 +516,7 @@ class project_issue(crm.crm_case, osv.osv):
# Reassign the 'open' state to the case if this one is in pending or done
for record in self.browse(cr, uid, ids, context=context):
if record.state in ('pending', 'done'):
- record.write({'state' : 'open'})
+ self.case_set(cr, uid, ids, 'open', {}, context=context)
vls = { }
for line in msg['body_text'].split('\n'):
@@ -448,15 +530,6 @@ class project_issue(crm.crm_case, osv.osv):
res = self.write(cr, uid, ids, vals)
self.message_append_dict(cr, uid, ids, msg, context=context)
return res
-
- def copy(self, cr, uid, id, default=None, context=None):
- issue = self.read(cr, uid, id, ['name'], context=context)
- if not default:
- default = {}
- default = default.copy()
- default['name'] = issue['name'] + _(' (copy)')
- return super(project_issue, self).copy(cr, uid, id, default=default,
- context=context)
# -------------------------------------------------------
# OpenChatter methods and notifications
@@ -475,9 +548,15 @@ class project_issue(crm.crm_case, osv.osv):
if obj.user_id:
sub_ids.append(obj.user_id.id)
return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
-
+
+ def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
+ """ Override of the (void) default notification method. """
+ stage_name = self.pool.get('project.task.type').name_get(cr, uid, [stage_id], context=context)[0][1]
+ return self.message_append_note(cr, uid, ids, body= _("Stage changed to %s.") % (stage_name), context=context)
+
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
- return 'Project issue '
+ """ Override of default prefix for notifications. """
+ return 'Project issue'
def convert_to_task_send_note(self, cr, uid, ids, context=None):
message = _("Project issue has been converted in to task.")
diff --git a/addons/project_issue/project_issue_demo.xml b/addons/project_issue/project_issue_demo.xml
index 358e9e55aa5..a213cb02c2e 100644
--- a/addons/project_issue/project_issue_demo.xml
+++ b/addons/project_issue/project_issue_demo.xml
@@ -7,7 +7,6 @@
-
@@ -15,7 +14,7 @@
-
+
@@ -23,28 +22,26 @@
-
-
+
-
-
+
@@ -52,14 +49,13 @@
-
-
+
@@ -67,14 +63,13 @@
-
-
+
@@ -82,14 +77,13 @@
-
-
+
@@ -97,14 +91,13 @@
-
-
+
@@ -112,14 +105,13 @@
-
-
+
@@ -127,13 +119,12 @@
-
-
+
@@ -141,14 +132,13 @@
-
-
+
@@ -156,14 +146,13 @@
-
-
+
@@ -187,7 +175,6 @@
-
@@ -195,7 +182,7 @@
-
+
@@ -203,14 +190,13 @@
-
-
+
@@ -218,14 +204,13 @@
-
-
+
@@ -233,14 +218,13 @@
-
-
+
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index 716a02f2f60..09501686ef9 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -52,14 +52,26 @@
@@ -138,19 +146,11 @@
-
-
-
-
-
-
-
-
-
-
+
+
@@ -192,7 +192,7 @@
+ context="{'group_by':'stage_id'}" />
@@ -224,9 +224,9 @@
project.issue
kanban
-
+
-
+
@@ -270,8 +270,7 @@