diff --git a/addons/account/account.py b/addons/account/account.py index cbba0237c78..fa30b20f2ca 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -125,7 +125,7 @@ class account_payment_term_line(osv.osv): return True _constraints = [ - (_check_percent, 'Percentages for Payment Term Line must be between 0 and 1, Example: 0.02 for 2% ', ['value_amount']), + (_check_percent, 'Percentages for Payment Term Line must be between 0 and 1, Example: 0.02 for 2%.', ['value_amount']), ] account_payment_term_line() @@ -136,7 +136,7 @@ class account_account_type(osv.osv): def _get_current_report_type(self, cr, uid, ids, name, arg, context=None): obj_data = self.pool.get('ir.model.data') - obj_financial_report = self.pool.get('account.financial.report') + obj_financial_report = self.pool.get('account.financial.report') res = {} financial_report_ref = { 'asset': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_assets0')[1], context=context), @@ -154,7 +154,7 @@ class account_account_type(osv.osv): def _save_report_type(self, cr, uid, account_type_id, field_name, field_value, arg, context=None): obj_data = self.pool.get('ir.model.data') - obj_financial_report = self.pool.get('account.financial.report') + obj_financial_report = self.pool.get('account.financial.report') #unlink if it exists somewhere in the financial reports related to BS or PL financial_report_ref = { 'asset': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_assets0')[1], context=context), @@ -179,7 +179,7 @@ class account_account_type(osv.osv): 'Balance' will generally be used for cash accounts. 'Detail' will copy each existing journal item of the previous year, even the reconciled ones. 'Unreconciled' will copy only the journal items that were unreconciled on the first day of the new fiscal year."""), - 'report_type': fields.function(_get_current_report_type, fnct_inv=_save_report_type, type='selection', string='P&L / BS Category', + 'report_type': fields.function(_get_current_report_type, fnct_inv=_save_report_type, type='selection', string='P&L / BS Category', selection= [('none','/'), ('income', _('Profit & Loss (Income account)')), ('expense', _('Profit & Loss (Expense account)')), @@ -404,12 +404,12 @@ class account_account(osv.osv): journal_obj = self.pool.get('account.journal') jids = journal_obj.search(cr, uid, [('type','=','situation'),('centralisation','=',1),('company_id','=',account.company_id.id)], context=context) if not jids: - raise osv.except_osv(_('Error!'),_("You need an Opening journal with centralisation checked to set the initial balance!")) + raise osv.except_osv(_('Error!'),_("You need an Opening journal with centralisation checked to set the initial balance.")) period_obj = self.pool.get('account.period') pids = period_obj.search(cr, uid, [('special','=',True),('company_id','=',account.company_id.id)], context=context) if not pids: - raise osv.except_osv(_('Error!'),_("No opening/closing period defined, please create one to set the initial balance!")) + raise osv.except_osv(_('Error!'),_("There is no opening/closing period defined, please create one to set the initial balance.")) move_obj = self.pool.get('account.move.line') move_id = move_obj.search(cr, uid, [ @@ -426,7 +426,7 @@ class account_account(osv.osv): }, context=context) else: if diff<0.0: - raise osv.except_osv(_('Error!'),_("Unable to adapt the initial balance (negative value)!")) + raise osv.except_osv(_('Error!'),_("Unable to adapt the initial balance (negative value).")) nameinv = (name=='credit' and 'debit') or 'credit' move_id = move_obj.create(cr, uid, { 'name': _('Opening Balance'), @@ -541,9 +541,9 @@ class account_account(osv.osv): return True _constraints = [ - (_check_recursion, 'Error ! You can not create recursive accounts.', ['parent_id']), - (_check_type, 'Configuration Error! \nYou can not define children to an account with internal type different of "View"! ', ['type']), - (_check_account_type, 'Configuration Error! \nYou can not select an account type with a deferral method different of "Unreconciled" for accounts with internal type "Payable/Receivable"! ', ['user_type','type']), + (_check_recursion, 'Error!\nYou cannot create recursive accounts.', ['parent_id']), + (_check_type, 'Configuration Error!\nYou cannot define children to an account with internal type different of "View".', ['type']), + (_check_account_type, 'Configuration Error!\nYou cannot select an account type with a deferral method different of "Unreconciled" for accounts with internal type "Payable/Receivable".', ['user_type','type']), ] _sql_constraints = [ ('code_company_uniq', 'unique (code,company_id)', 'The code of the account must be unique per company !') @@ -619,14 +619,14 @@ class account_account(osv.osv): if line_obj.search(cr, uid, [('account_id', 'in', account_ids)]): if method == 'write': - raise osv.except_osv(_('Error !'), _('You can not desactivate an account that contains some journal items.')) + raise osv.except_osv(_('Error!'), _('You cannot deactivate an account that contains journal items.')) elif method == 'unlink': - raise osv.except_osv(_('Error !'), _('You can not remove an account containing journal items.')) + raise osv.except_osv(_('Error!'), _('You cannot remove an account that contains journal items.')) #Checking whether the account is set as a property to any Partner or not value = 'account.account,' + str(ids[0]) partner_prop_acc = self.pool.get('ir.property').search(cr, uid, [('value_reference','=',value)], context=context) if partner_prop_acc: - raise osv.except_osv(_('Warning !'), _('You can not remove/desactivate an account which is set on a customer or supplier.')) + raise osv.except_osv(_('Warning!'), _('You cannot remove/deactivate an account which is set on a customer or supplier.')) return True def _check_allow_type_change(self, cr, uid, ids, new_type, context=None): @@ -639,10 +639,10 @@ class account_account(osv.osv): if line_obj.search(cr, uid, [('account_id', 'in', account_ids)]): #Check for 'Closed' type if old_type == 'closed' and new_type !='closed': - raise osv.except_osv(_('Warning !'), _("You cannot change the type of account from 'Closed' to any other type which contains journal items!")) + raise osv.except_osv(_('Warning!'), _("You cannot change the type of account from 'Closed' to any other type which contains journal items!")) #Check for change From group1 to group2 and vice versa if (old_type in group1 and new_type in group2) or (old_type in group2 and new_type in group1): - raise osv.except_osv(_('Warning !'), _("You cannot change the type of account from '%s' to '%s' type as it contains journal items!") % (old_type,new_type,)) + raise osv.except_osv(_('Warning!'), _("You cannot change the type of account from '%s' to '%s' type as it contains journal items!") % (old_type,new_type,)) return True def write(self, cr, uid, ids, vals, context=None): @@ -661,7 +661,7 @@ class account_account(osv.osv): # Allow the write if the value is the same for i in [i['company_id'][0] for i in self.read(cr,uid,ids,['company_id'])]: if vals['company_id']!=i: - raise osv.except_osv(_('Warning !'), _('You cannot change the owner company of an account that already contains journal items.')) + raise osv.except_osv(_('Warning!'), _('You cannot change the owner company of an account that already contains journal items.')) if 'active' in vals and not vals['active']: self._check_moves(cr, uid, ids, "write", context=context) if 'type' in vals.keys(): @@ -730,7 +730,7 @@ class account_journal(osv.osv): 'view_id': fields.many2one('account.journal.view', 'Display Mode', required=True, help="Gives the view used when writing or browsing entries in this journal. The view tells OpenERP which fields should be visible, required or readonly and in which order. You can create your own view for a faster encoding in each journal."), 'default_credit_account_id': fields.many2one('account.account', 'Default Credit Account', domain="[('type','!=','view')]", help="It acts as a default account for credit amount"), 'default_debit_account_id': fields.many2one('account.account', 'Default Debit Account', domain="[('type','!=','view')]", help="It acts as a default account for debit amount"), - 'centralisation': fields.boolean('Centralised counterpart', help="Check this box to determine that each entry of this journal won't create a new counterpart but will share the same counterpart. This is used in fiscal year closing."), + 'centralisation': fields.boolean('Centralised Counterpart', help="Check this box to determine that each entry of this journal won't create a new counterpart but will share the same counterpart. This is used in fiscal year closing."), 'update_posted': fields.boolean('Allow Cancelling Entries', help="Check this box if you want to allow the cancellation the entries related to this journal or of the invoice related to this journal"), 'group_invoice_lines': fields.boolean('Group Invoice Lines', help="If this box is checked, the system will try to group the accounting lines when generating them from invoices."), 'sequence_id': fields.many2one('ir.sequence', 'Entry Sequence', help="This field contains the information related to the numbering of the journal entries of this journal.", required=True), @@ -768,7 +768,7 @@ class account_journal(osv.osv): return True _constraints = [ - (_check_currency, 'Configuration error! The currency chosen should be shared by the default accounts too.', ['currency','default_debit_account_id','default_credit_account_id']), + (_check_currency, 'Configuration error!\nThe currency chosen should be shared by the default accounts too.', ['currency','default_debit_account_id','default_credit_account_id']), ] def copy(self, cr, uid, id, default={}, context=None, done_list=[], local=False): @@ -790,7 +790,7 @@ class account_journal(osv.osv): if 'company_id' in vals and journal.company_id.id != vals['company_id']: move_lines = self.pool.get('account.move.line').search(cr, uid, [('journal_id', 'in', ids)]) if move_lines: - raise osv.except_osv(_('Warning !'), _('You can not modify the company of this journal as its related record exist in journal items')) + raise osv.except_osv(_('Warning!'), _('This journal already contains items, therefore you cannot modify its company field.')) return super(account_journal, self).write(cr, uid, ids, vals, context=context) def create_sequence(self, cr, uid, vals, context=None): @@ -915,7 +915,7 @@ class account_fiscalyear(osv.osv): return True _constraints = [ - (_check_duration, 'Error! The start date of the fiscal year must be before his end date.', ['date_start','date_stop']) + (_check_duration, 'Error!\nThe start date of a fiscal year must precede its end date.', ['date_start','date_stop']) ] def create_period3(self, cr, uid, ids, context=None): @@ -966,7 +966,7 @@ class account_fiscalyear(osv.osv): ids = self.search(cr, uid, args, context=context) if not ids: if exception: - raise osv.except_osv(_('Error !'), _('No fiscal year defined for this date !\nPlease create one from the configuration of the accounting menu.')) + raise osv.except_osv(_('Error!'), _('There is no fiscal year defined for this date.\nPlease create one from the configuration of the accounting menu.')) else: return [] return ids @@ -1032,8 +1032,8 @@ class account_period(osv.osv): return True _constraints = [ - (_check_duration, 'Error ! The duration of the Period(s) is/are invalid. ', ['date_stop']), - (_check_year_limit, 'Invalid period ! Some periods overlap or the date period is not in the scope of the fiscal year. ', ['date_stop']) + (_check_duration, 'Error!\nThe duration of the Period(s) is/are invalid.', ['date_stop']), + (_check_year_limit, 'Error!\nThe period is invalid. Either some periods are overlapping or the period\'s dates are not matching the scope of the fiscal year.', ['date_stop']) ] def next(self, cr, uid, period, step, context=None): @@ -1055,7 +1055,7 @@ class account_period(osv.osv): args.append(('company_id', '=', company_id)) ids = self.search(cr, uid, args, context=context) if not ids: - raise osv.except_osv(_('Error !'), _('No period defined for this date: %s !\nPlease create one.')%dt) + raise osv.except_osv(_('Error!'), _('There is no period defined for this date: %s.\nPlease create one.')%dt) return ids def action_draft(self, cr, uid, ids, *args): @@ -1080,7 +1080,7 @@ class account_period(osv.osv): if 'company_id' in vals: move_lines = self.pool.get('account.move.line').search(cr, uid, [('period_id', 'in', ids)]) if move_lines: - raise osv.except_osv(_('Warning !'), _('You can not modify company of this period as some journal items exists.')) + raise osv.except_osv(_('Warning!'), _('This journal already contains items for this period, therefore you cannot modify its company field.')) return super(account_period, self).write(cr, uid, ids, vals, context=context) def build_ctx_periods(self, cr, uid, period_from_id, period_to_id): @@ -1093,9 +1093,9 @@ class account_period(osv.osv): period_date_stop = period_to.date_stop company2_id = period_to.company_id.id if company1_id != company2_id: - raise osv.except_osv(_('Error'), _('You should have chosen periods that belongs to the same company')) + raise osv.except_osv(_('Error!'), _('You should choose the periods that belong to the same company.')) if period_date_start > period_date_stop: - raise osv.except_osv(_('Error'), _('Start period should be smaller then End period')) + raise osv.except_osv(_('Error!'), _('Start period should precede then end period.')) #for period from = january, we want to exclude the opening period (but it has same date_from, so we have to check if period_from is special or not to include that clause or not in the search). if period_from.special: return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('company_id', '=', company1_id)]) @@ -1134,7 +1134,7 @@ class account_journal_period(osv.osv): cr.execute('select * from account_move_line where journal_id=%s and period_id=%s limit 1', (obj.journal_id.id, obj.period_id.id)) res = cr.fetchall() if res: - raise osv.except_osv(_('Error !'), _('You can not modify/delete a journal with entries for this period !')) + raise osv.except_osv(_('Error!'), _('You cannot modify/delete a journal with entries for this period.')) return True def write(self, cr, uid, ids, vals, context=None): @@ -1303,7 +1303,7 @@ class account_move(osv.osv): _constraints = [ (_check_centralisation, - 'You can not create more than one move per period on centralized journal', + 'You cannot create more than one move per period on a centralized journal.', ['journal_id']), ] @@ -1314,7 +1314,7 @@ class account_move(osv.osv): valid_moves = self.validate(cr, uid, ids, context) if not valid_moves: - raise osv.except_osv(_('Integrity Error !'), _('You can not validate a non-balanced entry !\nMake sure you have configured payment terms properly !\nThe latest payment term line should be of the type "Balance" !')) + raise osv.except_osv(_('Error!'), _('You cannot validate a non-balanced entry.\nMake sure you have configured payment terms properly.\nThe latest payment term line should be of the "Balance" type.')) obj_sequence = self.pool.get('ir.sequence') for move in self.browse(cr, uid, valid_moves, context=context): if move.name =='/': @@ -1328,7 +1328,7 @@ class account_move(osv.osv): c = {'fiscalyear_id': move.period_id.fiscalyear_id.id} new_name = obj_sequence.next_by_id(cr, uid, journal.sequence_id.id, c) else: - raise osv.except_osv(_('Error'), _('No sequence defined on the journal !')) + raise osv.except_osv(_('Error!'), _('Please define a sequence on the journal.')) if new_name: self.write(cr, uid, [move.id], {'name':new_name}) @@ -1351,14 +1351,14 @@ class account_move(osv.osv): if not top_common: top_common = top_account elif top_account.id != top_common.id: - raise osv.except_osv(_('Error !'), - _('You cannot validate this journal entry because account "%s" does not belong to chart of accounts "%s"!') % (account.name, top_common.name)) + raise osv.except_osv(_('Error!'), + _('You cannot validate this journal entry because account "%s" does not belong to chart of accounts "%s".') % (account.name, top_common.name)) return self.post(cursor, user, ids, context=context) def button_cancel(self, cr, uid, ids, context=None): for line in self.browse(cr, uid, ids, context=context): if not line.journal_id.update_posted: - raise osv.except_osv(_('Error !'), _('You can not modify a posted entry of this journal !\nYou should set the journal to allow cancelling entries if you want to do that.')) + raise osv.except_osv(_('Error!'), _('You cannot modify a posted entry of this journal.\nFirst you should set the journal to allow cancelling entries.')) if ids: cr.execute('UPDATE account_move '\ 'SET state=%s '\ @@ -1445,8 +1445,8 @@ class account_move(osv.osv): obj_move_line = self.pool.get('account.move.line') for move in self.browse(cr, uid, ids, context=context): if move['state'] != 'draft': - raise osv.except_osv(_('UserError'), - _('You can not delete a posted journal entry "%s"!') % \ + raise osv.except_osv(_('User Error!'), + _('You cannot delete a posted journal entry "%s".') % \ move['name']) line_ids = map(lambda x: x.id, move.line_id) context['journal_id'] = move.journal_id.id @@ -1474,16 +1474,16 @@ class account_move(osv.osv): account_id = move.journal_id.default_debit_account_id.id mode2 = 'debit' if not account_id: - raise osv.except_osv(_('UserError'), - _('There is no default default debit account defined \n' \ - 'on journal "%s"') % move.journal_id.name) + raise osv.except_osv(_('User Error!'), + _('There is no default debit account defined \n' \ + 'on journal "%s".') % move.journal_id.name) else: account_id = move.journal_id.default_credit_account_id.id mode2 = 'credit' if not account_id: - raise osv.except_osv(_('UserError'), - _('There is no default default credit account defined \n' \ - 'on journal "%s"') % move.journal_id.name) + raise osv.except_osv(_('User Error!'), + _('There is no default credit account defined \n' \ + 'on journal "%s".') % move.journal_id.name) # find the first line of this move with the current mode # or create it if it doesn't exist @@ -1577,11 +1577,11 @@ class account_move(osv.osv): if not company_id: company_id = line.account_id.company_id.id if not company_id == line.account_id.company_id.id: - raise osv.except_osv(_('Error'), _("Couldn't create move between different companies")) + raise osv.except_osv(_('Error!'), _("Cannot create moves for different companies.")) if line.account_id.currency_id and line.currency_id: if line.account_id.currency_id.id != line.currency_id.id and (line.account_id.currency_id.id != line.account_id.company_id.currency_id.id): - raise osv.except_osv(_('Error'), _("""Couldn't create move with currency different from the secondary currency of the account "%s - %s". Clear the secondary currency field of the account definition if you want to accept all currencies.""") % (line.account_id.code, line.account_id.name)) + raise osv.except_osv(_('Error!'), _("""Cannot create move with currency different from ..""") % (line.account_id.code, line.account_id.name)) if abs(amount) < 10 ** -4: # If the move is balanced @@ -1833,7 +1833,7 @@ class account_tax_code(osv.osv): _check_recursion = check_cycle _constraints = [ - (_check_recursion, 'Error ! You can not create recursive accounts.', ['parent_id']) + (_check_recursion, 'Error!\nYou cannot create recursive accounts.', ['parent_id']) ] _order = 'code' @@ -2118,7 +2118,7 @@ class account_tax(osv.osv): } def compute(self, cr, uid, taxes, price_unit, quantity, product=None, partner=None): - _logger.warning("Deprecated, use compute_all(...)['taxes'] instead of compute(...) to manage prices with tax included") + _logger.warning("Deprecated, use compute_all(...)['taxes'] instead of compute(...) to manage prices with tax included.") return self._compute(cr, uid, taxes, price_unit, quantity, product, partner) def _compute(self, cr, uid, taxes, price_unit, quantity, product=None, partner=None, precision=None): @@ -2307,7 +2307,7 @@ class account_model(osv.osv): date_maturity = context.get('date',time.strftime('%Y-%m-%d')) if line.date_maturity == 'partner': if not line.partner_id: - raise osv.except_osv(_('Error !'), _("Maturity date of entry line generated by model line '%s' of model '%s' is based on partner payment term!" \ + raise osv.except_osv(_('Error!'), _("Maturity date of entry line generated by model line '%s' of model '%s' is based on partner payment term!" \ "\nPlease define partner on it!")%(line.name, model.name)) if line.partner_id.property_payment_term: payment_term_id = line.partner_id.property_payment_term.id @@ -2521,8 +2521,8 @@ class account_account_template(osv.osv): _check_recursion = check_cycle _constraints = [ - (_check_recursion, 'Error ! You can not create recursive account templates.', ['parent_id']), - (_check_type, 'Configuration Error!\nYou can not define children to an account with internal type different of "View"! ', ['type']), + (_check_recursion, 'Error!\nYou cannot create recursive account templates.', ['parent_id']), + (_check_type, 'Configuration Error!\nYou cannot define children to an account that has internal type other than "View".', ['type']), ] @@ -2623,7 +2623,7 @@ class account_add_tmpl_wizard(osv.osv_memory): ptids = tmpl_obj.read(cr, uid, [tids[0]['parent_id'][0]], ['code']) res = None if not ptids or not ptids[0]['code']: - raise osv.except_osv(_('Error !'), _('I can not locate a parent code for the template account!')) + raise osv.except_osv(_('Error!'), _('There is no parent code for the template account.')) res = acc_obj.search(cr, uid, [('code','=',ptids[0]['code'])]) return res and res[0] or False @@ -2729,7 +2729,7 @@ class account_tax_code_template(osv.osv): _check_recursion = check_cycle _constraints = [ - (_check_recursion, 'Error ! You can not create recursive Tax Codes.', ['parent_id']) + (_check_recursion, 'Error!\nYou cannot create recursive Tax Codes.', ['parent_id']) ] _order = 'code,name' account_tax_code_template() @@ -2742,7 +2742,7 @@ class account_chart_template(osv.osv): _columns={ 'name': fields.char('Name', size=64, required=True), 'parent_id': fields.many2one('account.chart.template', 'Parent Chart Template'), - 'code_digits': fields.integer('# of Digits', required=True, help="No. of Digits to use for account code"), + 'code_digits': fields.integer('# of Digits', required=True, help="No. of Digits to use for account code"), 'visible': fields.boolean('Can be Visible?', help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from templates, this is useful when you want to generate accounts of this template only when loading its child template."), 'complete_tax_set': fields.boolean('Complete Set of Taxes', help='This boolean helps you to choose if you want to propose to the user to encode the sale and purchase rates or choose from list of taxes. This last choice assumes that the set of tax defined on this template is complete'), 'account_root_id': fields.many2one('account.account.template', 'Root Account', domain=[('parent_id','=',False)]), @@ -3026,7 +3026,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): return res def default_get(self, cr, uid, fields, context=None): - res = super(wizard_multi_charts_accounts, self).default_get(cr, uid, fields, context=context) + res = super(wizard_multi_charts_accounts, self).default_get(cr, uid, fields, context=context) tax_templ_obj = self.pool.get('account.tax.template') if 'bank_accounts_id' in fields: @@ -3102,7 +3102,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): # Get the analytic journal data = False if journal_type in ('sale', 'sale_refund'): - data = obj_data.get_object_reference(cr, uid, 'account', 'analytic_journal_sale') + data = obj_data.get_object_reference(cr, uid, 'account', 'analytic_journal_sale') elif journal_type in ('purchase', 'purchase_refund'): pass elif journal_type == 'general': @@ -3128,7 +3128,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): if journal_type in ('general', 'situation'): data = obj_data.get_object_reference(cr, uid, 'account', 'account_journal_view') elif journal_type in ('sale_refund', 'purchase_refund'): - data = obj_data.get_object_reference(cr, uid, 'account', 'account_sp_refund_journal_view') + data = obj_data.get_object_reference(cr, uid, 'account', 'account_sp_refund_journal_view') else: data = obj_data.get_object_reference(cr, uid, 'account', 'account_sp_journal_view') return data and data[1] or False @@ -3357,7 +3357,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): def _prepare_bank_journal(self, cr, uid, line, current_num, default_account_id, company_id, context=None): ''' - This function prepares the value to use for the creation of a bank journal created through the wizard of + This function prepares the value to use for the creation of a bank journal created through the wizard of generating COA from templates. :param line: dictionary containing the values encoded by the user related to his bank account @@ -3375,9 +3375,9 @@ class wizard_multi_charts_accounts(osv.osv_memory): tmp = obj_data.get_object_reference(cr, uid, 'account', 'account_journal_bank_view') view_id_cash = tmp and tmp[1] or False - # we need to loop again to find next number for journal code + # we need to loop again to find next number for journal code # because we can't rely on the value current_num as, - # its possible that we already have bank journals created (e.g. by the creation of res.partner.bank) + # its possible that we already have bank journals created (e.g. by the creation of res.partner.bank) # and the next number for account code might have been already used before for journal for num in xrange(current_num, 100): # journal_code has a maximal size of 5, hence we can enforce the boundary num < 100 @@ -3386,7 +3386,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): if not ids: break else: - raise osv.except_osv(_('Error'), _('Cannot generate an unused journal code.')) + raise osv.except_osv(_('Error!'), _('Cannot generate an unused journal code.')) vals = { 'name': line['acc_name'], @@ -3464,7 +3464,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): journal_data.append(vals) ref_acc_bank = obj_wizard.chart_template_id.bank_account_view_id if journal_data and not ref_acc_bank.code: - raise osv.except_osv(_('Configuration Error !'), _('The bank account defined on the selected chart of accounts hasn\'t a code.')) + raise osv.except_osv(_('Configuration Error!'), _('You have to set a code for the bank account defined on the selected chart of accounts.')) current_num = 1 for line in journal_data: diff --git a/addons/account/account_analytic_line.py b/addons/account/account_analytic_line.py index 06de5a3e43e..2117f6e49ea 100644 --- a/addons/account/account_analytic_line.py +++ b/addons/account/account_analytic_line.py @@ -87,18 +87,18 @@ class account_analytic_line(osv.osv): if not a: a = prod.categ_id.property_account_expense_categ.id if not a: - raise osv.except_osv(_('Error !'), + raise osv.except_osv(_('Error!'), _('There is no expense account defined ' \ - 'for this product: "%s" (id:%d)') % \ + 'for this product: "%s" (id:%d).') % \ (prod.name, prod.id,)) else: a = prod.product_tmpl_id.property_account_income.id if not a: a = prod.categ_id.property_account_income_categ.id if not a: - raise osv.except_osv(_('Error !'), + raise osv.except_osv(_('Error!'), _('There is no income account defined ' \ - 'for this product: "%s" (id:%d)') % \ + 'for this product: "%s" (id:%d).') % \ (prod.name, prod_id,)) flag = False diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index 11bcf565260..8df291a98d1 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -192,11 +192,11 @@ class account_bank_statement(osv.osv): 'ref': st_line.ref, } - def _prepare_bank_move_line(self, cr, uid, st_line, move_id, amount, company_currency_id, + def _prepare_bank_move_line(self, cr, uid, st_line, move_id, amount, company_currency_id, context=None): """Compute the args to build the dict of values to create the bank move line from a - statement line by calling the _prepare_move_line_vals. This method may be - overridden to implement custom move generation (making sure to call super() to + statement line by calling the _prepare_move_line_vals. This method may be + overridden to implement custom move generation (making sure to call super() to establish a clean extension chain). :param browse_record st_line: account.bank.statement.line record to @@ -219,12 +219,12 @@ class account_bank_statement(osv.osv): res_currency_obj = self.pool.get('res.currency') amt_cur = -res_currency_obj.compute(cr, uid, company_currency_id, cur_id, amount, context=context) - res = self._prepare_move_line_vals(cr, uid, st_line, move_id, debit, credit, + res = self._prepare_move_line_vals(cr, uid, st_line, move_id, debit, credit, amount_currency=amt_cur, currency_id=cur_id, analytic_id=anl_id, context=context) return res def _get_counter_part_account(sefl, cr, uid, st_line, context=None): - """Retrieve the account to use in the counterpart move. + """Retrieve the account to use in the counterpart move. This method may be overridden to implement custom move generation (making sure to call super() to establish a clean extension chain). @@ -237,7 +237,7 @@ class account_bank_statement(osv.osv): return st_line.statement_id.journal_id.default_debit_account_id.id def _get_counter_part_partner(sefl, cr, uid, st_line, context=None): - """Retrieve the partner to use in the counterpart move. + """Retrieve the partner to use in the counterpart move. This method may be overridden to implement custom move generation (making sure to call super() to establish a clean extension chain). @@ -247,11 +247,11 @@ class account_bank_statement(osv.osv): """ return st_line.partner_id and st_line.partner_id.id or False - def _prepare_counterpart_move_line(self, cr, uid, st_line, move_id, amount, company_currency_id, + def _prepare_counterpart_move_line(self, cr, uid, st_line, move_id, amount, company_currency_id, context=None): """Compute the args to build the dict of values to create the counter part move line from a - statement line by calling the _prepare_move_line_vals. This method may be - overridden to implement custom move generation (making sure to call super() to + statement line by calling the _prepare_move_line_vals. This method may be + overridden to implement custom move generation (making sure to call super() to establish a clean extension chain). :param browse_record st_line: account.bank.statement.line record to @@ -271,12 +271,12 @@ class account_bank_statement(osv.osv): if st_line.statement_id.currency.id <> company_currency_id: amt_cur = st_line.amount cur_id = st_line.statement_id.currency.id - return self._prepare_move_line_vals(cr, uid, st_line, move_id, debit, credit, + return self._prepare_move_line_vals(cr, uid, st_line, move_id, debit, credit, amount_currency = amt_cur, currency_id = cur_id, account_id = account_id, partner_id = partner_id, context=context) def _prepare_move_line_vals(self, cr, uid, st_line, move_id, debit, credit, currency_id = False, - amount_currency= False, account_id = False, analytic_id = False, + amount_currency= False, account_id = False, analytic_id = False, partner_id = False, context=None): """Prepare the dict of values to create the move line from a statement line. All non-mandatory args will replace the default computed one. @@ -350,12 +350,12 @@ class account_bank_statement(osv.osv): amount = res_currency_obj.compute(cr, uid, st.currency.id, company_currency_id, st_line.amount, context=context) - bank_move_vals = self._prepare_bank_move_line(cr, uid, st_line, move_id, amount, + bank_move_vals = self._prepare_bank_move_line(cr, uid, st_line, move_id, amount, company_currency_id, context=context) move_line_id = account_move_line_obj.create(cr, uid, bank_move_vals, context=context) torec.append(move_line_id) - counterpart_move_vals = self._prepare_counterpart_move_line(cr, uid, st_line, move_id, + counterpart_move_vals = self._prepare_counterpart_move_line(cr, uid, st_line, move_id, amount, company_currency_id, context=context) account_move_line_obj.create(cr, uid, counterpart_move_vals, context=context) @@ -364,7 +364,7 @@ class account_bank_statement(osv.osv): context=context).line_id], context=context): if line.state <> 'valid': - raise osv.except_osv(_('Error !'), + raise osv.except_osv(_('Error!'), _('Journal item "%s" is not valid.') % line.name) # Bank statements will not consider boolean on journal entry_posted @@ -377,7 +377,7 @@ class account_bank_statement(osv.osv): def balance_check(self, cr, uid, st_id, journal_type='bank', context=None): st = self.browse(cr, uid, st_id, context=context) if not ((abs((st.balance_end or 0.0) - st.balance_end_real) < 0.0001) or (abs((st.balance_end or 0.0) - st.balance_end_real) < 0.0001)): - raise osv.except_osv(_('Error !'), + raise osv.except_osv(_('Error!'), _('The statement balance is incorrect !\nThe expected balance (%.2f) is different than the computed one. (%.2f)') % (st.balance_end_real, st.balance_end)) return True @@ -401,7 +401,7 @@ class account_bank_statement(osv.osv): self.balance_check(cr, uid, st.id, journal_type=j_type, context=context) if (not st.journal_id.default_credit_account_id) \ or (not st.journal_id.default_debit_account_id): - raise osv.except_osv(_('Configuration Error !'), + raise osv.except_osv(_('Configuration Error!'), _('Please verify that an account is defined in the journal.')) if not st.name == '/': @@ -415,7 +415,7 @@ class account_bank_statement(osv.osv): for line in st.move_line_ids: if line.state <> 'valid': - raise osv.except_osv(_('Error !'), + raise osv.except_osv(_('Error!'), _('The account entries lines are not in valid state.')) for st_line in st.line_ids: if st_line.analytic_account_id: @@ -445,7 +445,7 @@ class account_bank_statement(osv.osv): account_move_obj.unlink(cr, uid, ids, context) done.append(st.id) 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 \ @@ -469,7 +469,7 @@ class account_bank_statement(osv.osv): if t['state'] in ('draft'): unlink_ids.append(t['id']) else: - raise osv.except_osv(_('Invalid action !'), _('In order to delete a bank statement, you must first cancel it to delete related journal items.')) + raise osv.except_osv(_('Invalid Action!'), _('In order to delete a bank statement, you must first cancel it to delete related journal items.')) osv.osv.unlink(self, cr, uid, unlink_ids, context=context) return True diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py index ae225cc60de..9af0dcf60f4 100644 --- a/addons/account/account_cash_statement.py +++ b/addons/account/account_cash_statement.py @@ -169,7 +169,7 @@ class account_cash_statement(osv.osv): return result _columns = { - 'total_entry_encoding': fields.function(_get_sum_entry_encoding, string="Total Cash Transactions", + 'total_entry_encoding': fields.function(_get_sum_entry_encoding, string="Total Transactions", store = { 'account.bank.statement': (lambda self, cr, uid, ids, context=None: ids, ['line_ids','move_line_ids'], 10), 'account.bank.statement.line': (_get_statement_from_line, ['amount'], 10), @@ -238,7 +238,7 @@ class account_cash_statement(osv.osv): for statement in statement_pool.browse(cr, uid, ids, context=context): vals = {} if not self._user_allow(cr, uid, statement.id, context=context): - raise osv.except_osv(_('Error !'), (_('You do not have rights to open this %s journal !') % (statement.journal_id.name, ))) + raise osv.except_osv(_('Error!'), (_('You do not have rights to open this %s journal !') % (statement.journal_id.name, ))) if statement.name and statement.name == '/': c = {'fiscalyear_id': statement.period_id.fiscalyear_id.id} @@ -282,8 +282,8 @@ class account_cash_statement(osv.osv): for item_label, item_account in TALBES: 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,)) + raise osv.except_osv(_('Error!'), + _('There is no %s Account on the journal %s.') % (item_label, obj.journal_id.name,)) is_profit = obj.difference < 0.0 diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index b1c5db23df6..064ba419ebd 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -319,7 +319,7 @@ class account_invoice(osv.osv): res['fields'][field]['selection'] = journal_select doc = etree.XML(res['arch']) - + if context.get('type', False): for node in doc.xpath("//field[@name='partner_bank_id']"): if context['type'] == 'in_refund': @@ -327,7 +327,7 @@ class account_invoice(osv.osv): elif context['type'] == 'out_refund': node.set('domain', "[('partner_id', '=', partner_id)]") res['arch'] = etree.tostring(doc) - + if view_type == 'search': if context.get('type', 'in_invoice') in ('out_invoice', 'out_refund'): for node in doc.xpath("//group[@name='extended filter']"): @@ -364,15 +364,15 @@ class account_invoice(osv.osv): except Exception, e: if '"journal_id" viol' in e.args[0]: raise orm.except_orm(_('Configuration Error!'), - _('There is no Accounting Journal of type Sale/Purchase defined!')) + _('There is no Sale/Purchase Journal(s) defined.')) else: - raise orm.except_orm(_('Unknown Error'), str(e)) + raise orm.except_orm(_('Unknown Error!'), str(e)) def invoice_print(self, cr, uid, ids, context=None): ''' This function prints the invoice and mark it as sent, so that we can see more easily the next step of the workflow ''' - assert len(ids) == 1, 'This option should only be used for a single id at a time' + assert len(ids) == 1, 'This option should only be used for a single id at a time.' self.write(cr, uid, ids, {'sent': True}, context=context) datas = { 'ids': ids, @@ -425,7 +425,7 @@ class account_invoice(osv.osv): if t['state'] in ('draft', 'cancel') and t['internal_number']== False: unlink_ids.append(t['id']) else: - raise osv.except_osv(_('Invalid action !'), _('You can not delete an invoice which is open or paid. We suggest you to refund it instead.')) + raise osv.except_osv(_('Invalid Action!'), _('You cannot delete an invoice which is open or paid. You should refund it instead.')) osv.osv.unlink(self, cr, uid, unlink_ids, context=context) return True @@ -458,8 +458,8 @@ class account_invoice(osv.osv): rec_res_id = rec_line_data and rec_line_data[0].get('value_reference',False) and int(rec_line_data[0]['value_reference'].split(',')[1]) or False pay_res_id = pay_line_data and pay_line_data[0].get('value_reference',False) and int(pay_line_data[0]['value_reference'].split(',')[1]) or False if not rec_res_id and not pay_res_id: - raise osv.except_osv(_('Configuration Error !'), - _('Can not find a chart of accounts for this company, you should create one.')) + raise osv.except_osv(_('Configuration Error!'), + _('Cannot find a chart of accounts for this company, you should create one.')) account_obj = self.pool.get('account.account') rec_obj_acc = account_obj.browse(cr, uid, [rec_res_id]) pay_obj_acc = account_obj.browse(cr, uid, [pay_res_id]) @@ -521,7 +521,7 @@ class account_invoice(osv.osv): pterm_list.sort() res = {'value':{'date_due': pterm_list[-1]}} else: - raise osv.except_osv(_('Data Insufficient !'), _('The payment term of supplier does not have a payment term line!')) + raise osv.except_osv(_('Insufficient Data!'), _('The payment term of supplier does not have a payment term line.')) return res def onchange_invoice_line(self, cr, uid, ids, lines): @@ -553,8 +553,8 @@ class account_invoice(osv.osv): rec_res_id = rec_line_data and rec_line_data[0].get('value_reference',False) and int(rec_line_data[0]['value_reference'].split(',')[1]) or False pay_res_id = pay_line_data and pay_line_data[0].get('value_reference',False) and int(pay_line_data[0]['value_reference'].split(',')[1]) or False if not rec_res_id and not pay_res_id: - raise osv.except_osv(_('Configuration Error !'), - _('Can not find a chart of account, you should create one from the configuration of the accounting menu.')) + raise osv.except_osv(_('Configuration Error!'), + _('Cannot find a chart of account, you should create one from Settings\Configuration\Accounting menu.')) if type in ('out_invoice', 'out_refund'): acc_id = rec_res_id else: @@ -568,16 +568,16 @@ class account_invoice(osv.osv): if line.account_id.company_id.id != company_id: result_id = account_obj.search(cr, uid, [('name','=',line.account_id.name),('company_id','=',company_id)]) if not result_id: - raise osv.except_osv(_('Configuration Error !'), - _('Can not find a chart of account, you should create one from the configuration of the accounting menu.')) + raise osv.except_osv(_('Configuration Error!'), + _('Cannot find a chart of account, you should create one from Settings\Configuration\Accounting menu.')) inv_line_obj.write(cr, uid, [line.id], {'account_id': result_id[-1]}) else: if invoice_line: for inv_line in invoice_line: obj_l = account_obj.browse(cr, uid, inv_line[2]['account_id']) if obj_l.company_id.id != company_id: - raise osv.except_osv(_('Configuration Error !'), - _('Invoice line account company does not match with invoice company.')) + raise osv.except_osv(_('Configuration Error!'), + _('Invoice line account\'s company and invoice\'s compnay does not match.')) else: continue if company_id and type: @@ -598,7 +598,7 @@ class account_invoice(osv.osv): if r[1] == 'journal_id' and r[2] in journal_ids: val['journal_id'] = r[2] if not val.get('journal_id', False): - raise osv.except_osv(_('Configuration Error !'), (_('Can\'t find any account journal of %s type for this company.\n\nYou can create one in the menu: \nConfiguration\Financial Accounting\Accounts\Journals.') % (journal_type))) + raise osv.except_osv(_('Configuration Error!'), (_('Cannot find any account journal of %s type for this company.\n\nYou can create one in the menu: \nConfiguration\Journals\Journals.') % (journal_type))) dom = {'journal_id': [('id', 'in', journal_ids)]} else: journal_ids = obj_journal.search(cr, uid, []) @@ -759,13 +759,13 @@ class account_invoice(osv.osv): key = (tax.tax_code_id.id, tax.base_code_id.id, tax.account_id.id, tax.account_analytic_id.id) tax_key.append(key) if not key in compute_taxes: - raise osv.except_osv(_('Warning !'), _('Global taxes defined, but they are not in invoice lines !')) + raise osv.except_osv(_('Warning!'), _('Global taxes defined, but they are not in invoice lines !')) base = compute_taxes[key]['base'] if abs(base - tax.base) > inv.company_id.currency_id.rounding: - raise osv.except_osv(_('Warning !'), _('Tax base different!\nClick on compute to update the tax base.')) + raise osv.except_osv(_('Warning!'), _('Tax base different!\nClick on compute to update the tax base.')) for key in compute_taxes: if not key in tax_key: - raise osv.except_osv(_('Warning !'), _('Taxes are missing!\nClick on compute button.')) + raise osv.except_osv(_('Warning!'), _('Taxes are missing!\nClick on compute button.')) def compute_invoice_totals(self, cr, uid, inv, company_currency, ref, invoice_move_lines): total = 0 @@ -835,12 +835,12 @@ class account_invoice(osv.osv): context = {} for inv in self.browse(cr, uid, ids, context=context): if not inv.journal_id.sequence_id: - raise osv.except_osv(_('Error !'), _('Please define sequence on the journal related to this invoice.')) + raise osv.except_osv(_('Error!'), _('Please define sequence on the journal related to this invoice.')) if not inv.invoice_line: raise osv.except_osv(_('No Invoice Lines !'), _('Please create some invoice lines.')) if inv.move_id: continue - + ctx = context.copy() ctx.update({'lang': inv.partner_id.lang}) if not inv.date_invoice: @@ -866,7 +866,7 @@ class account_invoice(osv.osv): total_percent += line.value_amount total_fixed = (total_fixed * 100) / (inv.amount_total or 1.0) if (total_fixed + total_percent) > 100: - raise osv.except_osv(_('Error !'), _("Can not create the invoice !\nThe related payment term is probably misconfigured as it gives a computed amount greater than the total invoiced amount. The latest line of your payment term must be of type 'balance' to avoid rounding issues.")) + raise osv.except_osv(_('Error!'), _("Cannot create the invoice.\nThe related payment term is probably misconfigured as it gives a computed amount greater than the total invoiced amount. In order to avoid rounding issues, the latest line of your payment term must be of type 'balance'.")) # one move line per tax line iml += ait_obj.move_line_get(cr, uid, inv.id) @@ -947,8 +947,8 @@ class account_invoice(osv.osv): journal_id = inv.journal_id.id journal = journal_obj.browse(cr, uid, journal_id, context=ctx) if journal.centralisation: - raise osv.except_osv(_('UserError'), - _('You cannot create an invoice on a centralised journal. Uncheck the centralised counterpart box in the related journal from the configuration menu.')) + raise osv.except_osv(_('User Error!'), + _('You cannot create an invoice on a centralized journal. Uncheck the centralized counterpart box in the related journal from the configuration menu.')) line = self.finalize_invoice_move_lines(cr, uid, inv, line) @@ -979,7 +979,7 @@ class account_invoice(osv.osv): move_obj.post(cr, uid, [move_id], context=ctx) self._log_event(cr, uid, ids) return True - + def invoice_validate(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state':'open'}, context=context) return True @@ -1061,7 +1061,7 @@ class account_invoice(osv.osv): pay_ids = account_move_line_obj.browse(cr, uid, i['payment_ids']) for move_line in pay_ids: if move_line.reconcile_partial_id and move_line.reconcile_partial_id.line_partial_ids: - raise osv.except_osv(_('Error !'), _('You can not cancel an invoice which is partially paid! You need to unreconcile related payment entries first!')) + raise osv.except_osv(_('Error!'), _('You cannot cancel an invoice which is partially paid. You need to unreconcile related payment entries first.')) # First, set the invoices as cancelled and detach the move ids self.write(cr, uid, ids, {'state':'cancel', 'move_id':False}) @@ -1187,7 +1187,7 @@ class account_invoice(osv.osv): if context is None: context = {} #TODO check if we can use different period for payment and the writeoff line - assert len(ids)==1, "Can only pay one invoice at a time" + assert len(ids)==1, "Can only pay one invoice at a time." invoice = self.browse(cr, uid, ids[0], context=context) src_account_id = invoice.account_id.id # Take the seq as name for move @@ -1273,7 +1273,7 @@ class account_invoice(osv.osv): else: code = invoice.currency_id.symbol # TODO: use currency's formatting function - msg = _("Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)") % \ + msg = _("Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining).") % \ (name, pay_amount, code, invoice.amount_total, code, total, code) self.message_append_note(cr, uid, [inv_id], body=msg, context=context) self.pool.get('account.move.line').reconcile_partial(cr, uid, line_ids, 'manual', context) @@ -1281,11 +1281,11 @@ class account_invoice(osv.osv): # Update the stored value (fields.function), so we write to trigger recompute self.pool.get('account.invoice').write(cr, uid, ids, {}, context=context) return True - + # ----------------------------------------- # OpenChatter notifications and need_action # ----------------------------------------- - + def _get_document_type(self, type): type_dict = { 'out_invoice': 'Customer invoice', @@ -1294,19 +1294,19 @@ class account_invoice(osv.osv): 'in_refund': 'Supplier Refund', } return type_dict.get(type, 'Invoice') - + def create_send_note(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): self.message_append_note(cr, uid, [obj.id],body=_("%s created.") % (self._get_document_type(obj.type)), context=context) - + def confirm_paid_send_note(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): self.message_append_note(cr, uid, [obj.id], body=_("%s paid.") % (self._get_document_type(obj.type)), context=context) - + def invoice_cancel_send_note(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): self.message_append_note(cr, uid, [obj.id], body=_("%s cancelled.") % (self._get_document_type(obj.type)), context=context) - + account_invoice() class account_invoice_line(osv.osv): @@ -1475,7 +1475,7 @@ class account_invoice_line(osv.osv): if prod.uom_id.category_id.id != prod_uom.category_id.id: warning = { 'title': _('Warning!'), - 'message': _('You selected an Unit of Measure which is not compatible with the product.') + 'message': _('The selected unit of measure is not compatible with the unit of measure of the product.') } return {'value': res['value'], 'warning': warning} return res diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 501a50b96c2..d04030c909e 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -163,8 +163,10 @@

