diff --git a/README.md b/README.md index d76976405b3..d5570e7a028 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![Build Status](http://runbot.odoo.com/runbot/badge/default/1/master.svg)](http://runbot.odoo.com/runbot) +[![Build Status](http://runbot.odoo.com/runbot/badge/default/1/8.0.svg)](http://runbot.odoo.com/runbot) Odoo ---- diff --git a/addons/account/account.py b/addons/account/account.py index 1aa3d490f15..ac70559fe7d 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -669,7 +669,7 @@ class account_account(osv.osv): # For legal reason (forbiden to modify journal entries which belongs to a closed fy or period), Forbid to modify # the code of an account if journal entries have been already posted on this account. This cannot be simply - # 'configurable' since it can lead to a lack of confidence in OpenERP and this is what we want to change. + # 'configurable' since it can lead to a lack of confidence in Odoo and this is what we want to change. def _check_allow_code_change(self, cr, uid, ids, context=None): line_obj = self.pool.get('account.move.line') for account in self.browse(cr, uid, ids, context=context): @@ -2488,7 +2488,7 @@ class account_account_template(osv.osv): ('other','Regular'), ('closed','Closed'), ], 'Internal Type', required=True,help="This type is used to differentiate types with "\ - "special effects in OpenERP: view can not have entries, consolidation are accounts that "\ + "special effects in Odoo: view can not have entries, consolidation are accounts that "\ "can have children accounts for multi-company consolidations, payable/receivable are for "\ "partners accounts (for debit/credit computations), closed for depreciated accounts."), 'user_type': fields.many2one('account.account.type', 'Account Type', required=True, diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index 65dae8a2cc1..4d9c3f3efbd 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -326,16 +326,26 @@ class account_bank_statement(osv.osv): or (not st.journal_id.default_debit_account_id): raise osv.except_osv(_('Configuration Error!'), _('Please verify that an account is defined in the journal.')) for line in st.move_line_ids: - if line.state <> 'valid': + if line.state != 'valid': raise osv.except_osv(_('Error!'), _('The account entries lines are not in valid state.')) move_ids = [] for st_line in st.line_ids: if not st_line.amount: continue - if not st_line.journal_entry_id.id: + if st_line.account_id and not st_line.journal_entry_id.id: + #make an account move as before + vals = { + 'debit': st_line.amount < 0 and -st_line.amount or 0.0, + 'credit': st_line.amount > 0 and st_line.amount or 0.0, + 'account_id': st_line.account_id.id, + 'name': st_line.name + } + self.pool.get('account.bank.statement.line').process_reconciliation(cr, uid, st_line.id, [vals], context=context) + elif not st_line.journal_entry_id.id: raise osv.except_osv(_('Error!'), _('All the account entries lines must be processed in order to close the statement.')) move_ids.append(st_line.journal_entry_id.id) - self.pool.get('account.move').post(cr, uid, move_ids, context=context) + if move_ids: + self.pool.get('account.move').post(cr, uid, move_ids, context=context) self.message_post(cr, uid, [st.id], body=_('Statement %s confirmed, journal items were created.') % (st.name,), context=context) self.link_bank_to_partner(cr, uid, ids, context=context) return self.write(cr, uid, ids, {'state': 'confirm'}, context=context) @@ -728,7 +738,12 @@ class account_bank_statement_line(osv.osv): move_id = am_obj.create(cr, uid, move_vals, context=context) # Create the move line for the statement line - amount = currency_obj.compute(cr, uid, st_line.statement_id.currency.id, company_currency.id, st_line.amount, context=context) + if st_line.statement_id.currency.id != company_currency.id: + ctx = context.copy() + ctx['date'] = st_line.date + amount = currency_obj.compute(cr, uid, st_line.statement_id.currency.id, company_currency.id, st_line.amount_currency, context=ctx) + else: + amount = st_line.amount bank_st_move_vals = bs_obj._prepare_bank_move_line(cr, uid, st_line, move_id, amount, company_currency.id, context=context) aml_obj.create(cr, uid, bank_st_move_vals, context=context) # Complete the dicts @@ -805,18 +820,19 @@ class account_bank_statement_line(osv.osv): _description = "Bank Statement Line" _inherit = ['ir.needaction_mixin'] _columns = { - 'name': fields.char('Description', required=True, copy=False), - 'date': fields.date('Date', required=True, copy=False), + 'name': fields.char('Description', required=True), + 'date': fields.date('Date', required=True), 'amount': fields.float('Amount', digits_compute=dp.get_precision('Account')), 'partner_id': fields.many2one('res.partner', 'Partner'), 'bank_account_id': fields.many2one('res.partner.bank','Bank Account'), + 'account_id': fields.many2one('account.account', 'Account', help="This technical field can be used at the statement line creation/import time in order to avoid the reconciliation process on it later on. The statement line will simply create a counterpart on this account"), 'statement_id': fields.many2one('account.bank.statement', 'Statement', select=True, required=True, ondelete='cascade'), 'journal_id': fields.related('statement_id', 'journal_id', type='many2one', relation='account.journal', string='Journal', store=True, readonly=True), 'ref': fields.char('Structured Communication'), 'note': fields.text('Notes'), 'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of bank statement lines."), 'company_id': fields.related('statement_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True), - 'journal_entry_id': fields.many2one('account.move', 'Journal Entry'), + 'journal_entry_id': fields.many2one('account.move', 'Journal Entry', copy=False), 'amount_currency': fields.float('Amount Currency', help="The amount expressed in an optional other currency if it is a multi-currency entry.", digits_compute=dp.get_precision('Account')), 'currency_id': fields.many2one('res.currency', 'Currency', help="The optional other currency if it is a multi-currency entry."), } diff --git a/addons/account/account_bank_view.xml b/addons/account/account_bank_view.xml index ef793a1bef5..426309e0c34 100644 --- a/addons/account/account_bank_view.xml +++ b/addons/account/account_bank_view.xml @@ -47,7 +47,7 @@ Configure your company's bank account and select those that must appear on the report footer.

- If you use the accounting application of OpenERP, journals and + If you use the accounting application of Odoo, journals and accounts will be created automatically based on these data.

diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index f9e9ff2813d..f4b3ac26819 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1005,15 +1005,18 @@ class account_invoice(models.Model): #TODO: implement messages system return True - @api.one - def _compute_display_name(self): + @api.multi + def name_get(self): TYPES = { 'out_invoice': _('Invoice'), 'in_invoice': _('Supplier Invoice'), 'out_refund': _('Refund'), 'in_refund': _('Supplier Refund'), } - self.display_name = "%s %s" % (self.number or TYPES[self.type], self.name or '') + result = [] + for inv in self: + result.append((inv.id, "%s %s" % (inv.number or TYPES[inv.type], inv.name or ''))) + return result @api.model def name_search(self, name, args=None, operator='ilike', limit=100): @@ -1627,8 +1630,8 @@ class mail_compose_message(models.Model): context.get('default_res_id') and context.get('mark_invoice_as_sent'): invoice = self.env['account.invoice'].browse(context['default_res_id']) invoice = invoice.with_context(mail_post_autofollow=True) - self.write({'sent': True}) - self.message_post(body=_("Invoice sent")) + invoice.write({'sent': True}) + invoice.message_post(body=_("Invoice sent")) return super(mail_compose_message, self).send_mail() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 64159dab18d..93dd7bf2e41 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -61,7 +61,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -201,7 +201,7 @@ domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '=', 'other')]" 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), ('state','not in',('close','cancelled'))]"/> @@ -358,7 +358,7 @@ domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '=', 'other')]" 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), ('state','not in',('close','cancelled'))]"/> @@ -523,7 +523,7 @@

Click to create a customer invoice.

- OpenERP's electronic invoicing allows to ease and fasten the + Odoo's electronic invoicing allows to ease and fasten the collection of customer payments. Your customer receives the invoice by email and he can pay online and/or import it in his own system. @@ -564,7 +564,7 @@ Click to record a new supplier invoice.

You can control the invoice from your supplier according to - what you purchased or received. OpenERP can also generate + what you purchased or received. Odoo can also generate draft invoices automatically from purchase orders or receipts.

diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 776111613ec..c513261a9cf 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -583,7 +583,7 @@ class account_move_line(osv.osv): def _check_no_view(self, cr, uid, ids, context=None): lines = self.browse(cr, uid, ids, context=context) for l in lines: - if l.account_id.type == 'view': + if l.account_id.type in ('view', 'consolidation'): return False return True @@ -635,7 +635,7 @@ class account_move_line(osv.osv): return True _constraints = [ - (_check_no_view, 'You cannot create journal items on an account of type view.', ['account_id']), + (_check_no_view, 'You cannot create journal items on an account of type view or consolidation.', ['account_id']), (_check_no_closed, 'You cannot create journal items on closed account.', ['account_id']), (_check_company_id, 'Account and Period must belong to the same company.', ['company_id']), (_check_date, 'The date of your Journal Entry is not in the defined period! You should change the date or remove this constraint from the journal.', ['date']), @@ -1038,6 +1038,8 @@ class account_move_line(osv.osv): all_moves = list(set(all_moves) - set(move_ids)) if unlink_ids: if opening_reconciliation: + raise osv.except_osv(_('Warning!'), + _('Opening Entries have already been generated. Please run "Cancel Closing Entries" wizard to cancel those entries and then run this wizard.')) obj_move_rec.write(cr, uid, unlink_ids, {'opening_reconciliation': False}) obj_move_rec.unlink(cr, uid, unlink_ids) if len(all_moves) >= 2: diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index d11fa30726c..47f21266c18 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -650,7 +650,7 @@ occurring over a given period of time on a bank account. You should receive this periodicaly from your bank.

- OpenERP allows you to reconcile a statement line directly with + Odoo allows you to reconcile a statement line directly with the related sale or puchase invoices.

@@ -920,7 +920,7 @@ Click to define a new tax code.

Depending on the country, a tax code is usually a cell to fill - in your legal tax statement. OpenERP allows you to define the + in your legal tax statement. Odoo allows you to define the tax structure and each tax computation will be registered in one or several tax code.

@@ -1269,8 +1269,8 @@ Select the period and the journal you want to fill.

This view can be used by accountants in order to quickly record - entries in OpenERP. If you want to record a supplier invoice, - start by recording the line of the expense account. OpenERP + entries in Odoo. If you want to record a supplier invoice, + start by recording the line of the expense account. Odoo will propose to you automatically the Tax related to this account and the counterpart "Account Payable".

@@ -1506,7 +1506,7 @@ A journal entry consists of several journal items, each of which is either a debit or a credit transaction.

- OpenERP automatically creates one journal entry per accounting + Odoo automatically creates one journal entry per accounting document: invoice, refund, supplier payment, bank statements, etc. So, you should record journal entries manually only/mainly for miscellaneous operations. @@ -1925,7 +1925,7 @@ - + diff --git a/addons/account/demo/account_minimal.xml b/addons/account/demo/account_minimal.xml index 3940c1e5357..7e6b12782dd 100644 --- a/addons/account/demo/account_minimal.xml +++ b/addons/account/demo/account_minimal.xml @@ -381,7 +381,7 @@ diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml index 309296c7955..36aa1ed409d 100644 --- a/addons/account/partner_view.xml +++ b/addons/account/partner_view.xml @@ -74,6 +74,7 @@ + + +

The check payment form allows you to track the payment you do to your suppliers using checks. When you select a supplier, the - payment method and an amount for the payment, OpenERP will + payment method and an amount for the payment, Odoo will propose to reconcile your payment with the open supplier invoices or bills.

diff --git a/addons/account_sequence/account_sequence_installer.py b/addons/account_sequence/account_sequence_installer.py index bcf1e14c20f..af3f5a971bf 100644 --- a/addons/account_sequence/account_sequence_installer.py +++ b/addons/account_sequence/account_sequence_installer.py @@ -31,7 +31,7 @@ class account_sequence_installer(osv.osv_memory): 'suffix': fields.char('Suffix', size=64, help="Suffix value of the record for the sequence"), 'number_next': fields.integer('Next Number', required=True, help="Next number of this sequence"), 'number_increment': fields.integer('Increment Number', required=True, help="The next number of the sequence will be incremented by this number"), - 'padding' : fields.integer('Number padding', required=True, help="OpenERP will automatically adds some '0' on the left of the 'Next Number' to get the required padding size."), + 'padding' : fields.integer('Number padding', required=True, help="Odoo will automatically adds some '0' on the left of the 'Next Number' to get the required padding size."), 'company_id': fields.many2one('res.company', 'Company'), } _defaults = { diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 275e002695e..6341c8b1e10 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -946,6 +946,8 @@ class account_voucher(osv.osv): # refresh to make sure you don't unlink an already removed move voucher.refresh() for line in voucher.move_ids: + # refresh to make sure you don't unreconcile an already unreconciled entry + line.refresh() if line.reconcile_id: move_lines = [move_line.id for move_line in line.reconcile_id.line_id] move_lines.remove(line.id) diff --git a/addons/account_voucher/account_voucher_data.xml b/addons/account_voucher/account_voucher_data.xml index 6329176c6e9..6d141869184 100644 --- a/addons/account_voucher/account_voucher_data.xml +++ b/addons/account_voucher/account_voucher_data.xml @@ -9,7 +9,7 @@ notification eInvoicing & Payments application installed! - OpenERP's electronic invoicing accelerates the creation of invoices and collection of customer payments. Invoices are created in a few clicks and your customers receive them by email. They can pay online and/or import them in their own system.

+ Odoo's electronic invoicing accelerates the creation of invoices and collection of customer payments. Invoices are created in a few clicks and your customers receive them by email. They can pay online and/or import them in their own system.

You can track customer payments easily and automate follow-ups. You get an overview of the discussion with your customers on each invoice for easier traceability. For advanced accounting features, you should install the "Accounting and Finance" module.

]]>
diff --git a/addons/account_voucher/report/account_voucher_sales_receipt.py b/addons/account_voucher/report/account_voucher_sales_receipt.py index 246cd8b47e8..b615143567d 100644 --- a/addons/account_voucher/report/account_voucher_sales_receipt.py +++ b/addons/account_voucher/report/account_voucher_sales_receipt.py @@ -28,11 +28,6 @@ class sale_receipt_report(osv.osv): _rec_name = 'date' _columns = { 'date': fields.date('Date', readonly=True), - 'year': fields.char('Year', size=4, readonly=True), - 'day': fields.char('Day', size=128, readonly=True), - 'month': fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), - ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'), - ('10','October'), ('11','November'), ('12','December')], 'Month', readonly=True), 'currency_id': fields.many2one('res.currency', 'Currency', readonly=True), 'journal_id': fields.many2one('account.journal', 'Journal', readonly=True), 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True), @@ -69,9 +64,6 @@ class sale_receipt_report(osv.osv): create or replace view sale_receipt_report as ( select min(avl.id) as id, av.date as date, - to_char(av.date, 'YYYY') as year, - to_char(av.date, 'MM') as month, - to_char(av.date, 'YYYY-MM-DD') as day, av.partner_id as partner_id, aj.currency as currency_id, av.journal_id as journal_id, @@ -107,9 +99,6 @@ class sale_receipt_report(osv.osv): group by av.date, av.id, - to_char(av.date, 'YYYY'), - to_char(av.date, 'MM'), - to_char(av.date, 'YYYY-MM-DD'), av.partner_id, aj.currency, av.journal_id, diff --git a/addons/account_voucher/report/account_voucher_sales_receipt_view.xml b/addons/account_voucher/report/account_voucher_sales_receipt_view.xml index a6e153573e7..78af9d28fc5 100644 --- a/addons/account_voucher/report/account_voucher_sales_receipt_view.xml +++ b/addons/account_voucher/report/account_voucher_sales_receipt_view.xml @@ -1,34 +1,7 @@ - - + sale.receipt.report.graph sale.receipt.report @@ -65,9 +38,7 @@ - - - +
diff --git a/addons/account_voucher/static/description/index.html b/addons/account_voucher/static/description/index.html index a363291f12e..4f149075ed8 100644 --- a/addons/account_voucher/static/description/index.html +++ b/addons/account_voucher/static/description/index.html @@ -112,7 +112,7 @@ material. Define recurrencies to produce recurring invoice automatically.
- OpenERP allowed us to automate sending 10.000 invoices per month. + Odoo allowed us to automate sending 10.000 invoices per month. @@ -124,7 +124,7 @@ material. Define recurrencies to produce recurring invoice automatically.
- We have found invoicing module of OpenERP to be user + We have found invoicing module of Odoo to be user friendly and highly customizable. diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index aa427bbf91e..dd316ea2600 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -270,7 +270,7 @@

