diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py index ebbd5459cea..c538614fd0f 100644 --- a/addons/account/__openerp__.py +++ b/addons/account/__openerp__.py @@ -159,6 +159,5 @@ for a particular financial year and for preparation of vouchers there is a modul ], 'installable': True, 'auto_install': False, - 'certificate': '0080331923549', } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/account.py b/addons/account/account.py index d145f0308b0..fbbbfd64537 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -31,7 +31,7 @@ import decimal_precision as dp from tools.translate import _ from tools.float_utils import float_round from openerp import SUPERUSER_ID - +import tools _logger = logging.getLogger(__name__) @@ -227,7 +227,7 @@ class account_account(osv.osv): while pos < len(args): if args[pos][0] == 'code' and args[pos][1] in ('like', 'ilike') and args[pos][2]: - args[pos] = ('code', '=like', str(args[pos][2].replace('%', ''))+'%') + args[pos] = ('code', '=like', tools.ustr(args[pos][2].replace('%', ''))+'%') if args[pos][0] == 'journal_id': if not args[pos][2]: del args[pos] @@ -601,7 +601,7 @@ class account_account(osv.osv): if not default: default = {} default = default.copy() - default['code'] = (account['code'] or '') + '(copy)' + default.update(code=_("%s (copy)") % (account['code'] or '')) if not local: done_list = [] if account.id in done_list: @@ -682,7 +682,7 @@ class account_journal_view(osv.osv): _name = "account.journal.view" _description = "Journal View" _columns = { - 'name': fields.char('Journal View', size=64, required=True), + 'name': fields.char('Journal View', size=64, required=True, translate=True), 'columns_id': fields.one2many('account.journal.column', 'view_id', 'Columns') } _order = "name" @@ -782,9 +782,10 @@ class account_journal(osv.osv): if not default: default = {} default = default.copy() - default['code'] = (journal['code'] or '') + '(copy)' - default['name'] = (journal['name'] or '') + '(copy)' - default['sequence_id'] = False + default.update( + code=_("%s (copy)") % (journal['code'] or ''), + name=_("%s (copy)") % (journal['name'] or ''), + sequence_id=False) return super(account_journal, self).copy(cr, uid, id, default, context=context) def write(self, cr, uid, ids, vals, context=None): @@ -1907,7 +1908,7 @@ class account_tax(osv.osv): 'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), 'include_base_amount': fields.boolean('Included in base amount', help="Indicates if the amount of tax must be included in the base amount for the computation of the next taxes"), 'company_id': fields.many2one('res.company', 'Company', required=True), - 'description': fields.char('Tax Code',size=32), + 'description': fields.char('Tax Code'), 'price_include': fields.boolean('Tax Included in Price', help="Check this if the price you use on the product and invoices includes this tax."), 'type_tax_use': fields.selection([('sale','Sale'),('purchase','Purchase'),('all','All')], 'Tax Application', required=True) @@ -2517,7 +2518,7 @@ class account_account_template(osv.osv): 'reconcile': fields.boolean('Allow Reconciliation', help="Check this option if you want the user to reconcile entries in this account."), 'shortcut': fields.char('Shortcut', size=12), 'note': fields.text('Note'), - 'parent_id': fields.many2one('account.account.template', 'Parent Account Template', ondelete='cascade'), + 'parent_id': fields.many2one('account.account.template', 'Parent Account Template', ondelete='cascade', domain=[('type','=','view')]), 'child_parent_ids':fields.one2many('account.account.template', 'parent_id', 'Children'), 'tax_ids': fields.many2many('account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id', 'Default Taxes'), 'nocreate': fields.boolean('Optional create', help="If checked, the new chart of accounts will not contain this by default."), @@ -2535,20 +2536,6 @@ class account_account_template(osv.osv): (_check_recursion, 'Error!\nYou cannot create recursive account templates.', ['parent_id']), ] - def create(self, cr, uid, vals, context=None): - if 'parent_id' in vals: - parent = self.read(cr, uid, [vals['parent_id']], ['type']) - if parent and parent[0]['type'] != 'view': - raise osv.except_osv(_('Warning!'), _("You may only select a parent account of type 'View'.")) - return super(account_account_template, self).create(cr, uid, vals, context=context) - - def write(self, cr, uid, ids, vals, context=None): - if 'parent_id' in vals: - parent = self.read(cr, uid, [vals['parent_id']], ['type']) - if parent and parent[0]['type'] != 'view': - raise osv.except_osv(_('Warning!'), _("You may only select a parent account of type 'View'.")) - return super(account_account_template, self).write(cr, uid, ids, vals, context=context) - def name_get(self, cr, uid, ids, context=None): if not ids: return [] @@ -2827,7 +2814,7 @@ class account_tax_template(osv.osv): 'ref_base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), 'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), 'include_base_amount': fields.boolean('Include in Base Amount', help="Set if the amount of tax must be included in the base amount before computing the next taxes."), - 'description': fields.char('Internal Name', size=32), + 'description': fields.char('Internal Name'), 'type_tax_use': fields.selection([('sale','Sale'),('purchase','Purchase'),('all','All')], 'Tax Use In', required=True,), 'price_include': fields.boolean('Tax Included in Price', help="Check this if the price you use on the product and invoices includes this tax."), } diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index 2dc7f96768f..b4fc2388a68 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -447,14 +447,18 @@ class account_bank_statement(osv.osv): return self.write(cr, uid, done, {'state':'draft'}, context=context) def _compute_balance_end_real(self, cr, uid, journal_id, context=None): - cr.execute('SELECT balance_end_real \ - FROM account_bank_statement \ - WHERE journal_id = %s AND NOT state = %s \ - ORDER BY date DESC,id DESC LIMIT 1', (journal_id, 'draft')) - res = cr.fetchone() + res = False + if journal_id: + cr.execute('SELECT balance_end_real \ + FROM account_bank_statement \ + WHERE journal_id = %s AND NOT state = %s \ + ORDER BY date DESC,id DESC LIMIT 1', (journal_id, 'draft')) + res = cr.fetchone() return res and res[0] or 0.0 def onchange_journal_id(self, cr, uid, statement_id, journal_id, context=None): + if not journal_id: + return {} balance_start = self._compute_balance_end_real(cr, uid, journal_id, context=context) journal_data = self.pool.get('account.journal').read(cr, uid, journal_id, ['default_debit_account_id', 'company_id'], context=context) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index aff38d71cfe..a1c53eff4b1 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -508,8 +508,10 @@ class account_invoice(osv.osv): if journal_id: journal = self.pool.get('account.journal').browse(cr, uid, journal_id, context=context) currency_id = journal.currency and journal.currency.id or journal.company_id.currency_id.id + company_id = journal.company_id.id result = {'value': { 'currency_id': currency_id, + 'company_id': company_id, } } return result @@ -1371,7 +1373,10 @@ class account_invoice_line(osv.osv): 'partner_id': fields.related('invoice_id','partner_id',type='many2one',relation='res.partner',string='Partner',store=True) } - def _default_account_id(self, cr, uid, ids, context=None): + def _default_account_id(self, cr, uid, context=None): + # XXX this gets the default account for the user's company, + # it should get the default account for the invoice's company + # however, the invoice's company does not reach this point prop = self.pool.get('ir.property').get(cr, uid, 'property_account_income_categ', 'product.category', context=context) return prop and prop.id or False @@ -1401,7 +1406,7 @@ class account_invoice_line(osv.osv): context = {} company_id = company_id if company_id != None else context.get('company_id',False) context = dict(context) - context.update({'company_id': company_id}) + context.update({'company_id': company_id, 'force_company': company_id}) if not partner_id: raise osv.except_osv(_('No Partner Defined !'),_("You must first select a partner !") ) if not product: @@ -1556,16 +1561,19 @@ class account_invoice_line(osv.osv): def onchange_account_id(self, cr, uid, ids, product_id, partner_id, inv_type, fposition_id, account_id): if not account_id: return {} - taxes = self.pool.get('account.account').browse(cr, uid, account_id).tax_ids + unique_tax_ids = [] fpos = fposition_id and self.pool.get('account.fiscal.position').browse(cr, uid, fposition_id) or False - tax_ids = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, taxes) - - product_change_result = self.product_id_change(cr, uid, ids, product_id, False, type=inv_type, - partner_id=partner_id, fposition_id=fposition_id) - unique_tax_ids = set(tax_ids) - if product_change_result and 'value' in product_change_result and 'invoice_line_tax_id' in product_change_result['value']: - unique_tax_ids |= set(product_change_result['value']['invoice_line_tax_id']) - return {'value':{'invoice_line_tax_id': list(unique_tax_ids)}} + account = self.pool.get('account.account').browse(cr, uid, account_id) + if not product_id: + taxes = account.tax_ids + unique_tax_ids = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, taxes) + else: + product_change_result = self.product_id_change(cr, uid, ids, product_id, False, type=inv_type, + partner_id=partner_id, fposition_id=fposition_id, + company_id=account.company_id.id) + if product_change_result and 'value' in product_change_result and 'invoice_line_tax_id' in product_change_result['value']: + unique_tax_ids = product_change_result['value']['invoice_line_tax_id'] + return {'value':{'invoice_line_tax_id': unique_tax_ids}} account_invoice_line() @@ -1650,14 +1658,13 @@ class account_invoice_tax(osv.osv): for line in inv.invoice_line: for tax in tax_obj.compute_all(cr, uid, line.invoice_line_tax_id, (line.price_unit* (1-(line.discount or 0.0)/100.0)), line.quantity, line.product_id, inv.partner_id)['taxes']: - tax['price_unit'] = cur_obj.round(cr, uid, cur, tax['price_unit']) val={} val['invoice_id'] = inv.id val['name'] = tax['name'] val['amount'] = tax['amount'] val['manual'] = False val['sequence'] = tax['sequence'] - val['base'] = tax['price_unit'] * line['quantity'] + val['base'] = cur_obj.round(cr, uid, cur, tax['price_unit'] * line['quantity']) if inv.type in ('out_invoice','in_invoice'): val['base_code_id'] = tax['base_code_id'] diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 1c4d83106ca..4a587eee6fe 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -278,6 +278,7 @@
+
@@ -299,8 +300,8 @@ + + @@ -479,6 +479,7 @@
+
diff --git a/addons/event/res_partner_view.xml b/addons/event/res_partner_view.xml index 8e5ff480c2c..c3e8073a7ae 100644 --- a/addons/event/res_partner_view.xml +++ b/addons/event/res_partner_view.xml @@ -16,7 +16,7 @@ False - + @@ -24,7 +24,7 @@ - + diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml index f46bc5fff96..2cc749a1a40 100644 --- a/addons/event/security/event_security.xml +++ b/addons/event/security/event_security.xml @@ -3,7 +3,7 @@ - Event + Events Helps you manage your Events. 3 diff --git a/addons/event_moodle/event_moodle.py b/addons/event_moodle/event_moodle.py index 19e763e91b0..0a565200f35 100644 --- a/addons/event_moodle/event_moodle.py +++ b/addons/event_moodle/event_moodle.py @@ -54,7 +54,7 @@ class event_moodle(osv.osv): """ moodle_config_wiz_ids = self.search(cr, uid, [], context=context) if not moodle_config_wiz_ids: - raise osv.except_osv(('Error!'),("First configure your moodle connection.")) + raise osv.except_osv(_('Error!'),_("First configure your moodle connection.")) return moodle_config_wiz_ids[0] def make_url(self, cr, uid, ids, context=None): @@ -101,6 +101,8 @@ class event_moodle(osv.osv): """ #connect to moodle url = self.browse(cr, uid, id, context=context).url + if not url: + raise osv.except_osv(_('Error!'),_("You must configure your moodle connection.")) sock = xmlrpclib.ServerProxy(url) return sock.core_course_create_courses(courses) diff --git a/addons/event_project/__openerp__.py b/addons/event_project/__openerp__.py index b6710c8bac4..81fb24455f5 100644 --- a/addons/event_project/__openerp__.py +++ b/addons/event_project/__openerp__.py @@ -36,7 +36,6 @@ This module allows you to create retro planning for managing your events. 'demo': [], 'installable': True, 'auto_install': False, - 'certificate': '0069726863885', } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/event_sale/event_sale_view.xml b/addons/event_sale/event_sale_view.xml index c39cff04bd9..52f935a0760 100644 --- a/addons/event_sale/event_sale_view.xml +++ b/addons/event_sale/event_sale_view.xml @@ -6,7 +6,7 @@ product.product - + diff --git a/addons/fetchmail/__openerp__.py b/addons/fetchmail/__openerp__.py index 3bfcf4d95a3..bba1fc22e07 100644 --- a/addons/fetchmail/__openerp__.py +++ b/addons/fetchmail/__openerp__.py @@ -64,7 +64,6 @@ For more specific needs, you may also assign custom-defined actions 'demo': [], 'installable': True, 'auto_install': False, - 'certificate' : '00692978332890137453', 'images': ['images/1_email_servers.jpeg'], } diff --git a/addons/fetchmail/fetchmail.py b/addons/fetchmail/fetchmail.py index 70a05c6bd0e..e0023697594 100644 --- a/addons/fetchmail/fetchmail.py +++ b/addons/fetchmail/fetchmail.py @@ -195,7 +195,7 @@ openerp_mailgate.py -u %(uid)d -p PASSWORD -o %(model)s -d %(dbname)s --host=HOS strip_attachments=(not server.attach), context=context) if res_id and server.action_id: - action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]}) + action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id], 'active_model': context.get("thread_model", False)}) imap_server.store(num, '+FLAGS', '\\Seen') cr.commit() count += 1 @@ -220,7 +220,7 @@ openerp_mailgate.py -u %(uid)d -p PASSWORD -o %(model)s -d %(dbname)s --host=HOS strip_attachments=(not server.attach), context=context) if res_id and server.action_id: - action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]}) + action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id], 'active_model': context.get("thread_model", False)}) pop_server.dele(num) cr.commit() _logger.info("fetched/processed %s email(s) on %s server %s", numMsgs, server.type, server.name) diff --git a/addons/google_base_account/i18n/ru.po b/addons/google_base_account/i18n/ru.po new file mode 100644 index 00000000000..9be23ab6515 --- /dev/null +++ b/addons/google_base_account/i18n/ru.po @@ -0,0 +1,123 @@ +# Russian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-09-26 14:25+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-09-27 04:36+0000\n" +"X-Generator: Launchpad (build 16033)\n" + +#. module: google_base_account +#: field:res.users,gmail_user:0 +msgid "Username" +msgstr "Имя пользователя" + +#. module: google_base_account +#: model:ir.actions.act_window,name:google_base_account.act_google_login_form +msgid "Google Login" +msgstr "Логин Google" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:29 +#, python-format +msgid "Google Contacts Import Error!" +msgstr "Ошибка импорта контактов Google!" + +#. module: google_base_account +#: view:res.users:0 +msgid " Synchronization " +msgstr " Синхронизация " + +#. module: google_base_account +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "Вы не можете создать двух пользователей с одним логином!" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:75 +#, python-format +msgid "Error" +msgstr "Ошибка" + +#. module: google_base_account +#: view:google.login:0 +msgid "Google login" +msgstr "Логин Google" + +#. module: google_base_account +#: model:ir.model,name:google_base_account.model_res_users +msgid "res.users" +msgstr "res.users" + +#. module: google_base_account +#: field:google.login,password:0 +msgid "Google Password" +msgstr "Пароль Google" + +#. module: google_base_account +#: view:google.login:0 +msgid "_Cancel" +msgstr "_Отмена" + +#. module: google_base_account +#: view:res.users:0 +msgid "Google Account" +msgstr "Аккаунт Google" + +#. module: google_base_account +#: field:google.login,user:0 +msgid "Google Username" +msgstr "Имя пользователя Google" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:29 +#, python-format +msgid "" +"Please install gdata-python-client from http://code.google.com/p/gdata-" +"python-client/downloads/list" +msgstr "" +"Установите, пожалуйста, gdata-python-client с http://code.google.com/p/gdata-" +"python-client/downloads/list" + +#. module: google_base_account +#: model:ir.model,name:google_base_account.model_google_login +msgid "Google Contact" +msgstr "Контакт Google" + +#. module: google_base_account +#: view:google.login:0 +msgid "_Login" +msgstr "_Логин" + +#. module: google_base_account +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "" +"Выбранная компания отсутствует в списке разрешённых компаний для этого " +"пользователя" + +#. module: google_base_account +#: field:res.users,gmail_password:0 +msgid "Password" +msgstr "Пароль" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:75 +#, python-format +msgid "Authentication fail check the user and password !" +msgstr "Ошибка авторизации, проверьте имя пользователя и пароля!" + +#. module: google_base_account +#: view:google.login:0 +msgid "ex: user@gmail.com" +msgstr "пример: user@gmail.com" diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py index 270c105daab..f1477f9c7f2 100644 --- a/addons/google_docs/google_docs.py +++ b/addons/google_docs/google_docs.py @@ -134,8 +134,8 @@ class config(osv.osv): _description = "Google Docs templates config" _columns = { - 'model_id': fields.many2one('ir.model', 'Model'), - 'gdocs_resource_id': fields.char('Google resource ID', size=64,help=''' + 'model_id': fields.many2one('ir.model', 'Model', required=True), + 'gdocs_resource_id': fields.char('Google Resource ID to Use as Template', size=64,help=''' This is the id of the template document, on google side. You can find it thanks to its URL: *for a text document with url like `https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is `document:123456789` *for a spreadsheet document with url like `https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, the ID is `spreadsheet:123456789` @@ -143,7 +143,7 @@ This is the id of the template document, on google side. You can find it thanks *for a drawing document with url like `https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is `drawings:123456789` ... '''), - 'name_template': fields.char('GDoc name template ', size=64, help='This is the name which appears on google side'), + 'name_template': fields.char('Google Doc Name Pattern', size=64, help='Choose how the new google docs will be named, on google side'), } _defaults = { diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js index 694f5736c72..bcfd24f8c0d 100644 --- a/addons/google_docs/static/src/js/gdocs.js +++ b/addons/google_docs/static/src/js/gdocs.js @@ -13,7 +13,7 @@ var _t = instance.web._t; }); if (! flag) { this.add_items('files', [ - { label: _t('Google Doc'), callback: self.on_google_doc }, + { label: _t('Add Google Doc...'), callback: self.on_google_doc }, ]); } }, diff --git a/addons/google_map/__openerp__.py b/addons/google_map/__openerp__.py index f5577b17994..e1963e3f8f4 100644 --- a/addons/google_map/__openerp__.py +++ b/addons/google_map/__openerp__.py @@ -33,11 +33,12 @@ Using this you can directly open Google Map from the URL widget.""", 'website': 'http://www.openerp.com', 'images': ['images/google_map.jpeg'], 'depends': ['base'], - 'data': [], + 'data': [ + 'google_map_view.xml' + ], 'demo': [], 'js': ['static/src/js/google_map.js'], 'installable': True, 'auto_install': False, - 'certificate': '0029498930765', } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/google_map/google_map_launch.py b/addons/google_map/google_map_launch.py index 8ee9a16fb0a..f3ac20ac734 100644 --- a/addons/google_map/google_map_launch.py +++ b/addons/google_map/google_map_launch.py @@ -25,8 +25,7 @@ class launch_map(osv.osv): _inherit = "res.partner" def open_map(self, cr, uid, ids, context=None): - address_obj= self.pool.get('res.partner') - partner = address_obj.browse(cr, uid, ids, context=context)[0] + partner = self.browse(cr, uid, ids, context=context)[0] url="http://maps.google.com/maps?oi=map&q=" if partner.street: url+=partner.street.replace(' ','+') @@ -39,9 +38,9 @@ class launch_map(osv.osv): if partner.zip: url+='+'+partner.zip.replace(' ','+') return { - 'type': 'ir.actions.act_url', - 'url':url, - 'target': 'new' + 'type': 'ir.actions.act_url', + 'url':url, + 'target': 'new' } launch_map() diff --git a/addons/google_map/google_map_view.xml b/addons/google_map/google_map_view.xml new file mode 100644 index 00000000000..46cf9d48807 --- /dev/null +++ b/addons/google_map/google_map_view.xml @@ -0,0 +1,22 @@ + + + + + + res.partner.google.map.inherit + res.partner + + + + + + + + + + diff --git a/addons/hr/__openerp__.py b/addons/hr/__openerp__.py index b99482ef8c5..0a93d844180 100644 --- a/addons/hr/__openerp__.py +++ b/addons/hr/__openerp__.py @@ -68,7 +68,6 @@ You can manage: 'installable': True, 'application': True, 'auto_install': False, - 'certificate': '0086710558965', 'css': [ 'static/src/css/hr.css' ], } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr/board_hr_view.xml b/addons/hr/board_hr_view.xml index 4d01038b671..84db6128f41 100644 --- a/addons/hr/board_hr_view.xml +++ b/addons/hr/board_hr_view.xml @@ -22,6 +22,20 @@ form menu + +
+