-

@@ -309,9 +311,11 @@

-

@@ -347,7 +351,7 @@ - + 'valid': - raise osv.except_osv(_('Error'), + raise osv.except_osv(_('Error!'), _('Entry "%s" is not valid !') % line.name) credit += line['credit'] debit += line['debit'] @@ -823,15 +823,15 @@ class account_move_line(osv.osv): r = cr.fetchall() #TODO: move this check to a constraint in the account_move_reconcile object if not unrec_lines: - raise osv.except_osv(_('Error'), _('Entry is already reconciled')) + raise osv.except_osv(_('Error!'), _('Entry is already reconciled.')) account = account_obj.browse(cr, uid, account_id, context=context) if r[0][1] != None: - raise osv.except_osv(_('Error'), _('Some entries are already reconciled !')) + raise osv.except_osv(_('Error!'), _('Some entries are already reconciled.')) if (not currency_obj.is_zero(cr, uid, account.company_id.currency_id, writeoff)) or \ (account.currency_id and (not currency_obj.is_zero(cr, uid, account.currency_id, currency))): if not writeoff_acc_id: - raise osv.except_osv(_('Warning'), _('You have to provide an account for the write off/exchange difference entry !')) + raise osv.except_osv(_('Warning!'), _('You have to provide an account for the write off/exchange difference entry.')) if writeoff > 0: debit = writeoff credit = 0.0 @@ -1090,9 +1090,9 @@ class account_move_line(osv.osv): res = cr.fetchone() if res: if res[1] != 'draft': - raise osv.except_osv(_('UserError'), + raise osv.except_osv(_('User Error!'), _('The account move (%s) for centralisation ' \ - 'has been confirmed!') % res[2]) + 'has been confirmed.') % res[2]) return res def _remove_move_reconcile(self, cr, uid, move_ids=[], context=None): @@ -1139,9 +1139,9 @@ class account_move_line(osv.osv): if isinstance(ids, (int, long)): ids = [ids] if vals.get('account_tax_id', False): - raise osv.except_osv(_('Unable to change tax !'), _('You can not change the tax, you should remove and recreate lines !')) + raise osv.except_osv(_('Unable to change tax!'), _('You cannot change the tax, you should remove and recreate lines.')) if ('account_id' in vals) and not account_obj.read(cr, uid, vals['account_id'], ['active'])['active']: - raise osv.except_osv(_('Bad account!'), _('You can not use an inactive account!')) + raise osv.except_osv(_('Bad Account!'), _('You cannot use an inactive account.')) if update_check: if ('account_id' in vals) or ('journal_id' in vals) or ('period_id' in vals) or ('move_id' in vals) or ('debit' in vals) or ('credit' in vals) or ('date' in vals): self._update_check(cr, uid, ids, context) @@ -1186,7 +1186,7 @@ class account_move_line(osv.osv): result = cr.fetchall() for (state,) in result: if state == 'done': - raise osv.except_osv(_('Error !'), _('You can not add/modify entries in a closed journal.')) + raise osv.except_osv(_('Error!'), _('You cannot add/modify entries in a closed journal.')) if not result: journal = journal_obj.browse(cr, uid, journal_id, context=context) period = period_obj.browse(cr, uid, period_id, context=context) @@ -1202,9 +1202,9 @@ class account_move_line(osv.osv): for line in self.browse(cr, uid, ids, context=context): err_msg = _('Move name (id): %s (%s)') % (line.move_id.name, str(line.move_id.id)) if line.move_id.state <> 'draft' and (not line.journal_id.entry_posted): - raise osv.except_osv(_('Error !'), _('You can not do this modification on a confirmed entry! You can just change some non legal fields or you must unconfirm the journal entry first! \n%s') % err_msg) + raise osv.except_osv(_('Error!'), _('You cannot do this modification on a confirmed entry. You can just change some non legal fields or you must unconfirm the journal entry first.\n%s.') % err_msg) if line.reconcile_id: - raise osv.except_osv(_('Error !'), _('You can not do this modification on a reconciled entry! You can just change some non legal fields or you must unreconcile first!\n%s') % err_msg) + raise osv.except_osv(_('Error!'), _('You cannot do this modification on a reconciled entry. You can just change some non legal fields or you must unreconcile first.\n%s.') % err_msg) t = (line.journal_id.id, line.period_id.id) if t not in done: self._update_journal_check(cr, uid, line.journal_id.id, line.period_id.id, context) @@ -1224,7 +1224,7 @@ class account_move_line(osv.osv): if company_id: vals['company_id'] = company_id[0] if ('account_id' in vals) and not account_obj.read(cr, uid, vals['account_id'], ['active'])['active']: - raise osv.except_osv(_('Bad account!'), _('You can not use an inactive account!')) + raise osv.except_osv(_('Bad Account!'), _('You cannot use an inactive account.')) if 'journal_id' in vals: context['journal_id'] = vals['journal_id'] if 'period_id' in vals: @@ -1237,10 +1237,10 @@ class account_move_line(osv.osv): if 'period_id' not in context or not isinstance(context.get('period_id', ''), (int, long)): period_candidate_ids = self.pool.get('account.period').name_search(cr, uid, name=context.get('period_id','')) if len(period_candidate_ids) != 1: - raise osv.except_osv(_('Encoding error'), _('No period found or more than one period found for the given date.')) + raise osv.except_osv(_('Error!'), _('No period found or more than one period found for the given date.')) context['period_id'] = period_candidate_ids[0][0] if not context.get('journal_id', False) and context.get('search_default_journal_id', False): - context['journal_id'] = context.get('search_default_journal_id') + context['journal_id'] = context.get('search_default_journal_id') self._update_journal_check(cr, uid, context['journal_id'], context['period_id'], context) move_id = vals.get('move_id', False) journal = journal_obj.browse(cr, uid, context['journal_id'], context=context) @@ -1263,7 +1263,7 @@ class account_move_line(osv.osv): move_id = move_obj.create(cr, uid, v, context) vals['move_id'] = move_id else: - raise osv.except_osv(_('No piece number !'), _('Can not create an automatic sequence for this piece!\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece.')) + raise osv.except_osv(_('No piece number !'), _('Cannot create an automatic sequence for this piece.\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece.')) ok = not (journal.type_control_ids or journal.account_control_ids) if ('account_id' in vals): account = account_obj.browse(cr, uid, vals['account_id'], context=context) @@ -1288,7 +1288,7 @@ class account_move_line(osv.osv): vals['amount_currency'] = cur_obj.compute(cr, uid, account.company_id.currency_id.id, account.currency_id.id, vals.get('debit', 0.0)-vals.get('credit', 0.0), context=ctx) if not ok: - raise osv.except_osv(_('Bad account !'), _('You can not use this general account in this journal, check the tab \'Entry Controls\' on the related journal !')) + raise osv.except_osv(_('Bad Account!'), _('You cannot use this general account in this journal, check the tab \'Entry Controls\' on the related journal.')) if vals.get('analytic_account_id',False): if journal.analytic_journal_id: diff --git a/addons/account/account_report.xml b/addons/account/account_report.xml index 7b574c8960e..d258bb0b140 100644 --- a/addons/account/account_report.xml +++ b/addons/account/account_report.xml @@ -20,6 +20,7 @@ rml="account/report/account_print_invoice.rml" string="Invoices" attachment="(object.state in ('open','paid')) and ('INV'+(object.number or '').replace('/','')+'.pdf')" + attachment_use="True" usage="default" /> diff --git a/addons/account/installer.py b/addons/account/installer.py index 4fc4754ea3f..60a34628b1b 100644 --- a/addons/account/installer.py +++ b/addons/account/installer.py @@ -91,7 +91,7 @@ class account_installer(osv.osv_memory): def check_unconfigured_cmp(self, cr, uid, context=None): """ check if there are still unconfigured companies """ if not self.get_unconfigured_cmp(cr, uid, context=context): - raise osv.except_osv(_('No unconfigured company !'), _("There are currently no company without chart of account. The wizard will therefore not be executed.")) + raise osv.except_osv(_('No unconfigured company !'), _("There is currently no company without chart of account. The wizard will therefore not be executed.")) def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): if context is None:context = {} diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml index 1e360f6c742..d44c7c460c7 100644 --- a/addons/account/partner_view.xml +++ b/addons/account/partner_view.xml @@ -109,8 +109,8 @@ - - + + diff --git a/addons/account/report/common_report_header.py b/addons/account/report/common_report_header.py index c0365875bdc..c93c3e02ee3 100644 --- a/addons/account/report/common_report_header.py +++ b/addons/account/report/common_report_header.py @@ -89,7 +89,7 @@ class common_report_header(object): return '' def _get_sortby(self, data): - raise (_('Error'), _('Not implemented')) + raise (_('Error!'), _('Not implemented.')) def _get_filter(self, data): if data.get('form', False) and data['form'].get('filter', False): diff --git a/addons/account/test/account_bank_statement.yml b/addons/account/test/account_bank_statement.yml index 37789f3ad66..89d0b493444 100644 --- a/addons/account/test/account_bank_statement.yml +++ b/addons/account/test/account_bank_statement.yml @@ -70,4 +70,4 @@ try: self.button_cancel(cr, uid, [ref("account_bank_statement_0")]) except Exception, e: - assert e[0]=='UserError', 'Another exception has been raised!' + assert e[0]=='User Error!', 'Another exception has been raised!' diff --git a/addons/account/wizard/account_automatic_reconcile.py b/addons/account/wizard/account_automatic_reconcile.py index 5aeefefe8ce..b4355e79129 100644 --- a/addons/account/wizard/account_automatic_reconcile.py +++ b/addons/account/wizard/account_automatic_reconcile.py @@ -145,7 +145,7 @@ class account_automatic_reconcile(osv.osv_memory): allow_write_off = form.allow_write_off reconciled = unreconciled = 0 if not form.account_ids: - raise osv.except_osv(_('UserError'), _('You must select accounts to reconcile')) + raise osv.except_osv(_('User Error!'), _('You must select accounts to reconcile.')) for account_id in form.account_ids: params = (account_id.id,) if not allow_write_off: diff --git a/addons/account/wizard/account_change_currency.py b/addons/account/wizard/account_change_currency.py index fc460eceb11..d51df1e4d70 100644 --- a/addons/account/wizard/account_change_currency.py +++ b/addons/account/wizard/account_change_currency.py @@ -35,7 +35,7 @@ class account_change_currency(osv.osv_memory): context = {} if context.get('active_id',False): if obj_inv.browse(cr, uid, context['active_id']).state != 'draft': - raise osv.except_osv(_('Error'), _('You can only change currency for Draft Invoice !')) + raise osv.except_osv(_('Error!'), _('You can only change currency for Draft Invoice.')) pass def change_currency(self, cr, uid, ids, context=None): @@ -56,18 +56,18 @@ class account_change_currency(osv.osv_memory): if invoice.company_id.currency_id.id == invoice.currency_id.id: new_price = line.price_unit * rate if new_price <= 0: - raise osv.except_osv(_('Error'), _('New currency is not configured properly !')) + raise osv.except_osv(_('Error!'), _('New currency is not configured properly.')) if invoice.company_id.currency_id.id != invoice.currency_id.id and invoice.company_id.currency_id.id == new_currency: old_rate = invoice.currency_id.rate if old_rate <= 0: - raise osv.except_osv(_('Error'), _('Current currency is not configured properly !')) + raise osv.except_osv(_('Error!'), _('Current currency is not configured properly.')) new_price = line.price_unit / old_rate if invoice.company_id.currency_id.id != invoice.currency_id.id and invoice.company_id.currency_id.id != new_currency: old_rate = invoice.currency_id.rate if old_rate <= 0: - raise osv.except_osv(_('Error'), _('Current currency is not configured properly !')) + raise osv.except_osv(_('Error!'), _('Current currency is not configured properly.')) new_price = (line.price_unit / old_rate ) * rate obj_inv_line.write(cr, uid, [line.id], {'price_unit': new_price}) obj_inv.write(cr, uid, [invoice.id], {'currency_id': new_currency}, context=context) diff --git a/addons/account/wizard/account_financial_report.py b/addons/account/wizard/account_financial_report.py index f96127f6375..4f9d6abf099 100644 --- a/addons/account/wizard/account_financial_report.py +++ b/addons/account/wizard/account_financial_report.py @@ -67,7 +67,7 @@ class accounting_report(osv.osv_memory): result['date_to'] = data['form']['date_to_cmp'] elif data['form']['filter_cmp'] == 'filter_period': if not data['form']['period_from_cmp'] or not data['form']['period_to_cmp']: - raise osv.except_osv(_('Error'),_('Select a starting and an ending period')) + raise osv.except_osv(_('Error!'),_('Select a starting and an ending period')) result['period_from'] = data['form']['period_from_cmp'] result['period_to'] = data['form']['period_to_cmp'] return result diff --git a/addons/account/wizard/account_fiscalyear_close.py b/addons/account/wizard/account_fiscalyear_close.py index 93746e5d964..196c14d3792 100644 --- a/addons/account/wizard/account_fiscalyear_close.py +++ b/addons/account/wizard/account_fiscalyear_close.py @@ -51,15 +51,15 @@ class account_fiscalyear_close(osv.osv_memory): """ def _reconcile_fy_closing(cr, uid, ids, context=None): """ - This private function manually do the reconciliation on the account_move_line given as `ids´, and directly + This private function manually do the reconciliation on the account_move_line given as `ids´, and directly through psql. It's necessary to do it this way because the usual `reconcile()´ function on account.move.line - object is really resource greedy (not supposed to work on reconciliation between thousands of records) and + object is really resource greedy (not supposed to work on reconciliation between thousands of records) and it does a lot of different computation that are useless in this particular case. """ #check that the reconcilation concern journal entries from only one company cr.execute('select distinct(company_id) from account_move_line where id in %s',(tuple(ids),)) if len(cr.fetchall()) > 1: - raise osv.except_osv(_('Warning !'), _('The entries to reconcile should belong to the same company')) + raise osv.except_osv(_('Warning!'), _('The entries to reconcile should belong to the same company.')) r_id = self.pool.get('account.move.reconcile').create(cr, uid, {'type': 'auto'}) cr.execute('update account_move_line set reconcile_id = %s where id in %s',(r_id, tuple(ids),)) return r_id @@ -85,7 +85,7 @@ class account_fiscalyear_close(osv.osv_memory): fy2_period_set = ','.join(map(lambda id: str(id[0]), cr.fetchall())) if not fy_period_set or not fy2_period_set: - raise osv.except_osv(_('UserError'), _('The periods to generate opening entries were not found')) + raise osv.except_osv(_('User Error!'), _('The periods to generate opening entries cannot be found.')) period = obj_acc_period.browse(cr, uid, data[0].period_id.id, context=context) new_fyear = obj_acc_fiscalyear.browse(cr, uid, data[0].fy2_id.id, context=context) @@ -96,11 +96,11 @@ class account_fiscalyear_close(osv.osv_memory): company_id = new_journal.company_id.id if not new_journal.default_credit_account_id or not new_journal.default_debit_account_id: - raise osv.except_osv(_('UserError'), - _('The journal must have default credit and debit account')) + raise osv.except_osv(_('User Error!'), + _('The journal must have default credit and debit account.')) if (not new_journal.centralisation) or new_journal.entry_posted: - raise osv.except_osv(_('UserError'), - _('The journal must have centralised counterpart without the Skipping draft state option checked!')) + raise osv.except_osv(_('User Error!'), + _('The journal must have centralized counterpart without the Skipping draft state option checked.')) #delete existing move and move lines if any move_ids = obj_acc_move.search(cr, uid, [ diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py index 98c32eda7ee..b7d278b8849 100644 --- a/addons/account/wizard/account_invoice_refund.py +++ b/addons/account/wizard/account_invoice_refund.py @@ -106,9 +106,9 @@ class account_invoice_refund(osv.osv_memory): journal_id = form.journal_id.id for inv in inv_obj.browse(cr, uid, context.get('active_ids'), context=context): if inv.state in ['draft', 'proforma2', 'cancel']: - raise osv.except_osv(_('Error !'), _('Can not %s draft/proforma/cancel invoice.') % (mode)) + raise osv.except_osv(_('Error!'), _('Cannot %s draft/proforma/cancel invoice.') % (mode)) if inv.reconciled and mode in ('cancel', 'modify'): - raise osv.except_osv(_('Error !'), _('Can not %s invoice which is already reconciled, invoice should be unreconciled first. You can only Refund this invoice') % (mode)) + raise osv.except_osv(_('Error!'), _('Cannot %s invoice which is already reconciled, invoice should be unreconciled first. You can only refund this invoice.') % (mode)) if form.period.id: period = form.period.id else: @@ -143,8 +143,8 @@ class account_invoice_refund(osv.osv_memory): description = inv.name if not period: - raise osv.except_osv(_('Data Insufficient !'), \ - _('No Period found on Invoice!')) + raise osv.except_osv(_('Insufficient Data!'), \ + _('No period found on the invoice.')) refund_id = inv_obj.refund(cr, uid, [inv.id], date, period, description, journal_id) refund = inv_obj.browse(cr, uid, refund_id[0], context=context) diff --git a/addons/account/wizard/account_invoice_state.py b/addons/account/wizard/account_invoice_state.py index 7adcb908a34..55eab584040 100644 --- a/addons/account/wizard/account_invoice_state.py +++ b/addons/account/wizard/account_invoice_state.py @@ -41,7 +41,7 @@ class account_invoice_confirm(osv.osv_memory): for record in data_inv: if record['state'] not in ('draft','proforma','proforma2'): - raise osv.except_osv(_('Warning'), _("Selected Invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-Forma' state!")) + raise osv.except_osv(_('Warning!'), _("Selected invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-Forma' state.")) wf_service.trg_validate(uid, 'account.invoice', record['id'], 'invoice_open', cr) return {'type': 'ir.actions.act_window_close'} @@ -65,7 +65,7 @@ class account_invoice_cancel(osv.osv_memory): for record in data_inv: if record['state'] in ('cancel','paid'): - raise osv.except_osv(_('Warning'), _("Selected Invoice(s) cannot be cancelled as they are already in 'Cancelled' or 'Done' state!")) + raise osv.except_osv(_('Warning!'), _("Selected invoice(s) cannot be cancelled as they are already in 'Cancelled' or 'Done' state.")) wf_service.trg_validate(uid, 'account.invoice', record['id'], 'invoice_cancel', cr) return {'type': 'ir.actions.act_window_close'} diff --git a/addons/account/wizard/account_move_bank_reconcile.py b/addons/account/wizard/account_move_bank_reconcile.py index 9be351ed440..4679089b7cc 100644 --- a/addons/account/wizard/account_move_bank_reconcile.py +++ b/addons/account/wizard/account_move_bank_reconcile.py @@ -46,7 +46,7 @@ class account_move_bank_reconcile(osv.osv_memory): from account_journal where id=%s', (data['journal_id'],)) account_id = cr.fetchone()[0] if not account_id: - raise osv.except_osv(_('Error'), _('You have to define \ + raise osv.except_osv(_('Error!'), _('You have to define \ the bank account\nin the journal definition for reconciliation.')) return { 'domain': "[('journal_id','=',%d), ('account_id','=',%d), ('state','<>','draft')]" % (data['journal_id'], account_id), diff --git a/addons/account/wizard/account_move_journal.py b/addons/account/wizard/account_move_journal.py index 66f634bd59f..1353efca1f5 100644 --- a/addons/account/wizard/account_move_journal.py +++ b/addons/account/wizard/account_move_journal.py @@ -60,7 +60,7 @@ class account_move_journal(osv.osv_memory): if context.get('journal_type', False): jids = journal_pool.search(cr, uid, [('type','=', context.get('journal_type'))]) if not jids: - raise osv.except_osv(_('Configuration Error !'), _('Can\'t find any account journal of %s type for this company.\n\nYou can create one in the menu: \nConfiguration/Financial Accounting/Accounts/Journals.') % context.get('journal_type')) + raise osv.except_osv(_('Configuration Error!'), _('Cannot find any account journal of %s type for this company.\n\nYou can create one in the menu: \nConfiguration/Journals/Journals.') % context.get('journal_type')) journal_id = jids[0] return journal_id @@ -83,25 +83,25 @@ class account_move_journal(osv.osv_memory): if context: if not view_id: return res - + period_pool = self.pool.get('account.period') journal_pool = self.pool.get('account.journal') - + journal_id = self._get_journal(cr, uid, context) period_id = self._get_period(cr, uid, context) - + journal = False if journal_id: journal = journal_pool.read(cr, uid, [journal_id], ['name'])[0]['name'] journal_string = _("Journal: %s") % tools.ustr(journal) else: journal_string = _("Journal: All") - + period = False if period_id: period = period_pool.browse(cr, uid, [period_id], ['name'])[0]['name'] period_string = _("Period: %s") % tools.ustr(period) - + open_string = _("Open") view = """
@@ -116,7 +116,7 @@ class account_move_journal(osv.osv_memory):
+
  • + + + + diff --git a/addons/auth_signup/__init__.py b/addons/auth_signup/__init__.py new file mode 100644 index 00000000000..2e404949550 --- /dev/null +++ b/addons/auth_signup/__init__.py @@ -0,0 +1,2 @@ +import res_config +import auth_signup diff --git a/addons/auth_signup/__openerp__.py b/addons/auth_signup/__openerp__.py new file mode 100644 index 00000000000..a869c623db0 --- /dev/null +++ b/addons/auth_signup/__openerp__.py @@ -0,0 +1,22 @@ +{ + 'name': 'Signup', + 'description': 'Allow users to sign up', + 'author': 'OpenERP SA', + 'version': '1.0', + 'category': 'Authentication', + 'website': 'http://www.openerp.com', + 'installable': True, + 'depends': ['auth_anonymous', 'base_setup'], + 'data': [ + 'res_config.xml', + ], + 'js': [ + 'static/src/js/auth_signup.js', + ], + 'css': [ + 'static/src/css/auth_signup.css', + ], + 'qweb': [ + 'static/src/xml/auth_signup.xml', + ], +} diff --git a/addons/signup/signup.py b/addons/auth_signup/auth_signup.py similarity index 55% rename from addons/signup/signup.py rename to addons/auth_signup/auth_signup.py index 3819a63da85..ebc72b3aeac 100644 --- a/addons/signup/signup.py +++ b/addons/auth_signup/auth_signup.py @@ -8,23 +8,18 @@ class res_users(osv.Model): ] class signup_signup(osv.TransientModel): - _name = 'signup.signup' + _name = 'auth.signup' + + # TODO add captcha _columns = { 'name': fields.char('Name', size=64), 'email': fields.char('Email', size=64), 'password': fields.char('Password', size=64), - 'password_confirmation': fields.char('Confirm Password', size=64), - 'state': fields.selection([(x, x) for x in 'draft done missmatch'.split()], required=True), - } - _defaults = { - 'state': 'draft', } def create(self, cr, uid, values, context=None): # NOTE here, invalid values raises exceptions to avoid storing # sensitive data into the database (which then are available to anyone) - if values['password'] != values['password_confirmation']: - raise osv.except_osv('Error', 'Passwords missmatch') new_user = { 'name': values['name'], @@ -34,24 +29,11 @@ class signup_signup(osv.TransientModel): 'active': True, } - user_template_id = self.pool.get('ir.config_parameter').get_param(cr, uid, 'signup.user_template_id', 0) + user_template_id = self.pool.get('ir.config_parameter').get_param(cr, uid, 'auth.signup_template_user_id', 0) if user_template_id: self.pool.get('res.users').copy(cr, 1, user_template_id, new_user, context=context) else: self.pool.get('res.users').create(cr, 1, new_user, context=context) - # Dont store the password - values = {'state': 'done'} - return super(signup_signup, self).create(cr, uid, values, context) - - def signup(self, cr, uid, ids, context=None): - return { - 'type': 'ir.actions.client', - 'tag': 'login', - } - - def onchange_pw(self, cr, uid, ids, pw, cpw, context=None): - if pw != cpw: - return {'value': {'state': 'missmatch'}} - return {'value': {'state': 'draft'}} - + # Dont store anything + return 0 diff --git a/addons/signup/res_config.py b/addons/auth_signup/res_config.py similarity index 57% rename from addons/signup/res_config.py rename to addons/auth_signup/res_config.py index 3dfc7fadbdc..2828a2b55fd 100644 --- a/addons/signup/res_config.py +++ b/addons/auth_signup/res_config.py @@ -4,17 +4,16 @@ class base_config_settings(osv.TransientModel): _inherit = 'base.config.settings' _columns = { - 'signup_template_user_id': fields.many2one('res.users', 'Template user for new users created through signup') + 'auth_signup_template_user_id': fields.many2one('res.users', 'Template user for new users created through signup') } def get_default_signup(self, cr, uid, fields, context=None): icp = self.pool.get('ir.config_parameter') return { - 'signup_template_user_id': icp.get_param(cr, uid, 'signup.template_user_id', 0) or False + 'auth_signup_template_user_id': icp.get_param(cr, uid, 'auth.signup_template_user_id', 0) or False } def set_signup(self, cr, uid, ids, context=None): config = self.browse(cr, uid, ids[0], context=context) icp = self.pool.get('ir.config_parameter') - icp.set_param(cr, uid, 'signup.template_user_id', config.signup_user_template_id.id) - + icp.set_param(cr, uid, 'auth.signup_template_user_id', config.auth_signup_template_user_id.id) diff --git a/addons/signup/res_config.xml b/addons/auth_signup/res_config.xml similarity index 82% rename from addons/signup/res_config.xml rename to addons/auth_signup/res_config.xml index 6c4f7e921eb..d30d383ecdb 100644 --- a/addons/signup/res_config.xml +++ b/addons/auth_signup/res_config.xml @@ -13,8 +13,8 @@
    diff --git a/addons/signup/signup.xml b/addons/auth_signup/signup.xml similarity index 100% rename from addons/signup/signup.xml rename to addons/auth_signup/signup.xml diff --git a/addons/auth_signup/static/src/css/auth_signup.css b/addons/auth_signup/static/src/css/auth_signup.css new file mode 100644 index 00000000000..1e8d7d9d8d8 --- /dev/null +++ b/addons/auth_signup/static/src/css/auth_signup.css @@ -0,0 +1,9 @@ +.openerp .oe_login .oe_login_pane ul.oe_signup a { + color: #eeeeee; + margin: 0 8px; +} +.openerp .oe_login .oe_login_pane ul.oe_signup a:hover { + text-decoration: underline; +} + + diff --git a/addons/auth_signup/static/src/js/auth_signup.js b/addons/auth_signup/static/src/js/auth_signup.js new file mode 100644 index 00000000000..7384fe1e5f5 --- /dev/null +++ b/addons/auth_signup/static/src/js/auth_signup.js @@ -0,0 +1,105 @@ +openerp.auth_signup = function(instance) { + var _t = instance.web._t; + + instance.web.Login.include({ + start: function() { + var self = this; + + this.$('a.oe_signup').click(function() { + var db = self.$("form [name=db]").val(); + if (!db) { + self.do_warn(_t("Login"), _t("No database selected!")); + return false; + } + + var cnx = instance.connection; + if (cnx.session_is_valid()) { + self._signup(); + } else { + cnx.session_authenticate(db, 'anonymous', 'anonymous', true).then(function() { + self._signup(); + }).fail(function(error, event) { + console.log(error); + // cannot log as anonymous or auth_signup not installed + self.do_warn(_t('Sign Up'), _.str.sprintf(_t('Signup functionnality is not available for database %s'), db), true); + }); + } + return true; + }); + return this._super(); + + }, + + _signup: function() { + this.do_action({ + type: 'ir.actions.client', + tag: 'auth_signup.signup', + target: 'new', + name: 'Sign up' + }); + } + }); + + + instance.auth_signup = instance.auth_signup || {}; + instance.auth_signup.Signup = instance.web.Widget.extend({ + template: 'auth_signup.signup', + init: function() { + this._super.apply(this, arguments); + this.dataset = new instance.web.DataSet(this, 'auth.signup'); + }, + start: function() { + var self = this; + this.$('input[type=password]').change(function() { + var v = $(this).val(); + var e = !_.isEmpty(v); + if (e) { + e =_.all(self.$('input[type=password]'), function(i) { + return $(i).val() === v; + }); + } + var $b = self.$('button'); + if (e) { + $b.removeAttr('disabled'); + } else { + $b.attr('disabled', 'disabled'); + } + }); + + this.$('form').submit(function(ev) { + if(ev) { + ev.preventDefault(); + } + var name = self.$('input[name=name]').val(); + var email = self.$('input[name=email]').val(); + var password = self.$('input[name=password]').val(); + + self.dataset.create({ + name: name, + email: email, + password: password + }, function() { + self.do_action({ + type: 'ir.actions.client', + tag: 'login', + params: { + db: instance.connection.db, + login: email, + password: password, + login_successful: function() { + self.do_action('home'); + } + } + }); + }); + return false; + + }); + return $.when(this._super()); + } + + }); + instance.web.client_actions.add("auth_signup.signup", "instance.auth_signup.Signup"); + + +}; diff --git a/addons/auth_signup/static/src/xml/auth_signup.xml b/addons/auth_signup/static/src/xml/auth_signup.xml new file mode 100644 index 00000000000..92343d96281 --- /dev/null +++ b/addons/auth_signup/static/src/xml/auth_signup.xml @@ -0,0 +1,28 @@ + + + + + + +
  • + +
  • +
    +
    + + +
    +
    + Name = + Email = + Password = + Confirmation = + +
    +
    +
    + + + +
    diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 1a3d96cbc33..7699256985c 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -37,7 +37,7 @@ def get_datetime(date_field): date_split = date_field.split(' ') if len(date_split) == 1: date_field = date_split[0] + " 00:00:00" - + return datetime.strptime(date_field[:19], '%Y-%m-%d %H:%M:%S') @@ -185,7 +185,7 @@ the rule to mark CC(mail to any other person defined in actions)."), self.post_action(cr, uid, [new_id], model, context=context) return new_id return wrapper - + def _write(self, old_write, model, context=None): """ Return a wrapper around `old_write` calling both `old_write` and @@ -327,7 +327,7 @@ the rule to mark CC(mail to any other person defined in actions)."), reply_to = emailfrom if not emailfrom: raise osv.except_osv(_('Error!'), - _("No Email ID Found for your Company address!")) + _("No email ID found for your company address.")) return mail_message.schedule_with_attach(cr, uid, emailfrom, emails, name, body, model='base.action.rule', reply_to=reply_to, res_id=obj.id) @@ -490,7 +490,7 @@ the rule to mark CC(mail to any other person defined in actions)."), return True _constraints = [ - (_check_mail, 'Error: The mail is not well formated', ['act_mail_body']), + (_check_mail, 'Error ! The mail is not well formated.', ['act_mail_body']), ] base_action_rule() diff --git a/addons/base_action_rule/i18n/ar.po b/addons/base_action_rule/i18n/ar.po index af5bd10d9d7..dad10fc9d06 100644 --- a/addons/base_action_rule/i18n/ar.po +++ b/addons/base_action_rule/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/bg.po b/addons/base_action_rule/i18n/bg.po index b05fac2f8e5..00ac1646476 100644 --- a/addons/base_action_rule/i18n/bg.po +++ b/addons/base_action_rule/i18n/bg.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/bs.po b/addons/base_action_rule/i18n/bs.po index c6b4fb00ea5..1d0b81fc3ea 100644 --- a/addons/base_action_rule/i18n/bs.po +++ b/addons/base_action_rule/i18n/bs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/ca.po b/addons/base_action_rule/i18n/ca.po index cac6c06376e..f612d5a0a8f 100644 --- a/addons/base_action_rule/i18n/ca.po +++ b/addons/base_action_rule/i18n/ca.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/da.po b/addons/base_action_rule/i18n/da.po index 5a168088dfa..938b822eab3 100644 --- a/addons/base_action_rule/i18n/da.po +++ b/addons/base_action_rule/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/de.po b/addons/base_action_rule/i18n/de.po index 00783b2c2f3..f24a0dee05e 100644 --- a/addons/base_action_rule/i18n/de.po +++ b/addons/base_action_rule/i18n/de.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/el.po b/addons/base_action_rule/i18n/el.po index 2987f762260..06491b0a9fd 100644 --- a/addons/base_action_rule/i18n/el.po +++ b/addons/base_action_rule/i18n/el.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/es.po b/addons/base_action_rule/i18n/es.po index f60ac9c4b67..e4c51fa1199 100644 --- a/addons/base_action_rule/i18n/es.po +++ b/addons/base_action_rule/i18n/es.po @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/es_CR.po b/addons/base_action_rule/i18n/es_CR.po index d30bc9ac4a3..3e1c5732fd1 100644 --- a/addons/base_action_rule/i18n/es_CR.po +++ b/addons/base_action_rule/i18n/es_CR.po @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" "Language: es\n" #. module: base_action_rule diff --git a/addons/base_action_rule/i18n/es_EC.po b/addons/base_action_rule/i18n/es_EC.po index 9d5f317fb35..b17bef384aa 100644 --- a/addons/base_action_rule/i18n/es_EC.po +++ b/addons/base_action_rule/i18n/es_EC.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/es_PY.po b/addons/base_action_rule/i18n/es_PY.po index 7cf4a3839c3..6380bc04f9e 100644 --- a/addons/base_action_rule/i18n/es_PY.po +++ b/addons/base_action_rule/i18n/es_PY.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/fa.po b/addons/base_action_rule/i18n/fa.po index 149d26b4b66..ef2a5f92039 100644 --- a/addons/base_action_rule/i18n/fa.po +++ b/addons/base_action_rule/i18n/fa.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/fi.po b/addons/base_action_rule/i18n/fi.po index 90a4c0173e2..2ae3bd6bd94 100644 --- a/addons/base_action_rule/i18n/fi.po +++ b/addons/base_action_rule/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/fr.po b/addons/base_action_rule/i18n/fr.po index ab26747b239..31715853a68 100644 --- a/addons/base_action_rule/i18n/fr.po +++ b/addons/base_action_rule/i18n/fr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/gl.po b/addons/base_action_rule/i18n/gl.po index 9e947dfdcb7..5d794b1d41e 100644 --- a/addons/base_action_rule/i18n/gl.po +++ b/addons/base_action_rule/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/gu.po b/addons/base_action_rule/i18n/gu.po index d6b072d01d9..ca6059780bf 100644 --- a/addons/base_action_rule/i18n/gu.po +++ b/addons/base_action_rule/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/hr.po b/addons/base_action_rule/i18n/hr.po index 41b93ae8840..cc40b2a8fe0 100644 --- a/addons/base_action_rule/i18n/hr.po +++ b/addons/base_action_rule/i18n/hr.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/hu.po b/addons/base_action_rule/i18n/hu.po index e39b1f4a344..c70333c8593 100644 --- a/addons/base_action_rule/i18n/hu.po +++ b/addons/base_action_rule/i18n/hu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/it.po b/addons/base_action_rule/i18n/it.po index 77068bb94d6..b951d476c6c 100644 --- a/addons/base_action_rule/i18n/it.po +++ b/addons/base_action_rule/i18n/it.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/ja.po b/addons/base_action_rule/i18n/ja.po index 2cd8946658d..aa831b0a595 100644 --- a/addons/base_action_rule/i18n/ja.po +++ b/addons/base_action_rule/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/lt.po b/addons/base_action_rule/i18n/lt.po index 310ff116a5d..a501963ea77 100644 --- a/addons/base_action_rule/i18n/lt.po +++ b/addons/base_action_rule/i18n/lt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/lv.po b/addons/base_action_rule/i18n/lv.po index a0a895ea52e..52940e160cf 100644 --- a/addons/base_action_rule/i18n/lv.po +++ b/addons/base_action_rule/i18n/lv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/mn.po b/addons/base_action_rule/i18n/mn.po index cf7e405aefd..168725af3b9 100644 --- a/addons/base_action_rule/i18n/mn.po +++ b/addons/base_action_rule/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/nl.po b/addons/base_action_rule/i18n/nl.po index 4497e52cfbe..b70d99d873f 100644 --- a/addons/base_action_rule/i18n/nl.po +++ b/addons/base_action_rule/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/pl.po b/addons/base_action_rule/i18n/pl.po index 25e477502c5..da30bd781ef 100644 --- a/addons/base_action_rule/i18n/pl.po +++ b/addons/base_action_rule/i18n/pl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/pt.po b/addons/base_action_rule/i18n/pt.po index aa151d7ce52..fadf1cf4a3d 100644 --- a/addons/base_action_rule/i18n/pt.po +++ b/addons/base_action_rule/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/pt_BR.po b/addons/base_action_rule/i18n/pt_BR.po index c2e28939410..b50b6fe73e7 100644 --- a/addons/base_action_rule/i18n/pt_BR.po +++ b/addons/base_action_rule/i18n/pt_BR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/ro.po b/addons/base_action_rule/i18n/ro.po index 7c7b1cfe623..77f7cbe419a 100644 --- a/addons/base_action_rule/i18n/ro.po +++ b/addons/base_action_rule/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/ru.po b/addons/base_action_rule/i18n/ru.po index c26172223d3..85ec32c4367 100644 --- a/addons/base_action_rule/i18n/ru.po +++ b/addons/base_action_rule/i18n/ru.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/sl.po b/addons/base_action_rule/i18n/sl.po index 15e158fe318..50e71449103 100644 --- a/addons/base_action_rule/i18n/sl.po +++ b/addons/base_action_rule/i18n/sl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/sq.po b/addons/base_action_rule/i18n/sq.po index a9de15fe6b1..d92f72b679e 100644 --- a/addons/base_action_rule/i18n/sq.po +++ b/addons/base_action_rule/i18n/sq.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/sr.po b/addons/base_action_rule/i18n/sr.po index ce91e8eef62..d8a0102b30f 100644 --- a/addons/base_action_rule/i18n/sr.po +++ b/addons/base_action_rule/i18n/sr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/sr@latin.po b/addons/base_action_rule/i18n/sr@latin.po index 9d914bc1e2b..4d471d2c230 100644 --- a/addons/base_action_rule/i18n/sr@latin.po +++ b/addons/base_action_rule/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/sv.po b/addons/base_action_rule/i18n/sv.po index 82994b49ef4..bcc7ec3c4bf 100644 --- a/addons/base_action_rule/i18n/sv.po +++ b/addons/base_action_rule/i18n/sv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/tr.po b/addons/base_action_rule/i18n/tr.po index d0c16b08b7c..75fa9df83b3 100644 --- a/addons/base_action_rule/i18n/tr.po +++ b/addons/base_action_rule/i18n/tr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/zh_CN.po b/addons/base_action_rule/i18n/zh_CN.po index e68da4375f4..1dc78ba4bad 100644 --- a/addons/base_action_rule/i18n/zh_CN.po +++ b/addons/base_action_rule/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_action_rule/i18n/zh_TW.po b/addons/base_action_rule/i18n/zh_TW.po index 3baffe9e4f2..803c62dd641 100644 --- a/addons/base_action_rule/i18n/zh_TW.po +++ b/addons/base_action_rule/i18n/zh_TW.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-07 05:34+0000\n" -"X-Generator: Launchpad (build 15745)\n" +"X-Launchpad-Export-Date: 2012-08-09 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index d14e0001be1..b570c2ef011 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -48,18 +48,18 @@ def get_recurrent_dates(rrulestring, exdate, startdate=None, exrule=None): def todate(date): val = parser.parse(''.join((re.compile('\d')).findall(date))) return val - + if not startdate: startdate = datetime.now() - + if not exdate: exdate = [] - + rset1 = rrule.rrulestr(str(rrulestring), dtstart=startdate, forceset=True) for date in exdate: datetime_obj = todate(date) rset1._exdate.append(datetime_obj) - + if exrule: rset1.exrule(rrule.rrulestr(str(exrule), dtstart=startdate)) @@ -413,7 +413,7 @@ property or property parameter."), cal = vobject.iCalendar() event = cal.add('vevent') if not event_obj.date_deadline or not event_obj.date: - raise osv.except_osv(_('Warning !'),_("Couldn't Invite because date is not specified!")) + raise osv.except_osv(_('Warning!'),_("First you have to specify the date of the invitation.")) event.add('created').value = ics_datetime(time.strftime('%Y-%m-%d %H:%M:%S')) event.add('dtstart').value = ics_datetime(event_obj.date) event.add('dtend').value = ics_datetime(event_obj.date_deadline) @@ -995,17 +995,17 @@ class calendar_event(osv.osv): @param context: A standard dictionary for contextual values @return: dictionary of rrule value. """ - + result = {} if not isinstance(ids, list): ids = [ids] - + for datas in self.read(cr, uid, ids, ['id','byday','recurrency', 'month_list','end_date', 'rrule_type', 'select1', 'interval', 'count', 'end_type', 'mo', 'tu', 'we', 'th', 'fr', 'sa', 'su', 'exrule', 'day', 'week_list' ], context=context): event = datas['id'] if datas.get('interval', 0) < 0: - raise osv.except_osv(_('Warning!'), _('Interval cannot be negative')) + raise osv.except_osv(_('Warning!'), _('Interval cannot be negative.')) if datas.get('count', 0) < 0: - raise osv.except_osv(_('Warning!'), _('Count cannot be negative')) + raise osv.except_osv(_('Warning!'), _('Count cannot be negative.')) if datas['recurrency']: result[event] = self.compute_rule_string(datas) else: @@ -1092,7 +1092,7 @@ rule or repeating pattern of time to exclude from the recurring rule."), true, it will allow you to hide the event alarm information without removing it."), 'recurrency': fields.boolean('Recurrent', help="Recurrent Meeting"), } - + def default_organizer(self, cr, uid, context=None): user_pool = self.pool.get('res.users') user = user_pool.browse(cr, uid, uid, context=context) @@ -1189,23 +1189,23 @@ rule or repeating pattern of time to exclude from the recurring rule."), byday = map(lambda x: x.upper(), filter(lambda x: datas.get(x) and x in weekdays, datas)) if byday: return ';BYDAY=' + ','.join(byday) - return '' - + return '' + def get_month_string(freq, datas): if freq == 'monthly': if datas.get('select1')=='date' and (datas.get('day') < 1 or datas.get('day') > 31): - raise osv.except_osv(_('Error!'), ("Please select proper Day of month")) - + raise osv.except_osv(_('Error!'), ("Please select a proper day of the month.")) + if datas.get('select1')=='day': return ';BYDAY=' + datas.get('byday') + datas.get('week_list') elif datas.get('select1')=='date': return ';BYMONTHDAY=' + str(datas.get('day')) return '' - + def get_end_date(datas): if datas.get('end_date'): datas['end_date_new'] = ''.join((re.compile('\d')).findall(datas.get('end_date'))) + 'T235959Z' - + return (datas.get('end_type') == 'count' and (';COUNT=' + str(datas.get('count'))) or '') +\ ((datas.get('end_date_new') and datas.get('end_type') == 'end_date' and (';UNTIL=' + datas.get('end_date_new'))) or '') @@ -1216,32 +1216,32 @@ rule or repeating pattern of time to exclude from the recurring rule."), interval_srting = datas.get('interval') and (';INTERVAL=' + str(datas.get('interval'))) or '' return 'FREQ=' + freq.upper() + get_week_string(freq, datas) + interval_srting + get_end_date(datas) + get_month_string(freq, datas) - + def _get_empty_rrule_data(self): return { 'byday' : False, 'recurrency' : False, - 'end_date' : False, - 'rrule_type' : False, - 'select1' : False, - 'interval' : 0, - 'count' : False, - 'end_type' : False, - 'mo' : False, - 'tu' : False, - 'we' : False, - 'th' : False, - 'fr' : False, - 'sa' : False, - 'su' : False, - 'exrule' : False, - 'day' : False, + 'end_date' : False, + 'rrule_type' : False, + 'select1' : False, + 'interval' : 0, + 'count' : False, + 'end_type' : False, + 'mo' : False, + 'tu' : False, + 'we' : False, + 'th' : False, + 'fr' : False, + 'sa' : False, + 'su' : False, + 'exrule' : False, + 'day' : False, 'week_list' : False } #def _write_rrule(self, cr, uid, ids, field_value, rule_date=False, context=None): # data = self._get_empty_rrule_data() - # + # # if field_value: # data['recurrency'] = True # for event in self.browse(cr, uid, ids, context=context): @@ -1250,16 +1250,16 @@ rule or repeating pattern of time to exclude from the recurring rule."), # data.update(update_data) # #parse_rrule # self.write(cr, uid, event.id, data, context=context) - + def _parse_rrule(self, rule, data, date_start): day_list = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su'] rrule_type = ['yearly', 'monthly', 'weekly', 'daily'] r = rrule.rrulestr(rule, dtstart=datetime.strptime(date_start, "%Y-%m-%d %H:%M:%S")) - + if r._freq > 0 and r._freq < 4: data['rrule_type'] = rrule_type[r._freq] - + data['count'] = r._count data['interval'] = r._interval data['end_date'] = r._until and r._until.strftime("%Y-%m-%d %H:%M:%S") @@ -1270,36 +1270,36 @@ rule or repeating pattern of time to exclude from the recurring rule."), data[day_list[i]] = True data['rrule_type'] = 'weekly' #repeat monthly bynweekday ((weekday, weeknumber), ) - if r._bynweekday: + if r._bynweekday: data['week_list'] = day_list[r._bynweekday[0][0]].upper() data['byday'] = r._bynweekday[0][1] data['select1'] = 'day' - data['rrule_type'] = 'monthly' - + data['rrule_type'] = 'monthly' + if r._bymonthday: data['day'] = r._bymonthday[0] data['select1'] = 'date' data['rrule_type'] = 'monthly' - + #yearly but for openerp it's monthly, take same information as monthly but interval is 12 times if r._bymonth: data['interval'] = data['interval'] * 12 - + #FIXEME handle forever case - #end of recurrence + #end of recurrence #in case of repeat for ever that we do not support right now if not (data.get('count') or data.get('end_date')): data['count'] = 100 if data.get('count'): data['end_type'] = 'count' else: - data['end_type'] = 'end_date' - return data + data['end_type'] = 'end_date' + return data def remove_virtual_id(self, ids): if isinstance(ids, (str, int, long)): return base_calendar_id2real_id(ids) - + if isinstance(ids, (list, tuple)): res = [] for id in ids: @@ -1345,7 +1345,7 @@ rule or repeating pattern of time to exclude from the recurring rule."), def need_to_update(self, event_id, vals): split_id = str(event_id).split("-") if len(split_id) < 2: - return False + return False else: date_start = vals.get('date', '') try: @@ -1409,9 +1409,9 @@ rule or repeating pattern of time to exclude from the recurring rule."), def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False): if not context: context = {} - + if 'date' in groupby: - raise osv.except_osv(_('Warning !'), _('Group by date not supported, use the calendar view instead')) + raise osv.except_osv(_('Warning!'), _('Group by date is not supported, use the calendar view instead.')) virtual_id = context.get('virtual_id', True) context.update({'virtual_id': False}) res = super(calendar_event, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby) @@ -1479,7 +1479,7 @@ rule or repeating pattern of time to exclude from the recurring rule."), def copy(self, cr, uid, id, default=None, context=None): if context is None: context = {} - + res = super(calendar_event, self).copy(cr, uid, base_calendar_id2real_id(id), default, context) alarm_obj = self.pool.get('res.alarm') alarm_obj.do_alarm_create(cr, uid, [res], self._name, 'date', context=context) diff --git a/addons/base_calendar/base_calendar_view.xml b/addons/base_calendar/base_calendar_view.xml index d48795173ed..0e12d835710 100644 --- a/addons/base_calendar/base_calendar_view.xml +++ b/addons/base_calendar/base_calendar_view.xml @@ -12,7 +12,7 @@
    - + colspan="4" required="1"/> + + on_change="onchange_dates(date,duration,False,allday)"/> - + on_change="onchange_dates(date,False,date_deadline)"/> + + widget="selection"/> @@ -222,11 +222,11 @@ - + - - + + @@ -241,31 +241,31 @@ - - - + + +