diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index b0671e501ae..80a406bb0b7 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -457,7 +457,7 @@ class account_invoice(osv.osv): invoice_addr_id = res['invoice'] p = self.pool.get('res.partner').browse(cr, uid, partner_id) if company_id: - if p.property_account_receivable.company_id.id != company_id and p.property_account_payable.company_id.id != company_id: + if (p.property_account_receivable.company_id and (p.property_account_receivable.company_id.id != company_id)) and (p.property_account_payable.company_id and (p.property_account_payable.company_id.id != company_id)): property_obj = self.pool.get('ir.property') rec_pro_id = property_obj.search(cr,uid,[('name','=','property_account_receivable'),('res_id','=','res.partner,'+str(partner_id)+''),('company_id','=',company_id)]) pay_pro_id = property_obj.search(cr,uid,[('name','=','property_account_payable'),('res_id','=','res.partner,'+str(partner_id)+''),('company_id','=',company_id)]) @@ -958,9 +958,14 @@ class account_invoice(osv.osv): }) date = inv.date_invoice or time.strftime('%Y-%m-%d') - part = inv.partner_id.id - line = map(lambda x:(0,0,self.line_get_convert(cr, uid, x, part, date, context=ctx)),iml) + #if the chosen partner is not a company and has a parent company, use the parent for the journal entries + #because you want to invoice 'Agrolait, accounting department' but the journal items are for 'Agrolait' + part = inv.partner_id + if part.parent_id and not part.is_company: + part = part.parent_id + + line = map(lambda x:(0,0,self.line_get_convert(cr, uid, x, part.id, date, context=ctx)),iml) line = self.group_lines(cr, uid, iml, line, inv) diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 1ccc06926d8..5c5a25880cb 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -61,7 +61,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -199,7 +199,7 @@ domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '!=', 'view')]" on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/> + domain="[('type','!=','view'), ('company_id', '=', parent.company_id)]"/> @@ -229,7 +229,7 @@ - + @@ -354,7 +354,7 @@ domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '!=', 'view')]" on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/> + domain="[('type','!=','view'), ('company_id', '=', parent.company_id)]"/> diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 302a74c27af..00fad390282 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -166,28 +166,35 @@ class account_move_line(osv.osv): del data[f] return data + def _prepare_analytic_line(self, cr, uid, obj_line, context=None): + """ + Prepare the values given at the create() of account.analytic.line upon the validation of a journal item having + an analytic account. This method is intended to be extended in other modules. + + :param obj_line: browse record of the account.move.line that triggered the analytic line creation + """ + return {'name': obj_line.name, + 'date': obj_line.date, + 'account_id': obj_line.analytic_account_id.id, + 'unit_amount': obj_line.quantity, + 'product_id': obj_line.product_id and obj_line.product_id.id or False, + 'product_uom_id': obj_line.product_uom_id and obj_line.product_uom_id.id or False, + 'amount': (obj_line.credit or 0.0) - (obj_line.debit or 0.0), + 'general_account_id': obj_line.account_id.id, + 'journal_id': obj_line.journal_id.analytic_journal_id.id, + 'ref': obj_line.ref, + 'move_id': obj_line.id, + 'user_id': uid, + } + def create_analytic_lines(self, cr, uid, ids, context=None): acc_ana_line_obj = self.pool.get('account.analytic.line') for obj_line in self.browse(cr, uid, ids, context=context): if obj_line.analytic_account_id: if not obj_line.journal_id.analytic_journal_id: raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (obj_line.journal_id.name, )) - amt = (obj_line.credit or 0.0) - (obj_line.debit or 0.0) - vals_lines = { - 'name': obj_line.name, - 'date': obj_line.date, - 'account_id': obj_line.analytic_account_id.id, - 'unit_amount': obj_line.quantity, - 'product_id': obj_line.product_id and obj_line.product_id.id or False, - 'product_uom_id': obj_line.product_uom_id and obj_line.product_uom_id.id or False, - 'amount': amt, - 'general_account_id': obj_line.account_id.id, - 'journal_id': obj_line.journal_id.analytic_journal_id.id, - 'ref': obj_line.ref, - 'move_id': obj_line.id, - 'user_id': uid - } - acc_ana_line_obj.create(cr, uid, vals_lines) + vals_line = self._prepare_analytic_line(cr, uid, obj_line, context=context) + acc_ana_line_obj.create(cr, uid, vals_line) return True def _default_get_move_form_hook(self, cursor, user, data): diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index f7d64f43405..7732d8d8cb0 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -1227,6 +1227,7 @@ account.move.line + @@ -1717,8 +1718,8 @@ + action="action_model_form" name="Models" id="menu_action_model_form" sequence="5" + parent="account.menu_finance_recurrent_entries"/> Meetings diff --git a/addons/crm_claim/crm_claim_menu.xml b/addons/crm_claim/crm_claim_menu.xml index 087eb433bca..5abfcabbc71 100644 --- a/addons/crm_claim/crm_claim_menu.xml +++ b/addons/crm_claim/crm_claim_menu.xml @@ -2,12 +2,6 @@ - - - @@ -50,8 +44,6 @@ parent="base.menu_aftersale" action="crm_case_categ_claim0" sequence="1"/> - - diff --git a/addons/delivery/sale.py b/addons/delivery/sale.py index 3ed3756a733..24da03bf1d8 100644 --- a/addons/delivery/sale.py +++ b/addons/delivery/sale.py @@ -31,10 +31,10 @@ class sale_order(osv.osv): 'id': fields.integer('ID', readonly=True,invisible=True), } - def onchange_partner_id(self, cr, uid, ids, part): - result = super(sale_order, self).onchange_partner_id(cr, uid, ids, part) + def onchange_partner_id(self, cr, uid, ids, part, context=None): + result = super(sale_order, self).onchange_partner_id(cr, uid, ids, part, context=context) if part: - dtype = self.pool.get('res.partner').browse(cr, uid, part).property_delivery_carrier.id + dtype = self.pool.get('res.partner').browse(cr, uid, part, context=context).property_delivery_carrier.id result['value']['carrier_id'] = dtype return result diff --git a/addons/document/wizard/document_configuration_view.xml b/addons/document/wizard/document_configuration_view.xml index 48b41f94500..ec7b13d123a 100644 --- a/addons/document/wizard/document_configuration_view.xml +++ b/addons/document/wizard/document_configuration_view.xml @@ -11,10 +11,9 @@ Knowledge Application Configuration - - + +