Click to create a new supplier payment.

- OpenERP helps you easily track payments you make and the remaining balances you need to pay your suppliers. + Odoo helps you easily track payments you make and the remaining balances you need to pay your suppliers.

@@ -554,7 +554,7 @@ Click to register a new payment.

Enter the customer and the payment method and then, either - create manually a payment record or OpenERP will propose to you + create manually a payment record or Odoo will propose to you automatically the reconciliation of this payment with the open invoices or sales receipts.

diff --git a/addons/analytic_user_function/analytic_user_function_view.xml b/addons/analytic_user_function/analytic_user_function_view.xml index 147e96f0be0..51e020b3f81 100644 --- a/addons/analytic_user_function/analytic_user_function_view.xml +++ b/addons/analytic_user_function/analytic_user_function_view.xml @@ -47,7 +47,7 @@ of the default values when invoicing the customer.

- OpenERP will recursively search on parent accounts + Odoo will recursively search on parent accounts to check if specific conditions are defined for a specific user. This allows to set invoicing conditions for a group of contracts. diff --git a/addons/auth_ldap/users_ldap.py b/addons/auth_ldap/users_ldap.py index 9ddc3d6ed45..70323bb6a0e 100644 --- a/addons/auth_ldap/users_ldap.py +++ b/addons/auth_ldap/users_ldap.py @@ -190,7 +190,7 @@ class CompanyLDAP(osv.osv): if res[1]: user_id = res[0] elif conf['create_user']: - _logger.debug("Creating new OpenERP user \"%s\" from LDAP" % login) + _logger.debug("Creating new Odoo user \"%s\" from LDAP" % login) user_obj = self.pool['res.users'] values = self.map_ldap_attributes(cr, uid, conf, login, ldap_entry) if conf['user']: diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py index 1a166c39cde..e48aeebd8a5 100644 --- a/addons/auth_oauth/controllers/main.py +++ b/addons/auth_oauth/controllers/main.py @@ -173,7 +173,7 @@ class OAuthController(http.Controller): @http.route('/auth_oauth/oea', type='http', auth='none') def oea(self, **kw): - """login user via OpenERP Account provider""" + """login user via Odoo Account provider""" dbname = kw.pop('db', None) if not dbname: dbname = db_monodb() diff --git a/addons/auth_signup/auth_signup_data.xml b/addons/auth_signup/auth_signup_data.xml index 2789fcd8315..096d2327393 100644 --- a/addons/auth_signup/auth_signup_data.xml +++ b/addons/auth_signup/auth_signup_data.xml @@ -28,7 +28,7 @@ ${object.email|safe} Password reset A password reset was requested for the OpenERP account linked to this email.

+

A password reset was requested for the Odoo account linked to this email.

You may change your password by following this link.

@@ -37,18 +37,18 @@ - OpenERP Enterprise Connection + Odoo Enterprise Connection ]]> ${object.email|safe} - + ${object.name},

- You have been invited to connect to "${object.company_id.name}" in order to get access to your documents in OpenERP. + You have been invited to connect to "${object.company_id.name}" in order to get access to your documents in Odoo.