+ Human Resources dashboard is empty. +

+ To add your first report into this dashboard, go to any + menu, switch to list or graph view, and click 'Add to + Dashboard' in the extended search options. +

+ You can filter and group data before inserting into the + dashboard using the search options. +

+
+
- - - kanban - - - - - tree - - - - - - - form - - - - @@ -350,10 +331,8 @@
- -
@@ -374,14 +353,14 @@
- - - - +
+
+
+
diff --git a/addons/hr/res_config_view.xml b/addons/hr/res_config_view.xml index 7507665c96d..f370b26139d 100644 --- a/addons/hr/res_config_view.xml +++ b/addons/hr/res_config_view.xml @@ -69,7 +69,7 @@
- + @@ -97,14 +97,14 @@ -
-
- + @@ -139,14 +139,18 @@ - + - + +
+ + +
@@ -323,9 +327,9 @@ - + - + @@ -337,18 +341,23 @@ - + - + - + + hr_timesheet_sheet.sheet + form + Timesheets + tree,form + {'search_default_employee_id': [active_id], 'default_employee_id': active_id} + + hr.timesheet.sheet.employee.extd_form hr.employee diff --git a/addons/hr_timesheet_sheet/report/hr_timesheet_report.py b/addons/hr_timesheet_sheet/report/hr_timesheet_report.py index 49b18f75e4b..1fdcac9f7c6 100644 --- a/addons/hr_timesheet_sheet/report/hr_timesheet_report.py +++ b/addons/hr_timesheet_sheet/report/hr_timesheet_report.py @@ -43,7 +43,7 @@ class hr_timesheet_report(osv.osv): 'account_id': fields.many2one('account.analytic.account', 'Analytic Account',readonly=True), 'company_id': fields.many2one('res.company', 'Company',readonly=True), 'cost': fields.float('Cost',readonly=True, digits_compute=dp.get_precision('Account')), - 'quantity': fields.float('Quantity',readonly=True), + 'quantity': fields.float('Time',readonly=True), } def init(self, cr): diff --git a/addons/hr_timesheet_sheet/report/timesheet_report.py b/addons/hr_timesheet_sheet/report/timesheet_report.py index 38e19d708d4..3db7ff8feb2 100644 --- a/addons/hr_timesheet_sheet/report/timesheet_report.py +++ b/addons/hr_timesheet_sheet/report/timesheet_report.py @@ -52,7 +52,7 @@ class timesheet_report(osv.osv): ('draft','Draft'), ('confirm','Confirmed'), ('done','Done')], 'Status', readonly=True), - 'quantity': fields.float('#Quantity',readonly=True), + 'quantity': fields.float('Time',readonly=True), 'cost': fields.float('#Cost',readonly=True), } diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml index eab3d03ceea..1b7cc5446b8 100644 --- a/addons/idea/idea_view.xml +++ b/addons/idea/idea_view.xml @@ -77,6 +77,7 @@
+
diff --git a/addons/import_google/wizard/google_import_message_view.xml b/addons/import_google/wizard/google_import_message_view.xml index 158aff29bf3..d44bd8e26ec 100644 --- a/addons/import_google/wizard/google_import_message_view.xml +++ b/addons/import_google/wizard/google_import_message_view.xml @@ -10,6 +10,9 @@ +
+
diff --git a/addons/import_google/wizard/import_google.py b/addons/import_google/wizard/import_google.py index d231c186321..f8fc8991975 100644 --- a/addons/import_google/wizard/import_google.py +++ b/addons/import_google/wizard/import_google.py @@ -27,6 +27,7 @@ from dateutil import * from pytz import timezone from datetime import datetime import time +import base64 from osv import * from tools.translate import _ @@ -282,7 +283,7 @@ class google_import(import_framework): self.contact = self.gd_client.GetContactsFeed() while self.contact: for entry in self.contact.entry: - data = {} + data = {} data['id'] = entry.id.text name = tools.ustr(entry.title.text) if name == "None": @@ -290,6 +291,8 @@ class google_import(import_framework): data['name'] = name or _('Unknown') emails = ','.join(email.address for email in entry.email) data['email'] = emails + if self.gd_client.GetPhoto(entry): + data['image'] = base64.encodestring(self.gd_client.GetPhoto(entry)) if table == 'Contact': data.update({'customer': str(self.context.get('customer')), 'supplier': str(self.context.get('supplier'))}) @@ -322,6 +325,12 @@ class google_import(import_framework): 'name': value('company', fallback='name'), 'customer': 'customer', 'supplier': 'supplier', + 'city': 'city', + 'phone': 'phone', + 'mobile': 'mobile', + 'email': 'email', + 'image': 'image', + 'fax': 'fax', 'child_ids/id': ref(self.TABLE_ADDRESS, 'id'), } } diff --git a/addons/import_google/wizard/import_google_data.py b/addons/import_google/wizard/import_google_data.py index 2132d141e29..5ce1d160f3e 100644 --- a/addons/import_google/wizard/import_google_data.py +++ b/addons/import_google/wizard/import_google_data.py @@ -104,7 +104,7 @@ class synchronize_google(osv.osv_memory): _columns = { 'customer': fields.boolean('Customer', help="Check this box to set newly created partner as Customer."), 'supplier': fields.boolean('Supplier', help="Check this box to set newly created partner as Supplier."), - 'group_name': fields.selection(_get_group, "Group Name",help="Choose which group to import, By default it takes all."), + 'group_name': fields.selection(_get_group, "Group Name", help="Choose which group to import, By default it takes all."), 'calendar_name': fields.selection(_get_calendars, "Calendar Name"), } diff --git a/addons/import_google/wizard/import_google_data_view.xml b/addons/import_google/wizard/import_google_data_view.xml index f8e110e6a5d..e11b5aa2d08 100644 --- a/addons/import_google/wizard/import_google_data_view.xml +++ b/addons/import_google/wizard/import_google_data_view.xml @@ -7,7 +7,7 @@
- + @@ -32,7 +32,7 @@ - +