OpenERP's Document Management System supports mapping virtual folders with documents. The virtual folder of a document can be used to manage the files attached to the document, or to print and download any report. This tool will create directories automatically according to modules installed.

+

When executing this wizard, it will configure your directories automatically according to modules installed.

diff --git a/addons/fetchmail/__openerp__.py b/addons/fetchmail/__openerp__.py index bba1fc22e07..8d46bcb225c 100644 --- a/addons/fetchmail/__openerp__.py +++ b/addons/fetchmail/__openerp__.py @@ -23,7 +23,7 @@ { 'name' : 'Email Gateway', 'version' : '1.0', - 'depends' : ['base', 'mail'], + 'depends' : ['mail'], 'author' : 'OpenERP SA', 'category': 'Tools', 'description': """ diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index 4464dce30ed..bcee15e02e8 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -9,7 +9,6 @@ sequence="90"/> - @@ -288,7 +287,7 @@ - Categories of Employees + Employee Tags hr.employee.category form tree,form @@ -297,14 +296,6 @@ - - Categories Structure - hr.employee.category - tree - - [('parent_id','=',False)] - - Employees ir.actions.act_window @@ -321,9 +312,6 @@ - - hr.job.form hr.job diff --git a/addons/hr/static/src/css/hr.css b/addons/hr/static/src/css/hr.css index 78dfc946436..16657394736 100644 --- a/addons/hr/static/src/css/hr.css +++ b/addons/hr/static/src/css/hr.css @@ -38,7 +38,7 @@ } .oe_employee_details { - width: 220px; + width: 210px; font-size: 13px; padding: 2px 5px; color: #4c4c4c; diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index d4b7cbae1ce..e457aa505ef 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -85,7 +85,7 @@ - +
@@ -211,7 +211,7 @@ - + diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 92b1d57ce15..0f117432528 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -79,7 +79,7 @@ class hr_holidays_status(osv.osv): 'categ_id': fields.many2one('crm.meeting.type', 'Meeting Type', help='Once a leave is validated, OpenERP will create a corresponding meeting of this type in the calendar.'), 'color_name': fields.selection([('red', 'Red'),('blue','Blue'), ('lightgreen', 'Light Green'), ('lightblue','Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'),('lightcyan', 'Light Cyan'),('black', 'Black'),('lightpink', 'Light Pink'),('brown', 'Brown'),('violet', 'Violet'),('lightcoral', 'Light Coral'),('lightsalmon', 'Light Salmon'),('lavender', 'Lavender'),('wheat', 'Wheat'),('ivory', 'Ivory')],'Color in Report', required=True, help='This color will be used in the leaves summary located in Reporting\Leaves by Department.'), - 'limit': fields.boolean('Allow to Override Limit', help='If you select this checkbox, the system allows the employees to take more leaves than the available ones for this type.'), + 'limit': fields.boolean('Allow to Override Limit', help='If you select this check box, the system allows the employees to take more leaves than the available ones for this type and take them into account for the "Remaining Legal Leaves" defined on the employee form.'), 'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the leave type without removing it."), 'max_leaves': fields.function(_user_left_days, string='Maximum Allowed', help='This value is given by the sum of all holidays requests with a positive value.', multi='user_left_days'), 'leaves_taken': fields.function(_user_left_days, string='Leaves Already Taken', help='This value is given by the sum of all holidays requests with a negative value.', multi='user_left_days'), @@ -146,15 +146,15 @@ class hr_holidays(osv.osv): 'employee_id': fields.many2one('hr.employee', "Employee", select=True, invisible=False, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, help='Leave Manager can let this field empty if this leave request/allocation is for every employee'), 'manager_id': fields.many2one('hr.employee', 'First Approval', invisible=False, readonly=True, help='This area is automatically filled by the user who validate the leave'), 'notes': fields.text('Reasons',readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), - 'number_of_days_temp': fields.float('Number of Days', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), + 'number_of_days_temp': fields.float('Allocation', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), 'number_of_days': fields.function(_compute_number_of_days, string='Number of Days', store=True), 'meeting_id': fields.many2one('crm.meeting', 'Meeting'), 'type': fields.selection([('remove','Leave Request'),('add','Allocation Request')], 'Request Type', required=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, help="Choose 'Leave Request' if someone wants to take an off-day. \nChoose 'Allocation Request' if you want to increase the number of leaves available for someone", select=True), 'parent_id': fields.many2one('hr.holidays', 'Parent'), 'linked_request_ids': fields.one2many('hr.holidays', 'parent_id', 'Linked Requests',), 'department_id':fields.related('employee_id', 'department_id', string='Department', type='many2one', relation='hr.department', readonly=True, store=True), - 'category_id': fields.many2one('hr.employee.category', "Category", help='Category of Employee', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), - 'holiday_type': fields.selection([('employee','By Employee'),('category','By Employee Category')], 'Allocation Mode', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, help='By Employee: Allocation/Request for individual Employee, By Employee Category: Allocation/Request for group of employees in category', required=True), + 'category_id': fields.many2one('hr.employee.category', "Employee Tag", help='Category of Employee', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), + 'holiday_type': fields.selection([('employee','By Employee'),('category','By Employee Tag')], 'Allocation Mode', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, help='By Employee: Allocation/Request for individual Employee, By Employee Tag: Allocation/Request for group of employees in category', required=True), 'manager_id2': fields.many2one('hr.employee', 'Second Approval', readonly=True, help='This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)'), 'double_validation': fields.related('holiday_status_id', 'double_validation', type='boolean', relation='hr.holidays.status', string='Apply Double Validation'), } @@ -541,7 +541,7 @@ class hr_employee(osv.osv): return result _columns = { - 'remaining_leaves': fields.function(_get_remaining_days, string='Remaining Legal Leaves', fnct_inv=_set_remaining_days, type="float", help='Total number of legal leaves allocated to this employee, change this value to create allocation/leave requests.'), + 'remaining_leaves': fields.function(_get_remaining_days, string='Remaining Legal Leaves', fnct_inv=_set_remaining_days, type="float", help='Total number of legal leaves allocated to this employee, change this value to create allocation/leave request. Total based on all the leave types without overriding limit.'), 'current_leave_state': fields.function(_get_leave_status, multi="leave_status", string="Current Leave Status", type="selection", selection=[('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]), diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 752d278baed..1914d30ec05 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -146,7 +146,10 @@ - + @@ -176,7 +179,7 @@ - + @@ -257,12 +260,12 @@ - My Leave Requests + Leave Requests hr.holidays form - {} - [('type','=','remove'),('employee_id.user_id','=', uid)] + {'default_type': 'remove', 'search_default_my_leaves':1} + [('type','=','remove')]

@@ -297,10 +300,10 @@ - + - Requests Approve + Requests to Approve hr.holidays form {'default_type': 'remove', 'search_default_approve':1} @@ -326,11 +329,11 @@ - My Allocation Requests + Allocation Requests hr.holidays form - {'default_type':'add'} - [('type','=','add'),('employee_id.user_id','=', uid)] + {'default_type':'add', 'search_default_my_leaves':1} + [('type','=','add')] @@ -349,7 +352,7 @@ - + Allocation Requests to Approve @@ -476,7 +479,7 @@ - + @@ -541,7 +544,7 @@

- + days
diff --git a/addons/hr_timesheet/hr_timesheet.py b/addons/hr_timesheet/hr_timesheet.py index 216541501b1..9e5337492d9 100644 --- a/addons/hr_timesheet/hr_timesheet.py +++ b/addons/hr_timesheet/hr_timesheet.py @@ -195,7 +195,7 @@ class account_analytic_account(osv.osv): _inherit = 'account.analytic.account' _description = 'Analytic Account' _columns = { - 'use_timesheets': fields.boolean('Use Timesheets', help="Check this field if this project manages timesheets"), + 'use_timesheets': fields.boolean('Timesheets', help="Check this field if this project manages timesheets"), } def on_change_template(self, cr, uid, ids, template_id, context=None): diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml index b3ec10e59c2..58dca6bd2d5 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml @@ -127,31 +127,6 @@
- - - Invoice Tasks Work - account.analytic.line - form - tree,form - [] - {'search_default_to_invoice': 1} - - -

- Click to add some tasks work to be invoiced. -

- This list shows every task you can invoice to the customer. - Select the lines and invoice from the 'more...' contextual - menu to generate invoices automatically. -

-
-
- - hr_timesheet_invoice.factor.search hr_timesheet_invoice.factor diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py index 695d589ee2e..3fd7cca9b3b 100644 --- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py +++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py @@ -62,11 +62,7 @@ class account_analytic_line(osv.osv): if data is None: data = {} - account_ids = {} - for line in self.pool.get('account.analytic.line').browse(cr, uid, ids, context=context): - account_ids[line.account_id.id] = True - - account_ids = account_ids.keys() #data['accounts'] + account_ids = [line.account_id.id for line in self.pool.get('account.analytic.line').browse(cr, uid, ids, context=context)] for account in analytic_account_obj.browse(cr, uid, account_ids, context=context): partner = account.partner_id if (not partner) or not (account.pricelist_id): @@ -106,18 +102,18 @@ class account_analytic_line(osv.osv): last_invoice = invoice_obj.create(cr, uid, curr_invoice, context=context2) invoices.append(last_invoice) - cr.execute("SELECT product_id, user_id, to_invoice, sum(unit_amount), product_uom_id, name " \ + cr.execute("SELECT product_id, user_id, to_invoice, sum(unit_amount), product_uom_id " \ "FROM account_analytic_line as line " \ "WHERE account_id = %s " \ "AND id IN %s AND to_invoice IS NOT NULL " \ - "GROUP BY product_id, user_id, to_invoice, product_uom_id, name", (account.id, tuple(ids),)) + "GROUP BY product_id, user_id, to_invoice, product_uom_id", (account.id, tuple(ids),)) - for product_id, user_id, factor_id, qty, uom, line_name in cr.fetchall(): + for product_id, user_id, factor_id, qty, uom in cr.fetchall(): if data.get('product'): product_id = data['product'][0] product = product_obj.browse(cr, uid, product_id, context=context2) if not product: - raise osv.except_osv(_('Error!'), _('There is no product defined for the line %s. Please select one or force the product through the wizard.') % (line_name)) + raise osv.except_osv(_('Error!'), _('There is no product defined. Please select one or force the product through the wizard.')) factor = invoice_factor_obj.browse(cr, uid, factor_id, context=context2) factor_name = product_obj.name_get(cr, uid, [product_id], context=context2)[0][1] if factor.customer_name: diff --git a/addons/hr_timesheet_sheet/static/src/xml/timesheet.xml b/addons/hr_timesheet_sheet/static/src/xml/timesheet.xml index 4390c7c6ed1..7ac7330f2d3 100644 --- a/addons/hr_timesheet_sheet/static/src/xml/timesheet.xml +++ b/addons/hr_timesheet_sheet/static/src/xml/timesheet.xml @@ -54,16 +54,10 @@

- Click to add projects/analytic accounts you worked on. + Click to add projects, contracts or analytic accounts.

You will be able to register your working hours and activities. -

- By default, you record timesheets on analytic accounts. - But if an analytic account represents a customer - contract, you can change the type of the analytic - account to 'Contract or Project' to setup the invoicing - options.

diff --git a/addons/idea/idea.py b/addons/idea/idea.py index a382948e15c..6ba34554a61 100644 --- a/addons/idea/idea.py +++ b/addons/idea/idea.py @@ -68,20 +68,20 @@ class idea_idea(osv.osv): def idea_cancel(self, cr, uid, ids, context=None): self.write(cr, uid, ids, { 'state': 'cancel' }) - self.message_post(cr, uid, ids, body=_('Idea canceled.'), context=context) + self.message_post(cr, uid, ids, body=_('Idea has been refused.'), context=context) return True def idea_open(self, cr, uid, ids, context={}): self.write(cr, uid, ids, {'state': 'open'}, context=context) - self.message_post(cr, uid, ids, body=_('Idea accepted.'), context=context) + self.message_post(cr, uid, ids, body=_('Idea has been opened.'), context=context) return True def idea_close(self, cr, uid, ids, context={}): self.write(cr, uid, ids, {'state': 'close'}, context=context) - self.message_post(cr, uid, ids, body=_('Idea closed.'), context=context) + self.message_post(cr, uid, ids, body=_('Idea has been accepted.'), context=context) return True def idea_draft(self, cr, uid, ids, context={}): self.write(cr, uid, ids, {'state': 'draft'}, context=context) - self.message_post(cr, uid, ids, body=_('Idea reset to draft.'), context=context) + self.message_post(cr, uid, ids, body=_('Idea has been created.'), context=context) return True diff --git a/addons/l10n_ch/invoice.py b/addons/l10n_ch/invoice.py index 9e8d3f0d57b..3a65e9a0d2b 100644 --- a/addons/l10n_ch/invoice.py +++ b/addons/l10n_ch/invoice.py @@ -67,7 +67,7 @@ class account_invoice(osv.osv): _columns = { ### BVR reference type BVR or FREE 'reference_type': fields.selection(_get_reference_type, - 'Reference Type', required=True), + 'Payment Reference', required=True), ### Partner bank link between bank and partner id 'partner_bank_id': fields.many2one('res.partner.bank', 'Bank Account', help='The partner bank account to pay\nKeep empty to use the default' diff --git a/addons/mail/data/mail_data.xml b/addons/mail/data/mail_data.xml index 9b91c519348..b095c54247f 100644 --- a/addons/mail/data/mail_data.xml +++ b/addons/mail/data/mail_data.xml @@ -21,7 +21,7 @@ weeks -1 - + 1000 diff --git a/addons/mail/mail_thread_view.xml b/addons/mail/mail_thread_view.xml index 1721b3df1d4..09d7afe6d3d 100644 --- a/addons/mail/mail_thread_view.xml +++ b/addons/mail/mail_thread_view.xml @@ -80,8 +80,7 @@ mail.wall { 'default_model': 'res.users', - 'default_res_id': uid, - 'search_default_message_read': True + 'default_res_id': uid } + + + + Open Marketing Menu + reload + + + + + + open + + + diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index af1664b1f9e..6a708b7cc64 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -470,7 +470,7 @@ class mrp_production(osv.osv): 'workcenter_lines': fields.one2many('mrp.production.workcenter.line', 'production_id', 'Work Centers Utilisation', readonly=True, states={'draft':[('readonly',False)]}), 'state': fields.selection( - [('draft', 'New'), ('cancel', 'Cancelled'), ('picking_except', 'Picking Exception'), ('confirmed', 'Waiting Goods'), + [('draft', 'New'), ('cancel', 'Cancelled'), ('picking_except', 'Picking Exception'), ('confirmed', 'Awaiting Raw Materials'), ('ready', 'Ready to Produce'), ('in_production', 'Production Started'), ('done', 'Done')], string='Status', readonly=True, help="When the production order is created the status is set to 'Draft'.\n\ diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index c28317066fc..2ed442b1831 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -347,7 +347,7 @@ - +
-