To accept the invitation, click on the following link: diff --git a/addons/base_action_rule/test_models.py b/addons/base_action_rule/test_models.py index 2a88def6f75..b931b0fc3be 100644 --- a/addons/base_action_rule/test_models.py +++ b/addons/base_action_rule/test_models.py @@ -1,4 +1,5 @@ from openerp.osv import fields, osv +from openerp import api AVAILABLE_STATES = [ ('draft', 'New'), @@ -25,6 +26,7 @@ class lead_test(osv.Model): 'active' : True, } + @api.cr_uid_ids_context def message_post(self, cr, uid, thread_id, body='', subject=None, type='notification', subtype=None, parent_id=False, attachments=None, context=None, **kwargs): pass diff --git a/addons/base_gengo/controller/gengo_callback.py b/addons/base_gengo/controller/gengo_callback.py index 44fa9b9390a..328be0ae357 100644 --- a/addons/base_gengo/controller/gengo_callback.py +++ b/addons/base_gengo/controller/gengo_callback.py @@ -18,17 +18,18 @@ class website_gengo(http.Controller): @http.route('/website/gengo_callback', type='http', auth='none') def gengo_callback(self, **post): + print "IN website/gengo_callback" cr, uid, context = request.cr, openerp.SUPERUSER_ID, request.context translation_pool = request.registry['ir.translation'] if post and post.get('job') and post.get('pgk'): if post.get('pgk') != self.get_gengo_key(cr): - return Response("Bad authentication - 403/412", status=412) + return Response("Bad authentication", status=104) job = json.loads(post['job'], 'utf-8') tid = job.get('custom_data', False) if (job.get('status') == 'approved') and tid: term = translation_pool.browse(cr, uid, int(tid), context=context) if term.src != job.get('body_src'): - return Response("Text Altered - Not saved", status=100) + return Response("Text Altered - Not saved", status=418) domain = [ '|', ('id', "=", int(tid)), @@ -49,5 +50,5 @@ class website_gengo(http.Controller): translation_pool.write(cr, uid, all_ir_tanslations, vals, context=context) return Response("OK", status=200) else: - return Response("No terms found", status=104) - return Response("Not saved", status=100) + return Response("No terms found", status=412) + return Response("Not saved", status=418) diff --git a/addons/base_gengo/gengo_sync_schedular_data.xml b/addons/base_gengo/gengo_sync_schedular_data.xml index e916489e5f7..0af74d8ccf1 100644 --- a/addons/base_gengo/gengo_sync_schedular_data.xml +++ b/addons/base_gengo/gengo_sync_schedular_data.xml @@ -8,7 +8,7 @@ 6 hours -1 - 0 + @@ -21,7 +21,7 @@ 6 hours -1 - 0 + diff --git a/addons/base_gengo/wizard/base_gengo_translations.py b/addons/base_gengo/wizard/base_gengo_translations.py index 4ef13eb7b46..afa06c782d1 100644 --- a/addons/base_gengo/wizard/base_gengo_translations.py +++ b/addons/base_gengo/wizard/base_gengo_translations.py @@ -119,7 +119,7 @@ class base_gengo_translations(osv.osv_memory): """ This method will be called by cron services to get translations from Gengo. It will read translated terms and comments from Gengo and will - update respective ir.translation in openerp. + update respective ir.translation in Odoo. """ translation_pool = self.pool.get('ir.translation') flag, gengo = self.gengo_authentication(cr, uid, context=context) @@ -245,7 +245,7 @@ class base_gengo_translations(osv.osv_memory): A special key 'gengo_language' can be passed in the context in order to request only translations of that language only. Its value is the language - ID in openerp. + ID in Odoo. """ if context is None: context = {} diff --git a/addons/base_import/models.py b/addons/base_import/models.py index bc4bb0a268f..ab2ec8b72ce 100644 --- a/addons/base_import/models.py +++ b/addons/base_import/models.py @@ -48,7 +48,7 @@ class ir_import(orm.TransientModel): .. attribute:: name (str) - The field's logical (OpenERP) name within the scope of + The field's logical (Odoo) name within the scope of its parent. .. attribute:: string (str) diff --git a/addons/base_import/static/src/xml/import.xml b/addons/base_import/static/src/xml/import.xml index 0295828cb7f..1f8bd6705a8 100644 --- a/addons/base_import/static/src/xml/import.xml +++ b/addons/base_import/static/src/xml/import.xml @@ -52,7 +52,7 @@

-

Map your data to OpenERP

+

Map your data to Odoo

@@ -67,7 +67,7 @@

If the file contains - the column names, OpenERP can try auto-detecting the + the column names, Odoo can try auto-detecting the field corresponding to the column. This makes imports simpler especially when the file has many columns.

@@ -85,7 +85,7 @@ different records, you should use the unique identifier from the original application and map it to the ID - column in OpenERP. When you + column in Odoo. When you import an other record that links to the first one, use XXX/ID to the original unique identifier.

@@ -108,7 +108,7 @@ settings, you can modify the File Format Options (displayed under the Browse CSV file bar after you select your file).

Note that if your CSV file - has a tabulation as separator, OpenERP will not + has a tabulation as separator, Odoo will not detect the separations. You will need to change the file format options in your spreadsheet application. See the following question.

@@ -141,15 +141,15 @@

Some fields define a relationship with another object. For example, the country of a contact is a link to a record of the 'Country' object. When you - want to import such fields, OpenERP will have to + want to import such fields, Odoo will have to recreate links between the different records. - To help you import such fields, OpenERP provides 3 + To help you import such fields, Odoo provides 3 mechanisms. You must use one and only one mechanism per field you want to import.

For example, to - reference the country of a contact, OpenERP proposes + reference the country of a contact, Odoo proposes you 3 different fields to import:

  • Country: the name or code of the country
  • -
  • Country/Database ID: the unique OpenERP ID for a +
  • Country/Database ID: the unique Odoo ID for a record, defined by the ID postgresql column
  • Country/External ID: the ID of this record referenced in another application (or the .XML file @@ -254,10 +254,10 @@ have already been imported will be modified instead of being created. This is very usefull as it allows you to import several times the same CSV file while having - made some changes in between two imports. OpenERP will + made some changes in between two imports. Odoo will take care of creating or modifying each record depending if it's new or not.

    This feature - allows you to use the Import/Export tool of OpenERP to + allows you to use the Import/Export tool of Odoo to modify a batch of records in your favorite spreadsheet application.

    @@ -269,9 +269,9 @@ specific field?

    If you do not set all fields in your CSV file, - OpenERP will assign the default value for every non + Odoo will assign the default value for every non defined fields. But if you - set fields with empty values in your CSV file, OpenERP + set fields with empty values in your CSV file, Odoo will set the EMPTY value in the field, instead of assigning the default value.

    @@ -280,7 +280,7 @@
    How to export/import different tables from an SQL - application to OpenERP?
    + application to Odoo?

    If you need to import data from different tables, you will have to recreate relations between records @@ -288,7 +288,7 @@ companies and persons, you will have to recreate the link between each person and the company they work for).

    To manage relations between tables, - you can use the "External ID" facilities of OpenERP. + you can use the "External ID" facilities of Odoo. The "External ID" of a record is the unique identifier of this record in another application. This "External ID" must be unique accoss all the records of all @@ -337,7 +337,7 @@ and company_1 who shared the same ID 1 in the orignial database).

    The two files produced are ready to be imported in - OpenERP without any modifications. After having + Odoo without any modifications. After having imported these two CSV files, you will have 4 contacts and 3 companies. (the firsts two contacts are linked to the first company). You must first import the diff --git a/addons/base_import/tests/test_cases.py b/addons/base_import/tests/test_cases.py index ac5a4440523..bad79bc7cdc 100644 --- a/addons/base_import/tests/test_cases.py +++ b/addons/base_import/tests/test_cases.py @@ -11,18 +11,10 @@ ID_FIELD = { 'required': False, 'fields': [], } -DISPLAY_NAME_FIELD = { - 'id': 'display_name', - 'name': 'display_name', - 'string': "Name", - 'required': False, - 'fields': [], -} def make_field(name='value', string='unknown', required=False, fields=[]): return [ ID_FIELD, - DISPLAY_NAME_FIELD, {'id': name, 'name': name, 'string': string, 'required': required, 'fields': fields}, ] @@ -50,7 +42,7 @@ class test_basic_fields(BaseImportCase): def test_readonly(self): """ Readonly fields should be filtered out""" - self.assertEqualFields(self.get_fields('char.readonly'), [ID_FIELD, DISPLAY_NAME_FIELD]) + self.assertEqualFields(self.get_fields('char.readonly'), [ID_FIELD]) def test_readonly_states(self): """ Readonly fields with states should not be filtered out""" @@ -59,12 +51,12 @@ class test_basic_fields(BaseImportCase): def test_readonly_states_noreadonly(self): """ Readonly fields with states having nothing to do with readonly should still be filtered out""" - self.assertEqualFields(self.get_fields('char.noreadonly'), [ID_FIELD, DISPLAY_NAME_FIELD]) + self.assertEqualFields(self.get_fields('char.noreadonly'), [ID_FIELD]) def test_readonly_states_stillreadonly(self): """ Readonly fields with readonly states leaving them readonly always... filtered out""" - self.assertEqualFields(self.get_fields('char.stillreadonly'), [ID_FIELD, DISPLAY_NAME_FIELD]) + self.assertEqualFields(self.get_fields('char.stillreadonly'), [ID_FIELD]) def test_m2o(self): """ M2O fields should allow import of themselves (name_get), @@ -92,7 +84,6 @@ class test_o2m(BaseImportCase): def test_shallow(self): self.assertEqualFields(self.get_fields('o2m'), make_field(fields=[ ID_FIELD, - DISPLAY_NAME_FIELD, # FIXME: should reverse field be ignored? {'id': 'parent_id', 'name': 'parent_id', 'string': 'unknown', 'required': False, 'fields': [ {'id': 'parent_id', 'name': 'id', 'string': 'External ID', 'required': False, 'fields': []}, @@ -250,7 +241,6 @@ class test_preview(TransactionCase): # Order depends on iteration order of fields_get self.assertItemsEqual(result['fields'], [ ID_FIELD, - DISPLAY_NAME_FIELD, {'id': 'name', 'name': 'name', 'string': 'Name', 'required':False, 'fields': []}, {'id': 'somevalue', 'name': 'somevalue', 'string': 'Some Value', 'required':True, 'fields': []}, {'id': 'othervalue', 'name': 'othervalue', 'string': 'Other Variable', 'required':False, 'fields': []}, diff --git a/addons/base_report_designer/base_report_designer_installer.xml b/addons/base_report_designer/base_report_designer_installer.xml index 74cfc63a6ce..2df241478cf 100644 --- a/addons/base_report_designer/base_report_designer_installer.xml +++ b/addons/base_report_designer/base_report_designer_installer.xml @@ -2,16 +2,16 @@ - Form View: OpenERP Report Designer Installation + Form View: Odoo Report Designer Installation base_report_designer.installer - OpenERP Report Designer Configuration + Odoo Report Designer Configuration -

@@ -180,8 +180,5 @@ form inline - - - diff --git a/addons/base_vat/base_vat.py b/addons/base_vat/base_vat.py index b7ac9592dd3..38ad7a8fd24 100644 --- a/addons/base_vat/base_vat.py +++ b/addons/base_vat/base_vat.py @@ -63,6 +63,7 @@ _ref_vat = { 'mx': 'MXABC123456T1B', 'nl': 'NL123456782B90', 'no': 'NO123456785', + 'pe': 'PER10254824220 or PED10254824220', 'pl': 'PL1234567883', 'pt': 'PT123456789', 'ro': 'RO1234567897', @@ -144,10 +145,11 @@ class res_partner(osv.osv): return cn[0] in string.ascii_lowercase and cn[1] in string.ascii_lowercase vat_country, vat_number = self._split_vat(self.browse(cr, uid, ids)[0].vat) vat_no = "'CC##' (CC=Country Code, ##=VAT Number)" + error_partner = self.browse(cr, uid, ids, context=context) if default_vat_check(vat_country, vat_number): vat_no = _ref_vat[vat_country] if vat_country in _ref_vat else vat_no - #Retrieve the current partner for wich the VAT is not valid - error_partner = self.browse(cr, uid, ids, context=context) + if self.pool['res.users'].browse(cr, uid, uid).company_id.vat_check_vies: + return '\n' + _('The VAT number [%s] for partner [%s] either failed the VIES VAT validation check or did not respect the expected format %s.') % (error_partner[0].vat, error_partner[0].name, vat_no) return '\n' + _('The VAT number [%s] for partner [%s] does not seem to be valid. \nNote: the expected format is %s') % (error_partner[0].vat, error_partner[0].name, vat_no) _constraints = [(check_vat, _construct_constraint_msg, ["vat"])] @@ -218,7 +220,7 @@ class res_partner(osv.osv): return vat[7] == self._ie_check_char(vat[2:7] + vat[0] + vat[8]) return False - # Mexican VAT verification, contributed by + # Mexican VAT verification, contributed by Vauxoo # and Panos Christeas __check_vat_mx_re = re.compile(r"(?P[A-Za-z\xd1\xf1&]{3,4})" \ r"[ \-_]?" \ @@ -275,5 +277,39 @@ class res_partner(osv.osv): return False return check == int(vat[8]) + # Peruvian VAT validation, contributed by Vauxoo + def check_vat_pe(self, vat): + + vat_type,vat = vat and len(vat)>=2 and (vat[0], vat[1:]) or (False, False) + + if vat_type and vat_type.upper() == 'D': + #DNI + return True + elif vat_type and vat_type.upper() == 'R': + #verify RUC + factor = '5432765432' + sum = 0 + dig_check = False + if len(vat) != 11: + return False + try: + int(vat) + except ValueError: + return False + + for f in range(0,10): + sum += int(factor[f]) * int(vat[f]) + + subtraction = 11 - (sum % 11) + if subtraction == 10: + dig_check = 0 + elif subtraction == 11: + dig_check = 1 + else: + dig_check = subtraction + + return int(vat[10]) == dig_check + else: + return False # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/bus/bus.py b/addons/bus/bus.py index dc6ff6d7f1a..d3801743fdb 100644 --- a/addons/bus/bus.py +++ b/addons/bus/bus.py @@ -51,8 +51,8 @@ class ImBus(osv.Model): "channel" : json_dump(channel), "message" : json_dump(message) } - cr.commit() self.pool['bus.bus'].create(cr, openerp.SUPERUSER_ID, values) + cr.commit() if random.random() < 0.01: self.gc(cr, uid) if channels: diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py index a77eb5ea6f6..1115343fedc 100644 --- a/addons/calendar/calendar.py +++ b/addons/calendar/calendar.py @@ -11,6 +11,7 @@ from datetime import datetime, timedelta from dateutil import parser from dateutil import rrule from dateutil.relativedelta import relativedelta +from openerp import api from openerp import tools, SUPERUSER_ID from openerp.osv import fields, osv from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT @@ -162,7 +163,7 @@ class calendar_attendee(osv.Model): elif interval == 'minutes': delta = timedelta(minutes=duration) trigger.value = delta - valarm.add('DESCRIPTION').value = alarm.name or 'OpenERP' + valarm.add('DESCRIPTION').value = alarm.name or 'Odoo' for attendee in event_obj.attendee_ids: attendee_add = event.add('attendee') attendee_add.value = 'MAILTO:' + (attendee.email or '') @@ -745,6 +746,8 @@ class calendar_event(osv.Model): def _compute(self, cr, uid, ids, fields, arg, context=None): res = {} + if not isinstance(fields, list): + fields = [fields] for meeting_id in ids: res[meeting_id] = {} attendee = self._find_my_attendee(cr, uid, [meeting_id], context) @@ -1321,6 +1324,7 @@ class calendar_event(osv.Model): ('user_id', '=', uid), ] + @api.cr_uid_ids_context def message_post(self, cr, uid, thread_id, body='', subject=None, type='notification', subtype=None, parent_id=False, attachments=None, context=None, **kwargs): if isinstance(thread_id, str): thread_id = get_real_ids(thread_id) @@ -1567,6 +1571,12 @@ class calendar_event(osv.Model): select = [ids] else: select = ids + + # FIXME: find a better way to not push virtual ids in the cache + # (leading to their prefetching and ultimately a type error when + # postgres tries to convert '14-3489274297' to an integer) + self.invalidate_cache(cr, uid, context=context) + select = map(lambda x: (x, calendar_id2real_id(x)), select) result = [] real_data = super(calendar_event, self).read(cr, uid, [real_id for calendar_id, real_id in select], fields=fields2, context=context, load=load) diff --git a/addons/contacts/contacts_view.xml b/addons/contacts/contacts_view.xml index 4908653aa2b..8f99805e0d0 100644 --- a/addons/contacts/contacts_view.xml +++ b/addons/contacts/contacts_view.xml @@ -14,7 +14,7 @@

Click to add a contact in your address book.

- OpenERP helps you easily track all activities related to + Odoo helps you easily track all activities related to a customer; discussions, history of business opportunities, documents, etc.

diff --git a/addons/crm/base_partner_merge_view.xml b/addons/crm/base_partner_merge_view.xml index 27455223b4d..8bda9607e0a 100644 --- a/addons/crm/base_partner_merge_view.xml +++ b/addons/crm/base_partner_merge_view.xml @@ -65,7 +65,7 @@

Select the list of fields used to search for duplicated records. If you select several fields, - OpenERP will propose you to merge only those having + Odoo will propose you to merge only those having all these fields in common. (not one of the fields).

diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 20d025fd64d..bb5cd031df4 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -71,9 +71,9 @@ class crm_tracking_mixin(osv.AbstractModel): _columns = { 'campaign_id': fields.many2one('crm.tracking.campaign', 'Campaign', # old domain ="['|',('section_id','=',section_id),('section_id','=',False)]" - help="This is a name that helps you keep track of your different campaign efforts Example: Fall_Drive, Christmas_Special"), - 'source_id': fields.many2one('crm.tracking.source', 'Source', help="This is the source of the link Example: Search Engine, another domain, or name of email list"), - 'medium_id': fields.many2one('crm.tracking.medium', 'Channel', help="This is the method of delivery. EX: Postcard, Email, or Banner Ad"), + help="This is a name that helps you keep track of your different campaign efforts Ex: Fall_Drive, Christmas_Special"), + 'source_id': fields.many2one('crm.tracking.source', 'Source', help="This is the source of the link Ex: Search Engine, another domain, or name of email list"), + 'medium_id': fields.many2one('crm.tracking.medium', 'Channel', help="This is the method of delivery. Ex: Postcard, Email, or Banner Ad"), } def tracking_fields(self): @@ -82,15 +82,17 @@ class crm_tracking_mixin(osv.AbstractModel): def tracking_get_values(self, cr, uid, vals, context=None): for key, field in self.tracking_fields(): column = self._all_columns[field].column - value = vals.get(field) or (request and request.session.get(key)) # params.get sould be always in session by the dispatch from ir_http - if column._type in ['many2one'] and isinstance(value, basestring): # if we receive a string for a many2one, we search / create the id + value = vals.get(field) or (request and request.session.get(key)) # params.get should be always in session by the dispatch from ir_http + if column._type in ['many2one'] and isinstance(value, basestring): # if we receive a string for a many2one, we search / create the id if value: Model = self.pool[column._obj] rel_id = Model.name_search(cr, uid, value, context=context) - if not rel_id: + if rel_id: + rel_id = rel_id[0][0] + else: rel_id = Model.create(cr, uid, {'name': value}, context=context) vals[field] = rel_id - # Here the code for other cases that many2one + # Here the code for others cases that many2one else: vals[field] = value return vals @@ -123,17 +125,15 @@ class crm_case_stage(osv.osv): 'on_change': fields.boolean('Change Probability Automatically', help="Setting this stage will change the probability automatically on the opportunity."), 'requirements': fields.text('Requirements'), 'section_ids': fields.many2many('crm.case.section', 'section_stage_rel', 'stage_id', 'section_id', string='Sections', - help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."), + help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."), 'case_default': fields.boolean('Default to New Sales Team', - help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."), + help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."), 'fold': fields.boolean('Folded in Kanban View', help='This stage is folded in the kanban view when' 'there are no records in that stage to display.'), - 'type': fields.selection([('lead', 'Lead'), - ('opportunity', 'Opportunity'), - ('both', 'Both')], - string='Type', required=True, - help="This field is used to distinguish stages related to Leads from stages related to Opportunities, or to specify stages available for both types."), + 'type': fields.selection([('lead', 'Lead'), ('opportunity', 'Opportunity'), ('both', 'Both')], + string='Type', required=True, + help="This field is used to distinguish stages related to Leads from stages related to Opportunities, or to specify stages available for both types."), } _defaults = { @@ -145,6 +145,7 @@ class crm_case_stage(osv.osv): 'case_default': True, } + class crm_case_categ(osv.osv): """ Category of Case """ _name = "crm.case.categ" @@ -154,16 +155,18 @@ class crm_case_categ(osv.osv): 'section_id': fields.many2one('crm.case.section', 'Sales Team'), 'object_id': fields.many2one('ir.model', 'Object Name'), } + def _find_object_id(self, cr, uid, context=None): """Finds id for case object""" context = context or {} object_id = context.get('object_id', False) - ids = self.pool.get('ir.model').search(cr, uid, ['|',('id', '=', object_id),('model', '=', context.get('object_name', False))]) + ids = self.pool.get('ir.model').search(cr, uid, ['|', ('id', '=', object_id), ('model', '=', context.get('object_name', False))]) return ids and ids[0] or False _defaults = { - 'object_id' : _find_object_id + 'object_id': _find_object_id } + class crm_payment_mode(osv.osv): """ Payment Mode for Fund """ _name = "crm.payment.mode" @@ -173,5 +176,4 @@ class crm_payment_mode(osv.osv): 'section_id': fields.many2one('crm.case.section', 'Sales Team'), } - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/crm_demo.xml b/addons/crm/crm_demo.xml index df776f92350..71e21b3392d 100644 --- a/addons/crm/crm_demo.xml +++ b/addons/crm/crm_demo.xml @@ -3,7 +3,7 @@ - OpenERP partners + Odoo partners True diff --git a/addons/crm/crm_lead_menu.xml b/addons/crm/crm_lead_menu.xml index 60dc307cc0f..f02f9305c4b 100644 --- a/addons/crm/crm_lead_menu.xml +++ b/addons/crm/crm_lead_menu.xml @@ -45,7 +45,7 @@

- OpenERP helps you keep track of your sales pipeline to follow + Odoo helps you keep track of your sales pipeline to follow up potential sales and better forecast your future revenues.

You will be able to plan meetings and phone calls from diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 3f10dcf2099..a567be10619 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -349,6 +349,9 @@ + + + diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py index 382102710bb..b983dbfd4b3 100644 --- a/addons/crm/crm_phonecall.py +++ b/addons/crm/crm_phonecall.py @@ -141,6 +141,7 @@ class crm_phonecall(osv.osv): 'partner_phone' : call.partner_phone, 'partner_mobile' : call.partner_mobile, 'priority': call.priority, + 'opportunity_id': call.opportunity_id and call.opportunity_id.id or False, } new_id = self.create(cr, uid, vals, context=context) if action == 'log': diff --git a/addons/crm/crm_phonecall_menu.xml b/addons/crm/crm_phonecall_menu.xml index 4ab33502a3d..2448351040b 100644 --- a/addons/crm/crm_phonecall_menu.xml +++ b/addons/crm/crm_phonecall_menu.xml @@ -64,7 +64,7 @@

Click to log the summary of a phone call.

- OpenERP allows you to log inbound calls on the fly to track the + Odoo allows you to log inbound calls on the fly to track the history of the communication with a customer or to inform another team member.

@@ -112,7 +112,7 @@

Click to schedule a call

- OpenERP allows you to easily define all the calls to be done + Odoo allows you to easily define all the calls to be done by your sales team and follow up based on their summary.

You can use the import feature to massively import a new list of diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml index b0e64042af7..3b76e458800 100644 --- a/addons/crm/crm_view.xml +++ b/addons/crm/crm_view.xml @@ -23,9 +23,6 @@ - - crm.tracking.medium.tree diff --git a/addons/crm/report/crm_lead_report.py b/addons/crm/report/crm_lead_report.py index 32851a753bc..82c68be92fe 100644 --- a/addons/crm/report/crm_lead_report.py +++ b/addons/crm/report/crm_lead_report.py @@ -88,10 +88,10 @@ class crm_lead_report(osv.osv): id, c.date_deadline, - to_char(c.date_open, 'YYYY-MM-DD') as opening_date, - to_char(c.date_closed, 'YYYY-mm-dd') as date_closed, + date(c.date_open) as opening_date, + date(c.date_closed) as date_closed, - date_trunc('day',c.date_last_stage_update) as date_last_stage_update, + c.date_last_stage_update as date_last_stage_update, c.user_id, c.probability, @@ -107,7 +107,7 @@ class crm_lead_report(osv.osv): c.country_id, c.planned_revenue, c.planned_revenue*(c.probability/100) as probable_revenue, - date_trunc('day',c.create_date) as create_date, + c.create_date as create_date, extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close, abs(extract('epoch' from (c.date_deadline - c.date_closed))/(3600*24)) as delay_expected, extract('epoch' from (c.date_open-c.create_date))/(3600*24) as delay_open diff --git a/addons/crm/report/crm_lead_report_view.xml b/addons/crm/report/crm_lead_report_view.xml index 221e768ed49..7551a00c381 100644 --- a/addons/crm/report/crm_lead_report_view.xml +++ b/addons/crm/report/crm_lead_report_view.xml @@ -100,10 +100,7 @@ - - - - + diff --git a/addons/crm/report/crm_phonecall_report.py b/addons/crm/report/crm_phonecall_report.py index 137bda575b6..ac22130964b 100644 --- a/addons/crm/report/crm_phonecall_report.py +++ b/addons/crm/report/crm_phonecall_report.py @@ -55,7 +55,6 @@ class crm_phonecall_report(osv.osv): 'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'opening_date': fields.date('Opening Date', readonly=True, select=True), - 'creation_date': fields.date('Creation Date', readonly=True, select=True), 'date_closed': fields.date('Close Date', readonly=True, select=True), } @@ -69,9 +68,8 @@ class crm_phonecall_report(osv.osv): create or replace view crm_phonecall_report as ( select id, - to_char(c.create_date, 'YYYY-MM-DD') as creation_date, - to_char(c.date_open, 'YYYY-MM-DD') as opening_date, - to_char(c.date_closed, 'YYYY-mm-dd') as date_closed, + date(c.date_open) as opening_date, + date(c.date_closed) as date_closed, c.state, c.user_id, c.section_id, @@ -81,7 +79,7 @@ class crm_phonecall_report(osv.osv): c.company_id, c.priority, 1 as nbr, - date_trunc('day',c.create_date) as create_date, + c.create_date as create_date, extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close, extract('epoch' from (c.date_open-c.create_date))/(3600*24) as delay_open from diff --git a/addons/crm/report/crm_phonecall_report_view.xml b/addons/crm/report/crm_phonecall_report_view.xml index 41af35df6b3..acadbd9c029 100644 --- a/addons/crm/report/crm_phonecall_report_view.xml +++ b/addons/crm/report/crm_phonecall_report_view.xml @@ -41,7 +41,6 @@ - @@ -53,9 +52,7 @@ - - - + diff --git a/addons/crm/sales_team.py b/addons/crm/sales_team.py index ce15e1791a9..5a6b02a5f05 100644 --- a/addons/crm/sales_team.py +++ b/addons/crm/sales_team.py @@ -44,10 +44,10 @@ class crm_case_section(osv.Model): help="The first contact you get with a potential customer is a lead you qualify before converting it into a real business opportunity. Check this box to manage leads in this sales team."), 'use_opportunities': fields.boolean('Opportunities', help="Check this box to manage opportunities in this sales team."), 'monthly_open_leads': fields.function(_get_opportunities_data, - type="any", readonly=True, multi='_get_opportunities_data', + type="char", readonly=True, multi='_get_opportunities_data', string='Open Leads per Month'), 'monthly_planned_revenue': fields.function(_get_opportunities_data, - type="any", readonly=True, multi='_get_opportunities_data', + type="char", readonly=True, multi='_get_opportunities_data', string='Planned Revenue per Month'), 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="restrict", required=True, help="The email address associated with this team. New emails received will automatically create new leads assigned to the team."), } diff --git a/addons/crm/sales_team_view.xml b/addons/crm/sales_team_view.xml index bf094597854..5ff934e40bf 100644 --- a/addons/crm/sales_team_view.xml +++ b/addons/crm/sales_team_view.xml @@ -50,7 +50,7 @@

- OpenERP helps you keep track of your sales pipeline to follow + Odoo helps you keep track of your sales pipeline to follow up potential sales and better forecast your future revenues.

You will be able to plan meetings and phone calls from diff --git a/addons/crm/static/description/index.html b/addons/crm/static/description/index.html index 799dee38cf0..7a749cb14f5 100644 --- a/addons/crm/static/description/index.html +++ b/addons/crm/static/description/index.html @@ -101,7 +101,7 @@ Follow opportunities that interest you to get notified upon specific events: dea

Work with the email applications you already use every day. Whether your company uses Microsoft Outlook or Gmail, no one needs to change the way they work, so everyone stays productive.

-Route, sort and filter incoming emails automatically. OpenERP CRM handles incoming emails and route them to the right opportunities or sales team. New leads are created on the fly and interested salespersons are notified automatically. +Route, sort and filter incoming emails automatically. Odoo CRM handles incoming emails and route them to the right opportunities or sales team. New leads are created on the fly and interested salespersons are notified automatically.

@@ -209,7 +209,7 @@ Customize your sales cycle by configuring sales stages that perfectly fit your s
- With OpenERP CRM I keep all the information about leads and customers + With Odoo CRM I keep all the information about leads and customers in a single place, and share it with my colleagues. It's great and effective. @@ -222,7 +222,7 @@ Customize your sales cycle by configuring sales stages that perfectly fit your s
- I am surprised by how good OpenERP CRM is. Awesome product. + I am surprised by how good Odoo CRM is. Awesome product. diff --git a/addons/crm_claim/report/crm_claim_report.py b/addons/crm_claim/report/crm_claim_report.py index 4323b7024d3..2855cc427a0 100644 --- a/addons/crm_claim/report/crm_claim_report.py +++ b/addons/crm_claim/report/crm_claim_report.py @@ -37,19 +37,12 @@ class crm_claim_report(osv.osv): _description = "CRM Claim Report" _columns = { - 'name': fields.char('Year', required=False, readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True), 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True), 'nbr': fields.integer('# of Cases', readonly=True), - 'month':fields.selection([('01', 'January'), ('02', 'February'), \ - ('03', 'March'), ('04', 'April'),\ - ('05', 'May'), ('06', 'June'), \ - ('07', 'July'), ('08', 'August'),\ - ('09', 'September'), ('10', 'October'),\ - ('11', 'November'), ('12', 'December')], 'Month', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'create_date': fields.datetime('Create Date', readonly=True, select=True), - 'day': fields.char('Day', size=128, readonly=True), + 'claim_date': fields.datetime('Claim Date', readonly=True), 'delay_close': fields.float('Delay to close', digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to close the case"), 'stage_id': fields.many2one ('crm.case.stage', 'Stage', readonly=True,domain="[('section_ids','=',section_id)]"), 'categ_id': fields.many2one('crm.case.categ', 'Category',\ @@ -76,11 +69,9 @@ class crm_claim_report(osv.osv): create or replace view crm_claim_report as ( select min(c.id) as id, - to_char(c.date, 'YYYY') as name, - to_char(c.date, 'MM') as month, - to_char(c.date, 'YYYY-MM-DD') as day, - to_char(c.date_closed, 'YYYY-MM-DD') as date_closed, - to_char(c.date_deadline, 'YYYY-MM-DD') as date_deadline, + c.date as claim_date, + date(c.date_closed) as date_closed, + c.date_deadline as date_deadline, c.user_id, c.stage_id, c.section_id, @@ -90,13 +81,13 @@ class crm_claim_report(osv.osv): count(*) as nbr, c.priority as priority, c.type_action as type_action, - date_trunc('day',c.create_date) as create_date, + c.create_date as create_date, avg(extract('epoch' from (c.date_closed-c.create_date)))/(3600*24) as delay_close, (SELECT count(id) FROM mail_message WHERE model='crm.claim' AND res_id=c.id) AS email, extract('epoch' from (c.date_deadline - c.date_closed))/(3600*24) as delay_expected from crm_claim c - group by to_char(c.date, 'YYYY'), to_char(c.date, 'MM'),to_char(c.date, 'YYYY-MM-DD'),\ + group by c.date,\ c.user_id,c.section_id, c.stage_id,\ c.categ_id,c.partner_id,c.company_id,c.create_date, c.priority,c.type_action,c.date_deadline,c.date_closed,c.id diff --git a/addons/crm_claim/report/crm_claim_report_view.xml b/addons/crm_claim/report/crm_claim_report_view.xml index bc9293e7f91..cf365d06df6 100644 --- a/addons/crm_claim/report/crm_claim_report_view.xml +++ b/addons/crm_claim/report/crm_claim_report_view.xml @@ -53,9 +53,7 @@ - - - + @@ -81,13 +79,8 @@ - - - + action="action_report_crm_claim" parent="base.next_id_64" sequence="15"/> diff --git a/addons/crm_helpdesk/crm_helpdesk_demo.xml b/addons/crm_helpdesk/crm_helpdesk_demo.xml index d0c9094aa63..83b6b03f355 100644 --- a/addons/crm_helpdesk/crm_helpdesk_demo.xml +++ b/addons/crm_helpdesk/crm_helpdesk_demo.xml @@ -9,8 +9,8 @@ draft - Download old version of OpenERP? - + Download old version of Odoo? + @@ -46,7 +46,7 @@ draft How to create a new module - + diff --git a/addons/crm_helpdesk/crm_helpdesk_menu.xml b/addons/crm_helpdesk/crm_helpdesk_menu.xml index 58b522d0dee..684c278a6a2 100644 --- a/addons/crm_helpdesk/crm_helpdesk_menu.xml +++ b/addons/crm_helpdesk/crm_helpdesk_menu.xml @@ -23,7 +23,7 @@

Helpdesk and Support allow you to track your interventions.

- Use the OpenERP Issues system to manage your support + Use the Odoo Issues system to manage your support activities. Issues can be connected to the email gateway: new emails may create issues, each of them automatically gets the history of the conversation with the customer. diff --git a/addons/crm_helpdesk/report/crm_helpdesk_report.py b/addons/crm_helpdesk/report/crm_helpdesk_report.py index f7180ef0908..590cadb0fed 100644 --- a/addons/crm_helpdesk/report/crm_helpdesk_report.py +++ b/addons/crm_helpdesk/report/crm_helpdesk_report.py @@ -39,17 +39,11 @@ class crm_helpdesk_report(osv.osv): _auto = False _columns = { - 'name': fields.char('Year', required=False, readonly=True), + 'date': fields.datetime('Date', readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True), 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True), 'nbr': fields.integer('# of Cases', readonly=True), 'state': fields.selection(AVAILABLE_STATES, 'Status', readonly=True), - 'month':fields.selection([('01', 'January'), ('02', 'February'), \ - ('03', 'March'), ('04', 'April'),\ - ('05', 'May'), ('06', 'June'), \ - ('07', 'July'), ('08', 'August'),\ - ('09', 'September'), ('10', 'October'),\ - ('11', 'November'), ('12', 'December')], 'Month', readonly=True), 'delay_close': fields.float('Delay to Close',digits=(16,2),readonly=True, group_operator="avg"), 'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True), @@ -64,7 +58,6 @@ class crm_helpdesk_report(osv.osv): 'create_date': fields.date('Creation Date' , readonly=True, select=True), 'date_closed': fields.date('Close Date', readonly=True, select=True), 'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"), - 'day': fields.char('Day', size=128, readonly=True), 'email': fields.integer('# Emails', size=128, readonly=True), } @@ -80,11 +73,9 @@ class crm_helpdesk_report(osv.osv): create or replace view crm_helpdesk_report as ( select min(c.id) as id, - to_char(c.date, 'YYYY') as name, - to_char(c.date, 'MM') as month, - to_char(c.date, 'YYYY-MM-DD') as day, - to_char(c.create_date, 'YYYY-MM-DD') as create_date, - to_char(c.date_closed, 'YYYY-mm-dd') as date_closed, + c.date as date, + date(c.create_date) as create_date, + date(c.date_closed) as date_closed, c.state, c.user_id, c.section_id, @@ -102,7 +93,7 @@ class crm_helpdesk_report(osv.osv): from crm_helpdesk c where c.active = 'true' - group by to_char(c.date, 'YYYY'), to_char(c.date, 'MM'),to_char(c.date, 'YYYY-MM-DD'),\ + group by c.date,\ c.state, c.user_id,c.section_id,c.priority,\ c.partner_id,c.company_id,c.date_deadline,c.create_date,c.date,c.date_closed,\ c.categ_id,c.channel_id,c.planned_cost,c.id diff --git a/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml b/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml index adc788ad505..e37d9970c05 100644 --- a/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml +++ b/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml @@ -49,9 +49,7 @@ - - - + @@ -77,12 +75,8 @@ - - + id="menu_report_crm_helpdesks_tree" parent="base.next_id_64" sequence="20"/> diff --git a/addons/crm_partner_assign/report/crm_lead_report.py b/addons/crm_partner_assign/report/crm_lead_report.py index af6d146e1df..58ef013d60d 100644 --- a/addons/crm_partner_assign/report/crm_lead_report.py +++ b/addons/crm_partner_assign/report/crm_lead_report.py @@ -48,7 +48,6 @@ class crm_lead_report_assign(osv.osv): 'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"), 'partner_id': fields.many2one('res.partner', 'Customer' , readonly=True), 'opening_date': fields.date('Opening Date', readonly=True), - 'creation_date': fields.date('Creation Date', readonly=True), 'date_closed': fields.date('Close Date', readonly=True), 'nbr': fields.integer('# of Cases', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True), @@ -69,9 +68,8 @@ class crm_lead_report_assign(osv.osv): CREATE OR REPLACE VIEW crm_lead_report_assign AS ( SELECT c.id, - to_char(c.create_date, 'YYYY-MM-DD') as creation_date, - to_char(c.date_open, 'YYYY-MM-DD') as opening_date, - to_char(c.date_closed, 'YYYY-mm-dd') as date_closed, + date(c.date_open) as opening_date, + date(c.date_closed) as date_closed, c.date_assign, c.user_id, c.probability, @@ -89,7 +87,7 @@ class crm_lead_report_assign(osv.osv): p.date as partner_date, c.planned_revenue*(c.probability/100) as probable_revenue, 1 as nbr, - date_trunc('day',c.create_date) as create_date, + c.create_date as create_date, extract('epoch' from (c.write_date-c.create_date))/(3600*24) as delay_close, extract('epoch' from (c.date_deadline - c.date_closed))/(3600*24) as delay_expected, extract('epoch' from (c.date_open-c.create_date))/(3600*24) as delay_open diff --git a/addons/crm_partner_assign/report/crm_lead_report_view.xml b/addons/crm_partner_assign/report/crm_lead_report_view.xml index 0cbfac50f87..22897962b7b 100644 --- a/addons/crm_partner_assign/report/crm_lead_report_view.xml +++ b/addons/crm_partner_assign/report/crm_lead_report_view.xml @@ -18,7 +18,6 @@ - @@ -35,9 +34,7 @@ - - - + diff --git a/addons/crm_profiling/crm_profiling_demo.xml b/addons/crm_profiling/crm_profiling_demo.xml index 8d1dbd81a9a..ec93e6f1be6 100644 --- a/addons/crm_profiling/crm_profiling_demo.xml +++ b/addons/crm_profiling/crm_profiling_demo.xml @@ -17,7 +17,7 @@ Partner level? - OpenERP partner? + Odoo partner? - OpenERP partners + Odoo partners True diff --git a/addons/delivery/delivery.py b/addons/delivery/delivery.py index 33db829ac80..a1afe087d28 100644 --- a/addons/delivery/delivery.py +++ b/addons/delivery/delivery.py @@ -19,11 +19,14 @@ # ############################################################################## +import logging import time from openerp.osv import fields,osv from openerp.tools.translate import _ import openerp.addons.decimal_precision as dp +_logger = logging.getLogger(__name__) + class delivery_carrier(osv.osv): _name = "delivery.carrier" _description = "Carrier" @@ -51,14 +54,24 @@ class delivery_carrier(osv.osv): for carrier in self.browse(cr, uid, ids, context=context): order_id=context.get('order_id',False) price=False + available = False if order_id: order = sale_obj.browse(cr, uid, order_id, context=context) carrier_grid=self.grid_get(cr,uid,[carrier.id],order.partner_shipping_id.id,context) if carrier_grid: - price=grid_obj.get_price(cr, uid, carrier_grid, order, time.strftime('%Y-%m-%d'), context) + try: + price=grid_obj.get_price(cr, uid, carrier_grid, order, time.strftime('%Y-%m-%d'), context) + available = True + except osv.except_osv, e: + # no suitable delivery method found, probably configuration error + _logger.error("Carrier %s: %s\n%s" % (carrier.name, e.name, e.value)) + price = 0.0 else: price = 0.0 - res[carrier.id]=price + res[carrier.id] = { + 'price': price, + 'available': available + } return res _columns = { @@ -66,7 +79,9 @@ class delivery_carrier(osv.osv): 'partner_id': fields.many2one('res.partner', 'Transport Company', required=True, help="The partner that is doing the delivery service."), 'product_id': fields.many2one('product.product', 'Delivery Product', required=True), 'grids_id': fields.one2many('delivery.grid', 'carrier_id', 'Delivery Grids'), - 'price' : fields.function(get_price, string='Price'), + 'available' : fields.function(get_price, string='Available',type='boolean', multi='price', + help="Is the carrier method possible with the current order."), + 'price' : fields.function(get_price, string='Price', multi='price'), 'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the delivery carrier without removing it."), 'normal_price': fields.float('Normal Price', help="Keep empty if the pricing depends on the advanced pricing per destination"), 'free_if_more_than': fields.boolean('Free If Order Total Amount Is More Than', help="If the order is more expensive than a certain amount, the customer can benefit from a free shipping"), @@ -196,7 +211,7 @@ class delivery_grid(osv.osv): for line in order.order_line: if not line.product_id or line.is_delivery: continue - q = product_uom_obj._compute_qty(cr, uid, line.product_uom.id, line.product_uos_qty, line.product_id.uom_id.id) + q = product_uom_obj._compute_qty(cr, uid, line.product_uom.id, line.product_uom_qty, line.product_id.uom_id.id) weight += (line.product_id.weight or 0.0) * q volume += (line.product_id.volume or 0.0) * q quantity += q diff --git a/addons/document/wizard/document_configuration_view.xml b/addons/document/wizard/document_configuration_view.xml index ec7b13d123a..f837ebd09ef 100644 --- a/addons/document/wizard/document_configuration_view.xml +++ b/addons/document/wizard/document_configuration_view.xml @@ -12,7 +12,7 @@ -

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.

+

Odoo'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/edi/models/edi.py b/addons/edi/models/edi.py index 43c4dfcafb5..f2ca15b90cb 100644 --- a/addons/edi/models/edi.py +++ b/addons/edi/models/edi.py @@ -37,7 +37,7 @@ _logger = logging.getLogger(__name__) EXTERNAL_ID_PATTERN = re.compile(r'^([^.:]+)(?::([^.]+))?\.(\S+)$') EDI_VIEW_WEB_URL = '%s/edi/view?db=%s&token=%s' EDI_PROTOCOL_VERSION = 1 # arbitrary ever-increasing version number -EDI_GENERATOR = 'OpenERP ' + release.major_version +EDI_GENERATOR = 'Odoo' + release.major_version EDI_GENERATOR_VERSION = release.version_info def split_external_id(ext_id): @@ -127,7 +127,7 @@ class edi(osv.AbstractModel): assert module, 'a `__module` or `__import_module` attribute is required in each EDI document.' if module != 'base' and not ir_module.search(cr, uid, [('name','=',module),('state','=','installed')]): raise osv.except_osv(_('Missing Application.'), - _("The document you are trying to import requires the OpenERP `%s` application. " + _("The document you are trying to import requires the Odoo `%s` application. " "You can install it by connecting as the administrator and opening the configuration assistant.")%(module,)) model = edi_document.get('__import_model') or edi_document.get('__model') assert model, 'a `__model` or `__import_model` attribute is required in each EDI document.' @@ -185,9 +185,9 @@ class EDIMixin(object): """Generate/Retrieve unique external ID for ``record``. Each EDI record and each relationship attribute in it is identified by a unique external ID, which includes the database's UUID, as a way to - refer to any record within any OpenERP instance, without conflict. + refer to any record within any Odoo instance, without conflict. - For OpenERP records that have an existing "External ID" (i.e. an entry in + For Odoo records that have an existing "External ID" (i.e. an entry in ir.model.data), the EDI unique identifier for this record will be made of "%s:%s:%s" % (module, database UUID, ir.model.data ID). The database's UUID MUST NOT contain a colon characters (this is guaranteed by the @@ -266,7 +266,7 @@ class EDIMixin(object): '__id': 'module:db-uuid:model.id', # unique global external ID for the record '__last_update': '2011-01-01 10:00:00', # last update date in UTC! '__version': 1, # EDI spec version - '__generator' : 'OpenERP', # EDI generator + '__generator' : 'Odoo', # EDI generator '__generator_version' : [6,1,0], # server version, to check compatibility. '__attachments_': } diff --git a/addons/event/event.py b/addons/event/event.py index e5a12fb02d2..325682f86b3 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -185,12 +185,15 @@ class event_event(models.Model): for reg in self.registration_ids ) - @api.one + @api.multi @api.depends('name', 'date_begin', 'date_end') - def _compute_display_name(self): - dates = [dt.split(' ')[0] for dt in [self.date_begin, self.date_end] if dt] - dates = sorted(set(dates)) - self.display_name = '%s (%s)' % (self.name, ' - '.join(dates)) + def name_get(self): + result = [] + for event in self: + dates = [dt.split(' ')[0] for dt in [event.date_begin, event.date_end] if dt] + dates = sorted(set(dates)) + result.append((event.id, '%s (%s)' % (event.name, ' - '.join(dates)))) + return result @api.one @api.constrains('seats_max', 'seats_available') diff --git a/addons/event/event_demo.xml b/addons/event/event_demo.xml index a12072e62d8..6f96dbbf43c 100644 --- a/addons/event/event_demo.xml +++ b/addons/event/event_demo.xml @@ -53,8 +53,8 @@

Program:

Conferences, workshops and trainings will be organized in 6 rooms:

    -
  • 2 technical rooms: one dedicated to advanced OpenERP developers, one for new developers.
  • -
  • 2 technical rooms: one dedicated to advanced OpenERP developers, one for new developers.
  • +
  • 2 technical rooms: one dedicated to advanced Odoo developers, one for new developers.
  • +
  • 2 technical rooms: one dedicated to advanced Odoo developers, one for new developers.
  • 1 business room: to discuss implementation methodologies, best sales practices, etc.
  • 1 workshop room: mainly for developers.
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 73cbb7b0d1b..9433c0018e9 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -304,7 +304,7 @@

Click to add a new event.

- OpenERP helps you schedule and efficiently organize your events: + Odoo helps you schedule and efficiently organize your events: track subscriptions and participations, automate the confirmation emails, sell tickets, etc.

diff --git a/addons/event/report/report_event_registration_view.xml b/addons/event/report/report_event_registration_view.xml index faa484d5667..8df4a032fee 100644 --- a/addons/event/report/report_event_registration_view.xml +++ b/addons/event/report/report_event_registration_view.xml @@ -41,9 +41,7 @@ - - - + {"search_default_parent_false" : True,"search_default_groupby_year" : True, "search_default_groupby_cost_subtype" : True,"search_default_groupby_vehicle_id" : True}

- OpenERP helps you managing the costs for your different vehicles + Odoo helps you managing the costs for your different vehicles Costs are generally created from services and contract and appears here.

- Thanks to the different filters, OpenERP can only print the effective + Thanks to the different filters, Odoo can only print the effective costs, sort them by type and by vehicle.

@@ -29,11 +29,11 @@ {"search_default_parent_true" : True,"search_default_groupby_cost_subtype" : True,"search_default_groupby_parent_id" : True,}

- OpenERP helps you managing the costs for your different vehicles + Odoo helps you managing the costs for your different vehicles Costs are generally created from services and contract and appears here.

- Thanks to the different filters, OpenERP can only print the effective + Thanks to the different filters, Odoo can only print the effective costs, sort them by type and by vehicle.

diff --git a/addons/fleet/fleet_view.xml b/addons/fleet/fleet_view.xml index d1d0e557f43..fc754b9f787 100644 --- a/addons/fleet/fleet_view.xml +++ b/addons/fleet/fleet_view.xml @@ -418,7 +418,7 @@ contracts, services, fixed and recurring costs, odometers and fuel logs associated to each vehicle.

- OpenERP will warn you when services or contract have to be + Odoo will warn you when services or contract have to be renewed.

@@ -558,7 +558,7 @@ Click to create a new contract.

Manage all your contracts (leasing, insurances, etc.) with - their related services, costs. OpenERP will automatically warn + their related services, costs. Odoo will automatically warn you when some contracts have to be renewed.

Each contract (e.g.: leasing) may include several services @@ -847,7 +847,7 @@

Click to create a new service entry.

- OpenERP helps you keeping track of all the services done + Odoo helps you keeping track of all the services done on your vehicle. Services can be of many type: occasional repair, fixed maintenance, etc.

@@ -919,13 +919,12 @@ - - + @@ -980,7 +979,7 @@

Click to create a new cost.

- OpenERP helps you managing the costs for your different + Odoo helps you managing the costs for your different vehicles. Costs are created automatically from services, contracts (fixed or recurring) and fuel logs.

diff --git a/addons/gamification/views/badge.xml b/addons/gamification/views/badge.xml index bdcb48240f8..302ad66caf0 100644 --- a/addons/gamification/views/badge.xml +++ b/addons/gamification/views/badge.xml @@ -40,7 +40,6 @@
diff --git a/addons/google_calendar/google_calendar.py b/addons/google_calendar/google_calendar.py index 7abef0faf8c..c787ddb43ce 100644 --- a/addons/google_calendar/google_calendar.py +++ b/addons/google_calendar/google_calendar.py @@ -122,9 +122,9 @@ class SyncEvent(object): self.OP = Delete('OE', 'Update or delete from GOOGLE') else: if not modeFull: - self.OP = Delete('GG', 'Deleted from OpenERP, need to delete it from Gmail if already created') + self.OP = Delete('GG', 'Deleted from Odoo, need to delete it from Gmail if already created') else: - self.OP = NothingToDo("", "Already Deleted in gmail and unlinked in OpenERP") + self.OP = NothingToDo("", "Already Deleted in gmail and unlinked in Odoo") elif self.GG.found and not self.OE.found: tmpSrc = 'GG' if not self.GG.status and not self.GG.isInstance: @@ -915,7 +915,7 @@ class res_users(osv.Model): 'google_calendar_token_validity': fields.datetime('Token Validity'), 'google_calendar_last_sync_date': fields.datetime('Last synchro date'), 'google_calendar_cal_id': fields.char('Calendar ID', help='Last Calendar ID who has been synchronized. If it is changed, we remove \ -all links between GoogleID and OpenERP Google Internal ID') +all links between GoogleID and Odoo Google Internal ID') } @@ -948,7 +948,7 @@ class calendar_event(osv.Model): return super(calendar_event, self).unlink(cr, uid, ids, can_be_deleted=can_be_deleted, context=context) _columns = { - 'oe_update_date': fields.datetime('OpenERP Update Date'), + 'oe_update_date': fields.datetime('Odoo Update Date'), } @@ -957,7 +957,7 @@ class calendar_attendee(osv.Model): _columns = { 'google_internal_event_id': fields.char('Google Calendar Event Id'), - 'oe_synchro_date': fields.datetime('OpenERP Synchro Date'), + 'oe_synchro_date': fields.datetime('Odoo Synchro Date'), } _sql_constraints = [('google_id_uniq', 'unique(google_internal_event_id,partner_id,event_id)', 'Google ID should be unique!')] diff --git a/addons/google_calendar/res_config.py b/addons/google_calendar/res_config.py index ec0f2e4d95b..180a53d4d8a 100644 --- a/addons/google_calendar/res_config.py +++ b/addons/google_calendar/res_config.py @@ -22,7 +22,7 @@ class calendar_config_settings(osv.TransientModel): cal_client_id = params.get_param(cr, uid, 'google_calendar_client_id',default='',context=context) cal_client_secret = params.get_param(cr, uid, 'google_calendar_client_secret',default='',context=context) - server_uri= "%s/google_account/authentication" % params.get_param(cr, uid, 'web.base.url',default="http://yourcompany.my.openerp.com",context=context) + server_uri= "%s/google_account/authentication" % params.get_param(cr, uid, 'web.base.url',default="http://yourcompany.odoo.com",context=context) return dict(cal_client_id=cal_client_id,cal_client_secret=cal_client_secret,server_uri=server_uri) diff --git a/addons/google_calendar/static/description/index.html b/addons/google_calendar/static/description/index.html index 745b825b309..b74831077c3 100644 --- a/addons/google_calendar/static/description/index.html +++ b/addons/google_calendar/static/description/index.html @@ -93,8 +93,8 @@

- You can ask to have a alarm of type 'notification' in your Open ERP.
- You will have a notification in you OpenERP which ever the page you are. + You can ask to have a alarm of type 'notification' in your Odoo.
+ You will have a notification in you Odoo which ever the page you are.

@@ -105,7 +105,7 @@

Google Calendar

- With the plugin Google_calendar, you can synchronize your OpenERP calendar with Google Calendar. + With the plugin Google_calendar, you can synchronize your Odoo calendar with Google Calendar.

diff --git a/addons/google_calendar/static/src/js/calendar_sync.js b/addons/google_calendar/static/src/js/calendar_sync.js index fc05ca05ab0..b827f25b633 100644 --- a/addons/google_calendar/static/src/js/calendar_sync.js +++ b/addons/google_calendar/static/src/js/calendar_sync.js @@ -25,35 +25,37 @@ openerp.google_calendar = function(instance) { local_context: context }).done(function(o) { if (o.status === "need_auth") { - alert(_t("You will be redirected on gmail to authorize your OpenErp to access your calendar !")); + alert(_t("You will be redirected to Google to authorize access to your calendar!")); instance.web.redirect(o.url); } else if (o.status === "need_config_from_admin"){ if (!_.isUndefined(o.action) && parseInt(o.action)){ - if (confirm(_t("An admin need to configure Google Synchronization before to use it, do you want to configure it now ? !"))){ + if (confirm(_t("The Google Synchronization needs to be configured before you can use it, do you want to do it now?"))) { self.do_action(o.action); } } else{ - alert(_t("An admin need to configure Google Synchronization before to use it !")); + alert(_t("An administrator needs to configure Google Synchronization before you can use it!")); } } else if (o.status === "need_refresh"){ self.$calendar.fullCalendar('refetchEvents'); } else if (o.status === "need_reset"){ - if (confirm(_t("The account that you are trying to synchronize (" + o.info.new_name + "), is not the same that the last one used \ -(" + o.info.old_name + "! )" + "\r\n\r\nDo you want remove all references from the old account ?"))){ - + var confirm_text1 = _t("The account you are trying to synchronize (%s) is not the same as the last one used (%s)!"); + var confirm_text2 = _t("In order to do this, you first need to disconnect all existing events from the old account."); + var confirm_text3 = _t("Do you want to do this now?"); + var text = _.str.sprintf(confirm_text1 + "\n" + confirm_text2 + "\n\n" + confirm_text3, o.info.new_name, o.info.old_name); + if (confirm(text)) { self.rpc('/google_calendar/remove_references', { model:res.model, local_context:context }).done(function(o) { if (o.status === "OK") { - alert(_t("All old references have been deleted. You can now restart the synchronization")); + alert(_t("All events have been disconnected from your previous account. You can now restart the synchronization")); } else if (o.status === "KO") { - alert(_t("An error has occured when we was removing all old references. Please retry or contact your administrator.")); + alert(_t("An error occured while disconnecting events from your previous account. Please retry or contact your administrator.")); } //else NOP }); diff --git a/addons/google_drive/google_drive.py b/addons/google_drive/google_drive.py index 036b815648b..1a95a5ec1ee 100644 --- a/addons/google_drive/google_drive.py +++ b/addons/google_drive/google_drive.py @@ -106,7 +106,7 @@ class config(osv.Model): raise osv.except_osv(_('Warning!'), _("The Google Template cannot be found. Maybe it has been deleted.")) parents_dict = json.loads(parents) - record_url = "Click on link to open Record in OpenERP\n %s/?db=%s#id=%s&model=%s" % (google_web_base_url, cr.dbname, res_id, res_model) + record_url = "Click on link to open Record in Odoo\n %s/?db=%s#id=%s&model=%s" % (google_web_base_url, cr.dbname, res_id, res_model) data = {"title": name_gdocs, "description": record_url, "parents": parents_dict['parents']} request_url = "https://www.googleapis.com/drive/v2/files/%s/copy?access_token=%s" % (template_id, access_token) headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} @@ -124,7 +124,7 @@ class config(osv.Model): cr.commit() res['url'] = content['alternateLink'] key = self._get_key_from_url(res['url']) - request_url = "https://www.googleapis.com/drive/v2/files/%s/permissions?emailMessage=This+is+a+drive+file+created+by+OpenERP&sendNotificationEmails=false&access_token=%s" % (key, access_token) + request_url = "https://www.googleapis.com/drive/v2/files/%s/permissions?emailMessage=This+is+a+drive+file+created+by+Odoo&sendNotificationEmails=false&access_token=%s" % (key, access_token) data = {'role': 'writer', 'type': 'anyone', 'value': '', 'withLink': True} try: req = urllib2.Request(request_url, json.dumps(data), headers) diff --git a/addons/google_drive/res_config_user_view.xml b/addons/google_drive/res_config_user_view.xml index 878274986d0..2320728192b 100644 --- a/addons/google_drive/res_config_user_view.xml +++ b/addons/google_drive/res_config_user_view.xml @@ -30,7 +30,7 @@

To create a new filter:
- - Go to the OpenERP document you want to filter. For instance, go to Opportunities and search on Sales Department.
+ - Go to the Odoo document you want to filter. For instance, go to Opportunities and search on Sales Department.
- In this "Search" view, select the option "Save Current Filter", enter the name (Ex: Sales Department)
- If you select "Share with all users", link of google document in "More" options will appear for all users in opportunities of Sales Department.
- If you don't select "Share with all users", link of google document in "More" options will not appear for other users in opportunities of Sales Department.
@@ -45,7 +45,7 @@

The name of the attached document can use fixed or variable data. To distinguish between documents in Google Drive, use fixed words and fields. For instance, in the example above, if you wrote Agrolait_%%(name)s_Sales - in the Google Drive name field, the document in your Google Drive and in OpenERP attachment will be named + in the Google Drive name field, the document in your Google Drive and in Odoo attachment will be named 'Agrolait_SO0001_Sales'.

@@ -65,7 +65,7 @@ Click to add a new template.

- Link your own google drive templates to any record of OpenERP. If you have really specific documents you want your collaborator fill in, e.g. Use a spreadsheet to control the quality of your product or review the delivery checklist for each order in a foreign country, ... Its very easy to manage them, link them to OpenERP and use them to collaborate with your employees. + Link your own google drive templates to any record of Odoo. If you have really specific documents you want your collaborator fill in, e.g. Use a spreadsheet to control the quality of your product or review the delivery checklist for each order in a foreign country, ... Its very easy to manage them, link them to Odoo and use them to collaborate with your employees.

diff --git a/addons/hr/hr.py b/addons/hr/hr.py index 0d287fcc645..5e081fab3bf 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -270,7 +270,7 @@ class hr_employee(osv.osv): partner_ids = list(set(u.partner_id.id for u in res_users.browse(cr, SUPERUSER_ID, user_ids, context=context))) self.message_post( cr, uid, [employee_id], - body=_('Welcome to %s! Please help him/her take the first steps with OpenERP!') % (employee.name), + body=_('Welcome to %s! Please help him/her take the first steps with Odoo!') % (employee.name), partner_ids=partner_ids, subtype='mail.mt_comment', context=context ) diff --git a/addons/hr/hr_data.xml b/addons/hr/hr_data.xml index c9b784c485d..382cc4dbdc4 100644 --- a/addons/hr/hr_data.xml +++ b/addons/hr/hr_data.xml @@ -8,7 +8,7 @@ notification Employee Directory application installed! - Manage your human resources with OpenERP: employees and their hierarchy, HR departments and job positions.

+ Manage your human resources with Odoo: employees and their hierarchy, HR departments and job positions.

More HR features are available via extra applications: Recruitment Process (manage job positions and recruitment), Timesheet Validation (record timesheets and attendance), Leave Management (keep track of employee leaves), Expense Management (manage employee expenses), Employee Appraisals (organize employee surveys, where employees evaluate their subordinates or their manager).

]]>
diff --git a/addons/hr/hr_demo.xml b/addons/hr/hr_demo.xml index ce1b6c92e35..9b0ae2330c8 100644 --- a/addons/hr/hr_demo.xml +++ b/addons/hr/hr_demo.xml @@ -31,7 +31,7 @@ Chief Executive Officer - Demonstration of different openerp services for each client and convincing the client about functionality of the application. + Demonstration of different Odoo services for each client and convincing the client about functionality of the application. The candidate should have excellent communication skills. Relationship building and influencing skills Expertise in New Client Acquisition (NCAs) and Relationship Management. @@ -53,7 +53,7 @@ Excellent analytical skills, ability to think logically and "out of the box" Chief Technical Officer - You will take part in the consulting services we provide to our partners and customers : design, analysis, development, testing, project management, support/coaching. You will work autonomously as well as coordinate and supervise small distributed development teams for some projects. Optionally, you will deliver OpenERP training sessions to partners and customers (8-10 people/session). You will report to the Head of Professional Services and work closely with all developers and consultants. + You will take part in the consulting services we provide to our partners and customers : design, analysis, development, testing, project management, support/coaching. You will work autonomously as well as coordinate and supervise small distributed development teams for some projects. Optionally, you will deliver Odoo training sessions to partners and customers (8-10 people/session). You will report to the Head of Professional Services and work closely with all developers and consultants. The job is located in Grand-Rosière (1367), Belgium (between Louvain-La-Neuve and Namur). Bachelor, master or engineering degree in Computer Science or equivalent by experience @@ -101,11 +101,11 @@ Good language skills, other than English (Dutch and French preferred, others wel Trainee - You participate to the update of our tutorial tools and pre-sales tools after the launch of a new version of OpenERP. Indeed, any new version of the software brings significant improvements in terms of functionalities, ergonomics and configuration. -You will have to become familiar with the existing tools (books, class supports, OpenERP presentation’s slides, commercial tools), + You participate to the update of our tutorial tools and pre-sales tools after the launch of a new version of Odoo. Indeed, any new version of the software brings significant improvements in terms of functionalities, ergonomics and configuration. +You will have to become familiar with the existing tools (books, class supports, Odoo presentation’s slides, commercial tools), to participate to the update of those tools in order to make them appropriate for the new version of the software and, for sure, to suggest improvements in order to cover the new domains of the software. -You join the Implementation Assistance department. This team of 3 people go with OpenERP’s clients in the set up of the software. Your role will be +You join the Implementation Assistance department. This team of 3 people go with Odoo’s clients in the set up of the software. Your role will be to animate webinars in order to show the different functionalities of the software. to be involved in the support of the customers and to answer to their questions. @@ -114,7 +114,7 @@ being involved in the treatment of new cases, contributing to the set up of a new politic, being involved into satisfaction surveys in order to have a better knowledge of how the support given is seen by the customers. You speak fluently English and French (one other European language is a +) -At the time of your traineeship at OpenERP, you will be in the last year of a Master or Bachelor Degree (ideally in the following sector: Business Management, IT Management, Computer Sciences) +At the time of your traineeship at Odoo, you will be in the last year of a Master or Bachelor Degree (ideally in the following sector: Business Management, IT Management, Computer Sciences) You have a software and new technology awareness You are ready to join a young and dynamic company, you are able to work in a “start up” fast paced environment, hands on attitude You are approachable, honest and a fun team player diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index 0c356706407..a045baadfb7 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -221,7 +221,7 @@

Click to add a new employee.

- With just a quick glance on the OpenERP employee screen, you + With just a quick glance on the Odoo employee screen, you can easily find all the information you need for each person; contact data, job position, availability, etc.

@@ -480,7 +480,7 @@

Click to create a department.

- OpenERP's department structure is used to manage all documents + Odoo's department structure is used to manage all documents related to employees by departments: expenses, timesheets, leaves and holidays, recruitments, etc.

diff --git a/addons/hr/res_users.py b/addons/hr/res_users.py index 78c0b841255..e6f2ca36fe5 100644 --- a/addons/hr/res_users.py +++ b/addons/hr/res_users.py @@ -1,5 +1,5 @@ +from openerp import api from openerp.osv import fields, osv -from openerp.tools.translate import _ class res_users(osv.Model): @@ -52,6 +52,7 @@ class res_users(osv.Model): thread_id = thread_id[0] return self.pool.get('hr.employee').search(cr, uid, [('user_id', '=', thread_id)], context=context) + @api.cr_uid_ids_context def message_post(self, cr, uid, thread_id, context=None, **kwargs): """ Redirect the posting of message on res.users to the related employee. This is done because when giving the context of Chatter on the diff --git a/addons/hr/static/description/index.html b/addons/hr/static/description/index.html index 55e54aa92fb..08ebd101d69 100644 --- a/addons/hr/static/description/index.html +++ b/addons/hr/static/description/index.html @@ -115,7 +115,7 @@ Keep track of the vacation days accrued by each employee. Employees enter their

-Get rid of the paper work and follow employee's expenses directly in OpenERP. Don't loose time or money by controlling the full flow: expense validation, reimbursement of employees, posting in the accounting and re-invoicing to customers. +Get rid of the paper work and follow employee's expenses directly in Odoo. Don't loose time or money by controlling the full flow: expense validation, reimbursement of employees, posting in the accounting and re-invoicing to customers.

@@ -126,7 +126,7 @@ Get rid of the paper work and follow employee's expenses directly in OpenERP. Do

Follow Periodic Appraisals

-Set-up appraisals plans and/or surveys for your employees and watch their evolution. Define steps for interviews and OpenERP will notify managers or subordinates automatically to prepare appraisals. Keep track of the progress of your staff periodically. +Set-up appraisals plans and/or surveys for your employees and watch their evolution. Define steps for interviews and Odoo will notify managers or subordinates automatically to prepare appraisals. Keep track of the progress of your staff periodically.

@@ -183,7 +183,7 @@ Inspire achievement with challenges, goals and rewards. Define clear objectives
- OpenERP helped us to effectively record our working time and invoice + Odoo helped us to effectively record our working time and invoice our customers while keeping track of our costs. @@ -195,7 +195,7 @@ Inspire achievement with challenges, goals and rewards. Define clear objectives
- Thanks to OpenERP, we have unified all our front-office and back-office + Thanks to Odoo, we have unified all our front-office and back-office HR applications for 300.000 users in a cost effective way. diff --git a/addons/hr_attendance/hr_attendance.py b/addons/hr_attendance/hr_attendance.py index a7950fef8d0..4887d41a52c 100644 --- a/addons/hr_attendance/hr_attendance.py +++ b/addons/hr_attendance/hr_attendance.py @@ -61,13 +61,16 @@ class hr_attendance(osv.osv): ('employee_id', '=', obj.employee_id.id), ('name', '<', obj.name), ('action', '=', 'sign_in') ], limit=1, order='name DESC') - last_signin = self.browse(cr, uid, last_signin_id, context=context)[0] + if last_signin_id: + last_signin = self.browse(cr, uid, last_signin_id, context=context)[0] - # Compute time elapsed between sign-in and sign-out - last_signin_datetime = datetime.strptime(last_signin.name, '%Y-%m-%d %H:%M:%S') - signout_datetime = datetime.strptime(obj.name, '%Y-%m-%d %H:%M:%S') - workedhours_datetime = (signout_datetime - last_signin_datetime) - res[obj.id] = ((workedhours_datetime.seconds) / 60) / 60 + # Compute time elapsed between sign-in and sign-out + last_signin_datetime = datetime.strptime(last_signin.name, '%Y-%m-%d %H:%M:%S') + signout_datetime = datetime.strptime(obj.name, '%Y-%m-%d %H:%M:%S') + workedhours_datetime = (signout_datetime - last_signin_datetime) + res[obj.id] = ((workedhours_datetime.seconds) / 60) / 60 + else: + res[obj.id] = False return res _columns = { diff --git a/addons/hr_attendance/hr_attendance_view.xml b/addons/hr_attendance/hr_attendance_view.xml index bd8fa81636b..5075cc13501 100644 --- a/addons/hr_attendance/hr_attendance_view.xml +++ b/addons/hr_attendance/hr_attendance_view.xml @@ -83,7 +83,7 @@ tree,form {"search_default_today":1} - The Time Tracking functionality aims to manage employee attendances from Sign in/Sign out actions. You can also link this feature to an attendance device using OpenERP's web service features. + The Time Tracking functionality aims to manage employee attendances from Sign in/Sign out actions. You can also link this feature to an attendance device using Odoo's web service features. diff --git a/addons/hr_evaluation/hr_evaluation_installer.xml b/addons/hr_evaluation/hr_evaluation_installer.xml index 3475edab772..5d2987e2d05 100644 --- a/addons/hr_evaluation/hr_evaluation_installer.xml +++ b/addons/hr_evaluation/hr_evaluation_installer.xml @@ -13,7 +13,7 @@

You can define appraisal plans (ex: first interview after 6 months, then every year). Then, each employee can be linked to - an appraisal plan so that OpenERP can automatically generate + an appraisal plan so that Odoo can automatically generate interview requests to managers and/or subordinates.

diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml index cf6e24c694b..7ec83cdb2a8 100644 --- a/addons/hr_evaluation/hr_evaluation_view.xml +++ b/addons/hr_evaluation/hr_evaluation_view.xml @@ -251,7 +251,7 @@ Each employee may be assigned an Appraisal Plan. Such a plan defines the frequency and the way you manage your periodic personnel evaluation. You will be able to define steps and - attach interviews to each step. OpenERP manages all kinds of + attach interviews to each step. Odoo manages all kinds of evaluations: bottom-up, top-down, self-evaluation and final evaluation by the manager.

@@ -364,7 +364,7 @@ Click to create a new interview request related to a personal evaluation.

Interview requests are usually generated automatically by - OpenERP according to an employee's appraisal plan. Each user + Odoo according to an employee's appraisal plan. Each user receives automatic emails and requests to evaluate their colleagues periodically.

diff --git a/addons/hr_evaluation/report/hr_evaluation_report.py b/addons/hr_evaluation/report/hr_evaluation_report.py index 32ec3f43734..163562bfc72 100644 --- a/addons/hr_evaluation/report/hr_evaluation_report.py +++ b/addons/hr_evaluation/report/hr_evaluation_report.py @@ -31,14 +31,9 @@ class hr_evaluation_report(osv.Model): 'create_date': fields.date('Create Date', readonly=True), 'delay_date': fields.float('Delay to Start', digits=(16, 2), readonly=True), 'overpass_delay': fields.float('Overpassed Deadline', digits=(16, 2), readonly=True), - 'day': fields.char('Day', size=128, readonly=True), 'deadline': fields.date("Deadline", readonly=True), 'request_id': fields.many2one('survey.user_input', 'Request_id', readonly=True), 'closed': fields.date("closed", readonly=True), - 'year': fields.char('Year', size=4, readonly=True), - 'month': fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'), - ('05', 'May'), ('06', 'June'), ('07', 'July'), ('08', 'August'), ('09', 'September'), - ('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True), 'plan_id': fields.many2one('hr_evaluation.plan', 'Plan', readonly=True), 'employee_id': fields.many2one('hr.employee', "Employee", readonly=True), 'rating': fields.selection([ @@ -73,16 +68,13 @@ class hr_evaluation_report(osv.Model): create or replace view hr_evaluation_report as ( select min(l.id) as id, - date_trunc('day',s.create_date) as create_date, - to_char(s.create_date, 'YYYY-MM-DD') as day, + date(s.create_date) as create_date, s.employee_id, l.request_id, s.plan_id, s.rating, s.date as deadline, s.date_close as closed, - to_char(s.create_date, 'YYYY') as year, - to_char(s.create_date, 'MM') as month, count(l.*) as nbr, s.state, avg(extract('epoch' from age(s.create_date,CURRENT_DATE)))/(3600*24) as delay_date, @@ -93,10 +85,6 @@ class hr_evaluation_report(osv.Model): hr_evaluation_evaluation s on (s.id=l.evaluation_id) GROUP BY s.create_date, - date_trunc('day',s.create_date), - to_char(s.create_date, 'YYYY-MM-DD'), - to_char(s.create_date, 'YYYY'), - to_char(s.create_date, 'MM'), s.state, s.employee_id, s.date, diff --git a/addons/hr_evaluation/report/hr_evaluation_report_view.xml b/addons/hr_evaluation/report/hr_evaluation_report_view.xml index 073e648fe98..5793aa6d206 100644 --- a/addons/hr_evaluation/report/hr_evaluation_report_view.xml +++ b/addons/hr_evaluation/report/hr_evaluation_report_view.xml @@ -35,9 +35,7 @@ - - - + diff --git a/addons/hr_evaluation/survey_data_appraisal.xml b/addons/hr_evaluation/survey_data_appraisal.xml index d3f83f91ba5..d48326116c1 100644 --- a/addons/hr_evaluation/survey_data_appraisal.xml +++ b/addons/hr_evaluation/survey_data_appraisal.xml @@ -30,7 +30,7 @@ evaluated. point for the supervisor’s evaluation. The employee can add examples of achievements for each criterion. Once the form had been filled, the employee send it to his supervisor. <li>It is the primary responsibility of the supervisor to gather the necessary input from the appropriate sources of feedback -(internal and/or external customers, peers). In case of collaboration with OpenERP SA Belgium, the supervisor must +(internal and/or external customers, peers). In case of collaboration with Odoo SA Belgium, the supervisor must receive completed evaluation form from the employee's Belgian project manager. <li>The supervisor synthesizes and integrates all input into the completed appraisal. He motivates his evaluation in the ad hoc fields. @@ -332,8 +332,8 @@ over the coming year.</p> 1 <h2>At the supervisor's appraisal date</h2> -<p>His direct reports will be invited through OpenERP to express a feedback on their supervisor's leadership and to give their opinion about their own engagement and effectiveness, the continuous improvement and openness in action in thecompany...</p> -<p>The employees will send back their anonymous answers to OpenERP. The data will be handled by the HR manager and a brief summary of the data will be sent to the concerned supervisor, to his team and to the supervisor's supervisor.</p> +<p>His direct reports will be invited through Odoo to express a feedback on their supervisor's leadership and to give their opinion about their own engagement and effectiveness, the continuous improvement and openness in action in thecompany...</p> +<p>The employees will send back their anonymous answers to Odoo. The data will be handled by the HR manager and a brief summary of the data will be sent to the concerned supervisor, to his team and to the supervisor's supervisor.</p> <p>The appraiser should rate the employee's major work accomplishments and performance according to the metric provided below <ol> <li>Significantly exceeds standards and expectations required of the position</li> diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index 3877a8edd42..8e91312c9d4 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -181,7 +181,7 @@

Click to register new expenses.

- OpenERP will ensure the whole process is followed; the expense + Odoo will ensure the whole process is followed; the expense sheet is validated by manager(s), the employee is reimbursed from his expenses, some expenses must be re-invoiced to the customers. diff --git a/addons/hr_expense/report/hr_expense_report.py b/addons/hr_expense/report/hr_expense_report.py index 667d9fba07d..531f5348357 100644 --- a/addons/hr_expense/report/hr_expense_report.py +++ b/addons/hr_expense/report/hr_expense_report.py @@ -32,11 +32,7 @@ class hr_expense_report(osv.osv): _rec_name = 'date' _columns = { 'date': fields.date('Date ', readonly=True), - 'year': fields.char('Year', size=4, readonly=True), - 'day': fields.char('Day', size=128, readonly=True), - 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), - ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'), - ('10','October'), ('11','November'), ('12','December')], 'Month', readonly=True), + 'create_date': fields.datetime('Creation Date', readonly=True), 'product_id':fields.many2one('product.product', 'Product', readonly=True), 'journal_id': fields.many2one('account.journal', 'Force Journal', readonly=True), 'product_qty':fields.float('Qty', readonly=True), @@ -70,17 +66,15 @@ class hr_expense_report(osv.osv): create or replace view hr_expense_report as ( select min(l.id) as id, - date_trunc('day',s.date) as date, + s.date as date, + s.create_date as create_date, s.employee_id, s.journal_id, s.currency_id, - to_date(to_char(s.date_confirm, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_confirm, - to_date(to_char(s.date_valid, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_valid, + s.date_confirm as date_confirm, + s.date_valid as date_valid, s.user_valid as user_id, s.department_id, - to_char(date_trunc('day',s.create_date), 'YYYY') as year, - to_char(date_trunc('day',s.create_date), 'MM') as month, - to_char(date_trunc('day',s.create_date), 'YYYY-MM-DD') as day, avg(extract('epoch' from age(s.date_valid,s.date)))/(3600*24) as delay_valid, avg(extract('epoch' from age(s.date_valid,s.date_confirm)))/(3600*24) as delay_confirm, l.product_id as product_id, @@ -97,12 +91,10 @@ class hr_expense_report(osv.osv): left join hr_expense_expense s on (s.id=l.expense_id) left join product_uom u on (u.id=l.uom_id) group by - date_trunc('day',s.date), - to_char(date_trunc('day',s.create_date), 'YYYY'), - to_char(date_trunc('day',s.create_date), 'MM'), - to_char(date_trunc('day',s.create_date), 'YYYY-MM-DD'), - to_date(to_char(s.date_confirm, 'dd-MM-YYYY'),'dd-MM-YYYY'), - to_date(to_char(s.date_valid, 'dd-MM-YYYY'),'dd-MM-YYYY'), + s.date, + s.create_date, + s.date_confirm, + s.date_valid, l.product_id, l.analytic_account, s.currency_id, diff --git a/addons/hr_expense/report/hr_expense_report_view.xml b/addons/hr_expense/report/hr_expense_report_view.xml index 5655b965f7c..bf44d5e27a2 100644 --- a/addons/hr_expense/report/hr_expense_report_view.xml +++ b/addons/hr_expense/report/hr_expense_report_view.xml @@ -43,9 +43,7 @@ - - - + diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 21cbe50dee2..80848941f87 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -74,7 +74,7 @@ class hr_holidays_status(osv.osv): _columns = { 'name': fields.char('Leave Type', size=64, required=True, translate=True), 'categ_id': fields.many2one('calendar.event.type', 'Meeting Type', - help='Once a leave is validated, OpenERP will create a corresponding meeting of this type in the calendar.'), + help='Once a leave is validated, Odoo 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 check box, the system allows the employees to take more leaves than the available ones for this type and will not 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."), @@ -500,7 +500,7 @@ class hr_employee(osv.osv): if diff > 0: leave_id = holiday_obj.create(cr, uid, {'name': _('Allocation for %s') % employee.name, 'employee_id': employee.id, 'holiday_status_id': status_id, 'type': 'add', 'holiday_type': 'employee', 'number_of_days_temp': diff}, context=context) elif diff < 0: - leave_id = holiday_obj.create(cr, uid, {'name': _('Leave Request for %s') % employee.name, 'employee_id': employee.id, 'holiday_status_id': status_id, 'type': 'remove', 'holiday_type': 'employee', 'number_of_days_temp': abs(diff)}, context=context) + raise osv.except_osv(_('Warning!'), _('You cannot reduce validated allocation requests')) else: return False for sig in ('confirm', 'validate', 'second_validate'): diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index bb3b7a5a93f..5ee1ec8f7c2 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -462,7 +462,7 @@

- You can assign remaining Legal Leaves for each employee, OpenERP + You can assign remaining Legal Leaves for each employee, Odoo will automatically create and validate allocation requests.

diff --git a/addons/hr_holidays/report/hr_custom_rml.xsl b/addons/hr_holidays/report/hr_custom_rml.xsl index 64a4894613a..f57c04aa097 100644 --- a/addons/hr_holidays/report/hr_custom_rml.xsl +++ b/addons/hr_holidays/report/hr_custom_rml.xsl @@ -7,7 +7,7 @@ -