diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index 48082451f35..8e79376aa87 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -61,7 +61,7 @@ class account_bank_statement(osv.osv): return res def _get_period(self, cr, uid, context=None): - periods = self.pool.get('account.period').find(cr, uid) + periods = self.pool.get('account.period').find(cr, uid,context=context) if periods: return periods[0] return False diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py index 17fa05d5f24..c1f30824461 100644 --- a/addons/account/account_cash_statement.py +++ b/addons/account/account_cash_statement.py @@ -78,7 +78,7 @@ class account_cash_statement(osv.osv): """ res = {} for statement in self.browse(cr, uid, ids, context=context): - if statement.journal_id.type not in ('cash',): + if (statement.journal_id.type not in ('cash',)) or (not statement.journal_id.cash_control): continue start = end = 0 for line in statement.details_ids: @@ -289,13 +289,13 @@ class account_cash_statement(osv.osv): super(account_cash_statement, self).button_confirm_bank(cr, uid, ids, context=context) absl_proxy = self.pool.get('account.bank.statement.line') - TABLES = (('Profit', 'profit_account_id'), ('Loss', 'loss_account_id'),) + TABLES = ((_('Profit'), 'profit_account_id'), (_('Loss'), 'loss_account_id'),) for obj in self.browse(cr, uid, ids, context=context): if obj.difference == 0.0: continue - for item_label, item_account in TALBES: + for item_label, item_account in TABLES: if getattr(obj.journal_id, item_account): raise osv.except_osv(_('Error!'), _('There is no %s Account on the journal %s.') % (item_label, obj.journal_id.name,)) diff --git a/addons/account/i18n/fr.po b/addons/account/i18n/fr.po index 510dc185fa6..5a013ceacb9 100644 --- a/addons/account/i18n/fr.po +++ b/addons/account/i18n/fr.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-10-31 04:40+0000\n" +"X-Launchpad-Export-Date: 2012-11-03 05:03+0000\n" "X-Generator: Launchpad (build 16218)\n" #. module: account diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po index 7e52f26f2a4..f07753022d5 100644 --- a/addons/account/i18n/ru.po +++ b/addons/account/i18n/ru.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-01 04:36+0000\n" +"X-Launchpad-Export-Date: 2012-11-03 05:03+0000\n" "X-Generator: Launchpad (build 16218)\n" #. module: account diff --git a/addons/account/i18n/sl.po b/addons/account/i18n/sl.po index 5e4f9a39e16..6748e5db3b1 100644 --- a/addons/account/i18n/sl.po +++ b/addons/account/i18n/sl.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-02 05:09+0000\n" +"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n" "X-Generator: Launchpad (build 16218)\n" #. module: account diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po index 2e8e2d5d3da..d722cd5673b 100644 --- a/addons/account/i18n/zh_CN.po +++ b/addons/account/i18n/zh_CN.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-02 05:09+0000\n" +"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n" "X-Generator: Launchpad (build 16218)\n" #. module: account diff --git a/addons/account/partner.py b/addons/account/partner.py index a9b2b99588d..3355363308b 100644 --- a/addons/account/partner.py +++ b/addons/account/partner.py @@ -209,7 +209,7 @@ class res_partner(osv.osv): relation='account.fiscal.position', string="Fiscal Position", view_load=True, - help="The fiscal position will determine taxes and the accounts used for the partner.", + help="The fiscal position will determine taxes and accounts used for the partner.", ), 'property_payment_term': fields.property( 'account.payment.term', diff --git a/addons/account/product.py b/addons/account/product.py index 9be49b4c56a..0a6a0eda10c 100644 --- a/addons/account/product.py +++ b/addons/account/product.py @@ -30,14 +30,14 @@ class product_category(osv.osv): relation='account.account', string="Income Account", view_load=True, - help="This account will be used for invoices to value sales for the current product category"), + help="This account will be used for invoices to value sales."), 'property_account_expense_categ': fields.property( - 'account.account', + 'account.account', type='many2one', relation='account.account', string="Expense Account", view_load=True, - help="This account will be used for invoices to value expenses for the current product category"), + help="This account will be used for invoices to value expenses."), } product_category() @@ -60,14 +60,14 @@ class product_template(osv.osv): relation='account.account', string="Income Account", view_load=True, - help="This account will be used for invoices instead of the default one to value sales for the current product"), + help="This account will be used for invoices instead of the default one to value sales for the current product."), 'property_account_expense': fields.property( 'account.account', type='many2one', relation='account.account', string="Expense Account", view_load=True, - help="This account will be used for invoices instead of the default one to value expenses for the current product"), + help="This account will be used for invoices instead of the default one to value expenses for the current product."), } product_template() diff --git a/addons/account/product_view.xml b/addons/account/product_view.xml index 4d64af3e154..9b54647e726 100644 --- a/addons/account/product_view.xml +++ b/addons/account/product_view.xml @@ -49,9 +49,11 @@ - - - + + + + + diff --git a/addons/account/project/analytic_account_demo.xml b/addons/account/project/analytic_account_demo.xml index b53b76969ab..2c4acc6bc45 100644 --- a/addons/account/project/analytic_account_demo.xml +++ b/addons/account/project/analytic_account_demo.xml @@ -94,8 +94,8 @@ open - - Magasin BML 1 + + Millennium Industries normal @@ -121,8 +121,8 @@ - - DistriPC + + Delta PC normal @@ -145,8 +145,8 @@ open - - Leclerc + + Luminous Technologies normal @@ -161,8 +161,8 @@ - - OpenERP SA AT Work + + Think Big Systems normal diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml index dca9f2ddf12..88cf901fdae 100644 --- a/addons/account/project/project_view.xml +++ b/addons/account/project/project_view.xml @@ -35,7 +35,6 @@ - diff --git a/addons/account/report/account_print_overdue.rml b/addons/account/report/account_print_overdue.rml index 3e8b9b04b62..dd573580c6c 100644 --- a/addons/account/report/account_print_overdue.rml +++ b/addons/account/report/account_print_overdue.rml @@ -277,7 +277,7 @@
- [[ getLines(o) and removeParentNode('section')]]There is nothing due with this customer + [[ getLines(o) and removeParentNode('section')]]There is nothing due with this customer.
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml index f4e251aaca1..9eb8fe90895 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml @@ -3,7 +3,7 @@ - Time & Costs to Invoice + Time & Materials to Invoice account.analytic.line form tree,form @@ -12,8 +12,10 @@

- You will find here timesheets and purchases you did for contracts that can be reinvoiced to the customer. - If you want to record new jobs to invoice, you should use the timesheet menu instead. + You will find here timesheets and purchases you did for + contracts that can be reinvoiced to the customer. If you want + to record new activities to invoice, you should use the timesheet + menu instead.

diff --git a/addons/account_anglo_saxon/product.py b/addons/account_anglo_saxon/product.py index a2a5f7e6e95..87ca24753d6 100644 --- a/addons/account_anglo_saxon/product.py +++ b/addons/account_anglo_saxon/product.py @@ -38,14 +38,14 @@ class product_category(osv.osv): relation='account.account', string="Income Account", view_load=True, - help="This account will be used to value outgoing stock for the current product category using sale price"), + help="This account will be used to value outgoing stock using sale price."), 'property_account_expense_categ': fields.property( 'account.account', type='many2one', relation='account.account', string="Expense Account", view_load=True, - help="This account will be used to value outgoing stock for the current product category using cost price"), + help="This account will be used to value outgoing stock using cost price."), } product_category() @@ -68,14 +68,14 @@ class product_template(osv.osv): relation='account.account', string="Income Account", view_load=True, - help="This account will be used to value outgoing stock for the current product category using sale price"), + help="This account will be used to value outgoing stock using sale price."), 'property_account_expense': fields.property( 'account.account', type='many2one', relation='account.account', string="Expense Account", view_load=True, - help="This account will be used to value outgoing stock for the current product category using cost price"), + help="This account will be used to value outgoing stock using cost price."), } product_template() diff --git a/addons/account_anglo_saxon/product_view.xml b/addons/account_anglo_saxon/product_view.xml index 4acc69b7595..43029616c5b 100644 --- a/addons/account_anglo_saxon/product_view.xml +++ b/addons/account_anglo_saxon/product_view.xml @@ -29,10 +29,10 @@ product.category.property.form.inherit.stock product.category - + - + diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index 585798a5235..ac9024fd51d 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -134,10 +134,11 @@ class account_asset_asset(osv.osv): def compute_depreciation_board(self, cr, uid, ids, context=None): depreciation_lin_obj = self.pool.get('account.asset.depreciation.line') + currency_obj = self.pool.get('res.currency') for asset in self.browse(cr, uid, ids, context=context): if asset.value_residual == 0.0: continue - posted_depreciation_line_ids = depreciation_lin_obj.search(cr, uid, [('asset_id', '=', asset.id), ('move_check', '=', True)]) + posted_depreciation_line_ids = depreciation_lin_obj.search(cr, uid, [('asset_id', '=', asset.id), ('move_check', '=', True)],order='depreciation_date desc') old_depreciation_line_ids = depreciation_lin_obj.search(cr, uid, [('asset_id', '=', asset.id), ('move_id', '=', False)]) if old_depreciation_line_ids: depreciation_lin_obj.unlink(cr, uid, old_depreciation_line_ids, context=context) @@ -148,7 +149,12 @@ class account_asset_asset(osv.osv): else: # depreciation_date = 1st January of purchase year purchase_date = datetime.strptime(asset.purchase_date, '%Y-%m-%d') - depreciation_date = datetime(purchase_date.year, 1, 1) + #if we already have some previous validated entries, starting date isn't 1st January but last entry + method period + if (len(posted_depreciation_line_ids)>0): + last_depreciation_date = datetime.strptime(depreciation_lin_obj.browse(cr,uid,posted_depreciation_line_ids[0],context=context).depreciation_date, '%Y-%m-%d') + depreciation_date = (last_depreciation_date+relativedelta(months=+asset.method_period)) + else: + depreciation_date = datetime(purchase_date.year, 1, 1) day = depreciation_date.day month = depreciation_date.month year = depreciation_date.year @@ -158,6 +164,10 @@ class account_asset_asset(osv.osv): for x in range(len(posted_depreciation_line_ids), undone_dotation_number): i = x + 1 amount = self._compute_board_amount(cr, uid, asset, i, residual_amount, amount_to_depr, undone_dotation_number, posted_depreciation_line_ids, total_days, depreciation_date, context=context) + company_currency = asset.company_id.currency_id.id + current_currency = asset.currency_id.id + # compute amount into company currency + amount = currency_obj.compute(cr, uid, current_currency, company_currency, amount, context=context) residual_amount -= amount vals = { 'amount': amount, @@ -191,7 +201,7 @@ class account_asset_asset(osv.osv): def _amount_residual(self, cr, uid, ids, name, args, context=None): cr.execute("""SELECT - l.asset_id as id, round(SUM(abs(l.debit-l.credit))) AS amount + l.asset_id as id, SUM(abs(l.debit-l.credit)) AS amount FROM account_move_line l WHERE @@ -349,8 +359,8 @@ class account_asset_depreciation_line(osv.osv): 'sequence': fields.integer('Sequence', required=True), 'asset_id': fields.many2one('account.asset.asset', 'Asset', required=True), 'parent_state': fields.related('asset_id', 'state', type='char', string='State of Asset'), - 'amount': fields.float('Depreciation Amount', required=True), - 'remaining_value': fields.float('Amount to Depreciate', required=True), + 'amount': fields.float('Depreciation Amount', digits_compute=dp.get_precision('Account'), required=True), + 'remaining_value': fields.float('Amount to Depreciate', digits_compute=dp.get_precision('Account'),required=True), 'depreciated_value': fields.float('Amount Already Depreciated', required=True), 'depreciation_date': fields.date('Depreciation Date', select=1), 'move_id': fields.many2one('account.move', 'Depreciation Entry'), diff --git a/addons/account_budget/account_budget_view.xml b/addons/account_budget/account_budget_view.xml index 81b261d6faa..cb0466a1c92 100644 --- a/addons/account_budget/account_budget_view.xml +++ b/addons/account_budget/account_budget_view.xml @@ -284,7 +284,7 @@ - account.analytic.account.form.inherot.budget + account.analytic.account.form.inherit.budget account.analytic.account diff --git a/addons/account_payment/i18n/zh_CN.po b/addons/account_payment/i18n/zh_CN.po index abc36f292b9..20cb178fe73 100644 --- a/addons/account_payment/i18n/zh_CN.po +++ b/addons/account_payment/i18n/zh_CN.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-10-31 04:40+0000\n" +"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n" "X-Generator: Launchpad (build 16218)\n" #. module: account_payment diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py index 20997084a60..78c7e103946 100644 --- a/addons/analytic/analytic.py +++ b/addons/analytic/analytic.py @@ -305,7 +305,10 @@ class account_analytic_account(osv.osv): def create_send_note(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): - self.message_post(cr, uid, [obj.id], body=_("Contract for %s has been created.") % (obj.partner_id.name), + message = _("Contract created.") + if obj.partner_id: + message = _("Contract for %s has been created.") % (obj.partner_id.name,) + self.message_post(cr, uid, [obj.id], body=message, subtype="analytic.mt_account_status", context=context) account_analytic_account() diff --git a/addons/analytic/analytic_view.xml b/addons/analytic/analytic_view.xml index 2c6136f2629..17371f8609f 100644 --- a/addons/analytic/analytic_view.xml +++ b/addons/analytic/analytic_view.xml @@ -23,11 +23,11 @@ - - + + diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index 54dcc5b4362..09f9cb23da2 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -20,11 +20,10 @@ ############################################################################## import logging -import werkzeug - import openerp from openerp.modules.registry import RegistryManager -from openerp.addons.web.controllers.main import login_and_redirect + +from ..res_users import SignupError _logger = logging.getLogger(__name__) @@ -41,22 +40,18 @@ class Controller(openerp.addons.web.http.Controller): user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token) return user_info - @openerp.addons.web.http.httprequest - def signup(self, req, dbname, token, name, login, password, state=''): - """ sign up a user (new or existing), and log it in """ - url = '/' + @openerp.addons.web.http.jsonrequest + def signup(self, req, dbname, token, name, login, password): + """ sign up a user (new or existing)""" registry = RegistryManager.get(dbname) with registry.cursor() as cr: + res_users = registry.get('res.users') + values = {'name': name, 'login': login, 'password': password} try: - res_users = registry.get('res.users') - values = {'name': name, 'login': login, 'password': password} - credentials = res_users.signup(cr, openerp.SUPERUSER_ID, values, token) - cr.commit() - return login_and_redirect(req, *credentials, redirect_url='/#%s'%state) - except Exception as e: - # signup error - _logger.exception('error when signup') - url = "/#action=login&error_message=%s" % werkzeug.urls.url_quote(e.message) - return werkzeug.utils.redirect(url) + res_users.signup(cr, openerp.SUPERUSER_ID, values, token) + except SignupError, e: + return {'error': openerp.tools.exception_to_unicode(e)} + cr.commit() + return {} # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py index 69eee4f18e0..973a8da6588 100644 --- a/addons/auth_signup/res_users.py +++ b/addons/auth_signup/res_users.py @@ -29,6 +29,9 @@ from openerp import SUPERUSER_ID from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT from openerp.tools.safe_eval import safe_eval +class SignupError(Exception): + pass + def random_token(): # the token has an entropy of about 120 bits (6 bits/char * 20 chars) chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' @@ -101,12 +104,12 @@ class res_partner(osv.Model): partner_ids = self.search(cr, uid, [('signup_token', '=', token)], context=context) if not partner_ids: if raise_exception: - raise Exception("Signup token '%s' is not valid" % token) + raise SignupError("Signup token '%s' is not valid" % token) return False partner = self.browse(cr, uid, partner_ids[0], context) if check_validity and not partner.signup_valid: if raise_exception: - raise Exception("Signup token '%s' is no longer valid" % token) + raise SignupError("Signup token '%s' is no longer valid" % token) return False return partner @@ -194,7 +197,7 @@ class res_users(osv.Model): # check that uninvited users may sign up if 'partner_id' not in values: if not safe_eval(ir_config_parameter.get_param(cr, uid, 'auth_signup.allow_uninvited', 'False')): - raise Exception('Signup is not allowed for uninvited users') + raise SignupError('Signup is not allowed for uninvited users') # create a copy of the template user (attached to a specific partner_id if given) values['active'] = True diff --git a/addons/auth_signup/static/src/js/auth_signup.js b/addons/auth_signup/static/src/js/auth_signup.js index 0974b73292d..bb249429894 100644 --- a/addons/auth_signup/static/src/js/auth_signup.js +++ b/addons/auth_signup/static/src/js/auth_signup.js @@ -8,12 +8,20 @@ openerp.auth_signup = function(instance) { var d = this._super(); // to switch between the signup and regular login form - this.$('a.oe_signup_signup').click(function() { + this.$('a.oe_signup_signup').click(function(ev) { + if (ev) { + ev.preventDefault(); + } self.$el.addClass("oe_login_signup"); + return false; }); - this.$('a.oe_signup_back').click(function() { + this.$('a.oe_signup_back').click(function(ev) { + if (ev) { + ev.preventDefault(); + } self.$el.removeClass("oe_login_signup"); delete self.params.token; + return false; }); // if there is an error message in params, show it then forget it @@ -90,10 +98,19 @@ openerp.auth_signup = function(instance) { name: name, login: login, password: password, - state: $.param(this.params) + //state: $.param(this.params) }; - var url = "/auth_signup/signup?" + $.param(params); - window.location = url; + + var self = this, + super_ = this._super; + this.rpc('/auth_signup/signup', params) + .done(function(result) { + if (result.error) { + self.show_error(result.error); + } else { + super_.apply(self, [ev]); + } + }); } else { // regular login this._super(ev); diff --git a/addons/base_import/__openerp__.py b/addons/base_import/__openerp__.py index f5a707650d8..6555cd8e3e0 100644 --- a/addons/base_import/__openerp__.py +++ b/addons/base_import/__openerp__.py @@ -26,7 +26,7 @@ Re-implement openerp's file import system: 'author': 'OpenERP SA', 'depends': ['base'], 'installable': True, - 'auto_install': True, + 'auto_install': False, 'css': [ 'static/lib/select2/select2.css', 'static/src/css/import.css', diff --git a/addons/base_import/static/csv/External_id_3rd_party_application_product_categories.csv b/addons/base_import/static/csv/External_id_3rd_party_application_product_categories.csv new file mode 100644 index 00000000000..5b77f269d85 --- /dev/null +++ b/addons/base_import/static/csv/External_id_3rd_party_application_product_categories.csv @@ -0,0 +1,6 @@ +External ID,Name,Parent Category/External ID +a1,Expenses,product.product_category_all +a2,Other Products,product.product_category_all +a3,Sellable Products,product.product_category_all +a4,Tables,a1 +a5,Seating furniture,a2 diff --git a/addons/base_import/static/csv/External_id_3rd_party_application_products.csv b/addons/base_import/static/csv/External_id_3rd_party_application_products.csv new file mode 100644 index 00000000000..bf2a5238696 --- /dev/null +++ b/addons/base_import/static/csv/External_id_3rd_party_application_products.csv @@ -0,0 +1,6 @@ +External ID,Name,Internal Reference,Category/External ID,Can be Expensed,Can be Purchased,Can be Sold,Sale Price,Cost,Supply Method,Product Type,Procurement Method +a6,Aluminum Stool,ALS,a5,False,True,True,49.00,25.00,Buy,Stockable Product,Make to Stock +a7,Chair,CHR,a5,False,True,True,89.00,40.00,Buy,Stockable Product,Make to Stock +a8,Table,TBL,a4,False,True,True,169.00,100.00,Buy,Stockable Product,Make to Stock +a9,Software Book Tutorial,SBT,a2,False,True,False,19.00,8.00,Buy,Consumable,Make to Stock +a10,Fuel,FL,a1,True,False,False,0.30,0.25,Buy,Service,Make to Stock diff --git a/addons/base_import/static/csv/Name_products.csv b/addons/base_import/static/csv/Name_products.csv new file mode 100644 index 00000000000..b3fa9b572bd --- /dev/null +++ b/addons/base_import/static/csv/Name_products.csv @@ -0,0 +1,6 @@ +Name,Internal Reference,Can be Expensed,Can be Purchased,Can be Sold,Sale Price,Cost,Supply Method,Product Type,Procurement Method +Aluminum Stool,ALS,False,True,True,49.00,25.00,Buy,Stockable Product,Make to Stock +Chair,CHR,False,True,True,89.00,40.00,Buy,Stockable Product,Make to Stock +Table,TBL,False,True,True,169.00,100.00,Buy,Stockable Product,Make to Stock +Software Book Tutorial,SBT,False,True,False,19.00,8.00,Buy,Consumable,Make to Stock +Fuel,FL,True,False,False,0.30,0.25,Buy,Service,Make to Stock diff --git a/addons/base_import/static/csv/database_import_test.sql b/addons/base_import/static/csv/database_import_test.sql new file mode 100644 index 00000000000..1f79179145e --- /dev/null +++ b/addons/base_import/static/csv/database_import_test.sql @@ -0,0 +1,155 @@ +-- +-- PostgreSQL database dump +-- + +SET statement_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = off; +SET check_function_bodies = false; +SET client_min_messages = warning; +SET escape_string_warning = off; + +SET search_path = public, pg_catalog; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: companies; Type: TABLE; Schema: public; Owner: fp; Tablespace: +-- + +CREATE TABLE companies ( + id integer NOT NULL, + company_name character varying +); + + +ALTER TABLE public.companies OWNER TO fp; + +-- +-- Name: companies_id_seq; Type: SEQUENCE; Schema: public; Owner: fp +-- + +CREATE SEQUENCE companies_id_seq + START WITH 1 + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + +ALTER TABLE public.companies_id_seq OWNER TO fp; + +-- +-- Name: companies_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fp +-- + +ALTER SEQUENCE companies_id_seq OWNED BY companies.id; + + +-- +-- Name: companies_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fp +-- + +SELECT pg_catalog.setval('companies_id_seq', 3, true); + + +-- +-- Name: persons; Type: TABLE; Schema: public; Owner: fp; Tablespace: +-- + +CREATE TABLE persons ( + id integer NOT NULL, + company_id integer, + person_name character varying +); + + +ALTER TABLE public.persons OWNER TO fp; + +-- +-- Name: persons_id_seq; Type: SEQUENCE; Schema: public; Owner: fp +-- + +CREATE SEQUENCE persons_id_seq + START WITH 1 + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + +ALTER TABLE public.persons_id_seq OWNER TO fp; + +-- +-- Name: persons_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fp +-- + +ALTER SEQUENCE persons_id_seq OWNED BY persons.id; + + +-- +-- Name: persons_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fp +-- + +SELECT pg_catalog.setval('persons_id_seq', 4, true); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: fp +-- + +ALTER TABLE ONLY companies ALTER COLUMN id SET DEFAULT nextval('companies_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: fp +-- + +ALTER TABLE ONLY persons ALTER COLUMN id SET DEFAULT nextval('persons_id_seq'::regclass); + + +-- +-- Data for Name: companies; Type: TABLE DATA; Schema: public; Owner: fp +-- + +COPY companies (id, company_name) FROM stdin; +1 Bigees +2 Organi +3 Boum +\. + + +-- +-- Data for Name: persons; Type: TABLE DATA; Schema: public; Owner: fp +-- + +COPY persons (id, company_id, person_name) FROM stdin; +1 1 Fabien +2 1 Laurence +3 2 Eric +4 3 Ramsy +\. + + +-- +-- Name: companies_pkey; Type: CONSTRAINT; Schema: public; Owner: fp; Tablespace: +-- + +ALTER TABLE ONLY companies + ADD CONSTRAINT companies_pkey PRIMARY KEY (id); + + +-- +-- Name: persons_company_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: fp +-- + +ALTER TABLE ONLY persons + ADD CONSTRAINT persons_company_id_fkey FOREIGN KEY (company_id) REFERENCES companies(id); + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/addons/base_import/static/csv/m2m_customers_tags.csv b/addons/base_import/static/csv/m2m_customers_tags.csv new file mode 100644 index 00000000000..e6d74d4f844 --- /dev/null +++ b/addons/base_import/static/csv/m2m_customers_tags.csv @@ -0,0 +1,6 @@ +Name,Reference,Tags,Customer,Street,City,Country +Credit & Leasing,3,Services,True,Central Avenue 814,Johannesburg,South Africa +Services & Finance,5,"Consultancy Services,IT Services",True,Grove Road 5,London,United Kingdom +Hydra Supplies,6,"Manufacturer,Retailer",True,Palm Street 9,Los Angeles,United States +Bolts & Screws,8,"Wholesaler,Components Buyer",True,Rua Américo 1000,Campinas,Brazil +National Parts & Supplies,18,"Manufacturer,Wholesaler",True,Guangdong Way 20,Shenzen,China diff --git a/addons/base_import/static/csv/o2m_purchase_order_lines.csv b/addons/base_import/static/csv/o2m_purchase_order_lines.csv new file mode 100644 index 00000000000..4778b99cb81 --- /dev/null +++ b/addons/base_import/static/csv/o2m_purchase_order_lines.csv @@ -0,0 +1,10 @@ +Order Date,Order Reference,Supplier,Destination,Pricelist,Order Lines / Product,Order Lines / Quantity +2012-12-15,PO00008,ASUSTeK,Stock,Default Purchase Pricelist,ADPT,20 +,,,,,CARD,30 +,,,,,C-Case,40 +2012-12-15,PO00009,Axelor,Stock,Default Purchase Pricelist,CD,5 +,,,,,CPUa8,15 +2012-12-15,PO000010,China Export,Stock,Default Purchase Pricelist,HDD SH-1,10 +,,,,,HDD SH-2,20 +,,,,,LAP-CUS,35 +,,,,,LAP-E5,40 diff --git a/addons/base_import/static/csv/o2m_suppliers_contacts.csv b/addons/base_import/static/csv/o2m_suppliers_contacts.csv new file mode 100644 index 00000000000..6c7be9037b8 --- /dev/null +++ b/addons/base_import/static/csv/o2m_suppliers_contacts.csv @@ -0,0 +1,8 @@ +Name,Address type,Street,City,Country,Tags,Supplier,Customer,Is a company,Companies that refers to partner / Parent company +Wood y Wood Pecker,,"Snow Street, 25",Kainuu,Finland,Supplier,1,0,1, +Roger Pecker,Default,"Snow Street, 27",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker +Sharon Pecker,Delivery,"Snow Street, 28",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker +Thomas Pecker,Contact,"Snow Street, 27",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker +Vicking Direct,,"Atonium Street, 45a",Brussels,Belgium,Supplier,1,0,1, +Yvan Holiday,Invoice,"Atonium Street, 45b",Brussels,Belgium,Supplier,1,0,0,Vicking Direct +Jack Unsworth,Contact,"Atonium Street, 45a",Brussels,Belgium,Supplier,1,0,0,Vicking Direct diff --git a/addons/base_import/static/csv/purchase.order_functional_error_line_cant_adpat.csv b/addons/base_import/static/csv/purchase.order_functional_error_line_cant_adpat.csv new file mode 100644 index 00000000000..3b428763431 --- /dev/null +++ b/addons/base_import/static/csv/purchase.order_functional_error_line_cant_adpat.csv @@ -0,0 +1,6 @@ +"Order Reference","Supplier","Destination","Pricelist","Order Lines / Product","Order Lines / Quantity" +"PO000020","ASUSTeK","Stock","Default Purchase Pricelist","ADPT",20 +,,,,"CARD",30 +,,,,"C-Case",40 +"PO000021","Axelor","Stock","Default Purchase Pricelist","CD",5 +,,,,"CPUa8",15 diff --git a/addons/base_import/static/src/css/import.css b/addons/base_import/static/src/css/import.css index 47b5506a10f..00c8bd138a4 100644 --- a/addons/base_import/static/src/css/import.css +++ b/addons/base_import/static/src/css/import.css @@ -1,14 +1,17 @@ -.oe_import{ - display: inline-block; - width: 600px; - padding: 16px; -} .oe_import > p { margin-left: 8px; margin-right: 8px; text-align: justify } +.oe_import h2 { + margin-top: 0; + margin-bottom: 5px; +} + +.oe_padding { + padding: 13px; +} /* ----------- IMPORT BOX ----------- */ .oe_import .oe_import_box{ @@ -17,6 +20,7 @@ background: #F0EEEE; border-radius: 3px; border: solid 1px #dddddd; + width: 600px; } .oe_import .oe_import_toggle{ margin-top: 8px; diff --git a/addons/base_import/static/src/xml/import.xml b/addons/base_import/static/src/xml/import.xml index 4f721032d1d..a121c15f8c8 100644 --- a/addons/base_import/static/src/xml/import.xml +++ b/addons/base_import/static/src/xml/import.xml @@ -2,20 +2,25 @@
-
- - - or - Cancel -
- - -

Upload your file

+
+
+

+ Import a CSV File +

+ + + + + or + Cancel +
+
+

Select the .CSV @@ -25,7 +30,7 @@ -

@@ -44,7 +49,7 @@
-
+

Map your data to OpenERP

@@ -59,6 +64,7 @@

Frequently Asked Questions

+
Need to import data from an other application?
@@ -78,9 +84,259 @@ whenever possible

+ +
+
+ What can I do when the Import preview table isn't + displayed correctly?
+
+

By default the Import preview is set on commas as + field separators and quotation marks as text + delimiters. If your csv file does not have these + 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 + detect the separations. You will need to change the + file format options in your spreadsheet application. + See the following question.

+
+
+ +
+
+ How can I change the CSV file format options when + saving in my spreadsheet application?
+
+

If you edit and save CSV files in speadsheet + applications, your computer's regional settings will + be applied for the separator and delimiter. + We suggest you use OpenOffice or LibreOffice Calc + as they will allow you to modify all three options + (in 'Save As' dialog box > Check the box 'Edit filter + settings' > Save).

Microsoft Excel will allow + you to modify only the encoding when saving + (in 'Save As' dialog box > click 'Tools' dropdown + list > Encoding tab).

+
+
+ +
+
+ What's the difference between Database ID and + External ID?
+
+

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 + recreate links between the different records. + To help you import such fields, OpenERP 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 + you 3 different fields to import:

    +
  • Country: the name or code of the country
  • +
  • Country/Database ID: the unique OpenERP 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 + that imported it)

For the country + Belgium, you can use one of these 3 ways to import: +

  • Country: Belgium
  • Country/Database + ID: 21
  • Country/External ID: base.be
  • +

According to your need, you should use + one of these 3 ways to reference records in relations. + Here is when you should use one or the other, + according to your need:

  • Use Country: This is + the easiest way when your data come from CSV files + that have been created manually.
  • Use + Country/Database ID: You should rarely use this + notation. It's mostly used by developers as it's main + advantage is to never have conflicts (you may have + several records with the same name, but they always + have a unique Database ID)
  • Use + Country/External ID: Use External ID when you import + data from a third party application.

+

When you use External IDs, you can import CSV files + with the "External ID" column to define the External + ID of each record you import. Then, you will be able + to make a reference to that record with columns like + "Field/External ID". The following two CSV files give + you an example for Products and their Categories.

+ CSV file for categories
+ CSV file for Products +
+
+ +
+
+ What can I do if I have multiple matches for a field? +
+
+

If for example you have two product categories + with the child name "Sellable" (ie. "Misc. + Products/Sellable" & "Other Products/Sellable"), + your validation is halted but you may still import + your data. However, we recommend you do not import the + data because they will all be linked to the first + 'Sellable' category found in the Product Category list + ("Misc. Products/Sellable"). We recommend you modify + one of the duplicates' values or your product category + hierarchy.
+ However if you do not wish to change your + configuration of product categories, we recommend you + use make use of the external ID for this field + 'Category'.

+
+
+ +
+
+ How can I import a many2many relationship field + (e.g. a customer that has multiple tags)?
+
+

The tags should be separated by a comma without any + spacing. For example, if you want you customer to be + lined to both tags 'Manufacturer' and 'Retailer' + then you will encode it as follow "Manufacturer, + Retailer" in the same column of your CSV file.

+ + CSV file for Manufacturer, Retailer
+
+
+ +
+
+ How can I import a one2many relationship (e.g. several + Order Lines of a Sale Order)?
+
+

If you want to import sales order having several + order lines; for each order line, you need to reserve + a specific row in the CSV file. The first order line + will be imported on the same row as the information + relative to order. Any additional lines will need an + addtional row that does not have any information in + the fields relative to the order.

+

As an example, here is + purchase.order_functional_error_line_cant_adpat.CSV + file of some quotations you can import, based on demo + data.

+ File for some Quotations +

The following CSV file shows how to import purchase + orders with their respective purchase order lines:

+ Purchase orders with their respective purchase order lines +

The following CSV file shows how to import + suppliers and their respective contacts

+ Suppliers and their respective contacts +
+
+ + +
+
+ Can I import several times the same record?
+
+

If you import a file that contains one of the + column "External ID" or "Database ID", records that + 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 + 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 + modify a batch of records in your favorite spreadsheet + application.

+
+
+ +
+
+ What happens if I do not provide a value for a + specific field?
+
+

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

+
+
+ +
+
+ How to export/import different tables from an SQL + application to OpenERP?
+
+

If you need to import data from different tables, + you will have to recreate relations between records + belonging to different tables. (e.g. if you import + 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. + 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 + objects, so it's a good practice to prefix this + "External ID" with the name of the application or + table. (like 'company_1', 'person_1' instead of '1') +

As an example, suppose you have a SQL database + with two tables you want to import: companies and + persons. Each person belong to one company, so you + will have to recreate the link between a person and + the company he work for. (If you want to test this + example, here is a + dump of such a PostgreSQL database).

+

We will first export all companies and their + "External ID". In PSQL, write the following command: +

    copy + (select 'company_'||id as "External ID",company_name + as "Name",'True' as "Is a Company" from companies) TO + '/tmp/company.csv' with CSV HEADER;

+

This SQL command will create the following CSV file: +
    External ID,Name,Is a Company +
    company_1,Bigees,True +
    company_2,Organi,True +
    company_3,Boum,True

+

To create the CSV file for persons, linked to + companies, we will use the following SQL command in + PSQL:

    copy (select + 'person_'||id as "External ID",person_name as + "Name",'False' as "Is a Company",'company_'||company_id + as "Related Company/External ID" from persons) TO + '/tmp/person.csv' with CSV

+

It will produce the following CSV file: +
    External ID,Name,Is a + Company,Related Company/External ID +
    person_1,Fabien,False,company_1 +
    person_2,Laurence,False,company_1 +
    person_3,Eric,False,company_2 +
    person_4,Ramsy,False,company_3

+

As you can see in this file, Fabien and Laurence + are working for the Bigees company (company_1) and + Eric is working for the Organi company. The relation + between persons and companies is done using the + External ID of the companies. We had to prefix the + "External ID" by the name of the table to avoid a + conflict of ID between persons and companies (person_1 + 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 + 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 + companies and then the persons.

+
+
+ + - - - - - - - - - - - - + + + - - - + + + + + + + + + @@ -70,7 +84,7 @@ - 0 + 0h00 - - + + + + + + + + + + + + diff --git a/addons/hr_attendance/wizard/hr_attendance_byweek.py b/addons/hr_attendance/wizard/hr_attendance_byweek.py index 454ba7764da..420773eaf13 100644 --- a/addons/hr_attendance/wizard/hr_attendance_byweek.py +++ b/addons/hr_attendance/wizard/hr_attendance_byweek.py @@ -18,7 +18,8 @@ # along with this program. If not, see . # ############################################################################## -import time +from datetime import datetime +from dateutil.relativedelta import relativedelta from osv import osv, fields @@ -30,8 +31,8 @@ class hr_attendance_byweek(osv.osv_memory): 'end_date': fields.date('Ending Date', required=True) } _defaults = { - 'init_date': lambda *a: time.strftime('%Y-%m-%d'), - 'end_date': lambda *a: time.strftime('%Y-%m-%d'), + 'init_date': (datetime.today() - relativedelta(days=datetime.date(datetime.today()).weekday())).strftime('%Y-%m-%d'), + 'end_date': (datetime.today() + relativedelta(days=6 - datetime.date(datetime.today()).weekday())).strftime('%Y-%m-%d'), } def print_report(self, cr, uid, ids, context=None): diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py index 439cf683d1b..c9961fa8a1d 100644 --- a/addons/hr_expense/hr_expense.py +++ b/addons/hr_expense/hr_expense.py @@ -233,7 +233,7 @@ hr_expense_expense() class product_product(osv.osv): _inherit = "product.product" _columns = { - 'hr_expense_ok': fields.boolean('Can be Expensed', help="Determines if the product can be visible in the list of product within a selection from an HR expense sheet line."), + 'hr_expense_ok': fields.boolean('Can be Expensed', help="Specify if the product can be selected in an HR expense line."), } def on_change_hr_expense_ok(self, cr, uid, id, hr_expense_ok): diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 7ccace1c536..e92679e0bad 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -46,7 +46,7 @@ - + diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index 049cb93ca1e..48867d3522f 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -235,7 +235,6 @@ class hr_applicant(base_stage, osv.Model): 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c), 'department_id': lambda s, cr, uid, c: s._get_default_department_id(cr, uid, c), - 'priority': lambda *a: '', 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'hr.applicant', context=c), 'color': 0, } diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py index 9ca2c58b6ff..a24208d6ce0 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py @@ -26,8 +26,9 @@ from tools.translate import _ class hr_timesheet_invoice_factor(osv.osv): _name = "hr_timesheet_invoice.factor" _description = "Invoice Rate" + _order = 'factor' _columns = { - 'name': fields.char('Internal name', size=128, required=True, translate=True), + 'name': fields.char('Internal Name', size=128, required=True, translate=True), 'customer_name': fields.char('Name', size=128, help="Label for the customer"), 'factor': fields.float('Discount (%)', required=True, help="Discount in percentage"), } @@ -122,7 +123,7 @@ class account_analytic_line(osv.osv): _inherit = 'account.analytic.line' _columns = { 'invoice_id': fields.many2one('account.invoice', 'Invoice', ondelete="set null"), - 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing', help="It allows to set the discount while making invoice"), + 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Invoiceable', help="It allows to set the discount while making invoice, keep empty if the activities should not be invoiced."), } def _default_journal(self, cr, uid, context=None): diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py index a9276ba6984..bf6790c6be3 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py @@ -70,7 +70,7 @@ class hr_timesheet_sheet(osv.osv): if not self.pool.get('hr.employee').browse(cr, uid, vals['employee_id']).product_id: raise osv.except_osv(_('Error!'), _('In order to create a timesheet for this employee, you must link the employee to a product, like \'Consultant\'.')) if not self.pool.get('hr.employee').browse(cr, uid, vals['employee_id']).journal_id: - raise osv.except_osv(_('Error!'), _('In order to create a timesheet for this employee, you must assign the employee to an analytic journal, like \'Timesheet\'.')) + raise osv.except_osv(_('Configuration Error!'), _('In order to create a timesheet for this employee, you must assign an analytic journal to the employee, like \'Timesheet Journal\'.')) return super(hr_timesheet_sheet, self).create(cr, uid, vals, *args, **argv) def write(self, cr, uid, ids, vals, *args, **argv): @@ -83,7 +83,7 @@ class hr_timesheet_sheet(osv.osv): if not self.pool.get('hr.employee').browse(cr, uid, vals['employee_id']).product_id: raise osv.except_osv(_('Error!'), _('In order to create a timesheet for this employee, you must link the employee to a product.')) if not self.pool.get('hr.employee').browse(cr, uid, vals['employee_id']).journal_id: - raise osv.except_osv(_('Error!'), _('In order to create a timesheet for this employee, you must assign the employee to an analytic journal.')) + raise osv.except_osv(_('Configuration Error!'), _('In order to create a timesheet for this employee, you must assign an analytic journal to the employee, like \'Timesheet Journal\'.')) return super(hr_timesheet_sheet, self).write(cr, uid, ids, vals, *args, **argv) def button_confirm(self, cr, uid, ids, context=None): diff --git a/addons/hr_timesheet_sheet/i18n/nl.po b/addons/hr_timesheet_sheet/i18n/nl.po index f67cdd77f5a..ad632dfad12 100644 --- a/addons/hr_timesheet_sheet/i18n/nl.po +++ b/addons/hr_timesheet_sheet/i18n/nl.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-02-08 01:37+0100\n" -"PO-Revision-Date: 2012-02-20 09:55+0000\n" +"PO-Revision-Date: 2012-11-02 10:13+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-10-30 05:14+0000\n" -"X-Generator: Launchpad (build 16206)\n" +"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n" +"X-Generator: Launchpad (build 16218)\n" #. module: hr_timesheet_sheet #: field:hr.analytic.timesheet,sheet_id:0 field:hr.attendance,sheet_id:0 @@ -1008,7 +1008,7 @@ msgstr "" #. module: hr_timesheet_sheet #: view:hr_timesheet_sheet.sheet:0 msgid "Submit to Manager" -msgstr "" +msgstr "Aanbieden aan manager" #. module: hr_timesheet_sheet #: field:hr_timesheet_sheet.sheet,account_ids:0 diff --git a/addons/hr_timesheet_sheet/i18n/zh_CN.po b/addons/hr_timesheet_sheet/i18n/zh_CN.po index 740c5a57c45..00e890dae9d 100644 --- a/addons/hr_timesheet_sheet/i18n/zh_CN.po +++ b/addons/hr_timesheet_sheet/i18n/zh_CN.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-02 05:09+0000\n" +"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n" "X-Generator: Launchpad (build 16218)\n" #. module: hr_timesheet_sheet diff --git a/addons/l10n_ar/i18n/zh_CN.po b/addons/l10n_ar/i18n/zh_CN.po new file mode 100644 index 00000000000..1190e4fa511 --- /dev/null +++ b/addons/l10n_ar/i18n/zh_CN.po @@ -0,0 +1,46 @@ +# Chinese (Simplified) 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: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2012-11-02 15:23+0000\n" +"Last-Translator: 杨清云 <13836962@qq.com>\n" +"Language-Team: Chinese (Simplified) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n" +"X-Generator: Launchpad (build 16218)\n" + +#. module: l10n_ar +#: model:ir.module.module,description:l10n_ar.module_meta_information +msgid "" +"\n" +" Argentinian Accounting : chart of Account\n" +" " +msgstr "" +"\n" +" 阿根廷会计:会计科目表\n" +" " + +#. module: l10n_ar +#: model:ir.module.module,shortdesc:l10n_ar.module_meta_information +msgid "Argentinian Chart of Account" +msgstr "阿根廷科目表" + +#. module: l10n_ar +#: model:ir.actions.todo,note:l10n_ar.config_call_account_template_in_minimal +msgid "" +"Generate Chart of Accounts from a Chart Template. You will be asked to pass " +"the name of the company, the chart template to follow, the no. of digits to " +"generate the code for your accounts and Bank account, currency to create " +"Journals. Thus,the pure copy of chart Template is generated.\n" +"\tThis is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" diff --git a/addons/l10n_be_coda/i18n/zh_CN.po b/addons/l10n_be_coda/i18n/zh_CN.po index 41ea8825e5b..c18ff96e735 100644 --- a/addons/l10n_be_coda/i18n/zh_CN.po +++ b/addons/l10n_be_coda/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-04-21 06:27+0000\n" +"PO-Revision-Date: 2012-11-03 03:35+0000\n" "Last-Translator: chiachen \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-10-30 05:25+0000\n" -"X-Generator: Launchpad (build 16206)\n" +"X-Launchpad-Export-Date: 2012-11-04 04:55+0000\n" +"X-Generator: Launchpad (build 16218)\n" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_09_21 @@ -25,27 +25,27 @@ msgstr "信用卡取现" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_412 msgid "Advice of expiry charges" -msgstr "" +msgstr "费用逾期建议" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_09_11 msgid "Your purchase of luncheon vouchers" -msgstr "" +msgstr "你购买的午餐券" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_11_05 msgid "Partial payment subscription" -msgstr "" +msgstr "分期付款认购" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_01_54 msgid "Unexecutable transfer order" -msgstr "" +msgstr "未执行的转帐" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_01_02 msgid "Individual transfer order initiated by the bank" -msgstr "" +msgstr "银行初始化个人转帐" #. module: account_coda #: model:account.coda.trans.code,comment:account_coda.actcc_80_21 diff --git a/addons/l10n_cl/i18n/zh_CN.po b/addons/l10n_cl/i18n/zh_CN.po new file mode 100644 index 00000000000..179d0649d3d --- /dev/null +++ b/addons/l10n_cl/i18n/zh_CN.po @@ -0,0 +1,43 @@ +# Chinese (Simplified) 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: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2012-11-02 14:51+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Chinese (Simplified) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n" +"X-Generator: Launchpad (build 16218)\n" + +#. module: l10n_cl +#: model:ir.module.module,description:l10n_cl.module_meta_information +msgid "" +"\n" +" Chilean Accounting : chart of Account\n" +" " +msgstr "" + +#. module: l10n_cl +#: model:ir.module.module,shortdesc:l10n_cl.module_meta_information +msgid "Chilean Chart of Account" +msgstr "" + +#. module: l10n_cl +#: model:ir.actions.todo,note:l10n_cl.config_call_account_template_in_minimal +msgid "" +"Generate Chart of Accounts from a Chart Template. You will be asked to pass " +"the name of the company, the chart template to follow, the no. of digits to " +"generate the code for your accounts and Bank account, currency to create " +"Journals. Thus,the pure copy of chart Template is generated.\n" +"\tThis is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" diff --git a/addons/l10n_ro/partner_view.xml b/addons/l10n_ro/partner_view.xml index 448f9b49639..b3549e5f5a8 100644 --- a/addons/l10n_ro/partner_view.xml +++ b/addons/l10n_ro/partner_view.xml @@ -6,9 +6,9 @@ res.partner - + - + diff --git a/addons/l10n_ve/i18n/de.po b/addons/l10n_ve/i18n/de.po index a5f8acd67e0..6da2f904bc9 100644 --- a/addons/l10n_ve/i18n/de.po +++ b/addons/l10n_ve/i18n/de.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-01 04:36+0000\n" +"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n" "X-Generator: Launchpad (build 16218)\n" #. module: l10n_ve diff --git a/addons/mail/data/mail_data.xml b/addons/mail/data/mail_data.xml index 522cbe8c7a7..9b91c519348 100644 --- a/addons/mail/data/mail_data.xml +++ b/addons/mail/data/mail_data.xml @@ -28,7 +28,7 @@ - comment + Discussions diff --git a/addons/mail/i18n/ru.po b/addons/mail/i18n/ru.po index e608d6dbc1d..e35c40f94fe 100644 --- a/addons/mail/i18n/ru.po +++ b/addons/mail/i18n/ru.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-10-31 04:40+0000\n" +"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n" "X-Generator: Launchpad (build 16218)\n" #. module: mail diff --git a/addons/mail/mail_message_subtype.py b/addons/mail/mail_message_subtype.py index 32b20d9c11e..e37e20259f8 100644 --- a/addons/mail/mail_message_subtype.py +++ b/addons/mail/mail_message_subtype.py @@ -31,14 +31,15 @@ class mail_message_subtype(osv.osv): _description = 'mail_message_subtype' _columns = { 'name': fields.char('Message Type', required=True, translate=True, - help='Message subtype, gives a more precise type on the message, '\ + help='Message subtype gives a more precise type on the message, '\ 'especially for system notifications. For example, it can be '\ 'a notification related to a new record (New), or to a stage '\ 'change in a process (Stage change). Message subtypes allow to '\ 'precisely tune the notifications the user want to receive on its wall.'), - 'res_model': fields.char('Model', help="link subtype to model"), + 'res_model': fields.char('Model', + help="Related model of the subtype. If False, this subtype exists for all models."), 'default': fields.boolean('Default', - help="When subscribing to the document, this subtype will be checked by default."), + help="Checked by default when subscribing."), } _defaults = { 'default': True, diff --git a/addons/mail/tests/test_mail.py b/addons/mail/tests/test_mail.py index 85cfdca578c..6af0aba633c 100644 --- a/addons/mail/tests/test_mail.py +++ b/addons/mail/tests/test_mail.py @@ -334,8 +334,8 @@ class test_mail(TestMailMockups): # ---------------------------------------- subtype_data = group_pigs._get_subscription_data(None, None)[group_pigs.id]['message_subtype_data'] - self.assertEqual(set(subtype_data.keys()), set(['comment', 'mt_mg_def', 'mt_all_def', 'mt_mg_nodef', 'mt_all_nodef']), 'mail.group available subtypes incorrect') - self.assertFalse(subtype_data['comment']['followed'], 'Admin should not follow comments in pigs') + self.assertEqual(set(subtype_data.keys()), set(['Discussions', 'mt_mg_def', 'mt_all_def', 'mt_mg_nodef', 'mt_all_nodef']), 'mail.group available subtypes incorrect') + self.assertFalse(subtype_data['Discussions']['followed'], 'Admin should not follow Discussions in pigs') self.assertTrue(subtype_data['mt_mg_nodef']['followed'], 'Admin should follow mt_mg_nodef in pigs') self.assertTrue(subtype_data['mt_all_nodef']['followed'], 'Admin should follow mt_all_nodef in pigs') diff --git a/addons/mail/wizard/mail_compose_message_view.xml b/addons/mail/wizard/mail_compose_message_view.xml index 1f00ed419a2..5e571eb4338 100644 --- a/addons/mail/wizard/mail_compose_message_view.xml +++ b/addons/mail/wizard/mail_compose_message_view.xml @@ -46,6 +46,7 @@ res_model="mail.compose.message" src_model="res.partner" view_mode="form" + multi="True" target="new" key2="client_action_multi" id="base.action_partner_mass_mail" diff --git a/addons/membership/membership.py b/addons/membership/membership.py index 5e3816419f8..d39bdb6d903 100644 --- a/addons/membership/membership.py +++ b/addons/membership/membership.py @@ -317,7 +317,7 @@ class Partner(osv.osv): _columns = { 'associate_member': fields.many2one('res.partner', 'Associate Member',help="A member with whom you want to associate your membership.It will consider the membership state of the associated member."), 'member_lines': fields.one2many('membership.membership_line', 'partner', 'Membership'), - 'free_member': fields.boolean('Free Member', help = "Select if you want to give membership free of cost."), + 'free_member': fields.boolean('Free Member', help = "Select if you want to give free membership."), 'membership_amount': fields.float( 'Membership Amount', digits=(16, 2), help = 'The price negotiated by the partner'), @@ -330,12 +330,12 @@ class Partner(osv.osv): 'membership.membership_line': (_get_partner_id, ['state'], 10), 'res.partner': (_get_partners, ['free_member', 'membership_state', 'associate_member'], 10) }, help="""It indicates the membership state. - -Non Member: A member who has not applied for any membership. + -Non Member: A partner who has not applied for any membership. -Cancelled Member: A member who has cancelled his membership. -Old Member: A member whose membership date has expired. -Waiting Member: A member who has applied for the membership and whose invoice is going to be created. -Invoiced Member: A member whose invoice has been created. - -Paid Member: A member who has paid the membership amount."""), + -Paying member: A member who has paid the membership fee."""), 'membership_start': fields.function( _membership_date, multi = 'membeship_start', string = 'Membership Start Date', type = 'date', @@ -466,7 +466,7 @@ class Product(osv.osv): '''Product''' _inherit = 'product.product' _columns = { - 'membership': fields.boolean('Membership', help='Select if a product is a membership product.'), + 'membership': fields.boolean('Membership', help='Check if the product is eligible for membership.'), 'membership_date_from': fields.date('Date from', help='Date from which membership becomes active.'), 'membership_date_to': fields.date('Date to', help='Date until which membership remains active.'), } diff --git a/addons/membership/wizard/membership_invoice_view.xml b/addons/membership/wizard/membership_invoice_view.xml index bfb687d893c..c629f747b2f 100644 --- a/addons/membership/wizard/membership_invoice_view.xml +++ b/addons/membership/wizard/membership_invoice_view.xml @@ -32,7 +32,7 @@ diff --git a/addons/mrp/i18n/sl.po b/addons/mrp/i18n/sl.po index 6cd8453af27..83d80822eb7 100644 --- a/addons/mrp/i18n/sl.po +++ b/addons/mrp/i18n/sl.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-02 05:09+0000\n" +"X-Launchpad-Export-Date: 2012-11-03 05:03+0000\n" "X-Generator: Launchpad (build 16218)\n" #. module: mrp diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index aabc3d9dc63..a34d94a584c 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -751,7 +751,7 @@ - +
MonTueWedThuFriSatSunTot
Week:from to From to MonTueWedThuFriSatSunTotal
Worked hours @@ -78,7 +92,7 @@ - 0 + 0h00 @@ -86,7 +100,7 @@ - 0 + 0h00 @@ -94,7 +108,7 @@ - 0 + 0h00 @@ -102,7 +116,7 @@ - 0 + 0h00 @@ -110,7 +124,7 @@ - 0 + 0h00 @@ -118,14 +132,24 @@ - 0 + 0h00