From 19de91d4b9da23bf27b44b45bca814a5e1ad5405 Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Wed, 15 Feb 2012 17:33:31 +0530 Subject: [PATCH 001/165] [FIX]purchase: removed wait ad wait_auth which unnecessary lp bug: https://launchpad.net/bugs/932059 fixed bzr revid: mma@tinyerp.com-20120215120331-7uc0ybsv90oayfw2 --- addons/purchase/purchase.py | 1 - addons/purchase/purchase_view.xml | 3 +-- addons/purchase_requisition/purchase_requisition.py | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 5432067191d..b7c757c7468 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -143,7 +143,6 @@ class purchase_order(osv.osv): STATE_SELECTION = [ ('draft', 'Request for Quotation'), - ('wait', 'Waiting'), ('confirmed', 'Waiting Approval'), ('approved', 'Approved'), ('except_picking', 'Shipping Exception'), diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index ec53ae76a7a..c72c985d8fa 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -196,13 +196,12 @@ - - - - -
-

Followers

-
    -
    - - -
  • - - -
  • - +
    +
    + + + +
    +
    +

    Followers

    +
      +
      +
      + + +
    • + + +
    • + + From 2da4b1b3f5ed22289fb8db6d664b4e5dabd12810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 10 Aug 2012 16:05:49 +0200 Subject: [PATCH 040/165] [FIX] base.sql: added a partner_id integer field on res.users, to avoid the ORM being unable to set a not null constraint on it. bzr revid: tde@openerp.com-20120810140549-w70l7nzwn4kt1oav --- openerp/addons/base/base.sql | 3 ++- openerp/addons/base/res/res_users.py | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/openerp/addons/base/base.sql b/openerp/addons/base/base.sql index 7b532736165..c6ca6dbb76d 100644 --- a/openerp/addons/base/base.sql +++ b/openerp/addons/base/base.sql @@ -155,6 +155,7 @@ CREATE TABLE res_users ( -- No FK references below, will be added later by ORM -- (when the destination rows exist) company_id int, + partner_id int, primary key(id) ); alter table res_users add constraint res_users_login_uniq unique (login); @@ -383,7 +384,7 @@ CREATE TABLE ir_model_relation ( -- Users --------------------------------- -insert into res_users (id,login,password,name,active,company_id,lang) values (1,'admin','admin','Administrator',True,1,'en_US'); +insert into res_users (id,login,password,name,active,company_id,partner_id,lang) values (1,'admin','admin','Administrator',True,1,1,'en_US'); insert into ir_model_data (name,module,model,noupdate,res_id) values ('user_root','base','res.users',True,1); -- Compatibility purpose, to remove V6.0 diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 93291cb2bdd..ab3674a09d9 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -152,13 +152,13 @@ class users(osv.osv): # context is set. 'company_id': fields.many2one('res.company', 'Company', required=True, help='The company this user is currently working for.', context={'user_preference': True}), - 'context_company_id': fields.many2one('res.company', 'Company', required=True, - help='The company this user is currently working for.', context={'user_preference': True}), + # 'context_company_id': fields.many2one('res.company', 'Company', required=True, + # help='The company this user is currently working for.', context={'user_preference': True}), 'company_ids':fields.many2many('res.company','res_company_users_rel','user_id','cid','Companies'), # backward compatibility fields 'user_email': fields.related('email', type='char', deprecated='Use the email field instead of user_email. This field will be removed as of OpenERP 7.1.'), - 'date': fields.related('date', type='date', + 'date': fields.related('date', type='date', store=True, deprecated='use the login_date field instead of date. This field will be removed as of OpenERP 7.1.'), } From 7657aedc4ea77c9ad38fb1e177872d4d6c888837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 10 Aug 2012 16:12:19 +0200 Subject: [PATCH 041/165] [IMP] auth_ldap, auth_openid, base_crypt: update login_date instead of date on res.users. bzr revid: tde@openerp.com-20120810141219-qa0howq34k03ynxh --- addons/auth_ldap/users_ldap.py | 2 +- addons/auth_openid/res_users.py | 2 +- addons/base_crypt/crypt.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/auth_ldap/users_ldap.py b/addons/auth_ldap/users_ldap.py index e4615907c79..47fc41c3645 100644 --- a/addons/auth_ldap/users_ldap.py +++ b/addons/auth_ldap/users_ldap.py @@ -255,7 +255,7 @@ class users(osv.osv): cr, SUPERUSER_ID, conf, login, entry) if user_id: cr.execute("""UPDATE res_users - SET date=now() AT TIME ZONE 'UTC' + SET login_date=now() AT TIME ZONE 'UTC' WHERE login=%s""", (tools.ustr(login),)) cr.commit() diff --git a/addons/auth_openid/res_users.py b/addons/auth_openid/res_users.py index 3fb8cefcbd4..506c7e1c094 100644 --- a/addons/auth_openid/res_users.py +++ b/addons/auth_openid/res_users.py @@ -66,7 +66,7 @@ class res_users(osv.osv): else: with utils.cursor(db) as cr: cr.execute("""UPDATE res_users - SET date=now() AT TIME ZONE 'UTC' + SET login_date=now() AT TIME ZONE 'UTC' WHERE login=%s AND openid_key=%s AND active=%s RETURNING id""", (tools.ustr(login), tools.ustr(password), True)) res = cr.fetchone() diff --git a/addons/base_crypt/crypt.py b/addons/base_crypt/crypt.py index f7e200560a3..b27dad22363 100644 --- a/addons/base_crypt/crypt.py +++ b/addons/base_crypt/crypt.py @@ -213,7 +213,7 @@ class users(osv.osv): # Check if the encrypted password matches against the one in the db. cr.execute("""UPDATE res_users - SET date=now() AT TIME ZONE 'UTC' + SET login_date=now() AT TIME ZONE 'UTC' WHERE id=%s AND password=%s AND active RETURNING id""", (int(id), encrypted_pw.encode('utf-8'))) From 18f1bd6fb5c7092efdffb1ad7e3fd905ecbcd96b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 10 Aug 2012 16:12:34 +0200 Subject: [PATCH 042/165] [IMP] res_users: update login_date instead of date at login. bzr revid: tde@openerp.com-20120810141234-yntr5ye3evepjakg --- openerp/addons/base/res/res_users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index ab3674a09d9..66fa4f420de 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -372,7 +372,7 @@ class users(osv.osv): AND active FOR UPDATE NOWAIT""", (tools.ustr(login), tools.ustr(password))) cr.execute("""UPDATE res_users - SET date = now() AT TIME ZONE 'UTC' + SET login_date = now() AT TIME ZONE 'UTC' WHERE login=%s AND password=%s AND active RETURNING id""", (tools.ustr(login), tools.ustr(password))) From 620b7e9b118f102d03aed6935ac1978fd2963809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 10 Aug 2012 16:43:39 +0200 Subject: [PATCH 043/165] [IMP] Addons: user_email -> email. bzr revid: tde@openerp.com-20120810144339-30ro9omgfxtjtjyz --- addons/account/edi/invoice_action_data.xml | 8 ++++---- .../cron_account_analytic_account.py | 4 ++-- addons/auth_signup/auth_signup.py | 4 ++-- addons/base_action_rule/base_action_rule.py | 8 ++++---- addons/base_status/base_stage.py | 14 +++++++------- addons/base_status/base_state.py | 2 +- addons/crm/crm_action_rule.py | 4 ++-- addons/crm/crm_lead.py | 6 +++--- .../wizard/crm_forward_to_partner.py | 13 +++++-------- addons/event/email_template.xml | 4 ++-- addons/event/event.py | 2 +- addons/hr/hr.py | 2 +- addons/hr_recruitment/hr_recruitment.py | 2 +- addons/lunch/report/order.rml | 2 +- addons/mail/data/mail_group_data.xml | 2 +- addons/mail/mail_message.py | 11 ++++++++--- addons/mail/mail_thread.py | 10 +++++----- addons/mail/res_users.py | 15 ++++++++++----- addons/mail/wizard/mail_compose_message.py | 6 +++--- addons/portal_crm/wizard/contact.py | 2 +- addons/project/project.py | 2 +- addons/project_issue/project_issue.py | 2 +- addons/project_mailgate/project_mailgate.py | 2 +- .../edi/purchase_order_action_data.xml | 8 ++++---- addons/sale/edi/sale_order_action_data.xml | 8 ++++---- addons/share/wizard/share_wizard.py | 18 +++++++++--------- addons/survey/survey.py | 2 +- addons/survey/wizard/survey_answer.py | 4 ++-- 28 files changed, 87 insertions(+), 80 deletions(-) diff --git a/addons/account/edi/invoice_action_data.xml b/addons/account/edi/invoice_action_data.xml index ce837c6662b..0eec6d27785 100644 --- a/addons/account/edi/invoice_action_data.xml +++ b/addons/account/edi/invoice_action_data.xml @@ -38,7 +38,7 @@ Automated Invoice Notification Mail - ${object.user_id.user_email or object.company_id.email or 'noreply@localhost'} + ${object.user_id.email or object.company_id.email or 'noreply@localhost'} ${object.company_id.name} Invoice (Ref ${object.number or 'n/a' }) ${object.partner_id.email or ''} @@ -58,7 +58,7 @@ % if object.origin:   Order reference: ${object.origin}
      % endif -   Your contact: ${object.user_id.name} +   Your contact: ${object.user_id.name}

      @@ -133,7 +133,7 @@ A new invoice is available for ${object.partner_id.name}: % if object.origin: | Order reference: ${object.origin} % endif - | Your contact: ${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''} + | Your contact: ${object.user_id.name} ${object.user_id.email and '<%s>'%(object.user_id.email) or ''} You can view the invoice document, download it and pay online using the following link: ${ctx.get('edi_web_url_view') or 'n/a'} @@ -160,7 +160,7 @@ Thank you for choosing ${object.company_id.name}! -- -${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''} +${object.user_id.name} ${object.user_id.email and '<%s>'%(object.user_id.email) or ''} ${object.company_id.name} % if object.company_id.street: ${object.company_id.street or ''} diff --git a/addons/account_analytic_analysis/cron_account_analytic_account.py b/addons/account_analytic_analysis/cron_account_analytic_account.py index caa9067b227..065fdc5b907 100644 --- a/addons/account_analytic_analysis/cron_account_analytic_account.py +++ b/addons/account_analytic_analysis/cron_account_analytic_account.py @@ -53,7 +53,7 @@ class analytic_account(osv.osv): ('name', 'not ilike', 'maintenance'), ('partner_id', '!=', False), ('user_id', '!=', False), - ('user_id.user_email', '!=', False), + ('user_id.email', '!=', False), ('state', 'in', ('draft', 'open')), '|', ('date', '<', time.strftime('%Y-%m-%d')), ('date', '=', False), ] @@ -70,7 +70,7 @@ class analytic_account(osv.osv): for user, data in users.iteritems(): subject = '[OPENERP] Reporting: Analytic Accounts' body = Template(MAKO_TEMPLATE).render_unicode(user=user, partners=data) - tools.email_send('noreply@openerp.com', [user.user_email, ], subject, body) + tools.email_send('noreply@openerp.com', [user.email, ], subject, body) return True diff --git a/addons/auth_signup/auth_signup.py b/addons/auth_signup/auth_signup.py index ebc72b3aeac..fedce607206 100644 --- a/addons/auth_signup/auth_signup.py +++ b/addons/auth_signup/auth_signup.py @@ -4,7 +4,7 @@ class res_users(osv.Model): _inherit = 'res.users' _sql_constraints = [ - ('email_uniq', 'UNIQUE (user_email)', 'You can not have two users with the same email!') + ('email_uniq', 'UNIQUE (email)', 'You can not have two users with the same email!') ] class signup_signup(osv.TransientModel): @@ -24,7 +24,7 @@ class signup_signup(osv.TransientModel): new_user = { 'name': values['name'], 'login': values['email'], - 'user_email': values['email'], + 'email': values['email'], 'password': values['password'], 'active': True, } diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 7699256985c..b6eacda63c0 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -292,7 +292,7 @@ the rule to mark CC(mail to any other person defined in actions)."), 'object_description': hasattr(obj, 'description') and obj.description or False, 'object_user': hasattr(obj, 'user_id') and (obj.user_id and obj.user_id.name) or '/', 'object_user_email': hasattr(obj, 'user_id') and (obj.user_id and \ - obj.user_id.user_email) or '/', + obj.user_id.email) or '/', 'object_user_phone': hasattr(obj, 'partner_address_id') and (obj.partner_address_id and \ obj.partner_address_id.phone) or '/', 'partner': hasattr(obj, 'partner_id') and (obj.partner_id and obj.partner_id.name) or '/', @@ -319,8 +319,8 @@ the rule to mark CC(mail to any other person defined in actions)."), mail_message = self.pool.get('mail.message') body = self.format_mail(obj, body) if not emailfrom: - if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.user_email: - emailfrom = obj.user_id.user_email + if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.email: + emailfrom = obj.user_id.email name = '[%d] %s' % (obj.id, tools.ustr(obj.name)) emailfrom = tools.ustr(emailfrom) @@ -419,7 +419,7 @@ the rule to mark CC(mail to any other person defined in actions)."), emails = [] if hasattr(obj, 'user_id') and action.act_mail_to_user: if obj.user_id: - emails.append(obj.user_id.user_email) + emails.append(obj.user_id.email) if action.act_mail_to_watchers: emails += (action.act_email_cc or '').split(',') diff --git a/addons/base_status/base_stage.py b/addons/base_status/base_stage.py index 44e9de89162..775de51394c 100644 --- a/addons/base_status/base_stage.py +++ b/addons/base_status/base_stage.py @@ -57,7 +57,7 @@ class base_stage(object): if not context or not context.get('portal'): return False user = self.pool.get('res.users').browse(cr, uid, uid, context=context) - return user.user_email + return user.email def _get_default_user(self, cr, uid, context=None): """ Gives current user id @@ -301,15 +301,15 @@ class base_stage(object): for case in self.browse(cr, uid, ids, context=context): if not destination and not case.email_from: return False - if not case.user_id.user_email: + if not case.user_id.email: return False if destination and case.section_id.user_id: - case_email = case.section_id.user_id.user_email + case_email = case.section_id.user_id.email else: - case_email = case.user_id.user_email + case_email = case.user_id.email src = case_email - dest = case.user_id.user_email or "" + dest = case.user_id.email or "" body = case.description or "" for message in case.message_ids: if message.email_from and message.body_text: @@ -366,8 +366,8 @@ class base_stage(object): l=[] if case.email_cc: l.append(case.email_cc) - if case.user_id and case.user_id.user_email: - l.append(case.user_id.user_email) + if case.user_id and case.user_id.email: + l.append(case.user_id.email) res[case.id] = l return res diff --git a/addons/base_status/base_state.py b/addons/base_status/base_state.py index 4247e67f435..8fa2f92e22a 100644 --- a/addons/base_status/base_state.py +++ b/addons/base_status/base_state.py @@ -55,7 +55,7 @@ class base_state(object): if not context or not context.get('portal'): return False user = self.pool.get('res.users').browse(cr, uid, uid, context=context) - return user.user_email + return user.email def _get_default_user(self, cr, uid, context=None): """ Gives current user id diff --git a/addons/crm/crm_action_rule.py b/addons/crm/crm_action_rule.py index 96d182113c8..3e3bdc90d08 100644 --- a/addons/crm/crm_action_rule.py +++ b/addons/crm/crm_action_rule.py @@ -49,8 +49,8 @@ class base_action_rule(osv.osv): mail_message = self.pool.get('mail.message') body = self.format_mail(obj, body) if not emailfrom: - if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.user_email: - emailfrom = obj.user_id.user_email + if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.email: + emailfrom = obj.user_id.email name = '[%d] %s' % (obj.id, tools.ustr(obj.name)) emailfrom = tools.ustr(emailfrom) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 29d3eefec70..451dd795a94 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -243,7 +243,7 @@ class crm_lead(base_stage, osv.osv): 'partner_address_name': fields.related('partner_id', 'name', type='char', string='Partner Contact Name', readonly=True), 'partner_address_email': fields.related('partner_id', 'email', type='char', string='Partner Contact Email', readonly=True), 'company_currency': fields.related('company_id', 'currency_id', 'symbol', type='char', string='Company Currency', readonly=True), - 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True), + 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True), 'user_login': fields.related('user_id', 'login', type='char', string='User Login', readonly=True), # Fields for address, due to separation from crm and res.partner @@ -692,11 +692,11 @@ class crm_lead(base_stage, osv.osv): """ #TOFIX: mail template should be used here instead of fix subject, body text. message = self.pool.get('mail.message') - email_to = lead.user_id and lead.user_id.user_email + email_to = lead.user_id and lead.user_id.email if not email_to: return False - email_from = lead.section_id and lead.section_id.user_id and lead.section_id.user_id.user_email or email_to + email_from = lead.section_id and lead.section_id.user_id and lead.section_id.user_id.email or email_to partner = lead.partner_id and lead.partner_id.name or lead.partner_name subject = "lead %s converted into opportunity" % lead.name body = "Info \n Id : %s \n Subject: %s \n Partner: %s \n Description : %s " % (lead.id, lead.name, lead.partner_id.name, lead.description) diff --git a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py index 2bc2d67d00a..d479f8b1bd5 100644 --- a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py +++ b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py @@ -43,16 +43,13 @@ class crm_lead_forward_to_partner(osv.osv_memory): _defaults = { 'send_to' : 'email', 'history': 'latest', - 'email_from': lambda self, cr, uid, *a: self.pool.get('res.users')._get_email_from(cr, uid, uid)[uid], + 'email_from': lambda s, cr, uid, c: s.pool.get('res.users').browse(cr, uid, uid, c).email, } - - - def on_change_email(self, cr, uid, ids, user): + def on_change_email(self, cr, uid, ids, user, context=None): if not user: return {'value': {'email_to': False}} - email = self.pool.get('res.users')._get_email_from(cr, uid, [user])[user] - return {'value': {'email_to': email}} + return {'value': {'email_to': self.pool.get('res.users').browse(cr, uid, uid, context=context).email}} def on_change_history(self, cr, uid, ids, history_type, context=None): """Gives message body according to type of history selected @@ -80,7 +77,7 @@ class crm_lead_forward_to_partner(osv.osv_memory): partner = partner_obj.browse(cr, uid, [partner_id]) user_id = partner and partner[0].user_id or False data.update({'email_from': partner and partner[0].email or "", - 'email_cc' : user_id and user_id.user_email or '', + 'email_cc' : user_id and user_id.user or '', 'user_id': user_id and user_id.id or False}) return {'value' : data} @@ -185,7 +182,7 @@ class crm_lead_forward_to_partner(osv.osv_memory): if partner_assigned_id: assigned_partner = partner.browse(cr, uid, partner_assigned_id, context=context) user_id = assigned_partner.user_id and assigned_partner.user_id.id or False - email_cc = assigned_partner.user_id and assigned_partner.user_id.user_email or '' + email_cc = assigned_partner.user_id and assigned_partner.user_id.email or '' email = assigned_partner.email res.update({ diff --git a/addons/event/email_template.xml b/addons/event/email_template.xml index 4485dfc785a..2666ece9921 100644 --- a/addons/event/email_template.xml +++ b/addons/event/email_template.xml @@ -4,7 +4,7 @@ Confirmation of the Event - ${object.user_id.user_email or object.company_id.email or 'noreply@' + object.company_id.name + '.com'} + ${object.user_id.email or object.company_id.email or 'noreply@' + object.company_id.name + '.com'} ${object.email} Your registration at ${object.event_id.name} @@ -24,7 +24,7 @@ Confirmation of the Registration - ${object.user_id.user_email or object.company_id.email or 'noreply@' + object.company_id.name + '.com'} + ${object.user_id.email or object.company_id.email or 'noreply@' + object.company_id.name + '.com'} ${object.email} Your registration at ${object.event_id.name} diff --git a/addons/event/event.py b/addons/event/event.py index 4279b8fcd7e..7f0c77661e4 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -230,7 +230,7 @@ class event_event(osv.osv): curr_reg_ids = register_pool.search(cr, uid, [('user_id', '=', user.id), ('event_id', '=' , ids[0])]) #the subscription is done with SUPERUSER_ID because in case we share the kanban view, we want anyone to be able to subscribe if not curr_reg_ids: - curr_reg_ids = [register_pool.create(cr, SUPERUSER_ID, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id, 'nb_register': num_of_seats})] + curr_reg_ids = [register_pool.create(cr, SUPERUSER_ID, {'event_id': ids[0] ,'email': user.email, 'name':user.name, 'user_id': user.id, 'nb_register': num_of_seats})] else: register_pool.write(cr, uid, curr_reg_ids, {'nb_register': num_of_seats}, context=context) return register_pool.confirm_registration(cr, SUPERUSER_ID, curr_reg_ids, context=context) diff --git a/addons/hr/hr.py b/addons/hr/hr.py index 47432e1f527..966c29cab07 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -252,7 +252,7 @@ class hr_employee(osv.osv): def onchange_user(self, cr, uid, ids, user_id, context=None): work_email = False if user_id: - work_email = self.pool.get('res.users').browse(cr, uid, user_id, context=context).user_email + work_email = self.pool.get('res.users').browse(cr, uid, user_id, context=context).email return {'value': {'work_email' : work_email}} def _get_default_image(self, cr, uid, context=None): diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index 1db79172dc5..ee85ecc22a3 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -228,7 +228,7 @@ class hr_applicant(base_stage, osv.Model): multi='day_close', type="float", store=True), 'color': fields.integer('Color Index'), 'emp_id': fields.many2one('hr.employee', 'employee'), - 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True), + 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True), } _defaults = { diff --git a/addons/lunch/report/order.rml b/addons/lunch/report/order.rml index 30c16ad4894..b09b59bb96b 100644 --- a/addons/lunch/report/order.rml +++ b/addons/lunch/report/order.rml @@ -103,7 +103,7 @@ [[ user.name ]] [[ user.login ]] - [[ user.user_email ]] + [[ user.email ]] diff --git a/addons/mail/data/mail_group_data.xml b/addons/mail/data/mail_group_data.xml index 09a6ca29a2d..49c6fbdc1b6 100644 --- a/addons/mail/data/mail_group_data.xml +++ b/addons/mail/data/mail_group_data.xml @@ -21,7 +21,7 @@ Welcome to OpenERP! Your homepage is a summary of messages you received and key information about documents you follow. -The top menu bar contains all applications you installed. You can use this <i>Settings</i> menu to intall more applications, activate others features or give access to new users. +The top menu bar contains all applications you installed. You can use this <i>Settings</i> menu to install more applications, activate others features or give access to new users. To setup your preferences (name, email signature, avatar), click on the top right corner. diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index b96b6e3791e..8845b3750b9 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -93,6 +93,9 @@ class mail_message_common(osv.TransientModel): return result def name_get(self, cr, uid, ids, context=None): + # name_get may receive int id instead of an id list + if isinstance(ids, (int, long)): + ids = [ids] res = [] for message in self.browse(cr, uid, ids, context=context): name = '' @@ -208,12 +211,13 @@ class mail_message(osv.Model): 'partner_id': fields.many2one('res.partner', 'Related partner', help="Deprecated field. Use partner_ids instead."), 'partner_ids': fields.many2many('res.partner', - 'mail_message_destination_partner_rel', + 'mail_message_res_partner_rel', 'message_id', 'partner_id', 'Destination partners', help="When sending emails through the social network composition wizard"\ "you may choose to send a copy of the mail to partners."), 'user_id': fields.many2one('res.users', 'Related User', readonly=1), - 'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments'), + 'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', + 'message_id', 'attachment_id', 'Attachments'), 'mail_server_id': fields.many2one('ir.mail_server', 'Outgoing mail server', readonly=1), 'state': fields.selection([ ('outgoing', 'Outgoing'), @@ -371,7 +375,8 @@ class mail_message(osv.Model): } email_msg_id = self.create(cr, uid, msg_vals, context) attachment_ids = [] - for fname, fcontent in attachments.iteritems(): + for attachment in attachments: + fname, fcontent = attachment attachment_data = { 'name': fname, 'datas_fname': fname, diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index f0dd023bf06..068dd844829 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -353,7 +353,7 @@ class mail_thread(osv.Model): data.update({ 'email_to': email_to, 'email_from': email_from or \ - (hasattr(thread, 'user_id') and thread.user_id and thread.user_id.user_email), + (hasattr(thread, 'user_id') and thread.user_id and thread.user_id.email), 'email_cc': email_cc, 'email_bcc': email_bcc, 'references': references, @@ -771,7 +771,7 @@ class mail_thread(osv.Model): for thread in self.browse(cr, uid, ids, context=context): l = set() for message in thread.message_ids: - l.add((message.user_id and message.user_id.user_email) or '') + l.add((message.user_id and message.user_id.email) or '') l.add(message.email_from or '') l.add(message.email_cc or '') res[thread.id] = filter(None, l) @@ -985,9 +985,9 @@ class mail_thread(osv.Model): if not user.notification_email_pref == 'all' and \ not (user.notification_email_pref == 'to_me' and user.id in user_to_push_from_parse_ids): continue - if not user.user_email: + if not user.email: continue - email_to = '%s, %s' % (email_to, user.user_email) + email_to = '%s, %s' % (email_to, user.email) email_to = email_to.lstrip(', ') # did not find any email address: not necessary to create an email @@ -998,7 +998,7 @@ class mail_thread(osv.Model): current_user = res_users_obj.browse(cr, uid, [uid], context=context)[0] email_from = new_msg_values.get('email_from') if not email_from: - email_from = current_user.user_email + email_from = current_user.email # get email content, create it (with mail_message.create) email_values = self.message_create_notify_get_email_dict(cr, uid, new_msg_values, email_from, email_to, context) diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index 8a590fc318f..c299df588d5 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -40,9 +40,8 @@ class res_users(osv.osv): _columns = { 'notification_email_pref': fields.selection([ - ('all', 'All feeds'), - ('comments', 'Only comments'), - ('to_me', 'Only when sent directly to me'), + ('all', 'All Feeds'), + ('to_me', 'Only send directly to me'), ('none', 'Never') ], 'Receive Feeds by Email', required=True, help="Choose in which case you want to receive an email when you "\ @@ -101,8 +100,14 @@ class res_users(osv.osv): self.message_subscribe(cr, uid, [user_id], [user_id], context=context) # create a welcome message company_name = user.company_id.name if user.company_id else _('the company') - message = _('%s joined the %s network! Take a moment to welcome %s.') % (user.name, company_name, user.name) - self.message_append_note(cr, uid, [user_id], body=message, type='comment', context=context) + message = '''%s has joined %s! Welcome in OpenERP ! + +Your homepage is a summary of messages you received and key information about documents you follow. + +The top menu bar contains all applications you installed. You can use this Settings menu to install more applications, activate others features or give access to new users. + +To setup your preferences (name, email signature, avatar), click on the top right corner.''' % (user.name, company_name) + self.message_append_note(cr, uid, [user_id], subject='Welcome to OpenERP', body=message, type='comment', content_subtype='html', context=context) return user_id def write(self, cr, uid, ids, vals, context=None): diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index d26511464f8..fe87b7584e0 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -100,7 +100,7 @@ class mail_compose_message(osv.TransientModel): # Try to provide default email_from if not specified yet if not result.get('email_from'): current_user = self.pool.get('res.users').browse(cr, uid, uid, context=context) - result['email_from'] = current_user.user_email or False + result['email_from'] = current_user.email or False return result _columns = { @@ -133,7 +133,7 @@ class mail_compose_message(osv.TransientModel): result.update({ 'model': model, 'res_id': res_id, - 'email_from': user.user_email or tools.config.get('email_from', False), + 'email_from': user.email or tools.config.get('email_from', False), 'body_html': False, 'body_text': False, 'subject': False, @@ -223,7 +223,7 @@ class mail_compose_message(osv.TransientModel): 'dest_partner_ids': dest_partner_ids, 'model': message_data.model or False, 'res_id': message_data.res_id or False, - 'email_from': current_user.user_email or message_data.email_to or False, + 'email_from': current_user.email or message_data.email_to or False, 'email_to': message_data.reply_to or message_data.email_from or False, 'email_cc': message_data.email_cc or False, 'user_id': uid, diff --git a/addons/portal_crm/wizard/contact.py b/addons/portal_crm/wizard/contact.py index 505bb62bb16..036993e1720 100644 --- a/addons/portal_crm/wizard/contact.py +++ b/addons/portal_crm/wizard/contact.py @@ -50,7 +50,7 @@ class crm_contact_us(osv.TransientModel): user = self.pool.get('res.users').browse(cr, uid, uid, context=context) if (user.login != 'anonymous'): - return user.user_email + return user.email else: return None diff --git a/addons/project/project.py b/addons/project/project.py index 707df5607c6..355665152a2 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -794,7 +794,7 @@ class task(base_stage, osv.osv): 'company_id': fields.many2one('res.company', 'Company'), 'id': fields.integer('ID', readonly=True), 'color': fields.integer('Color Index'), - 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True), + 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True), } _defaults = { diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 935935e28ca..33c2693d7bb 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -256,7 +256,7 @@ class project_issue(base_stage, osv.osv): 'inactivity_days': fields.function(_compute_day, string='Days since last action', \ multi='compute_day', type="integer", help="Difference in days between last action and current date"), 'color': fields.integer('Color Index'), - 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True), + 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True), 'date_action_last': fields.datetime('Last Action', readonly=1), 'date_action_next': fields.datetime('Next Action', readonly=1), 'progress': fields.function(_hours_get, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.", diff --git a/addons/project_mailgate/project_mailgate.py b/addons/project_mailgate/project_mailgate.py index 0ca2687b7f0..ba3cd702760 100644 --- a/addons/project_mailgate/project_mailgate.py +++ b/addons/project_mailgate/project_mailgate.py @@ -73,7 +73,7 @@ class project_tasks(osv.osv): followers = super(project_tasks,self).message_thread_followers(cr, uid, ids, context=context) for task in self.browse(cr, uid, followers.keys(), context=context): task_followers = set(followers[task.id]) - task_followers.add(task.user_id.user_email) + task_followers.add(task.user_id.email) followers[task.id] = filter(None, task_followers) return followers diff --git a/addons/purchase/edi/purchase_order_action_data.xml b/addons/purchase/edi/purchase_order_action_data.xml index 70d402de598..b97da91fa1d 100644 --- a/addons/purchase/edi/purchase_order_action_data.xml +++ b/addons/purchase/edi/purchase_order_action_data.xml @@ -38,7 +38,7 @@ Automated Purchase Order Notification Mail - ${object.validator.user_email or ''} + ${object.validator.email or ''} ${object.company_id.name} Order (Ref ${object.name or 'n/a' }) ${object.partner_id.email} @@ -61,7 +61,7 @@ % if object.partner_ref:   Your reference: ${object.partner_ref}
      % endif -   Your contact: ${object.validator.name} +   Your contact: ${object.validator.name}

      @@ -121,7 +121,7 @@ Here is a ${object.state in ('draft', 'sent') and 'request for quotation' or 'pu % if object.partner_ref: | Your reference: ${object.partner_ref}
      % endif - | Your contact: ${object.validator.name} ${object.validator.user_email and '<%s>'%(object.validator.user_email) or ''} + | Your contact: ${object.validator.name} ${object.validator.email and '<%s>'%(object.validator.email) or ''} You can view the ${object.state in ('draft', 'sent') and 'request for quotation' or 'order confirmation'} and download it using the following link: ${ctx.get('edi_web_url_view') or 'n/a'} @@ -132,7 +132,7 @@ Thank you! -- -${object.validator.name} ${object.validator.user_email and '<%s>'%(object.validator.user_email) or ''} +${object.validator.name} ${object.validator.email and '<%s>'%(object.validator.email) or ''} ${object.company_id.name} % if object.company_id.street: ${object.company_id.street or ''} diff --git a/addons/sale/edi/sale_order_action_data.xml b/addons/sale/edi/sale_order_action_data.xml index 2fe0a8cbfd3..181bd8183d7 100644 --- a/addons/sale/edi/sale_order_action_data.xml +++ b/addons/sale/edi/sale_order_action_data.xml @@ -37,7 +37,7 @@ Automated Sale Order Notification Mail - ${object.user_id.user_email or ''} + ${object.user_id.email or ''} ${object.company_id.name} Order (Ref ${object.name or 'n/a' }) ${object.partner_invoice_id.email} @@ -60,7 +60,7 @@ % if object.client_order_ref:   Your reference: ${object.client_order_ref}
      % endif -   Your contact: ${object.user_id.name} +   Your contact: ${object.user_id.name}

      @@ -139,7 +139,7 @@ Here is your ${object.state in ('draft', 'sent') and 'quotation' or 'order confi % if object.client_order_ref: | Your reference: ${object.client_order_ref}
      % endif - | Your contact: ${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''} + | Your contact: ${object.user_id.name} ${object.user_id.email and '<%s>'%(object.user_id.email) or ''} You can view the ${object.state in ('draft', 'sent') and 'quotation' or 'order confirmation'}, download it and even pay online using the following link: ${ctx.get('edi_web_url_view') or 'n/a'} @@ -166,7 +166,7 @@ Thank you for choosing ${object.company_id.name}! -- -${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''} +${object.user_id.name} ${object.user_id.email and '<%s>'%(object.user_id.email) or ''} ${object.company_id.name} % if object.company_id.street: ${object.company_id.street or ''} diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index b14da39633e..598bb085967 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -196,7 +196,7 @@ class share_wizard(osv.TransientModel): } def has_email(self, cr, uid, context=None): - return bool(self.pool.get('res.users').browse(cr, uid, uid, context=context).user_email) + return bool(self.pool.get('res.users').browse(cr, uid, uid, context=context).email) def go_step_1(self, cr, uid, ids, context=None): wizard_data = self.browse(cr,uid,ids,context)[0] @@ -241,7 +241,7 @@ class share_wizard(osv.TransientModel): if not wizard_data.invite: existing = user_obj.search(cr, UID_ROOT, [('login', '=', new_user)]) else: - existing = user_obj.search(cr, UID_ROOT, [('user_email', '=', new_user)]) + existing = user_obj.search(cr, UID_ROOT, [('email', '=', new_user)]) existing_ids.extend(existing) if existing: new_line = { 'user_id': existing[0], @@ -253,7 +253,7 @@ class share_wizard(osv.TransientModel): 'login': new_user, 'password': new_pass, 'name': new_user, - 'user_email': new_user, + 'email': new_user, 'groups_id': [(6,0,[group_id])], 'share': True, 'message_email_pref': 'all', @@ -825,12 +825,12 @@ class share_wizard(osv.TransientModel): message_obj = self.pool.get('mail.message') notification_obj = self.pool.get('mail.notification') user = self.pool.get('res.users').browse(cr, UID_ROOT, uid) - if not user.user_email: + if not user.email: raise osv.except_osv(_('Email required'), _('The current user must have an email address configured in User Preferences to be able to send outgoing emails.')) # TODO: also send an HTML version of this mail for result_line in wizard_data.result_line_ids: - email_to = result_line.user_id.user_email + email_to = result_line.user_id.email if not email_to: continue subject = _('Invitation to collaborate about %s') % (wizard_data.record_name) @@ -849,20 +849,20 @@ class share_wizard(osv.TransientModel): body += "--\n" body += _("OpenERP is a powerful and user-friendly suite of Business Applications (CRM, Sales, HR, etc.)\n" "It is open source and can be found on http://www.openerp.com.") - msg_id = message_obj.schedule_with_attach(cr, uid, user.user_email, [email_to], subject, body, model='', context=context) + msg_id = message_obj.schedule_with_attach(cr, uid, user.email, [email_to], subject, body, model='', context=context) notification_obj.create(cr, uid, {'user_id': result_line.user_id.id, 'message_id': msg_id}, context=context) def send_emails(self, cr, uid, wizard_data, context=None): _logger.info('Sending share notifications by email...') mail_message = self.pool.get('mail.message') user = self.pool.get('res.users').browse(cr, UID_ROOT, uid) - if not user.user_email: + if not user.email: raise osv.except_osv(_('Email required'), _('The current user must have an email address configured in User Preferences to be able to send outgoing emails.')) # TODO: also send an HTML version of this mail msg_ids = [] for result_line in wizard_data.result_line_ids: - email_to = result_line.user_id.user_email + email_to = result_line.user_id.email if not email_to: continue subject = wizard_data.name @@ -883,7 +883,7 @@ class share_wizard(osv.TransientModel): body += "--\n" body += _("OpenERP is a powerful and user-friendly suite of Business Applications (CRM, Sales, HR, etc.)\n" "It is open source and can be found on http://www.openerp.com.") - msg_ids.append(mail_message.schedule_with_attach(cr, uid, user.user_email, [email_to], subject, body, model='share.wizard', context=context)) + msg_ids.append(mail_message.schedule_with_attach(cr, uid, user.email, [email_to], subject, body, model='share.wizard', context=context)) # force direct delivery, as users expect instant notification mail_message.send(cr, uid, msg_ids, context=context) _logger.info('%d share notification(s) sent.', len(msg_ids)) diff --git a/addons/survey/survey.py b/addons/survey/survey.py index 0a96d1fde1c..93bd48be30c 100644 --- a/addons/survey/survey.py +++ b/addons/survey/survey.py @@ -740,7 +740,7 @@ class survey_request(osv.osv): if user_id: user_obj = self.pool.get('res.users') user = user_obj.browse(cr, uid, user_id, context=context) - return {'value': {'email': user.user_email}} + return {'value': {'email': user.email}} return {} survey_request() diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py index b3f27ed2970..66098b45fa8 100644 --- a/addons/survey/wizard/survey_answer.py +++ b/addons/survey/wizard/survey_answer.py @@ -414,8 +414,8 @@ class survey_question_wiz(osv.osv_memory): file.close() os.remove(addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf") - user_email = user_obj.browse(cr, uid, uid, context).user_email - resp_email = survey_data.responsible_id and survey_data.responsible_id.user_email or False + user_email = user_obj.browse(cr, uid, uid, context).email + resp_email = survey_data.responsible_id and survey_data.responsible_id.email or False if user_email and resp_email: user_name = user_obj.browse(cr, uid, uid, context=context).name From 7d3e405d7d4d9ba2f2f2c759b5647534c08b211e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 10 Aug 2012 17:13:07 +0200 Subject: [PATCH 044/165] [IMP] Partners created through users are not customer by default. bzr revid: tde@openerp.com-20120810151307-9geyv54nf0tv42lg --- openerp/addons/base/base_data.xml | 1 + openerp/addons/base/res/res_users.py | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/base_data.xml b/openerp/addons/base/base_data.xml index 937cca7d53e..b5272596d98 100644 --- a/openerp/addons/base/base_data.xml +++ b/openerp/addons/base/base_data.xml @@ -1090,6 +1090,7 @@ Administrator + diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 66fa4f420de..3e22a937800 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -152,8 +152,10 @@ class users(osv.osv): # context is set. 'company_id': fields.many2one('res.company', 'Company', required=True, help='The company this user is currently working for.', context={'user_preference': True}), - # 'context_company_id': fields.many2one('res.company', 'Company', required=True, - # help='The company this user is currently working for.', context={'user_preference': True}), + # 'context_company_id': fields.related('context_company_id', rel='res.company', + # string='Company', required=True, context={'user_preference': True}, + # help='The company this user is currently working for.', + # deprecated='Use the context_company_id field instead. This field will be removed as of OpenERP 7.1.'), 'company_ids':fields.many2many('res.company','res_company_users_rel','user_id','cid','Companies'), # backward compatibility fields 'user_email': fields.related('email', type='char', @@ -234,6 +236,7 @@ class users(osv.osv): _defaults = { 'password' : '', 'active' : True, + 'customer': False, 'menu_id': _get_menu, 'company_id': _get_company, 'company_ids': _get_companies, From 69e00d1e346153c2c1151238c44efd0d93bf217c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 10 Aug 2012 17:57:32 +0200 Subject: [PATCH 045/165] [IMP] res.users: default form view is now partner form view. This is done directly in fields_view_get: if no specific id is given, we call the default partner view. bzr revid: tde@openerp.com-20120810155732-zvnr2xb3b0urc8h2 --- openerp/addons/base/res/res_users.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 3e22a937800..ada625c6bcf 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -243,6 +243,19 @@ class users(osv.osv): 'groups_id': _get_group, } + def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): + """ Override of res.users fields_view_get. + - if the view is specified: resume with normal behavior + - else: the default view is overrided and redirected to the partner + view + """ + print view_id + print view_type + if not view_id and view_type == 'form': + print 'acacpornief' + return self.pool.get('res.partner').fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu) + return super(users, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu) + # User can write to a few of her own fields (but not her groups for example) SELF_WRITEABLE_FIELDS = ['password', 'signature', 'action_id', 'company_id', 'email', 'name', 'image', 'image_medium', 'image_small'] From 1d0061351135b07bcb987ee6be1dc30700773dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 10 Aug 2012 17:57:54 +0200 Subject: [PATCH 046/165] [IMP] mail.thread: res.users: messages appened to res.users are attached to the related partner. bzr revid: tde@openerp.com-20120810155754-c7towsarcawxe1le --- addons/mail/res_users.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index c299df588d5..3d8ed92609b 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -123,6 +123,23 @@ To setup your preferences (name, email signature, avatar), click on the top righ alias_pool.unlink(cr, uid, alias_ids, context=context) return res + def message_append(self, cr, uid, threads, subject, body_text=None, body_html=None, + type='email', email_date=None, parent_id=False, + content_subtype='plain', state=None, + partner_ids=None, email_from=False, email_to=False, + email_cc=None, email_bcc=None, reply_to=None, + headers=None, message_id=False, references=None, + attachments=None, original=None, context=None): + """ Override of message_append. Messages appened to res.users are + redirected to the related partner. Using partner_id.message_append, + messages will have correct model and id, set to res_partner and + partner_id.id. + """ + for user in self.browse(cr, uid, threads, context=context): + user.partner_id.message_append(subject, body_text, body_html, type, email_date, parent_id, + content_subtype, state, partner_ids, email_from, email_to, email_cc, email_bcc, reply_to, + headers, message_id, references, attachments, original) + def message_search_get_domain(self, cr, uid, ids, context=None): """ Override of message_search_get_domain for partner discussion page. The purpose is to add messages directly sent to user using From d0ff62372965ce74984e5b0c1f5a416e1bd580bf Mon Sep 17 00:00:00 2001 From: "vta vta@openerp.com" <> Date: Sun, 12 Aug 2012 17:07:39 +0200 Subject: [PATCH 047/165] [ADD] Basic functionality. bzr revid: vta@openerp.com-20120812150739-nrdwvxmnnnw8yr54 --- addons/auth_oauth/static/src/js/auth_oauth.js | 59 ++++++++++++++++--- .../auth_oauth/static/src/xml/auth_oauth.xml | 3 +- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/addons/auth_oauth/static/src/js/auth_oauth.js b/addons/auth_oauth/static/src/js/auth_oauth.js index fddd4c78ae9..a49d6777e7d 100644 --- a/addons/auth_oauth/static/src/js/auth_oauth.js +++ b/addons/auth_oauth/static/src/js/auth_oauth.js @@ -3,16 +3,61 @@ openerp.auth_oauth = function(instance) { var QWeb = instance.web.qweb; instance.web.Login = instance.web.Login.extend({ - start: function() { - console.log("Tu puta madre!"); + start: function(parent, params) { this._super.apply(this, arguments); + var self = this; + self.$element.on('click', '.oe_login_oauth a', this.on_google_oauth); }, - on_submit: function(ev) { + on_google_oauth: function(ev) { + var url = this._oauth_url(); + window.location = url; }, - do_warn: function(title, msg) { + _oauth_url: function() { + var endpoint = 'https://accounts.google.com/o/oauth2/auth'; + var params = { + response_type: 'token', + client_id: '108010644258-duuhmp6pu7li4tsmnqg7j9rvdeklg0ki.apps.googleusercontent.com', + redirect_uri: 'https://localhost/', + scope: 'https://www.googleapis.com/auth/userinfo.email', + state: 'TEST', + }; + var url = endpoint + '?' + $.param(params); + return url; }, - reset_error_message: function() { - } + // do_warn: function(title, msg) { + // }, + // reset_error_message: function() { + // } }); -}; \ No newline at end of file + instance.web.WebClient = instance.web.WebClient.extend({ + start: function() { + this._super.apply(this, arguments); + // console.log($.deparam(window.location.hash)); + var params = $.deparam(window.location.hash); + if (params.hasOwnProperty('access_token')) { + console.log(params); + // Do login using Google User credentials + var url = { + + }; + } + }, + bind_hashchange: function() { + var state = $.bbq.getState(true); + if (state.hasOwnProperty("access_token")) { + state.action = "login"; + $.bbq.setState(state); + } + this._super(); + + }, + // on_hashchange: function(event) { + // console.log(event); + // this._super.apply(this, arguments); + // }, + }); + +}; + +// https://accounts.google.com/o/oauth2/auth?state=%2Fprofile&redirect_uri=http%3A%2F%2Foauth2-login-demo.appspot.com%2Fcode&response_type=code&client_id=812741506391.apps.googleusercontent.com&approval_prompt=force&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile \ No newline at end of file diff --git a/addons/auth_oauth/static/src/xml/auth_oauth.xml b/addons/auth_oauth/static/src/xml/auth_oauth.xml index 01cf51da9a2..75f168d6c9a 100644 --- a/addons/auth_oauth/static/src/xml/auth_oauth.xml +++ b/addons/auth_oauth/static/src/xml/auth_oauth.xml @@ -5,8 +5,7 @@

      From 875d7541d99fd9bd9eb01d0a2bb7599e8911cf96 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 12 Aug 2012 19:06:03 +0200 Subject: [PATCH 048/165] sign up with controller bzr revid: al@openerp.com-20120812170603-mnp54q5xn9htg6vj --- addons/auth_signup/__init__.py | 3 +- addons/auth_signup/__openerp__.py | 5 +- addons/auth_signup/auth_signup.py | 39 -------- addons/auth_signup/controllers/__init__.py | 3 + addons/auth_signup/controllers/main.py | 37 ++++++++ addons/auth_signup/res_users.py | 47 ++++++++++ .../static/src/css/auth_signup.css | 9 -- .../auth_signup/static/src/js/auth_signup.js | 90 +++++-------------- .../static/src/xml/auth_signup.xml | 8 +- 9 files changed, 117 insertions(+), 124 deletions(-) delete mode 100644 addons/auth_signup/auth_signup.py create mode 100644 addons/auth_signup/controllers/__init__.py create mode 100644 addons/auth_signup/controllers/main.py create mode 100644 addons/auth_signup/res_users.py delete mode 100644 addons/auth_signup/static/src/css/auth_signup.css diff --git a/addons/auth_signup/__init__.py b/addons/auth_signup/__init__.py index 2e404949550..8b5f4d767b5 100644 --- a/addons/auth_signup/__init__.py +++ b/addons/auth_signup/__init__.py @@ -1,2 +1,3 @@ +import controllers import res_config -import auth_signup +import res_users diff --git a/addons/auth_signup/__openerp__.py b/addons/auth_signup/__openerp__.py index a869c623db0..3dbe97394a0 100644 --- a/addons/auth_signup/__openerp__.py +++ b/addons/auth_signup/__openerp__.py @@ -6,16 +6,13 @@ 'category': 'Authentication', 'website': 'http://www.openerp.com', 'installable': True, - 'depends': ['auth_anonymous', 'base_setup'], + 'depends': ['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/auth_signup/auth_signup.py b/addons/auth_signup/auth_signup.py deleted file mode 100644 index ebc72b3aeac..00000000000 --- a/addons/auth_signup/auth_signup.py +++ /dev/null @@ -1,39 +0,0 @@ -from openerp.osv import osv, fields - -class res_users(osv.Model): - _inherit = 'res.users' - - _sql_constraints = [ - ('email_uniq', 'UNIQUE (user_email)', 'You can not have two users with the same email!') - ] - -class signup_signup(osv.TransientModel): - _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), - } - - 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) - - new_user = { - 'name': values['name'], - 'login': values['email'], - 'user_email': values['email'], - 'password': values['password'], - 'active': True, - } - - 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 anything - return 0 diff --git a/addons/auth_signup/controllers/__init__.py b/addons/auth_signup/controllers/__init__.py new file mode 100644 index 00000000000..e11f9ba81bb --- /dev/null +++ b/addons/auth_signup/controllers/__init__.py @@ -0,0 +1,3 @@ +import main + +# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py new file mode 100644 index 00000000000..7b84c2e2214 --- /dev/null +++ b/addons/auth_signup/controllers/main.py @@ -0,0 +1,37 @@ +import logging + +import werkzeug.urls + +import openerp.modules.registry +import openerp.addons.web.controllers.main +import openerp.addons.web.common.http as openerpweb + +_logger = logging.getLogger(__name__) + +class OpenIDController(openerpweb.Controller): + _cp_path = '/auth_signup' + + @openerpweb.httprequest + def signup(self, req, dbname, name, login, password): + registry = openerp.modules.registry.RegistryManager.get(dbname) + cr = registry.db.cursor() + try: + try: + u = registry.get('res.users') + r = u.auth_signup(cr, 1, name, login, password) + cr.commit() + return openerp.addons.web.controllers.main.login_and_redirect(req, dbname, login, password) + # or + req.authenticate(*r) + url = "/" + except AttributeError: + # auth_signup is not installed + url = "/#action=auth_signup&error=1" + except Exception,e: + # signup error + url = "/#action=auth_signup&error=2" + finally: + cr.close() + return werkzeug.utils.redirect(url) + +# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py new file mode 100644 index 00000000000..46f264c6729 --- /dev/null +++ b/addons/auth_signup/res_users.py @@ -0,0 +1,47 @@ +import openerp +from openerp.osv import osv, fields + +class res_users(osv.Model): + _inherit = 'res.users' + + def auth_signup_create(self, cr, uid, new_user, context=None): + 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) + + def auth_signup_check(self, cr, uid, login, key, context=None): + res = self.search(cr, uid, [("login","=",login)]) + if res: + user_id = res[0]['id'] + self.check(cr.dbname, user_id, key) + return user_id + return False + + def auth_signup(self, cr, uid, name, login, password, context=None): + r = (cr.dbname, login, password) + try: + # check for existing user + if not self.auth_signup_check(cr, uid, login, password): + print "NEW USER" + # new user + new_user = { + 'name': name, + 'login': login, + 'user_email': login, + 'password': password, + 'active': True, + } + self.auth_signup_create(cr,uid, new_user) + return r + else: + print "Existing same" + # already existing with same password + return r + except openerp.exceptions.AccessDenied: + print "Existing different" + # already existing with diffrent password + raise + +# diff --git a/addons/auth_signup/static/src/css/auth_signup.css b/addons/auth_signup/static/src/css/auth_signup.css deleted file mode 100644 index 1e8d7d9d8d8..00000000000 --- a/addons/auth_signup/static/src/css/auth_signup.css +++ /dev/null @@ -1,9 +0,0 @@ -.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 index 7384fe1e5f5..aba6822739d 100644 --- a/addons/auth_signup/static/src/js/auth_signup.js +++ b/addons/auth_signup/static/src/js/auth_signup.js @@ -1,65 +1,38 @@ openerp.auth_signup = function(instance) { + instance.auth_signup = instance.auth_signup || {}; 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); - }); - } + var dbname = self.$("form [name=db]").val(); + self.do_action({ + type: 'ir.actions.client', + tag: 'auth_signup.signup', + params: {'dbname': dbname}, + target: 'new', + name: 'Sign up' + }); 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'); + init: function(parent, params) { + this.params = params; + return this._super(); }, start: function() { var self = this; - this.$('input[type=password]').change(function() { + this.$('input[name=password_confirmation]').keyup(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) { + if (_.isEmpty(v) || self.$('input[name=password]').val() === v) { $b.removeAttr('disabled'); } else { $b.attr('disabled', 'disabled'); @@ -70,36 +43,19 @@ openerp.auth_signup = function(instance) { 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'); - } - } - }); - }); + var params = { + dbname : self.params.dbname, + name: self.$('input[name=name]').val(), + login: self.$('input[name=email]').val(), + password: self.$('input[name=password]').val(), + }; + var url = "/auth_signup/signup?" + $.param(params); + window.location = url; return false; - }); - return $.when(this._super()); + return 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 index 92343d96281..c2eec846d15 100644 --- a/addons/auth_signup/static/src/xml/auth_signup.xml +++ b/addons/auth_signup/static/src/xml/auth_signup.xml @@ -14,10 +14,10 @@
      - Name = - Email = - Password = - Confirmation = + Name =
      + Email =
      + Password =
      + Confirmation =
      From 4dc0440cb1900b05bf1f84e6bdd33fe6746c0b25 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 12 Aug 2012 19:43:06 +0200 Subject: [PATCH 049/165] wip options bzr revid: al@openerp.com-20120812174306-p47bfuzo2r030r3t --- addons/auth_signup/res_users.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py index 46f264c6729..1b73dc2f622 100644 --- a/addons/auth_signup/res_users.py +++ b/addons/auth_signup/res_users.py @@ -5,6 +5,9 @@ class res_users(osv.Model): _inherit = 'res.users' def auth_signup_create(self, cr, uid, new_user, context=None): + # add login, email, name passowrd + # if options groups + # add groups 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) From 7ff74cc4b118e317a8fc25a5a507b807deeafd26 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 13 Aug 2012 01:26:12 +0200 Subject: [PATCH 050/165] oauth wip bzr revid: al@openerp.com-20120812232612-9cib8w333no9hg3d --- addons/auth_oauth/__init__.py | 22 +-------- addons/auth_oauth/controllers/__init__.py | 3 ++ addons/auth_oauth/controllers/main.py | 39 ++++++++++++++++ addons/auth_oauth/res_users.py | 40 ++++++++++++++++ addons/auth_oauth/static/src/js/auth_oauth.js | 46 ++++++------------- 5 files changed, 97 insertions(+), 53 deletions(-) create mode 100644 addons/auth_oauth/controllers/__init__.py create mode 100644 addons/auth_oauth/controllers/main.py create mode 100644 addons/auth_oauth/res_users.py diff --git a/addons/auth_oauth/__init__.py b/addons/auth_oauth/__init__.py index a55097cb836..68bb6c79406 100644 --- a/addons/auth_oauth/__init__.py +++ b/addons/auth_oauth/__init__.py @@ -1,20 +1,2 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2010-2011 OpenERP s.a. (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## \ No newline at end of file +import controllers +import res_users diff --git a/addons/auth_oauth/controllers/__init__.py b/addons/auth_oauth/controllers/__init__.py new file mode 100644 index 00000000000..e11f9ba81bb --- /dev/null +++ b/addons/auth_oauth/controllers/__init__.py @@ -0,0 +1,3 @@ +import main + +# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py new file mode 100644 index 00000000000..ea50c6a23e6 --- /dev/null +++ b/addons/auth_oauth/controllers/main.py @@ -0,0 +1,39 @@ +import logging + +import werkzeug.urls + +import openerp.modules.registry +import openerp.addons.web.controllers.main +import openerp.addons.web.common.http as openerpweb + +_logger = logging.getLogger(__name__) + +class OAuthController(openerpweb.Controller): + _cp_path = '/auth_oauth' + + @openerpweb.httprequest + def signin(self, req, **kw): + dbname = kw.get("state") + registry = openerp.modules.registry.RegistryManager.get(dbname) + cr = registry.db.cursor() + try: + try: + u = registry.get('res.users') + r = u.auth_oauth(cr, 1, kw) + cr.commit() + return openerp.addons.web.controllers.main.login_and_redirect(req, *r) + # or + req.authenticate(*r) + url = "/" + except AttributeError: + # auth_signup is not installed + url = "/#action=auth_signup&error=1" + except Exception,e: + # signup error + url = "/#action=auth_signup&error=2" + finally: + cr.close() + return "" + return werkzeug.utils.redirect(url) + +# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py new file mode 100644 index 00000000000..68e9a31e3eb --- /dev/null +++ b/addons/auth_oauth/res_users.py @@ -0,0 +1,40 @@ +import urllib2 + +import openerp + +from openerp.osv import osv, fields + +class res_users(osv.Model): + _inherit = 'res.users' + + def auth_oauth(self, cr, uid, params, context=None): + print params + url = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=' + params.get('access_token') + f = urllib2.urlopen(url) + validation = f.read() + print validation + r = (cr.dbname, login, password) + try: + # check for existing user + if not self.auth_signup_check(cr, uid, login, password): + print "NEW USER" + # new user + new_user = { + 'name': name, + 'login': login, + 'user_email': login, + 'password': password, + 'active': True, + } + self.auth_signup_create(cr,uid, new_user) + return r + else: + print "Existing same" + # already existing with same password + return r + except openerp.exceptions.AccessDenied: + print "Existing different" + # already existing with diffrent password + raise + +# diff --git a/addons/auth_oauth/static/src/js/auth_oauth.js b/addons/auth_oauth/static/src/js/auth_oauth.js index a49d6777e7d..057865cab4e 100644 --- a/addons/auth_oauth/static/src/js/auth_oauth.js +++ b/addons/auth_oauth/static/src/js/auth_oauth.js @@ -1,5 +1,4 @@ openerp.auth_oauth = function(instance) { - var QWeb = instance.web.qweb; instance.web.Login = instance.web.Login.extend({ @@ -8,56 +7,37 @@ openerp.auth_oauth = function(instance) { var self = this; self.$element.on('click', '.oe_login_oauth a', this.on_google_oauth); }, - on_google_oauth: function(ev) { - var url = this._oauth_url(); - window.location = url; - }, - _oauth_url: function() { + oauth_url: function(state) { var endpoint = 'https://accounts.google.com/o/oauth2/auth'; - var params = { + var params = { response_type: 'token', client_id: '108010644258-duuhmp6pu7li4tsmnqg7j9rvdeklg0ki.apps.googleusercontent.com', redirect_uri: 'https://localhost/', scope: 'https://www.googleapis.com/auth/userinfo.email', - state: 'TEST', + state: state, }; var url = endpoint + '?' + $.param(params); return url; }, - // do_warn: function(title, msg) { - // }, - // reset_error_message: function() { - // } + on_google_oauth: function(ev) { + var dbname = self.$("form [name=db]").val(); + var url = this.oauth_url(dbname); + window.location = url; + }, }); instance.web.WebClient = instance.web.WebClient.extend({ start: function() { this._super.apply(this, arguments); - // console.log($.deparam(window.location.hash)); var params = $.deparam(window.location.hash); if (params.hasOwnProperty('access_token')) { - console.log(params); - // Do login using Google User credentials - var url = { - - }; + // fix params for python marshmalling + params.state = params["#state"] + delete params["#state"] + var url = "/auth_oauth/signin" + '?' + $.param(params); + window.location = url; } }, - bind_hashchange: function() { - var state = $.bbq.getState(true); - if (state.hasOwnProperty("access_token")) { - state.action = "login"; - $.bbq.setState(state); - } - this._super(); - - }, - // on_hashchange: function(event) { - // console.log(event); - // this._super.apply(this, arguments); - // }, }); }; - -// https://accounts.google.com/o/oauth2/auth?state=%2Fprofile&redirect_uri=http%3A%2F%2Foauth2-login-demo.appspot.com%2Fcode&response_type=code&client_id=812741506391.apps.googleusercontent.com&approval_prompt=force&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile \ No newline at end of file From d946d35ee0590829b16b4403145a2b25b52be251 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 13 Aug 2012 02:01:49 +0200 Subject: [PATCH 051/165] oauth wip bzr revid: al@openerp.com-20120813000149-lslqyhszzz8axhrv --- addons/auth_signup/res_users.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py index 1b73dc2f622..1c9e531c180 100644 --- a/addons/auth_signup/res_users.py +++ b/addons/auth_signup/res_users.py @@ -5,9 +5,14 @@ class res_users(osv.Model): _inherit = 'res.users' def auth_signup_create(self, cr, uid, new_user, context=None): - # add login, email, name passowrd - # if options groups - # add groups + # new_user: + # login + # email + # name (optional) + # partner_id (optional) + # groups (optional) + # sign (for partner_id and groups) + # 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) From db7e49ca91d483213c8ba61d4314411c899e0f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 10:10:54 +0200 Subject: [PATCH 052/165] [FIX] project_timesheet tests: user creation should also have its partner. bzr revid: tde@openerp.com-20120813081054-csyaq8p7lf7e1nvh --- addons/mail/res_users.py | 1 - .../test/worktask_entry_to_timesheetline_entry.yml | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index 3d8ed92609b..6a18560de31 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -85,7 +85,6 @@ class res_users(osv.osv): cr.execute('ALTER TABLE res_users ALTER COLUMN alias_id SET NOT NULL') except Exception: pass - def create(self, cr, uid, data, context=None): # create default alias same as the login diff --git a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml index 214aa04d25b..8b58791f699 100644 --- a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml +++ b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml @@ -1,11 +1,13 @@ - Create a user 'HR Manager' - + !record {model: res.partner, id: res_partner_hrmanager0}: + name: HR Manager + lang: en_US !record {model: res.users, id: res_users_hrmanager0}: company_id: base.main_company - lang: en_US + partner_id: res_partner_hrmanager0 login: hr - name: HR Manager password: hr groups_id: - base.group_hr_manager From 55e9fdf3606f3ce79b593ceefa5a554614ee75f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 11:16:27 +0200 Subject: [PATCH 053/165] [FIX] res.users: defer onchange_type calls from partner form view to the partner. bzr revid: tde@openerp.com-20120813091627-nfv0vkfjo87jhplp --- openerp/addons/base/res/res_users.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index ada625c6bcf..f8c745edc10 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -171,6 +171,14 @@ class users(osv.osv): } } + def onchange_type(self, cr, uid, ids, is_company, context=None): + """ Wrapper on the user.partner onchange_type, because some calls to the + partner form view applied to the user may trigger the + partner.onchange_type method, but applied to the user object. + """ + partner_ids = [user.partner_id.id for user in self.browse(cr, uid, ids, context=context)] + return self.pool.get('res_partner').onchange_type(cr, uid, partner_ids, is_company, context=context) + def read(self,cr, uid, ids, fields=None, context=None, load='_classic_read'): def override_password(o): if 'password' in o and ( 'id' not in o or o['id'] != uid ): From e120d9a699247c6fbdfbf21648a71e321642b2bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 11:17:19 +0200 Subject: [PATCH 054/165] [REV] Reverted last fixes. Think it comes from outer space. bzr revid: tde@openerp.com-20120813091719-6551uziq8ts4kj6a --- .../test/worktask_entry_to_timesheetline_entry.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml index 8b58791f699..8bb570bd7d8 100644 --- a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml +++ b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml @@ -1,9 +1,6 @@ - Create a user 'HR Manager' - - !record {model: res.partner, id: res_partner_hrmanager0}: - name: HR Manager - lang: en_US !record {model: res.users, id: res_users_hrmanager0}: company_id: base.main_company partner_id: res_partner_hrmanager0 From 659f3cc996922959ab314666909115ff829dfc04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 11:36:41 +0200 Subject: [PATCH 055/165] [FIX] Bloody res_partner should be res.partner. bzr revid: tde@openerp.com-20120813093641-ssyfm4au52nupbi1 --- openerp/addons/base/res/res_users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index f8c745edc10..9e0abb446cf 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -177,7 +177,7 @@ class users(osv.osv): partner.onchange_type method, but applied to the user object. """ partner_ids = [user.partner_id.id for user in self.browse(cr, uid, ids, context=context)] - return self.pool.get('res_partner').onchange_type(cr, uid, partner_ids, is_company, context=context) + return self.pool.get('res.partner').onchange_type(cr, uid, partner_ids, is_company, context=context) def read(self,cr, uid, ids, fields=None, context=None, load='_classic_read'): def override_password(o): From 4067f46ff7fd75966cec799fb223ec944b108a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 11:36:56 +0200 Subject: [PATCH 056/165] [IMP] base.sql: no need to have a 'name' column on res.users I think. bzr revid: tde@openerp.com-20120813093656-ywab7wjdpc5gwl02 --- openerp/addons/base/base.sql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openerp/addons/base/base.sql b/openerp/addons/base/base.sql index c6ca6dbb76d..441fe536a0a 100644 --- a/openerp/addons/base/base.sql +++ b/openerp/addons/base/base.sql @@ -146,7 +146,6 @@ select setval('ir_ui_menu_id_seq', 2); CREATE TABLE res_users ( id serial NOT NULL, - name varchar(64) not null, active boolean default True, login varchar(64) NOT NULL UNIQUE, password varchar(64) default null, @@ -384,7 +383,7 @@ CREATE TABLE ir_model_relation ( -- Users --------------------------------- -insert into res_users (id,login,password,name,active,company_id,partner_id,lang) values (1,'admin','admin','Administrator',True,1,1,'en_US'); +insert into res_users (id,login,password,active,company_id,partner_id,lang) values (1,'admin','admin',True,1,1,'en_US'); insert into ir_model_data (name,module,model,noupdate,res_id) values ('user_root','base','res.users',True,1); -- Compatibility purpose, to remove V6.0 From 0e554c738d870a88ed4e426ef1ea105bfc96db77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 12:06:22 +0200 Subject: [PATCH 057/165] [FIX] Fixed last revision, about name removel in base.sql and so on. bzr revid: tde@openerp.com-20120813100622-jhqv244dskhlh2er --- openerp/addons/base/res/res_users.py | 2 +- openerp/service/web_services.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 9e0abb446cf..115b78d93e6 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -110,7 +110,7 @@ class users(osv.osv): } _name = "res.users" _description = 'Users' - _order = 'name' + _order = 'login' def _set_new_password(self, cr, uid, id, name, value, args, context=None): if value is False: diff --git a/openerp/service/web_services.py b/openerp/service/web_services.py index ccb753acdc8..7c08003bf7a 100644 --- a/openerp/service/web_services.py +++ b/openerp/service/web_services.py @@ -77,7 +77,7 @@ def _initialize_db(serv, id, db_name, demo, lang, user_password): cr.execute('UPDATE res_users SET password=%s, lang=%s, active=True WHERE login=%s', ( user_password, lang, 'admin')) - cr.execute('SELECT login, password, name ' \ + cr.execute('SELECT login, password ' \ ' FROM res_users ' \ ' ORDER BY login') serv.actions[id].update(users=cr.dictfetchall(), clean=True) From 401bbbc940100bc655a0d85f93ae49e850b6e25c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 12:18:47 +0200 Subject: [PATCH 058/165] [IMP] res.users: added a wrapper on onchange_address, for partner form view delegated to res.users. bzr revid: tde@openerp.com-20120813101847-rmctiebnhm2pmfcz --- openerp/addons/base/res/res_users.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 115b78d93e6..f4335357a4b 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -179,6 +179,14 @@ class users(osv.osv): partner_ids = [user.partner_id.id for user in self.browse(cr, uid, ids, context=context)] return self.pool.get('res.partner').onchange_type(cr, uid, partner_ids, is_company, context=context) + def onchange_address(self, cr, uid, ids, use_parent_address, parent_id, context=None): + """ Wrapper on the user.partner onchange_address, because some calls to the + partner form view applied to the user may trigger the + partner.onchange_type method, but applied to the user object. + """ + partner_ids = [user.partner_id.id for user in self.browse(cr, uid, ids, context=context)] + return self.pool.get('res.partner').onchange_address(cr, uid, partner_ids, is_company, context=context) + def read(self,cr, uid, ids, fields=None, context=None, load='_classic_read'): def override_password(o): if 'password' in o and ( 'id' not in o or o['id'] != uid ): From f4402a11445f05b33449554f3697840703cc1770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 12:41:35 +0200 Subject: [PATCH 059/165] [FIX] Wrapper on onchange_address. bzr revid: tde@openerp.com-20120813104135-6ft7wh4ssdl7ouid --- openerp/addons/base/res/res_users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index f4335357a4b..573d0468f18 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -185,7 +185,7 @@ class users(osv.osv): partner.onchange_type method, but applied to the user object. """ partner_ids = [user.partner_id.id for user in self.browse(cr, uid, ids, context=context)] - return self.pool.get('res.partner').onchange_address(cr, uid, partner_ids, is_company, context=context) + return self.pool.get('res.partner').onchange_address(cr, uid, partner_ids, use_parent_address, parent_id, context=context) def read(self,cr, uid, ids, fields=None, context=None, load='_classic_read'): def override_password(o): From f80c2478120e4fcf4e80f5c2932328dce88218b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 12:54:20 +0200 Subject: [PATCH 060/165] [FIX] Still fixing stpid bugs. bzr revid: tde@openerp.com-20120813105420-stxm7cjc981bj8fq --- .../test/worktask_entry_to_timesheetline_entry.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml index 8bb570bd7d8..fad8e2af2c5 100644 --- a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml +++ b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml @@ -3,7 +3,6 @@ - !record {model: res.users, id: res_users_hrmanager0}: company_id: base.main_company - partner_id: res_partner_hrmanager0 login: hr password: hr groups_id: From c2c27b18582db97b0d17f9c32291f28c76cf8edb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 13:15:21 +0200 Subject: [PATCH 061/165] [FIX$] This time, it's the good fix. bzr revid: tde@openerp.com-20120813111521-uws1uophrd39krfg --- .../test/worktask_entry_to_timesheetline_entry.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml index fad8e2af2c5..e670f5bae06 100644 --- a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml +++ b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml @@ -3,6 +3,7 @@ - !record {model: res.users, id: res_users_hrmanager0}: company_id: base.main_company + name: HR Manager login: hr password: hr groups_id: From 7341bd30cc02a4360406864a17fd2e8b801cd6b3 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 13 Aug 2012 13:46:19 +0200 Subject: [PATCH 062/165] Added html field type bzr revid: nicolas.vanhoren@openerp.com-20120813114619-lqr9zu0rkz6737rp --- openerp/osv/fields.py | 3 +++ openerp/osv/orm.py | 1 + 2 files changed, 4 insertions(+) diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 4ff23956050..b361ab664b6 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -227,6 +227,9 @@ class char(_column): class text(_column): _type = 'text' +class html(text): + _type = 'html' + import __builtin__ class float(_column): diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 563c514726c..069664cfebe 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -545,6 +545,7 @@ FIELDS_TO_PGTYPES = { fields.boolean: 'bool', fields.integer: 'int4', fields.text: 'text', + fields.html: 'text', fields.date: 'date', fields.datetime: 'timestamp', fields.binary: 'bytea', From f7d274850e9ff73f5ef3e572935c341a3b435a0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 14:22:07 +0200 Subject: [PATCH 063/165] [IMP] [CLEAN] res_partner: image_medium used in view, because image_small was too small; cleaned some print statemetns in res_users. bzr revid: tde@openerp.com-20120813122207-04f91lvor03g1xek --- openerp/addons/base/res/res_partner_view.xml | 2 +- openerp/addons/base/res/res_users.py | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index b5bfda2f0a0..c26987cafaa 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -99,7 +99,7 @@
      - +

      google +test link """ class TestSanitizer(unittest.TestCase): diff --git a/openerp/tools/html_sanitize.py b/openerp/tools/html_sanitize.py index 2010459ca12..74d83a2c453 100644 --- a/openerp/tools/html_sanitize.py +++ b/openerp/tools/html_sanitize.py @@ -1,5 +1,6 @@ from pyquery import PyQuery as pq +import re def html_sanitize(x): root = pq("
      ") @@ -11,8 +12,12 @@ def html_sanitize(x): to_remove = set(["script", "head", "meta", "title", "link", "img"]) to_unwrap = set(["html", "body"]) +javascript_regex = re.compile("""^\s*javascript\s*\:.*$""") def handle_a(el, new): - new.set("href", el.get("href", "#")) + href = el.get("href", "#") + if javascript_regex.search(href): + href = "#" + new.set("href", href) special = { "a": handle_a, } From a4e674a913ae0eb0cef727c9e02b02544163f677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 18:00:27 +0200 Subject: [PATCH 079/165] [IMP] mail: cleaned (un)follow process. Methods now return the new field value, the widget calls set_value to update the displayed value. More consistent with OpenERP web behavior (I think). Misc improvements in code, more general. bzr revid: tde@openerp.com-20120813160027-tx4p80kvxwbkg66c --- addons/mail/mail_group_view.xml | 2 +- addons/mail/mail_thread.py | 6 ++-- addons/mail/static/src/js/mail_followers.js | 37 +++++++++------------ 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml index b74c154d9cf..9facf51febe 100644 --- a/addons/mail/mail_group_view.xml +++ b/addons/mail/mail_group_view.xml @@ -83,7 +83,7 @@ + context="{'lapin': 'nouille'}" image="image_small"/>
      diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 7ef74641d77..cf33e64dd79 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -965,7 +965,8 @@ class mail_thread(osv.Model): uid instead """ to_subscribe_uids = [uid] if user_ids is None else user_ids - return self.write(cr, uid, ids, {'message_subscriber_ids': [(4, id) for id in to_subscribe_uids]}, context=context) + write_res = self.write(cr, uid, ids, {'message_subscriber_ids': [(4, id) for id in to_subscribe_uids]}, context=context) + return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_subscriber_ids] def message_unsubscribe(self, cr, uid, ids, user_ids = None, context=None): """ Unsubscribe the user (or user_ids) from the current document. @@ -974,7 +975,8 @@ class mail_thread(osv.Model): uid instead """ to_unsubscribe_uids = [uid] if user_ids is None else user_ids - return self.write(cr, uid, ids, {'message_subscriber_ids': [(3, id) for id in to_unsubscribe_uids]}, context=context) + write_res = self.write(cr, uid, ids, {'message_subscriber_ids': [(3, id) for id in to_unsubscribe_uids]}, context=context) + return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_subscriber_ids] #------------------------------------------------------ # Notification API diff --git a/addons/mail/static/src/js/mail_followers.js b/addons/mail/static/src/js/mail_followers.js index b4b8a6e9797..30d83667165 100644 --- a/addons/mail/static/src/js/mail_followers.js +++ b/addons/mail/static/src/js/mail_followers.js @@ -22,25 +22,24 @@ openerp_mail_followers = function(session, mail) { init: function() { this._super.apply(this, arguments); - this.params = this.get_definition_options(); - this.params.see_subscribers = true; - this.params.see_subscribers_options = this.params.see_subscribers_options || false; - this.ds = new session.web.DataSetSearch(this, this.view.model); - this.ds_users = new session.web.DataSetSearch(this, 'res.users'); - + debugger + this.params = {}; + this.params.image = this.node.attrs.image || 'image_small'; + this.params.display_followers = true; + this.params.display_control = this.node.attrs.display_control || false; + this.params.display_actions = this.node.attrs.display_actions || false; + this.ds_model = new session.web.DataSetSearch(this, this.view.model); + this.ds_follow = new session.web.DataSetSearch(this, this.field.relation); }, start: function() { var self = this; - // NB: all the widget should be modified to check the actual_mode property on view, not use // any other method to know if the view is in create mode anymore this.view.on("change:actual_mode", this, this._check_visibility); this._check_visibility(); - - // session.mail.ChatterUtils.bind_events(this); this.$element.find('button.oe_mail_button_followers').click(function () { self.do_toggle_followers(); }); - if (! this.params.see_subscribers_options) { + if (! this.params.display_control) { this.$element.find('button.oe_mail_button_followers').hide(); } this.$element.find('button.oe_mail_button_follow').click(function () { self.do_follow(); }) .mouseover(function () { $(this).html('Follow').removeClass('oe_mail_button_mouseout').addClass('oe_mail_button_mouseover'); }) @@ -60,16 +59,15 @@ openerp_mail_followers = function(session, mail) { }, reinit: function() { - this.params.see_subscribers = true; - this.params.see_subscribers_options = this.params.see_subscribers_options || false; + this.params.display_followers = true; + this.params.display_control = this.node.attrs.display_control || false; + this.params.display_actions = this.node.attrs.display_actions || false; this.$element.find('button.oe_mail_button_followers').html('Hide followers') this.$element.find('button.oe_mail_button_follow').hide(); this.$element.find('button.oe_mail_button_unfollow').hide(); }, set_value: function(value_) { - console.log(value_); - // debugger this.reinit(); if (! this.view.datarecord.id || session.web.BufferedDataSet.virtual_id_regex.test(this.view.datarecord.id)) { @@ -80,7 +78,7 @@ openerp_mail_followers = function(session, mail) { }, fetch_subscribers: function (value_) { - return this.ds_users.call('read', [value_ || this.get_value(), ['name', 'image_small']]).then(this.proxy('display_subscribers')); + return this.ds_follow.call('read', [value_ || this.get_value(), ['name', this.params.image]]).then(this.proxy('display_subscribers')); }, display_subscribers: function (records) { @@ -102,17 +100,12 @@ openerp_mail_followers = function(session, mail) { }, do_follow: function () { - return this.ds.call('message_subscribe', [[this.view.datarecord.id]]).pipe(this.proxy('fetch_subscribers')); + return this.ds_model.call('message_subscribe', [[this.view.datarecord.id]]).pipe(this.proxy('set_value')); }, do_unfollow: function () { var self = this; - return this.ds.call('message_unsubscribe', [[this.view.datarecord.id]]).pipe(function (record) { - // debugger - var new_value = self.view.datarecord.message_subscriber_ids; - // return [new_value.splice(_.indexOf(new_value, self.session.uid, true), 1);] - return [2] - }).pipe(this.proxy('set_value')); + return this.ds_model.call('message_unsubscribe', [[this.view.datarecord.id]]).pipe(this.proxy('set_value')); }, do_toggle_followers: function () { From 2522955ef51c01f0429e409b4f7d268993821253 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 13 Aug 2012 18:17:34 +0200 Subject: [PATCH 080/165] Added pyquery dependency bzr revid: nicolas.vanhoren@openerp.com-20120813161734-7akxglc5908ant25 --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 6e1adadde82..259207d9a77 100755 --- a/setup.py +++ b/setup.py @@ -102,6 +102,7 @@ setuptools.setup( 'mako', 'psycopg2', 'pydot', + 'pyquery', 'python-dateutil < 2', 'python-ldap', 'python-openid', From 98b17f6e96d202997605f3f6964a50121cfc6612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 20:09:41 +0200 Subject: [PATCH 081/165] [IMP] mail_thread: many2many_reference: now overrides the 6 command. bzr revid: tde@openerp.com-20120813180941-n0u1xq0dx2cf8rsf --- addons/mail/mail_thread.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index cf33e64dd79..47f74e0ab29 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -62,14 +62,23 @@ class many2many_reference(fields.many2many): continue if act[0] == 0: idnew = obj.create(cr, user, act[2], context=context) - cr.execute('INSERT INTO '+rel+' ('+id1+','+id2+') VALUES (%s,%s,res_model)', (id, idnew, model._name)) + cr.execute('INSERT INTO '+rel+' ('+id1+','+id2+',res_model) VALUES (%s,%s,%s)', (id, idnew, model._name)) elif act[0] == 3: cr.execute('DELETE FROM "'+rel+'" WHERE '+id1+'=%s AND '+id2+'=%s AND res_model=%s', (id, act[1], model._name)) elif act[0] == 4: # following queries are in the same transaction - so should be relatively safe cr.execute('SELECT 1 FROM '+rel+' WHERE '+id1+'=%s AND '+id2+'=%s AND res_model=%s', (id, act[1], model._name)) if not cr.fetchone(): - cr.execute('INSERT INTO '+rel+' ('+id1+','+id2+',res_model) values (%s,%s,%s)', (id, act[1], model._name)) + cr.execute('INSERT INTO '+rel+' ('+id1+','+id2+',res_model) VALUES (%s,%s,%s)', (id, act[1], model._name)) + elif act[0] == 6: + d1, d2,tables = obj.pool.get('ir.rule').domain_get(cr, user, obj._name, context=context) + if d1: + d1 = ' and ' + ' and '.join(d1) + else: + d1 = '' + cr.execute('DELETE FROM '+rel+' WHERE '+id1+'=%s AND res_model=%s AND '+id2+' IN (SELECT '+rel+'.'+id2+' FROM '+rel+', '+','.join(tables)+' WHERE '+rel+'.'+id1+'=%s AND '+rel+'.'+id2+' = '+obj._table+'.id '+ d1 +')', [id, model._name, id]+d2) + for act_nbr in act[2]: + cr.execute('INSERT INTO '+rel+' ('+id1+','+id2+',res_model) VALUES (%s,%s,%s)', (id, act_nbr, model._name)) else: print act return super(many2many_reference, self).set(cr, model, id, name, values, user, context) From 59d8cb124c28904ef7cd9b75bf314c71e12c2c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 20:33:12 +0200 Subject: [PATCH 082/165] [IMP] mail_thread: do not subscribe followers already subscribed. bzr revid: tde@openerp.com-20120813183312-qpuksy9ku7z5zemx --- addons/mail/mail_thread.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 47f74e0ab29..afe3cf2e381 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -973,7 +973,10 @@ class mail_thread(osv.Model): :param user_ids: a list of user_ids; if not set, subscribe uid instead """ + follower_ids = [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_subscriber_ids] to_subscribe_uids = [uid] if user_ids is None else user_ids + if all(follower_id in follower_ids for follower_id in to_subscribe_uids): + return follower_ids write_res = self.write(cr, uid, ids, {'message_subscriber_ids': [(4, id) for id in to_subscribe_uids]}, context=context) return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_subscriber_ids] From ff0a280a7ede102c79d0d3ca047429d196993759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 21:10:06 +0200 Subject: [PATCH 083/165] [REF] mail.subscription: renamed to mail.followers. Also renamed files accordingly. Views and menu entries have been updated. Also removed an ununsed read field on mail.notification. bzr revid: tde@openerp.com-20120813191006-jf7vygdyb93k7nxf --- ...mail_subscription.py => mail_followers.py} | 21 +++++------- ...ption_view.xml => mail_followers_view.xml} | 32 ++++++++----------- 2 files changed, 21 insertions(+), 32 deletions(-) rename addons/mail/{mail_subscription.py => mail_followers.py} (82%) rename addons/mail/{mail_subscription_view.xml => mail_followers_view.xml} (64%) diff --git a/addons/mail/mail_subscription.py b/addons/mail/mail_followers.py similarity index 82% rename from addons/mail/mail_subscription.py rename to addons/mail/mail_followers.py index eb6f066a2ef..fcdc78d5f0a 100644 --- a/addons/mail/mail_subscription.py +++ b/addons/mail/mail_followers.py @@ -22,19 +22,21 @@ from osv import osv from osv import fields -class mail_subscription(osv.Model): - """ - mail_subscription holds the data related to the follow mechanism inside OpenERP. +class mail_followers(osv.Model): + """ mail_followers holds the data related to the follow mechanism inside + OpenERP. Users can choose to follow documents (records) of any kind that + inherits from mail.thread. Following documents allow to receive + notifications for new messages. A subscription is characterized by: :param: res_model: model of the followed objects :param: res_id: ID of resource (may be 0 for every objects) :param: user_id: user_id of the follower """ - _name = 'mail.subscription' + _name = 'mail.followers' _rec_name = 'id' _log_access = False _order = 'res_model asc' - _description = 'Mail subscription' + _description = 'Mail Document Followers' _columns = { 'res_model': fields.char('Related Document Model', size=128, required=True, select=1, @@ -46,9 +48,7 @@ class mail_subscription(osv.Model): } class mail_notification(osv.Model): - """ - mail_notification is a relational table modeling messages pushed to users. - :param: read: not used currently + """ mail_notification is a relational table modeling messages pushed to users. """ _name = 'mail.notification' _rec_name = 'id' @@ -60,9 +60,4 @@ class mail_notification(osv.Model): ondelete='cascade', required=True, select=1), 'message_id': fields.many2one('mail.message', string='Message', ondelete='cascade', required=True, select=1), - 'read': fields.boolean('Read', help="Not used currently",), - # TODO: add a timestamp ? or use message date ? - } - _defaults = { - 'read': False, } diff --git a/addons/mail/mail_subscription_view.xml b/addons/mail/mail_followers_view.xml similarity index 64% rename from addons/mail/mail_subscription_view.xml rename to addons/mail/mail_followers_view.xml index c3d79d48308..ebb7104c5b3 100644 --- a/addons/mail/mail_subscription_view.xml +++ b/addons/mail/mail_followers_view.xml @@ -2,17 +2,14 @@ - - - - mail.subscription.tree - mail.subscription + + + mail.followers.tree + mail.followers tree 10 - + @@ -20,17 +17,14 @@ - - + mail.notification.tree mail.notification tree 10 - + @@ -38,9 +32,9 @@ - - Subscriptions - mail.subscription + + Followers + mail.followers form tree,form @@ -52,9 +46,9 @@ tree,form - - --> + + --> Date: Mon, 13 Aug 2012 21:13:46 +0200 Subject: [PATCH 084/165] [REF] mail_thread: refactoring of followers continuing. Updated reference to subscription to followers. Also removed message_read_subscribers and message_is_subscriber, not used anymore. bzr revid: tde@openerp.com-20120813191346-cpn09u4xqiesvpwb --- addons/mail/mail_thread.py | 75 +++++++++++--------------------------- 1 file changed, 21 insertions(+), 54 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index afe3cf2e381..d82158ec3b3 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -38,7 +38,7 @@ class many2many_reference(fields.many2many): def _get_query_and_where_params(self, cr, model, ids, values, where_params): """ Add in where: - - mail_subscription.res_model = 'crm.lead' + - mail_followers.res_model = 'crm.lead' """ query = 'SELECT %(rel)s.%(id2)s, %(rel)s.%(id1)s \ FROM %(rel)s, %(from_c)s \ @@ -104,21 +104,20 @@ class mail_thread(osv.Model): default implementation will work for any model. However it is common to override at least the ``message_new`` and ``message_update`` methods (calling ``super``) to add model-specific behavior at - creation and update of a thread; and ``message_get_subscribers`` - to manage more precisely the social aspect of the thread through - the followers. + creation and update of a thread. + + TODO: UPDATE WITIH SUBTYPE / NEW FOLLOW MECHANISM ''' _name = 'mail.thread' _description = 'Email Thread' def _get_message_ids(self, cr, uid, ids, name, args, context=None): res = {} - for id in ids: - message_ids = self.message_search(cr, uid, [id], context=context) - subscriber_ids = self.message_get_subscribers(cr, uid, [id], context=context) + for thread in self.browse(cr, uid, ids, context=context): + message_ids = self.message_search(cr, uid, [thread.id], context=context) res[id] = { 'message_ids': message_ids, - 'message_summary': "9 %d + %d" % (len(message_ids), len(subscriber_ids)), + 'message_summary': "9 %d + %d" % (len(message_ids), len(thread.message_follower_ids)), } return res @@ -133,8 +132,8 @@ class mail_thread(osv.Model): type='one2many', obj='mail.message', _fields_id = 'res_id', string='Temp messages', multi="_get_message_ids", help="Functional field holding messages related to the current document."), - 'message_subscriber_ids': many2many_reference('res.users', - rel='mail_subscription', id1='res_id', id2='user_id', string="Followers", + 'message_follower_ids': many2many_reference('res.users', + rel='mail_followers', id1='res_id', id2='user_id', string="Followers", help="Followers of the document. The followers have full access to " \ "the document details, as well as the conversation."), 'message_state': fields.boolean('Read', @@ -155,7 +154,7 @@ class mail_thread(osv.Model): #------------------------------------------------------ def create(self, cr, uid, vals, context=None): - """Automatically subscribe the creator """ + """ Automatically subscribe the creator """ thread_id = super(mail_thread, self).create(cr, uid, vals, context=context) if thread_id: self.message_subscribe(cr, uid, [thread_id], [uid], context=context) @@ -163,31 +162,24 @@ class mail_thread(osv.Model): def write(self, cr, uid, ids, vals, context=None): """ Override of write to subscribe the writer, except if he has changed - the subscribers (to avoid unsubscribe-->subscribe). """ + the followers (to avoid unfollow-->follow). """ if isinstance(ids, (int, long)): ids = [ids] write_res = super(mail_thread, self).write(cr, uid, ids, vals, context=context) - if write_res and not vals.get('message_subscriber_ids'): + if write_res and not vals.get('message_follower_ids'): self.message_subscribe(cr, uid, ids, [uid], context=context) return write_res; def unlink(self, cr, uid, ids, context=None): - """Override unlink, to automatically delete - - subscriptions - - messages + """Override unlink, to automatically delete messages that are linked with res_model and res_id, not through a foreign key with a 'cascade' ondelete attribute. Notifications will be deleted with messages """ - subscr_obj = self.pool.get('mail.subscription') msg_obj = self.pool.get('mail.message') - # delete subscriptions - subscr_to_del_ids = subscr_obj.search(cr, uid, [('res_model', '=', self._name), ('res_id', 'in', ids)], context=context) - subscr_obj.unlink(cr, uid, subscr_to_del_ids, context=context) # delete messages and notifications msg_to_del_ids = msg_obj.search(cr, uid, [('model', '=', self._name), ('res_id', 'in', ids)], context=context) msg_obj.unlink(cr, uid, msg_to_del_ids, context=context) - return super(mail_thread, self).unlink(cr, uid, ids, context=context) #------------------------------------------------------ @@ -198,12 +190,11 @@ class mail_thread(osv.Model): """ OpenChatter: wrapper of mail.message create method - creates the mail.message - automatically subscribe the message writer - - push the message to subscribed users + - push the message to followers """ if context is None: context = {} - - message_obj = self.pool.get('mail.message') + notification_obj = self.pool.get('mail.notification') body = vals.get('body_html', '') if vals.get('content_subtype') == 'html' else vals.get('body_text', '') @@ -232,7 +223,6 @@ class mail_thread(osv.Model): return msg_id def message_get_user_ids_to_notify(self, cr, uid, thread_ids, new_msg_vals, context=None): - subscription_obj = self.pool.get('mail.subscription') # get body body = new_msg_vals.get('body_html', '') if new_msg_vals.get('content_subtype') == 'html' else new_msg_vals.get('body_text', '') @@ -939,46 +929,23 @@ class mail_thread(osv.Model): """ Returns the current document followers. Basically this method checks in mail.subscription for entries with matching res_model, res_id. - This method can be overriden to add implicit subscribers, such - as project managers, by adding their user_id to the list of - ids returned by this method. """ - subscr_obj = self.pool.get('mail.subscription') + subscr_obj = self.pool.get('mail.followers') subscr_ids = subscr_obj.search(cr, uid, ['&', ('res_model', '=', self._name), ('res_id', 'in', ids)], context=context) return [sub['user_id'][0] for sub in subscr_obj.read(cr, uid, subscr_ids, ['user_id'], context=context)] - def message_read_subscribers(self, cr, uid, ids, fields=['id', 'name', 'image_small'], context=None): - """ Returns the current document followers as a read result. Used - mainly for Chatter having only one method to call to have - details about users. - """ - user_ids = self.message_get_subscribers(cr, uid, ids, context=context) - return self.pool.get('res.users').read(cr, uid, user_ids, fields=fields, context=context) - - def message_is_subscriber(self, cr, uid, ids, user_id = None, context=None): - """ Check if uid or user_id (if set) is a subscriber to the current - document. - - :param user_id: if set, check is done on user_id; if not set - check is done on uid - """ - sub_user_id = uid if user_id is None else user_id - if sub_user_id in self.message_get_subscribers(cr, uid, ids, context=context): - return True - return False - def message_subscribe(self, cr, uid, ids, user_ids = None, context=None): """ Subscribe the user (or user_ids) to the current document. :param user_ids: a list of user_ids; if not set, subscribe uid instead """ - follower_ids = [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_subscriber_ids] + follower_ids = [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_follower_ids] to_subscribe_uids = [uid] if user_ids is None else user_ids if all(follower_id in follower_ids for follower_id in to_subscribe_uids): return follower_ids - write_res = self.write(cr, uid, ids, {'message_subscriber_ids': [(4, id) for id in to_subscribe_uids]}, context=context) - return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_subscriber_ids] + write_res = self.write(cr, uid, ids, {'message_follower_ids': [(4, id) for id in to_subscribe_uids]}, context=context) + return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_follower_ids] def message_unsubscribe(self, cr, uid, ids, user_ids = None, context=None): """ Unsubscribe the user (or user_ids) from the current document. @@ -987,8 +954,8 @@ class mail_thread(osv.Model): uid instead """ to_unsubscribe_uids = [uid] if user_ids is None else user_ids - write_res = self.write(cr, uid, ids, {'message_subscriber_ids': [(3, id) for id in to_unsubscribe_uids]}, context=context) - return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_subscriber_ids] + write_res = self.write(cr, uid, ids, {'message_follower_ids': [(3, id) for id in to_unsubscribe_uids]}, context=context) + return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_follower_ids] #------------------------------------------------------ # Notification API From 9a3680e7f556ca20b6149cdff4555e141321c32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 21:15:01 +0200 Subject: [PATCH 085/165] [REF] mail: init and openerp files updated with followers instead of subscription. bzr revid: tde@openerp.com-20120813191501-tapi42znpz9bckiy --- addons/mail/__init__.py | 2 +- addons/mail/__openerp__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/mail/__init__.py b/addons/mail/__init__.py index cef9fe126aa..6e3baad57a8 100644 --- a/addons/mail/__init__.py +++ b/addons/mail/__init__.py @@ -21,7 +21,7 @@ import mail_alias import mail_message -import mail_subscription +import mail_followers import mail_thread import mail_group import ir_needaction diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py index 5c9e4fdf1f8..0e1caabcf65 100644 --- a/addons/mail/__openerp__.py +++ b/addons/mail/__openerp__.py @@ -64,7 +64,7 @@ The main features of the module are: 'wizard/mail_compose_message_view.xml', 'res_config_view.xml', 'mail_message_view.xml', - 'mail_subscription_view.xml', + 'mail_followers_view.xml', 'mail_thread_view.xml', 'mail_group_view.xml', 'res_partner_view.xml', From c14a28fd934eec186c51220574e3e30e5409aa0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 21:24:27 +0200 Subject: [PATCH 086/165] [MISC] mail_thread: updated one comment. bzr revid: tde@openerp.com-20120813192427-vw2id9wtd1hil9as --- addons/mail/mail_thread.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index d82158ec3b3..f6303fca841 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -927,7 +927,7 @@ class mail_thread(osv.Model): def message_get_subscribers(self, cr, uid, ids, context=None): """ Returns the current document followers. Basically this method - checks in mail.subscription for entries with matching res_model, + checks in mail.followers for entries with matching res_model, res_id. """ subscr_obj = self.pool.get('mail.followers') From a52b57acf4369a1b5652d31f7b0756c8e6701a4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 21:38:41 +0200 Subject: [PATCH 087/165] [REF] Still refactoring of names: propagated to security files. bzr revid: tde@openerp.com-20120813193841-yavky2odabj5li70 --- addons/mail/security/ir.model.access.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/security/ir.model.access.csv b/addons/mail/security/ir.model.access.csv index 3677d424c14..1979e2fec05 100644 --- a/addons/mail/security/ir.model.access.csv +++ b/addons/mail/security/ir.model.access.csv @@ -2,7 +2,7 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_mail_message_all,mail.message.all,model_mail_message,,1,0,0,0 access_mail_message_group_user,mail.message.group.user,model_mail_message,base.group_user,1,1,1,1 access_mail_thread,mail.thread,model_mail_thread,base.group_user,1,1,1,0 -access_mail_subscription_all,mail.subscription.all,model_mail_subscription,,1,1,1,1 +access_mail_followers_all,mail.followers.all,model_mail_followers,,1,1,1,1 access_mail_notification_all,mail.notification.all,model_mail_notification,,1,1,1,1 access_mail_group,mail.group,model_mail_group,base.group_user,1,1,1,1 access_mail_alias_user,mail.alias,model_mail_alias,base.group_user,1,1,1,0 From f6155e6fa071e85084d8db2f8c29238b9c73d092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 21:39:10 +0200 Subject: [PATCH 088/165] [FIX] mail_followers_view: deleted read field from view, because was deleted from modele. bzr revid: tde@openerp.com-20120813193910-5rnsgm0wf3hikkss --- addons/mail/mail_followers_view.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/mail/mail_followers_view.xml b/addons/mail/mail_followers_view.xml index ebb7104c5b3..b324cfb1ae9 100644 --- a/addons/mail/mail_followers_view.xml +++ b/addons/mail/mail_followers_view.xml @@ -27,7 +27,6 @@ -
      From 882eff5556cfeca8a0e8611e1a87989e1bbe9ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 21:40:37 +0200 Subject: [PATCH 089/165] [REF] mail.group: continuing the refactoring. member_ids field deleted, because this is now a standard field on mail.thread. Updated view and methods accordingly. bzr revid: tde@openerp.com-20120813194037-qm2xamhgnos3gqpt --- addons/mail/mail_group.py | 30 ++++++++++-------------------- addons/mail/mail_group_view.xml | 2 +- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index b850f1c29f7..fb7c0b53b29 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -57,25 +57,17 @@ class mail_group(osv.osv): def _set_image(self, cr, uid, id, name, value, args, context=None): return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context) - def get_member_ids(self, cr, uid, ids, field_names, args, context=None): + def get_followers_data(self, cr, uid, ids, field_names, args, context=None): if context is None: context = {} result = dict.fromkeys(ids) - for id in ids: - result[id] = {} - result[id]['member_ids'] = self.message_get_subscribers(cr, uid, [id], context=context) - result[id]['member_count'] = len(result[id]['member_ids']) - result[id]['is_subscriber'] = uid in result[id]['member_ids'] + for thread in self.browse(cr, uid, ids, context=context): + result[thread.id] = { + 'member_count': len(thread.message_follower_ids), + 'is_subscriber': uid in [follower.id for follower in thread.message_follower_ids], + } return result - def search_member_ids(self, cr, uid, obj, name, args, context=None): - if context is None: - context = {} - sub_obj = self.pool.get('mail.subscription') - sub_ids = sub_obj.search(cr, uid, ['&', ('res_model', '=', obj._name), ('user_id', '=', args[0][2])], context=context) - subs = sub_obj.read(cr, uid, sub_ids, context=context) - return [('id', 'in', map(itemgetter('res_id'), subs))] - def get_last_month_msg_nbr(self, cr, uid, ids, name, args, context=None): result = {} message_obj = self.pool.get('mail.message') @@ -121,12 +113,10 @@ class mail_group(osv.osv): help="Small-sized photo of the group. It is automatically "\ "resized as a 50x50px image, with aspect ratio preserved. "\ "Use this field anywhere a small image is required."), - 'member_ids': fields.function(get_member_ids, fnct_search=search_member_ids, - type='many2many', relation='res.users', string='Group members', multi='get_member_ids'), - 'member_count': fields.function(get_member_ids, type='integer', - string='Member count', multi='get_member_ids'), - 'is_subscriber': fields.function(get_member_ids, type='boolean', - string='Joined', multi='get_member_ids'), + 'member_count': fields.function(get_followers_data, type='integer', + string='Member count', multi='get_followers_data'), + 'is_subscriber': fields.function(get_followers_data, type='boolean', + string='Joined', multi='get_followers_data'), 'last_month_msg_nbr': fields.function(get_last_month_msg_nbr, type='integer', string='Messages count for last month'), 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True, diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml index 9facf51febe..92fdd795359 100644 --- a/addons/mail/mail_group_view.xml +++ b/addons/mail/mail_group_view.xml @@ -82,7 +82,7 @@
      -
      From 2ae73a76154969a03656f5565a0044a01343946c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 21:41:15 +0200 Subject: [PATCH 090/165] [REF] mail_thread: updated message_ids and message_summary computation due to changes in followers. bzr revid: tde@openerp.com-20120813194115-j125ubffz7alghzv --- addons/mail/mail_thread.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index f6303fca841..1e91b73cae5 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -112,13 +112,11 @@ class mail_thread(osv.Model): _description = 'Email Thread' def _get_message_ids(self, cr, uid, ids, name, args, context=None): - res = {} + res = dict.fromkeys(ids) + for id in ids: + res[id] = {'message_ids': self.message_search(cr, uid, [id], context=context)} for thread in self.browse(cr, uid, ids, context=context): - message_ids = self.message_search(cr, uid, [thread.id], context=context) - res[id] = { - 'message_ids': message_ids, - 'message_summary': "9 %d + %d" % (len(message_ids), len(thread.message_follower_ids)), - } + res[thread.id]['message_summary'] = "9 %d + %d" % (len(res[thread.id]['message_ids']), len(thread.message_follower_ids)) return res def _search_message_ids(self, cr, uid, obj, name, args, context=None): @@ -203,7 +201,7 @@ class mail_thread(osv.Model): self.message_subscribe(cr, uid, [thread_id], [vals['user_id']], context=context) # create message - msg_id = message_obj.create(cr, uid, vals, context=context) + msg_id = self.pool.get('mail.message').create(cr, uid, vals, context=context) # Set as unread if writer is not the document responsible self.message_create_set_unread(cr, uid, [thread_id], context=context) @@ -218,7 +216,7 @@ class mail_thread(osv.Model): notification_obj.create(cr, uid, {'user_id': id, 'message_id': msg_id}, context=context) # create the email to send - email_id = self.message_create_notify_by_email(cr, uid, vals, user_to_push_ids, context=context) + self.message_create_notify_by_email(cr, uid, vals, user_to_push_ids, context=context) return msg_id From f397e44b2f2c23cb4ffb696c82e97f4a16f9b2f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 13 Aug 2012 21:54:19 +0200 Subject: [PATCH 091/165] [FIX] portal: mail_subscription -> mail_followers. bzr revid: tde@openerp.com-20120813195419-c1j3r95wyj7fb0hj --- addons/portal/security/ir.model.access.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/portal/security/ir.model.access.csv b/addons/portal/security/ir.model.access.csv index 37302891333..56b3ae5f269 100644 --- a/addons/portal/security/ir.model.access.csv +++ b/addons/portal/security/ir.model.access.csv @@ -6,7 +6,7 @@ access_widget_manager,access.portal.widget.manager,model_res_portal_widget,group access_mail_message,mail.message,mail.model_mail_message,group_portal_member,1,0,1,1 access_mail_message_all,mail.message.all,mail.model_mail_message,group_portal_member,1,0,0,0 access_mail_thread,mail.thread,mail.model_mail_thread,group_portal_member,1,0,0,0 -access_mail_subscription,mail.subscription,mail.model_mail_subscription,group_portal_member,1,0,1,1 +access_mail_followers,mail.followers,mail.model_mail_followers,group_portal_member,1,0,1,1 access_mail_notification,mail.notification,mail.model_mail_notification,group_portal_member,1,0,1,0 access_mail_group,mail.group,mail.model_mail_group,group_portal_member,1,0,0,0 access_mail_alias,mail.alias,mail.model_mail_alias,group_portal_member,1,0,0,0 From cfaeed15816fe9e9b4e65de164b6bbf637d29ea9 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 14 Aug 2012 09:14:57 +0200 Subject: [PATCH 092/165] Removed print in test bzr revid: nicolas.vanhoren@openerp.com-20120814071457-hw8d5yp6xzporiuo --- openerp/tests/test_html_sanitize.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openerp/tests/test_html_sanitize.py b/openerp/tests/test_html_sanitize.py index 3efb4a43ca5..85001996ee1 100755 --- a/openerp/tests/test_html_sanitize.py +++ b/openerp/tests/test_html_sanitize.py @@ -27,8 +27,7 @@ class TestSanitizer(unittest.TestCase): self.assertEqual(x, html_sanitize(x)) def test_test_case(self): - res = html_sanitize(test_case) - print res + html_sanitize(test_case) if __name__ == '__main__': unittest.main() \ No newline at end of file From 988e04188aadab688458eb62415f0eb9433bd3a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 11:32:02 +0200 Subject: [PATCH 093/165] [RM] Portal: removed res_users override, because partner_id is now in base. Removed view and update init and openerp files accordingly. bzr revid: tde@openerp.com-20120814093202-7do78o1h9z44aj53 --- addons/portal/__init__.py | 1 - addons/portal/__openerp__.py | 1 - addons/portal/res_user.py | 34 --------------------------------- addons/portal/res_user_view.xml | 19 ------------------ 4 files changed, 55 deletions(-) delete mode 100644 addons/portal/res_user.py delete mode 100644 addons/portal/res_user_view.xml diff --git a/addons/portal/__init__.py b/addons/portal/__init__.py index 65b924183e1..9c6cc59be7d 100644 --- a/addons/portal/__init__.py +++ b/addons/portal/__init__.py @@ -21,7 +21,6 @@ import portal import wizard -import res_user # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/portal/__openerp__.py b/addons/portal/__openerp__.py index 97183bccd9f..6669efbcf77 100644 --- a/addons/portal/__openerp__.py +++ b/addons/portal/__openerp__.py @@ -43,7 +43,6 @@ very handy when used in combination with the module 'share'. 'security/ir.model.access.csv', 'portal_view.xml', 'portal_data.xml', - 'res_user_view.xml', 'wizard/portal_wizard_view.xml', 'wizard/share_wizard_view.xml', ], diff --git a/addons/portal/res_user.py b/addons/portal/res_user.py deleted file mode 100644 index 9ed95a8a740..00000000000 --- a/addons/portal/res_user.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2011 OpenERP S.A (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from osv import osv, fields - - - -class res_users(osv.osv): - _inherit = 'res.users' - _columns = { - 'partner_id': fields.many2one('res.partner', - string='Related Partner'), - } - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/portal/res_user_view.xml b/addons/portal/res_user_view.xml deleted file mode 100644 index d481b865b79..00000000000 --- a/addons/portal/res_user_view.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - res.portal.users.form - res.users - form - - - - - - - - - - From f111a51f10b23307191ec9aac85438eef596be83 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 14 Aug 2012 11:44:01 +0200 Subject: [PATCH 094/165] Fixed problem when message is false (i think) bzr revid: nicolas.vanhoren@openerp.com-20120814094401-uv548xbylkfq8bun --- openerp/tools/html_sanitize.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openerp/tools/html_sanitize.py b/openerp/tools/html_sanitize.py index 74d83a2c453..e8896774dc1 100644 --- a/openerp/tools/html_sanitize.py +++ b/openerp/tools/html_sanitize.py @@ -3,6 +3,8 @@ from pyquery import PyQuery as pq import re def html_sanitize(x): + if not x: + return x root = pq("
      ") root.html(x) result = handle_element(root[0]) From 399119a0738e37237b72fdf862e10b349914dcbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 12:08:29 +0200 Subject: [PATCH 095/165] [IMP] res_users form view: added partnre. bzr revid: tde@openerp.com-20120814100829-usi8fu8auzf1c0le --- openerp/addons/base/res/res_users_view.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/addons/base/res/res_users_view.xml b/openerp/addons/base/res/res_users_view.xml index 65a64f81f2d..f32d65787de 100644 --- a/openerp/addons/base/res/res_users_view.xml +++ b/openerp/addons/base/res/res_users_view.xml @@ -105,6 +105,7 @@ + From 15d997d37b13f4efdf97dd340ee6ab35521ddac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 12:15:35 +0200 Subject: [PATCH 096/165] [RM] [CLEAN] auth_signup: removed unique constraint on email, because what is important is the login; added licence header in files. bzr revid: tde@openerp.com-20120814101535-3fxb1w88qh33srbi --- addons/auth_signup/__init__.py | 21 +++++++++++ addons/auth_signup/__openerp__.py | 61 +++++++++++++++++++++---------- addons/auth_signup/auth_signup.py | 28 ++++++++++---- addons/auth_signup/res_config.py | 21 +++++++++++ 4 files changed, 104 insertions(+), 27 deletions(-) diff --git a/addons/auth_signup/__init__.py b/addons/auth_signup/__init__.py index 2e404949550..1a120e52d18 100644 --- a/addons/auth_signup/__init__.py +++ b/addons/auth_signup/__init__.py @@ -1,2 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2012-today OpenERP SA () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see +# +############################################################################## + import res_config import auth_signup diff --git a/addons/auth_signup/__openerp__.py b/addons/auth_signup/__openerp__.py index a869c623db0..227d5f1017d 100644 --- a/addons/auth_signup/__openerp__.py +++ b/addons/auth_signup/__openerp__.py @@ -1,22 +1,43 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2009-today OpenERP SA () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see +# +############################################################################## + { - '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', - ], + '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/auth_signup/auth_signup.py b/addons/auth_signup/auth_signup.py index fedce607206..96d1ea132de 100644 --- a/addons/auth_signup/auth_signup.py +++ b/addons/auth_signup/auth_signup.py @@ -1,12 +1,26 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2012-today OpenERP SA () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see +# +############################################################################## + from openerp.osv import osv, fields -class res_users(osv.Model): - _inherit = 'res.users' - - _sql_constraints = [ - ('email_uniq', 'UNIQUE (email)', 'You can not have two users with the same email!') - ] - class signup_signup(osv.TransientModel): _name = 'auth.signup' diff --git a/addons/auth_signup/res_config.py b/addons/auth_signup/res_config.py index 2828a2b55fd..a9a490de8c5 100644 --- a/addons/auth_signup/res_config.py +++ b/addons/auth_signup/res_config.py @@ -1,3 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2012-today OpenERP SA () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see +# +############################################################################## + from openerp.osv import osv, fields class base_config_settings(osv.TransientModel): From b1e5c9e1ae1b997a44d2c273768cee4a41909b93 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 14 Aug 2012 12:40:52 +0200 Subject: [PATCH 097/165] [FIX] auth_openid: use set_cookie_and_redirect + handle errors correctly bzr revid: chs@openerp.com-20120814104052-tw5zgqu5nb12zj5c --- addons/auth_openid/controllers/main.py | 12 +++++------- addons/auth_openid/static/src/js/auth_openid.js | 16 +++++++--------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/addons/auth_openid/controllers/main.py b/addons/auth_openid/controllers/main.py index d77ef666aa4..eba711dae7a 100644 --- a/addons/auth_openid/controllers/main.py +++ b/addons/auth_openid/controllers/main.py @@ -28,6 +28,7 @@ import werkzeug.urls import werkzeug.exceptions from openerp.modules.registry import RegistryManager +from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect try: import openerp.addons.web.common.http as openerpweb except ImportError: @@ -159,7 +160,7 @@ class OpenIDController(openerpweb.Controller): def process(self, req, **kw): session = getattr(req.session, 'openid_session', None) if not session: - return werkzeug.utils.redirect('/') + return set_cookie_and_redirect(req, '/') oidconsumer = consumer.Consumer(session, self._store, consumer_class=GoogleAppsAwareConsumer) @@ -168,7 +169,6 @@ class OpenIDController(openerpweb.Controller): display_identifier = info.getDisplayIdentifier() session['status'] = info.status - user_id = None if info.status == consumer.SUCCESS: dbname = session['dbname'] @@ -206,10 +206,9 @@ class OpenIDController(openerpweb.Controller): # TODO fill empty fields with the ones from sreg/ax cr.commit() - req.session.authenticate(dbname, login, key, {}) + return login_and_redirect(req, dbname, login, key) - if not user_id: - session['message'] = 'This OpenID identifier is not associated to any active users' + session['message'] = 'This OpenID identifier is not associated to any active users' elif info.status == consumer.SETUP_NEEDED: session['message'] = info.setup_url @@ -223,8 +222,7 @@ class OpenIDController(openerpweb.Controller): # information in a log. session['message'] = 'Verification failed.' - fragment = '#loginerror' if not user_id else '' - return werkzeug.utils.redirect('/' + fragment) + return set_cookie_and_redirect(req, '/#action=login&loginerror=1') @openerpweb.jsonrequest def status(self, req): diff --git a/addons/auth_openid/static/src/js/auth_openid.js b/addons/auth_openid/static/src/js/auth_openid.js index fd6ec01cc0f..1417bc471ce 100644 --- a/addons/auth_openid/static/src/js/auth_openid.js +++ b/addons/auth_openid/static/src/js/auth_openid.js @@ -8,7 +8,7 @@ instance.web.Login = instance.web.Login.extend({ this._super.apply(this, arguments); var self = this; - this._default_error_message = this.$element.find('.login_error_message').text(); + this._default_error_message = this.$element.find('.oe_login_error_message').text(); this.$openid_selected_button = $(); this.$openid_selected_input = $(); @@ -40,8 +40,7 @@ instance.web.Login = instance.web.Login.extend({ } }); - this._check_fragment(); - + this._check_error(); }, @@ -67,11 +66,9 @@ instance.web.Login = instance.web.Login.extend({ }, - _check_fragment: function() { + _check_error: function() { var self = this; - var fragment = jQuery.deparam.fragment(); - console.log(fragment); - if (fragment.loginerror !== undefined) { + if (this.params.loginerror !== undefined) { this.rpc('/auth_openid/login/status', {}, function(result) { if (_.contains(['success', 'failure'], result.status) && result.message) { self.do_warn('Invalid OpenID Login', result.message); @@ -132,11 +129,12 @@ instance.web.Login = instance.web.Login.extend({ do_warn: function(title, msg) { //console.warn(title, msg); - this.$element.find('.login_error_message').text(msg).show(); + this.$element.find('.oe_login_error_message').text(msg).show(); + this._super(title, msg); }, reset_error_message: function() { - this.$element.find('.login_error_message').text(this._default_error_message); + this.$element.find('.oe_login_error_message').text(this._default_error_message); } }); From 70f8659e7876a8b2a1ec64fac1d2f22a1d21f9e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 13:39:37 +0200 Subject: [PATCH 098/165] [IMP] mail_thread: method to calculate mail values is now _get_message_data; added message_is_follower field, with its computation; cleaned a bit the code. bzr revid: tde@openerp.com-20120814113937-a7279ud2rj5fixl9 --- addons/mail/mail_thread.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index fbbac88639b..efba082fee4 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -106,17 +106,22 @@ class mail_thread(osv.Model): methods (calling ``super``) to add model-specific behavior at creation and update of a thread. - TODO: UPDATE WITIH SUBTYPE / NEW FOLLOW MECHANISM + #TODO: UPDATE WITH SUBTYPE / NEW FOLLOW MECHANISM ''' _name = 'mail.thread' _description = 'Email Thread' - def _get_message_ids(self, cr, uid, ids, name, args, context=None): + def _get_message_data(self, cr, uid, ids, field_names, args, context=None): res = dict.fromkeys(ids) for id in ids: res[id] = {'message_ids': self.message_search(cr, uid, [id], context=context)} for thread in self.browse(cr, uid, ids, context=context): - res[thread.id]['message_summary'] = "9 %d + %d" % (len(res[thread.id]['message_ids']), len(thread.message_follower_ids)) + message_follower_ids = [follower.id for follower in thread.message_follower_ids] + res[thread.id].update({ + 'message_is_follower': uid in message_follower_ids, + 'message_summary': "9 %d + %d" % + (len(res[thread.id]['message_ids']), len(thread.message_follower_ids)) + }) return res def _search_message_ids(self, cr, uid, obj, name, args, context=None): @@ -125,19 +130,22 @@ class mail_thread(osv.Model): return [('id', 'in', msg_ids)] _columns = { - 'message_ids': fields.function(_get_message_ids, + 'message_ids': fields.function(_get_message_data, fnct_search=_search_message_ids, type='one2many', obj='mail.message', _fields_id = 'res_id', - string='Temp messages', multi="_get_message_ids", + string='Temp messages', multi="_get_message_data", help="Functional field holding messages related to the current document."), 'message_follower_ids': many2many_reference('res.users', rel='mail_followers', id1='res_id', id2='user_id', string="Followers", help="Followers of the document. The followers have full access to " \ "the document details, as well as the conversation."), + 'message_is_follower': fields.function(_get_message_data, method=True, + type='boolean', string='I am Follower', multi='_get_message_data', + help='True if the current user is following the current document.'), 'message_state': fields.boolean('Read', help="When checked, new messages require your attention."), - 'message_summary': fields.function(_get_message_ids, method=True, - type='text', string='Summary', multi="_get_message_ids", + 'message_summary': fields.function(_get_message_data, method=True, + type='text', string='Summary', multi='_get_message_data', help="Holds the Chatter summary (number of messages, ...). "\ "This summary is directly in html format in order to "\ "be inserted in kanban views."), From 4dd85980ec251de04343e2330997b1a4b14e5895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 13:40:21 +0200 Subject: [PATCH 099/165] [IMP] mail_group: removed fields now delegated to mail_thread; updated doc and kanban view accordingly. bzr revid: tde@openerp.com-20120814114021-vwiz24yu2mo75jt7 --- addons/mail/mail_group.py | 27 +++------------------------ addons/mail/mail_group_view.xml | 14 +++++++++----- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index fb7c0b53b29..82dcb4bc50b 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -29,18 +29,12 @@ import tools from tools.translate import _ from lxml import etree -class mail_group(osv.osv): +class mail_group(osv.Model): """ A mail_group is a collection of users sharing messages in a discussion group. Group users are users that follow the mail group, using the subscription/follow mechanism of OpenSocial. A mail group has nothing in common with res.users.group. - Additional information on fields: - - ``member_ids``: user member of the groups are calculated with - ``message_get_subscribers`` method from mail.thread - - ``member_count``: calculated with member_ids - - ``is_subscriber``: calculated with member_ids - """ _description = 'Discussion group' @@ -57,18 +51,7 @@ class mail_group(osv.osv): def _set_image(self, cr, uid, id, name, value, args, context=None): return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context) - def get_followers_data(self, cr, uid, ids, field_names, args, context=None): - if context is None: - context = {} - result = dict.fromkeys(ids) - for thread in self.browse(cr, uid, ids, context=context): - result[thread.id] = { - 'member_count': len(thread.message_follower_ids), - 'is_subscriber': uid in [follower.id for follower in thread.message_follower_ids], - } - return result - - def get_last_month_msg_nbr(self, cr, uid, ids, name, args, context=None): + def _get_last_month_msg_nbr(self, cr, uid, ids, name, args, context=None): result = {} message_obj = self.pool.get('mail.message') for id in ids: @@ -113,11 +96,7 @@ class mail_group(osv.osv): help="Small-sized photo of the group. It is automatically "\ "resized as a 50x50px image, with aspect ratio preserved. "\ "Use this field anywhere a small image is required."), - 'member_count': fields.function(get_followers_data, type='integer', - string='Member count', multi='get_followers_data'), - 'is_subscriber': fields.function(get_followers_data, type='boolean', - string='Joined', multi='get_followers_data'), - 'last_month_msg_nbr': fields.function(get_last_month_msg_nbr, type='integer', + 'last_month_msg_nbr': fields.function(_get_last_month_msg_nbr, type='integer', string='Messages count for last month'), 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True, help="The email address associated with this group. New emails received will automatically " diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml index 92fdd795359..4f25ba300be 100644 --- a/addons/mail/mail_group_view.xml +++ b/addons/mail/mail_group_view.xml @@ -10,6 +10,8 @@ + +
      @@ -17,17 +19,19 @@
      -
      +

      -
      From 19abc35ce640fae67dc13126c829913e93f4158a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 13:52:22 +0200 Subject: [PATCH 100/165] [CLEAN] Cleaned mail_group and mail.js due to the merge of trunk. bzr revid: tde@openerp.com-20120814115222-gxunwfuttejrock0 --- addons/mail/mail_group.py | 12 ++++++------ addons/mail/static/src/js/mail.js | 2 -- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index d9519caf6d3..84008548d96 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -64,21 +64,21 @@ class mail_group(osv.Model): return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64')) _columns = { - #'name': fields.char('Group Name', size=64, required=True), 'description': fields.text('Description'), 'menu_id': fields.many2one('ir.ui.menu', string='Related Menu', required=True, ondelete="cascade"), 'responsible_id': fields.many2one('res.users', string='Responsible', ondelete='set null', required=True, select=1, help="Responsible of the group that has all rights on the record."), - 'public': fields.selection([('public','Public'),('private','Private'),('groups','Selected Group Only')], 'Privacy', required=True, - help='This group is visible by non members. \ - Invisible groups can add members through the invite button.'), + 'public': fields.selection([('public', 'Public'), ('private', 'Private'), ('groups', 'Selected Group Only')], + string='Privacy', required=True, + help='This group is visible by non members. '\ + 'Invisible groups can add members through the invite button.'), 'group_public_id': fields.many2one('res.groups', string='Authorized Group'), 'group_ids': fields.many2many('res.groups', rel='mail_group_res_group_rel', id1='mail_group_id', id2='groups_id', string='Auto Subscription', help="Members of those groups will automatically added as followers. "\ - "Note that they will be able to manage their subscription manually "\ - "if necessary."), + "Note that they will be able to manage their subscription manually "\ + "if necessary."), 'image': fields.binary("Photo", help="This field holds the image used as photo for the "\ "user. The image is base64 encoded, and PIL-supported. "\ diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 500d0b9c138..16404b28594 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -911,7 +911,6 @@ openerp.mail = function(session) { this.params.res_id = params.res_id || false; this.params.search_view_id = params.search_view_id || false; this.params.thread_level = params.thread_level || 1; - this.params.title = params.title || false; this.comments_structure = {'root_ids': [], 'new_root_ids': [], 'msgs': {}, 'tree_struct': {}, 'model_to_root_ids': {}}; this.display_show_more = true; this.thread_list = []; @@ -956,7 +955,6 @@ openerp.mail = function(session) { if (this.compose_message_widget) { this.compose_message_widget.destroy(); } - debugger; this.compose_message_widget = new mail.ComposeMessage(this, { 'extended_mode': false, 'uid': this.session.uid, 'res_model': this.params.res_model, 'res_id': this.params.res_id, 'mode': mode || 'comment', 'msg_id': msg_id }); From ebc010fd39507ff60d950e9866325d16c8e7fca2 Mon Sep 17 00:00:00 2001 From: "vta vta@openerp.com" <> Date: Tue, 14 Aug 2012 13:55:55 +0200 Subject: [PATCH 101/165] [FIX] Fixed auth_oauth method bzr revid: vta@openerp.com-20120814115555-qyveeb9fibs598rh --- addons/auth_oauth/controllers/main.py | 20 ++++---- addons/auth_oauth/res_users.py | 69 ++++++++++++++------------- addons/auth_oauth/res_users.xml | 23 +++++++++ addons/auth_signup/res_users.py | 51 ++++++++------------ 4 files changed, 92 insertions(+), 71 deletions(-) create mode 100644 addons/auth_oauth/res_users.xml diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py index e0284638291..381602dff46 100644 --- a/addons/auth_oauth/controllers/main.py +++ b/addons/auth_oauth/controllers/main.py @@ -1,5 +1,4 @@ import logging -import urllib2 import werkzeug.urls import werkzeug.utils @@ -13,25 +12,30 @@ _logger = logging.getLogger(__name__) class OAuthController(openerpweb.Controller): _cp_path = '/auth_oauth' + def list_providers(self, req, dbname): + #dbname = kw.get("state") + #registry = openerp.modules.registry.RegistryManager.get(dbname) + #with registry.cursor() as cr: + # dsfasdf + pass + @openerpweb.httprequest def signin(self, req, **kw): dbname = kw.get("state") registry = openerp.modules.registry.RegistryManager.get(dbname) - cr = registry.db.cursor() - try: + with registry.cursor() as cr: try: u = registry.get('res.users') - r = u.auth_oauth(cr, 1, kw) + credentials = u.auth_oauth(cr, 1, kw) cr.commit() - return openerp.addons.web.controllers.main.login_and_redirect(req, *r) + return openerp.addons.web.controllers.main.login_and_redirect(req, *credentials) except AttributeError: # auth_signup is not installed url = "/#action=auth_signup&error=1" except Exception,e: # signup error url = "/#action=auth_signup&error=2" - finally: - cr.close() - return werkzeug.utils.redirect("https://localhost") + return werkzeug.utils.redirect("http://localhost:8069") + # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py index 5349cbf529e..98bd020a8c0 100644 --- a/addons/auth_oauth/res_users.py +++ b/addons/auth_oauth/res_users.py @@ -17,19 +17,19 @@ class res_users(osv.Model): readonly=True), } - def auth_oauth_rpc(self, cr, uid, endpoint, params, context=None): - url = endpoint + params.get('access_token') + def auth_oauth_rpc(self, cr, uid, endpoint, access_token, context=None): + url = endpoint + access_token f = urllib2.urlopen(url) - validation = f.read() - return simplejson.loads(validation) + response = f.read() + return simplejson.loads(response) - def auth_oauth_fetch_user_validation(self, cr, uid, params, context=None): + def auth_oauth_fetch_user_validation(self, cr, uid, access_token, context=None): endpoint = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=' - return self.auth_oauth_rpc(cr, uid, endpoint, params) + return self.auth_oauth_rpc(cr, uid, endpoint, access_token) - def auth_oauth_fetch_user_data(self, cr, uid, params): + def auth_oauth_fetch_user_data(self, cr, uid, access_token, context=None): endpoint = 'https://www.googleapis.com/oauth2/v1/userinfo?access_token=' - return self.auth_oauth_rpc(cr, uid, endpoint, params) + return self.auth_oauth_rpc(cr, uid, endpoint, access_token) def auth_oauth(self, cr, uid, params, context=None): # Advice by Google (to avoid Confused Deputy Problem) @@ -37,33 +37,36 @@ class res_users(osv.Model): # abort() # else: # continue with the process - validation = self.auth_oauth_fetch_user_validation(cr, uid, params) + + access_token = params.get('access_token') + + validation = self.auth_oauth_fetch_user_validation(cr, uid, access_token, context=context) + if validation.get("error"): + raise openerp.exceptions.AccessDenied + login = validation['email'] oauth_uid = validation['user_id'] name = self.auth_oauth_fetch_user_data(cr, uid, params)['name'] - r = (cr.dbname, login, oauth_uid) - try: - # check for existing user - if not self.auth_signup_check(cr, uid, login, oauth_uid): - # new user - new_user = { - 'name': name, - 'login': login, - 'user_email': login, - 'password': oauth_uid, - 'oauth_provider': 'Google', - 'oauth_uid': oauth_uid, - 'oauth_access_token': params.get('access_token'), - 'active': True, - } - self.auth_signup_create(cr, uid, new_user) - return r - else: - # already existing with same password - return r - except openerp.exceptions.AccessDenied: - # already existing with diffrent password - raise + + r = (cr.dbname, login, access_token) + + res = self.search(cr, uid, [("oauth_uid", "=", oauth_uid)]) + if res: + self.write(cr, uid, res[0]['id'], {'oauth_access_token':access_token}) + else: + # New user + new_user = { + 'name': name, + 'login': login, + 'user_email': login, + 'oauth_provider': 'Google', + 'oauth_uid': oauth_uid, + 'oauth_access_token': access_token, + 'active': True, + } + self.auth_signup_create(cr, uid, new_user) + return r + def check(self, db, uid, passwd): try: @@ -77,7 +80,7 @@ class res_users(osv.Model): cr.execute('''SELECT COUNT(1) FROM res_users WHERE id=%s - AND oauth_key=%s + AND oauth_access_token=%s AND active=%s''', (int(uid), passwd, True)) if not cr.fetchone()[0]: diff --git a/addons/auth_oauth/res_users.xml b/addons/auth_oauth/res_users.xml new file mode 100644 index 00000000000..995dbfbd52a --- /dev/null +++ b/addons/auth_oauth/res_users.xml @@ -0,0 +1,23 @@ + + + + + res.users.form + res.users + form + + + + + + + + + + + + + + + + diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py index 0076787cc6d..1d77a3f9473 100644 --- a/addons/auth_signup/res_users.py +++ b/addons/auth_signup/res_users.py @@ -19,37 +19,28 @@ class res_users(osv.Model): else: self.pool.get('res.users').create(cr, 1, new_user, context=context) - def auth_signup_check(self, cr, uid, login, key, context=None): - res = self.search(cr, uid, [("login", "=", login)]) - if res: - user_id = res[0] - self.check(cr.dbname, user_id, key) - return user_id - return False - def auth_signup(self, cr, uid, name, login, password, context=None): r = (cr.dbname, login, password) - try: - # check for existing user - if not self.auth_signup_check(cr, uid, login, password): - print "NEW USER" - # new user - new_user = { - 'name': name, - 'login': login, - 'user_email': login, - 'password': password, - 'active': True, - } - self.auth_signup_create(cr, uid, new_user) - return r - else: - print "Existing same" - # already existing with same password - return r - except openerp.exceptions.AccessDenied: - print "Existing different" - # already existing with diffrent password - raise + res = self.search(cr, uid, [("login", "=", login)]) + if res: + # Existing user + user_id = res[0] + try: + self.check(cr.dbname, user_id, password) + # Same password + except openerp.exceptions.AccessDenied: + # Different password + raise + else: + # New user + new_user = { + 'name': name, + 'login': login, + 'user_email': login, + 'password': password, + 'active': True, + } + self.auth_signup_create(cr, uid, new_user) + return r # From 89e404301bdaa57dc2bbe351bfefac993ade9b38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 14:12:02 +0200 Subject: [PATCH 102/165] [CLEAN] mail_group_menu: cleaned file, added some doc. bzr revid: tde@openerp.com-20120814121202-zuhu88g95p78ggdc --- addons/mail/mail_group_menu.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/addons/mail/mail_group_menu.py b/addons/mail/mail_group_menu.py index 38756f69928..8625285d640 100644 --- a/addons/mail/mail_group_menu.py +++ b/addons/mail/mail_group_menu.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2010-today OpenERP SA () +# Copyright (C) 2012-today OpenERP SA () # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -24,21 +24,29 @@ from osv import fields from tools.translate import _ class ir_ui_menu(osv.osv): + """ Override of ir.ui.menu class. When adding mail_thread module, each + new mail.group will create a menu entry. This overrides checks that + the current user is in the mail.group followers. If not, the menu + entry is taken off the list of menu ids. This way the user will see + menu entries for the mail.group he is following. + """ _inherit = 'ir.ui.menu' + _columns = { 'mail_group_id': fields.many2one('mail.group', 'Mail Group') } - def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): - ids = super(ir_ui_menu, self).search(cr, uid, args, offset=0, limit=None, order=order, context=context, count=False) - subs = self.pool.get('mail.subscription') + def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): + """ Override to take off menu entries (mail.group) the user is not + following. """ + ids = super(ir_ui_menu, self).search(cr, uid, args, offset=0, limit=None, order=order, context=context, count=False) + follower_obj = self.pool.get('mail.followers') for menu in self.browse(cr, uid, ids, context=context): if menu.mail_group_id: - sub_ids = subs.search(cr, uid, [ - ('user_id','=',uid),('res_model','=','mail.group'), - ('res_id','=',menu.mail_group_id.id) + sub_ids = follower_obj.search(cr, uid, [ + ('user_id', '=', uid), ('res_model', '=', 'mail.group'), + ('res_id', '=', menu.mail_group_id.id) ], context=context) if not sub_ids: ids.remove(menu.id) return ids - From 63ae87fb4cc5931e900806677b29366c0c9876fd Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 14 Aug 2012 14:14:25 +0200 Subject: [PATCH 103/165] Fixed encoding problems bzr revid: nicolas.vanhoren@openerp.com-20120814121425-jq3ieebbsa7rcds5 --- openerp/tests/test_html_sanitize.py | 4 ++++ openerp/tools/html_sanitize.py | 2 ++ 2 files changed, 6 insertions(+) diff --git a/openerp/tests/test_html_sanitize.py b/openerp/tests/test_html_sanitize.py index 85001996ee1..90ccc88cc1d 100755 --- a/openerp/tests/test_html_sanitize.py +++ b/openerp/tests/test_html_sanitize.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +# -*- coding: utf-8 -*- import unittest from openerp.tools.html_sanitize import html_sanitize @@ -28,6 +29,9 @@ class TestSanitizer(unittest.TestCase): def test_test_case(self): html_sanitize(test_case) + + def test_crm(self): + html_sanitize("Merci à l'intérêt pour notre produit.nous vous contacterons bientôt. Merci") if __name__ == '__main__': unittest.main() \ No newline at end of file diff --git a/openerp/tools/html_sanitize.py b/openerp/tools/html_sanitize.py index e8896774dc1..5164ceb276e 100644 --- a/openerp/tools/html_sanitize.py +++ b/openerp/tools/html_sanitize.py @@ -6,6 +6,8 @@ def html_sanitize(x): if not x: return x root = pq("
      ") + if type(x) == str: + x = unicode(x, "utf8", "replace") root.html(x) result = handle_element(root[0]) new = pq(result) From ba5168192a63eba549ce0172b9127c2ba8468671 Mon Sep 17 00:00:00 2001 From: "vta vta@openerp.com" <> Date: Tue, 14 Aug 2012 14:46:36 +0200 Subject: [PATCH 104/165] [FIX] main.py bzr revid: vta@openerp.com-20120814124636-nhv4iurcc9phe3cm --- addons/auth_oauth/controllers/main.py | 4 +++- addons/auth_oauth/res_users.py | 11 ++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py index 381602dff46..664d510e65f 100644 --- a/addons/auth_oauth/controllers/main.py +++ b/addons/auth_oauth/controllers/main.py @@ -31,11 +31,13 @@ class OAuthController(openerpweb.Controller): return openerp.addons.web.controllers.main.login_and_redirect(req, *credentials) except AttributeError: # auth_signup is not installed + _logger.exception("attribute error") url = "/#action=auth_signup&error=1" except Exception,e: # signup error + _logger.exception('oops') url = "/#action=auth_signup&error=2" - return werkzeug.utils.redirect("http://localhost:8069") + return openerp.addons.web.controllers.main.set_cookie_and_redirect(req, "/") # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py index 98bd020a8c0..4cae3bd4880 100644 --- a/addons/auth_oauth/res_users.py +++ b/addons/auth_oauth/res_users.py @@ -1,3 +1,5 @@ +import logging + import urllib2 import simplejson @@ -5,6 +7,8 @@ import openerp from openerp.osv import osv, fields +_logger = logging.getLogger(__name__) + class res_users(osv.Model): _inherit = 'res.users' @@ -46,13 +50,14 @@ class res_users(osv.Model): login = validation['email'] oauth_uid = validation['user_id'] - name = self.auth_oauth_fetch_user_data(cr, uid, params)['name'] + name = self.auth_oauth_fetch_user_data(cr, uid, access_token)['name'] r = (cr.dbname, login, access_token) - + res = self.search(cr, uid, [("oauth_uid", "=", oauth_uid)]) + _logger.exception(res) if res: - self.write(cr, uid, res[0]['id'], {'oauth_access_token':access_token}) + self.write(cr, uid, res[0], {'oauth_access_token':access_token}) else: # New user new_user = { From 183b85f750e8911d22d10304ad00c7b5c95e2fcf Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 14 Aug 2012 15:31:07 +0200 Subject: [PATCH 105/165] [IMP] Removed OldWidget in data.js bzr revid: nicolas.vanhoren@openerp.com-20120814133107-prmdonwh6f7gu276 --- addons/web/static/src/js/data.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 2589afe5503..1cdb4a713f1 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -439,7 +439,7 @@ instance.web.data = { }) }; -instance.web.DataGroup = instance.web.OldWidget.extend( /** @lends openerp.web.DataGroup# */{ +instance.web.DataGroup = instance.web.CallbackEnabled.extend( /** @lends openerp.web.DataGroup# */{ /** * Management interface between views and grouped collections of OpenERP * records. @@ -451,9 +451,9 @@ instance.web.DataGroup = instance.web.OldWidget.extend( /** @lends openerp.web. * content of the current grouping level. * * @constructs instance.web.DataGroup - * @extends instance.web.OldWidget + * @extends instance.web.CallbackEnabled * - * @param {instance.web.OldWidget} parent widget + * @param {instance.web.CallbackEnabled} parent widget * @param {String} model name of the model managed by this DataGroup * @param {Array} domain search domain for this DataGroup * @param {Object} context context of the DataGroup's searches @@ -524,13 +524,13 @@ instance.web.StaticDataGroup = instance.web.GrouplessDataGroup.extend( /** @lend } }); -instance.web.DataSet = instance.web.OldWidget.extend( /** @lends openerp.web.DataSet# */{ +instance.web.DataSet = instance.web.CallbackEnabled.extend( /** @lends openerp.web.DataSet# */{ /** * DateaManagement interface between views and the collection of selected * OpenERP records (represents the view's state?) * * @constructs instance.web.DataSet - * @extends instance.web.OldWidget + * @extends instance.web.CallbackEnabled * * @param {String} model the OpenERP model this dataset will manage */ From 3ebfaedd64e27de71bf7a39d33b14dd9518680ee Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 14 Aug 2012 15:42:46 +0200 Subject: [PATCH 106/165] [IMP] removed a lot of OldWidget usage bzr revid: nicolas.vanhoren@openerp.com-20120814134246-y2awqbt2i1hcan61 --- addons/web/static/src/js/search.js | 4 ++-- addons/web/static/src/js/view_form.js | 4 ++-- addons/web_kanban/static/src/js/kanban.js | 4 ++-- addons/web_tests/static/src/js/web_tests.js | 2 +- addons/web_view_editor/static/src/js/view_editor.js | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index d8611b924cf..0e3a5eb0dee 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -1737,11 +1737,11 @@ instance.web.search.Advanced = instance.web.search.Input.extend({ } }); -instance.web.search.ExtendedSearchProposition = instance.web.OldWidget.extend(/** @lends instance.web.search.ExtendedSearchProposition# */{ +instance.web.search.ExtendedSearchProposition = instance.web.Widget.extend(/** @lends instance.web.search.ExtendedSearchProposition# */{ template: 'SearchView.extended_search.proposition', /** * @constructs instance.web.search.ExtendedSearchProposition - * @extends instance.web.OldWidget + * @extends instance.web.Widget * * @param parent * @param fields diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index af8cc791ac2..17574caf90b 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2173,7 +2173,7 @@ instance.web.form.FieldFloat = instance.web.form.FieldChar.extend({ } }); -instance.web.DateTimeWidget = instance.web.OldWidget.extend({ +instance.web.DateTimeWidget = instance.web.Widget.extend({ template: "web.datepicker", jqueryui_object: 'datetimepicker', type_of_date: "datetime", @@ -4097,7 +4097,7 @@ instance.web.form.Many2ManyQuickCreate = instance.web.Widget.extend({ /** * Class with everything which is common between FormOpenPopup and SelectCreatePopup. */ -instance.web.form.AbstractFormPopup = instance.web.OldWidget.extend({ +instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ template: "AbstractFormPopup.render", /** * options: diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 36394894167..0f55975ff33 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -343,7 +343,7 @@ function get_class(name) { return new instance.web.Registry({'tmp' : name}).get_object("tmp"); } -instance.web_kanban.KanbanGroup = instance.web.OldWidget.extend({ +instance.web_kanban.KanbanGroup = instance.web.Widget.extend({ template: 'KanbanView.group_header', init: function (parent, records, group, dataset) { var self = this; @@ -517,7 +517,7 @@ instance.web_kanban.KanbanGroup = instance.web.OldWidget.extend({ } }); -instance.web_kanban.KanbanRecord = instance.web.OldWidget.extend({ +instance.web_kanban.KanbanRecord = instance.web.Widget.extend({ template: 'KanbanView.record', init: function (parent, record) { this._super(parent); diff --git a/addons/web_tests/static/src/js/web_tests.js b/addons/web_tests/static/src/js/web_tests.js index e006567c707..ffc32a93aaf 100644 --- a/addons/web_tests/static/src/js/web_tests.js +++ b/addons/web_tests/static/src/js/web_tests.js @@ -2,7 +2,7 @@ openerp.web_tests = function (instance) { instance.web.client_actions.add( 'buncha-forms', 'instance.web_tests.BunchaForms'); instance.web_tests = {}; - instance.web_tests.BunchaForms = instance.web.OldWidget.extend({ + instance.web_tests.BunchaForms = instance.web.Widget.extend({ init: function (parent) { this._super(parent); this.dataset = new instance.web.DataSetSearch(this, 'test.listview.relations'); diff --git a/addons/web_view_editor/static/src/js/view_editor.js b/addons/web_view_editor/static/src/js/view_editor.js index cfdd5d6bfea..5e04134d1ce 100644 --- a/addons/web_view_editor/static/src/js/view_editor.js +++ b/addons/web_view_editor/static/src/js/view_editor.js @@ -19,7 +19,7 @@ instance.web.ViewManagerAction.include({ } } }) -instance.web_view_editor.ViewEditor = instance.web.OldWidget.extend({ +instance.web_view_editor.ViewEditor = instance.web.Widget.extend({ init: function(parent, element_id, dataset, view, options) { this._super(parent); this.element_id = element_id; From 6229869bc18b57fe27de48973e6a84bc0c228703 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 14 Aug 2012 15:53:24 +0200 Subject: [PATCH 107/165] Removed remaining usages bzr revid: nicolas.vanhoren@openerp.com-20120814135324-7s3nmywqyikgvvui --- addons/web/static/src/js/coresetup.js | 26 ------------ addons/web_kanban/static/src/js/kanban.js | 6 ++- .../web_mobile/static/src/js/chrome_mobile.js | 42 +++++++++++++++---- .../web_mobile/static/src/js/form_mobile.js | 2 +- .../web_mobile/static/src/js/list_mobile.js | 2 +- 5 files changed, 40 insertions(+), 38 deletions(-) diff --git a/addons/web/static/src/js/coresetup.js b/addons/web/static/src/js/coresetup.js index 6ba62162e93..44e2d3aba78 100644 --- a/addons/web/static/src/js/coresetup.js +++ b/addons/web/static/src/js/coresetup.js @@ -11,32 +11,6 @@ if (!console.debug) { openerp.web.coresetup = function(instance) { -/** - * @deprecated use :class:`instance.web.Widget` - */ -instance.web.OldWidget = instance.web.Widget.extend({ - init: function(parent, element_id) { - this._super(parent); - this.element_id = element_id; - this.element_id = this.element_id || _.uniqueId('widget-'); - - var tmp = document.getElementById(this.element_id); - this.setElement(tmp || this._make_descriptive()); - }, - renderElement: function() { - var rendered = this.render(); - if (rendered) { - this.replaceElement($(rendered)); - } - return this; - }, - render: function (additional) { - if (this.template) - return instance.web.qweb.render(this.template, _.extend({widget: this}, additional || {})); - return null; - } -}); - /** Session openerp specific RPC class */ instance.web.Session = instance.web.JsonRPC.extend( /** @lends instance.web.Session# */{ init: function() { diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 0f55975ff33..fe14b4c697f 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -563,7 +563,7 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({ }); return new_record; }, - render: function() { + renderElement: function() { this.qweb_context = { record: this.record, widget: this, @@ -574,9 +574,11 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({ this.qweb_context[p] = _.bind(this[p], this); } } - return this._super({ + var $el = instance.web.qweb.render(this.template, { + 'widget': this, 'content': this.view.qweb.render('kanban-box', this.qweb_context) }); + this.replaceElement($el); }, bind_events: function() { var self = this; diff --git a/addons/web_mobile/static/src/js/chrome_mobile.js b/addons/web_mobile/static/src/js/chrome_mobile.js index 029e4bce49b..fce7aed6d48 100644 --- a/addons/web_mobile/static/src/js/chrome_mobile.js +++ b/addons/web_mobile/static/src/js/chrome_mobile.js @@ -11,7 +11,33 @@ instance.web_mobile.mobilewebclient = function(element_id) { return client; }; -instance.web_mobile.MobileWebClient = instance.web.OldWidget.extend({ +/** + * @deprecated use :class:`instance.web.Widget` + */ +instance.web_mobile.MobileWidget = instance.web.Widget.extend({ + init: function(parent, element_id) { + this._super(parent); + this.element_id = element_id; + this.element_id = this.element_id || _.uniqueId('widget-'); + + var tmp = document.getElementById(this.element_id); + this.setElement(tmp || this._make_descriptive()); + }, + renderElement: function() { + var rendered = this.render(); + if (rendered) { + this.replaceElement($(rendered)); + } + return this; + }, + render: function (additional) { + if (this.template) + return instance.web.qweb.render(this.template, _.extend({widget: this}, additional || {})); + return null; + } +}); + +instance.web_mobile.MobileWebClient = instance.web_mobile.MobileWidget.extend({ template: "WebClient", @@ -31,7 +57,7 @@ instance.web_mobile.MobileWebClient = instance.web.OldWidget.extend({ } }); -instance.web_mobile.Login = instance.web.OldWidget.extend({ +instance.web_mobile.Login = instance.web_mobile.MobileWidget.extend({ template: "Login", @@ -118,7 +144,7 @@ instance.web_mobile.Login = instance.web.OldWidget.extend({ } }); -instance.web_mobile.Header = instance.web.OldWidget.extend({ +instance.web_mobile.Header = instance.web_mobile.MobileWidget.extend({ template: "Header", @@ -130,7 +156,7 @@ instance.web_mobile.Header = instance.web.OldWidget.extend({ } }); -instance.web_mobile.Footer = instance.web.OldWidget.extend({ +instance.web_mobile.Footer = instance.web_mobile.MobileWidget.extend({ template: "Footer", @@ -142,7 +168,7 @@ instance.web_mobile.Footer = instance.web.OldWidget.extend({ } }); -instance.web_mobile.Shortcuts = instance.web.OldWidget.extend({ +instance.web_mobile.Shortcuts = instance.web_mobile.MobileWidget.extend({ template: "Shortcuts", @@ -181,7 +207,7 @@ instance.web_mobile.Shortcuts = instance.web.OldWidget.extend({ } }); -instance.web_mobile.Menu = instance.web.OldWidget.extend({ +instance.web_mobile.Menu = instance.web_mobile.MobileWidget.extend({ template: "Menu", @@ -247,7 +273,7 @@ instance.web_mobile.Menu = instance.web.OldWidget.extend({ } }); -instance.web_mobile.Secondary = instance.web.OldWidget.extend({ +instance.web_mobile.Secondary = instance.web_mobile.MobileWidget.extend({ template: "Menu.secondary", @@ -304,7 +330,7 @@ instance.web_mobile.Secondary = instance.web.OldWidget.extend({ } }); -instance.web_mobile.Options = instance.web.OldWidget.extend({ +instance.web_mobile.Options = instance.web_mobile.MobileWidget.extend({ template: "Options", diff --git a/addons/web_mobile/static/src/js/form_mobile.js b/addons/web_mobile/static/src/js/form_mobile.js index c3c2025ac1f..6b3cd09175e 100644 --- a/addons/web_mobile/static/src/js/form_mobile.js +++ b/addons/web_mobile/static/src/js/form_mobile.js @@ -4,7 +4,7 @@ openerp.web_mobile.form_mobile = function (instance) { -instance.web_mobile.FormView = instance.web.OldWidget.extend({ +instance.web_mobile.FormView = instance.web_mobile.MobileWidget.extend({ template: 'FormView', diff --git a/addons/web_mobile/static/src/js/list_mobile.js b/addons/web_mobile/static/src/js/list_mobile.js index abe5620a0a3..b48753c82f2 100644 --- a/addons/web_mobile/static/src/js/list_mobile.js +++ b/addons/web_mobile/static/src/js/list_mobile.js @@ -4,7 +4,7 @@ openerp.web_mobile.list_mobile = function (instance) { -instance.web_mobile.ListView = instance.web.OldWidget.extend({ +instance.web_mobile.ListView = instance.web_mobile.MobileWidget.extend({ template: 'ListView', From b7a562905272f7d2959e3ca24ea792c3f886710e Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 14 Aug 2012 16:30:03 +0200 Subject: [PATCH 108/165] [FIX] invocation of import and export dialogs bzr revid: xmo@openerp.com-20120814143003-ss974ub0yym09gyt --- addons/web/static/src/js/views.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 7c9dfe1d543..7f2a0b10bbe 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -1331,12 +1331,10 @@ instance.web.View = instance.web.Widget.extend({ do_search: function(view) { }, on_sidebar_import: function() { - var import_view = new instance.web.DataImport(this, this.dataset); - import_view.start(); + new instance.web.DataImport(this, this.dataset).open(); }, on_sidebar_export: function() { - var export_view = new instance.web.DataExport(this, this.dataset); - export_view.start(); + new instance.web.DataExport(this, this.dataset).open(); }, on_sidebar_translate: function() { return this.do_action({ From 8c43267c4a6f8705b4e0c75b00e5131eb7f909f7 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 14 Aug 2012 15:11:59 +0200 Subject: [PATCH 109/165] [FIX] unknow route must return 404 not 500 bzr revid: chs@openerp.com-20120814131159-0ie5h6tnxdgebpva --- addons/web/common/http.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/web/common/http.py b/addons/web/common/http.py index 9b86bbe5364..f9e66e31503 100644 --- a/addons/web/common/http.py +++ b/addons/web/common/http.py @@ -565,8 +565,8 @@ class Root(object): while ps: c = controllers_path.get(ps) if c: - m = getattr(c, meth) - if getattr(m, 'exposed', False): + m = getattr(c, meth, None) + if m and getattr(m, 'exposed', False): _logger.debug("Dispatching to %s %s %s", ps, c, meth) return m ps, _slash, meth = ps.rpartition('/') From 0dd635d60376949cfc750f3dff531aca2a1cec64 Mon Sep 17 00:00:00 2001 From: "vta vta@openerp.com" <> Date: Tue, 14 Aug 2012 15:13:22 +0200 Subject: [PATCH 110/165] [FIX] Fixed logged user redirection bzr revid: vta@openerp.com-20120814131322-sww9yuik9jn2tn3p --- addons/auth_oauth/res_users.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py index 4cae3bd4880..20771ea4ac6 100644 --- a/addons/auth_oauth/res_users.py +++ b/addons/auth_oauth/res_users.py @@ -52,7 +52,7 @@ class res_users(osv.Model): oauth_uid = validation['user_id'] name = self.auth_oauth_fetch_user_data(cr, uid, access_token)['name'] - r = (cr.dbname, login, access_token) + r = (cr.dbname, login, oauth_uid) res = self.search(cr, uid, [("oauth_uid", "=", oauth_uid)]) _logger.exception(res) @@ -63,6 +63,7 @@ class res_users(osv.Model): new_user = { 'name': name, 'login': login, + # 'password': oauth_uid, 'user_email': login, 'oauth_provider': 'Google', 'oauth_uid': oauth_uid, @@ -94,5 +95,5 @@ class res_users(osv.Model): finally: cr.close() - +res_users() # From 397c67348e6672e81a28021caa6e97162da2ca51 Mon Sep 17 00:00:00 2001 From: "vta vta@openerp.com" <> Date: Tue, 14 Aug 2012 16:29:04 +0200 Subject: [PATCH 111/165] [ADD] Added the oauth providers table and views. bzr revid: vta@openerp.com-20120814142904-7pjt91gl9ld2vxmf --- addons/auth_oauth/__init__.py | 1 + addons/auth_oauth/__openerp__.py | 3 ++ addons/auth_oauth/oauth_providers.py | 26 ++++++++++++++ addons/auth_oauth/oauth_providers.xml | 49 +++++++++++++++++++++++++++ addons/auth_oauth/res_users.py | 2 -- 5 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 addons/auth_oauth/oauth_providers.py create mode 100644 addons/auth_oauth/oauth_providers.xml diff --git a/addons/auth_oauth/__init__.py b/addons/auth_oauth/__init__.py index 68bb6c79406..62ec900cba2 100644 --- a/addons/auth_oauth/__init__.py +++ b/addons/auth_oauth/__init__.py @@ -1,2 +1,3 @@ import controllers import res_users +import oauth_providers diff --git a/addons/auth_oauth/__openerp__.py b/addons/auth_oauth/__openerp__.py index 68f4d2ccd87..3557bec951b 100644 --- a/addons/auth_oauth/__openerp__.py +++ b/addons/auth_oauth/__openerp__.py @@ -31,6 +31,9 @@ 'depends': ['base', 'web'], 'data': [ ], + 'update_xml': [ + 'oauth_providers.xml' + ], 'js': [ 'static/src/js/auth_oauth.js', ], diff --git a/addons/auth_oauth/oauth_providers.py b/addons/auth_oauth/oauth_providers.py new file mode 100644 index 00000000000..5b5c32841d9 --- /dev/null +++ b/addons/auth_oauth/oauth_providers.py @@ -0,0 +1,26 @@ +from openerp.osv import osv, fields + +class oauth_providers(osv.osv): + + """Class defining the configuration values of an OAuth2 provider""" + + _name = 'oauth.providers' + _description = 'OAuth2 provider' + _order = 'name' + + _columns = { + 'name' : fields.char('Provider name', required=True), # Name of the OAuth2 entity, Google, LinkedIn, etc + 'client_id' : fields.char('Client ID', required=True), # Our identifier + 'auth_endpoint' : fields.char('Authentication URL', required=True), # OAuth provider URL to authenticate users + 'scope' : fields.char('Accessed user data'), # OAUth user data desired to access + 'validation_endpoint' : fields.char('Validation URL'), # OAuth provider URL to validate tokens + 'icon_url' : fields.char('Icon'), # URL of the icon's provider + 'active' : fields.boolean('Active'), + 'sequence' : fields.integer(), + } + + _sql_constraints = [ + ('name', 'unique(name)', 'The name of the OAuth provider must be unique') + ] + +oauth_providers() \ No newline at end of file diff --git a/addons/auth_oauth/oauth_providers.xml b/addons/auth_oauth/oauth_providers.xml new file mode 100644 index 00000000000..384a3052789 --- /dev/null +++ b/addons/auth_oauth/oauth_providers.xml @@ -0,0 +1,49 @@ + + + + + + oauth.provider.form + oauth.providers + form + +
      +
      + +
      + + + + + + + + + + + + +
      +
      +
      + + oauth.provider.list + oauth.providers + tree + + + + + + + + + + Providers + oauth.providers + form + tree,form + + +
      +
      \ No newline at end of file diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py index 20771ea4ac6..229eba2f354 100644 --- a/addons/auth_oauth/res_users.py +++ b/addons/auth_oauth/res_users.py @@ -55,7 +55,6 @@ class res_users(osv.Model): r = (cr.dbname, login, oauth_uid) res = self.search(cr, uid, [("oauth_uid", "=", oauth_uid)]) - _logger.exception(res) if res: self.write(cr, uid, res[0], {'oauth_access_token':access_token}) else: @@ -63,7 +62,6 @@ class res_users(osv.Model): new_user = { 'name': name, 'login': login, - # 'password': oauth_uid, 'user_email': login, 'oauth_provider': 'Google', 'oauth_uid': oauth_uid, From b65b7844d13b9133736f6520d8fc85d0d3b0aaef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 16:56:56 +0200 Subject: [PATCH 112/165] [REVIEW] base: removed image from manifest. bzr revid: tde@openerp.com-20120814145656-pj5fbdes3kq42x3y --- openerp/addons/base/__openerp__.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index ce9644ea265..5b65bff4bd7 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -95,9 +95,6 @@ # in test/__init__.py. # 'test/test_ir_cron.yml', # <-- These tests perform a roolback. ], - 'images': [ - 'static/src/img/company_icon.png', - ], 'installable': True, 'auto_install': True, 'certificate': '0076807797149', From eca1451845c1c109d409b955e337439a3d67e0c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 17:02:12 +0200 Subject: [PATCH 113/165] [REVIEW] res_users: class renamed from users to res_users; reordered imports; added back default image for avatars. bzr revid: tde@openerp.com-20120814150212-jc3z8bh4i372snrw --- openerp/addons/base/res/res_users.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 72bedb65775..a32c2657ecc 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -20,11 +20,9 @@ # ############################################################################## -import logging + from functools import partial - -import pytz - +import logging from lxml import etree from lxml.builder import E import netsvc @@ -33,6 +31,7 @@ import openerp.exceptions from osv import fields,osv from osv.orm import browse_record import pooler +import random from service import security import tools from tools.translate import _ @@ -95,7 +94,7 @@ class groups(osv.osv): groups() -class users(osv.osv): +class res_users(osv.osv): """ User class. A res.users record models an OpenERP user and is different from an employee. @@ -213,6 +212,11 @@ class users(osv.osv): ('login_key', 'UNIQUE (login)', 'You can not have two users with the same login !') ] + def _get_default_image(self, cr, uid, is_company, context=None): + """ Override of res.partner: multicolor avatars ! """ + image_path = openerp.modules.get_module_resource('base', 'static/src/img', 'avatar%d.png' % random.randint(0, 6)) + return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64')) + def _get_company(self,cr, uid, context=None, uid2=False): if not uid2: uid2 = uid From 4cd2978678b45a1d6b47a7dd07b5aa9fcaf23a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 17:02:42 +0200 Subject: [PATCH 114/165] [REVIEW] res_partner: partner default image back to gray guy; renamed company_icon to company_image; added the famous gray guy. bzr revid: tde@openerp.com-20120814150242-50ij6j875mix2idt --- openerp/addons/base/res/res_partner.py | 5 ++--- .../src/img/{company_icon.png => company_image.png} | Bin 2 files changed, 2 insertions(+), 3 deletions(-) rename openerp/addons/base/static/src/img/{company_icon.png => company_image.png} (100%) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 486fad758f2..aaf93da8c66 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -29,7 +29,6 @@ from tools.translate import _ import logging import pooler import pytz -import random def _tz_get(self,cr,uid, context=None): return [(x, x) for x in pytz.all_timezones] @@ -228,9 +227,9 @@ class res_partner(osv.osv): def _get_default_image(self, cr, uid, is_company, context=None): if is_company: - image_path = openerp.modules.get_module_resource('base', 'static/src/img', 'company_icon.png') + image_path = openerp.modules.get_module_resource('base', 'static/src/img', 'company_image.png') else: - image_path = openerp.modules.get_module_resource('base', 'static/src/img', 'avatar%d.png' % random.randint(0, 6)) + image_path = openerp.modules.get_module_resource('base', 'static/src/img', 'partner_image.png') return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64')) _defaults = { diff --git a/openerp/addons/base/static/src/img/company_icon.png b/openerp/addons/base/static/src/img/company_image.png similarity index 100% rename from openerp/addons/base/static/src/img/company_icon.png rename to openerp/addons/base/static/src/img/company_image.png From 6de2150126c17ff104325858abada6d3c2c82925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 17:08:47 +0200 Subject: [PATCH 115/165] [REVIEW] res_users: removed 'date' backward compatible field; removed commented statements not used anymore. bzr revid: tde@openerp.com-20120814150847-ifdbf92ptaad3bmd --- openerp/addons/base/res/res_users.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index a32c2657ecc..31f6c714986 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -151,16 +151,10 @@ class res_users(osv.osv): # context is set. 'company_id': fields.many2one('res.company', 'Company', required=True, help='The company this user is currently working for.', context={'user_preference': True}), - # 'context_company_id': fields.related('context_company_id', rel='res.company', - # string='Company', required=True, context={'user_preference': True}, - # help='The company this user is currently working for.', - # deprecated='Use the context_company_id field instead. This field will be removed as of OpenERP 7.1.'), 'company_ids':fields.many2many('res.company','res_company_users_rel','user_id','cid','Companies'), # backward compatibility fields 'user_email': fields.related('email', type='char', - deprecated='Use the email field instead of user_email. This field will be removed as of OpenERP 7.1.'), - 'date': fields.related('date', type='date', store=True, - deprecated='use the login_date field instead of date. This field will be removed as of OpenERP 7.1.'), + deprecated='Use the email field instead of user_email. This field will be removed with OpenERP 7.1.'), } def on_change_company_id(self, cr, uid, ids, company_id): From a381c0adce6ff6a6db3ca34d24cd13a65f5d1a39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 17:20:53 +0200 Subject: [PATCH 116/165] [REVIEW] res_users in mail_thread: no Chatter-compatible anymore ! Some cleaning will follow. Also reidented some code. bzr revid: tde@openerp.com-20120814152053-edu3i87uzd8ev0u0 --- addons/mail/res_users.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index 6a18560de31..30337c84fe4 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -35,7 +35,7 @@ class res_users(osv.osv): - add a welcome message """ _name = 'res.users' - _inherit = ['res.users', 'mail.thread'] + _inherit = ['res.users'] _inherits = {'mail.alias': 'alias_id'} _columns = { @@ -45,10 +45,10 @@ class res_users(osv.osv): ('none', 'Never') ], 'Receive Feeds by Email', required=True, help="Choose in which case you want to receive an email when you "\ - "receive new feeds."), + "receive new feeds."), 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True, - help="Email address internally associated with this user. Incoming emails will appear " - "in the user's notifications."), + help="Email address internally associated with this user. Incoming "\ + "emails will appear in the user's notifications."), } _defaults = { From 63e4d9b572f27a5cdfa347e159ebc7e39f240ce1 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 14 Aug 2012 17:29:00 +0200 Subject: [PATCH 117/165] [IMP] sed -i '' -e 's/connection/session/g' bzr revid: chs@openerp.com-20120814152900-8r84kyz0qy1hwkvz --- addons/web/static/src/js/chrome.js | 20 ++++++++-------- addons/web/static/src/js/corelib.js | 6 ++--- addons/web/static/src/js/coresetup.js | 10 ++++---- addons/web/static/src/js/data.js | 10 ++++---- addons/web/static/src/js/search.js | 2 +- addons/web/static/src/js/test_support.js | 12 +++++----- addons/web/static/src/js/view_form.js | 6 ++--- addons/web/static/src/js/view_list.js | 4 ++-- addons/web/static/test/evals.js | 8 +++---- addons/web/static/test/fulltest/dataset.js | 28 +++++++++++----------- addons/web/static/test/list-editable.js | 14 +++++------ addons/web/static/test/search.js | 20 ++++++++-------- addons/web/static/test/testing.js | 12 +++++----- addons/web_kanban/static/src/js/kanban.js | 6 ++--- 14 files changed, 79 insertions(+), 79 deletions(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 49621cc3410..c632ce5cd0b 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -193,7 +193,7 @@ instance.web.CrashManager = instance.web.CallbackEnabled.extend({ on_traceback: function(error) { var self = this; var buttons = {}; - if (instance.connection.openerp_entreprise) { + if (instance.session.openerp_entreprise) { buttons[_t("Send OpenERP Enterprise Report")] = function() { var $this = $(this); var issuename = $('#issuename').val(); @@ -224,7 +224,7 @@ instance.web.CrashManager = instance.web.CallbackEnabled.extend({ min_height: '600px', buttons: buttons }).open(); - dialog.$element.html(QWeb.render('CrashManager.error', {session: instance.connection, error: error})); + dialog.$element.html(QWeb.render('CrashManager.error', {session: instance.session, error: error})); }, on_javascript_exception: function(exception) { this.on_traceback({ @@ -269,7 +269,7 @@ instance.web.Loading = instance.web.Widget.extend({ this.count += increment; if (this.count > 0) { - if (instance.connection.debug) { + if (instance.session.debug) { this.$element.text(_.str.sprintf( _t("Loading (%d)"), this.count)); } else { this.$element.text(_t("Loading")); @@ -882,8 +882,8 @@ instance.web.UserMenu = instance.web.Widget.extend({ var func = new instance.web.Model("res.users").get_func("read"); return func(self.session.uid, ["name", "company_id"]).pipe(function(res) { var topbar_name = res.name; - if(instance.connection.debug) - topbar_name = _.str.sprintf("%s (%s)", topbar_name, instance.connection.db); + if(instance.session.debug) + topbar_name = _.str.sprintf("%s (%s)", topbar_name, instance.session.db); if(res.company_id[0] > 1) topbar_name = _.str.sprintf("%s (%s)", topbar_name, res.company_id[1]); self.$element.find('.oe_topbar_name').text(topbar_name); @@ -900,7 +900,7 @@ instance.web.UserMenu = instance.web.Widget.extend({ on_menu_settings: function() { var self = this; self.rpc("/web/action/load", { action_id: "base.action_res_users_my" }, function(result) { - result.result.res_id = instance.connection.uid; + result.result.res_id = instance.session.uid; self.getParent().action_manager.do_action(result.result); }); }, @@ -927,7 +927,7 @@ instance.web.Client = instance.web.Widget.extend({ }, start: function() { var self = this; - return instance.connection.session_bind(this.origin).pipe(function() { + return instance.session.session_bind(this.origin).pipe(function() { var $e = $(QWeb.render(self._template, {})); self.replaceElement($e); self.bind_events(); @@ -970,7 +970,7 @@ instance.web.Client = instance.web.Widget.extend({ show_common: function() { var self = this; this.crashmanager = new instance.web.CrashManager(); - instance.connection.on_rpc_error.add(this.crashmanager.on_rpc_error); + instance.session.on_rpc_error.add(this.crashmanager.on_rpc_error); self.notification = new instance.web.Notification(this); self.notification.appendTo(self.$element); self.loading = new instance.web.Loading(self); @@ -1067,7 +1067,7 @@ instance.web.WebClient = instance.web.Client.extend({ do_reload: function() { var self = this; return this.session.session_reload().pipe(function () { - instance.connection.load_modules(true).pipe( + instance.session.load_modules(true).pipe( self.menu.proxy('do_reload')); }); }, @@ -1174,7 +1174,7 @@ instance.web.EmbeddedClient = instance.web.Client.extend({ start: function() { var self = this; return $.when(this._super()).pipe(function() { - return instance.connection.session_authenticate(self.dbname, self.login, self.key, true).pipe(function() { + return instance.session.session_authenticate(self.dbname, self.login, self.key, true).pipe(function() { return self.rpc("/web/action/load", { action_id: self.action_id }, function(result) { var action = result.result; action.flags = _.extend({ diff --git a/addons/web/static/src/js/corelib.js b/addons/web/static/src/js/corelib.js index a46d6314ebe..5da12043994 100644 --- a/addons/web/static/src/js/corelib.js +++ b/addons/web/static/src/js/corelib.js @@ -692,7 +692,7 @@ instance.web.Widget = instance.web.Class.extend(instance.web.WidgetMixin, { instance.web.WidgetMixin.init.call(this,parent); // FIXME: this should not be this.setElement(this._make_descriptive()); - this.session = instance.connection; + this.session = instance.session; }, /** * Renders the element. The default implementation renders the widget using QWeb, @@ -841,7 +841,7 @@ instance.web.Widget = instance.web.Class.extend(instance.web.WidgetMixin, { rpc: function(url, data, success, error) { var def = $.Deferred().then(success, error); var self = this; - instance.connection.rpc(url, data). then(function() { + instance.session.rpc(url, data). then(function() { if (!self.isDestroyed()) def.resolve.apply(def, arguments); }, function() { @@ -863,7 +863,7 @@ instance.web.Registry = instance.web.Class.extend({ * * An object path is simply a dotted name from the instance root to the * object pointed to (e.g. ``"instance.web.Session"`` for an OpenERP - * connection object). + * session object). * * @constructs instance.web.Registry * @param {Object} mapping a mapping of keys to object-paths diff --git a/addons/web/static/src/js/coresetup.js b/addons/web/static/src/js/coresetup.js index 44e2d3aba78..d5b87d8a81d 100644 --- a/addons/web/static/src/js/coresetup.js +++ b/addons/web/static/src/js/coresetup.js @@ -514,7 +514,7 @@ $.async_when = function() { // special tweak for the web client var old_async_when = $.async_when; $.async_when = function() { - if (instance.connection.synch) + if (instance.session.synch) return $.when.apply(this, arguments); else return old_async_when.apply(this, arguments); @@ -559,7 +559,7 @@ instance.web.unblockUI = function() { } /** Setup default session */ -instance.connection = new instance.web.Session(); +instance.session = new instance.web.Session(); /** Configure default qweb */ instance.web._t = new instance.web.TranslationDataBase().build_translation_function(); @@ -578,8 +578,8 @@ instance.web._lt = function (s) { return {toString: function () { return instance.web._t(s); }} }; instance.web.qweb = new QWeb2.Engine(); -instance.web.qweb.default_dict['__debug__'] = instance.connection.debug; // Which one ? -instance.web.qweb.debug = instance.connection.debug; +instance.web.qweb.default_dict['__debug__'] = instance.session.debug; // Which one ? +instance.web.qweb.debug = instance.session.debug; instance.web.qweb.default_dict = { '_' : _, '_t' : instance.web._t @@ -636,7 +636,7 @@ var _t = instance.web._t; _t('%d years ago'); } -instance.connection.on('module_loaded', this, function () { +instance.session.on('module_loaded', this, function () { // provide timeago.js with our own translator method $.timeago.settings.translator = instance.web._t; }); diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 1cdb4a713f1..e360c922918 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -58,7 +58,7 @@ instance.web.Query = instance.web.Class.extend({ }, _execute: function () { var self = this; - return instance.connection.rpc('/web/dataset/search_read', { + return instance.session.rpc('/web/dataset/search_read', { model: this._model.name, fields: this._fields || false, domain: this._model.domain(this._filter), @@ -233,7 +233,7 @@ instance.web.Model = instance.web.Class.extend(/** @lends openerp.web.Model# */{ kwargs = args; args = []; } - return instance.connection.rpc('/web/dataset/call_kw', { + return instance.session.rpc('/web/dataset/call_kw', { model: this.name, method: method, args: args, @@ -256,7 +256,7 @@ instance.web.Model = instance.web.Class.extend(/** @lends openerp.web.Model# */{ * @param {String} signal signal to trigger on the workflow */ exec_workflow: function (id, signal) { - return instance.connection.rpc('/web/dataset/exec_workflow', { + return instance.session.rpc('/web/dataset/exec_workflow', { model: this.name, id: id, signal: signal @@ -282,7 +282,7 @@ instance.web.Model = instance.web.Class.extend(/** @lends openerp.web.Model# */{ */ context: function (context) { return new instance.web.CompoundContext( - instance.connection.user_context, this._context, context || {}); + instance.session.user_context, this._context, context || {}); }, /** * Button action caller, needs to perform cleanup if an action is returned @@ -292,7 +292,7 @@ instance.web.Model = instance.web.Class.extend(/** @lends openerp.web.Model# */{ * FIXME: remove when evaluator integrated */ call_button: function (method, args) { - return instance.connection.rpc('/web/dataset/call_button', { + return instance.session.rpc('/web/dataset/call_button', { model: this.name, method: method, domain_id: null, diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 0e3a5eb0dee..a7625631aa5 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -1613,7 +1613,7 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({ } var filter = { name: $name.val(), - user_id: private_filter ? instance.connection.uid : false, + user_id: private_filter ? instance.session.uid : false, model_id: self.view.model, context: results.context, domain: results.domain diff --git a/addons/web/static/src/js/test_support.js b/addons/web/static/src/js/test_support.js index d46366326b7..314a12c91c6 100644 --- a/addons/web/static/src/js/test_support.js +++ b/addons/web/static/src/js/test_support.js @@ -1,12 +1,12 @@ openerp.test_support = { - setup_connection: function (connection) { + setup_session: function (session) { var origin = location.protocol+"//"+location.host; - _.extend(connection, { + _.extend(session, { origin: origin, prefix: origin, server: origin, // keep chs happy //openerp.web.qweb.default_dict['_s'] = this.origin; - rpc_function: connection.rpc_json, + rpc_function: session.rpc_json, session_id: false, uid: false, username: false, @@ -22,7 +22,7 @@ openerp.test_support = { shortcuts: [], active_id: null }); - return connection.session_reload(); + return session.session_reload(); }, module: function (title, tested_core, nonliterals) { var conf = QUnit.config.openerp = {}; @@ -31,10 +31,10 @@ openerp.test_support = { QUnit.stop(); var oe = conf.openerp = window.openerp.init(); window.openerp.web[tested_core](oe); - var done = openerp.test_support.setup_connection(oe.connection); + var done = openerp.test_support.setup_session(oe.session); if (nonliterals) { done = done.pipe(function () { - return oe.connection.rpc('/tests/add_nonliterals', { + return oe.session.rpc('/tests/add_nonliterals', { domains: nonliterals.domains || [], contexts: nonliterals.contexts || [] }).then(function (r) { diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 17574caf90b..cfd01b7fbdd 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1656,7 +1656,7 @@ instance.web.form.FormWidget = instance.web.Widget.extend(instance.web.form.Invi template = 'WidgetLabel.tooltip'; } return QWeb.render(template, { - debug: instance.connection.debug, + debug: instance.session.debug, widget: widget })}, gravity: $.fn.tipsy.autoBounds(50, 'nw'), @@ -1733,7 +1733,7 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ start: function() { this._super.apply(this, arguments); this.$element.click(this.on_click); - if (this.node.attrs.help || instance.connection.debug) { + if (this.node.attrs.help || instance.session.debug) { this.do_attach_tooltip(); } this.setupFocus(this.$element); @@ -1930,7 +1930,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w }, this)); } this.$label = this.view.$element.find('label[for=' + this.id_for_label + ']'); - if (instance.connection.debug) { + if (instance.session.debug) { this.do_attach_tooltip(this, this.$label[0] || this.$element); this.$label.off('dblclick').on('dblclick', function() { console.log("Field '%s' of type '%s' in View: %o", self.name, (self.node.attrs.widget || self.field.type), self.view); diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 986b0e49faf..95dfa78fd63 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -2059,7 +2059,7 @@ instance.web.list.Button = instance.web.list.Column.extend({ title: this.string || '', additional_attributes: isNaN(row_data["id"].value) && instance.web.BufferedDataSet.virtual_id_regex.test(row_data["id"].value) ? 'disabled="disabled" class="oe_list_button_disabled"' : '', - prefix: instance.connection.prefix, + prefix: instance.session.prefix, icon: this.icon, alt: this.string || '' }); @@ -2086,7 +2086,7 @@ instance.web.list.Binary = instance.web.list.Column.extend({ var text = _t("Download"); var download_url = _.str.sprintf( '/web/binary/saveas?session_id=%s&model=%s&field=%s&id=%d', - instance.connection.session_id, options.model, this.id, options.id); + instance.session.session_id, options.model, this.id, options.id); if (this.filename) { download_url += '&filename_field=' + this.filename; if (row_data[this.filename]) { diff --git a/addons/web/static/test/evals.js b/addons/web/static/test/evals.js index 7bc6554e074..757d98c5bcc 100644 --- a/addons/web/static/test/evals.js +++ b/addons/web/static/test/evals.js @@ -12,7 +12,7 @@ $(document).ready(function () { // Context n should have base evaluation context + all of contexts // 0..n-1 in its own evaluation context var active_id = 4; - var result = openerp.connection.test_eval_contexts([ + var result = openerp.session.test_eval_contexts([ { "__contexts": [ { @@ -56,7 +56,7 @@ $(document).ready(function () { }); }); test('non-literal_eval_contexts', function () { - var result = openerp.connection.test_eval_contexts([{ + var result = openerp.session.test_eval_contexts([{ "__ref": "compound_context", "__contexts": [ {"__ref": "context", "__debug": "{'type':parent.type}", @@ -141,9 +141,9 @@ $(document).ready(function () { }); test('current_date', function () { var current_date = openerp.web.date_to_str(new Date()); - var result = openerp.connection.test_eval_domains( + var result = openerp.session.test_eval_domains( [[],{"__ref":"domain","__debug":"[('name','>=',current_date),('name','<=',current_date)]","__id":"5dedcfc96648"}], - openerp.connection.test_eval_get_context()); + openerp.session.test_eval_get_context()); deepEqual(result, [ ['name', '>=', current_date], ['name', '<=', current_date] diff --git a/addons/web/static/test/fulltest/dataset.js b/addons/web/static/test/fulltest/dataset.js index 9f7ab101869..b659d60b267 100644 --- a/addons/web/static/test/fulltest/dataset.js +++ b/addons/web/static/test/fulltest/dataset.js @@ -7,7 +7,7 @@ $(document).ready(function () { t.module('Dataset shortcuts', 'data'); t.test('read_index', function (openerp) { var ds = new openerp.web.DataSet( - {session: openerp.connection}, 'some.model'); + {session: openerp.session}, 'some.model'); ds.ids = [10, 20, 30, 40, 50]; ds.index = 2; t.expect(ds.read_index(['a', 'b', 'c']), function (result) { @@ -24,7 +24,7 @@ $(document).ready(function () { }); t.test('default_get', function (openerp) { var ds = new openerp.web.DataSet( - {session: openerp.connection}, 'some.model', {foo: 'bar'}); + {session: openerp.session}, 'some.model', {foo: 'bar'}); t.expect(ds.default_get(['a', 'b', 'c']), function (result) { strictEqual(result.method, 'default_get'); strictEqual(result.model, 'some.model'); @@ -38,7 +38,7 @@ $(document).ready(function () { }); }); t.test('create', function (openerp) { - var ds = new openerp.web.DataSet({session: openerp.connection}, 'some.model'); + var ds = new openerp.web.DataSet({session: openerp.session}, 'some.model'); t.expect(ds.create({foo: 1, bar: 2}), function (r) { strictEqual(r.method, 'create'); @@ -51,7 +51,7 @@ $(document).ready(function () { }); }); t.test('write', function (openerp) { - var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + var ds = new openerp.web.DataSet({session: openerp.session}, 'mod'); t.expect(ds.write(42, {foo: 1}), function (r) { strictEqual(r.method, 'write'); @@ -69,7 +69,7 @@ $(document).ready(function () { // }); }); t.test('unlink', function (openerp) { - var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + var ds = new openerp.web.DataSet({session: openerp.session}, 'mod'); t.expect(ds.unlink([42]), function (r) { strictEqual(r.method, 'unlink'); @@ -81,7 +81,7 @@ $(document).ready(function () { }); }); t.test('call', function (openerp) { - var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + var ds = new openerp.web.DataSet({session: openerp.session}, 'mod'); t.expect(ds.call('frob', ['a', 'b', 42]), function (r) { strictEqual(r.method, 'frob'); @@ -92,7 +92,7 @@ $(document).ready(function () { }); }); t.test('name_get', function (openerp) { - var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + var ds = new openerp.web.DataSet({session: openerp.session}, 'mod'); t.expect(ds.name_get([1, 2], null), function (r) { strictEqual(r.method, 'name_get'); @@ -104,7 +104,7 @@ $(document).ready(function () { }); }); t.test('name_search, name', function (openerp) { - var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + var ds = new openerp.web.DataSet({session: openerp.session}, 'mod'); t.expect(ds.name_search('bob'), function (r) { strictEqual(r.method, 'name_search'); @@ -119,7 +119,7 @@ $(document).ready(function () { }); }); t.test('name_search, domain & operator', function (openerp) { - var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + var ds = new openerp.web.DataSet({session: openerp.session}, 'mod'); t.expect(ds.name_search(0, [['foo', '=', 3]], 'someop'), function (r) { strictEqual(r.method, 'name_search'); @@ -134,7 +134,7 @@ $(document).ready(function () { }); }); t.test('exec_workflow', function (openerp) { - var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + var ds = new openerp.web.DataSet({session: openerp.session}, 'mod'); t.expect(ds.exec_workflow(42, 'foo'), function (r) { strictEqual(r['service'], 'object'); strictEqual(r.method, 'exec_workflow'); @@ -147,7 +147,7 @@ $(document).ready(function () { }); t.test('DataSetSearch#read_slice', function (openerp) { - var ds = new openerp.web.DataSetSearch({session: openerp.connection}, 'mod'); + var ds = new openerp.web.DataSetSearch({session: openerp.session}, 'mod'); t.expect(ds.read_slice(['foo', 'bar'], { domain: [['foo', '>', 42], ['qux', '=', 'grault']], context: {peewee: 'herman'}, @@ -167,7 +167,7 @@ $(document).ready(function () { }); }); t.test('DataSetSearch#read_slice sorted', function (openerp) { - var ds = new openerp.web.DataSetSearch({session: openerp.connection}, 'mod'); + var ds = new openerp.web.DataSetSearch({session: openerp.session}, 'mod'); ds.sort('foo'); ds.sort('foo'); ds.sort('bar'); @@ -194,7 +194,7 @@ $(document).ready(function () { }); t.test('Dataset', function (openerp) { var ds = new openerp.web.DataSetSearch( - {session: openerp.connection}, 'mod'); + {session: openerp.session}, 'mod'); var c = new openerp.web.CompoundContext( {a: 'foo', b: 3, c: 5}, openerp.contexts[0]); t.expect(ds.read_slice(['foo', 'bar'], { @@ -220,7 +220,7 @@ $(document).ready(function () { parent: {model: 'qux'} }; var ds = new openerp.web.DataSet( - {session: openerp.connection}, 'mod', + {session: openerp.session}, 'mod', new openerp.web.CompoundContext({}) .set_eval_context(eval_context)); var domain = new openerp.web.CompoundDomain(openerp.domains[0]) diff --git a/addons/web/static/test/list-editable.js b/addons/web/static/test/list-editable.js index 62f31a55833..2a4dee3b6e7 100644 --- a/addons/web/static/test/list-editable.js +++ b/addons/web/static/test/list-editable.js @@ -87,10 +87,10 @@ $(document).ready(function () { }); }); asyncTest('toggle-edition-save', 4, function () { - instance.connection.responses['/web/dataset/call_kw:create'] = function () { + instance.session.responses['/web/dataset/call_kw:create'] = function () { return { result: 42 }; }; - instance.connection.responses['/web/dataset/call_kw:read'] = function () { + instance.session.responses['/web/dataset/call_kw:read'] = function () { return { result: [{ id: 42, a: false, @@ -125,7 +125,7 @@ $(document).ready(function () { }) }); asyncTest('toggle-edition-cancel', 2, function () { - instance.connection.responses['/web/dataset/call_kw:create'] = function () { + instance.session.responses['/web/dataset/call_kw:create'] = function () { return { result: 42 }; }; var e = new instance.web.list.Editor({ @@ -153,7 +153,7 @@ $(document).ready(function () { }) }); asyncTest('toggle-save-required', 2, function () { - instance.connection.responses['/web/dataset/call_kw:create'] = function () { + instance.session.responses['/web/dataset/call_kw:create'] = function () { return { result: 42 }; }; var e = new instance.web.list.Editor({ @@ -191,7 +191,7 @@ $(document).ready(function () { baseSetup(); var records = {}; - _.extend(instance.connection.responses, { + _.extend(instance.session.responses, { '/web/listview/load': function () { return {result: { type: 'tree', @@ -227,7 +227,7 @@ $(document).ready(function () { }); asyncTest('newrecord', 6, function () { var got_defaults = false; - instance.connection.responses['/web/dataset/call_kw:default_get'] = function (params) { + instance.session.responses['/web/dataset/call_kw:default_get'] = function (params) { var fields = params.params.args[0]; deepEqual( fields, ['a', 'b', 'c'], @@ -267,7 +267,7 @@ $(document).ready(function () { module('list-edition-events', { setup: function () { baseSetup(); - _.extend(instance.connection.responses, { + _.extend(instance.session.responses, { '/web/listview/load': function () { return {result: { type: 'tree', diff --git a/addons/web/static/test/search.js b/addons/web/static/test/search.js index 548eef612b5..6dc37f31d08 100644 --- a/addons/web/static/test/search.js +++ b/addons/web/static/test/search.js @@ -164,8 +164,8 @@ $(document).ready(function () { instance.dummy = {}; instance.dummy.DummyWidget = instance.web.search.Field.extend( dummy_widget_attributes || {}); - if (!('/web/searchview/load' in instance.connection.responses)) { - instance.connection.responses['/web/searchview/load'] = function () { + if (!('/web/searchview/load' in instance.session.responses)) { + instance.session.responses['/web/searchview/load'] = function () { return {result: {fields_view: { type: 'search', fields: { @@ -186,10 +186,10 @@ $(document).ready(function () { }}}; }; } - instance.connection.responses['/web/searchview/get_filters'] = function () { + instance.session.responses['/web/searchview/get_filters'] = function () { return {result: []}; }; - instance.connection.responses['/web/searchview/fields_get'] = function () { + instance.session.responses['/web/searchview/fields_get'] = function () { return {result: {fields: { dummy: {type: 'char', string: 'Dummy'} }}}; @@ -321,7 +321,7 @@ $(document).ready(function () { {attrs: {name: 'dummy', string: 'Dummy'}}, {relation: 'dummy.model.name'}, view); - instance.connection.responses['/web/dataset/call_kw'] = function (req) { + instance.session.responses['/web/dataset/call_kw'] = function (req) { equal(req.params.method, 'name_get', "m2o should resolve default id"); equal(req.params.model, f.attrs.relation, @@ -357,7 +357,7 @@ $(document).ready(function () { {attrs: {name: 'dummy', string: 'Dummy'}}, {relation: 'dummy.model.name'}, view); - instance.connection.responses['/web/dataset/call_kw'] = function (req) { + instance.session.responses['/web/dataset/call_kw'] = function (req) { return {result: []}; }; f.facet_for_defaults({dummy: id}) @@ -573,7 +573,7 @@ $(document).ready(function () { }); }); asyncTest("M2O", 15, function () { - instance.connection.responses['/web/dataset/call_kw'] = function (req) { + instance.session.responses['/web/dataset/call_kw'] = function (req) { equal(req.params.method, "name_search"); equal(req.params.model, "dummy.model"); deepEqual(req.params.args, []); @@ -607,7 +607,7 @@ $(document).ready(function () { }); }); asyncTest("M2O no match", 5, function () { - instance.connection.responses['/web/dataset/call_kw'] = function (req) { + instance.session.responses['/web/dataset/call_kw'] = function (req) { equal(req.params.method, "name_search"); equal(req.params.model, "dummy.model"); deepEqual(req.params.args, []); @@ -1070,7 +1070,7 @@ $(document).ready(function () { }); asyncTest('checkboxing', 6, function () { var view = makeSearchView(); - instance.connection.responses['/web/searchview/get_filters'] = function () { + instance.session.responses['/web/searchview/get_filters'] = function () { return {result: [{ name: "filter name", user_id: 42 @@ -1099,7 +1099,7 @@ $(document).ready(function () { }); asyncTest('removal', 1, function () { var view = makeSearchView(); - instance.connection.responses['/web/searchview/get_filters'] = function () { + instance.session.responses['/web/searchview/get_filters'] = function () { return {result: [{ name: "filter name", user_id: 42 diff --git a/addons/web/static/test/testing.js b/addons/web/static/test/testing.js index e9525fc82a0..1be8e94e74b 100644 --- a/addons/web/static/test/testing.js +++ b/addons/web/static/test/testing.js @@ -33,28 +33,28 @@ openerp.testing = (function () { instance.web.qweb.add_template(doc); }, /** - * Alter provided instance's ``connection`` attribute to make response + * Alter provided instance's ``session`` attribute to make response * mockable: * * * The ``responses`` parameter can be used to provide a map of (RPC) * paths (e.g. ``/web/view/load``) to a function returning a response * to the query. - * * ``instance,connection`` grows a ``responses`` attribute which is + * * ``instance.session`` grows a ``responses`` attribute which is * a map of the same (and is in fact initialized to the ``responses`` * parameter if one is provided) * * Note that RPC requests to un-mocked URLs will be rejected with an * error message: only explicitly specified urls will get a response. * - * Mocked connections will *never* perform an actual RPC connection. + * Mocked sessions will *never* perform an actual RPC connection. * * @param instance openerp instance being initialized * @param {Object} [responses] */ mockifyRPC: function (instance, responses) { - var connection = instance.connection; - connection.responses = responses || {}; - connection.rpc_function = function (url, payload) { + var session = instance.session; + session.responses = responses || {}; + session.rpc_function = function (url, payload) { var fn = this.responses[url.url + ':' + payload.params.method] || this.responses[url.url]; diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index fe14b4c697f..6c70ecfb8ec 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -32,7 +32,7 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ this.aggregates = {}; this.group_operators = ['avg', 'max', 'min', 'sum', 'count']; this.qweb = new QWeb2.Engine(); - this.qweb.debug = instance.connection.debug; + this.qweb.debug = instance.session.debug; this.qweb.default_dict = _.clone(QWeb.default_dict); this.has_been_loaded = $.Deferred(); this.search_domain = this.search_context = this.search_group_by = null; @@ -132,7 +132,7 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ node.children = [{ tag: 'img', attrs: { - src: instance.connection.prefix + '/web/static/src/img/icons/' + node.attrs['data-icon'] + '.png', + src: instance.session.prefix + '/web/static/src/img/icons/' + node.attrs['data-icon'] + '.png', width: '16', height: '16' } @@ -760,7 +760,7 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({ url = "/web/static/src/img/placeholder.png"; } else { id = escape(JSON.stringify(id)); - url = instance.connection.prefix + '/web/binary/image?session_id=' + this.session.session_id + '&model=' + model + '&field=' + field + '&id=' + id; + url = instance.session.prefix + '/web/binary/image?session_id=' + this.session.session_id + '&model=' + model + '&field=' + field + '&id=' + id; if (cache !== undefined) { // Set the cache duration in seconds. url += '&cache=' + parseInt(cache, 10); From c5dc5cef00cd596d6c0b6c9899bf1d8de16e9026 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 14 Aug 2012 17:30:53 +0200 Subject: [PATCH 118/165] [IMP] sed -i '' -e 's/connection/session/g' bzr revid: chs@openerp.com-20120814153053-3bznfj7woq2xi1f1 --- .../static/src/js/reset_password.js | 2 +- addons/auth_signup/static/src/js/auth_signup.js | 4 ++-- addons/edi/static/src/js/edi.js | 6 +++--- addons/point_of_sale/static/src/js/pos_widgets.js | 2 +- addons/share/static/src/js/share.js | 12 ++++++------ addons/web_linkedin/static/src/js/linkedin.js | 2 +- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/addons/auth_reset_password/static/src/js/reset_password.js b/addons/auth_reset_password/static/src/js/reset_password.js index 41b48c7e59b..13cf070a548 100644 --- a/addons/auth_reset_password/static/src/js/reset_password.js +++ b/addons/auth_reset_password/static/src/js/reset_password.js @@ -31,7 +31,7 @@ openerp.auth_reset_password = function(instance) { }, do_reset_password: function(db, email) { var self = this; - instance.connection.session_authenticate(db, 'anonymous', 'anonymous', true).pipe(function () { + instance.session.session_authenticate(db, 'anonymous', 'anonymous', true).pipe(function () { var func = new instance.web.Model("res.users").get_func("send_reset_password_request"); return func(email).then(function(res) { // show message diff --git a/addons/auth_signup/static/src/js/auth_signup.js b/addons/auth_signup/static/src/js/auth_signup.js index 7384fe1e5f5..9dda111f044 100644 --- a/addons/auth_signup/static/src/js/auth_signup.js +++ b/addons/auth_signup/static/src/js/auth_signup.js @@ -12,7 +12,7 @@ openerp.auth_signup = function(instance) { return false; } - var cnx = instance.connection; + var cnx = instance.session; if (cnx.session_is_valid()) { self._signup(); } else { @@ -83,7 +83,7 @@ openerp.auth_signup = function(instance) { type: 'ir.actions.client', tag: 'login', params: { - db: instance.connection.db, + db: instance.session.db, login: email, password: password, login_successful: function() { diff --git a/addons/edi/static/src/js/edi.js b/addons/edi/static/src/js/edi.js index 24bf17a2f88..78e90852c38 100644 --- a/addons/edi/static/src/js/edi.js +++ b/addons/edi/static/src/js/edi.js @@ -6,7 +6,7 @@ openerp.edi.EdiView = openerp.web.Widget.extend({ this._super(); this.db = db; this.token = token; - this.session = openerp.connection; + this.session = openerp.session; this.template = "EdiEmpty"; this.content = ""; this.sidebar = ""; @@ -108,7 +108,7 @@ openerp.edi.EdiView = openerp.web.Widget.extend({ }); openerp.edi.edi_view = function (db, token) { - openerp.connection.session_bind().then(function () { + openerp.session.session_bind().then(function () { new openerp.edi.EdiView(null,db,token).appendTo($("body").addClass('openerp')); }); } @@ -188,7 +188,7 @@ openerp.edi.EdiImport = openerp.web.Widget.extend({ }); openerp.edi.edi_import = function (url) { - openerp.connection.session_bind().then(function () { + openerp.session.session_bind().then(function () { new openerp.edi.EdiImport(null,url).appendTo($("body").addClass('openerp')); }); } diff --git a/addons/point_of_sale/static/src/js/pos_widgets.js b/addons/point_of_sale/static/src/js/pos_widgets.js index bebbb3c1591..9a27be29381 100644 --- a/addons/point_of_sale/static/src/js/pos_widgets.js +++ b/addons/point_of_sale/static/src/js/pos_widgets.js @@ -674,7 +674,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa self.$('.loader img').hide(); return new instance.web.Model("ir.model.data").get_func("search_read")([['name', '=', 'action_pos_session_opening']], ['res_id']) .pipe( _.bind(function(res){ - return instance.connection.rpc('/web/action/load', {'action_id': res[0]['res_id']}) + return instance.session.rpc('/web/action/load', {'action_id': res[0]['res_id']}) .pipe(_.bind(function(result){ var action = result.result; this.do_action(action); diff --git a/addons/share/static/src/js/share.js b/addons/share/static/src/js/share.js index 33aa3d1aab9..6cc12a5bfa8 100644 --- a/addons/share/static/src/js/share.js +++ b/addons/share/static/src/js/share.js @@ -35,19 +35,19 @@ openerp.share = function(session) { } function has_share(yes, no) { - if (!session.connection.share_flag) { - session.connection.share_flag = $.Deferred(function() { + if (!session.session.share_flag) { + session.session.share_flag = $.Deferred(function() { var func = new session.web.Model("share.wizard").get_func("has_share"); - func(session.connection.uid).pipe(function(res) { + func(session.session.uid).pipe(function(res) { if(res) { - session.connection.share_flag.resolve(); + session.session.share_flag.resolve(); } else { - session.connection.share_flag.reject(); + session.session.share_flag.reject(); } }); }); } - session.connection.share_flag.done(yes).fail(no); + session.session.share_flag.done(yes).fail(no); } /* Extend the Sidebar to add Share and Embed links in the 'More' menu */ diff --git a/addons/web_linkedin/static/src/js/linkedin.js b/addons/web_linkedin/static/src/js/linkedin.js index 977e7a60cbb..c15b995bff9 100644 --- a/addons/web_linkedin/static/src/js/linkedin.js +++ b/addons/web_linkedin/static/src/js/linkedin.js @@ -78,7 +78,7 @@ openerp.web_linkedin = function(instance) { }, _.bind(this.linkedin_disabled, this)); }, linkedin_disabled: function() { - if (instance.connection.uid !== 1) { + if (instance.session.uid !== 1) { instance.web.dialog($(QWeb.render("LinkedIn.DisabledWarning")), { title: _t("LinkedIn is not enabled"), buttons: [ From eb50d914614eed9e046ba713e9e988419e0f8422 Mon Sep 17 00:00:00 2001 From: "vta vta@openerp.com" <> Date: Tue, 14 Aug 2012 17:45:29 +0200 Subject: [PATCH 119/165] [ADD] Added initial data to providers. bzr revid: vta@openerp.com-20120814154529-58c60kynpwkckwmc --- addons/auth_oauth/__openerp__.py | 1 + addons/auth_oauth/oauth_providers.py | 4 +++- addons/auth_oauth/oauth_providers.xml | 2 ++ addons/auth_oauth/oauth_providers_data.xml | 25 ++++++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 addons/auth_oauth/oauth_providers_data.xml diff --git a/addons/auth_oauth/__openerp__.py b/addons/auth_oauth/__openerp__.py index 3557bec951b..e7b47a1397d 100644 --- a/addons/auth_oauth/__openerp__.py +++ b/addons/auth_oauth/__openerp__.py @@ -30,6 +30,7 @@ 'website': 'http://www.openerp.com', 'depends': ['base', 'web'], 'data': [ + 'oauth_providers_data.xml' ], 'update_xml': [ 'oauth_providers.xml' diff --git a/addons/auth_oauth/oauth_providers.py b/addons/auth_oauth/oauth_providers.py index 5b5c32841d9..2b42c821684 100644 --- a/addons/auth_oauth/oauth_providers.py +++ b/addons/auth_oauth/oauth_providers.py @@ -12,8 +12,10 @@ class oauth_providers(osv.osv): 'name' : fields.char('Provider name', required=True), # Name of the OAuth2 entity, Google, LinkedIn, etc 'client_id' : fields.char('Client ID', required=True), # Our identifier 'auth_endpoint' : fields.char('Authentication URL', required=True), # OAuth provider URL to authenticate users - 'scope' : fields.char('Accessed user data'), # OAUth user data desired to access + 'scope' : fields.char('Scope'), # OAUth user data desired to access 'validation_endpoint' : fields.char('Validation URL'), # OAuth provider URL to validate tokens + 'data_endpoint' : fields.char('Data URL'), + 'redirect_uris' : fields.char('Redirect URIs'), 'icon_url' : fields.char('Icon'), # URL of the icon's provider 'active' : fields.boolean('Active'), 'sequence' : fields.integer(), diff --git a/addons/auth_oauth/oauth_providers.xml b/addons/auth_oauth/oauth_providers.xml index 384a3052789..273ba1c6a10 100644 --- a/addons/auth_oauth/oauth_providers.xml +++ b/addons/auth_oauth/oauth_providers.xml @@ -21,6 +21,8 @@ + + diff --git a/addons/auth_oauth/oauth_providers_data.xml b/addons/auth_oauth/oauth_providers_data.xml new file mode 100644 index 00000000000..b66e6a877b9 --- /dev/null +++ b/addons/auth_oauth/oauth_providers_data.xml @@ -0,0 +1,25 @@ + + + + + Google OAuth2 + 108010644258-duuhmp6pu7li4tsmnqg7j9rvdeklg0ki.apps.googleusercontent.com + https://accounts.google.com/o/oauth2/auth + https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile + https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= + https://www.googleapis.com/oauth2/v1/userinfo?access_token= + https://localhost/ + True + + + Twitter OAuth2 + 108010644258-duuhmp6pu7li4tsmnqg7j9rvdeklg0ki.apps.twitterusercontent.com + https://api.twitter.com/oauth/request_token + + https://api.twitter.com/oauth/authorize?oauth_token= + + https://localhost/ + True + + + \ No newline at end of file From 290a4318f18a0d1415277084a1c7bc31f8569346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 17:54:14 +0200 Subject: [PATCH 120/165] [FIX] res_users: updated class name in super. bzr revid: tde@openerp.com-20120814155414-r5xbj1qmb4w0obya --- openerp/addons/base/res/res_users.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 31f6c714986..95ee94788e1 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -185,7 +185,7 @@ class res_users(osv.osv): if 'password' in o and ( 'id' not in o or o['id'] != uid ): o['password'] = '********' return o - result = super(users, self).read(cr, uid, ids, fields, context, load) + result = super(res_users, self).read(cr, uid, ids, fields, context, load) canwrite = self.pool.get('ir.model.access').check(cr, uid, 'res.users', 'write', False) if not canwrite: if isinstance(ids, (int, float)): @@ -265,7 +265,7 @@ class res_users(osv.osv): """ if not view_id and view_type == 'form': return self.pool.get('res.partner').fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu) - return super(users, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu) + return super(res_users, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu) # User can write to a few of her own fields (but not her groups for example) SELF_WRITEABLE_FIELDS = ['password', 'signature', 'action_id', 'company_id', 'email', 'name', 'image', 'image_medium', 'image_small'] @@ -283,7 +283,7 @@ class res_users(osv.osv): del values['company_id'] uid = 1 # safe fields only, so we write as super-user to bypass access rights - res = super(users, self).write(cr, uid, ids, values, context=context) + res = super(res_users, self).write(cr, uid, ids, values, context=context) # clear caches linked to the users self.pool.get('ir.model.access').call_cache_clearing_methods(cr) @@ -305,7 +305,7 @@ class res_users(osv.osv): for id in ids: if id in self._uid_cache[db]: del self._uid_cache[db][id] - return super(users, self).unlink(cr, uid, ids, context=context) + return super(res_users, self).unlink(cr, uid, ids, context=context) def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100): if not args: @@ -328,7 +328,7 @@ class res_users(osv.osv): name=(copy_pattern % user2copy['name']), ) copydef.update(default) - return super(users, self).copy(cr, uid, id, copydef, context) + return super(res_users, self).copy(cr, uid, id, copydef, context) def context_get(self, cr, uid, context=None): user = self.browse(cr, uid, uid, context) From c8560f60292dd738ca3902f920adf72fbeff938b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 18:20:50 +0200 Subject: [PATCH 121/165] [ADD] base: added partner image. bzr revid: tde@openerp.com-20120814162050-dnmnwx0v0jz3x0og --- .../addons/base/static/src/img/partner_image.png | Bin 0 -> 2723 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 openerp/addons/base/static/src/img/partner_image.png diff --git a/openerp/addons/base/static/src/img/partner_image.png b/openerp/addons/base/static/src/img/partner_image.png new file mode 100644 index 0000000000000000000000000000000000000000..87fdbc5af55a640792e97a49e80b0e7e47dfcd8e GIT binary patch literal 2723 zcmcIm`#%%<8=p%U$!tZ`VHX>7pM9g1>v9{T(${c~u5p}x63 z001x~1p1QHcI1cZ>8S4~hgA2~MuSNTzysM$}F)GW9TNA+DWc5{sJK)6;rP9RqZ{(i)TOjr-sBD!U-3pHrhKw`C%kuDW3 z>bQ3!LFQS`w0?G3clGqOnok~I_TuF?2;{(DW?YUTWJ`9|)IIOM&+EF_QVVdwWn2qN zTgEy3=@C+g$O)EXdYZ?=q0n*4sGz8|-fi1_y2;%!-FYGpCDx%fZjOg^t1)+Yth8Yz+T&&v30QMyUV}PU?hw&fw<~m4`!l9O zAaJlcd{BQGnzh@EP<`?Qf*!vAg&2RhH##hFqI zQxBC`XFIvb00A@DZ#RP=iaUk@c z0q@i71bPzzQtdIz0*f@VJ*1i=Cogl=?>_Xl0fG%Z;6bP0@+@xun8 zWdxA8xHNowWd^O+WiHSxkAEY`DbTdTBi38Kz6kSz@Mm1r4&sPF#a5Z%p%pAP-|UO+ zYe!@3n$zIzrURl5{#pi0;M-1m^$yv!*|ioy16zbsrdI-OxX$#`Y(6@&rV;)`&kwwZ z=Kt*spWt#8M%#whtBr-zxLZ4cJ6ud?bHt4xF*+p&if#opJ2hwVLvS~H-vZgrSX+=Z zNgk7A87wQno(5spn1N;R=1|0ij*o%25sH zug@8*tIfcOBP`zpg|`+QvFMr>dW0n-A95Xx#RfQ|SE*us$I-LbPeRjvzxy{MN;>7E za8ncA*-ZN66mmH{myL}V#HBgWgNn;U z*i%PZeg5TneIp3F{cMfl$FNIrKgswkL1k&rm4K_lEn{tP+MVjY-OnWN@ljH_Yhugn z;Yb&NRL()i7-p`ge}|%m?Pr6fIVakcH##M0Qwu(FANT9jX?rNGYeoXj$Ij5NS=3_QL8{5#hF6qid`6CP|C`vV| zE#1s1NnACbbl4w!ftfEn_}=`{oGAL~`8^*VzI0vZ=|gfBo0_Yua^fn7r0{nfk#~GM zUJvduhSSnWE$5GVXrR41$U%*KC7a^S67Wix;qQ7%GnLw+rQ33KCm;XW`xAy~L$UPO zk!u#)fZ8A zRuxO>+eQv)(}eN#8fRV7t;f$+u~fXNjc!1x10DO^CJ~Wc;hr5cHV7X{$0u8Pyv&LB zNd~A=uH~-Yt3AW%DmiXUDtkAO^fcaj-BI7N4y=+*J~4o?SZrG?=#o?gP&Ng`&QM?X zr`vl3&pbkWg&jC4TYNQIb!mE_6HjcginpOJBc~P9t8zd2aa#Zx%;>DpCETVYC@#}s zw@?T*fT&oSw@+~|SN>*z%d4p7oF_jmup{9M7%dX!Y(Vm|wetNyo?vrt!~rUfirFkyK~Vm};hdHcH7 z#+yQeo!*nZ{nPH)tA)@&U|2Ep1N%V#Zp9v{C?}WQp}Z%$Bw5fRH8+<8_lEOo1<}OS zSew|`2{QB5kg8JhHQNCltAV?{cb);lzJ8;Az(id1$5%we;)WNQtlX`#bS?M-gVj-=-j zKH&4R`-?^so(kDCpR^6~LS6(O^rzS)Xv|!hA`$Pr*RVq6^6g6jeJu^a7_zNKn{%9| m_c>~J=^ALZKevPc literal 0 HcmV?d00001 From 40e2dbbab2aec306f55838e7acd9ca77022722bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 18:48:17 +0200 Subject: [PATCH 122/165] [IMP] mail_thread: res_users do not inherit from mail.thread anymore. Moved the search_domain of chatter of res.users (@login) to the partner, that have to find its related partner. bzr revid: tde@openerp.com-20120814164817-8mw4txrmvka484wg --- addons/mail/res_partner.py | 16 +++++++++++++--- addons/mail/res_users.py | 20 ++------------------ 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/addons/mail/res_partner.py b/addons/mail/res_partner.py index 3dc1f91d857..e162ccd81cc 100644 --- a/addons/mail/res_partner.py +++ b/addons/mail/res_partner.py @@ -29,11 +29,21 @@ class res_partner_mail(osv.osv): def message_search_get_domain(self, cr, uid, ids, context=None): """ Override of message_search_get_domain for partner discussion page. - The purpose is to add messages directly sent to the partner. + The purpose is to add messages directly sent to the partner. It also + adds messages pushed to the related user, if any, using @login. """ initial_domain = super(res_partner_mail, self).message_search_get_domain(cr, uid, ids, context=context) - if self._name == 'res.partner': # to avoid models inheriting from res.partner - search_domain = ['|'] + initial_domain + ['|', ('partner_id', 'in', ids), ('partner_ids', 'in', ids)] + # to avoid models inheriting from res.partner + if self._name != 'res.partner': + return initial_domain + # add message linked to the partner + search_domain = ['|'] + initial_domain + ['|', ('partner_id', 'in', ids), ('partner_ids', 'in', ids)] + # if partner is linked to a user: find @login + res_users_obj = self.pool.get('res.users') + user_ids = res_users_obj.search(cr, uid, [('partner_id', 'in', ids)], context=context) + for user in res_user_obj.browse(cr, uid, user_ids, context=context): + search_domain = ['|'] + search_domain + ['|', ('body_text', 'like', '@%s' % (user.login)), ('body_html', 'like', '@%s' % (user.login))] + print search_domain return search_domain # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index 184eb2b502e..391ddb60036 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -143,28 +143,12 @@ To setup your preferences (name, email signature, avatar), click on the top righ email_cc=None, email_bcc=None, reply_to=None, headers=None, message_id=False, references=None, attachments=None, original=None, context=None): - """ Override of message_append. Messages appened to res.users are - redirected to the related partner. Using partner_id.message_append, - messages will have correct model and id, set to res_partner and - partner_id.id. - """ + """ Wrapper on message_append to redirect them to the related partner. """ for user in self.browse(cr, uid, threads, context=context): user.partner_id.message_append(subject, body_text, body_html, type, email_date, parent_id, content_subtype, state, partner_ids, email_from, email_to, email_cc, email_bcc, reply_to, headers, message_id, references, attachments, original) - def message_search_get_domain(self, cr, uid, ids, context=None): - """ Override of message_search_get_domain for partner discussion page. - The purpose is to add messages directly sent to user using - @user_login. - """ - initial_domain = super(res_users, self).message_search_get_domain(cr, uid, ids, context=context) - custom_domain = [] - for user in self.browse(cr, uid, ids, context=context): - if custom_domain: - custom_domain += ['|'] - custom_domain += ['|', ('body_text', 'like', '@%s' % (user.login)), ('body_html', 'like', '@%s' % (user.login))] - return ['|'] + initial_domain + custom_domain class res_users_mail_group(osv.osv): """ Update of res.groups class @@ -173,7 +157,7 @@ class res_users_mail_group(osv.osv): group. This is done by overriding the write method. """ _name = 'res.users' - _inherit = ['res.users', 'mail.thread'] + _inherit = ['res.users'] def write(self, cr, uid, ids, vals, context=None): write_res = super(res_users_mail_group, self).write(cr, uid, ids, vals, context=context) From 7290d5880d7c5c34c8341ba893d062b0c91739a9 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Tue, 14 Aug 2012 18:57:50 +0200 Subject: [PATCH 123/165] fix bzr revid: fp@openerp.com-20120814165750-k2mmj30200jaee3m --- openerp/addons/base/test/test_osv_expression.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/openerp/addons/base/test/test_osv_expression.yml b/openerp/addons/base/test/test_osv_expression.yml index 4cbfad926ad..d607b17f801 100644 --- a/openerp/addons/base/test/test_osv_expression.yml +++ b/openerp/addons/base/test/test_osv_expression.yml @@ -1,12 +1,5 @@ - Testing for hierarchical search in M2M -- - !python {model: res.partner }: | - ids = self.search(cr, uid, [('category_id', 'child_of',ref('res_partner_category_1'))]) - assert len(ids) >= 1, ids - -- - Test hierarchical search in M2M with child ID1 - !python {model: res.partner }: | ids = self.search(cr, uid, [('category_id', 'child_of',ref('res_partner_category_0'))]) From 5249a3fadf861c051a2cac3323e1d7536ba00ef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 19:03:42 +0200 Subject: [PATCH 124/165] [FIX] mail_thread: import res_partner before res_users. bzr revid: tde@openerp.com-20120814170342-y10dzgromrpppa6i --- addons/mail/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/__init__.py b/addons/mail/__init__.py index b19aad1afe3..d7a3d1a6fdb 100644 --- a/addons/mail/__init__.py +++ b/addons/mail/__init__.py @@ -25,8 +25,8 @@ import mail_thread import mail_group import mail_subscription import ir_needaction -import res_users import res_partner +import res_users import report import wizard import res_config From a6482fe07c57805976529eebd48225b060a9a49c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 19:06:12 +0200 Subject: [PATCH 125/165] [WIP] Followers rewrite: in create/write, the purpose is to add the field in the values to write, and to simplify automatic subscription. WIP, lack of time to finish. Will be continued. bzr revid: tde@openerp.com-20120814170612-ax8xhcmmttrcphnl --- addons/crm/crm_lead.py | 11 ++-- addons/hr_holidays/hr_holidays.py | 13 ++-- addons/hr_recruitment/hr_recruitment.py | 11 ++-- addons/mail/mail_group.py | 9 +++ addons/mail/mail_thread.py | 79 +++++++++++++++++++++++-- addons/mrp/mrp.py | 11 ++-- addons/project/project.py | 24 +++----- addons/project_issue/project_issue.py | 11 ++-- 8 files changed, 111 insertions(+), 58 deletions(-) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 6e1d3a7755b..6b29dbbafe6 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -859,13 +859,10 @@ class crm_lead(base_stage, osv.osv): # OpenChatter methods and notifications # ---------------------------------------- - def message_get_subscribers(self, cr, uid, ids, context=None): - """ Override to add the salesman. """ - user_ids = super(crm_lead, self).message_get_subscribers(cr, uid, ids, context=context) - for obj in self.browse(cr, uid, ids, context=context): - if obj.user_id and not obj.user_id.id in user_ids: - user_ids.append(obj.user_id.id) - return user_ids + def message_get_follower_fields(self, cr, uid, ids, context=None): + """ Override to add 'user_id' field to automatic subscription. """ + res = super(crm_lead, self).message_get_follower_fields(cr, uid, ids, context=context) + return res.append('user_id') def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): """ Override of the (void) default notification method. """ diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 7eedfa54ce5..1788c857aba 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -366,15 +366,10 @@ class hr_holidays(osv.osv): result[obj.id] = hr_manager_group['users'] return result - def message_get_subscribers(self, cr, uid, ids, context=None): - """ Override to add employee and its manager. """ - user_ids = super(hr_holidays, self).message_get_subscribers(cr, uid, ids, context=context) - for obj in self.browse(cr, uid, ids, context=context): - if obj.user_id and not obj.user_id.id in user_ids: - user_ids.append(obj.user_id.id) - if obj.employee_id.parent_id and not obj.employee_id.parent_id.user_id.id in user_ids: - user_ids.append(obj.employee_id.parent_id.user_id.id) - return user_ids + def message_get_follower_fields(self, cr, uid, ids, context=None): + """ Override to add 'user_id' field to automatic subscription. """ + res = super(hr_holidays, self).message_get_follower_fields(cr, uid, ids, context=context) + return res + ['user_id', 'employee_id.parent_id.user_id'] def create_notificate(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index 1db79172dc5..cdd3252ff49 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -461,13 +461,10 @@ class hr_applicant(base_stage, osv.Model): # OpenChatter methods and notifications # ------------------------------------------------------- - def message_get_subscribers(self, cr, uid, ids, context=None): - """ Override to add responsible user. """ - user_ids = super(hr_applicant, self).message_get_subscribers(cr, uid, ids, context=context) - for obj in self.browse(cr, uid, ids, context=context): - if obj.user_id and not obj.user_id.id in user_ids: - user_ids.append(obj.user_id.id) - return user_ids + def message_get_follower_fields(self, cr, uid, ids, context=None): + """ Override to add 'user_id' field to automatic subscription. """ + res = super(hr_applicant, self).message_get_follower_fields(cr, uid, ids, context=context) + return res.append('user_id') def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): """ Override of the (void) default notification method. """ diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index 84008548d96..306a758eda2 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -184,3 +184,12 @@ class mail_group(osv.Model): def action_group_leave(self, cr, uid, ids, context=None): return self.message_unsubscribe(cr, uid, ids, context=context) + + # ---------------------------------------- + # OpenChatter methods and notifications + # ---------------------------------------- + + def message_get_monitored_follower_fields(self, cr, uid, ids, context=None): + """ Add 'responsible_id' to the monitored fields """ + res = super(mail_group, self).message_get_monitored_follower_fields(cr, uid, ids, context=context) + return res + ['responsible_id'] diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index efba082fee4..473dffe21fd 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -35,6 +35,10 @@ import xmlrpclib _logger = logging.getLogger(__name__) class many2many_reference(fields.many2many): + """ many2many_reference is an override of fields.many2many. It manages + many2many-like table where one id is given by two fields, res_model + and res_id. + """ def _get_query_and_where_params(self, cr, model, ids, values, where_params): """ Add in where: @@ -54,6 +58,7 @@ class many2many_reference(fields.many2many): return query, where_params def set(self, cr, model, id, name, values, user=None, context=None): + """ Override to add the res_model field in queries. """ if not values: return rel, id1, id2 = self._sql_names(model) obj = model.pool.get(self._obj) @@ -64,7 +69,7 @@ class many2many_reference(fields.many2many): idnew = obj.create(cr, user, act[2], context=context) cr.execute('INSERT INTO '+rel+' ('+id1+','+id2+',res_model) VALUES (%s,%s,%s)', (id, idnew, model._name)) elif act[0] == 3: - cr.execute('DELETE FROM "'+rel+'" WHERE '+id1+'=%s AND '+id2+'=%s AND res_model=%s', (id, act[1], model._name)) + cr.execute('DELETE FROM '+rel+' WHERE '+id1+'=%s AND '+id2+'=%s AND res_model=%s', (id, act[1], model._name)) elif act[0] == 4: # following queries are in the same transaction - so should be relatively safe cr.execute('SELECT 1 FROM '+rel+' WHERE '+id1+'=%s AND '+id2+'=%s AND res_model=%s', (id, act[1], model._name)) @@ -80,7 +85,6 @@ class many2many_reference(fields.many2many): for act_nbr in act[2]: cr.execute('INSERT INTO '+rel+' ('+id1+','+id2+',res_model) VALUES (%s,%s,%s)', (id, act_nbr, model._name)) else: - print act return super(many2many_reference, self).set(cr, model, id, name, values, user, context) class mail_thread(osv.Model): @@ -160,18 +164,36 @@ class mail_thread(osv.Model): #------------------------------------------------------ def create(self, cr, uid, vals, context=None): - """ Automatically subscribe the creator """ + """ Override of create to subscribe : + - the writer + - followers given by the monitored fields + """ thread_id = super(mail_thread, self).create(cr, uid, vals, context=context) + fields = self.message_get_follower_fields(cr, uid, [thread_id], context=context) + print fields if thread_id: self.message_subscribe(cr, uid, [thread_id], [uid], context=context) return thread_id def write(self, cr, uid, ids, vals, context=None): - """ Override of write to subscribe the writer, except if he has changed - the followers (to avoid unfollow-->follow). """ + """ Override of write to subscribe : + - the writer + - followers given by the monitored fields + """ if isinstance(ids, (int, long)): ids = [ids] + command = self.message_get_automatic_followers(cr, uid, ids, vals, context=context) + print command + if vals.get('message_follower_ids'): + vals['message_follower_ids'] += command + else: + vals['message_follower_ids'] = command + print vals write_res = super(mail_thread, self).write(cr, uid, ids, vals, context=context) + + + + if write_res and not vals.get('message_follower_ids'): self.message_subscribe(cr, uid, ids, [uid], context=context) return write_res; @@ -188,6 +210,39 @@ class mail_thread(osv.Model): msg_obj.unlink(cr, uid, msg_to_del_ids, context=context) return super(mail_thread, self).unlink(cr, uid, ids, context=context) + def message_get_automatic_followers(self, cr, uid, ids, record_vals, add_uid=True, fetch_missing=False, context=None): + """ + + :param record_vals: values given to the create method of the new + record, or values updated in a write. + :param monitored_fields: a list of fields that are monitored. Those + fields must be many2one fields to the res.users model. + :param fetch_missing: is set to True, the method will read the + record to find values that are not present in record_vals. + + #TODO : UPDATE WHEN MERGING TO PARTNERS + """ + # get monitored fields + monitored_fields = self.message_get_monitored_follower_fields(cr, uid, ids, context=context) + print monitored_fields + # for each monitored field: if in record_vals, it has been modified + fields = [field for field in monitored_fields if field in record_vals.iterkeys()] + print fields + + follower_ids = [] + for field in fields: + value = record_vals.get(field) + if value: + follower_ids.append(value) + elif fetch_missing: + pass + + print follower_ids + if add_uid and uid not in follower_ids: + follower_ids.append(uid) + + return self.message_subscribe_get_command(cr, uid, follower_ids, context=context) + #------------------------------------------------------ # mail.message wrappers and tools #------------------------------------------------------ @@ -931,6 +986,12 @@ class mail_thread(osv.Model): # Subscription mechanism #------------------------------------------------------ + def message_get_monitored_follower_fields(self, cr, uid, ids, context=None): + """ Returns a list of fields containing a res.user.id. Those fields + will be checked to automatically subscribe those users. + """ + return [] + def message_get_subscribers(self, cr, uid, ids, context=None): """ Returns the current document followers. Basically this method checks in mail.followers for entries with matching res_model, @@ -953,6 +1014,10 @@ class mail_thread(osv.Model): write_res = self.write(cr, uid, ids, {'message_follower_ids': [(4, id) for id in to_subscribe_uids]}, context=context) return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_follower_ids] + def message_subscribe_get_command(self, cr, uid, follower_ids, context=None): + """ Generate the many2many command to add followers. """ + return [(4, id) for id in follower_ids] + def message_unsubscribe(self, cr, uid, ids, user_ids = None, context=None): """ Unsubscribe the user (or user_ids) from the current document. @@ -963,6 +1028,10 @@ class mail_thread(osv.Model): write_res = self.write(cr, uid, ids, {'message_follower_ids': [(3, id) for id in to_unsubscribe_uids]}, context=context) return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_follower_ids] + def message_unsubscribe_get_command(self, cr, uid, follower_ids, context=None): + """ Generate the many2many command to remove followers. """ + return [(3, id) for id in follower_ids] + #------------------------------------------------------ # Notification API #------------------------------------------------------ diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index 749d95c0c23..a41e4dbc332 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -1046,13 +1046,10 @@ class mrp_production(osv.osv): # OpenChatter methods and notifications # --------------------------------------------------- - def message_get_subscribers(self, cr, uid, ids, context=None): - """ Override to add responsible user. """ - user_ids = super(mrp_production, self).message_get_subscribers(cr, uid, ids, context=context) - for obj in self.browse(cr, uid, ids, context=context): - if obj.user_id and not obj.user_id.id in user_ids: - user_ids.append(obj.user_id.id) - return user_ids + def message_get_follower_fields(self, cr, uid, ids, context=None): + """ Override to add 'user_id' field to automatic subscription. """ + res = super(mrp_production, self).message_get_follower_fields(cr, uid, ids, context=context) + return res.append('user_id') def create_send_note(self, cr, uid, ids, context=None): self.message_append_note(cr, uid, ids, body=_("Manufacturing order has been created."), context=context) diff --git a/addons/project/project.py b/addons/project/project.py index 6f3b23f4746..b1db7fde6b3 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -513,13 +513,10 @@ def Project(): # OpenChatter methods and notifications # ------------------------------------------------ - def message_get_subscribers(self, cr, uid, ids, context=None): - """ Override to add responsible user. """ - user_ids = super(project, self).message_get_subscribers(cr, uid, ids, context=context) - for obj in self.browse(cr, uid, ids, context=context): - if obj.user_id and not obj.user_id.id in user_ids: - user_ids.append(obj.user_id.id) - return user_ids + def message_get_follower_fields(self, cr, uid, ids, context=None): + """ Override to add 'user_id' field to automatic subscription. """ + res = super(project, self).message_get_follower_fields(cr, uid, ids, context=context) + return res.append('user_id') def create(self, cr, uid, vals, context=None): if context is None: context = {} @@ -1201,15 +1198,10 @@ class task(base_stage, osv.osv): result[obj.id].append(obj.user_id.id) return result - def message_get_subscribers(self, cr, uid, ids, context=None): - """ Override to add responsible user and project manager. """ - user_ids = super(task, self).message_get_subscribers(cr, uid, ids, context=context) - for obj in self.browse(cr, uid, ids, context=context): - if obj.user_id and not obj.user_id.id in user_ids: - user_ids.append(obj.user_id.id) - if obj.manager_id and not obj.manager_id.id in user_ids: - user_ids.append(obj.manager_id.id) - return user_ids + def message_get_follower_fields(self, cr, uid, ids, context=None): + """ Override to add 'user_id' field to automatic subscription. """ + res = super(task, self).message_get_follower_fields(cr, uid, ids, context=context) + return res + ['user_id', 'manager_id'] def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): """ Override of the (void) default notification method. """ diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 7b2afbeacf2..5aa34c173c5 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -502,13 +502,10 @@ class project_issue(base_stage, osv.osv): # OpenChatter methods and notifications # ------------------------------------------------------- - def message_get_subscribers(self, cr, uid, ids, context=None): - """ Override to add responsible user. """ - user_ids = super(project_issue, self).message_get_subscribers(cr, uid, ids, context=context) - for obj in self.browse(cr, uid, ids, context=context): - if obj.user_id and not obj.user_id.id in user_ids: - user_ids.append(obj.user_id.id) - return user_ids + def message_get_follower_fields(self, cr, uid, ids, context=None): + """ Override to add 'user_id' field to automatic subscription. """ + res = super(project_issue, self).message_get_follower_fields(cr, uid, ids, context=context) + return res.append('user_id') def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): """ Override of the (void) default notification method. """ From 8286181d51f06e85bc18a50a9afa5c96b02845ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 20:49:02 +0200 Subject: [PATCH 126/165] [REM] res_users form view: removed partner_id, because it prevents from creating users without creating the partner by hand. bzr revid: tde@openerp.com-20120814184902-2izce14sdi4l3vfl --- openerp/addons/base/res/res_users_view.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/openerp/addons/base/res/res_users_view.xml b/openerp/addons/base/res/res_users_view.xml index 298f6ccfe30..283f6a2a02e 100644 --- a/openerp/addons/base/res/res_users_view.xml +++ b/openerp/addons/base/res/res_users_view.xml @@ -102,7 +102,6 @@ - From 4a9be8de85e00f0319bb2f3381643502c6b1d214 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 20:49:31 +0200 Subject: [PATCH 127/165] [REVIEW] res_users in mail_thread: removed form view inheritance adding Chatter. bzr revid: tde@openerp.com-20120814184931-q2hnox9dhc87wc27 --- addons/mail/res_users_view.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/addons/mail/res_users_view.xml b/addons/mail/res_users_view.xml index 527bf041948..005d71cb09f 100644 --- a/addons/mail/res_users_view.xml +++ b/addons/mail/res_users_view.xml @@ -26,11 +26,6 @@ - -
      - -
      -
      From 9deb60afe22227030653abb352e791ed4f94d9bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 20:49:56 +0200 Subject: [PATCH 128/165] [FIX] Fixed typo in var name. bzr revid: tde@openerp.com-20120814184956-qk4isl8rljf4nxzk --- addons/mail/res_partner.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/mail/res_partner.py b/addons/mail/res_partner.py index e162ccd81cc..d3a61b31a8a 100644 --- a/addons/mail/res_partner.py +++ b/addons/mail/res_partner.py @@ -20,9 +20,8 @@ ############################################################################## from osv import osv -from osv import fields -class res_partner_mail(osv.osv): +class res_partner_mail(osv.Model): """ Inherits partner and adds CRM information in the partner form """ _name = "res.partner" _inherit = ['res.partner', 'mail.thread'] @@ -41,9 +40,8 @@ class res_partner_mail(osv.osv): # if partner is linked to a user: find @login res_users_obj = self.pool.get('res.users') user_ids = res_users_obj.search(cr, uid, [('partner_id', 'in', ids)], context=context) - for user in res_user_obj.browse(cr, uid, user_ids, context=context): + for user in res_users_obj.browse(cr, uid, user_ids, context=context): search_domain = ['|'] + search_domain + ['|', ('body_text', 'like', '@%s' % (user.login)), ('body_html', 'like', '@%s' % (user.login))] - print search_domain return search_domain # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From a05b3f3a2ec29fbb3c1d5f6b7f64004290b6c62d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 20:50:25 +0200 Subject: [PATCH 129/165] [REVIEW] res_users: added wrappers on some Chatter methods; moved welcome message on the partner. bzr revid: tde@openerp.com-20120814185025-g5kdwisy2rjnipsb --- addons/mail/res_users.py | 50 ++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index 391ddb60036..ca9766e481c 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -28,7 +28,7 @@ from tools.translate import _ _logger = logging.getLogger(__name__) -class res_users(osv.osv): +class res_users(osv.Model): """ Update of res.users class - add a preference about sending emails about notifications - make a new user follow itself @@ -37,7 +37,7 @@ class res_users(osv.osv): _name = 'res.users' _inherit = ['res.users'] _inherits = {'mail.alias': 'alias_id'} - + _columns = { 'notification_email_pref': fields.selection([ ('all', 'All Feeds'), @@ -69,13 +69,13 @@ class res_users(osv.osv): def _auto_init(self, cr, context=None): """Installation hook to create aliases for all users and avoid constraint errors.""" - + # disable the unique alias_id not null constraint, to avoid spurious warning during # super.auto_init. We'll reinstall it afterwards. self._columns['alias_id'].required = False super(res_users,self)._auto_init(cr, context=context) - + registry = RegistryManager.get(cr.dbname) mail_alias = registry.get('mail.alias') res_users_model = registry.get('res.users') @@ -105,13 +105,22 @@ class res_users(osv.osv): alias_id = mail_alias.create_unique_alias(cr, uid, {'alias_name': data['login']}, model_name=self._name, context=context) data['alias_id'] = alias_id data.pop('alias_name', None) # prevent errors during copy() + # create user that follows its related partner user_id = super(res_users, self).create(cr, uid, data, context=context) - mail_alias.write(cr, SUPERUSER_ID, [alias_id], {"alias_force_thread_id": user_id}, context) - user = self.browse(cr, uid, user_id, context=context) - # make user follow itself - self.message_subscribe(cr, uid, [user_id], [user_id], context=context) + self.pool.get('res.partner').message_subscribe(cr, uid, [user.partner_id.id], [user_id], context=context) + # alias + mail_alias.write(cr, SUPERUSER_ID, [alias_id], {"alias_force_thread_id": user_id}, context) # create a welcome message + self.create_welcome_message_and_email(cr, uid, user, context=context) + return user_id + + def create_welcome_message_and_email(self, cr, uid, user, context=None): + """ Method to : + - create a welcome message on the partner wall + - send an email to the user with the instance URL / login (#TODO) + :param user: res_users browse_record + """ company_name = user.company_id.name if user.company_id else _('the company') message = '''%s has joined %s! Welcome in OpenERP ! @@ -120,9 +129,9 @@ Your homepage is a summary of messages you received and key information about do The top menu bar contains all applications you installed. You can use this Settings menu to install more applications, activate others features or give access to new users. To setup your preferences (name, email signature, avatar), click on the top right corner.''' % (user.name, company_name) - self.message_append_note(cr, uid, [user_id], subject='Welcome to OpenERP', body=message, type='comment', content_subtype='html', context=context) - return user_id - + return self.pool.get('res.partner').message_append_note(cr, uid, [user.partner_id.id], + subject='Welcome to OpenERP', body=message, type='comment', content_subtype='html', context=context) + def write(self, cr, uid, ids, vals, context=None): # User alias is sync'ed with login if vals.get('login'): vals['alias_name'] = vals['login'] @@ -135,7 +144,11 @@ To setup your preferences (name, email signature, avatar), click on the top righ res = super(res_users, self).unlink(cr, uid, ids, context=context) alias_pool.unlink(cr, uid, alias_ids, context=context) return res - + + # -------------------------------------------------- + # Wrappers on partner methods for Chatter + # -------------------------------------------------- + def message_append(self, cr, uid, threads, subject, body_text=None, body_html=None, type='email', email_date=None, parent_id=False, content_subtype='plain', state=None, @@ -143,14 +156,21 @@ To setup your preferences (name, email signature, avatar), click on the top righ email_cc=None, email_bcc=None, reply_to=None, headers=None, message_id=False, references=None, attachments=None, original=None, context=None): - """ Wrapper on message_append to redirect them to the related partner. """ for user in self.browse(cr, uid, threads, context=context): user.partner_id.message_append(subject, body_text, body_html, type, email_date, parent_id, content_subtype, state, partner_ids, email_from, email_to, email_cc, email_bcc, reply_to, headers, message_id, references, attachments, original) + def message_read(self, cr, uid, ids, fetch_ancestors=False, ancestor_ids=None, + limit=100, offset=0, domain=None, context=None): + for user in self.browse(cr, uid, ids, context=context): + user.partner_id.message_read(ids, fetch_ancestors, ancestor_ids, limit, offset, domain) -class res_users_mail_group(osv.osv): + def message_read_subscribers(self, cr, uid, ids, fields=['id', 'name', 'image_small'], context=None): + for user in self.browse(cr, uid, ids, context=context): + user.partner_id.message_read_subscribers(ids, fields) + +class res_users_mail_group(osv.Model): """ Update of res.groups class - if adding/removing users from a group, check mail.groups linked to this user group, and subscribe / unsubscribe them from the discussion @@ -171,7 +191,7 @@ class res_users_mail_group(osv.osv): return write_res -class res_groups_mail_group(osv.osv): +class res_groups_mail_group(osv.Model): """ Update of res.groups class - if adding/removing users from a group, check mail.groups linked to this user group, and subscribe / unsubscribe them from the discussion From 9532bbb033b4b3a4285e5cc2341ef47413aac255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 21:16:03 +0200 Subject: [PATCH 130/165] [FIX] procurement_order: moved a chatter message from user to the procurement.order; deleted second message_append_note that was never called, because of a void variable. bzr revid: tde@openerp.com-20120814191603-u1lsovhurrvuxbm4 --- addons/procurement/schedulers.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 1ad1046efce..7a87697f5c8 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -131,7 +131,7 @@ class procurement_order(osv.osv): Exceptions:\n""") % (start_date, end_date, report_total, report_except, report_later) summary += '\n'.join(report) - self.pool.get('res.users').message_append_note(cr, uid, [uid], body=summary, context=context) + procurement_obj.message_append_note(cr, uid, ids, body=summary, context=context) if use_new_cursor: cr.commit() @@ -234,7 +234,6 @@ class procurement_order(osv.osv): location_obj = self.pool.get('stock.location') procurement_obj = self.pool.get('procurement.order') wf_service = netsvc.LocalService("workflow") - report = [] offset = 0 ids = [1] if automatic: @@ -288,9 +287,6 @@ class procurement_order(osv.osv): offset += len(ids) if use_new_cursor: cr.commit() - if user_id and report: - # Chatter: old res.request is now a chatter on res.users, id=uid - self.pool.get('res.users').message_append_note(cr, uid, [user_id], body='\n'.join(report), subject=_('Orderpoint report'), context=context) if use_new_cursor: cr.commit() cr.close() From 87f657f9efbd013b840b51d19efb66cc8c06eb8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 21:43:22 +0200 Subject: [PATCH 131/165] [REM] mail.js: removed debugger added by FP... you could have check before merging for this one -_- . bzr revid: tde@openerp.com-20120814194322-yj7nyekugt7rmzn8 --- addons/mail/static/src/js/mail.js | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index c068074b457..ba8df2d1671 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -1021,7 +1021,6 @@ openerp.mail = function(session) { if (this.compose_message_widget) { this.compose_message_widget.destroy(); } - debugger; this.compose_message_widget = new mail.ComposeMessage(this, { 'extended_mode': false, 'uid': this.session.uid, 'res_model': this.params.res_model, 'res_id': this.params.res_id, 'mode': mode || 'comment', 'msg_id': msg_id }); From c4e3c1502179b8d8ed4eae82350015a8f3fe3734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 22:11:50 +0200 Subject: [PATCH 132/165] [IMP] res_users: added default on image; should overiding basic method should be sufficient, seems not. bzr revid: tde@openerp.com-20120814201150-uza8k3pzpkydqcow --- openerp/addons/base/res/res_users.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 95ee94788e1..cfc9ab6176e 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -255,6 +255,7 @@ class res_users(osv.osv): 'company_id': _get_company, 'company_ids': _get_companies, 'groups_id': _get_group, + 'image': lambda self, cr, uid, context: self._get_default_image(cr, uid, False, context), } def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): From 5d7302d80802d39495cf010f9690698821a3193b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 14 Aug 2012 22:19:27 +0200 Subject: [PATCH 133/165] [IMP] res_user: _get_default_image does not care about is_company.. event if it is not working currently (hem). bzr revid: tde@openerp.com-20120814201927-xmt6uv8qhcor5yav --- openerp/addons/base/res/res_users.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index cfc9ab6176e..ba7d8f0f6d3 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -206,7 +206,7 @@ class res_users(osv.osv): ('login_key', 'UNIQUE (login)', 'You can not have two users with the same login !') ] - def _get_default_image(self, cr, uid, is_company, context=None): + def _get_default_image(self, cr, uid, context=None): """ Override of res.partner: multicolor avatars ! """ image_path = openerp.modules.get_module_resource('base', 'static/src/img', 'avatar%d.png' % random.randint(0, 6)) return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64')) @@ -255,7 +255,7 @@ class res_users(osv.osv): 'company_id': _get_company, 'company_ids': _get_companies, 'groups_id': _get_group, - 'image': lambda self, cr, uid, context: self._get_default_image(cr, uid, False, context), + 'image': lambda self, cr, uid, context: self._get_default_image(cr, uid, context), } def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): From d85a88bfd2fee641cf195f7e4095ee1d17696b38 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Wed, 15 Aug 2012 04:51:04 +0000 Subject: [PATCH 134/165] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20120815044025-2nutgrzzxyqb60on bzr revid: launchpad_translations_on_behalf_of_openerp-20120815045104-n4a0t10m25fegodp --- addons/account/i18n/es_UY.po | 10523 ++++++++++++++++++++++++ addons/web/i18n/ar.po | 4 +- addons/web/i18n/bg.po | 4 +- addons/web/i18n/bn.po | 4 +- addons/web/i18n/bs.po | 4 +- addons/web/i18n/ca.po | 4 +- addons/web/i18n/cs.po | 4 +- addons/web/i18n/da.po | 4 +- addons/web/i18n/de.po | 4 +- addons/web/i18n/en_AU.po | 4 +- addons/web/i18n/en_GB.po | 4 +- addons/web/i18n/es.po | 4 +- addons/web/i18n/es_CL.po | 4 +- addons/web/i18n/es_CR.po | 4 +- addons/web/i18n/es_EC.po | 4 +- addons/web/i18n/et.po | 4 +- addons/web/i18n/eu.po | 4 +- addons/web/i18n/fi.po | 4 +- addons/web/i18n/fr.po | 4 +- addons/web/i18n/fr_CA.po | 4 +- addons/web/i18n/gl.po | 4 +- addons/web/i18n/gu.po | 4 +- addons/web/i18n/hi.po | 4 +- addons/web/i18n/hr.po | 4 +- addons/web/i18n/hu.po | 4 +- addons/web/i18n/id.po | 4 +- addons/web/i18n/it.po | 4 +- addons/web/i18n/ja.po | 4 +- addons/web/i18n/ka.po | 4 +- addons/web/i18n/mk.po | 4 +- addons/web/i18n/mn.po | 4 +- addons/web/i18n/nb.po | 4 +- addons/web/i18n/nl.po | 4 +- addons/web/i18n/nl_BE.po | 4 +- addons/web/i18n/pl.po | 4 +- addons/web/i18n/pt.po | 4 +- addons/web/i18n/pt_BR.po | 7 +- addons/web/i18n/ro.po | 4 +- addons/web/i18n/ru.po | 4 +- addons/web/i18n/sk.po | 4 +- addons/web/i18n/sl.po | 4 +- addons/web/i18n/sq.po | 4 +- addons/web/i18n/sr@latin.po | 4 +- addons/web/i18n/sv.po | 4 +- addons/web/i18n/tr.po | 4 +- addons/web/i18n/uk.po | 4 +- addons/web/i18n/zh_CN.po | 4 +- addons/web/i18n/zh_TW.po | 4 +- addons/web_calendar/i18n/ar.po | 4 +- addons/web_calendar/i18n/bg.po | 4 +- addons/web_calendar/i18n/bn.po | 4 +- addons/web_calendar/i18n/bs.po | 4 +- addons/web_calendar/i18n/ca.po | 4 +- addons/web_calendar/i18n/cs.po | 4 +- addons/web_calendar/i18n/da.po | 4 +- addons/web_calendar/i18n/de.po | 4 +- addons/web_calendar/i18n/en_AU.po | 4 +- addons/web_calendar/i18n/en_GB.po | 4 +- addons/web_calendar/i18n/es.po | 4 +- addons/web_calendar/i18n/es_CL.po | 4 +- addons/web_calendar/i18n/es_CR.po | 4 +- addons/web_calendar/i18n/es_EC.po | 4 +- addons/web_calendar/i18n/et.po | 4 +- addons/web_calendar/i18n/eu.po | 4 +- addons/web_calendar/i18n/fi.po | 4 +- addons/web_calendar/i18n/fr.po | 4 +- addons/web_calendar/i18n/fr_CA.po | 4 +- addons/web_calendar/i18n/gl.po | 4 +- addons/web_calendar/i18n/hr.po | 4 +- addons/web_calendar/i18n/id.po | 4 +- addons/web_calendar/i18n/it.po | 4 +- addons/web_calendar/i18n/ja.po | 4 +- addons/web_calendar/i18n/ka.po | 4 +- addons/web_calendar/i18n/mk.po | 4 +- addons/web_calendar/i18n/mn.po | 4 +- addons/web_calendar/i18n/nb.po | 4 +- addons/web_calendar/i18n/nl.po | 4 +- addons/web_calendar/i18n/nl_BE.po | 4 +- addons/web_calendar/i18n/pl.po | 4 +- addons/web_calendar/i18n/pt.po | 4 +- addons/web_calendar/i18n/pt_BR.po | 4 +- addons/web_calendar/i18n/ro.po | 4 +- addons/web_calendar/i18n/ru.po | 4 +- addons/web_calendar/i18n/sk.po | 4 +- addons/web_calendar/i18n/sl.po | 4 +- addons/web_calendar/i18n/sq.po | 4 +- addons/web_calendar/i18n/sr@latin.po | 4 +- addons/web_calendar/i18n/sv.po | 4 +- addons/web_calendar/i18n/tr.po | 4 +- addons/web_calendar/i18n/uk.po | 4 +- addons/web_calendar/i18n/zh_CN.po | 4 +- addons/web_dashboard/i18n/ar.po | 93 + addons/web_dashboard/i18n/bg.po | 95 + addons/web_dashboard/i18n/bn.po | 95 + addons/web_dashboard/i18n/bs.po | 85 + addons/web_dashboard/i18n/ca.po | 63 + addons/web_dashboard/i18n/cs.po | 96 + addons/web_dashboard/i18n/da.po | 84 + addons/web_dashboard/i18n/de.po | 93 + addons/web_dashboard/i18n/en_GB.po | 95 + addons/web_dashboard/i18n/es.po | 95 + addons/web_dashboard/i18n/es_CL.po | 95 + addons/web_dashboard/i18n/es_CR.po | 96 + addons/web_dashboard/i18n/es_EC.po | 95 + addons/web_dashboard/i18n/et.po | 63 + addons/web_dashboard/i18n/fi.po | 95 + addons/web_dashboard/i18n/fr.po | 96 + addons/web_dashboard/i18n/gl.po | 95 + addons/web_dashboard/i18n/hr.po | 93 + addons/web_dashboard/i18n/id.po | 86 + addons/web_dashboard/i18n/it.po | 95 + addons/web_dashboard/i18n/ja.po | 93 + addons/web_dashboard/i18n/ka.po | 94 + addons/web_dashboard/i18n/mk.po | 88 + addons/web_dashboard/i18n/mn.po | 94 + addons/web_dashboard/i18n/nb.po | 69 + addons/web_dashboard/i18n/nl.po | 95 + addons/web_dashboard/i18n/nl_BE.po | 94 + addons/web_dashboard/i18n/pl.po | 95 + addons/web_dashboard/i18n/pt.po | 95 + addons/web_dashboard/i18n/pt_BR.po | 95 + addons/web_dashboard/i18n/ro.po | 95 + addons/web_dashboard/i18n/ru.po | 94 + addons/web_dashboard/i18n/sk.po | 63 + addons/web_dashboard/i18n/sl.po | 93 + addons/web_dashboard/i18n/sq.po | 63 + addons/web_dashboard/i18n/sr@latin.po | 88 + addons/web_dashboard/i18n/sv.po | 94 + addons/web_dashboard/i18n/tr.po | 94 + addons/web_dashboard/i18n/uk.po | 63 + addons/web_dashboard/i18n/zh_CN.po | 93 + addons/web_diagram/i18n/ar.po | 4 +- addons/web_diagram/i18n/bg.po | 4 +- addons/web_diagram/i18n/bn.po | 4 +- addons/web_diagram/i18n/bs.po | 4 +- addons/web_diagram/i18n/ca.po | 4 +- addons/web_diagram/i18n/cs.po | 4 +- addons/web_diagram/i18n/da.po | 4 +- addons/web_diagram/i18n/de.po | 4 +- addons/web_diagram/i18n/en_GB.po | 4 +- addons/web_diagram/i18n/es.po | 4 +- addons/web_diagram/i18n/es_CL.po | 4 +- addons/web_diagram/i18n/es_CR.po | 4 +- addons/web_diagram/i18n/es_EC.po | 4 +- addons/web_diagram/i18n/et.po | 4 +- addons/web_diagram/i18n/fi.po | 4 +- addons/web_diagram/i18n/fr.po | 4 +- addons/web_diagram/i18n/gl.po | 4 +- addons/web_diagram/i18n/hr.po | 4 +- addons/web_diagram/i18n/id.po | 4 +- addons/web_diagram/i18n/it.po | 4 +- addons/web_diagram/i18n/ja.po | 4 +- addons/web_diagram/i18n/ka.po | 4 +- addons/web_diagram/i18n/mn.po | 4 +- addons/web_diagram/i18n/nl.po | 4 +- addons/web_diagram/i18n/nl_BE.po | 4 +- addons/web_diagram/i18n/pl.po | 4 +- addons/web_diagram/i18n/pt.po | 4 +- addons/web_diagram/i18n/pt_BR.po | 6 +- addons/web_diagram/i18n/ro.po | 4 +- addons/web_diagram/i18n/ru.po | 4 +- addons/web_diagram/i18n/sl.po | 4 +- addons/web_diagram/i18n/sq.po | 4 +- addons/web_diagram/i18n/sr@latin.po | 4 +- addons/web_diagram/i18n/sv.po | 4 +- addons/web_diagram/i18n/tr.po | 4 +- addons/web_diagram/i18n/zh_CN.po | 4 +- addons/web_gantt/i18n/ar.po | 4 +- addons/web_gantt/i18n/bg.po | 4 +- addons/web_gantt/i18n/bn.po | 4 +- addons/web_gantt/i18n/bs.po | 4 +- addons/web_gantt/i18n/ca.po | 4 +- addons/web_gantt/i18n/cs.po | 4 +- addons/web_gantt/i18n/da.po | 4 +- addons/web_gantt/i18n/de.po | 4 +- addons/web_gantt/i18n/en_AU.po | 4 +- addons/web_gantt/i18n/en_GB.po | 4 +- addons/web_gantt/i18n/es.po | 4 +- addons/web_gantt/i18n/es_CL.po | 4 +- addons/web_gantt/i18n/es_CR.po | 4 +- addons/web_gantt/i18n/es_EC.po | 4 +- addons/web_gantt/i18n/fi.po | 4 +- addons/web_gantt/i18n/fr.po | 4 +- addons/web_gantt/i18n/gl.po | 4 +- addons/web_gantt/i18n/hr.po | 4 +- addons/web_gantt/i18n/hu.po | 4 +- addons/web_gantt/i18n/it.po | 4 +- addons/web_gantt/i18n/ja.po | 4 +- addons/web_gantt/i18n/ka.po | 4 +- addons/web_gantt/i18n/mk.po | 4 +- addons/web_gantt/i18n/mn.po | 4 +- addons/web_gantt/i18n/nb.po | 4 +- addons/web_gantt/i18n/nl.po | 4 +- addons/web_gantt/i18n/nl_BE.po | 4 +- addons/web_gantt/i18n/pl.po | 4 +- addons/web_gantt/i18n/pt.po | 4 +- addons/web_gantt/i18n/pt_BR.po | 4 +- addons/web_gantt/i18n/ro.po | 4 +- addons/web_gantt/i18n/ru.po | 4 +- addons/web_gantt/i18n/sl.po | 4 +- addons/web_gantt/i18n/sq.po | 4 +- addons/web_gantt/i18n/sr@latin.po | 4 +- addons/web_gantt/i18n/sv.po | 4 +- addons/web_gantt/i18n/tr.po | 4 +- addons/web_gantt/i18n/zh_CN.po | 4 +- addons/web_graph/i18n/ar.po | 4 +- addons/web_graph/i18n/bg.po | 4 +- addons/web_graph/i18n/bn.po | 4 +- addons/web_graph/i18n/bs.po | 4 +- addons/web_graph/i18n/ca.po | 4 +- addons/web_graph/i18n/cs.po | 4 +- addons/web_graph/i18n/da.po | 4 +- addons/web_graph/i18n/de.po | 4 +- addons/web_graph/i18n/en_AU.po | 4 +- addons/web_graph/i18n/en_GB.po | 4 +- addons/web_graph/i18n/es.po | 4 +- addons/web_graph/i18n/es_CL.po | 4 +- addons/web_graph/i18n/es_CR.po | 4 +- addons/web_graph/i18n/es_EC.po | 4 +- addons/web_graph/i18n/fi.po | 4 +- addons/web_graph/i18n/fr.po | 4 +- addons/web_graph/i18n/gl.po | 4 +- addons/web_graph/i18n/hr.po | 4 +- addons/web_graph/i18n/hu.po | 4 +- addons/web_graph/i18n/it.po | 4 +- addons/web_graph/i18n/ja.po | 4 +- addons/web_graph/i18n/ka.po | 4 +- addons/web_graph/i18n/mk.po | 4 +- addons/web_graph/i18n/mn.po | 4 +- addons/web_graph/i18n/nl.po | 4 +- addons/web_graph/i18n/nl_BE.po | 4 +- addons/web_graph/i18n/pl.po | 4 +- addons/web_graph/i18n/pt.po | 4 +- addons/web_graph/i18n/pt_BR.po | 4 +- addons/web_graph/i18n/ro.po | 4 +- addons/web_graph/i18n/ru.po | 4 +- addons/web_graph/i18n/sl.po | 4 +- addons/web_graph/i18n/sq.po | 4 +- addons/web_graph/i18n/sr@latin.po | 4 +- addons/web_graph/i18n/sv.po | 4 +- addons/web_graph/i18n/tr.po | 4 +- addons/web_graph/i18n/zh_CN.po | 4 +- addons/web_hello/i18n/es_CR.po | 4 +- addons/web_hello/i18n/fr.po | 4 +- addons/web_hello/i18n/pt_BR.po | 4 +- addons/web_kanban/i18n/ar.po | 4 +- addons/web_kanban/i18n/bg.po | 4 +- addons/web_kanban/i18n/bn.po | 4 +- addons/web_kanban/i18n/bs.po | 4 +- addons/web_kanban/i18n/ca.po | 4 +- addons/web_kanban/i18n/cs.po | 4 +- addons/web_kanban/i18n/da.po | 4 +- addons/web_kanban/i18n/de.po | 4 +- addons/web_kanban/i18n/en_GB.po | 4 +- addons/web_kanban/i18n/es.po | 4 +- addons/web_kanban/i18n/es_CL.po | 4 +- addons/web_kanban/i18n/es_CR.po | 4 +- addons/web_kanban/i18n/es_EC.po | 4 +- addons/web_kanban/i18n/fi.po | 4 +- addons/web_kanban/i18n/fr.po | 4 +- addons/web_kanban/i18n/gl.po | 4 +- addons/web_kanban/i18n/hr.po | 4 +- addons/web_kanban/i18n/hu.po | 4 +- addons/web_kanban/i18n/it.po | 4 +- addons/web_kanban/i18n/ja.po | 4 +- addons/web_kanban/i18n/ka.po | 4 +- addons/web_kanban/i18n/mn.po | 4 +- addons/web_kanban/i18n/nl.po | 4 +- addons/web_kanban/i18n/nl_BE.po | 4 +- addons/web_kanban/i18n/pl.po | 4 +- addons/web_kanban/i18n/pt.po | 4 +- addons/web_kanban/i18n/pt_BR.po | 4 +- addons/web_kanban/i18n/ro.po | 4 +- addons/web_kanban/i18n/ru.po | 4 +- addons/web_kanban/i18n/sr@latin.po | 4 +- addons/web_kanban/i18n/sv.po | 4 +- addons/web_kanban/i18n/tr.po | 4 +- addons/web_kanban/i18n/zh_CN.po | 4 +- addons/web_mobile/i18n/ar.po | 4 +- addons/web_mobile/i18n/bg.po | 4 +- addons/web_mobile/i18n/bn.po | 4 +- addons/web_mobile/i18n/ca.po | 4 +- addons/web_mobile/i18n/cs.po | 4 +- addons/web_mobile/i18n/da.po | 4 +- addons/web_mobile/i18n/de.po | 4 +- addons/web_mobile/i18n/en_GB.po | 4 +- addons/web_mobile/i18n/es.po | 4 +- addons/web_mobile/i18n/es_CL.po | 4 +- addons/web_mobile/i18n/es_CR.po | 4 +- addons/web_mobile/i18n/es_EC.po | 4 +- addons/web_mobile/i18n/et.po | 4 +- addons/web_mobile/i18n/fi.po | 4 +- addons/web_mobile/i18n/fr.po | 4 +- addons/web_mobile/i18n/gl.po | 4 +- addons/web_mobile/i18n/hr.po | 4 +- addons/web_mobile/i18n/it.po | 4 +- addons/web_mobile/i18n/ja.po | 4 +- addons/web_mobile/i18n/ka.po | 4 +- addons/web_mobile/i18n/mk.po | 4 +- addons/web_mobile/i18n/mn.po | 4 +- addons/web_mobile/i18n/nb.po | 4 +- addons/web_mobile/i18n/nl.po | 4 +- addons/web_mobile/i18n/nl_BE.po | 4 +- addons/web_mobile/i18n/pl.po | 4 +- addons/web_mobile/i18n/pt.po | 4 +- addons/web_mobile/i18n/pt_BR.po | 4 +- addons/web_mobile/i18n/ro.po | 4 +- addons/web_mobile/i18n/ru.po | 4 +- addons/web_mobile/i18n/sk.po | 4 +- addons/web_mobile/i18n/sl.po | 4 +- addons/web_mobile/i18n/sq.po | 4 +- addons/web_mobile/i18n/sr@latin.po | 4 +- addons/web_mobile/i18n/sv.po | 4 +- addons/web_mobile/i18n/tr.po | 4 +- addons/web_mobile/i18n/uk.po | 4 +- addons/web_mobile/i18n/zh_CN.po | 4 +- addons/web_process/i18n/ar.po | 4 +- addons/web_process/i18n/bg.po | 4 +- addons/web_process/i18n/bn.po | 4 +- addons/web_process/i18n/bs.po | 4 +- addons/web_process/i18n/ca.po | 4 +- addons/web_process/i18n/cs.po | 4 +- addons/web_process/i18n/da.po | 4 +- addons/web_process/i18n/de.po | 4 +- addons/web_process/i18n/en_GB.po | 4 +- addons/web_process/i18n/es.po | 4 +- addons/web_process/i18n/es_CL.po | 4 +- addons/web_process/i18n/es_CR.po | 4 +- addons/web_process/i18n/es_EC.po | 4 +- addons/web_process/i18n/fi.po | 4 +- addons/web_process/i18n/fr.po | 4 +- addons/web_process/i18n/gl.po | 4 +- addons/web_process/i18n/hr.po | 4 +- addons/web_process/i18n/hu.po | 4 +- addons/web_process/i18n/it.po | 4 +- addons/web_process/i18n/ja.po | 4 +- addons/web_process/i18n/ka.po | 4 +- addons/web_process/i18n/mk.po | 4 +- addons/web_process/i18n/mn.po | 4 +- addons/web_process/i18n/nb.po | 4 +- addons/web_process/i18n/nl.po | 4 +- addons/web_process/i18n/nl_BE.po | 4 +- addons/web_process/i18n/pl.po | 4 +- addons/web_process/i18n/pt.po | 4 +- addons/web_process/i18n/pt_BR.po | 4 +- addons/web_process/i18n/ro.po | 4 +- addons/web_process/i18n/ru.po | 4 +- addons/web_process/i18n/sl.po | 4 +- addons/web_process/i18n/sr@latin.po | 4 +- addons/web_process/i18n/sv.po | 4 +- addons/web_process/i18n/tr.po | 4 +- addons/web_process/i18n/zh_CN.po | 4 +- addons/web_rpc/i18n/es_CR.po | 4 +- addons/web_tests/i18n/es_CR.po | 4 +- 354 files changed, 14707 insertions(+), 628 deletions(-) create mode 100644 addons/account/i18n/es_UY.po create mode 100644 addons/web_dashboard/i18n/ar.po create mode 100644 addons/web_dashboard/i18n/bg.po create mode 100644 addons/web_dashboard/i18n/bn.po create mode 100644 addons/web_dashboard/i18n/bs.po create mode 100644 addons/web_dashboard/i18n/ca.po create mode 100644 addons/web_dashboard/i18n/cs.po create mode 100644 addons/web_dashboard/i18n/da.po create mode 100644 addons/web_dashboard/i18n/de.po create mode 100644 addons/web_dashboard/i18n/en_GB.po create mode 100644 addons/web_dashboard/i18n/es.po create mode 100644 addons/web_dashboard/i18n/es_CL.po create mode 100644 addons/web_dashboard/i18n/es_CR.po create mode 100644 addons/web_dashboard/i18n/es_EC.po create mode 100644 addons/web_dashboard/i18n/et.po create mode 100644 addons/web_dashboard/i18n/fi.po create mode 100644 addons/web_dashboard/i18n/fr.po create mode 100644 addons/web_dashboard/i18n/gl.po create mode 100644 addons/web_dashboard/i18n/hr.po create mode 100644 addons/web_dashboard/i18n/id.po create mode 100644 addons/web_dashboard/i18n/it.po create mode 100644 addons/web_dashboard/i18n/ja.po create mode 100644 addons/web_dashboard/i18n/ka.po create mode 100644 addons/web_dashboard/i18n/mk.po create mode 100644 addons/web_dashboard/i18n/mn.po create mode 100644 addons/web_dashboard/i18n/nb.po create mode 100644 addons/web_dashboard/i18n/nl.po create mode 100644 addons/web_dashboard/i18n/nl_BE.po create mode 100644 addons/web_dashboard/i18n/pl.po create mode 100644 addons/web_dashboard/i18n/pt.po create mode 100644 addons/web_dashboard/i18n/pt_BR.po create mode 100644 addons/web_dashboard/i18n/ro.po create mode 100644 addons/web_dashboard/i18n/ru.po create mode 100644 addons/web_dashboard/i18n/sk.po create mode 100644 addons/web_dashboard/i18n/sl.po create mode 100644 addons/web_dashboard/i18n/sq.po create mode 100644 addons/web_dashboard/i18n/sr@latin.po create mode 100644 addons/web_dashboard/i18n/sv.po create mode 100644 addons/web_dashboard/i18n/tr.po create mode 100644 addons/web_dashboard/i18n/uk.po create mode 100644 addons/web_dashboard/i18n/zh_CN.po diff --git a/addons/account/i18n/es_UY.po b/addons/account/i18n/es_UY.po new file mode 100644 index 00000000000..ba90609e994 --- /dev/null +++ b/addons/account/i18n/es_UY.po @@ -0,0 +1,10523 @@ +# Spanish (Uruguay) translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-02-08 00:35+0000\n" +"PO-Revision-Date: 2012-08-14 15:07+0000\n" +"Last-Translator: Juan Andres Martinez Chaine \n" +"Language-Team: Spanish (Uruguay) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:40+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. module: account +#: view:account.invoice.report:0 +#: view:analytic.entries.report:0 +msgid "last month" +msgstr "el mes pasado" + +#. module: account +#: model:process.transition,name:account.process_transition_supplierreconcilepaid0 +msgid "System payment" +msgstr "Sistema de pagos" + +#. module: account +#: view:account.journal:0 +msgid "Other Configuration" +msgstr "Otra configuración" + +#. module: account +#: help:account.tax.code,sequence:0 +msgid "" +"Determine the display order in the report 'Accounting \\ Reporting \\ " +"Generic Reporting \\ Taxes \\ Taxes Report'" +msgstr "" +"Determina el órden de visualización en el informe 'Contabilidad\\informes\\ " +"informes genéricos\\ impuestos \\ informes de impuestos'" + +#. module: account +#: view:account.move.reconcile:0 +msgid "Journal Entry Reconcile" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.bank.statement:0 +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Account Statistics" +msgstr "Estadísticas de cuentas" + +#. module: account +#: view:account.invoice:0 +msgid "Proforma/Open/Paid Invoices" +msgstr "Facturas proforma/abiertas/pagadas" + +#. module: account +#: field:report.invoice.created,residual:0 +msgid "Residual" +msgstr "" + +#. module: account +#: constraint:account.period:0 +msgid "Error ! The duration of the Period(s) is/are invalid. " +msgstr "¡Error! La duración de el/los período(s) no es válida. " + +#. module: account +#: field:account.analytic.line,currency_id:0 +msgid "Account currency" +msgstr "Moneda contable" + +#. module: account +#: view:account.tax:0 +msgid "Children Definition" +msgstr "Definición hijos" + +#. module: account +#: code:addons/account/account_bank_statement.py:302 +#, python-format +msgid "Journal item \"%s\" is not valid." +msgstr "El asiento \"%s\" no es válido" + +#. module: account +#: model:ir.model,name:account.model_report_aged_receivable +msgid "Aged Receivable Till Today" +msgstr "A cobrar vencidos hasta hoy" + +#. module: account +#: model:process.transition,name:account.process_transition_invoiceimport0 +msgid "Import from invoice or payment" +msgstr "Importar desde factura o pago" + +#. module: account +#: model:ir.model,name:account.model_wizard_multi_charts_accounts +msgid "wizard.multi.charts.accounts" +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Total Debit" +msgstr "Total debe" + +#. module: account +#: view:account.unreconcile:0 +msgid "" +"If you unreconciliate transactions, you must also verify all the actions " +"that are linked to those transactions because they will not be disabled" +msgstr "" +"Si rompe la conciliación de transacciones, también debe verificar todas la " +"acciones que están relacionadas con esas transacciones porqué no serán " +"deshabilitadas." + +#. module: account +#: constraint:account.journal:0 +msgid "" +"Configuration error! The currency chosen should be shared by the default " +"accounts too." +msgstr "" +"¡Error de configuración! La moneda elegida debería ser también la misma en " +"las cuentas por defecto" + +#. module: account +#: report:account.invoice:0 +#: field:account.invoice.line,origin:0 +msgid "Origin" +msgstr "Original" + +#. module: account +#: view:account.account:0 +#: view:account.automatic.reconcile:0 +#: field:account.move.line,reconcile_id:0 +#: view:account.move.line.reconcile:0 +#: view:account.move.line.reconcile.writeoff:0 +msgid "Reconcile" +msgstr "Reconciliar" + +#. module: account +#: field:account.bank.statement.line,ref:0 +#: field:account.entries.report,ref:0 +#: view:account.invoice:0 +#: field:account.move,ref:0 +#: field:account.move.line,ref:0 +#: field:account.subscription,ref:0 +msgid "Reference" +msgstr "Referencia" + +#. module: account +#: view:account.open.closed.fiscalyear:0 +msgid "Choose Fiscal Year " +msgstr "Selecciona ejercicio fiscal " + +#. module: account +#: help:account.payment.term,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the payment " +"term without removing it." +msgstr "" +"Si el campo activo se desmarca, permite ocultar el plazo de pago sin " +"eliminarlo." + +#. module: account +#: code:addons/account/account_invoice.py:1428 +#, python-format +msgid "Warning!" +msgstr "¡Cuidado!" + +#. module: account +#: code:addons/account/account.py:3112 +#, python-format +msgid "Miscellaneous Journal" +msgstr "Diario varios" + +#. module: account +#: field:account.fiscal.position.account,account_src_id:0 +#: field:account.fiscal.position.account.template,account_src_id:0 +msgid "Account Source" +msgstr "Origen cuenta" + +#. module: account +#: model:ir.actions.act_window,name:account.act_acc_analytic_acc_5_report_hr_timesheet_invoice_journal +msgid "All Analytic Entries" +msgstr "Todos los asientos analíticos" + +#. module: account +#: field:accounting.report,label_filter:0 +msgid "Column Label" +msgstr "Etiqueta de columna" + +#. module: account +#: code:addons/account/wizard/account_move_journal.py:95 +#, python-format +msgid "Journal: %s" +msgstr "Diario: %s" + +#. module: account +#: help:account.analytic.journal,type:0 +msgid "" +"Gives the type of the analytic journal. When it needs for a document (eg: an " +"invoice) to create analytic entries, OpenERP will look for a matching " +"journal of the same type." +msgstr "" +"Indica el tipo de diario analítico. Cuando se necesita para un documento " +"(por ej. una factura) para crear asientos analíticos, OpenERP buscará un " +"diario coincidente del mismo tipo." + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_tax_template_form +#: model:ir.ui.menu,name:account.menu_action_account_tax_template_form +msgid "Tax Templates" +msgstr "Plantillas de impuestos" + +#. module: account +#: model:ir.model,name:account.model_account_tax +msgid "account.tax" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_line_reconcile_select +msgid "Move line reconcile select" +msgstr "Seleccionar la línea de movimiento a conciliar" + +#. module: account +#: help:account.tax.code,notprintable:0 +#: help:account.tax.code.template,notprintable:0 +msgid "" +"Check this box if you don't want any VAT related to this Tax Code to appear " +"on invoices" +msgstr "" +"Marque esta opción si desea que no aparezca en las facturas ningún IVA " +"relacionado con este código de impuesto." + +#. module: account +#: code:addons/account/account_invoice.py:1241 +#, python-format +msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)" +msgstr "" +"La factura '%s' está parcialmente pagada: %s%s de %s%s (%s%s pendiente)" + +#. module: account +#: model:process.transition,note:account.process_transition_supplierentriesreconcile0 +msgid "Accounting entries are an input of the reconciliation." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_management_belgian_reports +msgid "Belgian Reports" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1200 +#, python-format +msgid "You can not add/modify entries in a closed journal." +msgstr "No puede añadir/modificar asientos en un diario cerrado." + +#. module: account +#: help:account.account,user_type:0 +msgid "" +"Account Type is used for information purpose, to generate country-specific " +"legal reports, and set the rules to close a fiscal year and generate opening " +"entries." +msgstr "" +"El tipo de cuenta es usado con propósito informativo, para generar informes " +"legales específicos de cada país, y establecer las reglas para cerrar un año " +"fiscal y generar los apuntes de apertura." + +#. module: account +#: report:account.overdue:0 +msgid "Sub-Total :" +msgstr "Subtotal :" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_use_model_create_entry +#: model:ir.actions.act_window,name:account.action_view_account_use_model +#: model:ir.ui.menu,name:account.menu_action_manual_recurring +msgid "Manual Recurring" +msgstr "Recurrencia manual" + +#. module: account +#: view:account.fiscalyear.close.state:0 +msgid "Close Fiscalyear" +msgstr "Cerrar ejercicio fiscal" + +#. module: account +#: field:account.automatic.reconcile,allow_write_off:0 +msgid "Allow write off" +msgstr "Permitir desfase" + +#. module: account +#: view:account.analytic.chart:0 +msgid "Select the Period for Analysis" +msgstr "Seleccione el período de análisis" + +#. module: account +#: view:account.move.line:0 +msgid "St." +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:551 +#, python-format +msgid "Invoice line account company does not match with invoice company." +msgstr "" +"La compañía de la cuenta de la línea de factura no concuerda con la compañía " +"de la factura." + +#. module: account +#: field:account.journal.column,field:0 +msgid "Field Name" +msgstr "Nombre del campo" + +#. module: account +#: help:account.installer,charts:0 +msgid "" +"Installs localized accounting charts to match as closely as possible the " +"accounting needs of your company based on your country." +msgstr "" +"Instala el plan contable de la localización que satisface las necesidades " +"contables de su compañía basadas en su país." + +#. module: account +#: code:addons/account/wizard/account_move_journal.py:63 +#, python-format +msgid "" +"Can't find any account journal of %s type for this company.\n" +"\n" +"You can create one in the menu: \n" +"Configuration/Financial Accounting/Accounts/Journals." +msgstr "" +"No se encuentra ningún diario contable del tipo %s para esta compañía.\n" +"\n" +"Puede crear un diario en el menú: \n" +"Configuración/Contabilidad financiera/Cuentas/Diarios." + +#. module: account +#: model:ir.model,name:account.model_account_unreconcile +msgid "Account Unreconcile" +msgstr "Desconciliar cuenta" + +#. module: account +#: view:product.product:0 +#: view:product.template:0 +msgid "Purchase Properties" +msgstr "Propiedades de compra" + +#. module: account +#: help:account.financial.report,style_overwrite:0 +msgid "" +"You can set up here the format you want this record to be displayed. If you " +"leave the automatic formatting, it will be computed based on the financial " +"reports hierarchy (auto-computed field 'level')." +msgstr "" +"Puede configurar aquí el formato en que desea que se muestre este registro. " +"Si deja el formato automático, será calculado en base a la jerarquía de los " +"informes financieros (campo auto-calculado 'nivel')" + +#. module: account +#: view:account.installer:0 +msgid "Configure" +msgstr "Configurar" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "June" +msgstr "Junio" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_moves_bank +msgid "" +"This view is used by accountants in order to record entries massively in " +"OpenERP. Journal items are created by OpenERP if you use Bank Statements, " +"Cash Registers, or Customer/Supplier payments." +msgstr "" +"Los contables utilizan esta vista para introducir asientos masivamente en " +"OpenERP. Cuando utiliza los extractos bancarios, registros de caja, o pagos " +"de cliente/proveedor OpenERP crea automáticamente apuntes contables." + +#. module: account +#: constraint:account.move.line:0 +msgid "You can not create journal items on an account of type view." +msgstr "No puede crear asientos en una cuenta de tipo vista" + +#. module: account +#: model:ir.model,name:account.model_account_tax_template +msgid "account.tax.template" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_bank_accounts_wizard +msgid "account.bank.accounts.wizard" +msgstr "" + +#. module: account +#: field:account.move.line,date_created:0 +#: field:account.move.reconcile,create_date:0 +msgid "Creation date" +msgstr "Fecha de creación" + +#. module: account +#: selection:account.journal,type:0 +msgid "Purchase Refund" +msgstr "Reembolso de compra" + +#. module: account +#: selection:account.journal,type:0 +msgid "Opening/Closing Situation" +msgstr "" + +#. module: account +#: help:account.journal,currency:0 +msgid "The currency used to enter statement" +msgstr "" + +#. module: account +#: field:account.open.closed.fiscalyear,fyear_id:0 +msgid "Fiscal Year to Open" +msgstr "" + +#. module: account +#: help:account.journal,sequence_id:0 +msgid "" +"This field contains the informatin related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: account +#: field:account.journal,default_debit_account_id:0 +msgid "Default Debit Account" +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Total Credit" +msgstr "" + +#. module: account +#: view:account.move.line.unreconcile.select:0 +msgid "Open for Unreconciliation" +msgstr "" + +#. module: account +#: field:account.account.template,chart_template_id:0 +#: field:account.fiscal.position.template,chart_template_id:0 +#: field:account.tax.template,chart_template_id:0 +#: field:wizard.multi.charts.accounts,chart_template_id:0 +msgid "Chart Template" +msgstr "" + +#. module: account +#: help:account.model.line,amount_currency:0 +msgid "The amount expressed in an optional other currency." +msgstr "" + +#. module: account +#: field:accounting.report,enable_filter:0 +msgid "Enable Comparison" +msgstr "" + +#. module: account +#: help:account.journal.period,state:0 +msgid "" +"When journal period is created. The state is 'Draft'. If a report is printed " +"it comes to 'Printed' state. When all transactions are done, it comes in " +"'Done' state." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_tax_chart +msgid "" +"Chart of Taxes is a tree view reflecting the structure of the Tax Cases (or " +"tax codes) and shows the current tax situation. The tax chart represents the " +"amount of each area of the tax declaration for your country. It’s presented " +"in a hierarchical structure, which can be modified to fit your needs." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: field:account.automatic.reconcile,journal_id:0 +#: view:account.bank.statement:0 +#: field:account.bank.statement,journal_id:0 +#: report:account.central.journal:0 +#: view:account.entries.report:0 +#: field:account.entries.report,journal_id:0 +#: view:account.invoice:0 +#: field:account.invoice,journal_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,journal_id:0 +#: field:account.journal.period,journal_id:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: view:account.model:0 +#: field:account.model,journal_id:0 +#: view:account.move:0 +#: field:account.move,journal_id:0 +#: field:account.move.bank.reconcile,journal_id:0 +#: view:account.move.line:0 +#: field:account.move.line,journal_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,journal_id:0 +#: model:ir.actions.report.xml,name:account.account_journal +#: model:ir.model,name:account.model_account_journal +#: field:validate.account.move,journal_id:0 +msgid "Journal" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_invoice_confirm +msgid "Confirm the selected invoices" +msgstr "" + +#. module: account +#: field:account.addtmpl.wizard,cparent_id:0 +msgid "Parent target" +msgstr "" + +#. module: account +#: field:account.bank.statement,account_id:0 +msgid "Account used in this journal" +msgstr "" + +#. module: account +#: help:account.aged.trial.balance,chart_account_id:0 +#: help:account.balance.report,chart_account_id:0 +#: help:account.central.journal,chart_account_id:0 +#: help:account.common.account.report,chart_account_id:0 +#: help:account.common.journal.report,chart_account_id:0 +#: help:account.common.partner.report,chart_account_id:0 +#: help:account.common.report,chart_account_id:0 +#: help:account.general.journal,chart_account_id:0 +#: help:account.partner.balance,chart_account_id:0 +#: help:account.partner.ledger,chart_account_id:0 +#: help:account.print.journal,chart_account_id:0 +#: help:account.report.general.ledger,chart_account_id:0 +#: help:account.vat.declaration,chart_account_id:0 +#: help:accounting.report,chart_account_id:0 +msgid "Select Charts of Accounts" +msgstr "" + +#. module: account +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_invoice_refund +msgid "Invoice Refund" +msgstr "Reembolso de factura" + +#. module: account +#: report:account.overdue:0 +msgid "Li." +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,unreconciled:0 +msgid "Not reconciled transactions" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +msgid "Counterpart" +msgstr "" + +#. module: account +#: view:account.fiscal.position:0 +#: field:account.fiscal.position,tax_ids:0 +#: field:account.fiscal.position.template,tax_ids:0 +msgid "Tax Mapping" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscalyear_close_state +#: model:ir.ui.menu,name:account.menu_wizard_fy_close_state +msgid "Close a Fiscal Year" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_confirmstatementfromdraft0 +msgid "The accountant confirms the statement." +msgstr "" + +#. module: account +#: selection:account.balance.report,display_account:0 +#: selection:account.common.account.report,display_account:0 +#: selection:account.report.general.ledger,display_account:0 +#: selection:account.tax,type_tax_use:0 +#: selection:account.tax.template,type_tax_use:0 +msgid "All" +msgstr "" + +#. module: account +#: field:account.invoice.report,address_invoice_id:0 +msgid "Invoice Address Name" +msgstr "" + +#. module: account +#: selection:account.installer,period:0 +msgid "3 Monthly" +msgstr "" + +#. module: account +#: view:account.unreconcile.reconcile:0 +msgid "" +"If you unreconciliate transactions, you must also verify all the actions " +"that are linked to those transactions because they will not be disable" +msgstr "" + +#. module: account +#: view:analytic.entries.report:0 +msgid " 30 Days " +msgstr "" + +#. module: account +#: field:ir.sequence,fiscal_ids:0 +msgid "Sequences" +msgstr "" + +#. module: account +#: field:account.financial.report,account_report_id:0 +#: selection:account.financial.report,type:0 +msgid "Report Value" +msgstr "" + +#. module: account +#: view:account.fiscal.position.template:0 +msgid "Taxes Mapping" +msgstr "" + +#. module: account +#: report:account.central.journal:0 +msgid "Centralized Journal" +msgstr "" + +#. module: account +#: sql_constraint:account.sequence.fiscalyear:0 +msgid "Main Sequence must be different from current !" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1251 +#, python-format +msgid "No period found or more than one period found for the given date." +msgstr "" + +#. module: account +#: field:account.invoice.tax,tax_amount:0 +msgid "Tax Code Amount" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3116 +#, python-format +msgid "SAJ" +msgstr "" + +#. module: account +#: view:account.period:0 +#: view:account.period.close:0 +msgid "Close Period" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_common_partner_report +msgid "Account Common Partner Report" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close,period_id:0 +msgid "Opening Entries Period" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_journal_period +msgid "Journal Period" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:750 +#: code:addons/account/account_move_line.py:803 +#, python-format +msgid "To reconcile the entries company should be the same for all entries" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "" +"The date of your Journal Entry is not in the defined period! You should " +"change the date or remove this constraint from the journal." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_report_general_ledger +msgid "General Ledger Report" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Re-Open" +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "Are you sure you want to create entries?" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Print Invoice" +msgstr "" + +#. module: account +#: field:account.partner.reconcile.process,today_reconciled:0 +msgid "Partners Reconciled Today" +msgstr "" + +#. module: account +#: view:report.hr.timesheet.invoice.journal:0 +msgid "Sale journal in this year" +msgstr "" + +#. module: account +#: selection:account.financial.report,display_detail:0 +msgid "Display children with hierarchy" +msgstr "" + +#. module: account +#: selection:account.payment.term.line,value:0 +#: selection:account.tax.template,type:0 +msgid "Percent" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_charts +msgid "Charts" +msgstr "" + +#. module: account +#: code:addons/account/project/wizard/project_account_analytic_line.py:47 +#: model:ir.model,name:account.model_project_account_analytic_line +#, python-format +msgid "Analytic Entries by line" +msgstr "" + +#. module: account +#: field:account.invoice.refund,filter_refund:0 +msgid "Refund Method" +msgstr "Método de reembolso" + +#. module: account +#: code:addons/account/wizard/account_change_currency.py:38 +#, python-format +msgid "You can only change currency for Draft Invoice !" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_report +msgid "Financial Report" +msgstr "" + +#. module: account +#: view:account.analytic.journal:0 +#: field:account.analytic.journal,type:0 +#: field:account.bank.statement.line,type:0 +#: field:account.financial.report,type:0 +#: field:account.invoice,type:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,type:0 +#: view:account.journal:0 +#: field:account.journal,type:0 +#: field:account.move.reconcile,type:0 +#: field:report.invoice.created,type:0 +msgid "Type" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:738 +#, python-format +msgid "" +"Taxes are missing!\n" +"Click on compute button." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_subscription_line +msgid "Account Subscription Line" +msgstr "" + +#. module: account +#: help:account.invoice,reference:0 +msgid "The partner reference of this invoice." +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Supplier Invoices And Refunds" +msgstr "Facturas y reembolsos de proveedor" + +#. module: account +#: view:account.move.line.unreconcile.select:0 +#: view:account.unreconcile:0 +#: view:account.unreconcile.reconcile:0 +#: model:ir.model,name:account.model_account_move_line_unreconcile_select +msgid "Unreconciliation" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid "At 14 net days 2 percent, remaining amount at 30 days end of month." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_journal_report +msgid "Account Analytic Journal" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_automatic_reconcile +msgid "Automatic Reconcile" +msgstr "" + +#. module: account +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "J.C./Move name" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_gain_loss +msgid "" +"When doing multi-currency transactions, you may loose or gain some amount " +"due to changes of exchange rate. This menu gives you a forecast of the Gain " +"or Loss you'd realized if those transactions were ended today. Only for " +"accounts having a secondary currency set." +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "September" +msgstr "" + +#. module: account +#: selection:account.subscription,period_type:0 +msgid "days" +msgstr "" + +#. module: account +#: help:account.account.template,nocreate:0 +msgid "" +"If checked, the new chart of accounts will not contain this by default." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_invoice_refund.py:110 +#, python-format +msgid "" +"Can not %s invoice which is already reconciled, invoice should be " +"unreconciled first. You can only Refund this invoice" +msgstr "" +"No se puede %s una factura que ya está conciliada, primero debería romper la " +"conciliación de la factura. Sólo puede hacer un reembolso (Nota de Crédito) " +"de esta factura." + +#. module: account +#: model:ir.actions.act_window,name:account.action_subscription_form_new +msgid "New Subscription" +msgstr "" + +#. module: account +#: view:account.payment.term:0 +msgid "Computation" +msgstr "" + +#. module: account +#: selection:account.invoice.refund,filter_refund:0 +msgid "Cancel: refund invoice and reconcile" +msgstr "Cancelar: abonar factura y reconciliar" + +#. module: account +#: field:account.cashbox.line,pieces:0 +msgid "Values" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,delay_to_pay:0 +msgid "Avg. Delay To Pay" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_tax_chart +#: model:ir.actions.act_window,name:account.action_tax_code_tree +#: model:ir.ui.menu,name:account.menu_action_tax_code_tree +msgid "Chart of Taxes" +msgstr "" + +#. module: account +#: view:account.fiscalyear:0 +msgid "Create 3 Months Periods" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Due" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1345 +#, python-format +msgid "" +"You cannot validate this journal entry because account \"%s\" does not " +"belong to chart of accounts \"%s\"!" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:835 +#, python-format +msgid "" +"This account does not allow reconciliation! You should update the account " +"definition to change this." +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:account.move:0 +#: view:validate.account.move:0 +#: view:validate.account.move.lines:0 +msgid "Approve" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:account.move:0 +#: view:report.invoice.created:0 +msgid "Total Amount" +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: selection:account.entries.report,type:0 +msgid "Consolidation" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_liability +#: model:account.financial.report,name:account.account_financial_report_liability0 +#: model:account.financial.report,name:account.account_financial_report_liabilitysum0 +msgid "Liability" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_central_journal +msgid "Centralizing Journal" +msgstr "" + +#. module: account +#: selection:account.journal,type:0 +msgid "Sale Refund" +msgstr "Reembolso de ventas" + +#. module: account +#: model:process.node,note:account.process_node_accountingstatemententries0 +msgid "Bank statement" +msgstr "" + +#. module: account +#: field:account.analytic.line,move_id:0 +msgid "Move Line" +msgstr "" + +#. module: account +#: help:account.move.line,tax_amount:0 +msgid "" +"If the Tax account is a tax code account, this field will contain the taxed " +"amount.If the tax account is base tax code, this field will contain the " +"basic amount(without tax)." +msgstr "" + +#. module: account +#: code:addons/account/account.py:2596 +#, python-format +msgid "I can not locate a parent code for the template account!" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Purchases" +msgstr "" + +#. module: account +#: field:account.model,lines_id:0 +msgid "Model Entries" +msgstr "" + +#. module: account +#: field:account.account,code:0 +#: report:account.account.balance:0 +#: field:account.account.template,code:0 +#: field:account.account.type,code:0 +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.analytic.account.journal:0 +#: field:account.analytic.line,code:0 +#: field:account.fiscalyear,code:0 +#: report:account.general.journal:0 +#: field:account.journal,code:0 +#: report:account.partner.balance:0 +#: field:account.period,code:0 +msgid "Code" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2268 +#: code:addons/account/account_bank_statement.py:357 +#: code:addons/account/account_invoice.py:73 +#: code:addons/account/account_invoice.py:688 +#: code:addons/account/account_move_line.py:173 +#, python-format +msgid "No Analytic Journal !" +msgstr "" + +#. module: account +#: report:account.partner.balance:0 +#: view:account.partner.balance:0 +#: model:ir.actions.act_window,name:account.action_account_partner_balance +#: model:ir.actions.report.xml,name:account.account_3rdparty_account_balance +#: model:ir.ui.menu,name:account.menu_account_partner_balance_report +msgid "Partner Balance" +msgstr "" + +#. module: account +#: field:account.bank.accounts.wizard,acc_name:0 +msgid "Account Name." +msgstr "" + +#. module: account +#: field:account.chart.template,property_reserve_and_surplus_account:0 +#: field:res.company,property_reserve_and_surplus_account:0 +msgid "Reserve and Profit/Loss Account" +msgstr "" + +#. module: account +#: field:report.account.receivable,name:0 +msgid "Week of Year" +msgstr "" + +#. module: account +#: field:account.report.general.ledger,landscape:0 +msgid "Landscape Mode" +msgstr "" + +#. module: account +#: code:addons/account/account.py:645 +#, python-format +msgid "" +"You cannot change the type of account from '%s' to '%s' type as it contains " +"journal items!" +msgstr "" + +#. module: account +#: field:account.report.general.ledger,sortby:0 +msgid "Sort by" +msgstr "" + +#. module: account +#: help:account.fiscalyear.close,fy_id:0 +msgid "Select a Fiscal year to close" +msgstr "" + +#. module: account +#: help:account.account.template,user_type:0 +msgid "" +"These types are defined according to your country. The type contains more " +"information about the account and its specificities." +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:842 +#, python-format +msgid "" +"You have to provide an account for the write off/exchange difference entry !" +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Applicability Options" +msgstr "" + +#. module: account +#: report:account.partner.balance:0 +msgid "In dispute" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_view_bank_statement_tree +#: model:ir.ui.menu,name:account.journal_cash_move_lines +msgid "Cash Registers" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "-" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: model:res.groups,name:account.group_account_manager +msgid "Manager" +msgstr "" + +#. module: account +#: view:account.subscription.generate:0 +msgid "Generate Entries before:" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Unbalanced Journal Items" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_bank +#: selection:account.bank.accounts.wizard,account_type:0 +#: code:addons/account/account.py:3003 +#, python-format +msgid "Bank" +msgstr "" + +#. module: account +#: field:account.period,date_start:0 +msgid "Start of Period" +msgstr "" + +#. module: account +#: model:process.transition,name:account.process_transition_confirmstatementfromdraft0 +msgid "Confirm statement" +msgstr "" + +#. module: account +#: help:account.account,foreign_balance:0 +msgid "" +"Total amount (in Secondary currency) for transactions held in secondary " +"currency for this account." +msgstr "" + +#. module: account +#: field:account.fiscal.position.tax,tax_dest_id:0 +#: field:account.fiscal.position.tax.template,tax_dest_id:0 +msgid "Replacement Tax" +msgstr "" + +#. module: account +#: selection:account.move.line,centralisation:0 +msgid "Credit Centralisation" +msgstr "" + +#. module: account +#: view:report.account_type.sales:0 +msgid "All Months Sales by type" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_invoice_tree2 +msgid "" +"With Supplier Invoices you can enter and manage invoices issued by your " +"suppliers. OpenERP can also generate draft invoices automatically from " +"purchase orders or receipts. This way, you can control the invoice from your " +"supplier according to what you purchased or received." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_tax_code_template_form +#: model:ir.ui.menu,name:account.menu_action_account_tax_code_template_form +msgid "Tax Code Templates" +msgstr "" + +#. module: account +#: view:account.invoice.cancel:0 +msgid "Cancel Invoices" +msgstr "" + +#. module: account +#: help:account.journal,code:0 +msgid "The code will be displayed on reports." +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Taxes used in Purchases" +msgstr "" + +#. module: account +#: field:account.invoice.tax,tax_code_id:0 +#: field:account.tax,description:0 +#: field:account.tax.template,tax_code_id:0 +#: model:ir.model,name:account.model_account_tax_code +msgid "Tax Code" +msgstr "" + +#. module: account +#: field:account.account,currency_mode:0 +msgid "Outgoing Currencies Rate" +msgstr "" + +#. module: account +#: selection:account.analytic.journal,type:0 +msgid "Situation" +msgstr "" + +#. module: account +#: help:account.move.line,move_id:0 +msgid "The move of this entry line." +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1302 +#, python-format +msgid "" +"You can not use this general account in this journal, check the tab 'Entry " +"Controls' on the related journal !" +msgstr "" + +#. module: account +#: field:account.move.line.reconcile,trans_nbr:0 +msgid "# of Transaction" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Entry Label" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1129 +#, python-format +msgid "You can not modify/delete a journal with entries for this period !" +msgstr "" + +#. module: account +#: help:account.invoice,origin:0 +#: help:account.invoice.line,origin:0 +msgid "Reference of the document that produced this invoice." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: view:account.journal:0 +msgid "Others" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Draft Subscription" +msgstr "" + +#. module: account +#: view:account.account:0 +#: report:account.account.balance:0 +#: view:account.analytic.line:0 +#: field:account.automatic.reconcile,writeoff_acc_id:0 +#: field:account.bank.statement.line,account_id:0 +#: view:account.entries.report:0 +#: field:account.entries.report,account_id:0 +#: field:account.invoice,account_id:0 +#: field:account.invoice.line,account_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,account_id:0 +#: field:account.journal,account_control_ids:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.model.line,account_id:0 +#: view:account.move.line:0 +#: field:account.move.line,account_id:0 +#: field:account.move.line.reconcile.select,account_id:0 +#: field:account.move.line.unreconcile.select,account_id:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,account_id:0 +#: model:ir.model,name:account.model_account_account +#: field:report.account.sales,account_id:0 +msgid "Account" +msgstr "" + +#. module: account +#: field:account.tax,include_base_amount:0 +msgid "Included in base amount" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +#: model:ir.actions.act_window,name:account.action_account_entries_report_all +#: model:ir.ui.menu,name:account.menu_action_account_entries_report_all +msgid "Entries Analysis" +msgstr "" + +#. module: account +#: field:account.account,level:0 +#: field:account.financial.report,level:0 +msgid "Level" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: view:account.invoice.line:0 +#: field:account.invoice.line,invoice_line_tax_id:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: model:ir.actions.act_window,name:account.action_tax_form +#: model:ir.ui.menu,name:account.account_template_taxes +#: model:ir.ui.menu,name:account.menu_action_tax_form +#: model:ir.ui.menu,name:account.menu_tax_report +#: model:ir.ui.menu,name:account.next_id_27 +msgid "Taxes" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_financial_report.py:69 +#: code:addons/account/wizard/account_report_common.py:144 +#, python-format +msgid "Select a starting and an ending period" +msgstr "" + +#. module: account +#: model:account.financial.report,name:account.account_financial_report_profitandloss0 +msgid "Profit and Loss" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_account_template +msgid "Templates for Accounts" +msgstr "" + +#. module: account +#: view:account.tax.code.template:0 +msgid "Search tax template" +msgstr "" + +#. module: account +#: view:account.move.reconcile:0 +#: model:ir.actions.act_window,name:account.action_account_reconcile_select +#: model:ir.actions.act_window,name:account.action_view_account_move_line_reconcile +msgid "Reconcile Entries" +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_overdue +#: view:res.company:0 +msgid "Overdue Payments" +msgstr "" + +#. module: account +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Initial Balance" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Reset to Draft" +msgstr "" + +#. module: account +#: view:wizard.multi.charts.accounts:0 +msgid "Bank Information" +msgstr "" + +#. module: account +#: view:account.aged.trial.balance:0 +#: view:account.common.report:0 +msgid "Report Options" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_entries_report +msgid "Journal Items Analysis" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.next_id_22 +msgid "Partners" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: model:ir.model,name:account.model_account_bank_statement +#: model:process.node,name:account.process_node_accountingstatemententries0 +#: model:process.node,name:account.process_node_bankstatement0 +#: model:process.node,name:account.process_node_supplierbankstatement0 +msgid "Bank Statement" +msgstr "" + +#. module: account +#: field:res.partner,property_account_receivable:0 +msgid "Account Receivable" +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_central_journal +msgid "Central Journal" +msgstr "" + +#. module: account +#: selection:account.balance.report,display_account:0 +#: selection:account.common.account.report,display_account:0 +#: selection:account.partner.balance,display_partner:0 +#: selection:account.report.general.ledger,display_account:0 +msgid "With balance is not equal to 0" +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Search Taxes" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_cost_ledger +msgid "Account Analytic Cost Ledger" +msgstr "" + +#. module: account +#: view:account.model:0 +msgid "Create entries" +msgstr "" + +#. module: account +#: field:account.entries.report,nbr:0 +msgid "# of Items" +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,max_amount:0 +msgid "Maximum write-off amount" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Compute Taxes" +msgstr "" + +#. module: account +#: field:account.chart.template,code_digits:0 +#: field:wizard.multi.charts.accounts,code_digits:0 +msgid "# of Digits" +msgstr "" + +#. module: account +#: field:account.journal,entry_posted:0 +msgid "Skip 'Draft' State for Manual Entries" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,price_total:0 +msgid "Total Without Tax" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_move_journal_line +msgid "" +"A journal entry consists of several journal items, each of which is either a " +"debit or a credit transaction. OpenERP automatically creates one journal " +"entry per accounting document: invoice, refund, supplier payment, bank " +"statements, etc." +msgstr "" +"Un asiento de diario se compone de varios elementos del diario, cada uno " +"puede ser una transacción de crédito o débito. OpenERP crea automáticamente " +"una entrada en un diario por cada documento contable: factura, reembolso, " +"pago a proveedor, extractos de cuenta bancaria, etc" + +#. module: account +#: view:account.entries.report:0 +msgid "# of Entries " +msgstr "" + +#. module: account +#: help:account.fiscal.position,active:0 +msgid "" +"By unchecking the active field, you may hide a fiscal position without " +"deleting it." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_temp_range +msgid "A Temporary table used for Dashboard view" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_invoice_tree4 +#: model:ir.ui.menu,name:account.menu_action_invoice_tree4 +msgid "Supplier Refunds" +msgstr "Nota de Crédito de proveedor" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: selection:account.bank.statement,state:0 +#: selection:account.entries.report,type:0 +#: view:account.fiscalyear:0 +#: selection:account.fiscalyear,state:0 +#: selection:account.period,state:0 +msgid "Closed" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_recurrent_entries +msgid "Recurring Entries" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_template +msgid "Template for Fiscal Position" +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,reconciled:0 +msgid "Reconciled transactions" +msgstr "" + +#. module: account +#: field:account.journal.view,columns_id:0 +msgid "Columns" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "." +msgstr "" + +#. module: account +#: view:account.analytic.cost.ledger.journal.report:0 +msgid "and Journals" +msgstr "" + +#. module: account +#: field:account.journal,groups_id:0 +msgid "Groups" +msgstr "" + +#. module: account +#: field:account.invoice,amount_untaxed:0 +#: field:report.invoice.created,amount_untaxed:0 +msgid "Untaxed" +msgstr "" + +#. module: account +#: view:account.partner.reconcile.process:0 +msgid "Go to Next Partner" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Search Bank Statements" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Unposted Journal Items" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +#: field:account.chart.template,property_account_payable:0 +msgid "Payable Account" +msgstr "" + +#. module: account +#: field:account.tax,account_paid_id:0 +#: field:account.tax.template,account_paid_id:0 +msgid "Refund Tax Account" +msgstr "Cuenta impuestos de reintegros" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.bank.statement,line_ids:0 +msgid "Statement lines" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_bank_statement_tree +msgid "" +"A bank statement is a summary of all financial transactions occurring over a " +"given period of time on a deposit account, a credit card or any other type " +"of financial account. The starting balance will be proposed automatically " +"and the closing balance is to be found on your statement. When you are in " +"the Payment column of a line, you can press F1 to open the reconciliation " +"form." +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +msgid "Date/Code" +msgstr "" + +#. module: account +#: field:account.analytic.line,general_account_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,general_account_id:0 +msgid "General Account" +msgstr "" + +#. module: account +#: field:res.partner,debit_limit:0 +msgid "Payable Limit" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: field:account.move.line,invoice:0 +#: model:ir.model,name:account.model_account_invoice +#: model:res.request.link,name:account.req_link_invoice +msgid "Invoice" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_analytic0 +#: model:process.node,note:account.process_node_analyticcost0 +msgid "Analytic costs to invoice" +msgstr "" + +#. module: account +#: view:ir.sequence:0 +msgid "Fiscal Year Sequence" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,seq_journal:0 +msgid "Separated Journal Sequences" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Responsible" +msgstr "" + +#. module: account +#: view:account.invoice.refund:0 +msgid "" +"Cancel Invoice: Creates the refund invoice, validate and reconcile it to " +"cancel the current invoice." +msgstr "" +"Cancelar factura: Crea la Nota de Crédito, la valida y concilia para " +"cancelar la factura actual." + +#. module: account +#: model:ir.ui.menu,name:account.periodical_processing_invoicing +msgid "Invoicing" +msgstr "" + +#. module: account +#: code:addons/account/report/account_partner_balance.py:115 +#, python-format +msgid "Unknown Partner" +msgstr "" + +#. module: account +#: field:account.tax.code,sum:0 +msgid "Year Sum" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1429 +#, python-format +msgid "" +"You selected an Unit of Measure which is not compatible with the product." +msgstr "" + +#. module: account +#: view:account.change.currency:0 +msgid "This wizard will change the currency of the invoice" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_chart +msgid "" +"Display your company chart of accounts per fiscal year and filter by period. " +"Have a complete tree view of all journal items per account code by clicking " +"on an account." +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Pending Accounts" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Tax Declaration" +msgstr "" + +#. module: account +#: help:account.journal.period,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the journal " +"period without removing it." +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "Supplier Debit" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.act_account_partner_account_move_all +msgid "Receivables & Payables" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_common_journal_report +msgid "Account Common Journal Report" +msgstr "" + +#. module: account +#: selection:account.partner.balance,display_partner:0 +msgid "All Partners" +msgstr "" + +#. module: account +#: view:account.analytic.chart:0 +msgid "Analytic Account Charts" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: view:analytic.entries.report:0 +msgid "My Entries" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Customer Ref:" +msgstr "" + +#. module: account +#: code:addons/account/account_cash_statement.py:292 +#, python-format +msgid "User %s does not have rights to access %s journal !" +msgstr "" + +#. module: account +#: help:account.period,special:0 +msgid "These periods can overlap." +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_draftstatement0 +msgid "Draft statement" +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Tax Declaration: Credit Notes" +msgstr "" + +#. module: account +#: field:account.move.line.reconcile,credit:0 +msgid "Credit amount" +msgstr "" + +#. module: account +#: code:addons/account/account.py:407 +#: code:addons/account/account.py:412 +#: code:addons/account/account.py:429 +#, python-format +msgid "Error!" +msgstr "" + +#. module: account +#: sql_constraint:account.move.line:0 +msgid "Wrong credit or debit value in accounting entry !" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: model:ir.actions.act_window,name:account.action_account_invoice_report_all +#: model:ir.ui.menu,name:account.menu_action_account_invoice_report_all +msgid "Invoices Analysis" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_period_close +msgid "period close" +msgstr "" + +#. module: account +#: view:account.installer:0 +msgid "Configure Fiscal Year" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_project_account_analytic_line_form +msgid "Entries By Line" +msgstr "" + +#. module: account +#: field:account.vat.declaration,based_on:0 +msgid "Based on" +msgstr "" + +#. module: account +#: field:account.invoice,move_id:0 +#: field:account.invoice,move_name:0 +msgid "Journal Entry" +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Tax Declaration: Invoices" +msgstr "" + +#. module: account +#: field:account.cashbox.line,subtotal:0 +msgid "Sub Total" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.treasury.report:0 +#: model:ir.actions.act_window,name:account.action_account_treasury_report_all +#: model:ir.model,name:account.model_account_treasury_report +#: model:ir.ui.menu,name:account.menu_action_account_treasury_report_all +msgid "Treasury Analysis" +msgstr "" + +#. module: account +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_journal_sale_purchase +msgid "Sale/Purchase Journal" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Analytic account" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:339 +#, python-format +msgid "Please verify that an account is defined in the journal." +msgstr "" + +#. module: account +#: selection:account.entries.report,move_line_state:0 +#: selection:account.move.line,state:0 +msgid "Valid" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_print_journal +#: model:ir.model,name:account.model_account_print_journal +msgid "Account Print Journal" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_product_category +msgid "Product Category" +msgstr "" + +#. module: account +#: selection:account.account.type,report_type:0 +msgid "/" +msgstr "" + +#. module: account +#: help:res.company,property_reserve_and_surplus_account:0 +msgid "" +"This account is used for transferring Profit/Loss (If It is Profit: Amount " +"will be added, Loss : Amount will be deducted.), as calculated in Profit & " +"Loss Report" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_reconciliation0 +#: model:process.node,note:account.process_node_supplierreconciliation0 +msgid "Comparison between accounting and payment entries" +msgstr "" + +#. module: account +#: view:account.tax:0 +#: view:account.tax.template:0 +msgid "Tax Definition" +msgstr "" + +#. module: account +#: help:wizard.multi.charts.accounts,seq_journal:0 +msgid "" +"Check this box if you want to use a different sequence for each created " +"journal. Otherwise, all will use the same sequence." +msgstr "" + +#. module: account +#: help:account.partner.ledger,amount_currency:0 +#: help:account.report.general.ledger,amount_currency:0 +msgid "" +"It adds the currency column if the currency is different then the company " +"currency" +msgstr "" + +#. module: account +#: help:account.journal,allow_date:0 +msgid "" +"If set to True then do not accept the entry if the entry date is not into " +"the period dates" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:73 +#, python-format +msgid "You must define an analytic journal of type '%s'!" +msgstr "" + +#. module: account +#: field:account.installer,config_logo:0 +#: field:wizard.multi.charts.accounts,config_logo:0 +msgid "Image" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "" +"The selected account of your Journal Entry forces to provide a secondary " +"currency. You should remove the secondary currency on the account or select " +"a multi-currency view on the journal." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_financial_report_tree +msgid "Makes a generic system to draw financial reports easily." +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:report.invoice.created:0 +msgid "Untaxed Amount" +msgstr "" + +#. module: account +#: help:account.tax,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the tax " +"without removing it." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Analytic Journal Items related to a sale journal." +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Italic Text (smaller)" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: view:account.invoice:0 +#: selection:account.invoice,state:0 +#: view:account.invoice.report:0 +#: selection:account.invoice.report,state:0 +#: selection:account.journal.period,state:0 +#: view:account.subscription:0 +#: selection:account.subscription,state:0 +#: selection:report.invoice.created,state:0 +msgid "Draft" +msgstr "" + +#. module: account +#: report:account.journal.period.print.sale.purchase:0 +msgid "VAT Declaration" +msgstr "" + +#. module: account +#: field:account.move.reconcile,line_partial_ids:0 +msgid "Partial Entry lines" +msgstr "" + +#. module: account +#: view:account.fiscalyear:0 +#: field:account.treasury.report,fiscalyear_id:0 +msgid "Fiscalyear" +msgstr "" + +#. module: account +#: view:account.journal.select:0 +#: view:project.account.analytic.line:0 +msgid "Open Entries" +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,account_ids:0 +msgid "Accounts to Reconcile" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_filestatement0 +msgid "Import of the statement in the system from an electronic file" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_importinvoice0 +msgid "Import from invoice" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "January" +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Validations" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "This F.Year" +msgstr "" + +#. module: account +#: view:account.tax.chart:0 +msgid "Account tax charts" +msgstr "" + +#. module: account +#: constraint:account.period:0 +msgid "" +"Invalid period ! Some periods overlap or the date period is not in the scope " +"of the fiscal year. " +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:357 +#, python-format +msgid "You have to assign an analytic journal on the '%s' journal!" +msgstr "" + +#. module: account +#: selection:account.invoice,state:0 +#: view:account.invoice.report:0 +#: selection:account.invoice.report,state:0 +#: selection:report.invoice.created,state:0 +msgid "Pro-forma" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1461 +#, python-format +msgid "" +"There is no default default debit account defined \n" +"on journal \"%s\"" +msgstr "" + +#. module: account +#: help:account.account.template,type:0 +#: help:account.entries.report,type:0 +msgid "" +"This type is used to differentiate types with special effects in OpenERP: " +"view can not have entries, consolidation are accounts that can have children " +"accounts for multi-company consolidations, payable/receivable are for " +"partners accounts (for debit/credit computations), closed for depreciated " +"accounts." +msgstr "" + +#. module: account +#: view:account.chart.template:0 +msgid "Search Chart of Account Templates" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1277 +#, python-format +msgid "" +"Can not create an automatic sequence for this piece!\n" +"Put a sequence in the journal definition for automatic numbering or create a " +"sequence manually for this piece." +msgstr "" + +#. module: account +#: code:addons/account/account.py:787 +#, python-format +msgid "" +"You can not modify the company of this journal as its related record exist " +"in journal items" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Customer Code" +msgstr "" + +#. module: account +#: view:account.installer:0 +msgid "" +"The default Chart of Accounts is matching your country selection. If no " +"certified Chart of Accounts exists for your specified country, a generic one " +"can be installed and will be selected by default." +msgstr "" + +#. module: account +#: view:account.account.type:0 +#: field:account.account.type,note:0 +#: view:account.analytic.account:0 +#: report:account.invoice:0 +#: field:account.invoice,name:0 +#: field:account.invoice.line,name:0 +#: field:account.invoice.refund,description:0 +#: report:account.overdue:0 +#: field:account.payment.term,note:0 +#: view:account.tax.code:0 +#: field:account.tax.code,info:0 +#: view:account.tax.code.template:0 +#: field:account.tax.code.template,info:0 +#: field:analytic.entries.report,name:0 +#: field:report.invoice.created,name:0 +msgid "Description" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3119 +#, python-format +msgid "ECNJ" +msgstr "" + +#. module: account +#: view:account.subscription:0 +#: selection:account.subscription,state:0 +msgid "Running" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +#: field:product.category,property_account_income_categ:0 +#: field:product.template,property_account_income:0 +msgid "Income Account" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:370 +#, python-format +msgid "There is no Accounting Journal of type Sale/Purchase defined!" +msgstr "" + +#. module: account +#: constraint:res.partner.bank:0 +msgid "The RIB and/or IBAN is not valid" +msgstr "" + +#. module: account +#: view:product.category:0 +msgid "Accounting Properties" +msgstr "" + +#. module: account +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +msgid "Entries Sorted By" +msgstr "" + +#. module: account +#: field:account.change.currency,currency_id:0 +msgid "Change to" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "# of Products Qty " +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_product_template +msgid "Product Template" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,fiscalyear_id:0 +#: field:account.balance.report,fiscalyear_id:0 +#: report:account.central.journal:0 +#: field:account.central.journal,fiscalyear_id:0 +#: field:account.common.account.report,fiscalyear_id:0 +#: field:account.common.journal.report,fiscalyear_id:0 +#: field:account.common.partner.report,fiscalyear_id:0 +#: field:account.common.report,fiscalyear_id:0 +#: view:account.entries.report:0 +#: field:account.entries.report,fiscalyear_id:0 +#: field:account.fiscalyear,name:0 +#: report:account.general.journal:0 +#: field:account.general.journal,fiscalyear_id:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: field:account.journal.period,fiscalyear_id:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,fiscalyear_id:0 +#: field:account.partner.ledger,fiscalyear_id:0 +#: field:account.period,fiscalyear_id:0 +#: field:account.print.journal,fiscalyear_id:0 +#: field:account.report.general.ledger,fiscalyear_id:0 +#: field:account.sequence.fiscalyear,fiscalyear_id:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: report:account.vat.declaration:0 +#: field:account.vat.declaration,fiscalyear_id:0 +#: field:accounting.report,fiscalyear_id:0 +#: field:accounting.report,fiscalyear_id_cmp:0 +#: model:ir.model,name:account.model_account_fiscalyear +msgid "Fiscal Year" +msgstr "" + +#. module: account +#: help:account.aged.trial.balance,fiscalyear_id:0 +#: help:account.balance.report,fiscalyear_id:0 +#: help:account.central.journal,fiscalyear_id:0 +#: help:account.common.account.report,fiscalyear_id:0 +#: help:account.common.journal.report,fiscalyear_id:0 +#: help:account.common.partner.report,fiscalyear_id:0 +#: help:account.common.report,fiscalyear_id:0 +#: help:account.general.journal,fiscalyear_id:0 +#: help:account.partner.balance,fiscalyear_id:0 +#: help:account.partner.ledger,fiscalyear_id:0 +#: help:account.print.journal,fiscalyear_id:0 +#: help:account.report.general.ledger,fiscalyear_id:0 +#: help:account.vat.declaration,fiscalyear_id:0 +#: help:accounting.report,fiscalyear_id:0 +#: help:accounting.report,fiscalyear_id_cmp:0 +msgid "Keep empty for all open fiscal year" +msgstr "" + +#. module: account +#: field:account.invoice.report,account_line_id:0 +msgid "Account Line" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1468 +#, python-format +msgid "" +"There is no default default credit account defined \n" +"on journal \"%s\"" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_review_financial_journals_installer +msgid "" +"Setup your accounting journals. For bank accounts, it's better to use the " +"'Setup Your Bank Accounts' tool that will automatically create the accounts " +"and journals for you." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move +msgid "Account Entry" +msgstr "" + +#. module: account +#: constraint:res.partner:0 +msgid "Error ! You cannot create recursive associated members." +msgstr "" + +#. module: account +#: field:account.sequence.fiscalyear,sequence_main_id:0 +msgid "Main Sequence" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:402 +#, python-format +msgid "" +"In order to delete a bank statement, you must first cancel it to delete " +"related journal items." +msgstr "" + +#. module: account +#: field:account.invoice,payment_term:0 +#: field:account.invoice.report,payment_term:0 +#: view:account.payment.term:0 +#: field:account.payment.term,name:0 +#: view:account.payment.term.line:0 +#: field:account.payment.term.line,payment_id:0 +#: model:ir.model,name:account.model_account_payment_term +#: field:res.partner,property_payment_term:0 +msgid "Payment Term" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscal_position_form +#: model:ir.ui.menu,name:account.menu_action_account_fiscal_position_form +msgid "Fiscal Positions" +msgstr "" + +#. module: account +#: constraint:account.account:0 +#: constraint:account.tax.code:0 +msgid "Error ! You can not create recursive accounts." +msgstr "" + +#. module: account +#: field:account.period.close,sure:0 +msgid "Check this box" +msgstr "" + +#. module: account +#: view:account.common.report:0 +msgid "Filters" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: selection:account.bank.statement,state:0 +#: view:account.fiscalyear:0 +#: selection:account.fiscalyear,state:0 +#: selection:account.invoice,state:0 +#: selection:account.invoice.report,state:0 +#: view:account.open.closed.fiscalyear:0 +#: selection:account.period,state:0 +#: code:addons/account/wizard/account_move_journal.py:106 +#: selection:report.invoice.created,state:0 +#, python-format +msgid "Open" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_draftinvoices0 +#: model:process.node,note:account.process_node_supplierdraftinvoices0 +msgid "Draft state of an invoice" +msgstr "" + +#. module: account +#: view:account.partner.reconcile.process:0 +msgid "Partner Reconciliation" +msgstr "" + +#. module: account +#: field:account.tax,tax_code_id:0 +#: view:account.tax.code:0 +msgid "Account Tax Code" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:572 +#, python-format +msgid "" +"Can't find any account journal of %s type for this company.\n" +"\n" +"You can create one in the menu: \n" +"Configuration\\Financial Accounting\\Accounts\\Journals." +msgstr "" + +#. module: account +#: model:account.payment.term,name:account.account_payment_term_advance +#: model:account.payment.term,note:account.account_payment_term_advance +msgid "30% Advance End 30 Days" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Unreconciled entries" +msgstr "" + +#. module: account +#: field:account.invoice.tax,base_code_id:0 +#: field:account.tax.template,base_code_id:0 +msgid "Base Code" +msgstr "" + +#. module: account +#: help:account.invoice.tax,sequence:0 +msgid "Gives the sequence order when displaying a list of invoice tax." +msgstr "" + +#. module: account +#: field:account.tax,base_sign:0 +#: field:account.tax,ref_base_sign:0 +#: field:account.tax.template,base_sign:0 +#: field:account.tax.template,ref_base_sign:0 +msgid "Base Code Sign" +msgstr "" + +#. module: account +#: view:account.vat.declaration:0 +msgid "" +"This menu prints a VAT declaration based on invoices or payments. Select one " +"or several periods of the fiscal year. The information required for a tax " +"declaration is automatically generated by OpenERP from invoices (or " +"payments, in some countries). This data is updated in real time. That’s very " +"useful because it enables you to preview at any time the tax that you owe at " +"the start and end of the month or quarter." +msgstr "" + +#. module: account +#: selection:account.move.line,centralisation:0 +msgid "Debit Centralisation" +msgstr "" + +#. module: account +#: view:account.invoice.confirm:0 +#: model:ir.actions.act_window,name:account.action_account_invoice_confirm +msgid "Confirm Draft Invoices" +msgstr "" + +#. module: account +#: field:account.entries.report,day:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,day:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,day:0 +msgid "Day" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.act_account_renew_view +msgid "Accounts to Renew" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_model_line +msgid "Account Model Entries" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3117 +#, python-format +msgid "EXJ" +msgstr "" + +#. module: account +#: field:product.template,supplier_taxes_id:0 +msgid "Supplier Taxes" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "entries" +msgstr "" + +#. module: account +#: help:account.invoice,date_due:0 +#: help:account.invoice,payment_term:0 +msgid "" +"If you use payment terms, the due date will be computed automatically at the " +"generation of accounting entries. If you keep the payment term and the due " +"date empty, it means direct payment. The payment term may compute several " +"due dates, for example 50% now, 50% in one month." +msgstr "" + +#. module: account +#: view:account.analytic.cost.ledger.journal.report:0 +msgid "Select period" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_pp_statements +msgid "Statements" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +msgid "Move Name" +msgstr "" + +#. module: account +#: help:res.partner,property_account_position:0 +msgid "" +"The fiscal position will determine taxes and the accounts used for the " +"partner." +msgstr "" + +#. module: account +#: view:account.print.journal:0 +msgid "" +"This report gives you an overview of the situation of a specific journal" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_line_reconcile_writeoff +msgid "Account move line reconcile (writeoff)" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.account_type_tax +#: report:account.invoice:0 +#: field:account.invoice,amount_tax:0 +#: field:account.move.line,account_tax_id:0 +msgid "Tax" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: field:account.bank.statement.line,analytic_account_id:0 +#: field:account.entries.report,analytic_account_id:0 +#: field:account.invoice.line,account_analytic_id:0 +#: field:account.model.line,analytic_account_id:0 +#: field:account.move.line,analytic_account_id:0 +#: field:account.move.line.reconcile.writeoff,analytic_id:0 +msgid "Analytic Account" +msgstr "" + +#. module: account +#: view:account.account:0 +#: field:account.financial.report,account_ids:0 +#: selection:account.financial.report,type:0 +#: view:account.journal:0 +#: model:ir.actions.act_window,name:account.action_account_form +#: model:ir.ui.menu,name:account.account_account_menu +#: model:ir.ui.menu,name:account.account_template_accounts +#: model:ir.ui.menu,name:account.menu_action_account_form +#: model:ir.ui.menu,name:account.menu_analytic +msgid "Accounts" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:369 +#, python-format +msgid "Configuration Error!" +msgstr "" + +#. module: account +#: field:account.invoice.report,price_average:0 +msgid "Average Price" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Date:" +msgstr "" + +#. module: account +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +msgid "Label" +msgstr "" + +#. module: account +#: view:account.tax:0 +#: view:res.partner.bank:0 +msgid "Accounting Information" +msgstr "" + +#. module: account +#: view:account.tax:0 +#: view:account.tax.template:0 +msgid "Special Computation" +msgstr "" + +#. module: account +#: view:account.move.bank.reconcile:0 +#: model:ir.actions.act_window,name:account.action_account_bank_reconcile_tree +msgid "Bank reconciliation" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Disc.(%)" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.overdue:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Ref" +msgstr "" + +#. module: account +#: help:account.move.line,tax_code_id:0 +msgid "The Account can either be a base tax code or a tax code account." +msgstr "" + +#. module: account +#: sql_constraint:account.model.line:0 +msgid "Wrong credit or debit value in model, they must be positive!" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_automatic_reconcile +msgid "Automatic Reconciliation" +msgstr "" + +#. module: account +#: field:account.invoice,reconciled:0 +msgid "Paid/Reconciled" +msgstr "" + +#. module: account +#: field:account.tax,ref_base_code_id:0 +#: field:account.tax.template,ref_base_code_id:0 +msgid "Refund Base Code" +msgstr "Código base reintegro" + +#. module: account +#: selection:account.tax.template,applicable_type:0 +msgid "True" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: view:account.common.report:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: view:accounting.report:0 +msgid "Dates" +msgstr "" + +#. module: account +#: field:account.chart.template,parent_id:0 +msgid "Parent Chart Template" +msgstr "" + +#. module: account +#: field:account.tax,parent_id:0 +#: field:account.tax.template,parent_id:0 +msgid "Parent Tax Account" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_change_currency.py:59 +#, python-format +msgid "New currency is not configured properly !" +msgstr "" + +#. module: account +#: view:account.subscription.generate:0 +msgid "" +"Automatically generate entries based on what has been entered in the system " +"before a specific date." +msgstr "" + +#. module: account +#: view:account.aged.trial.balance:0 +#: model:ir.actions.act_window,name:account.action_account_aged_balance_view +#: model:ir.ui.menu,name:account.menu_aged_trial_balance +msgid "Aged Partner Balance" +msgstr "" + +#. module: account +#: model:process.transition,name:account.process_transition_entriesreconcile0 +#: model:process.transition,name:account.process_transition_supplierentriesreconcile0 +msgid "Accounting entries" +msgstr "" + +#. module: account +#: field:account.invoice,reference_type:0 +msgid "Communication Type" +msgstr "" + +#. module: account +#: field:account.invoice.line,discount:0 +msgid "Discount (%)" +msgstr "" + +#. module: account +#: help:account.journal,entry_posted:0 +msgid "" +"Check this box if you don't want new journal entries to pass through the " +"'draft' state and instead goes directly to the 'posted state' without any " +"manual validation. \n" +"Note that journal entries that are automatically created by the system are " +"always skipping that state." +msgstr "" + +#. module: account +#: model:ir.actions.server,name:account.ir_actions_server_action_wizard_multi_chart +#: model:ir.ui.menu,name:account.menu_act_ir_actions_bleble +msgid "New Company Financial Setting" +msgstr "" + +#. module: account +#: view:account.installer:0 +msgid "Configure Your Chart of Accounts" +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "This wizard will create recurring accounting entries" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1321 +#, python-format +msgid "No sequence defined on the journal !" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2268 +#: code:addons/account/account_invoice.py:688 +#: code:addons/account/account_move_line.py:173 +#, python-format +msgid "You have to define an analytic journal on the '%s' journal!" +msgstr "" + +#. module: account +#: code:addons/account/account.py:407 +#, python-format +msgid "" +"You need an Opening journal with centralisation checked to set the initial " +"balance!" +msgstr "" + +#. module: account +#: view:account.invoice.tax:0 +#: model:ir.actions.act_window,name:account.action_tax_code_list +#: model:ir.ui.menu,name:account.menu_action_tax_code_list +msgid "Tax Codes" +msgstr "" + +#. module: account +#: view:account.account:0 +msgid "Unrealized Gains and losses" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_customer +#: model:ir.ui.menu,name:account.menu_finance_receivables +msgid "Customers" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.journal:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "Period to" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "August" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_paymentreconcile0 +msgid "Payment entries are the second input of the reconciliation." +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "October" +msgstr "" + +#. module: account +#: help:account.move.line,quantity:0 +msgid "" +"The optional quantity expressed by this line, eg: number of product sold. " +"The quantity is not a legal requirement but is very useful for some reports." +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid "Line 2:" +msgstr "" + +#. module: account +#: field:account.journal.column,required:0 +msgid "Required" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +#: field:product.category,property_account_expense_categ:0 +#: field:product.template,property_account_expense:0 +msgid "Expense Account" +msgstr "" + +#. module: account +#: help:account.invoice,period_id:0 +msgid "Keep empty to use the period of the validation(invoice) date." +msgstr "" + +#. module: account +#: help:account.bank.statement,account_id:0 +msgid "" +"used in statement reconciliation domain, but shouldn't be used elswhere." +msgstr "" + +#. module: account +#: field:account.invoice.tax,base_amount:0 +msgid "Base Code Amount" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:392 +#, python-format +msgid "" +"You can not delete an invoice which is open or paid. We suggest you to " +"refund it instead." +msgstr "" +"No puede borrar una factura que está abierta o pagada. Le sugerimos que cree " +"una Nota de Crédito en su lugar." + +#. module: account +#: field:wizard.multi.charts.accounts,sale_tax:0 +msgid "Default Sale Tax" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1013 +#, python-format +msgid "Invoice '%s' is validated." +msgstr "" + +#. module: account +#: help:account.model.line,date_maturity:0 +msgid "" +"The maturity date of the generated entries for this model. You can choose " +"between the creation date or the creation date of the entries plus the " +"partner payment terms." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_accounting +msgid "Financial Accounting" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_report_pl +msgid "Profit And Loss" +msgstr "" + +#. module: account +#: view:account.fiscal.position:0 +#: field:account.fiscal.position,name:0 +#: field:account.fiscal.position.account,position_id:0 +#: field:account.fiscal.position.tax,position_id:0 +#: field:account.fiscal.position.tax.template,position_id:0 +#: view:account.fiscal.position.template:0 +#: field:account.invoice,fiscal_position:0 +#: field:account.invoice.report,fiscal_position:0 +#: model:ir.model,name:account.model_account_fiscal_position +#: field:res.partner,property_account_position:0 +msgid "Fiscal Position" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:735 +#, python-format +msgid "" +"Tax base different!\n" +"Click on compute to update the tax base." +msgstr "" + +#. module: account +#: field:account.partner.ledger,page_split:0 +msgid "One Partner Per Page" +msgstr "" + +#. module: account +#: field:account.account,child_parent_ids:0 +#: field:account.account.template,child_parent_ids:0 +msgid "Children" +msgstr "" + +#. module: account +#: selection:account.invoice,type:0 +#: selection:account.invoice.report,type:0 +#: model:process.process,name:account.process_process_invoiceprocess0 +#: selection:report.invoice.created,type:0 +msgid "Customer Invoice" +msgstr "" + +#. module: account +#: help:account.tax.template,include_base_amount:0 +msgid "" +"Set if the amount of tax must be included in the base amount before " +"computing the next taxes." +msgstr "" + +#. module: account +#: help:account.journal,user_id:0 +msgid "The user responsible for this journal" +msgstr "" + +#. module: account +#: view:account.period:0 +msgid "Search Period" +msgstr "" + +#. module: account +#: view:account.change.currency:0 +msgid "Invoice Currency" +msgstr "" + +#. module: account +#: field:accounting.report,account_report_id:0 +#: model:ir.ui.menu,name:account.menu_account_financial_reports_tree +msgid "Account Reports" +msgstr "" + +#. module: account +#: field:account.payment.term,line_ids:0 +msgid "Terms" +msgstr "" + +#. module: account +#: field:account.bank.statement,total_entry_encoding:0 +msgid "Cash Transaction" +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "Bank account" +msgstr "" + +#. module: account +#: field:account.chart.template,tax_template_ids:0 +msgid "Tax Template List" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_print_sale_purchase_journal +msgid "Sale/Purchase Journals" +msgstr "" + +#. module: account +#: help:account.account,currency_mode:0 +msgid "" +"This will select how the current currency rate for outgoing transactions is " +"computed. In most countries the legal method is \"average\" but only a few " +"software systems are able to manage this. So if you import from another " +"software system you may have to use the rate at date. Incoming transactions " +"always use the rate at date." +msgstr "" +"Permite seleccionar la forma en que se calcula la tasa de la divisa actual " +"en las transacciones de salida. En la mayoría de los países el método legal " +"es \"Promedio\", pero sólo unos pocos sistemas de software son capaces de " +"gestionarlo. Por lo tanto, si la importación procede de otro sistema de " +"software, es posible que tenga que utilizar la tasa \"En fecha\". Las " +"transacciones de entrada siempre utilizan la tasa \"En fecha\"." + +#. module: account +#: help:account.chart.template,code_digits:0 +#: help:wizard.multi.charts.accounts,code_digits:0 +msgid "No. of Digits to use for account code" +msgstr "" + +#. module: account +#: field:account.payment.term.line,name:0 +msgid "Line Name" +msgstr "" + +#. module: account +#: view:account.fiscalyear:0 +msgid "Search Fiscalyear" +msgstr "" + +#. module: account +#: selection:account.tax,applicable_type:0 +msgid "Always" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: view:analytic.entries.report:0 +msgid "Month-1" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Total Quantity" +msgstr "" + +#. module: account +#: field:account.move.line.reconcile.writeoff,writeoff_acc_id:0 +msgid "Write-Off account" +msgstr "" + +#. module: account +#: field:account.model.line,model_id:0 +#: view:account.subscription:0 +#: field:account.subscription,model_id:0 +msgid "Model" +msgstr "" + +#. module: account +#: help:account.invoice.tax,base_code_id:0 +msgid "The account basis of the tax declaration." +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: selection:account.entries.report,type:0 +#: selection:account.financial.report,type:0 +msgid "View" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3363 +#: code:addons/account/account_bank.py:90 +#, python-format +msgid "BNK" +msgstr "" + +#. module: account +#: field:account.move.line,analytic_lines:0 +msgid "Analytic lines" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Proforma Invoices" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_electronicfile0 +msgid "Electronic File" +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "Customer Credit" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid " Day of the Month: 0" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Starts on" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_partner_ledger +msgid "Account Partner Ledger" +msgstr "" + +#. module: account +#: help:account.journal.column,sequence:0 +msgid "Gives the sequence order to journal column." +msgstr "" + +#. module: account +#: help:account.account,currency_id:0 +#: help:account.account.template,currency_id:0 +#: help:account.bank.accounts.wizard,currency_id:0 +msgid "Forces all moves for this account to have this secondary currency." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_validate_account_move_line +msgid "" +"This wizard will validate all journal entries of a particular journal and " +"period. Once journal entries are validated, you can not update them anymore." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_chart_template_form +#: model:ir.ui.menu,name:account.menu_action_account_chart_template_form +msgid "Chart of Accounts Templates" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_wizard_multi_chart +msgid "Set Your Accounting Options" +msgstr "" + +#. module: account +#: view:report.account.sales:0 +msgid "This months' Sales by type" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_unreconcile_reconcile +msgid "Account Unreconcile Reconcile" +msgstr "" + +#. module: account +#: sql_constraint:account.tax:0 +msgid "The description must be unique per company!" +msgstr "" + +#. module: account +#: help:account.account.type,close_method:0 +msgid "" +"Set here the method that will be used to generate the end of year journal " +"entries for all the accounts of this type.\n" +"\n" +" 'None' means that nothing will be done.\n" +" 'Balance' will generally be used for cash accounts.\n" +" 'Detail' will copy each existing journal item of the previous year, even " +"the reconciled ones.\n" +" 'Unreconciled' will copy only the journal items that were unreconciled on " +"the first day of the new fiscal year." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_open_closed_fiscalyear.py:39 +#, python-format +msgid "No End of year journal defined for the fiscal year" +msgstr "" + +#. module: account +#: view:account.tax:0 +#: view:account.tax.template:0 +msgid "Keep empty to use the expense account" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,journal_ids:0 +#: field:account.analytic.cost.ledger.journal.report,journal:0 +#: field:account.balance.report,journal_ids:0 +#: field:account.central.journal,journal_ids:0 +#: field:account.common.account.report,journal_ids:0 +#: field:account.common.journal.report,journal_ids:0 +#: field:account.common.partner.report,journal_ids:0 +#: view:account.common.report:0 +#: field:account.common.report,journal_ids:0 +#: report:account.general.journal:0 +#: field:account.general.journal,journal_ids:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: view:account.journal.period:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,journal_ids:0 +#: field:account.partner.ledger,journal_ids:0 +#: view:account.print.journal:0 +#: field:account.print.journal,journal_ids:0 +#: field:account.report.general.ledger,journal_ids:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.vat.declaration,journal_ids:0 +#: field:accounting.report,journal_ids:0 +#: model:ir.actions.act_window,name:account.action_account_journal_form +#: model:ir.actions.act_window,name:account.action_account_journal_period_tree +#: model:ir.ui.menu,name:account.menu_account_print_journal +#: model:ir.ui.menu,name:account.menu_action_account_journal_form +#: model:ir.ui.menu,name:account.menu_journals +#: model:ir.ui.menu,name:account.menu_journals_report +msgid "Journals" +msgstr "" + +#. module: account +#: field:account.partner.reconcile.process,to_reconcile:0 +msgid "Remaining Partners" +msgstr "" + +#. module: account +#: view:account.subscription:0 +#: field:account.subscription,lines_id:0 +msgid "Subscription Lines" +msgstr "" + +#. module: account +#: selection:account.analytic.journal,type:0 +#: view:account.journal:0 +#: selection:account.journal,type:0 +#: view:account.model:0 +#: selection:account.tax,type_tax_use:0 +#: view:account.tax.template:0 +#: selection:account.tax.template,type_tax_use:0 +msgid "Purchase" +msgstr "" + +#. module: account +#: view:account.installer:0 +#: view:wizard.multi.charts.accounts:0 +msgid "Accounting Application Configuration" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid " Value amount: 0.02" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.open_board_account +#: model:ir.ui.menu,name:account.menu_board_account +msgid "Accounting Dashboard" +msgstr "" + +#. module: account +#: field:account.bank.statement,balance_start:0 +#: field:account.treasury.report,starting_balance:0 +msgid "Starting Balance" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1332 +#, python-format +msgid "No Partner Defined !" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_period_close +#: model:ir.actions.act_window,name:account.action_account_period_tree +#: model:ir.ui.menu,name:account.menu_action_account_period_close_tree +msgid "Close a Period" +msgstr "" + +#. module: account +#: field:account.financial.report,display_detail:0 +msgid "Display details" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "VAT:" +msgstr "" + +#. module: account +#: constraint:account.invoice:0 +msgid "Invalid BBA Structured Communication !" +msgstr "" + +#. module: account +#: help:account.analytic.line,amount_currency:0 +msgid "" +"The amount expressed in the related account currency if not equal to the " +"company one." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_unreconcile +#: model:ir.actions.act_window,name:account.action_account_unreconcile_reconcile +#: model:ir.actions.act_window,name:account.action_account_unreconcile_select +msgid "Unreconcile Entries" +msgstr "" + +#. module: account +#: field:account.tax.code,notprintable:0 +#: field:account.tax.code.template,notprintable:0 +msgid "Not Printable in Invoice" +msgstr "" + +#. module: account +#: report:account.vat.declaration:0 +#: field:account.vat.declaration,chart_tax_id:0 +msgid "Chart of Tax" +msgstr "" + +#. module: account +#: code:addons/account/account_cash_statement.py:314 +#, python-format +msgid "The closing balance should be the same than the computed balance!" +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Search Account Journal" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_invoice_tree_pending_invoice +msgid "Pending Invoice" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: selection:account.subscription,period_type:0 +#: view:analytic.entries.report:0 +msgid "year" +msgstr "" + +#. module: account +#: view:product.product:0 +msgid "Purchase Taxes" +msgstr "" + +#. module: account +#: view:validate.account.move.lines:0 +msgid "" +"All selected journal entries will be validated and posted. It means you " +"won't be able to modify their accounting fields anymore." +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_transfers +msgid "Transfers" +msgstr "" + +#. module: account +#: view:account.chart:0 +msgid "Account charts" +msgstr "" + +#. module: account +#: report:account.vat.declaration:0 +msgid "Tax Amount" +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Search Move" +msgstr "" + +#. module: account +#: field:account.tax.code,name:0 +#: field:account.tax.code.template,name:0 +msgid "Tax Case Name" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: model:process.node,name:account.process_node_draftinvoices0 +msgid "Draft Invoice" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_invoice_state.py:68 +#, python-format +msgid "" +"Selected Invoice(s) cannot be cancelled as they are already in 'Cancelled' " +"or 'Done' state!" +msgstr "" + +#. module: account +#: view:account.invoice.line:0 +msgid "Quantity :" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,period_length:0 +msgid "Period Length (days)" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_print_sale_purchase_journal +msgid "Print Sale/Purchase Journal" +msgstr "" + +#. module: account +#: field:account.invoice.report,state:0 +msgid "Invoice State" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,categ_id:0 +msgid "Category of Product" +msgstr "" + +#. module: account +#: view:account.addtmpl.wizard:0 +#: model:ir.actions.act_window,name:account.action_account_addtmpl_wizard_form +msgid "Create Account" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_report_account_type_sales +msgid "Report of the Sales by Account Type" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Unreconciled Journal Items" +msgstr "" + +#. module: account +#: sql_constraint:res.currency:0 +msgid "The currency code must be unique per company!" +msgstr "" + +#. module: account +#: selection:account.account.type,close_method:0 +msgid "Detail" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:839 +#, python-format +msgid "" +"Can not create the invoice !\n" +"The 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." +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "VAT :" +msgstr "" + +#. module: account +#: report:account.central.journal:0 +#: report:account.general.ledger:0 +#: field:account.installer,charts:0 +#: report:account.partner.balance:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: model:ir.actions.act_window,name:account.action_account_chart +#: model:ir.actions.act_window,name:account.action_account_tree +#: model:ir.ui.menu,name:account.menu_action_account_tree2 +msgid "Chart of Accounts" +msgstr "" + +#. module: account +#: view:account.tax.chart:0 +msgid "(If you do not select period it will take all open periods)" +msgstr "" + +#. module: account +#: field:account.journal,centralisation:0 +msgid "Centralised counterpart" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:584 +#, python-format +msgid "You can not create journal items on a \"view\" account %s %s" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_partner_reconcile_process +msgid "Reconcilation Process partner by partner" +msgstr "" + +#. module: account +#: selection:account.automatic.reconcile,power:0 +msgid "2" +msgstr "" + +#. module: account +#: view:account.chart:0 +msgid "(If you do not select Fiscal year it will take all open fiscal years)" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,filter:0 +#: report:account.analytic.account.journal:0 +#: selection:account.balance.report,filter:0 +#: field:account.bank.statement,date:0 +#: selection:account.central.journal,filter:0 +#: selection:account.common.account.report,filter:0 +#: selection:account.common.journal.report,filter:0 +#: selection:account.common.partner.report,filter:0 +#: selection:account.common.report,filter:0 +#: view:account.entries.report:0 +#: field:account.entries.report,date:0 +#: selection:account.general.journal,filter:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: field:account.invoice.report,date:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: view:account.move:0 +#: field:account.move,date:0 +#: field:account.move.line.reconcile.writeoff,date_p:0 +#: report:account.overdue:0 +#: selection:account.partner.balance,filter:0 +#: selection:account.partner.ledger,filter:0 +#: selection:account.print.journal,filter:0 +#: selection:account.print.journal,sort_selection:0 +#: selection:account.report.general.ledger,filter:0 +#: selection:account.report.general.ledger,sortby:0 +#: field:account.subscription.generate,date:0 +#: field:account.subscription.line,date:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: selection:account.vat.declaration,filter:0 +#: selection:accounting.report,filter:0 +#: selection:accounting.report,filter_cmp:0 +#: field:analytic.entries.report,date:0 +msgid "Date" +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Post" +msgstr "" + +#. module: account +#: view:account.unreconcile:0 +#: view:account.unreconcile.reconcile:0 +msgid "Unreconcile" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: field:account.bank.statement,user_id:0 +#: view:account.journal:0 +#: field:account.journal,user_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,user_id:0 +msgid "User" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +msgid "Chart of Accounts Template" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2280 +#, python-format +msgid "" +"Maturity date of entry line generated by model line '%s' of model '%s' is " +"based on partner payment term!\n" +"Please define partner on it!" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:837 +#, python-format +msgid "Some entries are already reconciled !" +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Account Tax" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_reporting_budgets +msgid "Budgets" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,filter:0 +#: selection:account.balance.report,filter:0 +#: selection:account.central.journal,filter:0 +#: selection:account.common.account.report,filter:0 +#: selection:account.common.journal.report,filter:0 +#: selection:account.common.partner.report,filter:0 +#: selection:account.common.report,filter:0 +#: selection:account.general.journal,filter:0 +#: selection:account.partner.balance,filter:0 +#: selection:account.partner.ledger,filter:0 +#: selection:account.print.journal,filter:0 +#: selection:account.report.general.ledger,filter:0 +#: selection:account.vat.declaration,filter:0 +#: selection:accounting.report,filter:0 +#: selection:accounting.report,filter_cmp:0 +msgid "No Filters" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Pro-forma Invoices" +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "History" +msgstr "" + +#. module: account +#: help:account.tax,applicable_type:0 +#: help:account.tax.template,applicable_type:0 +msgid "" +"If not applicable (computed through a Python code), the tax won't appear on " +"the invoice." +msgstr "" + +#. module: account +#: view:account.tax:0 +#: view:account.tax.template:0 +msgid "Applicable Code (if type=code)" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,product_qty:0 +msgid "Qty" +msgstr "" + +#. module: account +#: field:account.invoice.report,address_contact_id:0 +msgid "Contact Address Name" +msgstr "" + +#. module: account +#: field:account.move.line,blocked:0 +msgid "Litigation" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Search Analytic Lines" +msgstr "" + +#. module: account +#: field:res.partner,property_account_payable:0 +msgid "Account Payable" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_supplierpaymentorder0 +msgid "Payment Order" +msgstr "" + +#. module: account +#: help:account.account.template,reconcile:0 +msgid "" +"Check this option if you want the user to reconcile entries in this account." +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_account_balance_landscape +msgid "Account balance" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: field:account.invoice.line,price_unit:0 +msgid "Unit Price" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_tree1 +msgid "Analytic Items" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1153 +#, python-format +msgid "Unable to change tax !" +msgstr "" + +#. module: account +#: field:analytic.entries.report,nbr:0 +msgid "#Entries" +msgstr "" + +#. module: account +#: selection:account.invoice.refund,filter_refund:0 +msgid "Create a draft Refund" +msgstr "Crear una devolución en borrador" + +#. module: account +#: view:account.state.open:0 +msgid "Open Invoice" +msgstr "" + +#. module: account +#: field:account.invoice.tax,factor_tax:0 +msgid "Multipication factor Tax code" +msgstr "" + +#. module: account +#: view:account.fiscal.position:0 +msgid "Mapping" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:921 +#, python-format +msgid "" +"You cannot create an invoice on a centralised journal. Uncheck the " +"centralised counterpart box in the related journal from the configuration " +"menu." +msgstr "" + +#. module: account +#: field:account.account,name:0 +#: field:account.account.template,name:0 +#: report:account.analytic.account.inverted.balance:0 +#: field:account.bank.statement,name:0 +#: field:account.chart.template,name:0 +#: field:account.model.line,name:0 +#: field:account.move.line,name:0 +#: field:account.move.reconcile,name:0 +#: field:account.subscription,name:0 +msgid "Name" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_aged_trial_balance +msgid "Account Aged Trial balance Report" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:591 +#, python-format +msgid "You can not create journal items on a closed account %s %s" +msgstr "" + +#. module: account +#: field:account.move.line,date:0 +msgid "Effective date" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_bank_tree +#: model:ir.ui.menu,name:account.menu_action_bank_tree +msgid "Setup your Bank Accounts" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_move_bank_reconcile.py:53 +#, python-format +msgid "Standard Encoding" +msgstr "" + +#. module: account +#: help:account.journal,analytic_journal_id:0 +msgid "Journal for analytic entries" +msgstr "" + +#. module: account +#: constraint:account.aged.trial.balance:0 +#: constraint:account.balance.report:0 +#: constraint:account.central.journal:0 +#: constraint:account.common.account.report:0 +#: constraint:account.common.journal.report:0 +#: constraint:account.common.partner.report:0 +#: constraint:account.common.report:0 +#: constraint:account.general.journal:0 +#: constraint:account.partner.balance:0 +#: constraint:account.partner.ledger:0 +#: constraint:account.print.journal:0 +#: constraint:account.report.general.ledger:0 +#: constraint:account.vat.declaration:0 +#: constraint:accounting.report:0 +msgid "" +"The fiscalyear, periods or chart of account chosen have to belong to the " +"same company." +msgstr "" + +#. module: account +#: model:ir.actions.todo.category,name:account.category_accounting_configuration +#: model:ir.ui.menu,name:account.menu_finance +#: model:process.node,name:account.process_node_accountingentries0 +#: model:process.node,name:account.process_node_supplieraccountingentries0 +#: view:product.product:0 +#: view:product.template:0 +#: view:res.partner:0 +msgid "Accounting" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Journal Entries with period in current year" +msgstr "" + +#. module: account +#: help:account.central.journal,amount_currency:0 +#: help:account.common.journal.report,amount_currency:0 +#: help:account.general.journal,amount_currency:0 +#: help:account.print.journal,amount_currency:0 +msgid "" +"Print Report with the currency column if the currency is different then the " +"company currency" +msgstr "" + +#. module: account +#: help:account.account,unrealized_gain_loss:0 +msgid "" +"Value of Loss or Gain due to changes in exchange rate when doing multi-" +"currency transactions." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "General Accounting" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Balance :" +msgstr "" + +#. module: account +#: help:account.fiscalyear.close,journal_id:0 +msgid "" +"The best practice here is to use a journal dedicated to contain the opening " +"entries of all fiscal years. Note that you should define it with default " +"debit/credit accounts, of type 'situation' and with a centralized " +"counterpart." +msgstr "" + +#. module: account +#: view:account.installer:0 +#: view:wizard.multi.charts.accounts:0 +msgid "title" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:account.period:0 +#: view:account.subscription:0 +msgid "Set to Draft" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_subscription_form +msgid "Recurring Lines" +msgstr "" + +#. module: account +#: field:account.partner.balance,display_partner:0 +msgid "Display Partners" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Validate" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +#: model:ir.actions.act_window,name:account.action_account_analytic_cost +#: model:ir.actions.report.xml,name:account.account_analytic_account_cost_ledger +msgid "Cost Ledger" +msgstr "" + +#. module: account +#: model:account.financial.report,name:account.account_financial_report_assets0 +msgid "Assets" +msgstr "" + +#. module: account +#: view:account.invoice.confirm:0 +msgid "Confirm Invoices" +msgstr "" + +#. module: account +#: selection:account.account,currency_mode:0 +msgid "Average Rate" +msgstr "" + +#. module: account +#: field:account.balance.report,display_account:0 +#: field:account.common.account.report,display_account:0 +#: field:account.report.general.ledger,display_account:0 +msgid "Display Accounts" +msgstr "" + +#. module: account +#: view:account.state.open:0 +msgid "(Invoice should be unreconciled if you want to open it)" +msgstr "" + +#. module: account +#: field:account.chart,period_from:0 +msgid "Start period" +msgstr "" + +#. module: account +#: field:account.tax,name:0 +#: field:account.tax.template,name:0 +#: report:account.vat.declaration:0 +msgid "Tax Name" +msgstr "" + +#. module: account +#: model:account.payment.term,name:account.account_payment_term +#: model:account.payment.term,note:account.account_payment_term +msgid "30 Days End of Month" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_balance +#: model:ir.actions.report.xml,name:account.account_analytic_account_balance +msgid "Analytic Balance" +msgstr "" + +#. module: account +#: help:account.account,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the account " +"without removing it." +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Posted Journal Items" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Search Tax Templates" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.periodical_processing_journal_entries_validation +msgid "Draft Entries" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid " Day of the Month= -1" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid " Number of Days: 30" +msgstr "" + +#. module: account +#: field:account.account,shortcut:0 +#: field:account.account.template,shortcut:0 +msgid "Shortcut" +msgstr "" + +#. module: account +#: constraint:account.fiscalyear:0 +msgid "Error! The start date of the fiscal year must be before his end date." +msgstr "" + +#. module: account +#: view:account.account:0 +#: field:account.account,user_type:0 +#: view:account.account.template:0 +#: field:account.account.template,user_type:0 +#: view:account.account.type:0 +#: field:account.account.type,name:0 +#: field:account.bank.accounts.wizard,account_type:0 +#: field:account.entries.report,user_type:0 +#: selection:account.financial.report,type:0 +#: model:ir.model,name:account.model_account_account_type +#: field:report.account.receivable,type:0 +#: field:report.account_type.sales,user_type:0 +msgid "Account Type" +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "Bank Account Owner" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: view:account.balance.report:0 +#: model:ir.actions.act_window,name:account.action_account_balance_menu +#: model:ir.actions.report.xml,name:account.account_account_balance +#: model:ir.ui.menu,name:account.menu_general_Balance_report +msgid "Trial Balance" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_invoice_cancel +msgid "Cancel the Selected Invoices" +msgstr "" + +#. module: account +#: help:product.category,property_account_income_categ:0 +#: help:product.template,property_account_income:0 +msgid "" +"This account will be used to value outgoing stock for the current product " +"category using sale price" +msgstr "" + +#. module: account +#: selection:account.automatic.reconcile,power:0 +msgid "3" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:97 +#, python-format +msgid "" +"You haven't supplied enough argument to compute the initial balance, please " +"select a period and journal in the context." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_supplieranalyticcost0 +msgid "" +"Analytic costs (timesheets, some purchased products, ...) come from analytic " +"accounts. These generate draft supplier invoices." +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Close CashBox" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,due_delay:0 +msgid "Avg. Due Delay" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Acc.Type" +msgstr "" + +#. module: account +#: field:account.entries.report,month:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,month:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,month:0 +#: field:report.account.sales,month:0 +#: field:report.account_type.sales,month:0 +msgid "Month" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1216 +#, python-format +msgid "" +"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" +msgstr "" + +#. module: account +#: field:res.company,paypal_account:0 +msgid "Paypal Account" +msgstr "" + +#. module: account +#: field:account.invoice.report,uom_name:0 +msgid "Reference UoM" +msgstr "" + +#. module: account +#: field:account.account,note:0 +#: field:account.account.template,note:0 +msgid "Note" +msgstr "" + +#. module: account +#: selection:account.financial.report,sign:0 +msgid "Reverse balance sign" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Overdue Account" +msgstr "" + +#. module: account +#: selection:account.account.type,report_type:0 +#: code:addons/account/account.py:184 +#, python-format +msgid "Balance Sheet (Liability account)" +msgstr "" + +#. module: account +#: help:account.invoice,date_invoice:0 +msgid "Keep empty to use the current date" +msgstr "" + +#. module: account +#: field:account.invoice,tax_line:0 +msgid "Tax Lines" +msgstr "" + +#. module: account +#: field:account.tax,base_code_id:0 +msgid "Account Base Code" +msgstr "" + +#. module: account +#: code:addons/account/account_analytic_line.py:93 +#, python-format +msgid "There is no expense account defined for this product: \"%s\" (id:%d)" +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "Customer Accounting Properties" +msgstr "" + +#. module: account +#: help:res.company,paypal_account:0 +msgid "Paypal username (usually email) for receiving online payments." +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,target_move:0 +#: selection:account.balance.report,target_move:0 +#: selection:account.central.journal,target_move:0 +#: selection:account.chart,target_move:0 +#: selection:account.common.account.report,target_move:0 +#: selection:account.common.journal.report,target_move:0 +#: selection:account.common.partner.report,target_move:0 +#: selection:account.common.report,target_move:0 +#: selection:account.general.journal,target_move:0 +#: selection:account.move.journal,target_move:0 +#: selection:account.partner.balance,target_move:0 +#: selection:account.partner.ledger,target_move:0 +#: selection:account.print.journal,target_move:0 +#: selection:account.report.general.ledger,target_move:0 +#: selection:account.tax.chart,target_move:0 +#: selection:account.vat.declaration,target_move:0 +#: selection:accounting.report,target_move:0 +#: code:addons/account/report/common_report_header.py:68 +#, python-format +msgid "All Posted Entries" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:367 +#, python-format +msgid "Statement %s is confirmed, journal items are created." +msgstr "" + +#. module: account +#: field:report.aged.receivable,name:0 +msgid "Month Range" +msgstr "" + +#. module: account +#: help:account.analytic.balance,empty_acc:0 +msgid "Check if you want to display Accounts with 0 balance too." +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Compute Code" +msgstr "" + +#. module: account +#: view:account.account.template:0 +msgid "Default taxes" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_fiscalyear_close.py:41 +#, python-format +msgid "End of Fiscal Year Entry" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_periodical_processing +msgid "Periodical Processing" +msgstr "" + +#. module: account +#: constraint:account.analytic.line:0 +msgid "You can not create analytic line on view account." +msgstr "" + +#. module: account +#: help:account.move.line,state:0 +msgid "" +"When new move line is created the state will be 'Draft'.\n" +"* When all the payments are done it will be in 'Valid' state." +msgstr "" + +#. module: account +#: field:account.journal,view_id:0 +msgid "Display Mode" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_importinvoice0 +msgid "Statement from invoice or payment" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_chart +msgid "Account chart" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Main Title 1 (bold, underlined)" +msgstr "" + +#. module: account +#: report:account.analytic.account.balance:0 +#: report:account.central.journal:0 +msgid "Account Name" +msgstr "" + +#. module: account +#: help:account.fiscalyear.close,report_name:0 +msgid "Give name of the new entries" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_invoice_report +msgid "Invoices Statistics" +msgstr "" + +#. module: account +#: field:account.account,exchange_rate:0 +msgid "Exchange Rate" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_paymentorderreconcilation0 +msgid "Bank statements are entered in the system." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_reconcile.py:133 +#, python-format +msgid "Reconcile Writeoff" +msgstr "" + +#. module: account +#: view:report.account.receivable:0 +msgid "Accounts by Type" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.bank.statement,balance_end_cash:0 +msgid "Closing Balance" +msgstr "" + +#. module: account +#: code:addons/account/report/common_report_header.py:92 +#, python-format +msgid "Not implemented" +msgstr "" + +#. module: account +#: field:account.chart.template,visible:0 +msgid "Can be Visible?" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_journal_select +msgid "Account Journal Select" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Credit Notes" +msgstr "" + +#. module: account +#: sql_constraint:account.period:0 +msgid "The name of the period must be unique per company!" +msgstr "" + +#. module: account +#: view:wizard.multi.charts.accounts:0 +msgid "res_config_contents" +msgstr "" + +#. module: account +#: view:account.unreconcile:0 +msgid "Unreconciliate Transactions" +msgstr "" + +#. module: account +#: help:account.chart.template,visible:0 +msgid "" +"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." +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "Create Entries From Models" +msgstr "" + +#. module: account +#: field:account.account,reconcile:0 +#: field:account.account.template,reconcile:0 +msgid "Allow Reconciliation" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1077 +#, python-format +msgid "" +"You can not modify company of this period as some journal items exists." +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Analytic Account Statistics" +msgstr "" + +#. module: account +#: report:account.vat.declaration:0 +msgid "Based On" +msgstr "" + +#. module: account +#: field:account.tax,price_include:0 +#: field:account.tax.template,price_include:0 +msgid "Tax Included in Price" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_cost_ledger_journal_report +msgid "Account Analytic Cost Ledger For Journal Report" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_model_form +#: model:ir.ui.menu,name:account.menu_action_model_form +msgid "Recurring Models" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1251 +#, python-format +msgid "Encoding error" +msgstr "" + +#. module: account +#: selection:account.automatic.reconcile,power:0 +msgid "4" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Change" +msgstr "" + +#. module: account +#: selection:account.journal,type:0 +msgid "Bank and Cheques" +msgstr "" + +#. module: account +#: field:account.journal,type_control_ids:0 +msgid "Type Controls" +msgstr "" + +#. module: account +#: help:account.journal,default_credit_account_id:0 +msgid "It acts as a default account for credit amount" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_validate_account_move_line +#: model:ir.ui.menu,name:account.menu_validate_account_moves +#: view:validate.account.move:0 +#: view:validate.account.move.lines:0 +msgid "Post Journal Entries" +msgstr "" + +#. module: account +#: selection:account.invoice,state:0 +#: selection:account.invoice.report,state:0 +#: selection:report.invoice.created,state:0 +msgid "Cancelled" +msgstr "" + +#. module: account +#: help:account.bank.statement,balance_end_cash:0 +msgid "Closing balance based on cashBox" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid "Example" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:828 +#, python-format +msgid "" +"Please verify the price of the invoice !\n" +"The real total does not match the computed total." +msgstr "" + +#. module: account +#: view:account.tax:0 +#: view:account.tax.template:0 +msgid "Keep empty to use the income account" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3299 +#, python-format +msgid "Purchase Tax %.2f%%" +msgstr "" + +#. module: account +#: view:account.subscription.generate:0 +#: model:ir.actions.act_window,name:account.action_account_subscription_generate +#: model:ir.ui.menu,name:account.menu_generate_subscription +msgid "Generate Entries" +msgstr "" + +#. module: account +#: help:account.vat.declaration,chart_tax_id:0 +msgid "Select Charts of Taxes" +msgstr "" + +#. module: account +#: view:account.fiscal.position:0 +#: field:account.fiscal.position,account_ids:0 +#: field:account.fiscal.position.template,account_ids:0 +msgid "Account Mapping" +msgstr "" + +#. module: account +#: selection:account.bank.statement.line,type:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: code:addons/account/account_invoice.py:337 +#, python-format +msgid "Customer" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Confirmed" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Cancelled Invoice" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1567 +#, python-format +msgid "" +"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." +msgstr "" + +#. module: account +#: selection:account.bank.statement,state:0 +msgid "New" +msgstr "" + +#. module: account +#: field:account.invoice.refund,date:0 +msgid "Operation date" +msgstr "" + +#. module: account +#: view:account.unreconcile.reconcile:0 +msgid "Unreconciliation Transactions" +msgstr "" + +#. module: account +#: field:account.tax,ref_tax_code_id:0 +#: field:account.tax.template,ref_tax_code_id:0 +msgid "Refund Tax Code" +msgstr "Código impuesto reintegro" + +#. module: account +#: view:validate.account.move:0 +msgid "" +"All draft account entries in this journal and period will be validated. It " +"means you won't be able to modify their accounting fields anymore." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_configuration +msgid "Configuration" +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,date1:0 +msgid "Starting Date" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_income:0 +msgid "Income Account on Product Template" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3120 +#, python-format +msgid "MISC" +msgstr "" + +#. module: account +#: model:email.template,subject:account.email_template_edi_invoice +msgid "${object.company_id.name} Invoice (Ref ${object.number or 'n/a' })" +msgstr "" + +#. module: account +#: help:res.partner,last_reconciliation_date:0 +msgid "" +"Date on which the partner accounting entries were reconciled last time" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close,fy2_id:0 +msgid "New Fiscal Year" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:account.tax.template:0 +#: selection:account.vat.declaration,based_on:0 +#: model:ir.actions.act_window,name:account.act_res_partner_2_account_invoice_opened +#: model:ir.actions.act_window,name:account.action_invoice_tree +#: model:ir.actions.report.xml,name:account.account_invoices +#: view:report.invoice.created:0 +#: field:res.partner,invoice_ids:0 +msgid "Invoices" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "My invoices" +msgstr "" + +#. module: account +#: selection:account.bank.accounts.wizard,account_type:0 +msgid "Check" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: field:account.invoice,user_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,user_id:0 +msgid "Salesman" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Invoiced" +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Posted Journal Entries" +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "Use Model" +msgstr "" + +#. module: account +#: help:account.invoice,partner_bank_id:0 +msgid "" +"Bank Account Number to which the invoice will be paid. A Company bank " +"account if this is a Customer Invoice or Supplier Refund, otherwise a " +"Partner bank account number." +msgstr "" +"Numero de cuenta bancaria contra el que será pagada la factura. Una cuenta " +"bancaria de la compañía si esta es una factura de cliente o devolución de " +"proveedor, en otro caso una cuenta bancaria del cliente/proveedor." + +#. module: account +#: view:account.state.open:0 +msgid "No" +msgstr "" + +#. module: account +#: help:account.invoice.tax,tax_code_id:0 +msgid "The tax basis of the tax declaration." +msgstr "" + +#. module: account +#: view:account.addtmpl.wizard:0 +msgid "Add" +msgstr "" + +#. module: account +#: selection:account.invoice,state:0 +#: report:account.overdue:0 +msgid "Paid" +msgstr "" + +#. module: account +#: view:account.period.close:0 +msgid "Are you sure?" +msgstr "" + +#. module: account +#: help:account.move.line,statement_id:0 +msgid "The bank statement used for bank reconciliation" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_suppliercustomerinvoice0 +msgid "Draft invoices are validated. " +msgstr "" + +#. module: account +#: constraint:account.account.template:0 +msgid "" +"Configuration Error!\n" +"You can not define children to an account with internal type different of " +"\"View\"! " +msgstr "" + +#. module: account +#: code:addons/account/account.py:923 +#, python-format +msgid "Opening Period" +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Journal Entries to Review" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: view:account.subscription:0 +msgid "Compute" +msgstr "" + +#. module: account +#: field:account.tax,type_tax_use:0 +msgid "Tax Application" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +#: code:addons/account/wizard/account_move_journal.py:153 +#: model:ir.actions.act_window,name:account.act_account_journal_2_account_move_line +#: model:ir.actions.act_window,name:account.act_account_move_to_account_move_line_open +#: model:ir.actions.act_window,name:account.act_account_partner_account_move +#: model:ir.actions.act_window,name:account.action_account_manual_reconcile +#: model:ir.actions.act_window,name:account.action_account_moves_all_a +#: model:ir.actions.act_window,name:account.action_account_moves_bank +#: model:ir.actions.act_window,name:account.action_account_moves_purchase +#: model:ir.actions.act_window,name:account.action_account_moves_sale +#: model:ir.actions.act_window,name:account.action_move_line_search +#: model:ir.actions.act_window,name:account.action_move_line_select +#: model:ir.actions.act_window,name:account.action_move_line_tree1 +#: model:ir.actions.act_window,name:account.action_tax_code_line_open +#: model:ir.model,name:account.model_account_move_line +#: model:ir.ui.menu,name:account.menu_action_account_moves_all +#: model:ir.ui.menu,name:account.menu_action_account_moves_bank +#: model:ir.ui.menu,name:account.menu_eaction_account_moves_purchase +#: model:ir.ui.menu,name:account.menu_eaction_account_moves_sale +#, python-format +msgid "Journal Items" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1088 +#: code:addons/account/account.py:1090 +#: code:addons/account/account.py:1321 +#: code:addons/account/account.py:1563 +#: code:addons/account/account.py:1567 +#: code:addons/account/account.py:3368 +#: code:addons/account/account_move_line.py:807 +#: code:addons/account/account_move_line.py:830 +#: code:addons/account/account_move_line.py:832 +#: code:addons/account/account_move_line.py:835 +#: code:addons/account/account_move_line.py:837 +#: code:addons/account/report/common_report_header.py:92 +#: code:addons/account/wizard/account_change_currency.py:38 +#: code:addons/account/wizard/account_change_currency.py:59 +#: code:addons/account/wizard/account_change_currency.py:64 +#: code:addons/account/wizard/account_change_currency.py:70 +#: code:addons/account/wizard/account_financial_report.py:69 +#: code:addons/account/wizard/account_move_bank_reconcile.py:49 +#: code:addons/account/wizard/account_report_common.py:144 +#: code:addons/account/wizard/account_report_common.py:150 +#, python-format +msgid "Error" +msgstr "" + +#. module: account +#: field:account.analytic.balance,date2:0 +#: field:account.analytic.cost.ledger,date2:0 +#: field:account.analytic.cost.ledger.journal.report,date2:0 +#: field:account.analytic.inverted.balance,date2:0 +#: field:account.analytic.journal.report,date2:0 +msgid "End of period" +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "Bank Details" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_partner_balance +msgid "" +"This report is analysis by partner. It is a PDF report containing one line " +"per partner representing the cumulative credit balance." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_analytic_journal_tree +msgid "" +"To print an analytics (or costs) journal for a given period. The report give " +"code, move name, account number, general amount and analytic amount." +msgstr "" + +#. module: account +#: sql_constraint:account.invoice:0 +msgid "Invoice Number must be unique per Company!" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_receivable_graph +msgid "Balance by Type of Account" +msgstr "" + +#. module: account +#: view:account.fiscalyear.close:0 +msgid "Generate Fiscal Year Opening Entries" +msgstr "" + +#. module: account +#: model:res.groups,name:account.group_account_user +msgid "Accountant" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_treasury_report_all +msgid "" +"From this view, have an analysis of your treasury. It sums the balance of " +"every accounting entries made on liquidity accounts per period." +msgstr "" + +#. module: account +#: field:account.journal,group_invoice_lines:0 +msgid "Group Invoice Lines" +msgstr "" + +#. module: account +#: view:account.invoice.cancel:0 +#: view:account.invoice.confirm:0 +msgid "Close" +msgstr "" + +#. module: account +#: field:account.bank.statement.line,move_ids:0 +msgid "Moves" +msgstr "" + +#. module: account +#: view:report.hr.timesheet.invoice.journal:0 +msgid "Sale journal in this month" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_vat_declaration +#: model:ir.model,name:account.model_account_vat_declaration +msgid "Account Vat Declaration" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Price" +msgstr "" + +#. module: account +#: view:account.period:0 +msgid "To Close" +msgstr "" + +#. module: account +#: field:account.treasury.report,date:0 +msgid "Beginning of Period Date" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1351 +#, python-format +msgid "" +"You can not modify a posted entry of this journal !\n" +"You should set the journal to allow cancelling entries if you want to do " +"that." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.account_template_folder +msgid "Templates" +msgstr "" + +#. module: account +#: field:account.invoice.tax,name:0 +msgid "Tax Description" +msgstr "" + +#. module: account +#: field:account.tax,child_ids:0 +msgid "Child Tax Accounts" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1090 +#, python-format +msgid "Start period should be smaller then End period" +msgstr "" + +#. module: account +#: help:account.tax,price_include:0 +#: help:account.tax.template,price_include:0 +msgid "" +"Check this if the price you use on the product and invoices includes this " +"tax." +msgstr "" + +#. module: account +#: report:account.analytic.account.balance:0 +msgid "Analytic Balance -" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,target_move:0 +#: field:account.balance.report,target_move:0 +#: report:account.central.journal:0 +#: field:account.central.journal,target_move:0 +#: field:account.chart,target_move:0 +#: field:account.common.account.report,target_move:0 +#: field:account.common.journal.report,target_move:0 +#: field:account.common.partner.report,target_move:0 +#: field:account.common.report,target_move:0 +#: report:account.general.journal:0 +#: field:account.general.journal,target_move:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.move.journal,target_move:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,target_move:0 +#: field:account.partner.ledger,target_move:0 +#: field:account.print.journal,target_move:0 +#: field:account.report.general.ledger,target_move:0 +#: field:account.tax.chart,target_move:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.vat.declaration,target_move:0 +#: field:accounting.report,target_move:0 +msgid "Target Moves" +msgstr "" + +#. module: account +#: model:account.payment.term,name:account.account_payment_term_net +#: model:account.payment.term,note:account.account_payment_term_net +msgid "30 Net Days" +msgstr "" + +#. module: account +#: field:account.subscription,period_type:0 +msgid "Period Type" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: field:account.invoice,payment_ids:0 +#: selection:account.vat.declaration,based_on:0 +msgid "Payments" +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Reverse Compute Code" +msgstr "" + +#. module: account +#: field:account.subscription.line,move_id:0 +msgid "Entry" +msgstr "" + +#. module: account +#: field:account.tax,python_compute_inv:0 +#: field:account.tax.template,python_compute_inv:0 +msgid "Python Code (reverse)" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_payment_term_form +#: model:ir.ui.menu,name:account.menu_action_payment_term_form +msgid "Payment Terms" +msgstr "" + +#. module: account +#: help:account.chart.template,complete_tax_set:0 +msgid "" +"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" +msgstr "" + +#. module: account +#: view:account.financial.report:0 +#: field:account.financial.report,children_ids:0 +#: model:ir.model,name:account.model_account_financial_report +msgid "Account Report" +msgstr "" + +#. module: account +#: field:account.journal.column,name:0 +msgid "Column Name" +msgstr "" + +#. module: account +#: view:account.general.journal:0 +msgid "" +"This report gives you an overview of the situation of your general journals" +msgstr "" + +#. module: account +#: field:account.entries.report,year:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,year:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,year:0 +#: field:report.account.sales,name:0 +#: field:report.account_type.sales,name:0 +msgid "Year" +msgstr "" + +#. module: account +#: field:account.bank.statement,starting_details_ids:0 +msgid "Opening Cashbox" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid "Line 1:" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1307 +#, python-format +msgid "Integrity Error !" +msgstr "" + +#. module: account +#: field:account.tax.template,description:0 +msgid "Internal Name" +msgstr "" + +#. module: account +#: selection:account.subscription,period_type:0 +msgid "month" +msgstr "" + +#. module: account +#: field:account.partner.reconcile.process,next_partner_id:0 +msgid "Next Partner to Reconcile" +msgstr "" + +#. module: account +#: field:account.invoice.tax,account_id:0 +#: field:account.move.line,tax_code_id:0 +msgid "Tax Account" +msgstr "" + +#. module: account +#: view:account.automatic.reconcile:0 +msgid "Reconciliation Result" +msgstr "" + +#. module: account +#: model:account.financial.report,name:account.account_financial_report_balancesheet0 +#: model:ir.ui.menu,name:account.menu_account_report_bs +msgid "Balance Sheet" +msgstr "" + +#. module: account +#: view:account.general.journal:0 +#: model:ir.ui.menu,name:account.menu_account_general_journal +msgid "General Journals" +msgstr "" + +#. module: account +#: field:account.journal,allow_date:0 +msgid "Check Date in Period" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.final_accounting_reports +msgid "Accounting Reports" +msgstr "" + +#. module: account +#: field:account.move,line_id:0 +#: view:analytic.entries.report:0 +#: model:ir.actions.act_window,name:account.act_account_acount_move_line_open +#: model:ir.actions.act_window,name:account.action_move_line_form +msgid "Entries" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "This Period" +msgstr "" + +#. module: account +#: field:account.analytic.line,product_uom_id:0 +#: field:account.move.line,product_uom_id:0 +msgid "UoM" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_invoice_refund.py:146 +#, python-format +msgid "No Period found on Invoice!" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Compute Code (if type=code)" +msgstr "" + +#. module: account +#: selection:account.analytic.journal,type:0 +#: view:account.journal:0 +#: selection:account.journal,type:0 +#: view:account.model:0 +#: selection:account.tax,type_tax_use:0 +#: view:account.tax.template:0 +#: selection:account.tax.template,type_tax_use:0 +msgid "Sale" +msgstr "" + +#. module: account +#: view:account.financial.report:0 +msgid "Report" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: field:account.bank.statement.line,amount:0 +#: report:account.invoice:0 +#: field:account.invoice.tax,amount:0 +#: view:account.move:0 +#: field:account.move,amount:0 +#: view:account.move.line:0 +#: field:account.tax,amount:0 +#: field:account.tax.template,amount:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,amount:0 +msgid "Amount" +msgstr "" + +#. module: account +#: model:process.transition,name:account.process_transition_customerinvoice0 +#: model:process.transition,name:account.process_transition_paymentorderreconcilation0 +#: model:process.transition,name:account.process_transition_statemententries0 +#: model:process.transition,name:account.process_transition_suppliercustomerinvoice0 +#: model:process.transition,name:account.process_transition_suppliervalidentries0 +#: model:process.transition,name:account.process_transition_validentries0 +msgid "Validation" +msgstr "" + +#. module: account +#: field:account.tax,child_depend:0 +#: field:account.tax.template,child_depend:0 +msgid "Tax on Children" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_tax_template +msgid "Template Tax Fiscal Position" +msgstr "" + +#. module: account +#: field:account.journal,update_posted:0 +msgid "Allow Cancelling Entries" +msgstr "" + +#. module: account +#: field:account.tax.code,sign:0 +msgid "Coefficent for parent" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Analytic Accounts with a past deadline." +msgstr "" + +#. module: account +#: report:account.partner.balance:0 +msgid "(Account/Partner) Name" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Transaction" +msgstr "" + +#. module: account +#: help:account.tax,base_code_id:0 +#: help:account.tax,ref_base_code_id:0 +#: help:account.tax,ref_tax_code_id:0 +#: help:account.tax,tax_code_id:0 +#: help:account.tax.template,base_code_id:0 +#: help:account.tax.template,ref_base_code_id:0 +#: help:account.tax.template,ref_tax_code_id:0 +#: help:account.tax.template,tax_code_id:0 +msgid "Use this code for the VAT declaration." +msgstr "" + +#. module: account +#: field:account.partner.reconcile.process,progress:0 +msgid "Progress" +msgstr "" + +#. module: account +#: view:report.hr.timesheet.invoice.journal:0 +msgid "Analytic Entries Stats" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,bank_accounts_id:0 +msgid "Cash and Banks" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_installer +msgid "account.installer" +msgstr "" + +#. module: account +#: field:account.tax.template,include_base_amount:0 +msgid "Include in Base Amount" +msgstr "" + +#. module: account +#: help:account.payment.term.line,days:0 +msgid "" +"Number of days to add before computation of the day of month.If Date=15/01, " +"Number of Days=22, Day of Month=-1, then the due date is 28/02." +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid "Amount Computation" +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Entry Controls" +msgstr "" + +#. module: account +#: view:account.analytic.chart:0 +#: view:project.account.analytic.line:0 +msgid "(Keep empty to open the current situation)" +msgstr "" + +#. module: account +#: field:account.analytic.balance,date1:0 +#: field:account.analytic.cost.ledger,date1:0 +#: field:account.analytic.cost.ledger.journal.report,date1:0 +#: field:account.analytic.inverted.balance,date1:0 +#: field:account.analytic.journal.report,date1:0 +msgid "Start of period" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_common_account_report +msgid "Account Common Account Report" +msgstr "" + +#. module: account +#: field:account.bank.statement.line,name:0 +#: field:account.invoice,reference:0 +msgid "Communication" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_analytic_accounting +msgid "Analytic Accounting" +msgstr "" + +#. module: account +#: field:account.partner.ledger,initial_balance:0 +#: field:account.report.general.ledger,initial_balance:0 +msgid "Include Initial Balances" +msgstr "" + +#. module: account +#: selection:account.invoice,type:0 +#: selection:account.invoice.report,type:0 +#: selection:report.invoice.created,type:0 +msgid "Customer Refund" +msgstr "Nota de Crédito de cliente" + +#. module: account +#: constraint:account.move:0 +msgid "" +"You can not create more than one move per period on centralized journal" +msgstr "" + +#. module: account +#: field:account.tax,ref_tax_sign:0 +#: field:account.tax,tax_sign:0 +#: field:account.tax.template,ref_tax_sign:0 +#: field:account.tax.template,tax_sign:0 +msgid "Tax Code Sign" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_report_invoice_created +msgid "Report of Invoices Created within Last 15 days" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid " Number of Days: 14" +msgstr "" + +#. module: account +#: field:account.fiscalyear,end_journal_period_id:0 +msgid "End of Year Entries Journal" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3446 +#: code:addons/account/account_bank_statement.py:338 +#: code:addons/account/account_invoice.py:427 +#: code:addons/account/account_invoice.py:527 +#: code:addons/account/account_invoice.py:542 +#: code:addons/account/account_invoice.py:550 +#: code:addons/account/account_invoice.py:572 +#: code:addons/account/wizard/account_move_journal.py:63 +#, python-format +msgid "Configuration Error !" +msgstr "" + +#. module: account +#: field:account.payment.term.line,value_amount:0 +msgid "Amount To Pay" +msgstr "" + +#. module: account +#: help:account.partner.reconcile.process,to_reconcile:0 +msgid "" +"This is the remaining partners for who you should check if there is " +"something to reconcile or not. This figure already count the current partner " +"as reconciled." +msgstr "" + +#. module: account +#: view:account.subscription.line:0 +msgid "Subscription lines" +msgstr "" + +#. module: account +#: field:account.entries.report,quantity:0 +msgid "Products Quantity" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +#: selection:account.entries.report,move_state:0 +#: view:account.move:0 +#: selection:account.move,state:0 +#: view:account.move.line:0 +msgid "Unposted" +msgstr "" + +#. module: account +#: view:account.change.currency:0 +#: model:ir.actions.act_window,name:account.action_account_change_currency +#: model:ir.model,name:account.model_account_change_currency +msgid "Change Currency" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "This action will erase taxes" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_accountingentries0 +#: model:process.node,note:account.process_node_supplieraccountingentries0 +msgid "Accounting entries." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Payment Date" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: model:ir.actions.act_window,name:account.action_account_analytic_account_form +#: model:ir.ui.menu,name:account.account_analytic_def_account +msgid "Analytic Accounts" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Customer Invoices And Refunds" +msgstr "Facturas y Notas de Crédito de clientes" + +#. module: account +#: field:account.analytic.line,amount_currency:0 +#: field:account.entries.report,amount_currency:0 +#: field:account.model.line,amount_currency:0 +#: field:account.move.line,amount_currency:0 +msgid "Amount Currency" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_validate_account_move.py:39 +#, python-format +msgid "" +"Specified Journal does not have any account move entries in draft state for " +"this period" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_view_move_line +msgid "Lines to reconcile" +msgstr "" + +#. module: account +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +#: report:account.invoice:0 +#: field:account.invoice.line,quantity:0 +#: field:account.model.line,quantity:0 +#: field:account.move.line,quantity:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,unit_amount:0 +#: field:report.account.sales,quantity:0 +#: field:report.account_type.sales,quantity:0 +msgid "Quantity" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Number (Move)" +msgstr "" + +#. module: account +#: view:analytic.entries.report:0 +msgid "Analytic Entries during last 7 days" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Normal Text" +msgstr "" + +#. module: account +#: view:account.invoice.refund:0 +msgid "Refund Invoice Options" +msgstr "Opciones de Nota de Crédito" + +#. module: account +#: help:account.automatic.reconcile,power:0 +msgid "" +"Number of partial amounts that can be combined to find a balance point can " +"be chosen as the power of the automatic reconciliation" +msgstr "" + +#. module: account +#: help:account.payment.term.line,sequence:0 +msgid "" +"The sequence field is used to order the payment term lines from the lowest " +"sequences to the higher ones" +msgstr "" + +#. module: account +#: view:account.fiscal.position.template:0 +#: field:account.fiscal.position.template,name:0 +msgid "Fiscal Position Template" +msgstr "" + +#. module: account +#: view:account.analytic.chart:0 +#: view:account.chart:0 +#: view:account.tax.chart:0 +msgid "Open Charts" +msgstr "" + +#. module: account +#: view:account.fiscalyear.close.state:0 +msgid "" +"If no additional entries should be recorded on a fiscal year, you can close " +"it from here. It will close all opened periods in this year that will make " +"impossible any new entry record. Close a fiscal year when you need to " +"finalize your end of year results definitive " +msgstr "" + +#. module: account +#: field:account.central.journal,amount_currency:0 +#: field:account.common.journal.report,amount_currency:0 +#: field:account.general.journal,amount_currency:0 +#: field:account.partner.ledger,amount_currency:0 +#: field:account.print.journal,amount_currency:0 +#: field:account.report.general.ledger,amount_currency:0 +msgid "With Currency" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Open CashBox" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Automatic formatting" +msgstr "" + +#. module: account +#: code:addons/account/account.py:963 +#, python-format +msgid "" +"No fiscal year defined for this date !\n" +"Please create one from the configuration of the accounting menu." +msgstr "" + +#. module: account +#: view:account.move.line.reconcile:0 +msgid "Reconcile With Write-Off" +msgstr "" + +#. module: account +#: selection:account.payment.term.line,value:0 +#: selection:account.tax,type:0 +msgid "Fixed Amount" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Valid Up to" +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Invoicing Data" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_automatic_reconcile +msgid "Account Automatic Reconcile" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Journal Item" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_journal +msgid "Move journal" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscalyear_close +#: model:ir.ui.menu,name:account.menu_wizard_fy_close +msgid "Generate Opening Entries" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:759 +#, python-format +msgid "Already Reconciled!" +msgstr "" + +#. module: account +#: help:account.tax,type:0 +msgid "The computation method for the tax amount." +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid "Due Date Computation" +msgstr "" + +#. module: account +#: field:report.invoice.created,create_date:0 +msgid "Create Date" +msgstr "" + +#. module: account +#: view:account.analytic.journal:0 +#: model:ir.actions.act_window,name:account.action_account_analytic_journal_form +#: model:ir.ui.menu,name:account.account_def_analytic_journal +msgid "Analytic Journals" +msgstr "" + +#. module: account +#: field:account.account,child_id:0 +msgid "Child Accounts" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1214 +#, python-format +msgid "Move name (id): %s (%s)" +msgstr "" + +#. module: account +#: view:account.move.line.reconcile:0 +#: code:addons/account/account_move_line.py:857 +#, python-format +msgid "Write-Off" +msgstr "" + +#. module: account +#: field:res.partner,debit:0 +msgid "Total Payable" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_income +#: model:account.financial.report,name:account.account_financial_report_income0 +msgid "Income" +msgstr "" + +#. module: account +#: selection:account.bank.statement.line,type:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: code:addons/account/account_invoice.py:339 +#, python-format +msgid "Supplier" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "March" +msgstr "" + +#. module: account +#: view:account.account.template:0 +msgid "Account Template" +msgstr "" + +#. module: account +#: report:account.journal.period.print.sale.purchase:0 +msgid "VAT" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +msgid "Account n°" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:88 +#, python-format +msgid "Free Reference" +msgstr "" + +#. module: account +#: field:account.payment.term.line,value:0 +msgid "Valuation" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,result_selection:0 +#: selection:account.common.partner.report,result_selection:0 +#: selection:account.partner.balance,result_selection:0 +#: selection:account.partner.ledger,result_selection:0 +#: code:addons/account/report/account_partner_balance.py:301 +#, python-format +msgid "Receivable and Payable Accounts" +msgstr "" + +#. module: account +#: field:account.fiscal.position.account.template,position_id:0 +msgid "Fiscal Mapping" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_state_open +#: model:ir.model,name:account.model_account_state_open +msgid "Account State Open" +msgstr "" + +#. module: account +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "Max Qty:" +msgstr "" + +#. module: account +#: view:account.invoice.refund:0 +msgid "Refund Invoice" +msgstr "Reintegrar factura" + +#. module: account +#: field:account.invoice,address_invoice_id:0 +msgid "Invoice Address" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_entries_report_all +msgid "" +"From this view, have an analysis of your different financial accounts. The " +"document shows your debit and credit taking in consideration some criteria " +"you can choose by using the search tool." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_tax_code_list +msgid "" +"The tax code definition depends on the tax declaration of your country. " +"OpenERP allows you to define the tax structure and manage it from this menu. " +"You can define both numeric and alphanumeric tax codes." +msgstr "" + +#. module: account +#: help:account.partner.reconcile.process,progress:0 +msgid "" +"Shows you the progress made today on the reconciliation process. Given by \n" +"Partners Reconciled Today \\ (Remaining Partners + Partners Reconciled Today)" +msgstr "" + +#. module: account +#: help:account.payment.term.line,value:0 +msgid "" +"Select here the kind of valuation related to this payment term line. Note " +"that you should have your last line with the type 'Balance' to ensure that " +"the whole amount will be threated." +msgstr "" + +#. module: account +#: field:account.invoice,period_id:0 +#: field:account.invoice.report,period_id:0 +#: field:report.account.sales,period_id:0 +#: field:report.account_type.sales,period_id:0 +msgid "Force Period" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,nbr:0 +msgid "# of Lines" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,filter:0 +#: field:account.balance.report,filter:0 +#: field:account.central.journal,filter:0 +#: field:account.common.account.report,filter:0 +#: field:account.common.journal.report,filter:0 +#: field:account.common.partner.report,filter:0 +#: field:account.common.report,filter:0 +#: field:account.general.journal,filter:0 +#: field:account.partner.balance,filter:0 +#: field:account.partner.ledger,filter:0 +#: field:account.print.journal,filter:0 +#: field:account.report.general.ledger,filter:0 +#: field:account.vat.declaration,filter:0 +#: field:accounting.report,filter:0 +#: field:accounting.report,filter_cmp:0 +msgid "Filter by" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2256 +#, python-format +msgid "You have a wrong expression \"%(...)s\" in your model !" +msgstr "" + +#. module: account +#: field:account.bank.statement.line,date:0 +msgid "Entry Date" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1155 +#: code:addons/account/account_move_line.py:1238 +#, python-format +msgid "You can not use an inactive account!" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:830 +#, python-format +msgid "Entries are not of the same account or already reconciled ! " +msgstr "" + +#. module: account +#: help:account.bank.statement,balance_end:0 +msgid "Balance as calculated based on Starting Balance and transaction lines" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_change_currency.py:64 +#: code:addons/account/wizard/account_change_currency.py:70 +#, python-format +msgid "Current currency is not configured properly !" +msgstr "" + +#. module: account +#: field:account.tax,account_collected_id:0 +#: field:account.tax.template,account_collected_id:0 +msgid "Invoice Tax Account" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_general_journal +#: model:ir.model,name:account.model_account_general_journal +msgid "Account General Journal" +msgstr "" + +#. module: account +#: field:account.payment.term.line,days:0 +msgid "Number of Days" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:402 +#: code:addons/account/account_invoice.py:392 +#: code:addons/account/wizard/account_period_close.py:51 +#, python-format +msgid "Invalid action !" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_move_journal.py:102 +#, python-format +msgid "Period: %s" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_review_financial_journals_installer +msgid "Review your Financial Journals" +msgstr "" + +#. module: account +#: help:account.tax,name:0 +msgid "This name will be displayed on reports" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "Printing date" +msgstr "" + +#. module: account +#: selection:account.account.type,close_method:0 +#: selection:account.tax,type:0 +#: selection:account.tax.template,type:0 +msgid "None" +msgstr "" + +#. module: account +#: view:analytic.entries.report:0 +msgid " 365 Days " +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_invoice_tree3 +#: model:ir.ui.menu,name:account.menu_action_invoice_tree3 +msgid "Customer Refunds" +msgstr "Notas de Crédito de clientes" + +#. module: account +#: field:account.account,foreign_balance:0 +msgid "Foreign Balance" +msgstr "" + +#. module: account +#: field:account.journal.period,name:0 +msgid "Journal-Period Name" +msgstr "" + +#. module: account +#: field:account.invoice.tax,factor_base:0 +msgid "Multipication factor for Base code" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_report_common.py:150 +#, python-format +msgid "not implemented" +msgstr "" + +#. module: account +#: help:account.journal,company_id:0 +msgid "Company related to this journal" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_invoice_state.py:44 +#, python-format +msgid "" +"Selected Invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-" +"Forma' state!" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Running Subscription" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Fiscal Position Remark :" +msgstr "" + +#. module: account +#: view:analytic.entries.report:0 +#: model:ir.actions.act_window,name:account.action_analytic_entries_report +#: model:ir.ui.menu,name:account.menu_action_analytic_entries_report +msgid "Analytic Entries Analysis" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,direction_selection:0 +msgid "Past" +msgstr "" + +#. module: account +#: constraint:account.account:0 +msgid "" +"Configuration Error! \n" +"You can not define children to an account with internal type different of " +"\"View\"! " +msgstr "" + +#. module: account +#: help:res.partner.bank,journal_id:0 +msgid "" +"This journal will be created automatically for this bank account when you " +"save the record" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Analytic Entry" +msgstr "" + +#. module: account +#: view:res.company:0 +#: field:res.company,overdue_msg:0 +msgid "Overdue Payments Message" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_moves_all_a +msgid "" +"This view can be used by accountants in order to quickly record entries in " +"OpenERP. If you want to record a supplier invoice, start by recording the " +"line of the expense account. OpenERP will propose to you automatically the " +"Tax related to this account and the counterpart \"Account Payable\"." +msgstr "" + +#. module: account +#: field:account.entries.report,date_created:0 +msgid "Date Created" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_account_line_extended_form +msgid "account.analytic.line.extended" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "(keep empty to use the current period)" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_supplierreconcilepaid0 +msgid "" +"As soon as the reconciliation is done, the invoice's state turns to “done” " +"(i.e. paid) in the system." +msgstr "" + +#. module: account +#: view:account.chart.template:0 +#: field:account.chart.template,account_root_id:0 +msgid "Root Account" +msgstr "" + +#. module: account +#: field:res.partner,last_reconciliation_date:0 +msgid "Latest Reconciliation Date" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_line +msgid "Analytic Line" +msgstr "" + +#. module: account +#: field:product.template,taxes_id:0 +msgid "Customer Taxes" +msgstr "" + +#. module: account +#: help:account.model,name:0 +msgid "This is a model for recurring accounting entries" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,sale_tax_rate:0 +msgid "Sales Tax(%)" +msgstr "" + +#. module: account +#: view:account.addtmpl.wizard:0 +msgid "Create an Account Based on this Template" +msgstr "" + +#. module: account +#: view:account.account.type:0 +#: view:account.tax.code:0 +msgid "Reporting Configuration" +msgstr "" + +#. module: account +#: field:account.tax,type:0 +#: field:account.tax.template,type:0 +msgid "Tax Type" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_template_form +#: model:ir.ui.menu,name:account.menu_action_account_template_form +msgid "Account Templates" +msgstr "" + +#. module: account +#: help:wizard.multi.charts.accounts,complete_tax_set:0 +msgid "" +"This boolean helps you to choose if you want to propose to the user to " +"encode the sales and purchase rates or use the usual m2o fields. This last " +"choice assumes that the set of tax defined for the chosen template is " +"complete" +msgstr "" + +#. module: account +#: report:account.vat.declaration:0 +msgid "Tax Statement" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_res_company +msgid "Companies" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Open and Paid Invoices" +msgstr "" + +#. module: account +#: selection:account.financial.report,display_detail:0 +msgid "Display children flat" +msgstr "" + +#. module: account +#: code:addons/account/account.py:629 +#, python-format +msgid "" +"You can not remove/desactivate an account which is set on a customer or " +"supplier." +msgstr "" + +#. module: account +#: help:account.fiscalyear.close.state,fy_id:0 +msgid "Select a fiscal year to close" +msgstr "" + +#. module: account +#: help:account.chart.template,tax_template_ids:0 +msgid "List of all the taxes that have to be installed by the wizard" +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_intracom +msgid "IntraCom" +msgstr "" + +#. module: account +#: view:account.move.line.reconcile.writeoff:0 +msgid "Information addendum" +msgstr "" + +#. module: account +#: field:account.chart,fiscalyear:0 +msgid "Fiscal year" +msgstr "" + +#. module: account +#: view:account.move.reconcile:0 +msgid "Partial Reconcile Entries" +msgstr "" + +#. module: account +#: view:account.addtmpl.wizard:0 +#: view:account.aged.trial.balance:0 +#: view:account.analytic.balance:0 +#: view:account.analytic.chart:0 +#: view:account.analytic.cost.ledger:0 +#: view:account.analytic.cost.ledger.journal.report:0 +#: view:account.analytic.inverted.balance:0 +#: view:account.analytic.journal.report:0 +#: view:account.automatic.reconcile:0 +#: view:account.bank.statement:0 +#: view:account.change.currency:0 +#: view:account.chart:0 +#: view:account.common.report:0 +#: view:account.fiscalyear.close:0 +#: view:account.fiscalyear.close.state:0 +#: view:account.invoice:0 +#: view:account.invoice.refund:0 +#: view:account.journal.select:0 +#: view:account.move:0 +#: view:account.move.bank.reconcile:0 +#: view:account.move.line.reconcile:0 +#: view:account.move.line.reconcile.select:0 +#: view:account.move.line.reconcile.writeoff:0 +#: view:account.move.line.unreconcile.select:0 +#: view:account.open.closed.fiscalyear:0 +#: view:account.partner.reconcile.process:0 +#: view:account.period.close:0 +#: view:account.subscription.generate:0 +#: view:account.tax.chart:0 +#: view:account.unreconcile:0 +#: view:account.unreconcile.reconcile:0 +#: view:account.use.model:0 +#: view:account.vat.declaration:0 +#: code:addons/account/wizard/account_move_journal.py:105 +#: view:project.account.analytic.line:0 +#: view:validate.account.move:0 +#: view:validate.account.move.lines:0 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: model:account.account.type,name:account.data_account_type_receivable +#: selection:account.entries.report,type:0 +msgid "Receivable" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "Company must be the same for its related account and period." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Other Info" +msgstr "" + +#. module: account +#: field:account.journal,default_credit_account_id:0 +msgid "Default Credit Account" +msgstr "" + +#. module: account +#: help:account.analytic.line,currency_id:0 +msgid "The related account currency if not equal to the company one." +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Current" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "CashBox" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.account_type_cash_equity +msgid "Equity" +msgstr "" + +#. module: account +#: selection:account.tax,type:0 +msgid "Percentage" +msgstr "" + +#. module: account +#: selection:account.report.general.ledger,sortby:0 +msgid "Journal & Partner" +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,power:0 +msgid "Power" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3368 +#, python-format +msgid "Cannot generate an unused journal code." +msgstr "" + +#. module: account +#: view:project.account.analytic.line:0 +msgid "View Account Analytic Lines" +msgstr "" + +#. module: account +#: field:account.invoice,internal_number:0 +#: field:report.invoice.created,number:0 +msgid "Invoice Number" +msgstr "" + +#. module: account +#: help:account.tax,include_base_amount:0 +msgid "" +"Indicates if the amount of tax must be included in the base amount for the " +"computation of the next taxes" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_partner_reconcile +msgid "Reconciliation: Go to Next Partner" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_invert_balance +#: model:ir.actions.report.xml,name:account.account_analytic_account_inverted_balance +msgid "Inverted Analytic Balance" +msgstr "" + +#. module: account +#: field:account.tax.template,applicable_type:0 +msgid "Applicable Type" +msgstr "" + +#. module: account +#: field:account.invoice.line,invoice_id:0 +msgid "Invoice Reference" +msgstr "" + +#. module: account +#: help:account.tax.template,sequence:0 +msgid "" +"The sequence field is used to order the taxes lines from lower sequences to " +"higher ones. The order is important if you have a tax that has several tax " +"children. In this case, the evaluation order is important." +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: view:account.journal:0 +msgid "Liquidity" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_journal_open_form +#: model:ir.ui.menu,name:account.account_analytic_journal_entries +msgid "Analytic Journal Items" +msgstr "" + +#. module: account +#: view:account.fiscalyear.close:0 +msgid "" +"This wizard will generate the end of year journal entries of selected fiscal " +"year. Note that you can run this wizard many times for the same fiscal year: " +"it will simply replace the old opening entries with the new ones." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_bank_and_cash +msgid "Bank and Cash" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_analytic_entries_report +msgid "" +"From this view, have an analysis of your different analytic entries " +"following the analytic account you defined matching your business need. Use " +"the tool search to analyse information about analytic entries generated in " +"the system." +msgstr "" + +#. module: account +#: sql_constraint:account.journal:0 +msgid "The name of the journal must be unique per company !" +msgstr "" + +#. module: account +#: field:account.account.template,nocreate:0 +msgid "Optional create" +msgstr "" + +#. module: account +#: code:addons/account/account.py:664 +#, python-format +msgid "" +"You cannot change the owner company of an account that already contains " +"journal items." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_report_aged_partner_balance.py:58 +#, python-format +msgid "Enter a Start date !" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: selection:account.invoice,type:0 +#: selection:account.invoice.report,type:0 +#: selection:report.invoice.created,type:0 +msgid "Supplier Refund" +msgstr "Nota de Crédito de proveedor" + +#. module: account +#: field:account.bank.statement,move_line_ids:0 +msgid "Entry lines" +msgstr "" + +#. module: account +#: field:account.move.line,centralisation:0 +msgid "Centralisation" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.account.template:0 +#: view:account.analytic.account:0 +#: view:account.analytic.journal:0 +#: view:account.analytic.line:0 +#: view:account.bank.statement:0 +#: view:account.chart.template:0 +#: view:account.entries.report:0 +#: view:account.financial.report:0 +#: view:account.fiscalyear:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: view:account.journal:0 +#: view:account.model:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: view:account.subscription:0 +#: view:account.tax.code.template:0 +#: view:analytic.entries.report:0 +msgid "Group By..." +msgstr "" + +#. module: account +#: field:account.journal.column,readonly:0 +msgid "Readonly" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid " Valuation: Balance" +msgstr "" + +#. module: account +#: field:account.invoice.line,uos_id:0 +msgid "Unit of Measure" +msgstr "" + +#. module: account +#: constraint:account.payment.term.line:0 +msgid "" +"Percentages for Payment Term Line must be between 0 and 1, Example: 0.02 for " +"2% " +msgstr "" + +#. module: account +#: field:account.installer,has_default_company:0 +msgid "Has Default Company" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_sequence_fiscalyear +msgid "account.sequence.fiscalyear" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +#: view:account.analytic.journal:0 +#: field:account.analytic.line,journal_id:0 +#: field:account.journal,analytic_journal_id:0 +#: model:ir.actions.act_window,name:account.action_account_analytic_journal +#: model:ir.actions.report.xml,name:account.analytic_journal_print +#: model:ir.model,name:account.model_account_analytic_journal +msgid "Analytic Journal" +msgstr "" + +#. module: account +#: code:addons/account/account.py:622 +#, python-format +msgid "You can not desactivate an account that contains some journal items." +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Reconciled" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: field:account.invoice.tax,base:0 +msgid "Base" +msgstr "" + +#. module: account +#: field:account.model,name:0 +msgid "Model Name" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_expense_categ:0 +msgid "Expense Category Account" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Cash Transactions" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_state_open.py:37 +#, python-format +msgid "Invoice is already reconciled" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.account.template:0 +#: view:account.bank.statement:0 +#: field:account.bank.statement.line,note:0 +#: view:account.fiscal.position:0 +#: field:account.fiscal.position,note:0 +#: field:account.fiscal.position.template,note:0 +#: view:account.invoice.line:0 +#: field:account.invoice.line,note:0 +msgid "Notes" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_analytic_entries_report +msgid "Analytic Entries Statistics" +msgstr "" + +#. module: account +#: code:addons/account/account.py:624 +#, python-format +msgid "You can not remove an account containing journal items." +msgstr "" + +#. module: account +#: code:addons/account/account_analytic_line.py:145 +#: code:addons/account/account_move_line.py:933 +#, python-format +msgid "Entries: " +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "Create manual recurring entries in a chosen journal." +msgstr "" + +#. module: account +#: help:res.partner.bank,currency_id:0 +msgid "Currency of the related account journal." +msgstr "" + +#. module: account +#: code:addons/account/account.py:1563 +#, python-format +msgid "Couldn't create move between different companies" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_type_form +msgid "" +"An account type is used to determine how an account is used in each journal. " +"The deferral method of an account type determines the process for the annual " +"closing. Reports such as the Balance Sheet and the Profit and Loss report " +"use the category (profit/loss or balance sheet). For example, the account " +"type could be linked to an asset account, expense account or payable " +"account. From this view, you can create and manage the account types you " +"need for your company." +msgstr "" + +#. module: account +#: selection:account.account.type,report_type:0 +#: code:addons/account/account.py:183 +#, python-format +msgid "Balance Sheet (Asset account)" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_bank_reconcile_tree +msgid "" +"Bank Reconciliation consists of verifying that your bank statement " +"corresponds with the entries (or records) of that account in your accounting " +"system." +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_draftstatement0 +msgid "State is draft" +msgstr "" + +#. module: account +#: view:account.move.line:0 +#: code:addons/account/account_move_line.py:1043 +#, python-format +msgid "Total debit" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:808 +#, python-format +msgid "Entry \"%s\" is not valid !" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Fax :" +msgstr "" + +#. module: account +#: view:wizard.multi.charts.accounts:0 +msgid "" +"This will automatically configure your chart of accounts, bank accounts, " +"taxes and journals according to the selected template" +msgstr "" + +#. module: account +#: help:res.partner,property_account_receivable:0 +msgid "" +"This account will be used instead of the default one as the receivable " +"account for the current partner" +msgstr "" + +#. module: account +#: field:account.tax,python_applicable:0 +#: field:account.tax,python_compute:0 +#: selection:account.tax,type:0 +#: selection:account.tax.template,applicable_type:0 +#: field:account.tax.template,python_applicable:0 +#: field:account.tax.template,python_compute:0 +#: selection:account.tax.template,type:0 +msgid "Python Code" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Journal Entries with period in current period" +msgstr "" + +#. module: account +#: help:account.journal,update_posted:0 +msgid "" +"Check this box if you want to allow the cancellation the entries related to " +"this journal or of the invoice related to this journal" +msgstr "" + +#. module: account +#: view:account.fiscalyear.close:0 +msgid "Create" +msgstr "" + +#. module: account +#: model:process.transition.action,name:account.process_transition_action_createentries0 +msgid "Create entry" +msgstr "" + +#. module: account +#: selection:account.account.type,report_type:0 +#: code:addons/account/account.py:182 +#, python-format +msgid "Profit & Loss (Expense account)" +msgstr "" + +#. module: account +#: code:addons/account/account.py:622 +#: code:addons/account/account.py:624 +#: code:addons/account/account.py:963 +#: code:addons/account/account.py:1052 +#: code:addons/account/account.py:1129 +#: code:addons/account/account.py:1344 +#: code:addons/account/account.py:1351 +#: code:addons/account/account.py:2280 +#: code:addons/account/account.py:2596 +#: code:addons/account/account_analytic_line.py:92 +#: code:addons/account/account_analytic_line.py:101 +#: code:addons/account/account_bank_statement.py:301 +#: code:addons/account/account_bank_statement.py:314 +#: code:addons/account/account_bank_statement.py:352 +#: code:addons/account/account_cash_statement.py:292 +#: code:addons/account/account_cash_statement.py:314 +#: code:addons/account/account_invoice.py:808 +#: code:addons/account/account_invoice.py:839 +#: code:addons/account/account_invoice.py:1030 +#: code:addons/account/account_move_line.py:1200 +#: code:addons/account/account_move_line.py:1216 +#: code:addons/account/account_move_line.py:1218 +#: code:addons/account/wizard/account_invoice_refund.py:108 +#: code:addons/account/wizard/account_invoice_refund.py:110 +#: code:addons/account/wizard/account_open_closed_fiscalyear.py:39 +#: code:addons/account/wizard/account_use_model.py:44 +#, python-format +msgid "Error !" +msgstr "" + +#. module: account +#: field:account.financial.report,style_overwrite:0 +msgid "Financial Report Style" +msgstr "" + +#. module: account +#: selection:account.financial.report,sign:0 +msgid "Preserve balance sign" +msgstr "" + +#. module: account +#: view:account.vat.declaration:0 +#: model:ir.actions.report.xml,name:account.account_vat_declaration +#: model:ir.ui.menu,name:account.menu_account_vat_declaration +msgid "Taxes Report" +msgstr "" + +#. module: account +#: selection:account.journal.period,state:0 +msgid "Printed" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:584 +#: code:addons/account/account_move_line.py:591 +#, python-format +msgid "Error :" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Project line" +msgstr "" + +#. module: account +#: field:account.invoice.tax,manual:0 +msgid "Manual" +msgstr "" + +#. module: account +#: view:account.automatic.reconcile:0 +msgid "" +"For an invoice to be considered as paid, the invoice entries must be " +"reconciled with counterparts, usually payments. With the automatic " +"reconciliation functionality, OpenERP makes its own search for entries to " +"reconcile in a series of accounts. It finds entries for each partner where " +"the amounts correspond." +msgstr "" + +#. module: account +#: view:account.move:0 +#: field:account.move,to_check:0 +msgid "To Review" +msgstr "" + +#. module: account +#: help:account.partner.ledger,initial_balance:0 +#: help:account.report.general.ledger,initial_balance:0 +msgid "" +"If you selected to filter by date or period, this field allow you to add a " +"row to display the amount of debit/credit/balance that precedes the filter " +"you've set." +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: view:account.move:0 +#: model:ir.actions.act_window,name:account.action_move_journal_line +#: model:ir.ui.menu,name:account.menu_action_move_journal_line_form +#: model:ir.ui.menu,name:account.menu_finance_entries +msgid "Journal Entries" +msgstr "" + +#. module: account +#: help:account.partner.ledger,page_split:0 +msgid "Display Ledger Report with One partner per page" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1218 +#, python-format +msgid "" +"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" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "JRNL" +msgstr "" + +#. module: account +#: view:account.partner.balance:0 +#: view:account.partner.ledger:0 +msgid "" +"This report is an analysis done by a partner. It is a PDF report containing " +"one line per partner representing the cumulative credit balance" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_validate_account_move.py:61 +#, python-format +msgid "" +"Selected Entry Lines does not have any account move enties in draft state" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,target_move:0 +#: selection:account.balance.report,target_move:0 +#: selection:account.central.journal,target_move:0 +#: selection:account.chart,target_move:0 +#: selection:account.common.account.report,target_move:0 +#: selection:account.common.journal.report,target_move:0 +#: selection:account.common.partner.report,target_move:0 +#: selection:account.common.report,target_move:0 +#: selection:account.general.journal,target_move:0 +#: selection:account.move.journal,target_move:0 +#: selection:account.partner.balance,target_move:0 +#: selection:account.partner.ledger,target_move:0 +#: selection:account.print.journal,target_move:0 +#: selection:account.report.general.ledger,target_move:0 +#: selection:account.tax.chart,target_move:0 +#: selection:account.vat.declaration,target_move:0 +#: selection:accounting.report,target_move:0 +#: code:addons/account/report/common_report_header.py:67 +#, python-format +msgid "All Entries" +msgstr "" + +#. module: account +#: constraint:product.template:0 +msgid "" +"Error: The default UOM and the purchase UOM must be in the same category." +msgstr "" + +#. module: account +#: view:account.journal.select:0 +msgid "Journal Select" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: code:addons/account/account.py:420 +#: code:addons/account/account.py:432 +#, python-format +msgid "Opening Balance" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_reconcile +msgid "Account Reconciliation" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_tax +msgid "Taxes Fiscal Position" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: view:account.report.general.ledger:0 +#: model:ir.actions.act_window,name:account.action_account_general_ledger_menu +#: model:ir.actions.report.xml,name:account.account_general_ledger +#: model:ir.actions.report.xml,name:account.account_general_ledger_landscape +#: model:ir.ui.menu,name:account.menu_general_ledger +msgid "General Ledger" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_paymentorderbank0 +msgid "The payment order is sent to the bank." +msgstr "" + +#. module: account +#: view:account.balance.report:0 +msgid "" +"This report allows you to print or generate a pdf of your trial balance " +"allowing you to quickly check the balance of each of your accounts in a " +"single report" +msgstr "" + +#. module: account +#: help:account.move,to_check:0 +msgid "" +"Check this box if you are unsure of that journal entry and if you want to " +"note it as 'to be reviewed' by an accounting expert." +msgstr "" + +#. module: account +#: field:account.chart.template,complete_tax_set:0 +#: field:wizard.multi.charts.accounts,complete_tax_set:0 +msgid "Complete Set of Taxes" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +msgid "Properties" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_tax_chart +msgid "Account tax chart" +msgstr "" + +#. module: account +#: constraint:res.partner.bank:0 +msgid "" +"\n" +"Please define BIC/Swift code on bank for bank type IBAN Account to make " +"valid payments" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +#: report:account.central.journal:0 +#: report:account.general.journal:0 +#: report:account.invoice:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: report:account.partner.balance:0 +msgid "Total:" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2229 +#, python-format +msgid "" +"You can specify year, month and date in the name of the model using the " +"following labels:\n" +"\n" +"%(year)s: To Specify Year \n" +"%(month)s: To Specify Month \n" +"%(date)s: Current Date\n" +"\n" +"e.g. My model on %(date)s" +msgstr "" + +#. module: account +#: help:report.invoice.created,origin:0 +msgid "Reference of the document that generated this invoice report." +msgstr "" + +#. module: account +#: field:account.tax.code,child_ids:0 +#: field:account.tax.code.template,child_ids:0 +msgid "Child Codes" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Taxes used in Sales" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:495 +#: code:addons/account/wizard/account_invoice_refund.py:145 +#, python-format +msgid "Data Insufficient !" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_invoice_tree1 +#: model:ir.ui.menu,name:account.menu_action_invoice_tree1 +msgid "Customer Invoices" +msgstr "" + +#. module: account +#: field:account.move.line.reconcile,writeoff:0 +msgid "Write-Off amount" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Sales" +msgstr "" + +#. module: account +#: view:account.journal.column:0 +#: model:ir.model,name:account.model_account_journal_column +msgid "Journal Column" +msgstr "" + +#. module: account +#: selection:account.invoice.report,state:0 +#: selection:account.journal.period,state:0 +#: selection:account.subscription,state:0 +#: selection:report.invoice.created,state:0 +msgid "Done" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_bank_tree +msgid "" +"Configure your company's bank account and select those that must appear on " +"the report footer. You can reorder banks in the list view. If you use the " +"accounting application of OpenERP, journals and accounts will be created " +"automatically based on these data." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_invoicemanually0 +msgid "A statement with manual entries becomes a draft statement." +msgstr "" + +#. module: account +#: view:account.aged.trial.balance:0 +msgid "" +"Aged Partner Balance is a more detailed report of your receivables by " +"intervals. When opening that report, OpenERP asks for the name of the " +"company, the fiscal period and the size of the interval to be analyzed (in " +"days). OpenERP then calculates a table of credit balance by period. So if " +"you request an interval of 30 days OpenERP generates an analysis of " +"creditors for the past month, past two months, and so on. " +msgstr "" + +#. module: account +#: field:account.invoice,origin:0 +#: field:report.invoice.created,origin:0 +msgid "Source Document" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1432 +#, python-format +msgid "You can not delete a posted journal entry \"%s\"!" +msgstr "" + +#. module: account +#: selection:account.partner.ledger,filter:0 +#: code:addons/account/report/account_partner_ledger.py:59 +#: model:ir.actions.act_window,name:account.act_account_acount_move_line_open_unreconciled +#, python-format +msgid "Unreconciled Entries" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_menu_Bank_process +msgid "Statements Reconciliation" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_accounting_report +msgid "Accounting Report" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Taxes:" +msgstr "" + +#. module: account +#: help:account.tax,amount:0 +msgid "For taxes of type percentage, enter % ratio between 0-1." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_subscription_form +msgid "" +"A recurring entry is a miscellaneous entry that occurs on a recurrent basis " +"from a specific date, i.e. corresponding to the signature of a contract or " +"an agreement with a customer or a supplier. With Define Recurring Entries, " +"you can create such entries to automate the postings in the system." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_report_tree_hierarchy +msgid "Financial Reports Hierarchy" +msgstr "" + +#. module: account +#: field:account.entries.report,product_uom_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,product_uom_id:0 +msgid "Product UOM" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_view_bank_statement_tree +msgid "" +"A Cash Register allows you to manage cash entries in your cash journals. " +"This feature provides an easy way to follow up cash payments on a daily " +"basis. You can enter the coins that are in your cash box, and then post " +"entries when money comes in or goes out of the cash box." +msgstr "" + +#. module: account +#: help:account.invoice.refund,date:0 +msgid "" +"This date will be used as the invoice date for Refund Invoice and Period " +"will be chosen accordingly!" +msgstr "" +"Esta fecha se utilizará como la fecha de facturación de la Nota de Crédito y " +"el período será elegido en consecuencia." + +#. module: account +#: model:ir.actions.act_window,name:account.act_account_invoice_partner_relation +msgid "Monthly Turnover" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Analytic Lines" +msgstr "" + +#. module: account +#: field:account.analytic.journal,line_ids:0 +#: field:account.tax.code,line_ids:0 +msgid "Lines" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Account Tax Template" +msgstr "" + +#. module: account +#: view:account.journal.select:0 +msgid "Are you sure you want to open Journal Entries?" +msgstr "" + +#. module: account +#: view:account.state.open:0 +msgid "Are you sure you want to open this invoice ?" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:528 +#: code:addons/account/account_invoice.py:543 +#, python-format +msgid "" +"Can not find a chart of account, you should create one from the " +"configuration of the accounting menu." +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_expense_opening:0 +msgid "Opening Entries Expense Account" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:999 +#, python-format +msgid "Accounting Entries" +msgstr "" + +#. module: account +#: field:account.account.template,parent_id:0 +msgid "Parent Account Template" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_configuration_installer +msgid "Configure your Chart of Accounts" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.bank.statement.line,statement_id:0 +#: field:account.move.line,statement_id:0 +#: model:process.process,name:account.process_process_statementprocess0 +msgid "Statement" +msgstr "" + +#. module: account +#: help:account.journal,default_debit_account_id:0 +msgid "It acts as a default account for debit amount" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_journal_period_tree +msgid "" +"You can search for individual account entries through useful information. To " +"search for account entries, open a journal, then select a record line." +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Posted entries" +msgstr "" + +#. module: account +#: help:account.payment.term.line,value_amount:0 +msgid "For percent enter a ratio between 0-1." +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: field:account.invoice,date_invoice:0 +#: field:report.invoice.created,date_invoice:0 +msgid "Invoice Date" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Group by year of Invoice Date" +msgstr "" + +#. module: account +#: help:res.partner,credit:0 +msgid "Total amount this customer owes you." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_ir_sequence +msgid "ir.sequence" +msgstr "" + +#. module: account +#: field:account.journal.period,icon:0 +msgid "Icon" +msgstr "" + +#. module: account +#: view:account.automatic.reconcile:0 +#: view:account.use.model:0 +msgid "Ok" +msgstr "" + +#. module: account +#: field:account.chart.template,tax_code_root_id:0 +msgid "Root Tax Code" +msgstr "" + +#. module: account +#: help:account.journal,centralisation:0 +msgid "" +"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." +msgstr "" + +#. module: account +#: field:account.bank.statement,closing_date:0 +msgid "Closed On" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,date2:0 +msgid "Ending Date" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,purchase_tax:0 +msgid "Default Purchase Tax" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_income_opening:0 +msgid "Opening Entries Income Account" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Confirm" +msgstr "" + +#. module: account +#: help:account.tax,domain:0 +#: help:account.tax.template,domain:0 +msgid "" +"This field is only used if you develop your own module allowing developers " +"to create specific taxes in a custom domain." +msgstr "" + +#. module: account +#: code:addons/account/account.py:1088 +#, python-format +msgid "You should have chosen periods that belongs to the same company" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_review_payment_terms_installer +msgid "Review your Payment Terms" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close,report_name:0 +msgid "Name of new entries" +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "Create Entries" +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "Information About the Bank" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_reporting +msgid "Reporting" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:759 +#: code:addons/account/account_move_line.py:842 +#: code:addons/account/wizard/account_invoice_state.py:44 +#: code:addons/account/wizard/account_invoice_state.py:68 +#: code:addons/account/wizard/account_state_open.py:37 +#: code:addons/account/wizard/account_validate_account_move.py:39 +#: code:addons/account/wizard/account_validate_account_move.py:61 +#, python-format +msgid "Warning" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_analytic_open +msgid "Contracts/Analytic Accounts" +msgstr "" + +#. module: account +#: field:account.bank.statement,ending_details_ids:0 +msgid "Closing Cashbox" +msgstr "" + +#. module: account +#: view:account.journal:0 +#: field:res.partner.bank,journal_id:0 +msgid "Account Journal" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_paidinvoice0 +#: model:process.node,name:account.process_node_supplierpaidinvoice0 +msgid "Paid invoice" +msgstr "" + +#. module: account +#: help:account.partner.reconcile.process,next_partner_id:0 +msgid "" +"This field shows you the next partner that will be automatically chosen by " +"the system to go through the reconciliation process, based on the latest day " +"it have been reconciled." +msgstr "" + +#. module: account +#: field:account.move.line.reconcile.writeoff,comment:0 +msgid "Comment" +msgstr "" + +#. module: account +#: field:account.tax,domain:0 +#: field:account.tax.template,domain:0 +msgid "Domain" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_use_model +msgid "Use model" +msgstr "" + +#. module: account +#: code:addons/account/account.py:429 +#, python-format +msgid "Unable to adapt the initial balance (negative value)!" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_moves_purchase +msgid "" +"This view is used by accountants in order to record entries massively in " +"OpenERP. If you want to record a supplier invoice, start by recording the " +"line of the expense account, OpenERP will propose to you automatically the " +"Tax related to this account and the counter-part \"Account Payable\"." +msgstr "" + +#. module: account +#: view:account.invoice.line:0 +#: field:account.invoice.tax,invoice_id:0 +#: model:ir.model,name:account.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Customer And Supplier Refunds" +msgstr "Devoluciones de clientes y proveedores" + +#. module: account +#: field:account.financial.report,sign:0 +msgid "Sign on Reports" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_fiscalyear_close.py:73 +#, python-format +msgid "The periods to generate opening entries were not found" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_view +msgid "Root/View" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3121 +#, python-format +msgid "OPEJ" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +msgid "PRO-FORMA" +msgstr "" + +#. module: account +#: selection:account.entries.report,move_line_state:0 +#: view:account.move.line:0 +#: selection:account.move.line,state:0 +msgid "Unbalanced" +msgstr "" + +#. module: account +#: selection:account.move.line,centralisation:0 +msgid "Normal" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_email_templates +#: model:ir.ui.menu,name:account.menu_email_templates +msgid "Email Templates" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Optional Information" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_fiscalyear_close.py:84 +#, python-format +msgid "The journal must have default credit and debit account" +msgstr "" + +#. module: account +#: report:account.general.journal:0 +msgid ":" +msgstr "" + +#. module: account +#: selection:account.account,currency_mode:0 +msgid "At Date" +msgstr "" + +#. module: account +#: help:account.move.line,date_maturity:0 +msgid "" +"This field is used for payable and receivable journal entries. You can put " +"the limit date for the payment of this line." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_multi_currency +msgid "Multi-Currencies" +msgstr "" + +#. module: account +#: field:account.model.line,date_maturity:0 +msgid "Maturity Date" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1302 +#, python-format +msgid "Bad account !" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3108 +#, python-format +msgid "Sales Journal" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_move_journal.py:104 +#, python-format +msgid "Open Journal Items !" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_invoice_tax +msgid "Invoice Tax" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1277 +#, python-format +msgid "No piece number !" +msgstr "" + +#. module: account +#: view:account.financial.report:0 +#: model:ir.ui.menu,name:account.menu_account_report_tree_hierarchy +msgid "Account Reports Hierarchy" +msgstr "" + +#. module: account +#: help:account.account.template,chart_template_id:0 +msgid "" +"This optional field allow you to link an account template to a specific " +"chart template that may differ from the one its root parent belongs to. This " +"allow you to define chart templates that extend another and complete it with " +"few new accounts (You don't need to define the whole structure that is " +"common to both several times)." +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Unposted Journal Entries" +msgstr "" + +#. module: account +#: view:product.product:0 +#: view:product.template:0 +msgid "Sales Properties" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_manual_reconcile +msgid "Manual Reconciliation" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Total amount due:" +msgstr "" + +#. module: account +#: field:account.analytic.chart,to_date:0 +#: field:project.account.analytic.line,to_date:0 +msgid "To" +msgstr "" + +#. module: account +#: selection:account.move.line,centralisation:0 +#: code:addons/account/account.py:1518 +#, python-format +msgid "Currency Adjustment" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close,fy_id:0 +#: field:account.fiscalyear.close.state,fy_id:0 +msgid "Fiscal Year to close" +msgstr "" + +#. module: account +#: view:account.invoice.cancel:0 +#: model:ir.actions.act_window,name:account.action_account_invoice_cancel +msgid "Cancel Selected Invoices" +msgstr "" + +#. module: account +#: help:account.account.type,report_type:0 +msgid "" +"This field is used to generate legal reports: profit and loss, balance sheet." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_review_payment_terms_installer +msgid "" +"Payment terms define the conditions to pay a customer or supplier invoice in " +"one or several payments. Customers periodic reminders will use the payment " +"terms for each letter. Each customer or supplier can be assigned to one of " +"these payment terms." +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "May" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.account.template:0 +#: selection:account.aged.trial.balance,result_selection:0 +#: selection:account.common.partner.report,result_selection:0 +#: selection:account.partner.balance,result_selection:0 +#: selection:account.partner.ledger,result_selection:0 +#: code:addons/account/report/account_partner_balance.py:299 +#, python-format +msgid "Payable Accounts" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:732 +#, python-format +msgid "Global taxes defined, but they are not in invoice lines !" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_chart_template +msgid "Templates for Account Chart" +msgstr "" + +#. module: account +#: help:account.model.line,sequence:0 +msgid "" +"The sequence field is used to order the resources from lower sequences to " +"higher ones." +msgstr "" + +#. module: account +#: field:account.tax.code,code:0 +#: field:account.tax.code.template,code:0 +msgid "Case Code" +msgstr "" + +#. module: account +#: view:validate.account.move:0 +msgid "Post Journal Entries of a Journal" +msgstr "" + +#. module: account +#: view:product.product:0 +msgid "Sale Taxes" +msgstr "" + +#. module: account +#: field:account.financial.report,name:0 +msgid "Report Name" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_cash +#: selection:account.analytic.journal,type:0 +#: selection:account.bank.accounts.wizard,account_type:0 +#: selection:account.entries.report,type:0 +#: selection:account.journal,type:0 +#: code:addons/account/account.py:3003 +#, python-format +msgid "Cash" +msgstr "" + +#. module: account +#: field:account.fiscal.position.account,account_dest_id:0 +#: field:account.fiscal.position.account.template,account_dest_id:0 +msgid "Account Destination" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1431 +#: code:addons/account/account.py:1460 +#: code:addons/account/account.py:1467 +#: code:addons/account/account_invoice.py:920 +#: code:addons/account/account_move_line.py:1104 +#: code:addons/account/wizard/account_automatic_reconcile.py:152 +#: code:addons/account/wizard/account_fiscalyear_close.py:73 +#: code:addons/account/wizard/account_fiscalyear_close.py:83 +#: code:addons/account/wizard/account_fiscalyear_close.py:86 +#: code:addons/account/wizard/account_move_journal.py:165 +#: code:addons/account/wizard/account_report_aged_partner_balance.py:56 +#: code:addons/account/wizard/account_report_aged_partner_balance.py:58 +#, python-format +msgid "UserError" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_supplierpaymentorder0 +msgid "Payment of invoices" +msgstr "" + +#. module: account +#: field:account.bank.statement.line,sequence:0 +#: field:account.financial.report,sequence:0 +#: field:account.invoice.tax,sequence:0 +#: view:account.journal:0 +#: field:account.journal.column,sequence:0 +#: field:account.model.line,sequence:0 +#: field:account.payment.term.line,sequence:0 +#: field:account.sequence.fiscalyear,sequence_id:0 +#: field:account.tax,sequence:0 +#: field:account.tax.code,sequence:0 +#: field:account.tax.template,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: account +#: constraint:product.category:0 +msgid "Error ! You cannot create recursive categories." +msgstr "" + +#. module: account +#: help:account.model.line,quantity:0 +msgid "The optional quantity on entries." +msgstr "" + +#. module: account +#: view:account.financial.report:0 +msgid "Parent Report" +msgstr "" + +#. module: account +#: view:account.state.open:0 +msgid "Yes" +msgstr "" + +#. module: account +#: view:report.account_type.sales:0 +msgid "Sales by Account type" +msgstr "" + +#. module: account +#: help:account.invoice,move_id:0 +msgid "Link to the automatically generated Journal Items." +msgstr "" + +#. module: account +#: selection:account.installer,period:0 +msgid "Monthly" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_journal_view +msgid "" +"Here you can customize an existing journal view or create a new view. " +"Journal views determine the way you can record entries in your journal. " +"Select the fields you want to appear in a journal and determine the sequence " +"in which they will appear. Then you can create a new journal and link your " +"view to it." +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_asset +msgid "Asset" +msgstr "" + +#. module: account +#: view:analytic.entries.report:0 +msgid " 7 Days " +msgstr "" + +#. module: account +#: field:account.bank.statement,balance_end:0 +msgid "Computed Balance" +msgstr "" + +#. module: account +#: field:account.account,parent_id:0 +#: field:account.financial.report,parent_id:0 +msgid "Parent" +msgstr "" + +#. module: account +#: help:account.payment.term.line,days2:0 +msgid "" +"Day of the month, set -1 for the last day of the current month. If it's " +"positive, it gives the day of the next month. Set 0 for net days (otherwise " +"it's based on the beginning of the month)." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_legal_statement +msgid "Legal Reports" +msgstr "" + +#. module: account +#: field:account.tax.code,sum_period:0 +msgid "Period Sum" +msgstr "" + +#. module: account +#: help:account.tax,sequence:0 +msgid "" +"The sequence field is used to order the tax lines from the lowest sequences " +"to the higher ones. The order is important if you have a tax with several " +"tax children. In this case, the evaluation order is important." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_cashbox_line +msgid "CashBox Line" +msgstr "" + +#. module: account +#: view:account.partner.ledger:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: model:ir.actions.report.xml,name:account.account_3rdparty_ledger +#: model:ir.actions.report.xml,name:account.account_3rdparty_ledger_other +#: model:ir.ui.menu,name:account.menu_account_partner_ledger +msgid "Partner Ledger" +msgstr "" + +#. module: account +#: selection:account.tax.template,type:0 +msgid "Fixed" +msgstr "" + +#. module: account +#: code:addons/account/account.py:629 +#: code:addons/account/account.py:642 +#: code:addons/account/account.py:645 +#: code:addons/account/account.py:664 +#: code:addons/account/account.py:787 +#: code:addons/account/account.py:1077 +#: code:addons/account/account_invoice.py:732 +#: code:addons/account/account_invoice.py:735 +#: code:addons/account/account_invoice.py:738 +#: code:addons/account/account_move_line.py:97 +#: code:addons/account/account_move_line.py:750 +#: code:addons/account/account_move_line.py:803 +#, python-format +msgid "Warning !" +msgstr "" + +#. module: account +#: field:account.entries.report,move_line_state:0 +msgid "State of Move Line" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_line_reconcile +msgid "Account move line reconcile" +msgstr "" + +#. module: account +#: view:account.subscription.generate:0 +#: model:ir.model,name:account.model_account_subscription_generate +msgid "Subscription Compute" +msgstr "" + +#. module: account +#: field:account.bank.statement.line,partner_id:0 +#: view:account.entries.report:0 +#: field:account.entries.report,partner_id:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: view:account.invoice:0 +#: field:account.invoice,partner_id:0 +#: field:account.invoice.line,partner_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,partner_id:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.model.line,partner_id:0 +#: view:account.move:0 +#: field:account.move,partner_id:0 +#: view:account.move.line:0 +#: field:account.move.line,partner_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,partner_id:0 +#: model:ir.model,name:account.model_res_partner +#: field:report.invoice.created,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: account +#: help:account.change.currency,currency_id:0 +msgid "Select a currency to apply on the invoice" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3446 +#, python-format +msgid "" +"The bank account defined on the selected chart of accounts hasn't a code." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_invoice_refund.py:108 +#, python-format +msgid "Can not %s draft/proforma/cancel invoice." +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:810 +#, python-format +msgid "No Invoice Lines !" +msgstr "" + +#. module: account +#: view:account.financial.report:0 +msgid "Report Type" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: view:account.bank.statement:0 +#: field:account.bank.statement,state:0 +#: field:account.entries.report,move_state:0 +#: view:account.fiscalyear:0 +#: field:account.fiscalyear,state:0 +#: view:account.invoice:0 +#: field:account.invoice,state:0 +#: view:account.invoice.report:0 +#: field:account.journal.period,state:0 +#: field:account.move,state:0 +#: view:account.move.line:0 +#: field:account.move.line,state:0 +#: field:account.period,state:0 +#: view:account.subscription:0 +#: field:account.subscription,state:0 +#: field:report.invoice.created,state:0 +msgid "State" +msgstr "" + +#. module: account +#: help:account.open.closed.fiscalyear,fyear_id:0 +msgid "" +"Select Fiscal Year which you want to remove entries for its End of year " +"entries journal" +msgstr "" + +#. module: account +#: field:account.tax.template,type_tax_use:0 +msgid "Tax Use In" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:315 +#, python-format +msgid "" +"The statement balance is incorrect !\n" +"The expected balance (%.2f) is different than the computed one. (%.2f)" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:353 +#, python-format +msgid "The account entries lines are not in valid state." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_analytic_account_tree2 +msgid "" +"The normal chart of accounts has a structure defined by the legal " +"requirement of the country. The analytic chart of accounts structure should " +"reflect your own business needs in term of costs/revenues reporting. They " +"are usually structured by contracts, projects, products or departements. " +"Most of the OpenERP operations (invoices, timesheets, expenses, etc) " +"generate analytic entries on the related account." +msgstr "" + +#. module: account +#: field:account.account.type,close_method:0 +msgid "Deferral Method" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:379 +#, python-format +msgid "Invoice '%s' is paid." +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_electronicfile0 +msgid "Automatic entry" +msgstr "" + +#. module: account +#: constraint:account.tax.code.template:0 +msgid "Error ! You can not create recursive Tax Codes." +msgstr "" + +#. module: account +#: help:account.journal,group_invoice_lines:0 +msgid "" +"If this box is checked, the system will try to group the accounting lines " +"when generating them from invoices." +msgstr "" + +#. module: account +#: help:account.account,reconcile:0 +msgid "" +"Check this box if this account allows reconciliation of journal items." +msgstr "" + +#. module: account +#: help:account.period,state:0 +msgid "" +"When monthly periods are created. The state is 'Draft'. At the end of " +"monthly period it is in 'Done' state." +msgstr "" + +#. module: account +#: report:account.analytic.account.inverted.balance:0 +msgid "Inverted Analytic Balance -" +msgstr "" + +#. module: account +#: view:account.move.bank.reconcile:0 +msgid "Open for Bank Reconciliation" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: model:ir.actions.act_window,name:account.action_account_analytic_line_form +msgid "Analytic Entries" +msgstr "" + +#. module: account +#: view:report.account_type.sales:0 +msgid "This Months Sales by type" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Associated Partner" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1332 +#, python-format +msgid "You must first select a partner !" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: field:account.invoice,comment:0 +msgid "Additional Information" +msgstr "" + +#. module: account +#: help:account.invoice,state:0 +msgid "" +" * The 'Draft' state is used when a user is encoding a new and unconfirmed " +"Invoice. \n" +"* The 'Pro-forma' when invoice is in Pro-forma state,invoice does not have " +"an invoice number. \n" +"* The 'Open' state is used when user create invoice,a invoice number is " +"generated.Its in open state till user does not pay invoice. \n" +"* The 'Paid' state is set automatically when the invoice is paid. Its " +"related journal entries may or may not be reconciled. \n" +"* The 'Cancelled' state is used when user cancel invoice." +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,residual:0 +msgid "Total Residual" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_invoiceinvoice0 +#: model:process.node,note:account.process_node_supplierinvoiceinvoice0 +msgid "Invoice's state is Open" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_tax_code_tree +msgid "" +"The chart of taxes is used to generate your periodical tax statement. You " +"will see the taxes with codes related to your legal statement according to " +"your country." +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:428 +#, python-format +msgid "" +"Can not find a chart of accounts for this company, you should create one." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Proforma" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +msgid "J.C. /Move name" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_open_closed_fiscalyear +msgid "Choose Fiscal Year" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3111 +#, python-format +msgid "Purchase Refund Journal" +msgstr "Diario de reembolso de compras" + +#. module: account +#: help:account.tax.template,amount:0 +msgid "For Tax Type percent enter % ratio between 0-1." +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Current Accounts" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Group by Invoice Date" +msgstr "" + +#. module: account +#: view:account.invoice.refund:0 +msgid "" +"Modify Invoice: Cancels the current invoice and creates a new copy of it " +"ready for editing." +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,period_id:0 +#: view:account.bank.statement:0 +#: field:account.bank.statement,period_id:0 +#: view:account.entries.report:0 +#: field:account.entries.report,period_id:0 +#: view:account.fiscalyear:0 +#: report:account.general.ledger_landscape:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: field:account.journal.period,period_id:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: view:account.move:0 +#: field:account.move,period_id:0 +#: view:account.move.line:0 +#: field:account.move.line,period_id:0 +#: view:account.period:0 +#: field:account.subscription,period_nbr:0 +#: field:account.tax.chart,period_id:0 +#: field:account.treasury.report,period_id:0 +#: field:validate.account.move,period_id:0 +msgid "Period" +msgstr "" + +#. module: account +#: help:account.account,adjusted_balance:0 +msgid "" +"Total amount (in Company currency) for transactions held in secondary " +"currency for this account." +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Net Total:" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_generic_reporting +msgid "Generic Reporting" +msgstr "" + +#. module: account +#: field:account.move.line.reconcile.writeoff,journal_id:0 +msgid "Write-Off Journal" +msgstr "" + +#. module: account +#: help:res.partner,property_payment_term:0 +msgid "" +"This payment term will be used instead of the default one for the current " +"partner" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Compute Code for Taxes Included Prices" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1030 +#, python-format +msgid "" +"You can not cancel an invoice which is partially paid! You need to " +"unreconcile related payment entries first!" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_income_categ:0 +msgid "Income Category Account" +msgstr "" + +#. module: account +#: field:account.account,adjusted_balance:0 +msgid "Adjusted Balance" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscal_position_template_form +#: model:ir.ui.menu,name:account.menu_action_account_fiscal_position_form_template +msgid "Fiscal Position Templates" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Int.Type" +msgstr "" + +#. module: account +#: field:account.move.line,tax_amount:0 +msgid "Tax/Base Amount" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid " Valuation: Percent" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_invoice_tree3 +msgid "" +"With Customer Refunds you can manage the credit notes for your customers. A " +"refund is a document that credits an invoice completely or partially. You " +"can easily generate refunds and reconcile them directly from the invoice " +"form." +msgstr "" +"Con las Notas de crédito a clientes puede gestionar las devoluciones de sus " +"clientes. Una Nota de Crédito es un documento que reembolsa una factura " +"completa o parcialmente. Puede generar fácilmente Notas de Crédito y " +"conciliarlas directamente desde el formulario de factura." + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_vat_declaration +msgid "" +"This menu print a VAT declaration based on invoices or payments. You can " +"select one or several periods of the fiscal year. Information required for a " +"tax declaration is automatically generated by OpenERP from invoices (or " +"payments, in some countries). This data is updated in real time. That’s very " +"useful because it enables you to preview at any time the tax that you owe at " +"the start and end of the month or quarter." +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Tel. :" +msgstr "" + +#. module: account +#: field:account.account,company_currency_id:0 +msgid "Company Currency" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,chart_account_id:0 +#: field:account.balance.report,chart_account_id:0 +#: field:account.central.journal,chart_account_id:0 +#: field:account.common.account.report,chart_account_id:0 +#: field:account.common.journal.report,chart_account_id:0 +#: field:account.common.partner.report,chart_account_id:0 +#: field:account.common.report,chart_account_id:0 +#: field:account.general.journal,chart_account_id:0 +#: field:account.partner.balance,chart_account_id:0 +#: field:account.partner.ledger,chart_account_id:0 +#: field:account.print.journal,chart_account_id:0 +#: field:account.report.general.ledger,chart_account_id:0 +#: field:account.vat.declaration,chart_account_id:0 +#: field:accounting.report,chart_account_id:0 +msgid "Chart of Account" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_paymententries0 +#: model:process.transition,name:account.process_transition_reconcilepaid0 +msgid "Payment" +msgstr "" + +#. module: account +#: field:account.bank.statement,balance_end_real:0 +#: field:account.treasury.report,ending_balance:0 +msgid "Ending Balance" +msgstr "" + +#. module: account +#: help:account.move.line,blocked:0 +msgid "" +"You can check this box to mark this journal item as a litigation with the " +"associated partner" +msgstr "" + +#. module: account +#: field:account.move.line,reconcile_partial_id:0 +#: view:account.move.line.reconcile:0 +msgid "Partial Reconcile" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_inverted_balance +msgid "Account Analytic Inverted Balance" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_common_report +msgid "Account Common Report" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: view:analytic.entries.report:0 +msgid "current month" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1052 +#, python-format +msgid "" +"No period defined for this date: %s !\n" +"Please create one." +msgstr "" + +#. module: account +#: model:process.transition,name:account.process_transition_filestatement0 +msgid "Automatic import of the bank sta" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_journal_view +#: model:ir.ui.menu,name:account.menu_action_account_journal_view +msgid "Journal Views" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_bank_reconcile +msgid "Move bank reconcile" +msgstr "" + +#. module: account +#: field:account.financial.report,account_type_ids:0 +#: model:ir.actions.act_window,name:account.action_account_type_form +#: model:ir.ui.menu,name:account.menu_action_account_type_form +msgid "Account Types" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid " Value amount: n.a" +msgstr "" + +#. module: account +#: view:account.automatic.reconcile:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: view:account.move.line.reconcile:0 +#: view:account.move.line.reconcile.select:0 +#: code:addons/account/wizard/account_move_line_reconcile_select.py:45 +#: model:ir.ui.menu,name:account.periodical_processing_reconciliation +#: model:process.node,name:account.process_node_reconciliation0 +#: model:process.node,name:account.process_node_supplierreconciliation0 +#, python-format +msgid "Reconciliation" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +#: field:account.chart.template,property_account_receivable:0 +msgid "Receivable Account" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "" +"This button only appears when the state of the invoice is 'paid' (showing " +"that it has been fully reconciled) and auto-computed boolean 'reconciled' is " +"False (depicting that it's not the case anymore). In other words, the " +"invoice has been dereconciled and it does not fit anymore the 'paid' state. " +"You should press this button to re-open it and let it continue its normal " +"process after having resolved the eventual exceptions it may have created." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscalyear_close_state +msgid "Fiscalyear Close state" +msgstr "" + +#. module: account +#: field:account.invoice.refund,journal_id:0 +msgid "Refund Journal" +msgstr "Diario reembolso" + +#. module: account +#: report:account.account.balance:0 +#: report:account.central.journal:0 +#: report:account.general.journal:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.partner.balance:0 +msgid "Filter By" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_invoice_tree1 +msgid "" +"With Customer Invoices you can create and manage sales invoices issued to " +"your customers. OpenERP can also generate draft invoices automatically from " +"sales orders or deliveries. You should only confirm them before sending them " +"to your customers." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_period_close.py:51 +#, python-format +msgid "" +"In order to close a period, you must first post related journal entries." +msgstr "" + +#. module: account +#: view:account.entries.report:0 +#: view:board.board:0 +#: model:ir.actions.act_window,name:account.action_company_analysis_tree +msgid "Company Analysis" +msgstr "" + +#. module: account +#: help:account.invoice,account_id:0 +msgid "The partner account used for this invoice." +msgstr "" + +#. module: account +#: code:addons/account/account.py:3296 +#, python-format +msgid "Tax %.2f%%" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Contacts" +msgstr "" + +#. module: account +#: field:account.tax.code,parent_id:0 +#: view:account.tax.code.template:0 +#: field:account.tax.code.template,parent_id:0 +msgid "Parent Code" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_payment_term_line +msgid "Payment Term Line" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3109 +#, python-format +msgid "Purchase Journal" +msgstr "" + +#. module: account +#: view:account.invoice.refund:0 +msgid "Refund Invoice: Creates the refund invoice, ready for editing." +msgstr "" +"NotadeCrédito: Crea la factura de reembolso, preparada para editarla." + +#. module: account +#: field:account.invoice.line,price_subtotal:0 +msgid "Subtotal" +msgstr "" + +#. module: account +#: view:account.vat.declaration:0 +msgid "Print Tax Statement" +msgstr "" + +#. module: account +#: view:account.model.line:0 +msgid "Journal Entry Model Line" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: field:account.invoice,date_due:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,date_due:0 +#: field:report.invoice.created,date_due:0 +msgid "Due Date" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_supplier +#: model:ir.ui.menu,name:account.menu_finance_payables +msgid "Suppliers" +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Accounts Type Allowed (empty for no control)" +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "Supplier Accounting Properties" +msgstr "" + +#. module: account +#: help:account.move.line,amount_residual:0 +msgid "" +"The residual amount on a receivable or payable of a journal entry expressed " +"in the company currency." +msgstr "" + +#. module: account +#: view:account.tax.code:0 +msgid "Statistics" +msgstr "" + +#. module: account +#: field:account.analytic.chart,from_date:0 +#: field:project.account.analytic.line,from_date:0 +msgid "From" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscalyear_close +msgid "Fiscalyear Close" +msgstr "" + +#. module: account +#: sql_constraint:account.account:0 +msgid "The code of the account must be unique per company !" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: model:ir.actions.act_window,name:account.act_account_journal_2_account_invoice_opened +msgid "Unpaid Invoices" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:495 +#, python-format +msgid "The payment term of supplier does not have a payment term line!" +msgstr "" + +#. module: account +#: field:account.move.line.reconcile,debit:0 +msgid "Debit amount" +msgstr "" + +#. module: account +#: view:board.board:0 +#: model:ir.actions.act_window,name:account.action_treasory_graph +msgid "Treasury" +msgstr "" + +#. module: account +#: view:account.aged.trial.balance:0 +#: view:account.analytic.balance:0 +#: view:account.analytic.cost.ledger:0 +#: view:account.analytic.cost.ledger.journal.report:0 +#: view:account.analytic.inverted.balance:0 +#: view:account.analytic.journal.report:0 +#: view:account.common.report:0 +msgid "Print" +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Accounts Allowed (empty for no control)" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_account_template +msgid "Template Account Fiscal Mapping" +msgstr "" + +#. module: account +#: view:board.board:0 +msgid "Draft Customer Invoices" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_configuration_misc +msgid "Miscellaneous" +msgstr "" + +#. module: account +#: help:res.partner,debit:0 +msgid "Total amount you have to pay to this supplier." +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_analytic0 +#: model:process.node,name:account.process_node_analyticcost0 +msgid "Analytic Costs" +msgstr "" + +#. module: account +#: field:account.analytic.journal,name:0 +#: report:account.general.journal:0 +#: field:account.journal,name:0 +msgid "Journal Name" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Next Partner Entries to reconcile" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Smallest Text" +msgstr "" + +#. module: account +#: model:res.groups,name:account.group_account_invoice +msgid "Invoicing & Payments" +msgstr "" + +#. module: account +#: help:account.invoice,internal_number:0 +msgid "" +"Unique number of the invoice, computed automatically when the invoice is " +"created." +msgstr "" + +#. module: account +#: constraint:account.bank.statement.line:0 +msgid "" +"The amount of the voucher must be the same amount as the one on the " +"statement line" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_expense +#: model:account.financial.report,name:account.account_financial_report_expense0 +msgid "Expense" +msgstr "" + +#. module: account +#: help:account.chart,fiscalyear:0 +msgid "Keep empty for all open fiscal years" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1105 +#, python-format +msgid "The account move (%s) for centralisation has been confirmed!" +msgstr "" + +#. module: account +#: help:account.move.line,amount_currency:0 +msgid "" +"The amount expressed in an optional other currency if it is a multi-currency " +"entry." +msgstr "" + +#. module: account +#: code:addons/account/account.py:1307 +#, python-format +msgid "" +"You can not validate a non-balanced entry !\n" +"Make sure you have configured payment terms properly !\n" +"The latest payment term line should be of the type \"Balance\" !" +msgstr "" + +#. module: account +#: view:account.account:0 +#: report:account.analytic.account.journal:0 +#: field:account.bank.statement,currency:0 +#: report:account.central.journal:0 +#: view:account.entries.report:0 +#: field:account.entries.report,currency_id:0 +#: report:account.general.journal:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: field:account.invoice,currency_id:0 +#: field:account.invoice.report,currency_id:0 +#: field:account.journal,currency:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.model.line,currency_id:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: field:account.move.line,currency_id:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:analytic.entries.report,currency_id:0 +#: model:ir.model,name:account.model_res_currency +#: field:report.account.sales,currency_id:0 +#: field:report.account_type.sales,currency_id:0 +#: field:report.invoice.created,currency_id:0 +#: field:res.partner.bank,currency_id:0 +msgid "Currency" +msgstr "" + +#. module: account +#: help:account.bank.statement.line,sequence:0 +msgid "" +"Gives the sequence order when displaying a list of bank statement lines." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_validentries0 +msgid "Accountant validates the accounting entries coming from the invoice." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_fiscalyear_form +msgid "" +"Define your company's financial year according to your needs. A financial " +"year is a period at the end of which a company's accounts are made up " +"(usually 12 months). The financial year is usually referred to by the date " +"in which it ends. For example, if a company's financial year ends November " +"30, 2011, then everything between December 1, 2010 and November 30, 2011 " +"would be referred to as FY 2011. You are not obliged to follow the actual " +"calendar year." +msgstr "" + +#. module: account +#: view:account.entries.report:0 +#: model:ir.actions.act_window,name:account.act_account_acount_move_line_reconcile_open +msgid "Reconciled entries" +msgstr "" + +#. module: account +#: field:account.invoice,address_contact_id:0 +msgid "Contact Address" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2256 +#, python-format +msgid "Wrong model !" +msgstr "" + +#. module: account +#: field:account.invoice.refund,period:0 +msgid "Force period" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_partner_balance +msgid "Print Account Partner Balance" +msgstr "" + +#. module: account +#: help:account.financial.report,sign:0 +msgid "" +"For accounts that are typically more debited than credited and that you " +"would like to print as negative amounts in your reports, you should reverse " +"the sign of the balance; e.g.: Expense account. The same applies for " +"accounts that are typically more credited than debited and that you would " +"like to print as positive amounts in your reports; e.g.: Income account." +msgstr "" + +#. module: account +#: field:res.partner,contract_ids:0 +msgid "Contracts" +msgstr "" + +#. module: account +#: field:account.cashbox.line,ending_id:0 +#: field:account.cashbox.line,starting_id:0 +#: field:account.entries.report,reconcile_id:0 +#: field:account.financial.report,balance:0 +msgid "unknown" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close,journal_id:0 +#: code:addons/account/account.py:3113 +#, python-format +msgid "Opening Entries Journal" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_customerinvoice0 +msgid "Draft invoices are checked, validated and printed." +msgstr "" + +#. module: account +#: help:account.chart.template,property_reserve_and_surplus_account:0 +msgid "" +"This Account is used for transferring Profit/Loss(If It is Profit: Amount " +"will be added, Loss: Amount will be deducted.), Which is calculated from " +"Profilt & Loss Report" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:808 +#, python-format +msgid "Please define sequence on the journal related to this invoice." +msgstr "" + +#. module: account +#: view:account.move:0 +#: field:account.move,narration:0 +#: view:account.move.line:0 +#: field:account.move.line,narration:0 +msgid "Internal Note" +msgstr "" + +#. module: account +#: view:report.account.sales:0 +msgid "This year's Sales by type" +msgstr "" + +#. module: account +#: view:account.analytic.cost.ledger.journal.report:0 +msgid "Cost Ledger for Period" +msgstr "" + +#. module: account +#: help:account.tax,child_depend:0 +#: help:account.tax.template,child_depend:0 +msgid "" +"Set if the tax computation is based on the computation of child taxes rather " +"than on the total amount." +msgstr "" + +#. module: account +#: selection:account.tax,applicable_type:0 +msgid "Given by Python Code" +msgstr "" + +#. module: account +#: field:account.analytic.journal,code:0 +msgid "Journal Code" +msgstr "" + +#. module: account +#: help:account.tax.code,sign:0 +msgid "" +"You can specify here the coefficient that will be used when consolidating " +"the amount of this case into its parent. For example, set 1/-1 if you want " +"to add/substract it." +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: field:account.move.line,amount_residual:0 +#: field:account.move.line,amount_residual_currency:0 +msgid "Residual Amount" +msgstr "" + +#. module: account +#: field:account.invoice,move_lines:0 +#: field:account.move.reconcile,line_id:0 +msgid "Entry Lines" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_view_financial_accounts_installer +msgid "Review your Financial Accounts" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_open_journal_button +#: model:ir.actions.act_window,name:account.action_validate_account_move +msgid "Open Journal" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +msgid "KI" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.journal:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "Period from" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3110 +#, python-format +msgid "Sales Refund Journal" +msgstr "Diario de reembolso de ventas" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +#: view:account.payment.term:0 +msgid "Information" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_bankstatement0 +msgid "Registered payment" +msgstr "" + +#. module: account +#: view:account.fiscalyear.close.state:0 +msgid "Close states of Fiscal year and periods" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Product Information" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: model:ir.ui.menu,name:account.next_id_40 +msgid "Analytic" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_invoiceinvoice0 +#: model:process.node,name:account.process_node_supplierinvoiceinvoice0 +msgid "Create Invoice" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,purchase_tax_rate:0 +msgid "Purchase Tax(%)" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:810 +#, python-format +msgid "Please create some invoice lines." +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Dear Sir/Madam," +msgstr "" + +#. module: account +#: field:account.vat.declaration,display_detail:0 +msgid "Display Detail" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3118 +#, python-format +msgid "SCNJ" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_analyticinvoice0 +msgid "" +"Analytic costs (timesheets, some purchased products, ...) come from analytic " +"accounts. These generate draft invoices." +msgstr "" + +#. module: account +#: help:account.journal,view_id:0 +msgid "" +"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." +msgstr "" + +#. module: account +#: field:account.period,date_stop:0 +#: model:ir.ui.menu,name:account.menu_account_end_year_treatments +msgid "End of Period" +msgstr "" + +#. module: account +#: field:account.account,financial_report_ids:0 +#: field:account.account.template,financial_report_ids:0 +#: model:ir.actions.act_window,name:account.action_account_financial_report_tree +#: model:ir.actions.act_window,name:account.action_account_report +#: model:ir.actions.act_window,name:account.action_account_report_bs +#: model:ir.actions.act_window,name:account.action_account_report_pl +#: model:ir.ui.menu,name:account.menu_account_reports +msgid "Financial Reports" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,period_from:0 +#: field:account.balance.report,period_from:0 +#: report:account.central.journal:0 +#: field:account.central.journal,period_from:0 +#: field:account.common.account.report,period_from:0 +#: field:account.common.journal.report,period_from:0 +#: field:account.common.partner.report,period_from:0 +#: field:account.common.report,period_from:0 +#: report:account.general.journal:0 +#: field:account.general.journal,period_from:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,period_from:0 +#: field:account.partner.ledger,period_from:0 +#: field:account.print.journal,period_from:0 +#: field:account.report.general.ledger,period_from:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: report:account.vat.declaration:0 +#: field:account.vat.declaration,period_from:0 +#: field:accounting.report,period_from:0 +#: field:accounting.report,period_from_cmp:0 +msgid "Start Period" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,direction_selection:0 +msgid "Analysis Direction" +msgstr "" + +#. module: account +#: field:res.partner,ref_companies:0 +msgid "Companies that refers to partner" +msgstr "" + +#. module: account +#: view:account.journal:0 +#: field:account.journal.column,view_id:0 +#: view:account.journal.view:0 +#: field:account.journal.view,name:0 +#: model:ir.model,name:account.model_account_journal_view +msgid "Journal View" +msgstr "" + +#. module: account +#: view:account.move.line:0 +#: code:addons/account/account_move_line.py:1046 +#, python-format +msgid "Total credit" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_suppliervalidentries0 +msgid "Accountant validates the accounting entries coming from the invoice. " +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Best regards." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Unpaid" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_tax_code_template +msgid "Tax Code Template" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Document: Customer account statement" +msgstr "" + +#. module: account +#: field:account.account.type,report_type:0 +msgid "P&L / BS Category" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_invoice_tree4 +msgid "" +"With Supplier Refunds you can manage the credit notes you receive from your " +"suppliers. A refund is a document that credits an invoice completely or " +"partially. You can easily generate refunds and reconcile them directly from " +"the invoice form." +msgstr "" +"Con Notas de Crédito de proveedor puede gestionar las facturas de reembolso " +"que recibe de sus proveedores. Una Nota de Créito es un documento que " +"reembolsa una factura total o parcialmente. Puede fácilmente generar Notas " +"de Crédito y conciliarlas directamente desde el formulario de factura." + +#. module: account +#: view:account.account.template:0 +msgid "Receivale Accounts" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_bank_statement_periodic_tree +#: model:ir.actions.act_window,name:account.action_bank_statement_tree +#: model:ir.ui.menu,name:account.menu_bank_statement_tree +msgid "Bank Statements" +msgstr "" + +#. module: account +#: field:account.account,balance:0 +#: report:account.account.balance:0 +#: selection:account.account.type,close_method:0 +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.central.journal:0 +#: field:account.entries.report,balance:0 +#: report:account.general.journal:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: field:account.invoice,residual:0 +#: field:account.move.line,balance:0 +#: report:account.partner.balance:0 +#: selection:account.payment.term.line,value:0 +#: selection:account.tax,type:0 +#: selection:account.tax.template,type:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.treasury.report,balance:0 +#: field:report.account.receivable,balance:0 +#: field:report.aged.receivable,balance:0 +msgid "Balance" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_supplierbankstatement0 +msgid "Manually or automatically entered in the system" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: report:account.general.ledger_landscape:0 +msgid "Display Account" +msgstr "" + +#. module: account +#: view:account.account.type:0 +msgid "Closing Method" +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: model:account.account.type,name:account.data_account_type_payable +#: selection:account.entries.report,type:0 +msgid "Payable" +msgstr "" + +#. module: account +#: view:report.account.sales:0 +#: view:report.account_type.sales:0 +#: view:report.hr.timesheet.invoice.journal:0 +msgid "This Year" +msgstr "" + +#. module: account +#: view:board.board:0 +msgid "Account Board" +msgstr "" + +#. module: account +#: view:account.model:0 +#: field:account.model,legend:0 +msgid "Legend" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Contract Data" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_moves_sale +msgid "" +"This view is used by accountants in order to record entries massively in " +"OpenERP. If you want to record a customer invoice, select the journal and " +"the period in the search toolbar. Then, start by recording the entry line of " +"the income account. OpenERP will propose to you automatically the Tax " +"related to this account and the counter-part \"Account receivable\"." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_automatic_reconcile.py:152 +#, python-format +msgid "You must select accounts to reconcile" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_entriesreconcile0 +msgid "Accounting entries are the first input of the reconciliation." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_period_form +msgid "" +"Here you can define a financial period, an interval of time in your " +"company's financial year. An accounting period typically is a month or a " +"quarter. It usually corresponds to the periods of the tax declaration. " +"Create and manage periods from here and decide whether a period should be " +"closed or left open depending on your company's activities over a specific " +"period." +msgstr "" + +#. module: account +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Filters By" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_manually0 +#: model:process.transition,name:account.process_transition_invoicemanually0 +msgid "Manual entry" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.move.line,move_id:0 +#: field:analytic.entries.report,move_id:0 +msgid "Move" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1153 +#, python-format +msgid "You can not change the tax, you should remove and recreate lines !" +msgstr "" + +#. module: account +#: view:analytic.entries.report:0 +msgid "Analytic Entries of last 365 days" +msgstr "" + +#. module: account +#: report:account.central.journal:0 +msgid "A/C No." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.act_account_journal_2_account_bank_statement +msgid "Bank statements" +msgstr "" + +#. module: account +#: help:account.addtmpl.wizard,cparent_id:0 +msgid "" +"Creates an account with the selected template under this existing parent." +msgstr "" + +#. module: account +#: selection:account.model.line,date_maturity:0 +msgid "Date of the day" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_move_bank_reconcile.py:49 +#, python-format +msgid "" +"You have to define the bank account\n" +"in the journal definition for reconciliation." +msgstr "" + +#. module: account +#: view:account.move.line.reconcile:0 +msgid "Reconciliation Transactions" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_common_menu +msgid "Common Report" +msgstr "" + +#. module: account +#: view:account.account:0 +#: field:account.account,child_consol_ids:0 +msgid "Consolidated Children" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_fiscalyear_close.py:87 +#, python-format +msgid "" +"The journal must have centralised counterpart without the Skipping draft " +"state option checked!" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Customer And Supplier Invoices" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_paymententries0 +#: model:process.transition,name:account.process_transition_paymentorderbank0 +#: model:process.transition,name:account.process_transition_paymentreconcile0 +msgid "Payment entries" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "July" +msgstr "" + +#. module: account +#: view:account.account:0 +msgid "Chart of accounts" +msgstr "" + +#. module: account +#: field:account.subscription.line,subscription_id:0 +msgid "Subscription" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_balance +msgid "Account Analytic Balance" +msgstr "" + +#. module: account +#: code:addons/account/account.py:412 +#, python-format +msgid "" +"No opening/closing period defined, please create one to set the initial " +"balance!" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,period_to:0 +#: field:account.balance.report,period_to:0 +#: report:account.central.journal:0 +#: field:account.central.journal,period_to:0 +#: field:account.common.account.report,period_to:0 +#: field:account.common.journal.report,period_to:0 +#: field:account.common.partner.report,period_to:0 +#: field:account.common.report,period_to:0 +#: report:account.general.journal:0 +#: field:account.general.journal,period_to:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,period_to:0 +#: field:account.partner.ledger,period_to:0 +#: field:account.print.journal,period_to:0 +#: field:account.report.general.ledger,period_to:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: report:account.vat.declaration:0 +#: field:account.vat.declaration,period_to:0 +#: field:accounting.report,period_to:0 +#: field:accounting.report,period_to_cmp:0 +msgid "End Period" +msgstr "" + +#. module: account +#: field:account.move.line,date_maturity:0 +msgid "Due date" +msgstr "" + +#. module: account +#: view:account.move.journal:0 +msgid "Standard Entries" +msgstr "" + +#. module: account +#: help:account.journal,type:0 +msgid "" +"Select 'Sale' for customer invoices journals. Select 'Purchase' for supplier " +"invoices journals. Select 'Cash' or 'Bank' for journals that are used in " +"customer or supplier payments. Select 'General' for miscellaneous operations " +"journals. Select 'Opening/Closing Situation' for entries generated for new " +"fiscal years." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_subscription +msgid "Account Subscription" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Maturity date" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Entry Subscription" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,date_from:0 +#: field:account.balance.report,date_from:0 +#: report:account.central.journal:0 +#: field:account.central.journal,date_from:0 +#: field:account.common.account.report,date_from:0 +#: field:account.common.journal.report,date_from:0 +#: field:account.common.partner.report,date_from:0 +#: field:account.common.report,date_from:0 +#: field:account.fiscalyear,date_start:0 +#: report:account.general.journal:0 +#: field:account.general.journal,date_from:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: field:account.installer,date_start:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,date_from:0 +#: field:account.partner.ledger,date_from:0 +#: field:account.print.journal,date_from:0 +#: field:account.report.general.ledger,date_from:0 +#: field:account.subscription,date_start:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.vat.declaration,date_from:0 +#: field:accounting.report,date_from:0 +#: field:accounting.report,date_from_cmp:0 +msgid "Start Date" +msgstr "" + +#. module: account +#: help:account.invoice,reconciled:0 +msgid "" +"It indicates that the invoice has been paid and the journal entry of the " +"invoice has been reconciled with one or several journal entries of payment." +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: model:process.node,name:account.process_node_supplierdraftinvoices0 +msgid "Draft Invoices" +msgstr "" + +#. module: account +#: selection:account.account.type,close_method:0 +#: view:account.entries.report:0 +#: view:account.move.line:0 +msgid "Unreconciled" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:828 +#, python-format +msgid "Bad total !" +msgstr "" + +#. module: account +#: field:account.journal,sequence_id:0 +msgid "Entry Sequence" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_period_tree +msgid "" +"A period is a fiscal period of time during which accounting entries should " +"be recorded for accounting related activities. Monthly period is the norm " +"but depending on your countries or company needs, you could also have " +"quarterly periods. Closing a period will make it impossible to record new " +"accounting entries, all new entries should then be made on the following " +"open period. Close a period when you do not want to record new entries and " +"want to lock this period for tax related calculation." +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Pending" +msgstr "" + +#. module: account +#: model:process.transition,name:account.process_transition_analyticinvoice0 +#: model:process.transition,name:account.process_transition_supplieranalyticcost0 +msgid "From analytic accounts" +msgstr "" + +#. module: account +#: field:account.period,name:0 +msgid "Period Name" +msgstr "" + +#. module: account +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "Code/Date" +msgstr "" + +#. module: account +#: field:account.account,active:0 +#: field:account.analytic.journal,active:0 +#: field:account.fiscal.position,active:0 +#: field:account.journal.period,active:0 +#: field:account.payment.term,active:0 +#: field:account.tax,active:0 +msgid "Active" +msgstr "" + +#. module: account +#: view:accounting.report:0 +msgid "Comparison" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:372 +#, python-format +msgid "Unknown Error" +msgstr "" + +#. module: account +#: help:res.partner,property_account_payable:0 +msgid "" +"This account will be used instead of the default one as the payable account " +"for the current partner" +msgstr "" + +#. module: account +#: field:account.period,special:0 +msgid "Opening/Closing Period" +msgstr "" + +#. module: account +#: field:account.account,currency_id:0 +#: field:account.account.template,currency_id:0 +#: field:account.bank.accounts.wizard,currency_id:0 +msgid "Secondary Currency" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_validate_account_move +msgid "Validate Account Move" +msgstr "" + +#. module: account +#: field:account.account,credit:0 +#: report:account.account.balance:0 +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.central.journal:0 +#: field:account.entries.report,credit:0 +#: report:account.general.journal:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.model.line,credit:0 +#: field:account.move.line,credit:0 +#: report:account.partner.balance:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.treasury.report,credit:0 +#: report:account.vat.declaration:0 +#: field:report.account.receivable,credit:0 +msgid "Credit" +msgstr "" + +#. module: account +#: help:account.invoice.refund,journal_id:0 +msgid "" +"You can select here the journal to use for the refund invoice that will be " +"created. If you leave that field empty, it will use the same journal as the " +"current invoice." +msgstr "" +"Puede seleccionar aquí el diario a usar para la Nota de Crédito que se " +"creará. Si deja este campo vacío, se usará el mismo diario que la factura " +"actual." + +#. module: account +#: selection:account.account.type,report_type:0 +#: code:addons/account/account.py:181 +#, python-format +msgid "Profit & Loss (Income account)" +msgstr "" + +#. module: account +#: constraint:account.account:0 +msgid "" +"Configuration Error! \n" +"You can not select an account type with a deferral method different of " +"\"Unreconciled\" for accounts with internal type \"Payable/Receivable\"! " +msgstr "" + +#. module: account +#: view:account.model:0 +msgid "Journal Entry Model" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_use_model.py:44 +#, python-format +msgid "" +"Maturity date of entry line generated by model line '%s' is based on partner " +"payment term!\n" +"Please define partner on it!" +msgstr "" + +#. module: account +#: field:account.cashbox.line,number:0 +#: field:account.invoice,number:0 +#: field:account.move,name:0 +msgid "Number" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +#: selection:account.analytic.journal,type:0 +#: selection:account.bank.statement.line,type:0 +#: selection:account.journal,type:0 +msgid "General" +msgstr "" + +#. module: account +#: view:analytic.entries.report:0 +msgid "Analytic Entries of last 30 days" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,filter:0 +#: selection:account.balance.report,filter:0 +#: selection:account.central.journal,filter:0 +#: view:account.chart:0 +#: selection:account.common.account.report,filter:0 +#: selection:account.common.journal.report,filter:0 +#: selection:account.common.partner.report,filter:0 +#: view:account.common.report:0 +#: selection:account.common.report,filter:0 +#: view:account.fiscalyear:0 +#: field:account.fiscalyear,period_ids:0 +#: selection:account.general.journal,filter:0 +#: field:account.installer,period:0 +#: selection:account.partner.balance,filter:0 +#: selection:account.partner.ledger,filter:0 +#: view:account.print.journal:0 +#: selection:account.print.journal,filter:0 +#: selection:account.report.general.ledger,filter:0 +#: report:account.vat.declaration:0 +#: view:account.vat.declaration:0 +#: selection:account.vat.declaration,filter:0 +#: view:accounting.report:0 +#: selection:accounting.report,filter:0 +#: selection:accounting.report,filter_cmp:0 +#: model:ir.actions.act_window,name:account.action_account_period_form +#: model:ir.ui.menu,name:account.menu_action_account_period_form +#: model:ir.ui.menu,name:account.next_id_23 +msgid "Periods" +msgstr "" + +#. module: account +#: field:account.invoice.report,currency_rate:0 +msgid "Currency Rate" +msgstr "" + +#. module: account +#: view:account.account:0 +#: field:account.account,tax_ids:0 +#: field:account.account.template,tax_ids:0 +msgid "Default Taxes" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "April" +msgstr "" + +#. module: account +#: model:account.financial.report,name:account.account_financial_report_profitloss_toreport0 +msgid "Profit (Loss) to report" +msgstr "" + +#. module: account +#: view:account.move.line.reconcile.select:0 +msgid "Open for Reconciliation" +msgstr "" + +#. module: account +#: field:account.account,parent_left:0 +msgid "Parent Left" +msgstr "" + +#. module: account +#: help:account.invoice.refund,filter_refund:0 +msgid "" +"Refund invoice base on this type. You can not Modify and Cancel if the " +"invoice is already reconciled" +msgstr "" +"Nota de Crédito basada en este tipo. No puede modificar y cancelar si la " +"factura ya está conciliada." + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Title 2 (bold)" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_invoice_tree2 +#: model:ir.ui.menu,name:account.menu_action_invoice_tree2 +msgid "Supplier Invoices" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: field:account.analytic.line,product_id:0 +#: view:account.entries.report:0 +#: field:account.entries.report,product_id:0 +#: field:account.invoice.line,product_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,product_id:0 +#: field:account.move.line,product_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,product_id:0 +#: field:report.account.sales,product_id:0 +#: field:report.account_type.sales,product_id:0 +msgid "Product" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_validate_account_move +msgid "" +"The validation of journal entries process is also called 'ledger posting' " +"and is the process of transferring debit and credit amounts from a journal " +"of original entry to a ledger book." +msgstr "" + +#. module: account +#: help:account.bank.statement,state:0 +msgid "" +"When new statement is created the state will be 'Draft'.\n" +"And after getting confirmation from the bank it will be in 'Confirmed' state." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_period +msgid "Account period" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Remove Lines" +msgstr "" + +#. module: account +#: view:account.report.general.ledger:0 +msgid "" +"This report allows you to print or generate a pdf of your general ledger " +"with details of all your account journals" +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: selection:account.entries.report,type:0 +msgid "Regular" +msgstr "" + +#. module: account +#: view:account.account:0 +#: field:account.account,type:0 +#: view:account.account.template:0 +#: field:account.account.template,type:0 +#: field:account.entries.report,type:0 +msgid "Internal Type" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_subscription_form_running +msgid "Running Subscriptions" +msgstr "" + +#. module: account +#: view:report.account.sales:0 +#: view:report.account_type.sales:0 +#: view:report.hr.timesheet.invoice.journal:0 +msgid "This Month" +msgstr "" + +#. module: account +#: view:account.analytic.balance:0 +#: view:account.analytic.cost.ledger:0 +#: view:account.analytic.inverted.balance:0 +#: view:account.analytic.journal.report:0 +#: model:ir.actions.act_window,name:account.action_account_partner_ledger +msgid "Select Period" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +#: selection:account.entries.report,move_state:0 +#: view:account.move:0 +#: selection:account.move,state:0 +#: view:account.move.line:0 +msgid "Posted" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,date_to:0 +#: field:account.balance.report,date_to:0 +#: report:account.central.journal:0 +#: field:account.central.journal,date_to:0 +#: field:account.common.account.report,date_to:0 +#: field:account.common.journal.report,date_to:0 +#: field:account.common.partner.report,date_to:0 +#: field:account.common.report,date_to:0 +#: field:account.fiscalyear,date_stop:0 +#: report:account.general.journal:0 +#: field:account.general.journal,date_to:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: field:account.installer,date_stop:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,date_to:0 +#: field:account.partner.ledger,date_to:0 +#: field:account.print.journal,date_to:0 +#: field:account.report.general.ledger,date_to:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.vat.declaration,date_to:0 +#: field:accounting.report,date_to:0 +#: field:accounting.report,date_to_cmp:0 +msgid "End Date" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_open_closed_fiscalyear +#: model:ir.ui.menu,name:account.menu_wizard_account_open_closed_fiscalyear +msgid "Cancel Opening Entries" +msgstr "" + +#. module: account +#: field:account.payment.term.line,days2:0 +msgid "Day of the Month" +msgstr "" + +#. module: account +#: field:account.fiscal.position.tax,tax_src_id:0 +#: field:account.fiscal.position.tax.template,tax_src_id:0 +msgid "Tax Source" +msgstr "" + +#. module: account +#: view:ir.sequence:0 +msgid "Fiscal Year Sequences" +msgstr "" + +#. module: account +#: selection:account.financial.report,display_detail:0 +msgid "No detail" +msgstr "" + +#. module: account +#: code:addons/account/account_analytic_line.py:102 +#, python-format +msgid "There is no income account defined for this product: \"%s\" (id:%d)" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "You can not create journal items on closed account." +msgstr "" + +#. module: account +#: field:account.account,unrealized_gain_loss:0 +#: model:ir.actions.act_window,name:account.action_account_gain_loss +#: model:ir.ui.menu,name:account.menu_unrealized_gains_losses +msgid "Unrealized Gain or Loss" +msgstr "" + +#. module: account +#: view:account.fiscalyear:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: view:account.period:0 +msgid "States" +msgstr "" + +#. module: account +#: model:ir.actions.server,name:account.ir_actions_server_edi_invoice +msgid "Auto-email confirmed invoices" +msgstr "" + +#. module: account +#: field:account.invoice,check_total:0 +msgid "Verification Total" +msgstr "" + +#. module: account +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +#: view:account.analytic.line:0 +#: view:account.bank.statement:0 +#: field:account.invoice,amount_total:0 +#: field:report.account.sales,amount_total:0 +#: field:report.account_type.sales,amount_total:0 +#: field:report.invoice.created,amount_total:0 +msgid "Total" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_move_journal.py:97 +#, python-format +msgid "Journal: All" +msgstr "" + +#. module: account +#: field:account.account,company_id:0 +#: field:account.aged.trial.balance,company_id:0 +#: field:account.analytic.journal,company_id:0 +#: field:account.balance.report,company_id:0 +#: field:account.bank.statement,company_id:0 +#: field:account.bank.statement.line,company_id:0 +#: field:account.central.journal,company_id:0 +#: field:account.common.account.report,company_id:0 +#: field:account.common.journal.report,company_id:0 +#: field:account.common.partner.report,company_id:0 +#: field:account.common.report,company_id:0 +#: view:account.entries.report:0 +#: field:account.entries.report,company_id:0 +#: field:account.fiscal.position,company_id:0 +#: field:account.fiscalyear,company_id:0 +#: field:account.general.journal,company_id:0 +#: field:account.installer,company_id:0 +#: field:account.invoice,company_id:0 +#: field:account.invoice.line,company_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,company_id:0 +#: field:account.invoice.tax,company_id:0 +#: view:account.journal:0 +#: field:account.journal,company_id:0 +#: field:account.journal.period,company_id:0 +#: field:account.model,company_id:0 +#: field:account.move,company_id:0 +#: field:account.move.line,company_id:0 +#: field:account.partner.balance,company_id:0 +#: field:account.partner.ledger,company_id:0 +#: field:account.period,company_id:0 +#: field:account.print.journal,company_id:0 +#: field:account.report.general.ledger,company_id:0 +#: field:account.tax,company_id:0 +#: field:account.tax.code,company_id:0 +#: field:account.treasury.report,company_id:0 +#: field:account.vat.declaration,company_id:0 +#: field:accounting.report,company_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,company_id:0 +#: field:wizard.multi.charts.accounts,company_id:0 +msgid "Company" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_action_subscription_form +msgid "Define Recurring Entries" +msgstr "" + +#. module: account +#: field:account.entries.report,date_maturity:0 +msgid "Date Maturity" +msgstr "" + +#. module: account +#: help:account.bank.statement,total_entry_encoding:0 +msgid "Total cash transactions" +msgstr "" + +#. module: account +#: help:account.partner.reconcile.process,today_reconciled:0 +msgid "" +"This figure depicts the total number of partners that have gone throught the " +"reconciliation process today. The current partner is counted as already " +"processed." +msgstr "" + +#. module: account +#: view:account.fiscalyear:0 +msgid "Create Monthly Periods" +msgstr "" + +#. module: account +#: field:account.tax.code.template,sign:0 +msgid "Sign For Parent" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_balance_report +msgid "Trial Balance Report" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_bank_statement_draft_tree +msgid "Draft statements" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_statemententries0 +msgid "" +"Manual or automatic creation of payment entries according to the statements" +msgstr "" + +#. module: account +#: field:account.analytic.balance,empty_acc:0 +msgid "Empty Accounts ? " +msgstr "" + +#. module: account +#: constraint:account.bank.statement:0 +msgid "The journal and period chosen have to belong to the same company." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Invoice lines" +msgstr "" + +#. module: account +#: field:account.chart,period_to:0 +msgid "End period" +msgstr "" + +#. module: account +#: sql_constraint:account.journal:0 +msgid "The code of the journal must be unique per company !" +msgstr "" + +#. module: account +#: help:product.category,property_account_expense_categ:0 +#: help:product.template,property_account_expense:0 +msgid "" +"This account will be used to value outgoing stock for the current product " +"category using cost price" +msgstr "" + +#. module: account +#: view:wizard.multi.charts.accounts:0 +msgid "Generate Your Chart of Accounts from a Chart Template" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_invoice_report_all +msgid "" +"From this report, you can have an overview of the amount invoiced to your " +"customer as well as payment delays. The tool search can also be used to " +"personalise your Invoices reports and so, match this analysis to your needs." +msgstr "" + +#. module: account +#: view:account.automatic.reconcile:0 +#: view:account.move.line.reconcile.writeoff:0 +msgid "Write-Off Move" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_paidinvoice0 +msgid "Invoice's state is Done" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_report_account_sales +msgid "Report of the Sales by Account" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_account +msgid "Accounts Fiscal Position" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: selection:account.invoice,type:0 +#: selection:account.invoice.report,type:0 +#: model:process.process,name:account.process_process_supplierinvoiceprocess0 +#: selection:report.invoice.created,type:0 +msgid "Supplier Invoice" +msgstr "" + +#. module: account +#: field:account.account,debit:0 +#: report:account.account.balance:0 +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.central.journal:0 +#: field:account.entries.report,debit:0 +#: report:account.general.journal:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.model.line,debit:0 +#: field:account.move.line,debit:0 +#: report:account.partner.balance:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.treasury.report,debit:0 +#: report:account.vat.declaration:0 +#: field:report.account.receivable,debit:0 +msgid "Debit" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Title 3 (bold, smaller)" +msgstr "" + +#. module: account +#: field:account.invoice,invoice_line:0 +msgid "Invoice Lines" +msgstr "" + +#. module: account +#: constraint:account.account.template:0 +msgid "Error ! You can not create recursive account templates." +msgstr "" + +#. module: account +#: selection:account.print.journal,sort_selection:0 +msgid "Journal Entry Number" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Recurring" +msgstr "" + +#. module: account +#: code:addons/account/account.py:642 +#, python-format +msgid "" +"You cannot change the type of account from 'Closed' to any other type which " +"contains journal items!" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:832 +#, python-format +msgid "Entry is already reconciled" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_report_account_receivable +msgid "Receivable accounts" +msgstr "" + +#. module: account +#: selection:account.model.line,date_maturity:0 +msgid "Partner Payment Term" +msgstr "" + +#. module: account +#: field:temp.range,name:0 +msgid "Range" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Analytic Journal Items related to a purchase journal." +msgstr "" + +#. module: account +#: help:account.account,type:0 +msgid "" +"The 'Internal Type' is used for features available on different types of " +"accounts: view can not have journal items, consolidation are accounts that " +"can have children accounts for multi-company consolidations, " +"payable/receivable are for partners accounts (for debit/credit " +"computations), closed for depreciated accounts." +msgstr "" + +#. module: account +#: selection:account.balance.report,display_account:0 +#: selection:account.common.account.report,display_account:0 +#: selection:account.report.general.ledger,display_account:0 +msgid "With movements" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Account Data" +msgstr "" + +#. module: account +#: view:account.tax.code.template:0 +msgid "Account Tax Code Template" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_manually0 +msgid "Manually" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "December" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_journal_tree +#: model:ir.ui.menu,name:account.account_analytic_journal_print +msgid "Print Analytic Journals" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Group by month of Invoice Date" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Fin.Account" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_aged_receivable_graph +#: view:report.aged.receivable:0 +msgid "Aged Receivable" +msgstr "" + +#. module: account +#: field:account.tax,applicable_type:0 +msgid "Applicability" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_move_journal.py:165 +#, python-format +msgid "This period is already closed !" +msgstr "" + +#. module: account +#: help:account.move.line,currency_id:0 +msgid "The optional other currency if it is a multi-currency entry." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_invoiceimport0 +msgid "" +"Import of the statement in the system from a supplier or customer invoice" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_periodical_processing_billing +msgid "Billing" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.analytic.account:0 +msgid "Parent Account" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_journal_form +msgid "" +"Create and manage your company's journals from this menu. A journal is used " +"to record transactions of all accounting data related to the day-to-day " +"business of your company using double-entry bookkeeping system. Depending on " +"the nature of its activities and the number of daily transactions, a company " +"may keep several types of specialized journals such as a cash journal, " +"purchase journal, sales journal..." +msgstr "" + +#. module: account +#: view:account.payment.term:0 +msgid "Description on Invoices" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_chart +msgid "Account Analytic Chart" +msgstr "" + +#. module: account +#: help:account.invoice,residual:0 +msgid "Remaining amount due." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_statistic_report_statement +msgid "Statistic Reports" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1155 +#: code:addons/account/account_move_line.py:1238 +#, python-format +msgid "Bad account!" +msgstr "" + +#. module: account +#: field:account.print.journal,sort_selection:0 +msgid "Entries Sorted by" +msgstr "" + +#. module: account +#: help:account.move,state:0 +msgid "" +"All manually created new journal entries are usually in the state " +"'Unposted', but you can set the option to skip that state on the related " +"journal. In that case, they will be behave as journal entries automatically " +"created by the system on document validation (invoices, bank statements...) " +"and will be created in 'Posted' state." +msgstr "" + +#. module: account +#: view:account.fiscal.position.template:0 +msgid "Accounts Mapping" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:364 +#, python-format +msgid "Invoice '%s' is waiting for validation." +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "November" +msgstr "" + +#. module: account +#: selection:account.invoice.refund,filter_refund:0 +msgid "Modify: refund invoice, reconcile and create a new draft invoice" +msgstr "" +"Modificar: Notade Crédito, reconcilia y crea una nueva factura borrador." + +#. module: account +#: help:account.invoice.line,account_id:0 +msgid "The income or expense account related to the selected product." +msgstr "" + +#. module: account +#: field:account.subscription,period_total:0 +msgid "Number of Periods" +msgstr "" + +#. module: account +#: report:account.general.journal:0 +#: model:ir.actions.report.xml,name:account.account_general_journal +msgid "General Journal" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Search Invoice" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: view:account.invoice.refund:0 +#: view:account.invoice.report:0 +#: model:ir.actions.act_window,name:account.action_account_invoice_refund +msgid "Refund" +msgstr "Nota de Crédito" + +#. module: account +#: model:email.template,body_text:account.email_template_edi_invoice +msgid "" +"\n" +"Hello${object.address_invoice_id.name and ' ' or " +"''}${object.address_invoice_id.name or ''},\n" +"\n" +"A new invoice is available for ${object.partner_id.name}:\n" +" | Invoice number: *${object.number}*\n" +" | Invoice total: *${object.amount_total} ${object.currency_id.name}*\n" +" | Invoice date: ${object.date_invoice}\n" +" % if object.origin:\n" +" | Order reference: ${object.origin}\n" +" % endif\n" +" | Your contact: ${object.user_id.name} ${object.user_id.user_email " +"and '<%s>'%(object.user_id.user_email) or ''}\n" +"\n" +"You can view the invoice document, download it and pay online using the " +"following link:\n" +" ${ctx.get('edi_web_url_view') or 'n/a'}\n" +"\n" +"% if object.company_id.paypal_account and object.type in ('out_invoice', " +"'in_refund'):\n" +"<% \n" +"comp_name = quote(object.company_id.name)\n" +"inv_number = quote(object.number)\n" +"paypal_account = quote(object.company_id.paypal_account)\n" +"inv_amount = quote(str(object.amount_total))\n" +"cur_name = quote(object.currency_id.name)\n" +"paypal_url = \"https://www.paypal.com/cgi-" +"bin/webscr?cmd=_xclick&business=%s&item_name=%s%%20Invoice%%20%s\"\\\n" +" " +"\"&invoice=%s&amount=%s¤cy_code=%s&button_subtype=services&no_note=1&bn" +"=OpenERP_Invoice_PayNow_%s\" % \\\n" +" " +"(paypal_account,comp_name,inv_number,inv_number,inv_amount,cur_name,cur_name)" +"\n" +"%>\n" +"It is also possible to directly pay with Paypal:\n" +" ${paypal_url}\n" +"% endif\n" +"\n" +"If you have any question, do not hesitate to contact us.\n" +"\n" +"\n" +"Thank you for choosing ${object.company_id.name}!\n" +"\n" +"\n" +"--\n" +"${object.user_id.name} ${object.user_id.user_email and " +"'<%s>'%(object.user_id.user_email) or ''}\n" +"${object.company_id.name}\n" +"% if object.company_id.street:\n" +"${object.company_id.street or ''}\n" +"% endif\n" +"% if object.company_id.street2:\n" +"${object.company_id.street2}\n" +"% endif\n" +"% if object.company_id.city or object.company_id.zip:\n" +"${object.company_id.zip or ''} ${object.company_id.city or ''}\n" +"% endif\n" +"% if object.company_id.country_id:\n" +"${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) " +"or ''} ${object.company_id.country_id.name or ''}\n" +"% endif\n" +"% if object.company_id.phone:\n" +"Phone: ${object.company_id.phone}\n" +"% endif\n" +"% if object.company_id.website:\n" +"${object.company_id.website or ''}\n" +"% endif\n" +" " +msgstr "" +"\n" +"Hola${object.address_invoice_id.name and ' ' or " +"''}${object.address_invoice_id.name or ''},\n" +"\n" +"Está disponible una nueva factura para ${object.partner_id.name}:\n" +" | Nº de factura: *${object.number}*\n" +" | Importe: *${object.amount_total} ${object.currency_id.name}*\n" +" | Fecha: ${object.date_invoice}\n" +" % if object.origin:\n" +" | Referencia: ${object.origin}\n" +" % endif\n" +" | Su contacto: ${object.user_id.name} ${object.user_id.user_email and " +"'<%s>'%(object.user_id.user_email) or ''}\n" +"\n" +"Puede ver el documento de la factura, descargarlo y pagarlo online siguiendo " +"el enlace:\n" +" ${ctx.get('edi_web_url_view') or 'n/a'}\n" +"\n" +"% if object.company_id.paypal_account and object.type in ('out_invoice', " +"'in_refund'):\n" +"<% \n" +"comp_name = quote(object.company_id.name)\n" +"inv_number = quote(object.number)\n" +"paypal_account = quote(object.company_id.paypal_account)\n" +"inv_amount = quote(str(object.amount_total))\n" +"cur_name = quote(object.currency_id.name)\n" +"paypal_url = \"https://www.paypal.com/cgi-" +"bin/webscr?cmd=_xclick&business=%s&item_name=%s%%20Invoice%%20%s\"\\\n" +" " +"\"&invoice=%s&amount=%s¤cy_code=%s&button_subtype=services&no_note=1&bn" +"=OpenERP_Invoice_PayNow_%s\" % \\\n" +" " +"(paypal_account,comp_name,inv_number,inv_number,inv_amount,cur_name,cur_name)" +"\n" +"%>\n" +"También puede pagar directamente mediante Paypal:\n" +" ${paypal_url}\n" +"% endif\n" +"\n" +"Si tiene cualquier consulta no dude en contactarnos.\n" +"\n" +"\n" +"¡Gracia por elegir ${object.company_id.name}!\n" +"\n" +"\n" +"--\n" +"${object.user_id.name} ${object.user_id.user_email and " +"'<%s>'%(object.user_id.user_email) or ''}\n" +"${object.company_id.name}\n" +"% if object.company_id.street:\n" +"${object.company_id.street or ''}\n" +"% endif\n" +"% if object.company_id.street2:\n" +"${object.company_id.street2}\n" +"% endif\n" +"% if object.company_id.city or object.company_id.zip:\n" +"${object.company_id.zip or ''} ${object.company_id.city or ''}\n" +"% endif\n" +"% if object.company_id.country_id:\n" +"${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) " +"or ''} ${object.company_id.country_id.name or ''}\n" +"% endif\n" +"% if object.company_id.phone:\n" +"Phone: ${object.company_id.phone}\n" +"% endif\n" +"% if object.company_id.website:\n" +"${object.company_id.website or ''}\n" +"% endif\n" +" " + +#. module: account +#: model:ir.model,name:account.model_res_partner_bank +msgid "Bank Accounts" +msgstr "" + +#. module: account +#: field:res.partner,credit:0 +msgid "Total Receivable" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.account.template:0 +#: view:account.journal:0 +#: view:account.move.line:0 +msgid "General Information" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Accounting Documents" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_validate_account_move_lines +msgid "Validate Account Move Lines" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_cost_ledger_journal +#: model:ir.actions.report.xml,name:account.account_analytic_account_quantity_cost_ledger +msgid "Cost Ledger (Only quantities)" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_supplierpaidinvoice0 +msgid "Invoice's state is Done." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_reconcilepaid0 +msgid "As soon as the reconciliation is done, the invoice can be paid." +msgstr "" + +#. module: account +#: view:account.account.template:0 +msgid "Search Account Templates" +msgstr "" + +#. module: account +#: view:account.invoice.tax:0 +msgid "Manual Invoice Taxes" +msgstr "" + +#. module: account +#: field:account.account,parent_right:0 +msgid "Parent Right" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_addtmpl_wizard +msgid "account.addtmpl.wizard" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,result_selection:0 +#: field:account.common.partner.report,result_selection:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,result_selection:0 +#: field:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Partner's" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscalyear_form +#: view:ir.sequence:0 +#: model:ir.ui.menu,name:account.menu_action_account_fiscalyear_form +msgid "Fiscal Years" +msgstr "" + +#. module: account +#: help:account.analytic.journal,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the analytic " +"journal without removing it." +msgstr "" + +#. module: account +#: field:account.analytic.line,ref:0 +msgid "Ref." +msgstr "" + +#. module: account +#: field:account.use.model,model:0 +#: model:ir.model,name:account.model_account_model +msgid "Account Model" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "February" +msgstr "" + +#. module: account +#: help:account.bank.statement,name:0 +msgid "" +"if you give the Name other then /, its created Accounting Entries Move will " +"be with same name as statement name. This allows the statement entries to " +"have the same references than the statement itself" +msgstr "" + +#. module: account +#: field:account.bank.accounts.wizard,bank_account_id:0 +#: view:account.chart.template:0 +#: field:account.chart.template,bank_account_view_id:0 +#: field:account.invoice,partner_bank_id:0 +#: field:account.invoice.report,partner_bank_id:0 +msgid "Bank Account" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_central_journal +#: model:ir.model,name:account.model_account_central_journal +msgid "Account Central Journal" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Maturity" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,direction_selection:0 +msgid "Future" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Search Journal Items" +msgstr "" + +#. module: account +#: help:account.tax,base_sign:0 +#: help:account.tax,ref_base_sign:0 +#: help:account.tax,ref_tax_sign:0 +#: help:account.tax,tax_sign:0 +#: help:account.tax.template,base_sign:0 +#: help:account.tax.template,ref_base_sign:0 +#: help:account.tax.template,ref_tax_sign:0 +#: help:account.tax.template,tax_sign:0 +msgid "Usually 1 or -1." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_account_tree2 +#: model:ir.actions.act_window,name:account.action_account_analytic_chart +#: model:ir.ui.menu,name:account.menu_action_analytic_account_tree2 +msgid "Chart of Analytic Accounts" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_expense:0 +msgid "Expense Account on Product Template" +msgstr "" + +#. module: account +#: help:accounting.report,label_filter:0 +msgid "" +"This label will be displayed on report to show the balance computed for the " +"given comparison filter." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_report_aged_partner_balance.py:56 +#, python-format +msgid "You must enter a period length that cannot be 0 or below !" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_form +msgid "" +"Create and manage the accounts you need to record journal entries. An " +"account is part of a ledger allowing your company to register all kinds of " +"debit and credit transactions. Companies present their annual accounts in " +"two main parts: the balance sheet and the income statement (profit and loss " +"account). The annual accounts of a company are required by law to disclose a " +"certain amount of information. They have to be certified by an external " +"auditor annually." +msgstr "" + +#. module: account +#: help:account.move.line,amount_residual_currency:0 +msgid "" +"The residual amount on a receivable or payable of a journal entry expressed " +"in its currency (maybe different of the company currency)." +msgstr "" diff --git a/addons/web/i18n/ar.po b/addons/web/i18n/ar.po index 0f36aa1cc4f..498c78516be 100644 --- a/addons/web/i18n/ar.po +++ b/addons/web/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-08 04:44+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/bg.po b/addons/web/i18n/bg.po index c52042a4b59..775314cd39e 100644 --- a/addons/web/i18n/bg.po +++ b/addons/web/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-08 04:44+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/bn.po b/addons/web/i18n/bn.po index ac2d00d9a19..96aff0694c1 100644 --- a/addons/web/i18n/bn.po +++ b/addons/web/i18n/bn.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-08 04:44+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/bs.po b/addons/web/i18n/bs.po index ad7bbe2cfab..e2aff2f0b09 100644 --- a/addons/web/i18n/bs.po +++ b/addons/web/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-08 04:44+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/ca.po b/addons/web/i18n/ca.po index 1166c9a76be..6c5cce42b4a 100644 --- a/addons/web/i18n/ca.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/cs.po b/addons/web/i18n/cs.po index 39dcc94e600..e03171f930f 100644 --- a/addons/web/i18n/cs.po +++ b/addons/web/i18n/cs.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" "X-Poedit-Language: Czech\n" #. openerp-web diff --git a/addons/web/i18n/da.po b/addons/web/i18n/da.po index 37cdd447d88..d4a5cc6efad 100644 --- a/addons/web/i18n/da.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/de.po b/addons/web/i18n/de.po index cd9870daf8d..bd7f20ec818 100644 --- a/addons/web/i18n/de.po +++ b/addons/web/i18n/de.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/en_AU.po b/addons/web/i18n/en_AU.po index 980e0495a17..6d7490923f6 100644 --- a/addons/web/i18n/en_AU.po +++ b/addons/web/i18n/en_AU.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/en_GB.po b/addons/web/i18n/en_GB.po index e181c7b0f3b..83c3325e793 100644 --- a/addons/web/i18n/en_GB.po +++ b/addons/web/i18n/en_GB.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/es.po b/addons/web/i18n/es.po index 78c51a4b14d..74e77381873 100644 --- a/addons/web/i18n/es.po +++ b/addons/web/i18n/es.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/es_CL.po b/addons/web/i18n/es_CL.po index eafa6347c7d..5e65aad781f 100644 --- a/addons/web/i18n/es_CL.po +++ b/addons/web/i18n/es_CL.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/es_CR.po b/addons/web/i18n/es_CR.po index ce3448df7aa..953aacbfb3d 100644 --- a/addons/web/i18n/es_CR.po +++ b/addons/web/i18n/es_CR.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" "Language: es\n" #. openerp-web diff --git a/addons/web/i18n/es_EC.po b/addons/web/i18n/es_EC.po index 47abace7e8a..7eb680fc806 100644 --- a/addons/web/i18n/es_EC.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/et.po b/addons/web/i18n/et.po index adf87a35acf..96c99115ff1 100644 --- a/addons/web/i18n/et.po +++ b/addons/web/i18n/et.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/eu.po b/addons/web/i18n/eu.po index dbe83aaa07e..38dc8244b97 100644 --- a/addons/web/i18n/eu.po +++ b/addons/web/i18n/eu.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-08 04:44+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/fi.po b/addons/web/i18n/fi.po index e068de86393..c4d36e63a43 100644 --- a/addons/web/i18n/fi.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/fr.po b/addons/web/i18n/fr.po index f1eb7538abe..9e0a92f76cf 100644 --- a/addons/web/i18n/fr.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/fr_CA.po b/addons/web/i18n/fr_CA.po index 64392521b3a..bfd81ef9938 100644 --- a/addons/web/i18n/fr_CA.po +++ b/addons/web/i18n/fr_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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/gl.po b/addons/web/i18n/gl.po index 787600e6530..6471ce44d60 100644 --- a/addons/web/i18n/gl.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/gu.po b/addons/web/i18n/gu.po index 379c920071f..778e78b55b2 100644 --- a/addons/web/i18n/gu.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/hi.po b/addons/web/i18n/hi.po index 4b45f75782c..21c023f5560 100644 --- a/addons/web/i18n/hi.po +++ b/addons/web/i18n/hi.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/hr.po b/addons/web/i18n/hr.po index f0b8e2cf1ba..da768b45e9e 100644 --- a/addons/web/i18n/hr.po +++ b/addons/web/i18n/hr.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/hu.po b/addons/web/i18n/hu.po index 6aa3dda534c..8a3b6507d5d 100644 --- a/addons/web/i18n/hu.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/id.po b/addons/web/i18n/id.po index 61542947099..f1bd452b6bd 100644 --- a/addons/web/i18n/id.po +++ b/addons/web/i18n/id.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/it.po b/addons/web/i18n/it.po index 3b080d51083..ee0f096eda7 100644 --- a/addons/web/i18n/it.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/ja.po b/addons/web/i18n/ja.po index d6665f20d48..affb27e9acf 100644 --- a/addons/web/i18n/ja.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/ka.po b/addons/web/i18n/ka.po index 2bba1754dab..f875f727a4f 100644 --- a/addons/web/i18n/ka.po +++ b/addons/web/i18n/ka.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/mk.po b/addons/web/i18n/mk.po index 2a852ec2daf..c1504ec7ae4 100644 --- a/addons/web/i18n/mk.po +++ b/addons/web/i18n/mk.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/mn.po b/addons/web/i18n/mn.po index 856cbb12b37..25bc63906da 100644 --- a/addons/web/i18n/mn.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/nb.po b/addons/web/i18n/nb.po index 0cff88715ef..ca269b242b0 100644 --- a/addons/web/i18n/nb.po +++ b/addons/web/i18n/nb.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/nl.po b/addons/web/i18n/nl.po index ba9d26c5a55..b04df56f3dd 100644 --- a/addons/web/i18n/nl.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/nl_BE.po b/addons/web/i18n/nl_BE.po index 4177344b173..416ef765127 100644 --- a/addons/web/i18n/nl_BE.po +++ b/addons/web/i18n/nl_BE.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/pl.po b/addons/web/i18n/pl.po index 1065dea0625..0110ed205f5 100644 --- a/addons/web/i18n/pl.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/pt.po b/addons/web/i18n/pt.po index 6411ed2e0ef..8166d9e0f22 100644 --- a/addons/web/i18n/pt.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/pt_BR.po b/addons/web/i18n/pt_BR.po index cef8cfbea32..3d0b5dd72ae 100644 --- a/addons/web/i18n/pt_BR.po +++ b/addons/web/i18n/pt_BR.po @@ -9,13 +9,14 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-07-02 09:06+0200\n" "PO-Revision-Date: 2012-07-30 00:28+0000\n" -"Last-Translator: Fábio Martinelli \n" +"Last-Translator: Fábio Martinelli - http://zupy.com.br " +"\n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/ro.po b/addons/web/i18n/ro.po index 610b10a07ac..7f32fc3db44 100644 --- a/addons/web/i18n/ro.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/ru.po b/addons/web/i18n/ru.po index 013c6d6d103..abc6f64d863 100644 --- a/addons/web/i18n/ru.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/sk.po b/addons/web/i18n/sk.po index 5e811fe09ea..dddf69edd89 100644 --- a/addons/web/i18n/sk.po +++ b/addons/web/i18n/sk.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/sl.po b/addons/web/i18n/sl.po index c19851d0c42..6953dfae170 100644 --- a/addons/web/i18n/sl.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/sq.po b/addons/web/i18n/sq.po index 06bc23a5371..abec3f0edee 100644 --- a/addons/web/i18n/sq.po +++ b/addons/web/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-08 04:44+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/sr@latin.po b/addons/web/i18n/sr@latin.po index 39ff195729e..8ca06c6cdf9 100644 --- a/addons/web/i18n/sr@latin.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/sv.po b/addons/web/i18n/sv.po index a94ae1736a6..31db2f2f6d7 100644 --- a/addons/web/i18n/sv.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/tr.po b/addons/web/i18n/tr.po index f0b6e0285be..5aeb203510d 100644 --- a/addons/web/i18n/tr.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/uk.po b/addons/web/i18n/uk.po index 6b7dd66a729..cb04d046af5 100644 --- a/addons/web/i18n/uk.po +++ b/addons/web/i18n/uk.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:49+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/zh_CN.po b/addons/web/i18n/zh_CN.po index 67dcc2db4a4..4c8b46ec72a 100644 --- a/addons/web/i18n/zh_CN.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web/i18n/zh_TW.po b/addons/web/i18n/zh_TW.po index 490eab5317b..8c6a6cb74e9 100644 --- a/addons/web/i18n/zh_TW.po +++ b/addons/web/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web/static/src/js/chrome.js:176 diff --git a/addons/web_calendar/i18n/ar.po b/addons/web_calendar/i18n/ar.po index 77f02c07170..81e043ba7d0 100644 --- a/addons/web_calendar/i18n/ar.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/bg.po b/addons/web_calendar/i18n/bg.po index 23b13a864d2..b83e12bac04 100644 --- a/addons/web_calendar/i18n/bg.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/bn.po b/addons/web_calendar/i18n/bn.po index 32dc3279e98..4bea5f205cc 100644 --- a/addons/web_calendar/i18n/bn.po +++ b/addons/web_calendar/i18n/bn.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/bs.po b/addons/web_calendar/i18n/bs.po index 4b0885d8588..b5d88579952 100644 --- a/addons/web_calendar/i18n/bs.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/ca.po b/addons/web_calendar/i18n/ca.po index ea7b11b2364..568b793b050 100644 --- a/addons/web_calendar/i18n/ca.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/cs.po b/addons/web_calendar/i18n/cs.po index 37385b4f372..25d16697a67 100644 --- a/addons/web_calendar/i18n/cs.po +++ b/addons/web_calendar/i18n/cs.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" "X-Poedit-Language: Czech\n" #. openerp-web diff --git a/addons/web_calendar/i18n/da.po b/addons/web_calendar/i18n/da.po index d4d7c44cb37..ff9f6ec2e62 100644 --- a/addons/web_calendar/i18n/da.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/de.po b/addons/web_calendar/i18n/de.po index e4beb50d0be..f950afcc5d2 100644 --- a/addons/web_calendar/i18n/de.po +++ b/addons/web_calendar/i18n/de.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/en_AU.po b/addons/web_calendar/i18n/en_AU.po index 96800bec9da..319a6466147 100644 --- a/addons/web_calendar/i18n/en_AU.po +++ b/addons/web_calendar/i18n/en_AU.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/en_GB.po b/addons/web_calendar/i18n/en_GB.po index 52f4cb1a271..5f5a7072bea 100644 --- a/addons/web_calendar/i18n/en_GB.po +++ b/addons/web_calendar/i18n/en_GB.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/es.po b/addons/web_calendar/i18n/es.po index 8c6928d058d..44faf52cc5c 100644 --- a/addons/web_calendar/i18n/es.po +++ b/addons/web_calendar/i18n/es.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/es_CL.po b/addons/web_calendar/i18n/es_CL.po index fd701e1c71d..0157332cb07 100644 --- a/addons/web_calendar/i18n/es_CL.po +++ b/addons/web_calendar/i18n/es_CL.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/es_CR.po b/addons/web_calendar/i18n/es_CR.po index 00da3e998cf..dfa2d0cb6ff 100644 --- a/addons/web_calendar/i18n/es_CR.po +++ b/addons/web_calendar/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" "Language: es\n" #. openerp-web diff --git a/addons/web_calendar/i18n/es_EC.po b/addons/web_calendar/i18n/es_EC.po index 53190f8ef45..5f101e04b86 100644 --- a/addons/web_calendar/i18n/es_EC.po +++ b/addons/web_calendar/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/et.po b/addons/web_calendar/i18n/et.po index 21d4ceb82f1..e7bf39c578d 100644 --- a/addons/web_calendar/i18n/et.po +++ b/addons/web_calendar/i18n/et.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/eu.po b/addons/web_calendar/i18n/eu.po index b2f45eb8b2d..64ade15c45f 100644 --- a/addons/web_calendar/i18n/eu.po +++ b/addons/web_calendar/i18n/eu.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/fi.po b/addons/web_calendar/i18n/fi.po index f78c61875d2..cc440f21f52 100644 --- a/addons/web_calendar/i18n/fi.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/fr.po b/addons/web_calendar/i18n/fr.po index 08007595982..8cee149aae5 100644 --- a/addons/web_calendar/i18n/fr.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/fr_CA.po b/addons/web_calendar/i18n/fr_CA.po index f28979b064b..ea2fb44f229 100644 --- a/addons/web_calendar/i18n/fr_CA.po +++ b/addons/web_calendar/i18n/fr_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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/gl.po b/addons/web_calendar/i18n/gl.po index 4180a7e5f68..41c8c21da9f 100644 --- a/addons/web_calendar/i18n/gl.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/hr.po b/addons/web_calendar/i18n/hr.po index aee9710d0e0..9f80b34defc 100644 --- a/addons/web_calendar/i18n/hr.po +++ b/addons/web_calendar/i18n/hr.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/id.po b/addons/web_calendar/i18n/id.po index b8e010e4572..f122173cc6a 100644 --- a/addons/web_calendar/i18n/id.po +++ b/addons/web_calendar/i18n/id.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/it.po b/addons/web_calendar/i18n/it.po index 5a8a31e49de..8dc1631d60e 100644 --- a/addons/web_calendar/i18n/it.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/ja.po b/addons/web_calendar/i18n/ja.po index 64fa9584500..c121fb3233f 100644 --- a/addons/web_calendar/i18n/ja.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/ka.po b/addons/web_calendar/i18n/ka.po index ac9c46dcd04..183b42ca287 100644 --- a/addons/web_calendar/i18n/ka.po +++ b/addons/web_calendar/i18n/ka.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/mk.po b/addons/web_calendar/i18n/mk.po index 088303f2638..6915d6616d2 100644 --- a/addons/web_calendar/i18n/mk.po +++ b/addons/web_calendar/i18n/mk.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/mn.po b/addons/web_calendar/i18n/mn.po index fa4a3f9fa72..cc24417da6e 100644 --- a/addons/web_calendar/i18n/mn.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/nb.po b/addons/web_calendar/i18n/nb.po index fd4c9c3e777..167b4330c46 100644 --- a/addons/web_calendar/i18n/nb.po +++ b/addons/web_calendar/i18n/nb.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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/nl.po b/addons/web_calendar/i18n/nl.po index 72891c54dc6..526a3b4a2da 100644 --- a/addons/web_calendar/i18n/nl.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/nl_BE.po b/addons/web_calendar/i18n/nl_BE.po index 55b00160220..c1cd2211134 100644 --- a/addons/web_calendar/i18n/nl_BE.po +++ b/addons/web_calendar/i18n/nl_BE.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/pl.po b/addons/web_calendar/i18n/pl.po index 356fcd306d9..a07d1edd22d 100644 --- a/addons/web_calendar/i18n/pl.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/pt.po b/addons/web_calendar/i18n/pt.po index e1a0944a70a..0ffff8230b0 100644 --- a/addons/web_calendar/i18n/pt.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/pt_BR.po b/addons/web_calendar/i18n/pt_BR.po index be2689e4fc2..b571c95dd8a 100644 --- a/addons/web_calendar/i18n/pt_BR.po +++ b/addons/web_calendar/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/ro.po b/addons/web_calendar/i18n/ro.po index a77e17cd193..7cbfe8ddebe 100644 --- a/addons/web_calendar/i18n/ro.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/ru.po b/addons/web_calendar/i18n/ru.po index b9ae5151149..b20a97fcb73 100644 --- a/addons/web_calendar/i18n/ru.po +++ b/addons/web_calendar/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/sk.po b/addons/web_calendar/i18n/sk.po index 77a56f6d6b7..37ded47c3dd 100644 --- a/addons/web_calendar/i18n/sk.po +++ b/addons/web_calendar/i18n/sk.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/sl.po b/addons/web_calendar/i18n/sl.po index 2d109cc2ec7..d4845899cf2 100644 --- a/addons/web_calendar/i18n/sl.po +++ b/addons/web_calendar/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/sq.po b/addons/web_calendar/i18n/sq.po index a2ace7c190c..391ac78a1d0 100644 --- a/addons/web_calendar/i18n/sq.po +++ b/addons/web_calendar/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-08 04:45+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/sr@latin.po b/addons/web_calendar/i18n/sr@latin.po index 52cf68e90ef..7e321881737 100644 --- a/addons/web_calendar/i18n/sr@latin.po +++ b/addons/web_calendar/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/sv.po b/addons/web_calendar/i18n/sv.po index a158b3afa09..9e0d8f4f07d 100644 --- a/addons/web_calendar/i18n/sv.po +++ b/addons/web_calendar/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/tr.po b/addons/web_calendar/i18n/tr.po index aa887097c6c..54c613d0cec 100644 --- a/addons/web_calendar/i18n/tr.po +++ b/addons/web_calendar/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/uk.po b/addons/web_calendar/i18n/uk.po index 0daff18f132..eb7303b3791 100644 --- a/addons/web_calendar/i18n/uk.po +++ b/addons/web_calendar/i18n/uk.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_calendar/i18n/zh_CN.po b/addons/web_calendar/i18n/zh_CN.po index cf61389ca9b..93797a3cdc2 100644 --- a/addons/web_calendar/i18n/zh_CN.po +++ b/addons/web_calendar/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_calendar/static/src/js/calendar.js:11 diff --git a/addons/web_dashboard/i18n/ar.po b/addons/web_dashboard/i18n/ar.po new file mode 100644 index 00000000000..e4a4c15018f --- /dev/null +++ b/addons/web_dashboard/i18n/ar.po @@ -0,0 +1,93 @@ +# Arabic translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-08 00:47+0000\n" +"Last-Translator: kifcaliph \n" +"Language-Team: Arabic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "تعديل التنسيق" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "هل متأكد من إزالة هذا البند" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "إعادة هيئة النسق..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "إستعادة" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "تغيير النسق..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "تغيير النسق" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "إنشاء" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "اختر مخطط للعرض" + +#~ msgid "progress:" +#~ msgstr "التقدم:" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "أهلاً و مرحباً بكم في Openerp عربي" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "اضغط علي الوظائف الموجودة بالأسفل للبدء في إعداد نظامك" + +#~ msgid "Your login:" +#~ msgstr "اسم الدخول لك:" + +#~ msgid "Remember to bookmark" +#~ msgstr "تذكر كمفضلة" + +#~ msgid "This url" +#~ msgstr "هذا الرابط" + +#~ msgid "Uncategorized" +#~ msgstr "غير مصنف" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "تنفيذ المهمة \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "علم هذه المهمة كمنجزة" diff --git a/addons/web_dashboard/i18n/bg.po b/addons/web_dashboard/i18n/bg.po new file mode 100644 index 00000000000..5f02213d95c --- /dev/null +++ b/addons/web_dashboard/i18n/bg.po @@ -0,0 +1,95 @@ +# Bulgarian translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-07-09 13:18+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Bulgarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Редакция План" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Сигурни ли сте, че искате да изтриете този елемент ?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Връщане в начално състояние Подредба.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Връщане в начално състояние" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Смяна Подредба.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Промяна Подредба" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Създаване" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Избери подредба на табло" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Изпълни задача \"%s\"" + +#~ msgid "Uncategorized" +#~ msgstr "Без категория" + +#~ msgid "Remember to bookmark" +#~ msgstr "Запомни като отметка" + +#~ msgid "This url" +#~ msgstr "Този url" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Кликнете върху фунциите изброени по-долу за да ги изпълните и конфигурирате " +#~ "системата" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Добре дошли в OpenERP" + +#~ msgid "Your login:" +#~ msgstr "Вашето потребителско име:" + +#~ msgid "progress:" +#~ msgstr "обработка:" + +#~ msgid "Mark this task as done" +#~ msgstr "Маркирай задачата като приключена" diff --git a/addons/web_dashboard/i18n/bn.po b/addons/web_dashboard/i18n/bn.po new file mode 100644 index 00000000000..11f7e7ae702 --- /dev/null +++ b/addons/web_dashboard/i18n/bn.po @@ -0,0 +1,95 @@ +# Bengali translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2011-11-24 12:53+0000\n" +"Last-Translator: nasir khan saikat \n" +"Language-Team: Bengali \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "স্থাপনকৌশল সম্পাদনা করুন" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "আপনি কি নিশ্চিত যে আপনি এই জিনিসটি মুছে ফেলতে চাইছেন?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "স্থাপনকৌশল পুনঃনির্ধারণ করুন" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "পুনঃনির্ধারণ করুন" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "স্থাপনকৌশল পরিবর্তন করুন.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "স্থাপনকৌশল পরিবর্তন করুন" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "তৈরি করুন" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "ড্যাশবোর্ড বিন্যাস নির্বাচন করুন" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "\"%s\" কাজ চালু করুন" + +#~ msgid "Mark this task as done" +#~ msgstr "কাজটি সম্পন্ন হিসাবে চিহ্নিত করন" + +#~ msgid "Uncategorized" +#~ msgstr "অশ্রেণীভুক্ত" + +#~ msgid "Your login:" +#~ msgstr "আপনার প্রবেশ দ্বার" + +#~ msgid "Remember to bookmark" +#~ msgstr "চিহ্নিত করতে মনে রাখুন" + +#~ msgid "This url" +#~ msgstr "এই ইউ-আর-এল" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "আপনার পদ্ধতিটি চালু এবং আকৃতিদান করার জন্য নিম্ন তালিকাভুক্ত " +#~ "কার্যকারিতাগুলিতে চাপুন" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "ওপেন-ই-আর-পি তে স্বাগতম" + +#~ msgid "progress:" +#~ msgstr "অগ্রগতি:" diff --git a/addons/web_dashboard/i18n/bs.po b/addons/web_dashboard/i18n/bs.po new file mode 100644 index 00000000000..1fe4de0afd5 --- /dev/null +++ b/addons/web_dashboard/i18n/bs.po @@ -0,0 +1,85 @@ +# Bosnian translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-04-15 00:11+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Bosnian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Jeste li sigurni da želite ukloniti predmet?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Resetuj" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Izmijeni izgled" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Napravi" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "" + +#~ msgid "Mark this task as done" +#~ msgstr "Označi zadatak kao izvršen" + +#~ msgid "Uncategorized" +#~ msgstr "Nekategorisano" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Izvrši zadatak \"%s\"" + +#~ msgid "This url" +#~ msgstr "Ovaj url" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Dobro došli na OpenERP" + +#~ msgid "progress:" +#~ msgstr "Napredak:" + +#~ msgid "Your login:" +#~ msgstr "Vaš login:" diff --git a/addons/web_dashboard/i18n/ca.po b/addons/web_dashboard/i18n/ca.po new file mode 100644 index 00000000000..8fb1e7fc2a7 --- /dev/null +++ b/addons/web_dashboard/i18n/ca.po @@ -0,0 +1,63 @@ +# Catalan translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-06-16 17:52+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "" diff --git a/addons/web_dashboard/i18n/cs.po b/addons/web_dashboard/i18n/cs.po new file mode 100644 index 00000000000..254d395d52d --- /dev/null +++ b/addons/web_dashboard/i18n/cs.po @@ -0,0 +1,96 @@ +# Czech translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-03-22 11:16+0000\n" +"Last-Translator: Jiří Hajda \n" +"Language-Team: openerp-i18n-czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" +"X-Poedit-Language: Czech\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Upravit rozvržení" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Jste si jistit, že chcete odstranit tuto položku?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Vynulovat rozvržení..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Vynulovat" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Změnit rozvržení..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Změnit rozvržení" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Vytvořit" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Vybrat rozvržení nástěnky" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Vítejte v OpenERP" + +#~ msgid "Uncategorized" +#~ msgstr "Bez kategorie" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Vykonat úlohu \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Označit úlohu jako dokončenou" + +#~ msgid "progress:" +#~ msgstr "průběh:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Klikněte na seznam funkčností vypsaných níže k jejich spuštění a nastavení " +#~ "systému" + +#~ msgid "Remember to bookmark" +#~ msgstr "Pamatovat do záložek" + +#~ msgid "This url" +#~ msgstr "Toto url" + +#~ msgid "Your login:" +#~ msgstr "Vaše přihlášení:" diff --git a/addons/web_dashboard/i18n/da.po b/addons/web_dashboard/i18n/da.po new file mode 100644 index 00000000000..403ab6f8550 --- /dev/null +++ b/addons/web_dashboard/i18n/da.po @@ -0,0 +1,84 @@ +# Danish translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-07-01 09:05+0000\n" +"Last-Translator: Aputsiaq Niels Janussen \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Redigér layout" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Er du sikker på at du vil fjerne dette element?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Nulstil" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Skift layout" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Opret" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Vælg layout for kontrolpanel" + +#~ msgid "progress:" +#~ msgstr "fremskridt:" + +#~ msgid "Uncategorized" +#~ msgstr "Uden kategori" + +#~ msgid "Mark this task as done" +#~ msgstr "Markér denne opgave som løst" + +#~ msgid "Your login:" +#~ msgstr "Dit logind:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Husk at sætte bogmærke" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Velkommen til OpenERP" + +#~ msgid "This url" +#~ msgstr "Denne url" diff --git a/addons/web_dashboard/i18n/de.po b/addons/web_dashboard/i18n/de.po new file mode 100644 index 00000000000..c1318c259b1 --- /dev/null +++ b/addons/web_dashboard/i18n/de.po @@ -0,0 +1,93 @@ +# German translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-07 19:10+0000\n" +"Last-Translator: Ferdinand @ Camptocamp \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Layout bearbeiten" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Wollen Sie dieses Element wirklich löschen?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Layout zurücksetzen" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Zurücksetzen" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Layout ändern" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Layout ändern" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Anlegen" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Wählen Sie das Dashboard Layout" + +#~ msgid "progress:" +#~ msgstr "Fortschritt:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "Wähle untenstehende Funktionen um diese zu konfigurieren" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Willkommen bei OpenERP" + +#~ msgid "Your login:" +#~ msgstr "Ihr Login:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Lesezeichen nicht vergessen!" + +#~ msgid "This url" +#~ msgstr "Diese URL" + +#~ msgid "Uncategorized" +#~ msgstr "Nicht kategorisiert" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Aufgabe \"%s\" ausführen" + +#~ msgid "Mark this task as done" +#~ msgstr "Als erledigt markieren" diff --git a/addons/web_dashboard/i18n/en_GB.po b/addons/web_dashboard/i18n/en_GB.po new file mode 100644 index 00000000000..571d021e991 --- /dev/null +++ b/addons/web_dashboard/i18n/en_GB.po @@ -0,0 +1,95 @@ +# English (United Kingdom) translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-09 11:37+0000\n" +"Last-Translator: John Bradshaw \n" +"Language-Team: English (United Kingdom) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Edit Layout" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Are you sure you want to remove this item ?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Reset Layout.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Reset" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Change Layout.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Change Layout" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Create" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Choose dashboard layout" + +#~ msgid "Uncategorized" +#~ msgstr "Uncategorised" + +#~ msgid "Your login:" +#~ msgstr "Your login:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Remember to bookmark" + +#~ msgid "This url" +#~ msgstr "This url" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Click on the functionalities listed below to launch them and configure your " +#~ "system" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Welcome to OpenERP" + +#~ msgid "progress:" +#~ msgstr "progress:" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Execute task \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Mark this task as done" diff --git a/addons/web_dashboard/i18n/es.po b/addons/web_dashboard/i18n/es.po new file mode 100644 index 00000000000..2db956b6415 --- /dev/null +++ b/addons/web_dashboard/i18n/es.po @@ -0,0 +1,95 @@ +# Spanish translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-22 10:34+0000\n" +"Last-Translator: Jorge L Tupac-Yupanqui \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Editar disposición" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "¿Esta seguro que quiere eliminar este item?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Reiniciar disposición" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Reiniciar" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Cambiar Disposición.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Cambiar disposición" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Crear" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Elegir disposición del tablero" + +#~ msgid "progress:" +#~ msgstr "progreso:" + +#~ msgid "This url" +#~ msgstr "Esta url" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Haga click en las funcionalidades listadas debajo para lanzarlas y " +#~ "configurar su sistema" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Bienvenido a OpenERP" + +#~ msgid "Uncategorized" +#~ msgstr "Sin categoría" + +#~ msgid "Your login:" +#~ msgstr "Su inicio de sesión:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Recordar en marcadores" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Ejecutar tarea \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Marcar esta tarea como terminada" diff --git a/addons/web_dashboard/i18n/es_CL.po b/addons/web_dashboard/i18n/es_CL.po new file mode 100644 index 00000000000..0b61deb0796 --- /dev/null +++ b/addons/web_dashboard/i18n/es_CL.po @@ -0,0 +1,95 @@ +# Spanish (Chile) translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-04-14 15:21+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Spanish (Chile) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Modificar diseño" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "¿Esta seguro que quiere eliminar este item?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Reiniciar disposición" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Reiniciar" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Cambiar Disposición.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Cambiar disposición" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Crear" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Elegir disposición del tablero" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Ejecutar tarea \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Marcar esta tarea como terminada" + +#~ msgid "Uncategorized" +#~ msgstr "Sin categoría" + +#~ msgid "Remember to bookmark" +#~ msgstr "Recordar en marcadores" + +#~ msgid "This url" +#~ msgstr "Esta url" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Haga click en las funcionalidades listadas debajo para lanzarlas y " +#~ "configurar su sistema" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Bienvenido a OpenERP" + +#~ msgid "Your login:" +#~ msgstr "Su inicio de sesión:" + +#~ msgid "progress:" +#~ msgstr "progreso:" diff --git a/addons/web_dashboard/i18n/es_CR.po b/addons/web_dashboard/i18n/es_CR.po new file mode 100644 index 00000000000..bc46fc25338 --- /dev/null +++ b/addons/web_dashboard/i18n/es_CR.po @@ -0,0 +1,96 @@ +# Spanish translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-16 22:16+0000\n" +"Last-Translator: Freddy Gonzalez \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" +"Language: es\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Editar formato" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "¿Está seguro/a que desea eliminar este elemento?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Re-establecer formato..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Reiniciar" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Cambiar formato..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Cambiar formato" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Crear" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Escoger disposición del tablero" + +#~ msgid "Uncategorized" +#~ msgstr "Sin categoría" + +#~ msgid "progress:" +#~ msgstr "progreso:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Haga clic en las funcionalidades enumeradas abajo para lanzarlas y " +#~ "configurar su sistema" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Bienvenido a OpenERP" + +#~ msgid "Remember to bookmark" +#~ msgstr "Recuerde marcar como favorito" + +#~ msgid "This url" +#~ msgstr "Esta dirección" + +#~ msgid "Your login:" +#~ msgstr "Su usuario:" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Ejecutar tarea \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Marcar esta tarea como terminada" diff --git a/addons/web_dashboard/i18n/es_EC.po b/addons/web_dashboard/i18n/es_EC.po new file mode 100644 index 00000000000..79b64251821 --- /dev/null +++ b/addons/web_dashboard/i18n/es_EC.po @@ -0,0 +1,95 @@ +# Spanish (Ecuador) translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2011-10-07 15:56+0000\n" +"Last-Translator: Cristian Salamea (Gnuthink) \n" +"Language-Team: Spanish (Ecuador) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Editar disposición" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "¿Esta seguro que quiere eliminar este item?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Reiniciar disposición" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Reset" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Cambiar Disposición.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Cambiar disposición" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Crear" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Elegir el diseño del panel de control" + +#~ msgid "progress:" +#~ msgstr "progreso:" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Ejecutar tarea \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Marcar esta tarea como terminada" + +#~ msgid "Uncategorized" +#~ msgstr "Sin categoría" + +#~ msgid "This url" +#~ msgstr "Esta url" + +#~ msgid "Your login:" +#~ msgstr "Su inicio de sesión:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Recordar en favoritos" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Haga click en las funcionalidades listadas debajo para lanzarlas y " +#~ "configurar su sistema" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Bienvenido a OpenERP" diff --git a/addons/web_dashboard/i18n/et.po b/addons/web_dashboard/i18n/et.po new file mode 100644 index 00000000000..916dc7db07b --- /dev/null +++ b/addons/web_dashboard/i18n/et.po @@ -0,0 +1,63 @@ +# Estonian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2011-10-10 19:29+0000\n" +"Last-Translator: Aare Vesi \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Lähtesta" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "" diff --git a/addons/web_dashboard/i18n/fi.po b/addons/web_dashboard/i18n/fi.po new file mode 100644 index 00000000000..a96f717eced --- /dev/null +++ b/addons/web_dashboard/i18n/fi.po @@ -0,0 +1,95 @@ +# Finnish translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-03-19 12:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Muokkaa näkymää" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Oletko varma että haluat poistaa tämän osan ?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Palauta asettelu.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Palauta" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Muuta asettelu.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Muuta asettelu" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Luo" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Valitse työpöydän asetttelu" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Suorita tehtävä \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Merkitse tämä tehtävä valmiiksi" + +#~ msgid "Uncategorized" +#~ msgstr "Luokittelemattomat" + +#~ msgid "Your login:" +#~ msgstr "Käyttäjätunnuksesi:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Muista luoda kirjainmerkki" + +#~ msgid "This url" +#~ msgstr "Tämä osoite" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Klikkaa allalistattuja toimintoja käynnistääksesi ne ja määritelläksesi " +#~ "järjestelmäsi" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Tervetuloa OpenERP järjestelmään" + +#~ msgid "progress:" +#~ msgstr "edistyminen:" diff --git a/addons/web_dashboard/i18n/fr.po b/addons/web_dashboard/i18n/fr.po new file mode 100644 index 00000000000..d97de9b31f6 --- /dev/null +++ b/addons/web_dashboard/i18n/fr.po @@ -0,0 +1,96 @@ +# French translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-15 09:15+0000\n" +"Last-Translator: Olivier Dony (OpenERP) \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Modifier l'agencement" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Voulez-vous réellement supprimer cet élément?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Réinitialiser l'agencement" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Réinitialiser" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Modifier l'agencement..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Modifier l'agencement" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Créer" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Choisissez la mise en page du tableau de bord" + +#~ msgid "Your login:" +#~ msgstr "Votre identifiant:" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Bienvenue dans OpenERP" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Démarrer la tâche \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Marquer cette tâche comme accomplie" + +#~ msgid "Uncategorized" +#~ msgstr "Sans catégorie" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Les raccourcis ci-dessous permettent de démarrer les étapes principales de " +#~ "configuration de votre système" + +#~ msgid "Remember to bookmark" +#~ msgstr "" +#~ "Pensez à ajouter cette page à vos signets/marque pages en cliquant sur" + +#~ msgid "This url" +#~ msgstr "ce lien" + +#~ msgid "progress:" +#~ msgstr "Progression :" diff --git a/addons/web_dashboard/i18n/gl.po b/addons/web_dashboard/i18n/gl.po new file mode 100644 index 00000000000..2ef3bc60ba9 --- /dev/null +++ b/addons/web_dashboard/i18n/gl.po @@ -0,0 +1,95 @@ +# Galician translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-16 09:13+0000\n" +"Last-Translator: Vicente \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Editar disposición" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "¿Está seguro de querer eliminar este elemento?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Reiniciar Dosposición.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Reiniciar" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Cambiar Disposición.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Cambiar Disposición" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Crear" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Cambiar disposición do taboleiro" + +#~ msgid "progress:" +#~ msgstr "progreso:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Pinchar nas funcionalidades listadas a continuación para lanzar e configurar " +#~ "o seu sistema" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Benvido a OpenERP" + +#~ msgid "Uncategorized" +#~ msgstr "Sen categorizar" + +#~ msgid "Your login:" +#~ msgstr "Seu inicio de sesión:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Recordar o marcador" + +#~ msgid "This url" +#~ msgstr "Esta url" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Executar Tarefa \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Marcar esta tarefa como feita" diff --git a/addons/web_dashboard/i18n/hr.po b/addons/web_dashboard/i18n/hr.po new file mode 100644 index 00000000000..1a8740b4ecd --- /dev/null +++ b/addons/web_dashboard/i18n/hr.po @@ -0,0 +1,93 @@ +# Croatian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-22 10:13+0000\n" +"Last-Translator: Goran Kliska \n" +"Language-Team: Croatian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Uredi raspored" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Želite li doista ukloniti ovu stavku ?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Resetiraj razmještaj..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Vrati izvorno" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Promjeni razmještaj..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Promjeni raspored" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Kreiraj" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Odaberi raspored" + +#~ msgid "progress:" +#~ msgstr "napredak:" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Dobrodošli u svijet OpenERP-a" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "Odaberite funkcionalnost koju želite postaviti" + +#~ msgid "This url" +#~ msgstr "Ovaj url" + +#~ msgid "Your login:" +#~ msgstr "Vaša prijava:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Zabilježi u knjižne oznake" + +#~ msgid "Uncategorized" +#~ msgstr "Nekategorizirano" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Izvrši zadatak \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Označi ovaj zadatak kao obavljen" diff --git a/addons/web_dashboard/i18n/id.po b/addons/web_dashboard/i18n/id.po new file mode 100644 index 00000000000..85ec461e635 --- /dev/null +++ b/addons/web_dashboard/i18n/id.po @@ -0,0 +1,86 @@ +# Indonesian translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-08 15:13+0000\n" +"Last-Translator: Budi Iskandar \n" +"Language-Team: Indonesian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Ubah Tampilan" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Apakah Anda yakin untuk menghapus item ini ?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Atur Ulang Tampilan" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Atur Ulang" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Ubah Tampilan.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Ubah Tampilan" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Buat" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Pilih Tampilan Dasbor" + +#~ msgid "Uncategorized" +#~ msgstr "Tanpa kategori" + +#~ msgid "Your login:" +#~ msgstr "Akun Anda :" + +#~ msgid "Remember to bookmark" +#~ msgstr "Ingatkan untuk menandai" + +#~ msgid "This url" +#~ msgstr "URL ini" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "Pilih Fungsi dibawah ini yang akan dikonfigurasikan ke sistem Anda" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Selamat Datang di OpenERP" + +#~ msgid "progress:" +#~ msgstr "Sedang diproses.." diff --git a/addons/web_dashboard/i18n/it.po b/addons/web_dashboard/i18n/it.po new file mode 100644 index 00000000000..56e8712d1d3 --- /dev/null +++ b/addons/web_dashboard/i18n/it.po @@ -0,0 +1,95 @@ +# Italian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-16 21:54+0000\n" +"Last-Translator: Davide Corio - agilebg.com \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Modifica Layour" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Sicuro di voler cancellare questo elemento?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Reimposta Layout.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Ripristina" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Cambia Layout.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Cambia Layout" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Crea" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Scegli layout dashboard" + +#~ msgid "progress:" +#~ msgstr "avanzamento:" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Esegui task \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Marca questa attività come completata" + +#~ msgid "Uncategorized" +#~ msgstr "Non categorizzato" + +#~ msgid "Remember to bookmark" +#~ msgstr "Salva nei bookmark" + +#~ msgid "Your login:" +#~ msgstr "Il tuo login:" + +#~ msgid "This url" +#~ msgstr "Questo url" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Clicca sulla lista di funzionalità seguenti per eseguirle e configurare il " +#~ "sistema" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Benvenuto su OpenERP" diff --git a/addons/web_dashboard/i18n/ja.po b/addons/web_dashboard/i18n/ja.po new file mode 100644 index 00000000000..6acd0164d12 --- /dev/null +++ b/addons/web_dashboard/i18n/ja.po @@ -0,0 +1,93 @@ +# Japanese translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-07-19 01:29+0000\n" +"Last-Translator: Akira Hiyama \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "レイアウトの編集" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "この項目を削除しますか?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "レイアウトのリセット" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "リセット" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "レイアウトの変更…" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "レイアウトの変更" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "作成" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "ダッシュボードレイアウトの選択" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "タスク \"%s\" を実行" + +#~ msgid "Mark this task as done" +#~ msgstr "このタスクを完了" + +#~ msgid "Uncategorized" +#~ msgstr "未分類" + +#~ msgid "Your login:" +#~ msgstr "あなたのログイン:" + +#~ msgid "Remember to bookmark" +#~ msgstr "ブックマークをお忘れなく" + +#~ msgid "This url" +#~ msgstr "このURL" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "あなたのシステムを設定するために下記に示した機能をクリックしてください。" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "OpenERPへようこそ" + +#~ msgid "progress:" +#~ msgstr "プロセス" diff --git a/addons/web_dashboard/i18n/ka.po b/addons/web_dashboard/i18n/ka.po new file mode 100644 index 00000000000..fd59b825448 --- /dev/null +++ b/addons/web_dashboard/i18n/ka.po @@ -0,0 +1,94 @@ +# Georgian translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-03-15 18:30+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Georgian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "განლაგების შეცვლა" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "დარწმუნებული ხართ რომ გსურთ ამ კომპონენტის წაშლა?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "საწყისი განლაგება" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "ხელახალი კონფიგურაცია" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "განლაგების შეცვლა.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "განლაგების შეცვლა" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "შექმნა" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "აირჩიეთ საინფორმაციო დაფის განლაგება" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "შეასრულე ამოცანა \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "მონიშნე ეს ამოცანა როგორც დასრულებული" + +#~ msgid "Uncategorized" +#~ msgstr "კატეგორიის გარეშე" + +#~ msgid "Your login:" +#~ msgstr "თქვენი მოხმარებელი:" + +#~ msgid "Remember to bookmark" +#~ msgstr "ჩაინიშნე ფავორიტებში" + +#~ msgid "This url" +#~ msgstr "ეს URL" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "დააწკაპუნეთ ქვემოთ ჩამოთვლილ ფუნქციონალზე რათა გაააქტიუროთ და დააკონფიგურიროთ" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "მოგესალმებით!" + +#~ msgid "progress:" +#~ msgstr "პროგრესი:" diff --git a/addons/web_dashboard/i18n/mk.po b/addons/web_dashboard/i18n/mk.po new file mode 100644 index 00000000000..648a47760cd --- /dev/null +++ b/addons/web_dashboard/i18n/mk.po @@ -0,0 +1,88 @@ +# Macedonian translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-08 11:07+0000\n" +"Last-Translator: Nikola Stojanoski \n" +"Language-Team: Macedonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Измени изглед" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Дали сте стигурни дека сакате да го отстраните ојој предмет?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Ресетирај Изглед.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Ресетирај" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Измени изглед.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Измени изглед" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Креирај" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Одбери изглед на таблата" + +#~ msgid "Uncategorized" +#~ msgstr "Некатегоризирано" + +#~ msgid "Your login:" +#~ msgstr "Ваше корисничко име:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Не заборавајте да го обележите" + +#~ msgid "This url" +#~ msgstr "Овој линк" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Кликнете на функционалностите листани подоле за да ги стартувате и да го " +#~ "конфигуриате вашиот систем" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Добредојдовте во OpenERP" + +#~ msgid "progress:" +#~ msgstr "прогрес:" diff --git a/addons/web_dashboard/i18n/mn.po b/addons/web_dashboard/i18n/mn.po new file mode 100644 index 00000000000..42a44b1d3c8 --- /dev/null +++ b/addons/web_dashboard/i18n/mn.po @@ -0,0 +1,94 @@ +# Mongolian translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-06-13 17:34+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Mongolian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Бүрэлдэхүүнийг засах" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Энэ зүйлийг хасахдаа итгэлтэй байна уу?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Бүрэлдэхүүнийг сэргээх" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Сэргээх" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Бүрэлдэхүүнийг солих" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Бүрэлдэхүүнийг солих" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Үүсгэх" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Хянах самбарын зохиомжийг сонгох" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "\"%s\" Даалгаврыг хэрэгжүүлэх" + +#~ msgid "Mark this task as done" +#~ msgstr "Энэ даалгаврыг хийснээр тэмдэглэх" + +#~ msgid "Uncategorized" +#~ msgstr "Ангилагдаагүй" + +#~ msgid "Your login:" +#~ msgstr "Таны нэвтрэх нэр:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Доорх функционалийн жагсаалт дээр дарж ажилллуулж өөрийн системийн тохируулна" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "OpenERP-д тавтай морил" + +#~ msgid "progress:" +#~ msgstr "явц:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Тэмдэглэж авахаа мартаваа" + +#~ msgid "This url" +#~ msgstr "Энэ url нь" diff --git a/addons/web_dashboard/i18n/nb.po b/addons/web_dashboard/i18n/nb.po new file mode 100644 index 00000000000..13d68632dca --- /dev/null +++ b/addons/web_dashboard/i18n/nb.po @@ -0,0 +1,69 @@ +# Norwegian Bokmal translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-03-28 13:07+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Norwegian Bokmal \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Rediger layout" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Tilbakestill" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Endre layout.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Endre layout" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "" + +#~ msgid "Mark this task as done" +#~ msgstr "Merk denne oppgaven som ferdig" + +#~ msgid "Uncategorized" +#~ msgstr "Ikke kategorisert" diff --git a/addons/web_dashboard/i18n/nl.po b/addons/web_dashboard/i18n/nl.po new file mode 100644 index 00000000000..ae63f0e49a8 --- /dev/null +++ b/addons/web_dashboard/i18n/nl.po @@ -0,0 +1,95 @@ +# Dutch translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-03-19 08:25+0000\n" +"Last-Translator: Erwin \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Bewerk Opmaak" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Weet u zeker dat u dit item wilt verwijderen?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Reset Opmaak" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Reset" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Verander Opmaak..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Opmaak wijzigen" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Nieuw" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Kies dashboard layout" + +#~ msgid "progress:" +#~ msgstr "voortgang:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Klink op de onderstaande functionaliteiten om ze de starten en uw systeem te " +#~ "configureren" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Welkom bij OpenERP" + +#~ msgid "Uncategorized" +#~ msgstr "Geen categorie" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Voer taak \"%s\" uit" + +#~ msgid "Mark this task as done" +#~ msgstr "Markeer deze taak als voltooid" + +#~ msgid "Your login:" +#~ msgstr "Uw login:" + +#~ msgid "This url" +#~ msgstr "Deze pagina" + +#~ msgid "Remember to bookmark" +#~ msgstr "Vergeet niet een bladwijzer aan te maken van" diff --git a/addons/web_dashboard/i18n/nl_BE.po b/addons/web_dashboard/i18n/nl_BE.po new file mode 100644 index 00000000000..ef4fd987175 --- /dev/null +++ b/addons/web_dashboard/i18n/nl_BE.po @@ -0,0 +1,94 @@ +# Dutch (Belgium) translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-05-15 14:13+0000\n" +"Last-Translator: Els Van Vossel (Agaplan) \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Lay-out bewerken" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Wilt u dit onderdeel verwijderen?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Lay-out herstellen" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Beginwaarden herstellen" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Lay-out wijzigen" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Lay-out wijzigen" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Maken" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Dashboardlay-out kiezen" + +#~ msgid "Your login:" +#~ msgstr "Uw gegevens:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Vergeet geen bladwijzer te maken" + +#~ msgid "This url" +#~ msgstr "naar deze url" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Welkom bij OpenERP" + +#~ msgid "progress:" +#~ msgstr "voortgang:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Klik op een optie in de lijst hieronder om de functionaliteit in te stellen" + +#~ msgid "Uncategorized" +#~ msgstr "Zonder categorie" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Taak \"%s\" uitvoeren" + +#~ msgid "Mark this task as done" +#~ msgstr "Taak als voltooid markeren" diff --git a/addons/web_dashboard/i18n/pl.po b/addons/web_dashboard/i18n/pl.po new file mode 100644 index 00000000000..3f086ddd5ae --- /dev/null +++ b/addons/web_dashboard/i18n/pl.po @@ -0,0 +1,95 @@ +# Polish translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2011-11-04 16:28+0000\n" +"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Edytuj układ" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Jesteś pewien, że chcesz usunąć ten element?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Przywracanie układu..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Przywróć" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Zmiana układu..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Zmień układ" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Utwórz" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Wybierz układ konsoli" + +#~ msgid "progress:" +#~ msgstr "postęp:" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Wykonaj zadanie \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Oznacz zadanie jako wykonane" + +#~ msgid "Uncategorized" +#~ msgstr "Bez kategorii" + +#~ msgid "Your login:" +#~ msgstr "Twój login:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Zapisz w zakładkach" + +#~ msgid "This url" +#~ msgstr "Ten url" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Kliknij funkcjonalności z listy poniżej, aby je zainstalować i skonfigurować " +#~ "system" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Witamy w OpenERP" diff --git a/addons/web_dashboard/i18n/pt.po b/addons/web_dashboard/i18n/pt.po new file mode 100644 index 00000000000..f1743dab71f --- /dev/null +++ b/addons/web_dashboard/i18n/pt.po @@ -0,0 +1,95 @@ +# Portuguese translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-16 02:22+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Editar Estrutura" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Tem a certeza que pretende remover este item?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Repôr Estrutura" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Repôr" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Modificar Estrutura" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Modificar Estrutura" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Criar" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Escolha a configuração do painel" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Executar tarefa \"%s\"" + +#~ msgid "Uncategorized" +#~ msgstr "Sem categoria" + +#~ msgid "progress:" +#~ msgstr "progresso:" + +#~ msgid "Mark this task as done" +#~ msgstr "Marcar esta tarefa como concluída" + +#~ msgid "Remember to bookmark" +#~ msgstr "Relembrar para favoritos" + +#~ msgid "This url" +#~ msgstr "Este endereço" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Clique nas funcionalidades listadas abaixo para as lançar e configurar o seu " +#~ "sistema" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Bem-vindo ao OpenERP" + +#~ msgid "Your login:" +#~ msgstr "Os seus acesso:" diff --git a/addons/web_dashboard/i18n/pt_BR.po b/addons/web_dashboard/i18n/pt_BR.po new file mode 100644 index 00000000000..f79ffbc41b1 --- /dev/null +++ b/addons/web_dashboard/i18n/pt_BR.po @@ -0,0 +1,95 @@ +# Brazilian Portuguese translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-16 01:35+0000\n" +"Last-Translator: Rafael Sales - http://www.tompast.com.br \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Editar Layout" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Você tem certeza que quer remover este item ?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Resetar Layout.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Restaurar" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Mudar Layout.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Mudar Layout" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Criar" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Escolha o Layout do Painel" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Bem Vindo ao OpenERP" + +#~ msgid "progress:" +#~ msgstr "progresso:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Clique em alguma funcionalidade listada abaixo para ativa-lá e configurar no " +#~ "seu sistema" + +#~ msgid "Your login:" +#~ msgstr "Seu login:" + +#~ msgid "This url" +#~ msgstr "Esta url" + +#~ msgid "Uncategorized" +#~ msgstr "Não Categorizado" + +#~ msgid "Remember to bookmark" +#~ msgstr "Marcar no bookmark" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Execute a tarefa \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Marcar esta tarefa como realizada" diff --git a/addons/web_dashboard/i18n/ro.po b/addons/web_dashboard/i18n/ro.po new file mode 100644 index 00000000000..3f64c299463 --- /dev/null +++ b/addons/web_dashboard/i18n/ro.po @@ -0,0 +1,95 @@ +# Romanian translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-03-10 13:19+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Romanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Editare format" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Sunteti sigur(a) ca doriti sa stergeti acest element?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Reseteaza formatul" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Reseteaza" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Schimba formatul.." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Modifica formatul" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Creati" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Alegeti formatul tabloului de bord" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Bun venit in OpenERP" + +#~ msgid "progress:" +#~ msgstr "progres:" + +#~ msgid "This url" +#~ msgstr "Acest url" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Executa sarcina \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Marcheaza aceasta sarcina ca efectuata" + +#~ msgid "Uncategorized" +#~ msgstr "Neclasificat" + +#~ msgid "Your login:" +#~ msgstr "Autentificarea dumneavoastra:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Amintiti-va sa marcati" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Faceti clic pe functionalitatile de mai jos pentru a le porni si a va " +#~ "configura sistemul" diff --git a/addons/web_dashboard/i18n/ru.po b/addons/web_dashboard/i18n/ru.po new file mode 100644 index 00000000000..59aba44f309 --- /dev/null +++ b/addons/web_dashboard/i18n/ru.po @@ -0,0 +1,94 @@ +# Russian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-17 07:37+0000\n" +"Last-Translator: Aleksei Motsik \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Редактировать макет" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Вы действительно хотите удалить этот объект?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Обнулить Макет..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Сбросить" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Изменить Макет..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Изменить Макет" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Создать" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Выбрать внешний вид" + +#~ msgid "progress:" +#~ msgstr "прогресс:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Нажмите на списке функций ниже для их запуска и конфигурации вашей системы" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Добро пожаловать в OpenERP" + +#~ msgid "Uncategorized" +#~ msgstr "Без категории" + +#~ msgid "Your login:" +#~ msgstr "Ваше Имя пользователя:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Добавить в закладки" + +#~ msgid "This url" +#~ msgstr "Эта ссылка" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Выполнить задачу \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Отметить завершенной" diff --git a/addons/web_dashboard/i18n/sk.po b/addons/web_dashboard/i18n/sk.po new file mode 100644 index 00000000000..05b57d4a5fc --- /dev/null +++ b/addons/web_dashboard/i18n/sk.po @@ -0,0 +1,63 @@ +# Slovak translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2011-10-23 14:45+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "" diff --git a/addons/web_dashboard/i18n/sl.po b/addons/web_dashboard/i18n/sl.po new file mode 100644 index 00000000000..7765a480584 --- /dev/null +++ b/addons/web_dashboard/i18n/sl.po @@ -0,0 +1,93 @@ +# Slovenian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-01-30 17:50+0000\n" +"Last-Translator: ERP Basing \n" +"Language-Team: Slovenian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Uredi izgled" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Res želite odstraniti to postavko ?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Povrni postavitev" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Povrni" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Spremeni postavitev" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Spremeni postavitev" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Ustvari" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Izberite postavitev nadzorne plošče" + +#~ msgid "progress:" +#~ msgstr "napredek:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "Kliknite spodnje nastavitve, da se odprejo in lahko nastavite sistem" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Dobrodošli v OpenERP" + +#~ msgid "Your login:" +#~ msgstr "Vaša prijava:" + +#~ msgid "This url" +#~ msgstr "Ta naslov (url)" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Izvedi opravilo \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Označi to opravilo kot opravljeno" + +#~ msgid "Uncategorized" +#~ msgstr "Neopredeljeno" + +#~ msgid "Remember to bookmark" +#~ msgstr "Ustvarite zaznamek ( bookmark)" diff --git a/addons/web_dashboard/i18n/sq.po b/addons/web_dashboard/i18n/sq.po new file mode 100644 index 00000000000..a6c36be2dfb --- /dev/null +++ b/addons/web_dashboard/i18n/sq.po @@ -0,0 +1,63 @@ +# Albanian translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-01 00:15+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Albanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "" diff --git a/addons/web_dashboard/i18n/sr@latin.po b/addons/web_dashboard/i18n/sr@latin.po new file mode 100644 index 00000000000..2733acae7fb --- /dev/null +++ b/addons/web_dashboard/i18n/sr@latin.po @@ -0,0 +1,88 @@ +# Serbian Latin translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-09 21:03+0000\n" +"Last-Translator: zmmaj \n" +"Language-Team: Serbian Latin \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Uredi Izgled" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Jesi li siguran da želiš ukloniti ovu stavku?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Resetuj Izgled" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Resetuj" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Izmeni Izgled..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Izmeni Izgled" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Kreiraj" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Izaberi Izgled kontrolnog panela" + +#~ msgid "Uncategorized" +#~ msgstr "Nekategorisano" + +#~ msgid "Your login:" +#~ msgstr "Vaša prijava:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Sačuvaj u podsetniku" + +#~ msgid "This url" +#~ msgstr "Ovaj url" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Klikni na neku od funkcija nabrojanu ispod kako bi je pokrenuo i uredio svoj " +#~ "sistem" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Dobrodošli u OpenERP" + +#~ msgid "progress:" +#~ msgstr "napredak:" diff --git a/addons/web_dashboard/i18n/sv.po b/addons/web_dashboard/i18n/sv.po new file mode 100644 index 00000000000..4a07d59e55c --- /dev/null +++ b/addons/web_dashboard/i18n/sv.po @@ -0,0 +1,94 @@ +# Swedish translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-04-17 09:21+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Ändra layout" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Är du säker på att du vill radera?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Återställ layouten" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Nollställ" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Ändra layout..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Ändra layout" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Skapa" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Välj infopanellayout" + +#~ msgid "Mark this task as done" +#~ msgstr "Markera denna uppgift som färdig" + +#~ msgid "Uncategorized" +#~ msgstr "Okategoriserad" + +#~ msgid "Remember to bookmark" +#~ msgstr "Kom ihåg att spara ett bokmärke till" + +#~ msgid "This url" +#~ msgstr "denna url" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Välj bland funktionerna nedan för att starta och konfigurera ditt system" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "Välkommen till OpenERP" + +#~ msgid "Your login:" +#~ msgstr "Din inloggning:" + +#~ msgid "progress:" +#~ msgstr "framsteg:" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Utför åtgärd \"%s\"" diff --git a/addons/web_dashboard/i18n/tr.po b/addons/web_dashboard/i18n/tr.po new file mode 100644 index 00000000000..ab763cdab69 --- /dev/null +++ b/addons/web_dashboard/i18n/tr.po @@ -0,0 +1,94 @@ +# Turkish translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-24 11:28+0000\n" +"Last-Translator: Ahmet Altınışık \n" +"Language-Team: Turkish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "Şablonu değiştir" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "Bu kayıdı silmek istediğinize emin misiniz?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "Düzeni Sıfırla..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "Yeniden başlat" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "Düzeni Değiştir..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "Düzeni Değiştir" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "Oluştur" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "Yönetim Paneli Yerleşmini Seç" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "" +#~ "Aşağıdaki fonksiyon adlarının üzerlerine tıklayarak ayarları yapabilirsiniz." + +#~ msgid "Welcome to OpenERP" +#~ msgstr "OpenERP ye hoşgeldiniz." + +#~ msgid "progress:" +#~ msgstr "İlerleme:" + +#~ msgid "Your login:" +#~ msgstr "Kullanıcı Adınız:" + +#~ msgid "Remember to bookmark" +#~ msgstr "Yer imlerine ekleyin:" + +#~ msgid "This url" +#~ msgstr "Bu Sayfayı" + +#~ msgid "Uncategorized" +#~ msgstr "Sınıflandırılmamış" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "Görevi Çalıştır \"%s\"" + +#~ msgid "Mark this task as done" +#~ msgstr "Bu görevi yapıldı olarak işaretle" diff --git a/addons/web_dashboard/i18n/uk.po b/addons/web_dashboard/i18n/uk.po new file mode 100644 index 00000000000..051bd288cf4 --- /dev/null +++ b/addons/web_dashboard/i18n/uk.po @@ -0,0 +1,63 @@ +# Ukrainian translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-07-22 09:32+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "" diff --git a/addons/web_dashboard/i18n/zh_CN.po b/addons/web_dashboard/i18n/zh_CN.po new file mode 100644 index 00000000000..573af969589 --- /dev/null +++ b/addons/web_dashboard/i18n/zh_CN.po @@ -0,0 +1,93 @@ +# Chinese (Simplified) translation for openerp-web +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-07-02 09:06+0200\n" +"PO-Revision-Date: 2012-02-15 13:18+0000\n" +"Last-Translator: Wei \"oldrev\" Li \n" +"Language-Team: Chinese (Simplified) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:60 +msgid "Edit Layout" +msgstr "编辑布局" + +#. openerp-web +#: addons/web_dashboard/static/src/js/dashboard.js:106 +msgid "Are you sure you want to remove this item ?" +msgstr "您确定要移除此条目吗?" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:4 +msgid "Reset Layout.." +msgstr "重置布局..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:6 +msgid "Reset" +msgstr "复位" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:8 +msgid "Change Layout.." +msgstr "更改布局..." + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:10 +msgid "Change Layout" +msgstr "更改布局" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:27 +msgid " " +msgstr " " + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:28 +msgid "Create" +msgstr "创建" + +#. openerp-web +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:39 +msgid "Choose dashboard layout" +msgstr "选择仪表盘布局" + +#~ msgid "Welcome to OpenERP" +#~ msgstr "欢迎使用 OpenERP" + +#~ msgid "progress:" +#~ msgstr "进度:" + +#~ msgid "" +#~ "Click on the functionalites listed below to launch them and configure your " +#~ "system" +#~ msgstr "单击以下功能列表打开配置界面" + +#~ msgid "Your login:" +#~ msgstr "您的用户名:" + +#~ msgid "Remember to bookmark" +#~ msgstr "加入书签" + +#~ msgid "This url" +#~ msgstr "此网址" + +#~ msgid "Uncategorized" +#~ msgstr "未分类" + +#, python-format +#~ msgid "Execute task \"%s\"" +#~ msgstr "执行任务“%s”" + +#~ msgid "Mark this task as done" +#~ msgstr "将此任务标记为完成" diff --git a/addons/web_diagram/i18n/ar.po b/addons/web_diagram/i18n/ar.po index 87521be7472..aa3ae8af5b1 100644 --- a/addons/web_diagram/i18n/ar.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/bg.po b/addons/web_diagram/i18n/bg.po index e7613b6c55b..20c833a6e74 100644 --- a/addons/web_diagram/i18n/bg.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/bn.po b/addons/web_diagram/i18n/bn.po index 7d0b47abe2d..28652b46dfe 100644 --- a/addons/web_diagram/i18n/bn.po +++ b/addons/web_diagram/i18n/bn.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/bs.po b/addons/web_diagram/i18n/bs.po index f0450da6f36..21c7896e576 100644 --- a/addons/web_diagram/i18n/bs.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/ca.po b/addons/web_diagram/i18n/ca.po index c08b09580e5..7a4e683e583 100644 --- a/addons/web_diagram/i18n/ca.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/cs.po b/addons/web_diagram/i18n/cs.po index f2dcdbfb720..ebe8d76ce29 100644 --- a/addons/web_diagram/i18n/cs.po +++ b/addons/web_diagram/i18n/cs.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" "X-Poedit-Language: Czech\n" #. openerp-web diff --git a/addons/web_diagram/i18n/da.po b/addons/web_diagram/i18n/da.po index 5cc7424da66..cdaa7345bca 100644 --- a/addons/web_diagram/i18n/da.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/de.po b/addons/web_diagram/i18n/de.po index 60521dd6c1d..c69b5256fdd 100644 --- a/addons/web_diagram/i18n/de.po +++ b/addons/web_diagram/i18n/de.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/en_GB.po b/addons/web_diagram/i18n/en_GB.po index cd478a2f601..97146a46512 100644 --- a/addons/web_diagram/i18n/en_GB.po +++ b/addons/web_diagram/i18n/en_GB.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/es.po b/addons/web_diagram/i18n/es.po index 91cc88982f6..c01b4f86693 100644 --- a/addons/web_diagram/i18n/es.po +++ b/addons/web_diagram/i18n/es.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/es_CL.po b/addons/web_diagram/i18n/es_CL.po index 2facb2104d7..ee83c5c6385 100644 --- a/addons/web_diagram/i18n/es_CL.po +++ b/addons/web_diagram/i18n/es_CL.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/es_CR.po b/addons/web_diagram/i18n/es_CR.po index 73a3332822f..7b03e9669f0 100644 --- a/addons/web_diagram/i18n/es_CR.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" "Language: es\n" #. openerp-web diff --git a/addons/web_diagram/i18n/es_EC.po b/addons/web_diagram/i18n/es_EC.po index 1150916182f..2a21b744f43 100644 --- a/addons/web_diagram/i18n/es_EC.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/et.po b/addons/web_diagram/i18n/et.po index bf7c47cab1e..55413cd7a7d 100644 --- a/addons/web_diagram/i18n/et.po +++ b/addons/web_diagram/i18n/et.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/fi.po b/addons/web_diagram/i18n/fi.po index 172fa4d4bad..4a7b36c8394 100644 --- a/addons/web_diagram/i18n/fi.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/fr.po b/addons/web_diagram/i18n/fr.po index 1f652a828f7..84a40fe37be 100644 --- a/addons/web_diagram/i18n/fr.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/gl.po b/addons/web_diagram/i18n/gl.po index df05a2291b9..4af30819269 100644 --- a/addons/web_diagram/i18n/gl.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/hr.po b/addons/web_diagram/i18n/hr.po index 1dc9000c8d6..4b335dddb5c 100644 --- a/addons/web_diagram/i18n/hr.po +++ b/addons/web_diagram/i18n/hr.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/id.po b/addons/web_diagram/i18n/id.po index 9791c01e669..5543c8d127e 100644 --- a/addons/web_diagram/i18n/id.po +++ b/addons/web_diagram/i18n/id.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/it.po b/addons/web_diagram/i18n/it.po index 711f0ae76f3..490676cc10e 100644 --- a/addons/web_diagram/i18n/it.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/ja.po b/addons/web_diagram/i18n/ja.po index fe2e77ef232..8244f6136a3 100644 --- a/addons/web_diagram/i18n/ja.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/ka.po b/addons/web_diagram/i18n/ka.po index 19dc98ecb82..83999c5b3d2 100644 --- a/addons/web_diagram/i18n/ka.po +++ b/addons/web_diagram/i18n/ka.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/mn.po b/addons/web_diagram/i18n/mn.po index e63ab8672ab..21d9b85a194 100644 --- a/addons/web_diagram/i18n/mn.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/nl.po b/addons/web_diagram/i18n/nl.po index 68d1162d84f..ca4a2c29bd0 100644 --- a/addons/web_diagram/i18n/nl.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/nl_BE.po b/addons/web_diagram/i18n/nl_BE.po index f973833f20a..4a80d307fb8 100644 --- a/addons/web_diagram/i18n/nl_BE.po +++ b/addons/web_diagram/i18n/nl_BE.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/pl.po b/addons/web_diagram/i18n/pl.po index bd3356dc1b9..70a16def0c9 100644 --- a/addons/web_diagram/i18n/pl.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/pt.po b/addons/web_diagram/i18n/pt.po index d9d5b146e3f..24c54f5dbbd 100644 --- a/addons/web_diagram/i18n/pt.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/pt_BR.po b/addons/web_diagram/i18n/pt_BR.po index fd6155a8f99..9a5b776cd11 100644 --- a/addons/web_diagram/i18n/pt_BR.po +++ b/addons/web_diagram/i18n/pt_BR.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-07-02 09:06+0200\n" "PO-Revision-Date: 2012-02-08 03:22+0000\n" -"Last-Translator: Luis Felipe Miléo \n" +"Last-Translator: Luis Felipe Miléo - http://www.akretion.com \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/ro.po b/addons/web_diagram/i18n/ro.po index ae8f2afa721..75e35add59b 100644 --- a/addons/web_diagram/i18n/ro.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/ru.po b/addons/web_diagram/i18n/ru.po index 5cf278e2997..89a988b49da 100644 --- a/addons/web_diagram/i18n/ru.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/sl.po b/addons/web_diagram/i18n/sl.po index 8b9f82d6fd0..8be46d53966 100644 --- a/addons/web_diagram/i18n/sl.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/sq.po b/addons/web_diagram/i18n/sq.po index e2598647e49..2a45df6a62f 100644 --- a/addons/web_diagram/i18n/sq.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/sr@latin.po b/addons/web_diagram/i18n/sr@latin.po index 2a6723e5a67..beafe88dbf3 100644 --- a/addons/web_diagram/i18n/sr@latin.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/sv.po b/addons/web_diagram/i18n/sv.po index 20c46723e5b..0b20d56a50c 100644 --- a/addons/web_diagram/i18n/sv.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/tr.po b/addons/web_diagram/i18n/tr.po index 593ed8d2b1d..c0b76cf08c5 100644 --- a/addons/web_diagram/i18n/tr.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_diagram/i18n/zh_CN.po b/addons/web_diagram/i18n/zh_CN.po index 207a22f584a..e931ac4d03e 100644 --- a/addons/web_diagram/i18n/zh_CN.po +++ b/addons/web_diagram/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_diagram/static/src/js/diagram.js:11 diff --git a/addons/web_gantt/i18n/ar.po b/addons/web_gantt/i18n/ar.po index 0eb76e5c300..d5eef7a92db 100644 --- a/addons/web_gantt/i18n/ar.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/bg.po b/addons/web_gantt/i18n/bg.po index b0794e37994..6eb9f08d8ab 100644 --- a/addons/web_gantt/i18n/bg.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/bn.po b/addons/web_gantt/i18n/bn.po index 9b1cb628919..1c4dfc05717 100644 --- a/addons/web_gantt/i18n/bn.po +++ b/addons/web_gantt/i18n/bn.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/bs.po b/addons/web_gantt/i18n/bs.po index db64ea47f4c..155467c9eb6 100644 --- a/addons/web_gantt/i18n/bs.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/ca.po b/addons/web_gantt/i18n/ca.po index 316dbd42c5c..a375101d7ad 100644 --- a/addons/web_gantt/i18n/ca.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/cs.po b/addons/web_gantt/i18n/cs.po index ab50d1fe3bb..2fbf8a8e8ac 100644 --- a/addons/web_gantt/i18n/cs.po +++ b/addons/web_gantt/i18n/cs.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" "X-Poedit-Language: Czech\n" #. openerp-web diff --git a/addons/web_gantt/i18n/da.po b/addons/web_gantt/i18n/da.po index d5cbf11fe23..1aaea974b18 100644 --- a/addons/web_gantt/i18n/da.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/de.po b/addons/web_gantt/i18n/de.po index e1ccaa430b7..c4c831e072a 100644 --- a/addons/web_gantt/i18n/de.po +++ b/addons/web_gantt/i18n/de.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/en_AU.po b/addons/web_gantt/i18n/en_AU.po index c4c9161cde5..6acc18ffece 100644 --- a/addons/web_gantt/i18n/en_AU.po +++ b/addons/web_gantt/i18n/en_AU.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/en_GB.po b/addons/web_gantt/i18n/en_GB.po index 9f4a636e57a..6a44584b01d 100644 --- a/addons/web_gantt/i18n/en_GB.po +++ b/addons/web_gantt/i18n/en_GB.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/es.po b/addons/web_gantt/i18n/es.po index 0408f97088d..88d7a7d7910 100644 --- a/addons/web_gantt/i18n/es.po +++ b/addons/web_gantt/i18n/es.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/es_CL.po b/addons/web_gantt/i18n/es_CL.po index e7bf94e54ab..0d2babb4487 100644 --- a/addons/web_gantt/i18n/es_CL.po +++ b/addons/web_gantt/i18n/es_CL.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/es_CR.po b/addons/web_gantt/i18n/es_CR.po index 59defb99310..490ee224753 100644 --- a/addons/web_gantt/i18n/es_CR.po +++ b/addons/web_gantt/i18n/es_CR.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/es_EC.po b/addons/web_gantt/i18n/es_EC.po index 3873f6cf523..b26be492ccb 100644 --- a/addons/web_gantt/i18n/es_EC.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/fi.po b/addons/web_gantt/i18n/fi.po index 9594b65c043..38acb800e1b 100644 --- a/addons/web_gantt/i18n/fi.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/fr.po b/addons/web_gantt/i18n/fr.po index 6166d8c274a..0a6993e21b7 100644 --- a/addons/web_gantt/i18n/fr.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/gl.po b/addons/web_gantt/i18n/gl.po index 8c89c5594b3..4ea43a3df49 100644 --- a/addons/web_gantt/i18n/gl.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/hr.po b/addons/web_gantt/i18n/hr.po index f4b7f0dbdba..92030903799 100644 --- a/addons/web_gantt/i18n/hr.po +++ b/addons/web_gantt/i18n/hr.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/hu.po b/addons/web_gantt/i18n/hu.po index 61768244914..da177e4c3ce 100644 --- a/addons/web_gantt/i18n/hu.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/it.po b/addons/web_gantt/i18n/it.po index e2e615bd472..0fab5d5a67c 100644 --- a/addons/web_gantt/i18n/it.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/ja.po b/addons/web_gantt/i18n/ja.po index b813a483e51..45fe347017d 100644 --- a/addons/web_gantt/i18n/ja.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/ka.po b/addons/web_gantt/i18n/ka.po index fb0c7a1c0b5..93351230585 100644 --- a/addons/web_gantt/i18n/ka.po +++ b/addons/web_gantt/i18n/ka.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/mk.po b/addons/web_gantt/i18n/mk.po index 0822b8b7762..7d4bf2c85b5 100644 --- a/addons/web_gantt/i18n/mk.po +++ b/addons/web_gantt/i18n/mk.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/mn.po b/addons/web_gantt/i18n/mn.po index 3b203ac1a8b..83b74b93b6e 100644 --- a/addons/web_gantt/i18n/mn.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/nb.po b/addons/web_gantt/i18n/nb.po index 262f133c2d5..c0a448ffcba 100644 --- a/addons/web_gantt/i18n/nb.po +++ b/addons/web_gantt/i18n/nb.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/nl.po b/addons/web_gantt/i18n/nl.po index ea5e7402671..1554a311556 100644 --- a/addons/web_gantt/i18n/nl.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/nl_BE.po b/addons/web_gantt/i18n/nl_BE.po index ba66e7002a7..5f06bc13bd4 100644 --- a/addons/web_gantt/i18n/nl_BE.po +++ b/addons/web_gantt/i18n/nl_BE.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/pl.po b/addons/web_gantt/i18n/pl.po index aa639f32572..42db7e3e2f4 100644 --- a/addons/web_gantt/i18n/pl.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/pt.po b/addons/web_gantt/i18n/pt.po index 9bf3afdce31..d24d586b90f 100644 --- a/addons/web_gantt/i18n/pt.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/pt_BR.po b/addons/web_gantt/i18n/pt_BR.po index f71191c74cb..6a20c79dc3e 100644 --- a/addons/web_gantt/i18n/pt_BR.po +++ b/addons/web_gantt/i18n/pt_BR.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/ro.po b/addons/web_gantt/i18n/ro.po index 12838eb0d24..dcf8825c5f2 100644 --- a/addons/web_gantt/i18n/ro.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/ru.po b/addons/web_gantt/i18n/ru.po index abb444b9093..77741297e0e 100644 --- a/addons/web_gantt/i18n/ru.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/sl.po b/addons/web_gantt/i18n/sl.po index b650aef90ef..b9b114accb8 100644 --- a/addons/web_gantt/i18n/sl.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/sq.po b/addons/web_gantt/i18n/sq.po index d77d57c2f99..35f0bdb1432 100644 --- a/addons/web_gantt/i18n/sq.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/sr@latin.po b/addons/web_gantt/i18n/sr@latin.po index 6c9f832da94..f2bbeaee08a 100644 --- a/addons/web_gantt/i18n/sr@latin.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/sv.po b/addons/web_gantt/i18n/sv.po index 7d5a3826529..865ecab1cef 100644 --- a/addons/web_gantt/i18n/sv.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/tr.po b/addons/web_gantt/i18n/tr.po index 81e86f817a8..5bc0434bb29 100644 --- a/addons/web_gantt/i18n/tr.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_gantt/i18n/zh_CN.po b/addons/web_gantt/i18n/zh_CN.po index 23b3a8c211d..f3d209bcf15 100644 --- a/addons/web_gantt/i18n/zh_CN.po +++ b/addons/web_gantt/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_gantt/static/src/js/gantt.js:11 diff --git a/addons/web_graph/i18n/ar.po b/addons/web_graph/i18n/ar.po index 40c63ac3140..7bc29fb9f54 100644 --- a/addons/web_graph/i18n/ar.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/bg.po b/addons/web_graph/i18n/bg.po index e97c0cb9853..a4b50e81df7 100644 --- a/addons/web_graph/i18n/bg.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/bn.po b/addons/web_graph/i18n/bn.po index a2eeb53e109..4d6ba634835 100644 --- a/addons/web_graph/i18n/bn.po +++ b/addons/web_graph/i18n/bn.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/bs.po b/addons/web_graph/i18n/bs.po index e4199439506..987fd2f305d 100644 --- a/addons/web_graph/i18n/bs.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/ca.po b/addons/web_graph/i18n/ca.po index ab8f85608d0..6c7ded6fa9c 100644 --- a/addons/web_graph/i18n/ca.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/cs.po b/addons/web_graph/i18n/cs.po index a84002c413e..ba07fc36350 100644 --- a/addons/web_graph/i18n/cs.po +++ b/addons/web_graph/i18n/cs.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/da.po b/addons/web_graph/i18n/da.po index ddc8a465ac2..5fa8dbc2233 100644 --- a/addons/web_graph/i18n/da.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/de.po b/addons/web_graph/i18n/de.po index 9cbdce7782d..ce33aed9eb4 100644 --- a/addons/web_graph/i18n/de.po +++ b/addons/web_graph/i18n/de.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/en_AU.po b/addons/web_graph/i18n/en_AU.po index 26c9a822832..240244f0bf2 100644 --- a/addons/web_graph/i18n/en_AU.po +++ b/addons/web_graph/i18n/en_AU.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/en_GB.po b/addons/web_graph/i18n/en_GB.po index 7a92d0e0908..0b1eb8e8563 100644 --- a/addons/web_graph/i18n/en_GB.po +++ b/addons/web_graph/i18n/en_GB.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/es.po b/addons/web_graph/i18n/es.po index de95d8d6966..953b0aa8442 100644 --- a/addons/web_graph/i18n/es.po +++ b/addons/web_graph/i18n/es.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/es_CL.po b/addons/web_graph/i18n/es_CL.po index 9e654aac91e..4c18cbdf028 100644 --- a/addons/web_graph/i18n/es_CL.po +++ b/addons/web_graph/i18n/es_CL.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/es_CR.po b/addons/web_graph/i18n/es_CR.po index ea64ab38ac2..937825e9e87 100644 --- a/addons/web_graph/i18n/es_CR.po +++ b/addons/web_graph/i18n/es_CR.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/es_EC.po b/addons/web_graph/i18n/es_EC.po index 57b5aa860a6..4594f8fb9ae 100644 --- a/addons/web_graph/i18n/es_EC.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/fi.po b/addons/web_graph/i18n/fi.po index da2418adff0..8e0464cebbf 100644 --- a/addons/web_graph/i18n/fi.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/fr.po b/addons/web_graph/i18n/fr.po index c8e9bc43768..d7c0e21ad4b 100644 --- a/addons/web_graph/i18n/fr.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/gl.po b/addons/web_graph/i18n/gl.po index e2b2fb707cf..7e7da56c039 100644 --- a/addons/web_graph/i18n/gl.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/hr.po b/addons/web_graph/i18n/hr.po index b3ef09f2e34..20f23190c87 100644 --- a/addons/web_graph/i18n/hr.po +++ b/addons/web_graph/i18n/hr.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/hu.po b/addons/web_graph/i18n/hu.po index e75de6cc2e2..16551a88c47 100644 --- a/addons/web_graph/i18n/hu.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/it.po b/addons/web_graph/i18n/it.po index ed74f1beea3..973f21d0443 100644 --- a/addons/web_graph/i18n/it.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/ja.po b/addons/web_graph/i18n/ja.po index 67467c4f16e..26c87813665 100644 --- a/addons/web_graph/i18n/ja.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/ka.po b/addons/web_graph/i18n/ka.po index 9902a169907..388a72fbd3f 100644 --- a/addons/web_graph/i18n/ka.po +++ b/addons/web_graph/i18n/ka.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/mk.po b/addons/web_graph/i18n/mk.po index 785721dace4..94c6168e714 100644 --- a/addons/web_graph/i18n/mk.po +++ b/addons/web_graph/i18n/mk.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/mn.po b/addons/web_graph/i18n/mn.po index 90e5e87caaf..09ba40fc2a8 100644 --- a/addons/web_graph/i18n/mn.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/nl.po b/addons/web_graph/i18n/nl.po index e5c411dfe5c..bf561554cf0 100644 --- a/addons/web_graph/i18n/nl.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/nl_BE.po b/addons/web_graph/i18n/nl_BE.po index c7daddc0f81..c8b1848711c 100644 --- a/addons/web_graph/i18n/nl_BE.po +++ b/addons/web_graph/i18n/nl_BE.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/pl.po b/addons/web_graph/i18n/pl.po index 71462814dba..e2288e2ce36 100644 --- a/addons/web_graph/i18n/pl.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/pt.po b/addons/web_graph/i18n/pt.po index 1d692688596..67689e393bc 100644 --- a/addons/web_graph/i18n/pt.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/pt_BR.po b/addons/web_graph/i18n/pt_BR.po index 94e9811f198..bbc56f6c5b8 100644 --- a/addons/web_graph/i18n/pt_BR.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/ro.po b/addons/web_graph/i18n/ro.po index 1dce85cd6e3..731642e222a 100644 --- a/addons/web_graph/i18n/ro.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/ru.po b/addons/web_graph/i18n/ru.po index 07c65b8a1fd..7466cb72fa3 100644 --- a/addons/web_graph/i18n/ru.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/sl.po b/addons/web_graph/i18n/sl.po index baa37ccf516..2065e62e588 100644 --- a/addons/web_graph/i18n/sl.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/sq.po b/addons/web_graph/i18n/sq.po index e704312db80..6971309d47a 100644 --- a/addons/web_graph/i18n/sq.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/sr@latin.po b/addons/web_graph/i18n/sr@latin.po index 86cf1408adc..90e541ff5c5 100644 --- a/addons/web_graph/i18n/sr@latin.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/sv.po b/addons/web_graph/i18n/sv.po index 148bc01ecdf..9578d80a423 100644 --- a/addons/web_graph/i18n/sv.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/tr.po b/addons/web_graph/i18n/tr.po index c906c947a7b..eb26136eed3 100644 --- a/addons/web_graph/i18n/tr.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_graph/i18n/zh_CN.po b/addons/web_graph/i18n/zh_CN.po index ec09b9fac47..1ecb36d972f 100644 --- a/addons/web_graph/i18n/zh_CN.po +++ b/addons/web_graph/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_graph/static/src/js/graph.js:19 diff --git a/addons/web_hello/i18n/es_CR.po b/addons/web_hello/i18n/es_CR.po index 00c69c0af91..6af81878329 100644 --- a/addons/web_hello/i18n/es_CR.po +++ b/addons/web_hello/i18n/es_CR.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" diff --git a/addons/web_hello/i18n/fr.po b/addons/web_hello/i18n/fr.po index 8c764b9ae5e..9bd64e064df 100644 --- a/addons/web_hello/i18n/fr.po +++ b/addons/web_hello/i18n/fr.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" diff --git a/addons/web_hello/i18n/pt_BR.po b/addons/web_hello/i18n/pt_BR.po index 77cb49c49e1..6b46afa5724 100644 --- a/addons/web_hello/i18n/pt_BR.po +++ b/addons/web_hello/i18n/pt_BR.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" diff --git a/addons/web_kanban/i18n/ar.po b/addons/web_kanban/i18n/ar.po index 5c43ad92b90..a827eb6540e 100644 --- a/addons/web_kanban/i18n/ar.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/bg.po b/addons/web_kanban/i18n/bg.po index 669b09ba704..50c4d1d444b 100644 --- a/addons/web_kanban/i18n/bg.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/bn.po b/addons/web_kanban/i18n/bn.po index db2fa000efb..e9eea4fefd7 100644 --- a/addons/web_kanban/i18n/bn.po +++ b/addons/web_kanban/i18n/bn.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/bs.po b/addons/web_kanban/i18n/bs.po index a25a34f0713..b4b41a46f95 100644 --- a/addons/web_kanban/i18n/bs.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/ca.po b/addons/web_kanban/i18n/ca.po index 1cb20041472..6e16a8fb30f 100644 --- a/addons/web_kanban/i18n/ca.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/cs.po b/addons/web_kanban/i18n/cs.po index 750135e74d0..99a5025b177 100644 --- a/addons/web_kanban/i18n/cs.po +++ b/addons/web_kanban/i18n/cs.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" "X-Poedit-Language: Czech\n" #. openerp-web diff --git a/addons/web_kanban/i18n/da.po b/addons/web_kanban/i18n/da.po index c97eb3d4312..1c822582c43 100644 --- a/addons/web_kanban/i18n/da.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/de.po b/addons/web_kanban/i18n/de.po index 238921e4607..4d52f859fcf 100644 --- a/addons/web_kanban/i18n/de.po +++ b/addons/web_kanban/i18n/de.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/en_GB.po b/addons/web_kanban/i18n/en_GB.po index e11131e248e..26cf16d5a92 100644 --- a/addons/web_kanban/i18n/en_GB.po +++ b/addons/web_kanban/i18n/en_GB.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/es.po b/addons/web_kanban/i18n/es.po index e74c52d3227..73732801baf 100644 --- a/addons/web_kanban/i18n/es.po +++ b/addons/web_kanban/i18n/es.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/es_CL.po b/addons/web_kanban/i18n/es_CL.po index ad1ed2bfad8..bce19d9674e 100644 --- a/addons/web_kanban/i18n/es_CL.po +++ b/addons/web_kanban/i18n/es_CL.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/es_CR.po b/addons/web_kanban/i18n/es_CR.po index e9b273e46b9..a16ee53ccc9 100644 --- a/addons/web_kanban/i18n/es_CR.po +++ b/addons/web_kanban/i18n/es_CR.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/es_EC.po b/addons/web_kanban/i18n/es_EC.po index 69a9779a85b..d879af6f7bc 100644 --- a/addons/web_kanban/i18n/es_EC.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/fi.po b/addons/web_kanban/i18n/fi.po index 5dfc49a27c1..a28844c76df 100644 --- a/addons/web_kanban/i18n/fi.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/fr.po b/addons/web_kanban/i18n/fr.po index aaff514ecf3..d49eedc7f3a 100644 --- a/addons/web_kanban/i18n/fr.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/gl.po b/addons/web_kanban/i18n/gl.po index 73414c096b1..0f5f84a90b6 100644 --- a/addons/web_kanban/i18n/gl.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/hr.po b/addons/web_kanban/i18n/hr.po index 958887931a3..fb8d1f51e4b 100644 --- a/addons/web_kanban/i18n/hr.po +++ b/addons/web_kanban/i18n/hr.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/hu.po b/addons/web_kanban/i18n/hu.po index e759a69ed1b..67b72076833 100644 --- a/addons/web_kanban/i18n/hu.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/it.po b/addons/web_kanban/i18n/it.po index 4a25a51441f..e09a0c5672c 100644 --- a/addons/web_kanban/i18n/it.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/ja.po b/addons/web_kanban/i18n/ja.po index a4c38d1ed78..0e2278c2853 100644 --- a/addons/web_kanban/i18n/ja.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/ka.po b/addons/web_kanban/i18n/ka.po index c5dd08cdb63..108f28916f2 100644 --- a/addons/web_kanban/i18n/ka.po +++ b/addons/web_kanban/i18n/ka.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/mn.po b/addons/web_kanban/i18n/mn.po index d2c6630ee9e..73f79867686 100644 --- a/addons/web_kanban/i18n/mn.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/nl.po b/addons/web_kanban/i18n/nl.po index 7bcdf02f31b..28265f0d03e 100644 --- a/addons/web_kanban/i18n/nl.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/nl_BE.po b/addons/web_kanban/i18n/nl_BE.po index 208aeeb59c4..35f2e4034f8 100644 --- a/addons/web_kanban/i18n/nl_BE.po +++ b/addons/web_kanban/i18n/nl_BE.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/pl.po b/addons/web_kanban/i18n/pl.po index 9a67bf81838..a434f81cb24 100644 --- a/addons/web_kanban/i18n/pl.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/pt.po b/addons/web_kanban/i18n/pt.po index beeb4bbe097..c019f933fea 100644 --- a/addons/web_kanban/i18n/pt.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/pt_BR.po b/addons/web_kanban/i18n/pt_BR.po index 1c198c9f10d..e0813aacec2 100644 --- a/addons/web_kanban/i18n/pt_BR.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/ro.po b/addons/web_kanban/i18n/ro.po index ec0abb20444..c6b821cf2b6 100644 --- a/addons/web_kanban/i18n/ro.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/ru.po b/addons/web_kanban/i18n/ru.po index bed7aec4e14..452e0508cdd 100644 --- a/addons/web_kanban/i18n/ru.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/sr@latin.po b/addons/web_kanban/i18n/sr@latin.po index ea15b27799c..37ab4c6442f 100644 --- a/addons/web_kanban/i18n/sr@latin.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/sv.po b/addons/web_kanban/i18n/sv.po index 5f389c4c044..e6111c5f791 100644 --- a/addons/web_kanban/i18n/sv.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/tr.po b/addons/web_kanban/i18n/tr.po index 931151d975d..700d391eb5f 100644 --- a/addons/web_kanban/i18n/tr.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_kanban/i18n/zh_CN.po b/addons/web_kanban/i18n/zh_CN.po index 490535f7db5..58687c8204c 100644 --- a/addons/web_kanban/i18n/zh_CN.po +++ b/addons/web_kanban/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_kanban/static/src/js/kanban.js:10 diff --git a/addons/web_mobile/i18n/ar.po b/addons/web_mobile/i18n/ar.po index 275cee6e8e4..a857e918207 100644 --- a/addons/web_mobile/i18n/ar.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/bg.po b/addons/web_mobile/i18n/bg.po index 29c5a039372..67b7687f1d3 100644 --- a/addons/web_mobile/i18n/bg.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/bn.po b/addons/web_mobile/i18n/bn.po index 4748f1a648b..e62f6ad478c 100644 --- a/addons/web_mobile/i18n/bn.po +++ b/addons/web_mobile/i18n/bn.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/ca.po b/addons/web_mobile/i18n/ca.po index dca38e44a61..e3712f047e0 100644 --- a/addons/web_mobile/i18n/ca.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/cs.po b/addons/web_mobile/i18n/cs.po index b813d2dd9fb..df10f87bd59 100644 --- a/addons/web_mobile/i18n/cs.po +++ b/addons/web_mobile/i18n/cs.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" "X-Poedit-Language: Czech\n" #. openerp-web diff --git a/addons/web_mobile/i18n/da.po b/addons/web_mobile/i18n/da.po index 6db0ee66ee5..54be9563eba 100644 --- a/addons/web_mobile/i18n/da.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/de.po b/addons/web_mobile/i18n/de.po index 97437004012..2a08d22774b 100644 --- a/addons/web_mobile/i18n/de.po +++ b/addons/web_mobile/i18n/de.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/en_GB.po b/addons/web_mobile/i18n/en_GB.po index 03049f3f26a..6ddba3107bb 100644 --- a/addons/web_mobile/i18n/en_GB.po +++ b/addons/web_mobile/i18n/en_GB.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/es.po b/addons/web_mobile/i18n/es.po index 295c770f027..40efc29ca12 100644 --- a/addons/web_mobile/i18n/es.po +++ b/addons/web_mobile/i18n/es.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/es_CL.po b/addons/web_mobile/i18n/es_CL.po index 3e0c80a563d..10d211c6703 100644 --- a/addons/web_mobile/i18n/es_CL.po +++ b/addons/web_mobile/i18n/es_CL.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/es_CR.po b/addons/web_mobile/i18n/es_CR.po index d57a25d499b..049c79a86f9 100644 --- a/addons/web_mobile/i18n/es_CR.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" "Language: es\n" #. openerp-web diff --git a/addons/web_mobile/i18n/es_EC.po b/addons/web_mobile/i18n/es_EC.po index 763f480d328..54ea73f77e9 100644 --- a/addons/web_mobile/i18n/es_EC.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/et.po b/addons/web_mobile/i18n/et.po index 138bdaa2448..3e7fd7b5207 100644 --- a/addons/web_mobile/i18n/et.po +++ b/addons/web_mobile/i18n/et.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/fi.po b/addons/web_mobile/i18n/fi.po index de5039924e0..0b3e4e90ee2 100644 --- a/addons/web_mobile/i18n/fi.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/fr.po b/addons/web_mobile/i18n/fr.po index b78960f68a9..0fbf5b5c47b 100644 --- a/addons/web_mobile/i18n/fr.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/gl.po b/addons/web_mobile/i18n/gl.po index ca0901d7c9f..fe650ea3037 100644 --- a/addons/web_mobile/i18n/gl.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/hr.po b/addons/web_mobile/i18n/hr.po index ee31aee7ccd..75e493d8d70 100644 --- a/addons/web_mobile/i18n/hr.po +++ b/addons/web_mobile/i18n/hr.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/it.po b/addons/web_mobile/i18n/it.po index 2fb3b796bd7..6de95bd96db 100644 --- a/addons/web_mobile/i18n/it.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/ja.po b/addons/web_mobile/i18n/ja.po index 95872d4f486..8fff1fc88ee 100644 --- a/addons/web_mobile/i18n/ja.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/ka.po b/addons/web_mobile/i18n/ka.po index 51c6fa46f0d..d1e24436311 100644 --- a/addons/web_mobile/i18n/ka.po +++ b/addons/web_mobile/i18n/ka.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/mk.po b/addons/web_mobile/i18n/mk.po index 1f17b9d7bc5..36612708308 100644 --- a/addons/web_mobile/i18n/mk.po +++ b/addons/web_mobile/i18n/mk.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/mn.po b/addons/web_mobile/i18n/mn.po index 03df180ecc7..84056a3d0f1 100644 --- a/addons/web_mobile/i18n/mn.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/nb.po b/addons/web_mobile/i18n/nb.po index 012637d3866..ffe5b4aeb86 100644 --- a/addons/web_mobile/i18n/nb.po +++ b/addons/web_mobile/i18n/nb.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/nl.po b/addons/web_mobile/i18n/nl.po index b7769366b8e..dcfcf46fca1 100644 --- a/addons/web_mobile/i18n/nl.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/nl_BE.po b/addons/web_mobile/i18n/nl_BE.po index da0c8923c7b..0b891d18814 100644 --- a/addons/web_mobile/i18n/nl_BE.po +++ b/addons/web_mobile/i18n/nl_BE.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/pl.po b/addons/web_mobile/i18n/pl.po index 8c9f77f00c9..eae6e1fa58c 100644 --- a/addons/web_mobile/i18n/pl.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/pt.po b/addons/web_mobile/i18n/pt.po index f78271bcf04..45a08eca402 100644 --- a/addons/web_mobile/i18n/pt.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/pt_BR.po b/addons/web_mobile/i18n/pt_BR.po index cc95679507a..c3c512368c1 100644 --- a/addons/web_mobile/i18n/pt_BR.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/ro.po b/addons/web_mobile/i18n/ro.po index 621cdffd259..74140841f95 100644 --- a/addons/web_mobile/i18n/ro.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/ru.po b/addons/web_mobile/i18n/ru.po index de3e627199b..8e4bb59d106 100644 --- a/addons/web_mobile/i18n/ru.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/sk.po b/addons/web_mobile/i18n/sk.po index a2779fc8094..3c6b656e712 100644 --- a/addons/web_mobile/i18n/sk.po +++ b/addons/web_mobile/i18n/sk.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/sl.po b/addons/web_mobile/i18n/sl.po index 3c586584814..b9e108c0a83 100644 --- a/addons/web_mobile/i18n/sl.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/sq.po b/addons/web_mobile/i18n/sq.po index 0aaf40158e8..aa2143d63a0 100644 --- a/addons/web_mobile/i18n/sq.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/sr@latin.po b/addons/web_mobile/i18n/sr@latin.po index 11e67dacc79..8a5c27d1ad9 100644 --- a/addons/web_mobile/i18n/sr@latin.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/sv.po b/addons/web_mobile/i18n/sv.po index 05b723b3001..5881e60c1b5 100644 --- a/addons/web_mobile/i18n/sv.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/tr.po b/addons/web_mobile/i18n/tr.po index 64c3f776944..50b281b9bf7 100644 --- a/addons/web_mobile/i18n/tr.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/uk.po b/addons/web_mobile/i18n/uk.po index 9286672ce14..217e1b760d4 100644 --- a/addons/web_mobile/i18n/uk.po +++ b/addons/web_mobile/i18n/uk.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_mobile/i18n/zh_CN.po b/addons/web_mobile/i18n/zh_CN.po index 84064a3b518..3c685a14de7 100644 --- a/addons/web_mobile/i18n/zh_CN.po +++ b/addons/web_mobile/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_mobile/static/src/xml/web_mobile.xml:17 diff --git a/addons/web_process/i18n/ar.po b/addons/web_process/i18n/ar.po index 5f1c0bc886c..ea859471591 100644 --- a/addons/web_process/i18n/ar.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/bg.po b/addons/web_process/i18n/bg.po index 6c9214de93e..6e50347604d 100644 --- a/addons/web_process/i18n/bg.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/bn.po b/addons/web_process/i18n/bn.po index 693c05bb6cc..f4b9200cea5 100644 --- a/addons/web_process/i18n/bn.po +++ b/addons/web_process/i18n/bn.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/bs.po b/addons/web_process/i18n/bs.po index db4b5dedb87..624147c778e 100644 --- a/addons/web_process/i18n/bs.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/ca.po b/addons/web_process/i18n/ca.po index 90093bcb1cb..042dd92ddc0 100644 --- a/addons/web_process/i18n/ca.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/cs.po b/addons/web_process/i18n/cs.po index 6d8de129d7d..75d864080af 100644 --- a/addons/web_process/i18n/cs.po +++ b/addons/web_process/i18n/cs.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" "X-Poedit-Language: Czech\n" #. openerp-web diff --git a/addons/web_process/i18n/da.po b/addons/web_process/i18n/da.po index 7336f1c8902..c32a0fe34ac 100644 --- a/addons/web_process/i18n/da.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/de.po b/addons/web_process/i18n/de.po index 6848ed99392..4f3bedc25fd 100644 --- a/addons/web_process/i18n/de.po +++ b/addons/web_process/i18n/de.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/en_GB.po b/addons/web_process/i18n/en_GB.po index 41667e6a471..6d5489a69fa 100644 --- a/addons/web_process/i18n/en_GB.po +++ b/addons/web_process/i18n/en_GB.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/es.po b/addons/web_process/i18n/es.po index 620d1514faa..20eadc5e9c0 100644 --- a/addons/web_process/i18n/es.po +++ b/addons/web_process/i18n/es.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/es_CL.po b/addons/web_process/i18n/es_CL.po index 93c090e64fa..9b03561891d 100644 --- a/addons/web_process/i18n/es_CL.po +++ b/addons/web_process/i18n/es_CL.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/es_CR.po b/addons/web_process/i18n/es_CR.po index f3afd986020..c1af7b95e6a 100644 --- a/addons/web_process/i18n/es_CR.po +++ b/addons/web_process/i18n/es_CR.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/es_EC.po b/addons/web_process/i18n/es_EC.po index 2fe87375e87..a262d1960f3 100644 --- a/addons/web_process/i18n/es_EC.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/fi.po b/addons/web_process/i18n/fi.po index fb4324bf70e..0df097bcc28 100644 --- a/addons/web_process/i18n/fi.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/fr.po b/addons/web_process/i18n/fr.po index 90760fe1a83..6d69ee86239 100644 --- a/addons/web_process/i18n/fr.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/gl.po b/addons/web_process/i18n/gl.po index 247efc164e2..fd7fb52ff34 100644 --- a/addons/web_process/i18n/gl.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/hr.po b/addons/web_process/i18n/hr.po index 2e266722e4e..76e99c4f4b5 100644 --- a/addons/web_process/i18n/hr.po +++ b/addons/web_process/i18n/hr.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/hu.po b/addons/web_process/i18n/hu.po index f47df9cfd8e..8069194bb7b 100644 --- a/addons/web_process/i18n/hu.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/it.po b/addons/web_process/i18n/it.po index 1e471c9b1c0..efa8901bdc7 100644 --- a/addons/web_process/i18n/it.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/ja.po b/addons/web_process/i18n/ja.po index d1518a41017..68774c3f627 100644 --- a/addons/web_process/i18n/ja.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/ka.po b/addons/web_process/i18n/ka.po index ffd55378e31..6331faf22d3 100644 --- a/addons/web_process/i18n/ka.po +++ b/addons/web_process/i18n/ka.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/mk.po b/addons/web_process/i18n/mk.po index 44a3a3b4979..720263ba06e 100644 --- a/addons/web_process/i18n/mk.po +++ b/addons/web_process/i18n/mk.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/mn.po b/addons/web_process/i18n/mn.po index 87ee9730a2b..d3233b96554 100644 --- a/addons/web_process/i18n/mn.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/nb.po b/addons/web_process/i18n/nb.po index 52d219a312d..e61645ce913 100644 --- a/addons/web_process/i18n/nb.po +++ b/addons/web_process/i18n/nb.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/nl.po b/addons/web_process/i18n/nl.po index 2d5b8eb1587..0d8f3fdc714 100644 --- a/addons/web_process/i18n/nl.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/nl_BE.po b/addons/web_process/i18n/nl_BE.po index 83731041057..80c59dfc39c 100644 --- a/addons/web_process/i18n/nl_BE.po +++ b/addons/web_process/i18n/nl_BE.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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/pl.po b/addons/web_process/i18n/pl.po index a95240fb0d3..b8567fedcc2 100644 --- a/addons/web_process/i18n/pl.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/pt.po b/addons/web_process/i18n/pt.po index 7c4828b3c4d..7ae7a0eea10 100644 --- a/addons/web_process/i18n/pt.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/pt_BR.po b/addons/web_process/i18n/pt_BR.po index cc881e57598..3f0ea4041a6 100644 --- a/addons/web_process/i18n/pt_BR.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/ro.po b/addons/web_process/i18n/ro.po index 35858259b97..6d6171e51b7 100644 --- a/addons/web_process/i18n/ro.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/ru.po b/addons/web_process/i18n/ru.po index 795e83cb948..37e6440d033 100644 --- a/addons/web_process/i18n/ru.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/sl.po b/addons/web_process/i18n/sl.po index 6927c193c7d..d92a19e3ad6 100644 --- a/addons/web_process/i18n/sl.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/sr@latin.po b/addons/web_process/i18n/sr@latin.po index 414e0362385..dc24968c321 100644 --- a/addons/web_process/i18n/sr@latin.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/sv.po b/addons/web_process/i18n/sv.po index acfd9e39673..1c9d28e265a 100644 --- a/addons/web_process/i18n/sv.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/tr.po b/addons/web_process/i18n/tr.po index 09ca21ed3a1..f5cb39838b6 100644 --- a/addons/web_process/i18n/tr.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_process/i18n/zh_CN.po b/addons/web_process/i18n/zh_CN.po index 4a764b18a68..a57eeb2d3b5 100644 --- a/addons/web_process/i18n/zh_CN.po +++ b/addons/web_process/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-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:51+0000\n" +"X-Generator: Launchpad (build 15801)\n" #. openerp-web #: addons/web_process/static/src/js/process.js:261 diff --git a/addons/web_rpc/i18n/es_CR.po b/addons/web_rpc/i18n/es_CR.po index 46c32bf08ed..c3dad325ed1 100644 --- a/addons/web_rpc/i18n/es_CR.po +++ b/addons/web_rpc/i18n/es_CR.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" diff --git a/addons/web_tests/i18n/es_CR.po b/addons/web_tests/i18n/es_CR.po index 46c32bf08ed..c3dad325ed1 100644 --- a/addons/web_tests/i18n/es_CR.po +++ b/addons/web_tests/i18n/es_CR.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-08 04:46+0000\n" -"X-Generator: Launchpad (build 15757)\n" +"X-Launchpad-Export-Date: 2012-08-15 04:50+0000\n" +"X-Generator: Launchpad (build 15801)\n" From dab2e03c6281dbcb018800f0f095f60f5932db00 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 15 Aug 2012 14:50:53 +0200 Subject: [PATCH 135/165] [FIX] res.users creation message bzr revid: al@openerp.com-20120815125053-3hq8w0gjrnm63342 --- addons/mail/res_users.py | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index ca9766e481c..53ae05371cf 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -112,25 +112,15 @@ class res_users(osv.Model): # alias mail_alias.write(cr, SUPERUSER_ID, [alias_id], {"alias_force_thread_id": user_id}, context) # create a welcome message - self.create_welcome_message_and_email(cr, uid, user, context=context) + self.create_welcome_message(cr, uid, user, context=context) return user_id - def create_welcome_message_and_email(self, cr, uid, user, context=None): - """ Method to : - - create a welcome message on the partner wall - - send an email to the user with the instance URL / login (#TODO) - :param user: res_users browse_record - """ + def create_welcome_message(self, cr, uid, user, context=None): company_name = user.company_id.name if user.company_id else _('the company') - message = '''%s has joined %s! Welcome in OpenERP ! - -Your homepage is a summary of messages you received and key information about documents you follow. - -The top menu bar contains all applications you installed. You can use this Settings menu to install more applications, activate others features or give access to new users. - -To setup your preferences (name, email signature, avatar), click on the top right corner.''' % (user.name, company_name) - return self.pool.get('res.partner').message_append_note(cr, uid, [user.partner_id.id], - subject='Welcome to OpenERP', body=message, type='comment', content_subtype='html', context=context) + subject = '''%s has joined %s.''' % (user.name, company_name) + body = '''Welcome to OpenERP !''' + return self.pool.get('res.partner').message_append_note(cr, user.id, [user.partner_id.id], + subject=subject, body=body, type='comment', content_subtype='html', context=context) def write(self, cr, uid, ids, vals, context=None): # User alias is sync'ed with login @@ -189,7 +179,6 @@ class res_users_mail_group(osv.Model): mail_group_ids = mail_group_obj.search(cr, uid, [('group_ids', 'in', user_group_ids)], context=context) mail_group_obj.message_subscribe(cr, uid, mail_group_ids, ids, context=context) return write_res - class res_groups_mail_group(osv.Model): """ Update of res.groups class @@ -209,3 +198,5 @@ class res_groups_mail_group(osv.Model): mail_group_ids = mail_group_obj.search(cr, uid, [('group_ids', 'in', ids)], context=context) mail_group_obj.message_subscribe(cr, uid, mail_group_ids, user_ids, context=context) return super(res_groups_mail_group, self).write(cr, uid, ids, vals, context=context) + +# vim:et: From 7bef5d1924bd12c294dcd22b348840d9ac323d31 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 15 Aug 2012 18:46:30 +0200 Subject: [PATCH 136/165] [FIX] login db loading cleanup bzr revid: al@openerp.com-20120815164630-yzc5grk2df2bzloe --- addons/web/static/src/js/chrome.js | 59 +++++++++++------------------- 1 file changed, 21 insertions(+), 38 deletions(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index c632ce5cd0b..a36b89400e8 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -510,11 +510,11 @@ instance.web.client_actions.add("database_manager", "instance.web.DatabaseManage instance.web.Login = instance.web.Widget.extend({ template: "Login", remember_credentials: true, - _db_list: null, init: function(parent, params) { this._super(parent); this.has_local_storage = typeof(localStorage) != 'undefined'; + this.db_list = null; this.selected_db = null; this.selected_login = null; this.params = params || {}; @@ -537,50 +537,41 @@ instance.web.Login = instance.web.Widget.extend({ self.$element.find('.oe_login_manage_db').click(function() { self.do_action("database_manager"); }); - return self.load_db_list().then(self.on_db_list_loaded).then(function() { - if (self.params.db) { - self.do_login(self.params.db, self.params.login, self.params.password); - } - }); - }, - load_db_list: function (force) { - var d = $.when(), self = this; - if (_.isNull(this._db_list) || force) { - d = self.rpc("/web/database/get_list", {}, function(result) { - self._db_list = _.clone(result.db_list); - }, function(error, event) { - if (error.data.fault_code === 'AccessDenied') { - event.preventDefault(); - } - }); + var d; + if (self.params.db) { + d = self.do_login(self.params.db, self.params.login, self.params.password); + } else { + d = self.rpc("/web/database/get_list", {}).done(self.on_db_loaded).fail(self.on_db_failed); } return d; }, - on_db_list_loaded: function () { - var self = this; - var list = this._db_list; - var dbdiv = this.$element.find('div.oe_login_dbpane'); - this.$element.find("[name=db]").replaceWith(instance.web.qweb.render('Login.dblist', { db_list: list, selected_db: this.selected_db})); - if(list.length === 0) { + on_db_loaded: function (result) { + this.db_list = result.db_list; + this.$("[name=db]").replaceWith(QWeb.render('Login.dblist', { db_list: this.db_list, selected_db: this.selected_db})); + if(this.db_list.length === 0) { this.do_action("database_manager"); - } else if(list && list.length === 1) { - dbdiv.hide(); + } else if(this.db_list.length === 1) { + this.$('div.oe_login_dbpane').hide(); } else { - dbdiv.show(); + this.$('div.oe_login_dbpane').show(); + } + }, + on_db_failed: function (error, event) { + if (error.data.fault_code === 'AccessDenied') { + event.preventDefault(); } }, on_submit: function(ev) { if(ev) { ev.preventDefault(); } - var $e = this.$element; - var db = $e.find("form [name=db]").val(); + var db = this.$("form [name=db]").val(); if (!db) { this.do_warn("Login", "No database selected !"); return false; } - var login = $e.find("form input[name=login]").val(); - var password = $e.find("form input[name=password]").val(); + var login = this.$("form input[name=login]").val(); + var password = this.$("form input[name=password]").val(); this.do_login(db, login, password); }, @@ -616,12 +607,6 @@ instance.web.Login = instance.web.Widget.extend({ }); }); }, - show: function () { - this.$element.show(); - }, - hide: function () { - this.$element.hide(); - } }); instance.web.client_actions.add("login", "instance.web.Login"); @@ -1084,8 +1069,6 @@ instance.web.WebClient = instance.web.Client.extend({ this.session.session_logout().then(function () { $(window).unbind('hashchange', self.on_hashchange); self.do_push_state({}); - //would be cool to be able to do this, but I think it will make addons do strange things - //this.show_login(); window.location.reload(); }); }, From dd6371e2442804608de20583f58c098386b77721 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 15 Aug 2012 19:03:21 +0200 Subject: [PATCH 137/165] [FIX] handle correctly --no-database-list, move local connector to session bzr revid: al@openerp.com-20120815170321-7qfx3ol1selfjig1 --- addons/web/common/http.py | 57 ++-------------------------------- addons/web/common/session.py | 56 +++++++++++++++++++++++++++++++++ addons/web/controllers/main.py | 10 ++++-- 3 files changed, 66 insertions(+), 57 deletions(-) diff --git a/addons/web/common/http.py b/addons/web/common/http.py index f9e66e31503..9c3664c8da0 100644 --- a/addons/web/common/http.py +++ b/addons/web/common/http.py @@ -466,7 +466,7 @@ class Root(object): if not hasattr(self.config, 'connector'): if self.config.backend == 'local': - self.config.connector = LocalConnector() + self.config.connector = session.LocalConnector() else: self.config.connector = openerplib.get_connector( hostname=self.config.server_host, port=self.config.server_port) @@ -574,57 +574,4 @@ class Root(object): ps = '/' return None -#---------------------------------------------------------- -# OpenERP Web Client lib -#---------------------------------------------------------- -class LibException(Exception): - """ Base of all client lib exceptions """ - def __init__(self,code=None,message=None): - self.code = code - self.message = message - -class ApplicationError(LibException): - """ maps to code: 1, server side: Exception or openerp.exceptions.DeferredException""" - -class Warning(LibException): - """ maps to code: 2, server side: openerp.exceptions.Warning""" - -class AccessError(LibException): - """ maps to code: 3, server side: openerp.exceptions.AccessError""" - -class AccessDenied(LibException): - """ maps to code: 4, server side: openerp.exceptions.AccessDenied""" - -class LocalConnector(openerplib.Connector): - """ - A type of connector that uses the XMLRPC protocol. - """ - PROTOCOL = 'local' - - def __init__(self): - pass - - def send(self, service_name, method, *args): - import openerp - import traceback - import xmlrpclib - code_string = "warning -- %s\n\n%s" - try: - return openerp.netsvc.dispatch_rpc(service_name, method, args) - except openerp.osv.osv.except_osv, e: - # TODO change the except to raise LibException instead of their emulated xmlrpc fault - raise xmlrpclib.Fault(code_string % (e.name, e.value), '') - except openerp.exceptions.Warning, e: - raise xmlrpclib.Fault(code_string % ("Warning", e), '') - except openerp.exceptions.AccessError, e: - raise xmlrpclib.Fault(code_string % ("AccessError", e), '') - except openerp.exceptions.AccessDenied, e: - raise xmlrpclib.Fault('AccessDenied', str(e)) - except openerp.exceptions.DeferredException, e: - formatted_info = "".join(traceback.format_exception(*e.traceback)) - raise xmlrpclib.Fault(openerp.tools.ustr(e.message), formatted_info) - except Exception, e: - formatted_info = "".join(traceback.format_exception(*(sys.exc_info()))) - raise xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info) - -# vim:et: +# vim:et:ts=4:sw=4: diff --git a/addons/web/common/session.py b/addons/web/common/session.py index 4abc611e3f4..125fc39488d 100644 --- a/addons/web/common/session.py +++ b/addons/web/common/session.py @@ -9,6 +9,60 @@ import openerplib from . import nonliterals _logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# openerplib local connector +#---------------------------------------------------------- +class LibException(Exception): + """ Base of all client lib exceptions """ + def __init__(self,code=None,message=None): + self.code = code + self.message = message + +class ApplicationError(LibException): + """ maps to code: 1, server side: Exception or openerp.exceptions.DeferredException""" + +class Warning(LibException): + """ maps to code: 2, server side: openerp.exceptions.Warning""" + +class AccessError(LibException): + """ maps to code: 3, server side: openerp.exceptions.AccessError""" + +class AccessDenied(LibException): + """ maps to code: 4, server side: openerp.exceptions.AccessDenied""" + +class LocalConnector(openerplib.Connector): + """ + A type of connector that uses the XMLRPC protocol. + """ + PROTOCOL = 'local' + + def __init__(self): + pass + + def send(self, service_name, method, *args): + import openerp + import traceback + import xmlrpclib + code_string = "warning -- %s\n\n%s" + try: + return openerp.netsvc.dispatch_rpc(service_name, method, args) + except openerp.osv.osv.except_osv, e: + # TODO change the except to raise LibException instead of their emulated xmlrpc fault + raise xmlrpclib.Fault(code_string % (e.name, e.value), '') + except openerp.exceptions.Warning, e: + raise xmlrpclib.Fault(code_string % ("Warning", e), '') + except openerp.exceptions.AccessError, e: + raise xmlrpclib.Fault(code_string % ("AccessError", e), '') + except openerp.exceptions.AccessDenied, e: + raise xmlrpclib.Fault('AccessDenied', str(e)) + except openerp.exceptions.DeferredException, e: + formatted_info = "".join(traceback.format_exception(*e.traceback)) + raise xmlrpclib.Fault(openerp.tools.ustr(e.message), formatted_info) + except Exception, e: + formatted_info = "".join(traceback.format_exception(*(sys.exc_info()))) + raise xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info) + #---------------------------------------------------------- # OpenERPSession RPC openerp backend access #---------------------------------------------------------- @@ -216,3 +270,5 @@ class OpenERPSession(object): cdomain = nonliterals.CompoundDomain(domain) cdomain.session = self return cdomain.evaluate(context or {}) + +# vim:et:ts=4:sw=4: diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index c5fdcce4945..8722fcd2887 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -86,6 +86,7 @@ def sass2scss(src): return write(sass) def db_list(req): + dbs = [] proxy = req.session.proxy("db") dbs = proxy.list() h = req.httprequest.environ['HTTP_HOST'].split(':')[0] @@ -182,14 +183,19 @@ def module_installed_bypass_session(dbname): return sorted_modules def module_boot(req): - dbs = db_list(req) serverside = [] dbside = [] for i in req.config.server_wide_modules: if i in openerpweb.addons_manifest: serverside.append(i) + # if only one db load every module at boot + dbs = [] + try: + dbs = db_list(req) + except xmlrpclib.Fault: + # ignore access denied + pass if len(dbs) == 1: - # if only one db load every module at boot dbside = module_installed_bypass_session(dbs[0]) dbside = [i for i in dbside if i not in serverside] addons = serverside + dbside From 334bc0ff666365198ce3a5c96d3937ddba5660a2 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 15 Aug 2012 20:09:13 +0200 Subject: [PATCH 138/165] [IMP] generic oauth providers bzr revid: al@openerp.com-20120815180913-2y889mtgg15v5lqb --- addons/auth_oauth/__init__.py | 2 +- addons/auth_oauth/__openerp__.py | 4 +- .../{oauth_providers.py => auth_oauth.py} | 11 +---- ...providers_data.xml => auth_oauth_data.xml} | 10 ++-- ...auth_providers.xml => auth_oauth_view.xml} | 25 ++++------ addons/auth_oauth/controllers/main.py | 21 ++++---- addons/auth_oauth/res_users.py | 28 +++++------ addons/auth_oauth/static/src/js/auth_oauth.js | 49 +++++++++++++------ .../auth_oauth/static/src/xml/auth_oauth.xml | 18 +++---- 9 files changed, 83 insertions(+), 85 deletions(-) rename addons/auth_oauth/{oauth_providers.py => auth_oauth.py} (79%) rename addons/auth_oauth/{oauth_providers_data.xml => auth_oauth_data.xml} (82%) rename addons/auth_oauth/{oauth_providers.xml => auth_oauth_view.xml} (62%) diff --git a/addons/auth_oauth/__init__.py b/addons/auth_oauth/__init__.py index 62ec900cba2..c9acce48a16 100644 --- a/addons/auth_oauth/__init__.py +++ b/addons/auth_oauth/__init__.py @@ -1,3 +1,3 @@ import controllers +import auth_oauth import res_users -import oauth_providers diff --git a/addons/auth_oauth/__openerp__.py b/addons/auth_oauth/__openerp__.py index e7b47a1397d..b61df57c00b 100644 --- a/addons/auth_oauth/__openerp__.py +++ b/addons/auth_oauth/__openerp__.py @@ -30,10 +30,10 @@ 'website': 'http://www.openerp.com', 'depends': ['base', 'web'], 'data': [ - 'oauth_providers_data.xml' + 'auth_oauth_data.xml' ], 'update_xml': [ - 'oauth_providers.xml' + 'auth_oauth_view.xml' ], 'js': [ 'static/src/js/auth_oauth.js', diff --git a/addons/auth_oauth/oauth_providers.py b/addons/auth_oauth/auth_oauth.py similarity index 79% rename from addons/auth_oauth/oauth_providers.py rename to addons/auth_oauth/auth_oauth.py index 2b42c821684..de40cc8666c 100644 --- a/addons/auth_oauth/oauth_providers.py +++ b/addons/auth_oauth/auth_oauth.py @@ -1,10 +1,9 @@ from openerp.osv import osv, fields -class oauth_providers(osv.osv): - +class auth_oauth_providers(osv.osv): """Class defining the configuration values of an OAuth2 provider""" - _name = 'oauth.providers' + _name = 'auth.oauth.provider' _description = 'OAuth2 provider' _order = 'name' @@ -15,14 +14,8 @@ class oauth_providers(osv.osv): 'scope' : fields.char('Scope'), # OAUth user data desired to access 'validation_endpoint' : fields.char('Validation URL'), # OAuth provider URL to validate tokens 'data_endpoint' : fields.char('Data URL'), - 'redirect_uris' : fields.char('Redirect URIs'), 'icon_url' : fields.char('Icon'), # URL of the icon's provider 'active' : fields.boolean('Active'), 'sequence' : fields.integer(), } - _sql_constraints = [ - ('name', 'unique(name)', 'The name of the OAuth provider must be unique') - ] - -oauth_providers() \ No newline at end of file diff --git a/addons/auth_oauth/oauth_providers_data.xml b/addons/auth_oauth/auth_oauth_data.xml similarity index 82% rename from addons/auth_oauth/oauth_providers_data.xml rename to addons/auth_oauth/auth_oauth_data.xml index b66e6a877b9..7eef4f83c51 100644 --- a/addons/auth_oauth/oauth_providers_data.xml +++ b/addons/auth_oauth/auth_oauth_data.xml @@ -1,25 +1,23 @@ - + - + Google OAuth2 108010644258-duuhmp6pu7li4tsmnqg7j9rvdeklg0ki.apps.googleusercontent.com https://accounts.google.com/o/oauth2/auth https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= https://www.googleapis.com/oauth2/v1/userinfo?access_token= - https://localhost/ True - + Twitter OAuth2 108010644258-duuhmp6pu7li4tsmnqg7j9rvdeklg0ki.apps.twitterusercontent.com https://api.twitter.com/oauth/request_token https://api.twitter.com/oauth/authorize?oauth_token= - https://localhost/ True - \ No newline at end of file + diff --git a/addons/auth_oauth/oauth_providers.xml b/addons/auth_oauth/auth_oauth_view.xml similarity index 62% rename from addons/auth_oauth/oauth_providers.xml rename to addons/auth_oauth/auth_oauth_view.xml index 273ba1c6a10..678c347c84d 100644 --- a/addons/auth_oauth/oauth_providers.xml +++ b/addons/auth_oauth/auth_oauth_view.xml @@ -1,36 +1,31 @@ - + - - oauth.provider.form - oauth.providers + auth.oauth.provider.form + auth.oauth.provider form
      -
      - -
      - + - + -
      - oauth.provider.list - oauth.providers + auth.oauth.provider.list + auth.oauth.provider tree @@ -42,10 +37,10 @@ Providers - oauth.providers + auth.oauth.provider form tree,form - +
      -
      \ No newline at end of file + diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py index 664d510e65f..a3f69954812 100644 --- a/addons/auth_oauth/controllers/main.py +++ b/addons/auth_oauth/controllers/main.py @@ -12,12 +12,13 @@ _logger = logging.getLogger(__name__) class OAuthController(openerpweb.Controller): _cp_path = '/auth_oauth' + @openerpweb.jsonrequest def list_providers(self, req, dbname): - #dbname = kw.get("state") - #registry = openerp.modules.registry.RegistryManager.get(dbname) - #with registry.cursor() as cr: - # dsfasdf - pass + registry = openerp.modules.registry.RegistryManager.get(dbname) + with registry.cursor() as cr: + providers = registry.get('auth.oauth.provider') + l = providers.read(cr, 1, providers.search(cr, 1, [])) + return l @openerpweb.httprequest def signin(self, req, **kw): @@ -26,18 +27,18 @@ class OAuthController(openerpweb.Controller): with registry.cursor() as cr: try: u = registry.get('res.users') - credentials = u.auth_oauth(cr, 1, kw) + credentials = u.auth_oauth(cr, 1, {}, kw) cr.commit() return openerp.addons.web.controllers.main.login_and_redirect(req, *credentials) except AttributeError: # auth_signup is not installed - _logger.exception("attribute error") - url = "/#action=auth_signup&error=1" + _logger.error("auth_signup not installed on database %s: oauth sign up cancelled."%dbname) + url = "/#action=login&oauth_error=1" except Exception,e: # signup error _logger.exception('oops') - url = "/#action=auth_signup&error=2" - return openerp.addons.web.controllers.main.set_cookie_and_redirect(req, "/") + url = "/#action=login&oauth_error=2" + return openerp.addons.web.controllers.main.set_cookie_and_redirect(req, url) # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py index 229eba2f354..46feac109c6 100644 --- a/addons/auth_oauth/res_users.py +++ b/addons/auth_oauth/res_users.py @@ -1,5 +1,6 @@ import logging +import urllib import urllib2 import simplejson @@ -10,40 +11,36 @@ from openerp.osv import osv, fields _logger = logging.getLogger(__name__) class res_users(osv.Model): - _inherit = 'res.users' _columns = { - 'oauth_provider': fields.char('OAuth Provider', size=1024), - 'oauth_uid': fields.char('OAuth User ID', size=256, - help="Used for disambiguation in case of a shared OpenID URL"), - 'oauth_access_token': fields.char('OAuth Token', - readonly=True), + 'oauth_provider': fields.many2one('auth.oauth.provider','OAuth Provider'), + 'oauth_uid': fields.char('OAuth User ID', help="Oauth Provider user_id"), + 'oauth_access_token': fields.char('OAuth Token', readonly=True), } def auth_oauth_rpc(self, cr, uid, endpoint, access_token, context=None): - url = endpoint + access_token + params = urllib.urlencode({'access_token':access_token}) + url = endpoint + '?' + params f = urllib2.urlopen(url) response = f.read() return simplejson.loads(response) def auth_oauth_fetch_user_validation(self, cr, uid, access_token, context=None): - endpoint = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=' + endpoint = 'https://www.googleapis.com/oauth2/v1/tokeninfo' return self.auth_oauth_rpc(cr, uid, endpoint, access_token) def auth_oauth_fetch_user_data(self, cr, uid, access_token, context=None): - endpoint = 'https://www.googleapis.com/oauth2/v1/userinfo?access_token=' + endpoint = 'https://www.googleapis.com/oauth2/v1/userinfo' return self.auth_oauth_rpc(cr, uid, endpoint, access_token) - def auth_oauth(self, cr, uid, params, context=None): + def auth_oauth(self, cr, uid, config, params, context=None): # Advice by Google (to avoid Confused Deputy Problem) # if validation.audience != OUR_CLIENT_ID: # abort() # else: # continue with the process - access_token = params.get('access_token') - validation = self.auth_oauth_fetch_user_validation(cr, uid, access_token, context=context) if validation.get("error"): raise openerp.exceptions.AccessDenied @@ -51,8 +48,7 @@ class res_users(osv.Model): login = validation['email'] oauth_uid = validation['user_id'] name = self.auth_oauth_fetch_user_data(cr, uid, access_token)['name'] - - r = (cr.dbname, login, oauth_uid) + credentials = (cr.dbname, login, access_token) res = self.search(cr, uid, [("oauth_uid", "=", oauth_uid)]) if res: @@ -69,8 +65,7 @@ class res_users(osv.Model): 'active': True, } self.auth_signup_create(cr, uid, new_user) - return r - + return credentials def check(self, db, uid, passwd): try: @@ -93,5 +88,4 @@ class res_users(osv.Model): finally: cr.close() -res_users() # diff --git a/addons/auth_oauth/static/src/js/auth_oauth.js b/addons/auth_oauth/static/src/js/auth_oauth.js index a67adca6ebc..67b446a4580 100644 --- a/addons/auth_oauth/static/src/js/auth_oauth.js +++ b/addons/auth_oauth/static/src/js/auth_oauth.js @@ -3,26 +3,45 @@ openerp.auth_oauth = function(instance) { instance.web.Login = instance.web.Login.extend({ start: function(parent, params) { - // [][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[+[]]+([][+[]]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()([][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()(({}+[])[+[]])[+[]]+(!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[]))+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[+[]]+([][+[]]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()([][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()(({}+[])[+[]])[+[]]+(!+[]+!![]+[])+(!+[]+!![]+[]))+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[+[]]+([][+[]]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()([][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()(({}+[])[+[]])[+[]]+(!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[]))+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[+[]]+([][+[]]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()([][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()(({}+[])[+[]])[+[]]+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+[]))+({}+[])[+!![]]+(!![]+[])[+!![]]+(![]+[])[!+[]+!![]]+([][+[]]+[])[!+[]+!![]]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[+[]]+([][+[]]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()([][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()(({}+[])[+[]])[+[]]+(!+[]+!![]+[])+(+!![]+[]))+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[+[]]+([][+[]]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()([][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()(({}+[])[+[]])[+[]]+(!+[]+!![]+[])+(!+[]+!![]+[]))+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[+[]]+([][+[]]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()([][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+({}+[])[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+({}+[])[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+({}+[])[+!![]]+({}+[])[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][+[]]+[])[!+[]+!![]+!![]])()(({}+[])[+[]])[+[]]+(!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])))(); - this._super.apply(this, arguments); - var self = this; - self.$element.on('click', '.oe_login_oauth a', this.on_google_oauth); + var d = this._super.apply(this, arguments); + this.$element.on('click', 'a.oe_oauth_sign_in', this.on_oauth_sign_in); + this.oauth_providers = []; + if(this.params.oauth_error === 1) { + this.do_warn("Sign up error.","Sign up is not allowed on this database."); + } else if(this.params.oauth_error === 2) { + this.do_warn("Authentication error",""); + } + return d.then(this.do_oauth_load); + }, + do_oauth_load: function() { + var db = this.$("form [name=db]").val(); + if (db) { + this.rpc("/auth_oauth/list_providers", { dbname: db }).then(this.on_oauth_loaded); + } + }, + on_oauth_loaded: function(result) { + this.oauth_providers = result; + console.log(result); + var buttons = QWeb.render("auth_oauth.Login.button",{"widget":this}); + console.log(buttons); + this.$(".oe_login_pane form ul").after(buttons); }, oauth_url: function(state) { - var endpoint = 'https://accounts.google.com/o/oauth2/auth'; + }, + on_oauth_sign_in: function(ev) { + ev.preventDefault(); + var index = $(ev.target).data('index'); + var p = this.oauth_providers[index]; + var ret = location.protocol+"//"+location.host+"/"; + var dbname = self.$("form [name=db]").val(); var params = { response_type: 'token', - client_id: '108010644258-duuhmp6pu7li4tsmnqg7j9rvdeklg0ki.apps.googleusercontent.com', - redirect_uri: 'https://localhost/', - scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', - state: state, + client_id: p.client_id, + redirect_uri: ret, + scope: p.scope, + state: dbname, }; - var url = endpoint + '?' + $.param(params); - return url; - }, - on_google_oauth: function(ev) { - var dbname = self.$("form [name=db]").val(); - var url = this.oauth_url(dbname); + var url = p.auth_endpoint + '?' + $.param(params); window.location = url; }, }); diff --git a/addons/auth_oauth/static/src/xml/auth_oauth.xml b/addons/auth_oauth/static/src/xml/auth_oauth.xml index 75f168d6c9a..494dc20e1a1 100644 --- a/addons/auth_oauth/static/src/xml/auth_oauth.xml +++ b/addons/auth_oauth/static/src/xml/auth_oauth.xml @@ -1,13 +1,11 @@ - - - - - + + + +
      - -
      \ No newline at end of file + + From 16719d3f5bfdfa993528a289f9ee06047944630e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 20:45:38 +0200 Subject: [PATCH 139/165] [FIX] res_users in mail_thread: added missing wrappers for Chatter. bzr revid: tde@openerp.com-20120815184538-dno2w20on4fd2hqd --- addons/mail/res_users.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index 53ae05371cf..647be2bde6d 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -137,6 +137,8 @@ class res_users(osv.Model): # -------------------------------------------------- # Wrappers on partner methods for Chatter + # #FIXME: another branch holds a refactoring of mail.thread + # that should help cleaning those wrappers # -------------------------------------------------- def message_append(self, cr, uid, threads, subject, body_text=None, body_html=None, @@ -154,11 +156,25 @@ class res_users(osv.Model): def message_read(self, cr, uid, ids, fetch_ancestors=False, ancestor_ids=None, limit=100, offset=0, domain=None, context=None): for user in self.browse(cr, uid, ids, context=context): - user.partner_id.message_read(ids, fetch_ancestors, ancestor_ids, limit, offset, domain) + return user.partner_id.message_read(fetch_ancestors, ancestor_ids, limit, offset, domain) def message_read_subscribers(self, cr, uid, ids, fields=['id', 'name', 'image_small'], context=None): for user in self.browse(cr, uid, ids, context=context): - user.partner_id.message_read_subscribers(ids, fields) + return user.partner_id.message_read_subscribers(fields) + + def message_search(self, cr, uid, ids, fetch_ancestors=False, ancestor_ids=None, + limit=100, offset=0, domain=None, count=False, context=None): + for user in self.browse(cr, uid, ids, context=context): + return user.partner_id.message_search(fetch_ancestors, ancestor_ids, limit, offset, domain, count) + + def message_subscribe(self, cr, uid, ids, user_ids = None, context=None): + for user in self.browse(cr, uid, ids, context=context): + return user.partner_id.message_subscribe(user_ids) + + def message_unsubscribe(self, cr, uid, ids, user_ids = None, context=None): + for user in self.browse(cr, uid, ids, context=context): + return user.partner_id.message_unsubscribe(user_ids) + class res_users_mail_group(osv.Model): """ Update of res.groups class From 9958acdc3286f761b6ce76142598d628736a5540 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 15 Aug 2012 21:09:14 +0200 Subject: [PATCH 140/165] [FIX] mail res.users creation message bzr revid: al@openerp.com-20120815190914-kzrmr67l4f0ph0vo --- addons/mail/res_users.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index 647be2bde6d..1c7f002f1fa 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -119,7 +119,8 @@ class res_users(osv.Model): company_name = user.company_id.name if user.company_id else _('the company') subject = '''%s has joined %s.''' % (user.name, company_name) body = '''Welcome to OpenERP !''' - return self.pool.get('res.partner').message_append_note(cr, user.id, [user.partner_id.id], + # TODO change 1 into user.id but catch errors + return self.pool.get('res.partner').message_append_note(cr, 1, [user.partner_id.id], subject=subject, body=body, type='comment', content_subtype='html', context=context) def write(self, cr, uid, ids, vals, context=None): From 29c709602acc4db95c902baa7dd492add4e8dcb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 22:03:58 +0200 Subject: [PATCH 141/165] [TMP] Removed statement for automatic subscription, temp. bzr revid: tde@openerp.com-20120815200358-0ld8cp85tozwcvfb --- addons/mail/mail_thread.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 5bd9582b7cd..abf49067210 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -174,10 +174,10 @@ class mail_thread(osv.Model): - followers given by the monitored fields """ thread_id = super(mail_thread, self).create(cr, uid, vals, context=context) - fields = self.message_get_follower_fields(cr, uid, [thread_id], context=context) - print fields - if thread_id: - self.message_subscribe(cr, uid, [thread_id], [uid], context=context) + #fields = self.message_get_follower_fields(cr, uid, [thread_id], context=context) + #print fields + #if thread_id: + #self.message_subscribe(cr, uid, [thread_id], [uid], context=context) return thread_id def write(self, cr, uid, ids, vals, context=None): From 6d6929a8635b277e5d19635a4a88a2e8b5d4718c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 22:05:06 +0200 Subject: [PATCH 142/165] [REM] mail_thread: removed '@login' feature, because of access right issues. bzr revid: tde@openerp.com-20120815200506-1sohf3ul6b0cmo43 --- addons/mail/mail_thread.py | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index abf49067210..7438ed7443f 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -293,10 +293,7 @@ class mail_thread(osv.Model): # get subscribers notif_user_ids = self.message_get_subscribers(cr, uid, thread_ids, context=context) - - # add users requested via parsing message (@login) - notif_user_ids += self.message_parse_users(cr, uid, body, context=context) - + # add users requested to perform an action (need_action mechanism) if hasattr(self, 'get_needaction_user_ids') and self._columns.get('user_id'): user_ids_dict = self.get_needaction_user_ids(cr, uid, thread_ids, context=context) @@ -314,17 +311,6 @@ class mail_thread(osv.Model): notif_user_ids = list(set(notif_user_ids)) return notif_user_ids - def message_parse_users(self, cr, uid, string, context=None): - """Parse message content - - if find @login -(^|\s)@((\w|@|\.)*)-: returns the related ids - this supports login that are emails (such as @raoul@grobedon.net) - """ - regex = re.compile('(^|\s)@((\w|@|\.)*)') - login_lst = [item[1] for item in regex.findall(string)] - if not login_lst: return [] - user_ids = self.pool.get('res.users').search(cr, uid, [('login', 'in', login_lst)], context=context) - return user_ids - #------------------------------------------------------ # Generic message api #------------------------------------------------------ @@ -1082,10 +1068,7 @@ class mail_thread(osv.Model): # remove message writer if user_to_notify_ids.count(new_msg_values.get('user_id')) > 0: user_to_notify_ids.remove(new_msg_values.get('user_id')) - - # get user_ids directly asked - user_to_push_from_parse_ids = self.message_parse_users(cr, uid, body, context=context) - + # try to find an email_to email_to = '' for user in res_users_obj.browse(cr, uid, user_to_notify_ids, context=context): From af44478ff3f6d34c753772e1030eba864feef344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 22:07:15 +0200 Subject: [PATCH 143/165] [REF] mail_thread: removed get_subscribers, because not necessary anymore with the new field. bzr revid: tde@openerp.com-20120815200715-075no768khroyyoe --- addons/mail/mail_thread.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 7438ed7443f..3d19333fe84 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -292,8 +292,10 @@ class mail_thread(osv.Model): body = new_msg_vals.get('body_html', '') if new_msg_vals.get('content_subtype') == 'html' else new_msg_vals.get('body_text', '') # get subscribers - notif_user_ids = self.message_get_subscribers(cr, uid, thread_ids, context=context) - + subscr_obj = self.pool.get('mail.followers') + subscr_ids = subscr_obj.search(cr, uid, ['&', ('res_model', '=', self._name), ('res_id', 'in', ids)], context=context) + notif_user_ids = [sub['user_id'][0] for sub in subscr_obj.read(cr, uid, subscr_ids, ['user_id'], context=context)] + # add users requested to perform an action (need_action mechanism) if hasattr(self, 'get_needaction_user_ids') and self._columns.get('user_id'): user_ids_dict = self.get_needaction_user_ids(cr, uid, thread_ids, context=context) @@ -999,15 +1001,6 @@ class mail_thread(osv.Model): """ return [] - def message_get_subscribers(self, cr, uid, ids, context=None): - """ Returns the current document followers. Basically this method - checks in mail.followers for entries with matching res_model, - res_id. - """ - subscr_obj = self.pool.get('mail.followers') - subscr_ids = subscr_obj.search(cr, uid, ['&', ('res_model', '=', self._name), ('res_id', 'in', ids)], context=context) - return [sub['user_id'][0] for sub in subscr_obj.read(cr, uid, subscr_ids, ['user_id'], context=context)] - def message_subscribe(self, cr, uid, ids, user_ids = None, context=None): """ Subscribe the user (or user_ids) to the current document. From 8b616f3302a732585a8b65cd9f0ca700c6a37ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 22:13:20 +0200 Subject: [PATCH 144/165] [REM] sale, purcahse, crm_phonecall, analytic: stop subscribing default subscribed users. Purchase: added monitored field: validator. bzr revid: tde@openerp.com-20120815201320-gzkzdm14vnni8dsq --- addons/analytic/analytic.py | 1 - addons/crm/crm_phonecall.py | 1 - addons/mail/mail_thread.py | 2 +- addons/purchase/purchase.py | 6 +++++- addons/sale/sale.py | 1 - 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py index 165af37888d..3231b1e6d95 100644 --- a/addons/analytic/analytic.py +++ b/addons/analytic/analytic.py @@ -297,7 +297,6 @@ class account_analytic_account(osv.osv): def create_send_note(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): - self.message_subscribe(cr, uid, [obj.id], [obj.user_id.id], context=context) self.message_append_note(cr, uid, [obj.id], body=_("Contract for %s has been created.") % (obj.partner_id.name), context=context) account_analytic_account() diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py index 8ffa8dd591e..da08f97250a 100644 --- a/addons/crm/crm_phonecall.py +++ b/addons/crm/crm_phonecall.py @@ -271,7 +271,6 @@ class crm_phonecall(base_state, osv.osv): def case_open_send_note(self, cr, uid, ids, context=None): lead_obj = self.pool.get('crm.lead') for phonecall in self.browse(cr, uid, ids, context=context): - phonecall.message_subscribe([phonecall.user_id.id], context=context) if phonecall.opportunity_id: lead = phonecall.opportunity_id # convert datetime field to a datetime, using server format, then diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 3d19333fe84..87f22f09042 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -230,7 +230,7 @@ class mail_thread(osv.Model): # get monitored fields monitored_fields = self.message_get_monitored_follower_fields(cr, uid, ids, context=context) print monitored_fields - # for each monitored field: if in record_vals, it has been modified + # for each monitored field: if in record_vals, it has been modified/added fields = [field for field in monitored_fields if field in record_vals.iterkeys()] print fields diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 1daf6de034e..756016d39e2 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -738,12 +738,16 @@ class purchase_order(osv.osv): result[obj.id].append(obj.validator.id) return result + def message_get_monitored_follower_fields(self, cr, uid, ids, context=None): + """ Add 'validator' to the monitored fields """ + res = super(purchase_order, self).message_get_monitored_follower_fields(cr, uid, ids, context=context) + return res + ['validator'] + def create_send_note(self, cr, uid, ids, context=None): return self.message_append_note(cr, uid, ids, body=_("Request for quotation created."), context=context) def confirm_send_note(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): - self.message_subscribe(cr, uid, [obj.id], [obj.validator.id], context=context) self.message_append_note(cr, uid, [obj.id], body=_("Quotation for %s converted to a Purchase Order of %s %s.") % (obj.partner_id.name, obj.amount_total, obj.pricelist_id.currency_id.symbol), context=context) def shipment_send_note(self, cr, uid, ids, picking_id, context=None): diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 566b1ea2caa..c525ba04df1 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -1031,7 +1031,6 @@ class sale_order(osv.osv): def create_send_note(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): - self.message_subscribe(cr, uid, [obj.id], [obj.user_id.id], context=context) self.message_append_note(cr, uid, [obj.id], body=_("Quotation for %s has been created.") % (obj.partner_id.name), context=context) def confirm_send_note(self, cr, uid, ids, context=None): From 819d4adfa7cedad9e3041929c13fe476d5107ff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 22:15:46 +0200 Subject: [PATCH 145/165] [CLEAN] message_subscribe: removed unnecessary code. Use command generation everywhere. bzr revid: tde@openerp.com-20120815201546-pcb1juts1ryzctqd --- addons/mail/mail_thread.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 87f22f09042..0a2edcc37ab 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -1006,12 +1006,10 @@ class mail_thread(osv.Model): :param user_ids: a list of user_ids; if not set, subscribe uid instead + :param return: new value of followers, for Chatter """ - follower_ids = [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_follower_ids] to_subscribe_uids = [uid] if user_ids is None else user_ids - if all(follower_id in follower_ids for follower_id in to_subscribe_uids): - return follower_ids - write_res = self.write(cr, uid, ids, {'message_follower_ids': [(4, id) for id in to_subscribe_uids]}, context=context) + write_res = self.write(cr, uid, ids, {'message_follower_ids': self.message_subscribe_get_command(cr, uid, to_subscribe_uids, context)}, context=context) return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_follower_ids] def message_subscribe_get_command(self, cr, uid, follower_ids, context=None): @@ -1023,9 +1021,10 @@ class mail_thread(osv.Model): :param user_ids: a list of user_ids; if not set, subscribe uid instead + :param return: new value of followers, for Chatter """ to_unsubscribe_uids = [uid] if user_ids is None else user_ids - write_res = self.write(cr, uid, ids, {'message_follower_ids': [(3, id) for id in to_unsubscribe_uids]}, context=context) + write_res = self.write(cr, uid, ids, {'message_follower_ids': self.message_unsubscribe_get_command(cr, uid, to_unsubscribe_uids, context)}, context=context) return [follower.id for thread in self.browse(cr, uid, ids, context=context) for follower in thread.message_follower_ids] def message_unsubscribe_get_command(self, cr, uid, follower_ids, context=None): From 39cc9217bf8a8960bd9991a6d9dd1eec93f3b903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 22:17:24 +0200 Subject: [PATCH 146/165] [FIX] Fixed var name not correct after moving code. bzr revid: tde@openerp.com-20120815201724-6mkif7u7n0svoqu8 --- addons/mail/mail_thread.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 0a2edcc37ab..8c02d331792 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -293,7 +293,7 @@ class mail_thread(osv.Model): # get subscribers subscr_obj = self.pool.get('mail.followers') - subscr_ids = subscr_obj.search(cr, uid, ['&', ('res_model', '=', self._name), ('res_id', 'in', ids)], context=context) + subscr_ids = subscr_obj.search(cr, uid, ['&', ('res_model', '=', self._name), ('res_id', 'in', thread_ids)], context=context) notif_user_ids = [sub['user_id'][0] for sub in subscr_obj.read(cr, uid, subscr_ids, ['user_id'], context=context)] # add users requested to perform an action (need_action mechanism) From ec23d716d4ccf0b69e17f48847730277b5477c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 22:19:54 +0200 Subject: [PATCH 147/165] [FIX] mail_thread: fixed reference to a deleted variable. bzr revid: tde@openerp.com-20120815201954-z0jf0qwp8orr76vn --- addons/mail/mail_thread.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 8c02d331792..e50f112a575 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -1064,8 +1064,8 @@ class mail_thread(osv.Model): # try to find an email_to email_to = '' for user in res_users_obj.browse(cr, uid, user_to_notify_ids, context=context): - if not user.notification_email_pref == 'all' and \ - not (user.notification_email_pref == 'to_me' and user.id in user_to_push_from_parse_ids): + # TO BE REFACTORED BY FP, JUSTE REMOVED TO_ME, NOT SURE WHAT S NEW BEHAVIOR + if not user.notification_email_pref == 'all': continue if not user.email: continue From 1e1936b59ad52306ec5926b29a323f0aa5a226f1 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 15 Aug 2012 22:35:04 +0200 Subject: [PATCH 148/165] [FIX] session missing import bzr revid: al@openerp.com-20120815203504-nqlfj264xkk5wuh5 --- addons/web/common/session.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/web/common/session.py b/addons/web/common/session.py index 125fc39488d..5906ee6314e 100644 --- a/addons/web/common/session.py +++ b/addons/web/common/session.py @@ -4,6 +4,8 @@ import babel import dateutil.relativedelta import logging import time +import sys + import openerplib from . import nonliterals From 3c733c508fa280eb6c33a2249f0ff98b75677f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 22:45:22 +0200 Subject: [PATCH 149/165] [IMP] mail_thread: cleaned automatic subscription. bzr revid: tde@openerp.com-20120815204522-qe5fll60wbk0drp9 --- addons/mail/mail_thread.py | 73 ++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index e50f112a575..9b03810d5c7 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -174,10 +174,9 @@ class mail_thread(osv.Model): - followers given by the monitored fields """ thread_id = super(mail_thread, self).create(cr, uid, vals, context=context) - #fields = self.message_get_follower_fields(cr, uid, [thread_id], context=context) - #print fields - #if thread_id: - #self.message_subscribe(cr, uid, [thread_id], [uid], context=context) + followers_command = self.message_get_automatic_followers(cr, uid, [], vals, fetch_missing=True, context=context) + if followers_command: + self.write(cr, uid, [thread_id], {'message_follower_ids': followers_command}, context=context) return thread_id def write(self, cr, uid, ids, vals, context=None): @@ -187,21 +186,16 @@ class mail_thread(osv.Model): """ if isinstance(ids, (int, long)): ids = [ids] - command = self.message_get_automatic_followers(cr, uid, ids, vals, context=context) - print command - if vals.get('message_follower_ids'): - vals['message_follower_ids'] += command - else: - vals['message_follower_ids'] = command - print vals - write_res = super(mail_thread, self).write(cr, uid, ids, vals, context=context) - - - - - if write_res and not vals.get('message_follower_ids'): - self.message_subscribe(cr, uid, ids, [uid], context=context) - return write_res; + for id in ids: + # copy origin al vals because we are going to modify it + specific_vals = dict(vals) + followers_command = self.message_get_automatic_followers(cr, uid, ids, specific_vals, context=context) + if specific_vals.get('message_follower_ids'): + specific_vals['message_follower_ids'] += followers_command + else: + specific_vals['message_follower_ids'] = followers_command + write_res = super(mail_thread, self).write(cr, uid, ids, specific_vals, context=context) + return True def unlink(self, cr, uid, ids, context=None): """Override unlink, to automatically delete messages @@ -215,8 +209,20 @@ class mail_thread(osv.Model): msg_obj.unlink(cr, uid, msg_to_del_ids, context=context) return super(mail_thread, self).unlink(cr, uid, ids, context=context) - def message_get_automatic_followers(self, cr, uid, ids, record_vals, add_uid=True, fetch_missing=False, context=None): - """ + def message_get_automatic_followers(self, cr, uid, id, record_vals, add_uid=True, fetch_missing=False, context=None): + """ Return the command for the many2many follower_ids field to manage + subscribers. Behavior : + - get the monitored fields (ex: ['user_id', 'responsible_id']); those + fields should be relationships to res.users (#TODO: res.partner) + - if this field is in the record_vals: it means it has been modified + thus add its value to the followers + - if this fields is not in record_vals, but fetch_missing paramter + is set to True: fetch the value in the record (use: at creation + for default values, not present in record_vals) + - if add_uid: add the current user (for example: writer is subscriber) + - generate the command and return it + This method has to be used on 1 id, because otherwise it would imply + to track which user.id is used for which record.id. :param record_vals: values given to the create method of the new record, or values updated in a write. @@ -228,24 +234,21 @@ class mail_thread(osv.Model): #TODO : UPDATE WHEN MERGING TO PARTNERS """ # get monitored fields - monitored_fields = self.message_get_monitored_follower_fields(cr, uid, ids, context=context) - print monitored_fields + monitored_fields = self.message_get_monitored_follower_fields(cr, uid, [id], context=context) + modified_fields = [field for field in monitored_fields if field in record_vals.iterkeys()] + other_fields = [field for field in monitored_fields if field not in record_vals.iterkeys()] if fetch_missing else [] # for each monitored field: if in record_vals, it has been modified/added - fields = [field for field in monitored_fields if field in record_vals.iterkeys()] - print fields - follower_ids = [] - for field in fields: - value = record_vals.get(field) - if value: - follower_ids.append(value) - elif fetch_missing: - pass - - print follower_ids + for field in modified_fields: + follower_ids.append(record_vals.get(field)) + # for other fields: read in record if fetch_missing (otherwise list is void) + for field in other_fields: + record = self.browse(cr, uid, id, context=context) + value = getattr(record, field) + follower_ids.append(value) + # add uid if asked and not already present if add_uid and uid not in follower_ids: follower_ids.append(uid) - return self.message_subscribe_get_command(cr, uid, follower_ids, context=context) #------------------------------------------------------ From 92c70aa6ea76cbb58b216f4ba9d5b2f235b277e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 22:51:43 +0200 Subject: [PATCH 150/165] [IMP] Addons: propagated new automatic subscription mechanism. bzr revid: tde@openerp.com-20120815205143-twthjirie2b5kr7n --- addons/crm/crm_lead.py | 8 ++++---- addons/hr_holidays/hr_holidays.py | 9 +++++---- addons/hr_recruitment/hr_recruitment.py | 8 ++++---- addons/mrp/mrp.py | 8 ++++---- addons/project/project.py | 14 +++++++------- addons/project_issue/project_issue.py | 8 ++++---- 6 files changed, 28 insertions(+), 27 deletions(-) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 47cce7bc2d6..146417a7abb 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -859,10 +859,10 @@ class crm_lead(base_stage, osv.osv): # OpenChatter methods and notifications # ---------------------------------------- - def message_get_follower_fields(self, cr, uid, ids, context=None): - """ Override to add 'user_id' field to automatic subscription. """ - res = super(crm_lead, self).message_get_follower_fields(cr, uid, ids, context=context) - return res.append('user_id') + def message_get_monitored_follower_fields(self, cr, uid, ids, context=None): + """ Add 'user_id' to the monitored fields """ + res = super(crm_lead, self).message_get_monitored_follower_fields(cr, uid, ids, context=context) + return res + ['user_id'] def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): """ Override of the (void) default notification method. """ diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 1788c857aba..45c65511a1a 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -366,10 +366,11 @@ class hr_holidays(osv.osv): result[obj.id] = hr_manager_group['users'] return result - def message_get_follower_fields(self, cr, uid, ids, context=None): - """ Override to add 'user_id' field to automatic subscription. """ - res = super(hr_holidays, self).message_get_follower_fields(cr, uid, ids, context=context) - return res + ['user_id', 'employee_id.parent_id.user_id'] + def message_get_monitored_follower_fields(self, cr, uid, ids, context=None): + """ Add 'user_id' and 'manager' to the monitored fields """ + res = super(hr_holidays, self).message_get_monitored_follower_fields(cr, uid, ids, context=context) + # TODO: add manager + return res + ['user_id'] def create_notificate(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index d62d78b049c..0ace2574d65 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -461,10 +461,10 @@ class hr_applicant(base_stage, osv.Model): # OpenChatter methods and notifications # ------------------------------------------------------- - def message_get_follower_fields(self, cr, uid, ids, context=None): - """ Override to add 'user_id' field to automatic subscription. """ - res = super(hr_applicant, self).message_get_follower_fields(cr, uid, ids, context=context) - return res.append('user_id') + def message_get_monitored_follower_fields(self, cr, uid, ids, context=None): + """ Add 'user_id' to the monitored fields """ + res = super(hr_applicant, self).message_get_monitored_follower_fields(cr, uid, ids, context=context) + return res + ['user_id'] def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): """ Override of the (void) default notification method. """ diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index a41e4dbc332..7b8442b4c46 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -1046,10 +1046,10 @@ class mrp_production(osv.osv): # OpenChatter methods and notifications # --------------------------------------------------- - def message_get_follower_fields(self, cr, uid, ids, context=None): - """ Override to add 'user_id' field to automatic subscription. """ - res = super(mrp_production, self).message_get_follower_fields(cr, uid, ids, context=context) - return res.append('user_id') + def message_get_monitored_follower_fields(self, cr, uid, ids, context=None): + """ Add 'user_id' to the monitored fields """ + res = super(mrp_production, self).message_get_monitored_follower_fields(cr, uid, ids, context=context) + return res + ['user_id'] def create_send_note(self, cr, uid, ids, context=None): self.message_append_note(cr, uid, ids, body=_("Manufacturing order has been created."), context=context) diff --git a/addons/project/project.py b/addons/project/project.py index ec216d245fc..1a8f8c8bfe5 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -514,10 +514,10 @@ def Project(): # OpenChatter methods and notifications # ------------------------------------------------ - def message_get_follower_fields(self, cr, uid, ids, context=None): - """ Override to add 'user_id' field to automatic subscription. """ - res = super(project, self).message_get_follower_fields(cr, uid, ids, context=context) - return res.append('user_id') + def message_get_monitored_follower_fields(self, cr, uid, ids, context=None): + """ Add 'user_id' to the monitored fields """ + res = super(project, self).message_get_monitored_follower_fields(cr, uid, ids, context=context) + return res + ['user_id'] def create(self, cr, uid, vals, context=None): if context is None: context = {} @@ -1201,9 +1201,9 @@ class task(base_stage, osv.osv): result[obj.id].append(obj.user_id.id) return result - def message_get_follower_fields(self, cr, uid, ids, context=None): - """ Override to add 'user_id' field to automatic subscription. """ - res = super(task, self).message_get_follower_fields(cr, uid, ids, context=context) + def message_get_monitored_follower_fields(self, cr, uid, ids, context=None): + """ Add 'user_id' and 'manager_id' to the monitored fields """ + res = super(task, self).message_get_monitored_follower_fields(cr, uid, ids, context=context) return res + ['user_id', 'manager_id'] def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 81550f476b6..5c440976b5c 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -499,10 +499,10 @@ class project_issue(base_stage, osv.osv): # OpenChatter methods and notifications # ------------------------------------------------------- - def message_get_follower_fields(self, cr, uid, ids, context=None): - """ Override to add 'user_id' field to automatic subscription. """ - res = super(project_issue, self).message_get_follower_fields(cr, uid, ids, context=context) - return res.append('user_id') + def message_get_monitored_follower_fields(self, cr, uid, ids, context=None): + """ Add 'user_id' to the monitored fields """ + res = super(project_issue, self).message_get_monitored_follower_fields(cr, uid, ids, context=context) + return res + ['user_id'] def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): """ Override of the (void) default notification method. """ From b046ac3faef9bdca1e02e0fb7d27cf5a8f539ce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 22:54:59 +0200 Subject: [PATCH 151/165] [FIX] ids -> id. bzr revid: tde@openerp.com-20120815205459-irdfe1aeosqnu3nm --- addons/mail/mail_thread.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 9b03810d5c7..59e33f3589c 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -189,7 +189,7 @@ class mail_thread(osv.Model): for id in ids: # copy origin al vals because we are going to modify it specific_vals = dict(vals) - followers_command = self.message_get_automatic_followers(cr, uid, ids, specific_vals, context=context) + followers_command = self.message_get_automatic_followers(cr, uid, id, specific_vals, context=context) if specific_vals.get('message_follower_ids'): specific_vals['message_follower_ids'] += followers_command else: From e1870a434e61ed0a508724e511684a294f51e7ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 23:01:49 +0200 Subject: [PATCH 152/165] [FIX] FIxed call to message_get_automatic_followers. bzr revid: tde@openerp.com-20120815210149-jujf2tv1hffm09g0 --- addons/mail/mail_thread.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 59e33f3589c..43bddc204e1 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -174,7 +174,7 @@ class mail_thread(osv.Model): - followers given by the monitored fields """ thread_id = super(mail_thread, self).create(cr, uid, vals, context=context) - followers_command = self.message_get_automatic_followers(cr, uid, [], vals, fetch_missing=True, context=context) + followers_command = self.message_get_automatic_followers(cr, uid, thread_id, vals, fetch_missing=False, context=context) if followers_command: self.write(cr, uid, [thread_id], {'message_follower_ids': followers_command}, context=context) return thread_id From 774ea74c389b62b7fe69035585a8f4308d35afd6 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 15 Aug 2012 23:06:45 +0200 Subject: [PATCH 153/165] [IMP] res_users check,login,authenticate cleanup bzr revid: al@openerp.com-20120815210645-nwmfltbeiegvcdz9 --- openerp/addons/base/res/res_users.py | 135 +++++++++++---------------- 1 file changed, 56 insertions(+), 79 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index ba7d8f0f6d3..a4fa43a32ad 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -353,6 +353,57 @@ class res_users(osv.osv): data_id = dataobj._get_id(cr, 1, 'base', 'action_res_users_my') return dataobj.browse(cr, uid, data_id, context=context).res_id + def check_super(self, passwd): + if passwd == tools.config['admin_passwd']: + return True + else: + raise openerp.exceptions.AccessDenied() + + def check_credentials(self, cr, uid, password): + """ Override this method to plug additional authentication methods""" + res = self.search(cr, 1, [('id','=',uid),('password','=',password)]) + if not res: + raise openerp.exceptions.AccessDenied() + + def login(self, db, login, password): + if not password: + return False + user_id = False + cr = pooler.get_db(db).cursor() + try: + # autocommit: our single update request will be performed atomically. + # (In this way, there is no opportunity to have two transactions + # interleaving their cr.execute()..cr.commit() calls and have one + # of them rolled back due to a concurrent access.) + cr.autocommit(True) + # check if user exists + res = self.search(cr, 1, [('login','=',login)]) + if res: + user_id = res[0] + # check credentials + self.check_credentials(cr, user_id, password) + # We effectively unconditionally write the res_users line. + # Even w/ autocommit there's a chance the user row will be locked, + # in which case we can't delay the login just for the purpose of + # update the last login date - hence we use FOR UPDATE NOWAIT to + # try to get the lock - fail-fast + # Failing to acquire the lock on the res_users row probably means + # another request is holding it. No big deal, we don't want to + # prevent/delay login in that case. It will also have been logged + # as a SQL error, if anyone cares. + try: + cr.execute("SELECT id FROM res_users WHERE id=%s FOR UPDATE NOWAIT", str(user_id)) + cr.execute("UPDATE res_users SET login_date = now() AT TIME ZONE 'UTC' WHERE id=%s", str(user_id)) + except Exception, e: + _logger.exception("Failed to update last_login for db:%s login:%s", db, login) + except openerp.exceptions.AccessDenied: + _logger.info("Login failed for db:%s login:%s", db, login) + user_id = False + finally: + cr.close() + + return user_id + def authenticate(self, db, login, password, user_agent_env): """Verifies and returns the user ID corresponding to the given ``login`` and ``password`` combination, or False if there was @@ -371,8 +422,8 @@ class res_users(osv.osv): if user_agent_env and user_agent_env.get('base_location'): cr = pooler.get_db(db).cursor() try: - self.pool.get('ir.config_parameter').set_param(cr, uid, 'web.base.url', - user_agent_env['base_location']) + base = user_agent_env['base_location'] + self.pool.get('ir.config_parameter').set_param(cr, uid, 'web.base.url', base) cr.commit() except Exception: _logger.exception("Failed to update web.base.url configuration parameter") @@ -380,54 +431,8 @@ class res_users(osv.osv): cr.close() return uid - def login(self, db, login, password): - if not password: - return False - cr = pooler.get_db(db).cursor() - try: - # autocommit: our single request will be performed atomically. - # (In this way, there is no opportunity to have two transactions - # interleaving their cr.execute()..cr.commit() calls and have one - # of them rolled back due to a concurrent access.) - # We effectively unconditionally write the res_users line. - cr.autocommit(True) - # Even w/ autocommit there's a chance the user row will be locked, - # in which case we can't delay the login just for the purpose of - # update the last login date - hence we use FOR UPDATE NOWAIT to - # try to get the lock - fail-fast - cr.execute("""SELECT id from res_users - WHERE login=%s AND password=%s - AND active FOR UPDATE NOWAIT""", - (tools.ustr(login), tools.ustr(password))) - cr.execute("""UPDATE res_users - SET login_date = now() AT TIME ZONE 'UTC' - WHERE login=%s AND password=%s AND active - RETURNING id""", - (tools.ustr(login), tools.ustr(password))) - except Exception: - # Failing to acquire the lock on the res_users row probably means - # another request is holding it. No big deal, we don't want to - # prevent/delay login in that case. It will also have been logged - # as a SQL error, if anyone cares. - cr.execute("""SELECT id from res_users - WHERE login=%s AND password=%s - AND active""", - (tools.ustr(login), tools.ustr(password))) - finally: - res = cr.fetchone() - cr.close() - if res: - return res[0] - return False - - def check_super(self, passwd): - if passwd == tools.config['admin_passwd']: - return True - else: - raise openerp.exceptions.AccessDenied() - def check(self, db, uid, passwd): - """Verifies that the given (uid, password) pair is authorized for the database ``db`` and + """Verifies that the given (uid, password) is authorized for the database ``db`` and raise an exception if it is not.""" if not passwd: # empty passwords disallowed for obvious security reasons @@ -436,32 +441,14 @@ class res_users(osv.osv): return cr = pooler.get_db(db).cursor() try: - cr.execute('SELECT COUNT(1) FROM res_users WHERE id=%s AND password=%s AND active=%s', - (int(uid), passwd, True)) - res = cr.fetchone()[0] - if not res: - raise openerp.exceptions.AccessDenied() + self.check_credentials(cr, uid, passwd) if self._uid_cache.has_key(db): - ulist = self._uid_cache[db] - ulist[uid] = passwd + self._uid_cache[db][uid] = passwd else: self._uid_cache[db] = {uid:passwd} finally: cr.close() - def access(self, db, uid, passwd, sec_level, ids): - if not passwd: - return False - cr = pooler.get_db(db).cursor() - try: - cr.execute('SELECT id FROM res_users WHERE id=%s AND password=%s', (uid, passwd)) - res = cr.fetchone() - if not res: - raise openerp.exceptions.AccessDenied() - return res[0] - finally: - cr.close() - def change_password(self, cr, uid, old_passwd, new_passwd, context=None): """Change current user password. Old password must be provided explicitly to prevent hijacking an existing user session, or for cases where the cleartext @@ -584,8 +571,6 @@ class groups_implied(osv.osv): super(groups_implied, self).write(cr, uid, gids, vals, context) return res -groups_implied() - class users_implied(osv.osv): _inherit = 'res.users' @@ -609,10 +594,6 @@ class users_implied(osv.osv): super(users_implied, self).write(cr, uid, [user.id], vals, context) return res -users_implied() - - - # # Extension of res.groups and res.users for the special groups view in the users # form. This extension presents groups with selection and boolean widgets: @@ -755,8 +736,6 @@ class groups_view(osv.osv): res.append((False, 'boolean', others)) return res -groups_view() - class users_view(osv.osv): _inherit = 'res.users' @@ -848,6 +827,4 @@ class users_view(osv.osv): } return res -users_view() - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 35e620ce688d07fd7ff6b0f50510c2c9301d2c7a Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 15 Aug 2012 23:10:04 +0200 Subject: [PATCH 154/165] [FIX] check credentials now works bzr revid: al@openerp.com-20120815211004-3arwfttwprm3tblh --- addons/auth_oauth/res_users.py | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py index 46feac109c6..5f89296976c 100644 --- a/addons/auth_oauth/res_users.py +++ b/addons/auth_oauth/res_users.py @@ -14,7 +14,7 @@ class res_users(osv.Model): _inherit = 'res.users' _columns = { - 'oauth_provider': fields.many2one('auth.oauth.provider','OAuth Provider'), + 'oauth_provider_id': fields.many2one('auth.oauth.provider','OAuth Provider'), 'oauth_uid': fields.char('OAuth User ID', help="Oauth Provider user_id"), 'oauth_access_token': fields.char('OAuth Token', readonly=True), } @@ -59,7 +59,7 @@ class res_users(osv.Model): 'name': name, 'login': login, 'user_email': login, - 'oauth_provider': 'Google', + 'oauth_provider_id': 1, 'oauth_uid': oauth_uid, 'oauth_access_token': access_token, 'active': True, @@ -67,25 +67,12 @@ class res_users(osv.Model): self.auth_signup_create(cr, uid, new_user) return credentials - def check(self, db, uid, passwd): + def check_credentials(self, cr, uid, password): try: - return super(res_users, self).check(db, uid, passwd) - except openerp.exceptions.AccesDenied: - if not passwd: + return super(res_users, self).check_credentials(cr, uid, password) + except openerp.exceptions.AccessDenied: + res = self.search(cr, 1, [('id','=',uid),('oauth_access_token','=',password)]) + if not res: raise - try: - registry = openerp.modules.registry.RegistryManager.get(db) - cr = registry.db.cursor() - cr.execute('''SELECT COUNT(1) - FROM res_users - WHERE id=%s - AND oauth_access_token=%s - AND active=%s''', - (int(uid), passwd, True)) - if not cr.fetchone()[0]: - raise - self._uid_cache.setdefault(db, {})[uid] = passwd - finally: - cr.close() # From 0529e1a0fbd98318856fd3b1e3084e632e0bd1c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 23:11:05 +0200 Subject: [PATCH 155/165] [IMP] mail_thread: automatic subscription: do not add 'False' user_ids. bzr revid: tde@openerp.com-20120815211105-0vdhw7x1lkz0dct8 --- addons/mail/mail_thread.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 43bddc204e1..f8c02e34ec7 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -240,12 +240,15 @@ class mail_thread(osv.Model): # for each monitored field: if in record_vals, it has been modified/added follower_ids = [] for field in modified_fields: - follower_ids.append(record_vals.get(field)) + # do not add 'False' + if record_vals.get(fields): + follower_ids.append(record_vals.get(field)) # for other fields: read in record if fetch_missing (otherwise list is void) for field in other_fields: record = self.browse(cr, uid, id, context=context) value = getattr(record, field) - follower_ids.append(value) + if value: + follower_ids.append(value) # add uid if asked and not already present if add_uid and uid not in follower_ids: follower_ids.append(uid) From 454803c15080472a0a4d16f434d459b398922121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 23:20:59 +0200 Subject: [PATCH 156/165] [REM] mail_thread: res_users: removed dead code. bzr revid: tde@openerp.com-20120815212059-n1hf253xylxq7y7x --- addons/mail/res_users.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index 1c7f002f1fa..f985ac4f88d 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -159,10 +159,6 @@ class res_users(osv.Model): for user in self.browse(cr, uid, ids, context=context): return user.partner_id.message_read(fetch_ancestors, ancestor_ids, limit, offset, domain) - def message_read_subscribers(self, cr, uid, ids, fields=['id', 'name', 'image_small'], context=None): - for user in self.browse(cr, uid, ids, context=context): - return user.partner_id.message_read_subscribers(fields) - def message_search(self, cr, uid, ids, fetch_ancestors=False, ancestor_ids=None, limit=100, offset=0, domain=None, count=False, context=None): for user in self.browse(cr, uid, ids, context=context): From 5a89f31bdfb5622d6c491b96a5c1388255585c18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 15 Aug 2012 23:55:10 +0200 Subject: [PATCH 157/165] [IMP] mail_thread: check before subscribing at message creation, because there is a loop in procurement. bzr revid: tde@openerp.com-20120815215510-5gd1wtkhoqpswu83 --- addons/mail/mail_thread.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index f8c02e34ec7..1c801aa1f26 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -267,15 +267,16 @@ class mail_thread(osv.Model): if context is None: context = {} - notification_obj = self.pool.get('mail.notification') - - # automatically subscribe the writer of the message - if vals.get('user_id'): - self.message_subscribe(cr, uid, [thread_id], [vals['user_id']], context=context) - # create message msg_id = self.pool.get('mail.message').create(cr, uid, vals, context=context) - + + # automatically subscribe the writer of the message + if vals.get('user_id'): + record = self.browse(cr, uid, thread_id, context=context) + follower_ids = [follower.id for follower in record.follower_ids] + if vals.get('user_id') not in follower_ids: + self.message_subscribe(cr, uid, [thread_id], [vals.get('user_id')], context=context) + # Set as unread if writer is not the document responsible self.message_create_set_unread(cr, uid, [thread_id], context=context) @@ -284,6 +285,7 @@ class mail_thread(osv.Model): return msg_id # get users that will get a notification pushed + notification_obj = self.pool.get('mail.notification') user_to_push_ids = self.message_get_user_ids_to_notify(cr, uid, [thread_id], vals, context=context) for id in user_to_push_ids: notification_obj.create(cr, uid, {'user_id': id, 'message_id': msg_id}, context=context) From 0c706a768d3737791901b0deca5fffb7bfa61410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 16 Aug 2012 00:03:54 +0200 Subject: [PATCH 158/165] [FIX] Fixed wrong var name... bzr revid: tde@openerp.com-20120815220354-9c4ohv57g1vn65xj --- addons/mail/mail_thread.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 1c801aa1f26..3fa182585cf 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -273,7 +273,7 @@ class mail_thread(osv.Model): # automatically subscribe the writer of the message if vals.get('user_id'): record = self.browse(cr, uid, thread_id, context=context) - follower_ids = [follower.id for follower in record.follower_ids] + follower_ids = [follower.id for follower in record.message_follower_ids] if vals.get('user_id') not in follower_ids: self.message_subscribe(cr, uid, [thread_id], [vals.get('user_id')], context=context) From da8045d7840d48fff70bc9c583d9dfddb97cc57f Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 16 Aug 2012 00:30:38 +0200 Subject: [PATCH 159/165] add message_followers_ids bzr revid: al@openerp.com-20120815223038-ppuq03m5wj97u6rj --- addons/account/account_invoice_view.xml | 2 ++ addons/account_voucher/account_voucher_view.xml | 1 + addons/account_voucher/voucher_payment_receipt_view.xml | 2 ++ addons/account_voucher/voucher_sales_purchase_view.xml | 2 ++ addons/analytic/analytic_view.xml | 1 + addons/base_calendar/crm_meeting_view.xml | 1 + addons/crm/crm_lead_view.xml | 2 ++ addons/crm/crm_phonecall_view.xml | 1 + addons/crm_claim/crm_claim_view.xml | 1 + addons/crm_helpdesk/crm_helpdesk_view.xml | 1 + addons/event/event_view.xml | 2 ++ addons/hr_expense/hr_expense_view.xml | 1 + addons/hr_holidays/hr_holidays_view.xml | 2 ++ addons/hr_recruitment/hr_recruitment_view.xml | 1 + addons/idea/idea_view.xml | 1 + addons/mail/res_partner_view.xml | 1 + addons/mrp/mrp_view.xml | 1 + addons/mrp_operations/mrp_operations_view.xml | 1 + addons/mrp_repair/mrp_repair_view.xml | 1 + addons/procurement/procurement_view.xml | 1 + addons/product/product_view.xml | 1 + addons/project/project_view.xml | 2 ++ addons/project_issue/project_issue_view.xml | 1 + addons/purchase/purchase_view.xml | 1 + addons/purchase_requisition/purchase_requisition_view.xml | 1 + addons/sale/sale_view.xml | 1 + addons/stock/stock_view.xml | 2 ++ 27 files changed, 35 insertions(+) diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 5aca260bc12..143c5514141 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -273,6 +273,7 @@
      +
      @@ -426,6 +427,7 @@
      +
      diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml index 2de4d6176b0..64e1cf22156 100644 --- a/addons/account_voucher/account_voucher_view.xml +++ b/addons/account_voucher/account_voucher_view.xml @@ -111,6 +111,7 @@
      +
      diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index 45144be24d4..503c3aeaa5e 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -240,6 +240,7 @@
      +
      @@ -408,6 +409,7 @@
      +
      diff --git a/addons/account_voucher/voucher_sales_purchase_view.xml b/addons/account_voucher/voucher_sales_purchase_view.xml index 965e2600f24..5bcecfa268e 100644 --- a/addons/account_voucher/voucher_sales_purchase_view.xml +++ b/addons/account_voucher/voucher_sales_purchase_view.xml @@ -147,6 +147,7 @@
      +
      @@ -301,6 +302,7 @@
      +
      diff --git a/addons/analytic/analytic_view.xml b/addons/analytic/analytic_view.xml index ccd77638fd9..16100e73fff 100644 --- a/addons/analytic/analytic_view.xml +++ b/addons/analytic/analytic_view.xml @@ -45,6 +45,7 @@
      +
      diff --git a/addons/base_calendar/crm_meeting_view.xml b/addons/base_calendar/crm_meeting_view.xml index c6826786379..51d17ed43f8 100644 --- a/addons/base_calendar/crm_meeting_view.xml +++ b/addons/base_calendar/crm_meeting_view.xml @@ -233,6 +233,7 @@
      +
      diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index dd7743bc26b..e56215f3332 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -222,6 +222,7 @@
      +
      @@ -532,6 +533,7 @@
      +
      diff --git a/addons/crm/crm_phonecall_view.xml b/addons/crm/crm_phonecall_view.xml index 9081ea15637..3b5162288a4 100644 --- a/addons/crm/crm_phonecall_view.xml +++ b/addons/crm/crm_phonecall_view.xml @@ -154,6 +154,7 @@
      +
      diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml index cf5d1a780e8..820fb38e58a 100644 --- a/addons/crm_claim/crm_claim_view.xml +++ b/addons/crm_claim/crm_claim_view.xml @@ -182,6 +182,7 @@
      +
      diff --git a/addons/crm_helpdesk/crm_helpdesk_view.xml b/addons/crm_helpdesk/crm_helpdesk_view.xml index 02c6603280a..5399c9880ca 100644 --- a/addons/crm_helpdesk/crm_helpdesk_view.xml +++ b/addons/crm_helpdesk/crm_helpdesk_view.xml @@ -100,6 +100,7 @@
      +
      diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 289316110e6..27829129c15 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -196,6 +196,7 @@
      +
      @@ -477,6 +478,7 @@
      +
      diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index 506b9d7183f..a810b87dad0 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -120,6 +120,7 @@
      +
      diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 0030a2b0187..711d07bbfe8 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -137,6 +137,7 @@
      +
      @@ -183,6 +184,7 @@
      +
      diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 8a6296cd230..0e74473f853 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -181,6 +181,7 @@
      +
      diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml index 18c81a497d0..eab3d03ceea 100644 --- a/addons/idea/idea_view.xml +++ b/addons/idea/idea_view.xml @@ -78,6 +78,7 @@
      +
      diff --git a/addons/mail/res_partner_view.xml b/addons/mail/res_partner_view.xml index 2b8d38f2b99..2a8430926d5 100644 --- a/addons/mail/res_partner_view.xml +++ b/addons/mail/res_partner_view.xml @@ -11,6 +11,7 @@
      +
      diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index 6de9a9a0bbc..c394544574d 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -818,6 +818,7 @@
      +
      diff --git a/addons/mrp_operations/mrp_operations_view.xml b/addons/mrp_operations/mrp_operations_view.xml index 658c284bce4..834f3000472 100644 --- a/addons/mrp_operations/mrp_operations_view.xml +++ b/addons/mrp_operations/mrp_operations_view.xml @@ -108,6 +108,7 @@
      +
      diff --git a/addons/mrp_repair/mrp_repair_view.xml b/addons/mrp_repair/mrp_repair_view.xml index c9268a55428..55cbe49c75b 100644 --- a/addons/mrp_repair/mrp_repair_view.xml +++ b/addons/mrp_repair/mrp_repair_view.xml @@ -190,6 +190,7 @@
      +
      diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml index 2d734b32cfb..dbdc65c6763 100644 --- a/addons/procurement/procurement_view.xml +++ b/addons/procurement/procurement_view.xml @@ -104,6 +104,7 @@
      +
      diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml index 7a4c66ec52a..70651a0a795 100644 --- a/addons/product/product_view.xml +++ b/addons/product/product_view.xml @@ -176,6 +176,7 @@
      +
      diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 7d78a040b7e..eb17d446816 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -148,6 +148,7 @@
      +
      @@ -481,6 +482,7 @@
      +
      diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index 08a2ae0b1d0..bb15f8c2f94 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -160,6 +160,7 @@
      +
      diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 9cb5430ed4e..d2fbba68866 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -261,6 +261,7 @@
      +
      diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml index 0a442c3f9aa..188f81b6cbe 100644 --- a/addons/purchase_requisition/purchase_requisition_view.xml +++ b/addons/purchase_requisition/purchase_requisition_view.xml @@ -103,6 +103,7 @@
      +
      diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index a4a049fdbc5..c4edc162f08 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -351,6 +351,7 @@
      +
      diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index fb90b47fcb2..6927bf68c25 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -1011,6 +1011,7 @@
      +
      @@ -1133,6 +1134,7 @@
      +
      From df6a7026d89c9e0e8d600a293420a81d61e16024 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 16 Aug 2012 00:37:25 +0200 Subject: [PATCH 160/165] [IMP] mail_thread: cleaned subscription procses: do not add uid when modifying subscribers. bzr revid: tde@openerp.com-20120815223725-2w2lmdagwuj0d59p --- addons/mail/mail_thread.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 3fa182585cf..1c79b444b1b 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -189,10 +189,12 @@ class mail_thread(osv.Model): for id in ids: # copy origin al vals because we are going to modify it specific_vals = dict(vals) - followers_command = self.message_get_automatic_followers(cr, uid, id, specific_vals, context=context) + # we modify followers: do not subscribe the uid if specific_vals.get('message_follower_ids'): + followers_command = self.message_get_automatic_followers(cr, uid, id, specific_vals, add_uid=False, context=context) specific_vals['message_follower_ids'] += followers_command else: + followers_command = self.message_get_automatic_followers(cr, uid, id, specific_vals, context=context) specific_vals['message_follower_ids'] = followers_command write_res = super(mail_thread, self).write(cr, uid, ids, specific_vals, context=context) return True From 23178302c4c44034e0bf6b6b1ea1a60d42e7d41c Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 16 Aug 2012 00:47:08 +0200 Subject: [PATCH 161/165] oauth generic with buttons from zocial bzr revid: al@openerp.com-20120815224708-rcge3914klkwrw6u --- addons/auth_oauth/__openerp__.py | 2 +- addons/auth_oauth/auth_oauth.py | 3 +- addons/auth_oauth/auth_oauth_data.xml | 21 +- addons/auth_oauth/controllers/main.py | 7 +- addons/auth_oauth/res_users.py | 20 +- addons/auth_oauth/static/lib/zocial/README.md | 31 ++ .../lib/zocial/css/zocial-regular-webfont.eot | Bin 0 -> 28471 bytes .../lib/zocial/css/zocial-regular-webfont.svg | 129 ++++++ .../lib/zocial/css/zocial-regular-webfont.ttf | Bin 0 -> 41156 bytes .../zocial/css/zocial-regular-webfont.woff | Bin 0 -> 31320 bytes .../static/lib/zocial/css/zocial.css | 420 ++++++++++++++++++ .../auth_oauth/static/lib/zocial/sample.html | 265 +++++++++++ .../auth_oauth/static/src/css/auth_oauth.css | 2 - addons/auth_oauth/static/src/js/auth_oauth.js | 11 +- .../auth_oauth/static/src/xml/auth_oauth.xml | 4 +- 15 files changed, 885 insertions(+), 30 deletions(-) create mode 100644 addons/auth_oauth/static/lib/zocial/README.md create mode 100755 addons/auth_oauth/static/lib/zocial/css/zocial-regular-webfont.eot create mode 100755 addons/auth_oauth/static/lib/zocial/css/zocial-regular-webfont.svg create mode 100755 addons/auth_oauth/static/lib/zocial/css/zocial-regular-webfont.ttf create mode 100755 addons/auth_oauth/static/lib/zocial/css/zocial-regular-webfont.woff create mode 100644 addons/auth_oauth/static/lib/zocial/css/zocial.css create mode 100644 addons/auth_oauth/static/lib/zocial/sample.html delete mode 100644 addons/auth_oauth/static/src/css/auth_oauth.css diff --git a/addons/auth_oauth/__openerp__.py b/addons/auth_oauth/__openerp__.py index b61df57c00b..6c79bba2151 100644 --- a/addons/auth_oauth/__openerp__.py +++ b/addons/auth_oauth/__openerp__.py @@ -39,7 +39,7 @@ 'static/src/js/auth_oauth.js', ], 'css': [ - 'static/src/css/auth_oauth.css', + 'static/lib/zocial/css/zocial.css', ], 'qweb': [ 'static/src/xml/auth_oauth.xml', diff --git a/addons/auth_oauth/auth_oauth.py b/addons/auth_oauth/auth_oauth.py index de40cc8666c..e258505868d 100644 --- a/addons/auth_oauth/auth_oauth.py +++ b/addons/auth_oauth/auth_oauth.py @@ -14,7 +14,8 @@ class auth_oauth_providers(osv.osv): 'scope' : fields.char('Scope'), # OAUth user data desired to access 'validation_endpoint' : fields.char('Validation URL'), # OAuth provider URL to validate tokens 'data_endpoint' : fields.char('Data URL'), - 'icon_url' : fields.char('Icon'), # URL of the icon's provider + 'css_class' : fields.char('CSS class'), + 'body' : fields.char('Body'), 'active' : fields.boolean('Active'), 'sequence' : fields.integer(), } diff --git a/addons/auth_oauth/auth_oauth_data.xml b/addons/auth_oauth/auth_oauth_data.xml index 7eef4f83c51..021a03b2742 100644 --- a/addons/auth_oauth/auth_oauth_data.xml +++ b/addons/auth_oauth/auth_oauth_data.xml @@ -1,13 +1,26 @@ + + Facebook Graph + facebook_client_id + https://www.facebook.com/dialog/oauth + + https://graph.facebook.com/me/permissions + + zocial facebook + Sign in with facebook + True + Google OAuth2 108010644258-duuhmp6pu7li4tsmnqg7j9rvdeklg0ki.apps.googleusercontent.com https://accounts.google.com/o/oauth2/auth https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile - https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= - https://www.googleapis.com/oauth2/v1/userinfo?access_token= + https://www.googleapis.com/oauth2/v1/tokeninfo + https://www.googleapis.com/oauth2/v1/userinfo + zocial google + Sign in with google True @@ -15,8 +28,10 @@ 108010644258-duuhmp6pu7li4tsmnqg7j9rvdeklg0ki.apps.twitterusercontent.com https://api.twitter.com/oauth/request_token - https://api.twitter.com/oauth/authorize?oauth_token= + https://api.twitter.com/oauth/authorize + zocial twitter + Sign in with twitter True diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py index a3f69954812..28f550b4bda 100644 --- a/addons/auth_oauth/controllers/main.py +++ b/addons/auth_oauth/controllers/main.py @@ -1,5 +1,6 @@ import logging +import simplejson import werkzeug.urls import werkzeug.utils @@ -22,12 +23,14 @@ class OAuthController(openerpweb.Controller): @openerpweb.httprequest def signin(self, req, **kw): - dbname = kw.get("state") + state = simplejson.loads(kw['state']) + dbname = state['d'] + provider = state['p'] registry = openerp.modules.registry.RegistryManager.get(dbname) with registry.cursor() as cr: try: u = registry.get('res.users') - credentials = u.auth_oauth(cr, 1, {}, kw) + credentials = u.auth_oauth(cr, 1, provider, kw) cr.commit() return openerp.addons.web.controllers.main.login_and_redirect(req, *credentials) except AttributeError: diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py index 5f89296976c..3dbab849942 100644 --- a/addons/auth_oauth/res_users.py +++ b/addons/auth_oauth/res_users.py @@ -5,7 +5,6 @@ import urllib2 import simplejson import openerp - from openerp.osv import osv, fields _logger = logging.getLogger(__name__) @@ -26,30 +25,23 @@ class res_users(osv.Model): response = f.read() return simplejson.loads(response) - def auth_oauth_fetch_user_validation(self, cr, uid, access_token, context=None): - endpoint = 'https://www.googleapis.com/oauth2/v1/tokeninfo' - return self.auth_oauth_rpc(cr, uid, endpoint, access_token) - - def auth_oauth_fetch_user_data(self, cr, uid, access_token, context=None): - endpoint = 'https://www.googleapis.com/oauth2/v1/userinfo' - return self.auth_oauth_rpc(cr, uid, endpoint, access_token) - - def auth_oauth(self, cr, uid, config, params, context=None): + def auth_oauth(self, cr, uid, provider, params, context=None): # Advice by Google (to avoid Confused Deputy Problem) # if validation.audience != OUR_CLIENT_ID: # abort() # else: # continue with the process access_token = params.get('access_token') - validation = self.auth_oauth_fetch_user_validation(cr, uid, access_token, context=context) + p = self.pool.get('auth.oauth.provider').browse(cr, uid, provider, context=context) + + validation = self.auth_oauth_rpc(cr, uid, p.validation_endpoint, access_token) if validation.get("error"): raise openerp.exceptions.AccessDenied - login = validation['email'] oauth_uid = validation['user_id'] - name = self.auth_oauth_fetch_user_data(cr, uid, access_token)['name'] - credentials = (cr.dbname, login, access_token) + name = self.auth_oauth_rpc(cr, uid, p.data_endpoint, access_token)['name'] + credentials = (cr.dbname, login, access_token) res = self.search(cr, uid, [("oauth_uid", "=", oauth_uid)]) if res: self.write(cr, uid, res[0], {'oauth_access_token':access_token}) diff --git a/addons/auth_oauth/static/lib/zocial/README.md b/addons/auth_oauth/static/lib/zocial/README.md new file mode 100644 index 00000000000..213132677af --- /dev/null +++ b/addons/auth_oauth/static/lib/zocial/README.md @@ -0,0 +1,31 @@ +# Zocial CSS social buttons + +I basically rewrote this entire set so they are full vector buttons, meaning: + +- @font-face icons +- custom font file for all social icons +- icon font use private unicode spaces for accessibility +- em sizing based on button font-size +- support for about 83 different services +- buttons and icons supported +- no raster images (sweet) +- works splendidly on any browser supporting @font-face +- CSS3 degrades gracefully in IE8 and below etc. +- also includes generic icon-less primary and secondary buttons + +## How to use these buttons + + + +or + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/auth_oauth/static/lib/zocial/css/zocial-regular-webfont.ttf b/addons/auth_oauth/static/lib/zocial/css/zocial-regular-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..94809d3a57ffcbfa1f3760420d745b2381574a05 GIT binary patch literal 41156 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 literal 0 HcmV?d00001 diff --git a/addons/auth_oauth/static/lib/zocial/css/zocial-regular-webfont.woff b/addons/auth_oauth/static/lib/zocial/css/zocial-regular-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..1d6c4abc9d902c0f8662cadf3646810bd03639b7 GIT binary patch literal 31320 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 literal 0 HcmV?d00001 diff --git a/addons/auth_oauth/static/lib/zocial/css/zocial.css b/addons/auth_oauth/static/lib/zocial/css/zocial.css new file mode 100644 index 00000000000..89fc7450631 --- /dev/null +++ b/addons/auth_oauth/static/lib/zocial/css/zocial.css @@ -0,0 +1,420 @@ +@charset "UTF-8"; + +/*! +Code written by Sam Collins (@smcllns) of www.eventasaur.us +You are free to use this work commercially +You are free to extend this work without permissions from the author (just do so tastefully eh?) +Enjoy +*/ + +/* Reference icons from font-files */ + +@font-face { + font-family: 'zocial'; + font-style: normal; + font-weight: normal; + src: url('zocial-regular-webfont.eot'); + src: url('zocial-regular-webfont.eot?#iefix') format('embedded-opentype'), + url('zocial-regular-webfont.woff') format('woff'), + url('zocial-regular-webfont.ttf') format('truetype'), + url('zocial-regular-webfont.svg#ZocialRegular') format('svg'); + unicode-range: U+0-U+10FFFF; +} + +/* Button structure */ + +.zocial, +a.zocial { + border: 1px solid #777; + border-color: rgba(0,0,0,0.2); + border-bottom-color: #333; + border-bottom-color: rgba(0,0,0,0.4); + color: #fff; + -moz-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.4), inset 0 0 0.1em rgba(255,255,255,0.9); + -webkit-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.4), inset 0 0 0.1em rgba(255,255,255,0.9); + box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.4), inset 0 0 0.1em rgba(255,255,255,0.9); + cursor: pointer; + display: inline-block; + font: bold 100%/2.1 "Lucida Grande", Tahoma, sans-serif; + padding: 0 .95em 0 0; + text-align: center; + text-decoration: none; + text-shadow: 0 1px 0 rgba(0,0,0,0.5); + white-space: nowrap; + + -moz-user-select: none; + -webkit-user-select: none; + user-select: none; + + position: relative; + + -moz-border-radius: .3em; + -webkit-border-radius: .3em; + border-radius: .3em; +} + +.zocial:before { + content: ""; + border-right: 0.075em solid rgba(0,0,0,0.1); + float: left; + font: 120%/1.65 zocial; + font-style: normal; + font-weight: normal; + margin: 0 0.5em 0 0; + padding: 0 0.5em; + text-align: center; + text-decoration: none; + text-transform: none; + + -moz-box-shadow: 0.075em 0 0 rgba(255,255,255,0.25); + -webkit-box-shadow: 0.075em 0 0 rgba(255,255,255,0.25); + box-shadow: 0.075em 0 0 rgba(255,255,255,0.25); + + -webkit-font-smoothing: antialiased; +} + +.zocial:active { + outline: none; /* outline is visible on :focus */ +} + +/* Buttons can be displayed as standalone icons by adding a class of "icon" */ + +.zocial.icon { + overflow: hidden; + max-width: 2.4em; + padding-left: 0; + padding-right: 0; + max-height: 2.15em; + white-space: nowrap; +} +.zocial.icon:before { + padding: 0; + width: 2em; + height: 2em; + + box-shadow: none; + border: none; +} + +/* Gradients */ + +.zocial { + background-image: -moz-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); + background-image: -ms-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); + background-image: -o-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.1)), color-stop(49%, rgba(255,255,255,.05)), color-stop(51%, rgba(0,0,0,.05)), to(rgba(0,0,0,.1))); + background-image: -webkit-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); + background-image: linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); +} + +.zocial:hover, .zocial:focus { + background-image: -moz-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); + background-image: -ms-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); + background-image: -o-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.15)), color-stop(49%, rgba(255,255,255,.15)), color-stop(51%, rgba(0,0,0,.1)), to(rgba(0,0,0,.15))); + background-image: -webkit-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); + background-image: linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); +} + +.zocial:active { + background-image: -moz-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); + background-image: -ms-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); + background-image: -o-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.1)), color-stop(30%, rgba(255,255,255,0)), color-stop(50%, transparent), to(rgba(0,0,0,.1))); + background-image: -webkit-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); + background-image: linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); +} + +/* Adjustments for light background buttons */ + +.zocial.bitcoin, +.zocial.cloudapp, +.zocial.dropbox, +.zocial.email, +.zocial.eventful, +.zocial.github, +.zocial.gmail, +.zocial.instapaper, +.zocial.itunes, +.zocial.ninetyninedesigns, +.zocial.openid, +.zocial.plancast, +.zocial.posterous, +.zocial.reddit, +.zocial.secondary, +.zocial.viadeo, +.zocial.weibo, +.zocial.wikipedia { + border: 1px solid #aaa; + border-color: rgba(0,0,0,0.3); + border-bottom-color: #777; + border-bottom-color: rgba(0,0,0,0.5); + -moz-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.7), inset 0 0 0.08em rgba(255,255,255,0.5); + -webkit-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.7), inset 0 0 0.08em rgba(255,255,255,0.5); + box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.7), inset 0 0 0.08em rgba(255,255,255,0.5); + text-shadow: 0 1px 0 rgba(255,255,255,0.8); +} + +/* :hover adjustments for light background buttons */ + +.zocial.bitcoin:focus, +.zocial.bitcoin:hover, +.zocial.dropbox:focus, +.zocial.dropbox:hover, +.zocial.email:focus, +.zocial.email:hover, +.zocial.eventful:focus, +.zocial.eventful:hover, +.zocial.github:focus, +.zocial.github:hover, +.zocial.gmail:focus, +.zocial.gmail:hover, +.zocial.instapaper:focus, +.zocial.instapaper:hover, +.zocial.itunes:focus, +.zocial.itunes:hover, +.zocial.ninetyninedesigns:focus, +.zocial.ninetyninedesigns:hover, +.zocial.openid:focus, +.zocial.openid:hover, +.zocial.plancast:focus, +.zocial.plancast:hover, +.zocial.posterous:focus, +.zocial.posterous:hover, +.zocial.reddit:focus, +.zocial.reddit:hover, +.zocial.secondary:focus, +.zocial.secondary:hover, +.zocial.twitter:focus, +.zocial.viadeo:focus, +.zocial.viadeo:hover, +.zocial.weibo:focus, +.zocial.weibo:hover, +.zocial.wikipedia:focus, +.zocial.wikipedia:hover { + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.5)), color-stop(49%, rgba(255,255,255,0.2)), color-stop(51%, rgba(0,0,0,0.05)), to(rgba(0,0,0,0.15))); + background-image: -moz-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); + background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); + background-image: -o-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); + background-image: -ms-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); + background-image: linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); +} + +/* :active adjustments for light background buttons */ + +.zocial.bitcoin:active, +.zocial.dropbox:active, +.zocial.email:active, +.zocial.eventful:active, +.zocial.github:active, +.zocial.gmail:active, +.zocial.instapaper:active, +.zocial.itunes:active, +.zocial.ninetyninedesigns:active, +.zocial.openid:active, +.zocial.plancast:active, +.zocial.posterous:active, +.zocial.reddit:active, +.zocial.secondary:active, +.zocial.viadeo:active, +.zocial.weibo:active, +.zocial.wikipedia:active { + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0)), color-stop(30%, rgba(255,255,255,0)), color-stop(50%, rgba(0,0,0,0)), to(rgba(0,0,0,0.1))); + background-image: -moz-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); + background-image: -webkit-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); + background-image: -o-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); + background-image: -ms-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); + background-image: linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); +} + +/* Button icon and color */ +/* Icon characters are stored in unicode private area */ +.zocial.amazon:before {content: "\E040";} +.zocial.android:before {content: "\E005";} +.zocial.angellist:before {content: "\E06C";} +.zocial.aol:before {content: "\E001";} +.zocial.appstore:before {content: "\E020";} +.zocial.bitcoin:before {content: "\E011"; color: #f7931a;} +.zocial.blogger:before {content: "\E021";} +.zocial.call:before {content: "\E016";} +.zocial.cal:before {content: "\E00D";} +.zocial.cart:before {content: "\E06A";} +.zocial.chrome:before {content: "\E03A";} +.zocial.cloudapp:before {content: "\E042";} +.zocial.creativecommons:before {content: "\E022";} +.zocial.delicious:before {content: "\E002";} +.zocial.digg:before {content: "\E01A";} +.zocial.disqus:before {content: "\E030";} +.zocial.dribbble:before {content: "\E023";} +.zocial.dropbox:before {content: "\E043"; color: #1f75cc;} +.zocial.email:before {content: "\E03C"; color: #312c2a;} +.zocial.eventasaurus:before {content: "\E055"; color: #9de428;} +.zocial.eventbrite:before {content: "\E05B";} +.zocial.eventful:before {content: "\E006"; color: #0066CC;} +.zocial.evernote:before {content: "\E024";} +.zocial.facebook:before {content: "\E045";} +.zocial.fivehundredpx:before {content: "\E00F"; color: #29b6ff;} +.zocial.flattr:before {content: "\E004";} +.zocial.flickr:before {content: "\E025";} +.zocial.forrst:before {content: "\E019"; color: #50894f;} +.zocial.foursquare:before {content: "\E013";} +.zocial.github:before {content: "\E046";} +.zocial.gmail:before {content: "\E04C"; color: #f00;} +.zocial.google:before {content: "\E026";} +.zocial.googleplay:before {content: "\E05E";} +.zocial.googleplus:before {content: "\E00A";} +.zocial.gowalla:before {content: "\E01F";} +.zocial.grooveshark:before {content: "\E017";} +.zocial.guest:before {content: "\E01E";} +.zocial.html5:before {content: "\E014";} +.zocial.ie:before {content: "\E015";} +.zocial.instagram:before {content: "\E06D";} +.zocial.instapaper:before {content: "\E028";} +.zocial.intensedebate:before {content: "\E05A";} +.zocial.itunes:before {content: "\E048"; color: #1a6dd2;} +.zocial.klout:before {content: "\E02A"; } +.zocial.lanyrd:before {content: "\E00C";} +.zocial.lastfm:before {content: "\E04B";} +.zocial.linkedin:before {content: "\E02B";} +.zocial.macstore:before {content: "\E03D";} +.zocial.meetup:before {content: "\E02C";} +.zocial.myspace:before {content: "\E03E";} +.zocial.ninetyninedesigns:before {content: "\E018"; color: #f50;} +.zocial.openid:before {content: "\E04E"; color: #ff921d;} +.zocial.opentable:before {content: "\E05F";} +.zocial.paypal:before {content: "\E003";} +.zocial.pinboard:before {content: "\E04D";} +.zocial.pinterest:before {content: "\E010";} +.zocial.plancast:before {content: "\E02F";} +.zocial.plurk:before {content: "\E049";} +.zocial.podcast:before {content: "\E03F";} +.zocial.posterous:before {content: "\E05D";} +.zocial.print:before {content: "\E06B";} +.zocial.quora:before {content: "\E050";} +.zocial.reddit:before {content: "\E01D"; color: red;} +.zocial.rss:before {content: "\E031";} +.zocial.scribd:before {content: "\E05C"; color: #00d5ea;} +.zocial.skype:before {content: "\E032";} +.zocial.smashing:before {content: "\E009";} +.zocial.songkick:before {content: "\E04A";} +.zocial.soundcloud:before {content: "\E052";} +.zocial.spotify:before {content: "\E01C";} +.zocial.stumbleupon:before {content: "\E00E";} +.zocial.tumblr:before {content: "\E053";} +.zocial.twitter:before {content: "\E033";} +.zocial.viadeo:before {content: "\E027"; color: #f59b20;} +.zocial.vimeo:before {content: "\E035";} +.zocial.weibo:before {content: "\E029"; color: #e6162d;} +.zocial.wikipedia:before {content: "\E00B";} +.zocial.windows:before {content: "\E036";} +.zocial.xing:before {content: "\E037"} +.zocial.wordpress:before {content: "\E056";} +.zocial.yahoo:before {content: "\E038";} +.zocial.yelp:before {content: "\E058";} +.zocial.youtube:before {content: "\E034";} + +/* Button background and text color */ + +.zocial.amazon {background-color: #ffad1d; color: #030037; text-shadow: 0 1px 0 rgba(255,255,255,0.5);} +.zocial.android {background-color: #a4c639;} +.zocial.angellist {background-color: #000;} +.zocial.aol {background-color: #f00;} +.zocial.appstore {background-color: #000;} +.zocial.bitcoin {background-color: #efefef; color: #4d4d4d;} +.zocial.blogger {background-color: #ee5a22;} +.zocial.call {background-color: #008000;} +.zocial.cal {background-color: #d63538;} +.zocial.cart {background-color: #333;} +.zocial.chrome {background-color: #006cd4;} +.zocial.cloudapp {background-color: #fff; color: #312c2a;} +.zocial.creativecommons {background-color: #000;} +.zocial.delicious {background-color: #3271cb;} +.zocial.digg {background-color: #164673;} +.zocial.disqus {background-color: #5d8aad;} +.zocial.dribbble {background-color: #ea4c89;} +.zocial.dropbox {background-color: #fff; color: #312c2a;} +.zocial.email {background-color: #f0f0eb; color: #312c2a;} +.zocial.eventasaurus {background-color: #192931; color: #fff;} +.zocial.eventbrite {background-color: #ff5616;} +.zocial.eventful {background-color: #fff; color: #47ab15;} +.zocial.evernote {background-color: #6bb130; color: #fff;} +.zocial.facebook {background-color: #4863ae;} +.zocial.fivehundredpx {background-color: #333;} +.zocial.flattr {background-color: #8aba42;} +.zocial.flickr {background-color: #ff0084;} +.zocial.forrst {background-color: #1e360d;} +.zocial.foursquare {background-color: #44a8e0;} +.zocial.github {background-color: #fbfbfb; color: #050505;} +.zocial.gmail {background-color: #efefef; color: #222;} +.zocial.google {background-color: #4e6cf7;} +.zocial.googleplay {background-color: #000;} +.zocial.googleplus {background-color: #dd4b39;} +.zocial.gowalla {background-color: #ff720a;} +.zocial.grooveshark {background-color: #111; color:#eee;} +.zocial.guest {background-color: #1b4d6d;} +.zocial.html5 {background-color: #ff3617;} +.zocial.ie {background-color: #00a1d9;} +.zocial.instapaper {background-color: #eee; color: #222;} +.zocial.instagram {background-color: #3f729b;} +.zocial.intensedebate {background-color: #0099e1;} +.zocial.klout {background-color: #e34a25;} +.zocial.itunes {background-color: #efefeb; color: #312c2a;} +.zocial.lanyrd {background-color: #2e6ac2;} +.zocial.lastfm {background-color: #dc1a23;} +.zocial.linkedin {background-color: #0083a8;} +.zocial.macstore {background-color: #007dcb} +.zocial.meetup {background-color: #ff0026;} +.zocial.myspace {background-color: #000;} +.zocial.ninetyninedesigns {background-color: #fff; color: #072243;} +.zocial.openid {background-color: #f5f5f5; color: #333;} +.zocial.opentable {background-color: #990000;} +.zocial.paypal {background-color: #fff; color: #32689a; text-shadow: 0 1px 0 rgba(255,255,255,0.5);} +.zocial.pinboard {background-color: blue;} +.zocial.pinterest {background-color: #c91618;} +.zocial.plancast {background-color: #e7ebed; color: #333;} +.zocial.plurk {background-color: #cf682f;} +.zocial.podcast {background-color: #9365ce;} +.zocial.posterous {background-color: #ffd959; color: #bc7134;} +.zocial.print {background-color: #f0f0eb; color: #222; text-shadow: 0 1px 0 rgba(255,255,255,0.8);} +.zocial.quora {background-color: #a82400;} +.zocial.reddit {background-color: #fff; color: #222;} +.zocial.rss {background-color: #ff7f25;} +.zocial.scribd {background-color: #231c1a;} +.zocial.skype {background-color: #00a2ed;} +.zocial.smashing {background-color: #ff4f27;} +.zocial.songkick {background-color: #ff0050;} +.zocial.soundcloud {background-color: #ff4500;} +.zocial.spotify {background-color: #60af00;} +.zocial.stumbleupon {background-color: #eb4924;} +.zocial.tumblr {background-color: #374a61;} +.zocial.twitter {background-color: #46c0fb;} +.zocial.viadeo {background-color: #fff; color: #000;} +.zocial.vimeo {background-color: #00a2cd;} +.zocial.weibo {background-color: #faf6f1; color: #000;} +.zocial.wikipedia {background-color: #fff; color: #000;} +.zocial.windows {background-color: #0052a4; color: #fff;} +.zocial.wordpress {background-color: #464646;} +.zocial.xing {background-color: #0A5D5E;} +.zocial.yahoo {background-color: #a200c2;} +.zocial.yelp {background-color: #e60010;} +.zocial.youtube {background-color: #f00;} + +/* +The Miscellaneous Buttons +These button have no icons and can be general purpose buttons while ensuring consistent button style +Credit to @guillermovs for suggesting +*/ + +.zocial.primary, .zocial.secondary {margin: 0.1em 0; padding: 0 1em;} +.zocial.primary:before, .zocial.secondary:before {display: none;} +.zocial.primary {background-color: #333;} +.zocial.secondary {background-color: #f0f0eb; color: #222; text-shadow: 0 1px 0 rgba(255,255,255,0.8);} + +/* Any browser-specific adjustments */ + +button:-moz-focus-inner { + border: 0; + padding: 0; +} + + diff --git a/addons/auth_oauth/static/lib/zocial/sample.html b/addons/auth_oauth/static/lib/zocial/sample.html new file mode 100644 index 00000000000..98dec554ff1 --- /dev/null +++ b/addons/auth_oauth/static/lib/zocial/sample.html @@ -0,0 +1,265 @@ + + + + + Zocial CSS3 Buttons + + + + + + + + + + + + + Sign in with Google+ + + Sign in with LinkedIn + +

      The Cool Kids

      + Sync with Dropbox + Clip to Evernote + Follow me on Forrst + Sign in with Dribbble + Sign in to CloudApp + Fork me on Github + Play on Spotify + Read It Later + Follow me on Soundcloud + Follow me on Tumblr + Read on Smashing Magazine + Available on iTunes + Available on the App Store + Available on the Mac App Store + Available on Android Market + Follow me on Pinterest + Follow me on Quora + Attend on Lanyrd + +

      The Not-So-Cool But Have-To-Be-Invited Kids

      + Pay with Paypal + Sign in with Amazon + Call me on Skype + Sign in with Last.fm + Write a review on Yelp + Check in with foursquare + Influence with Klout + +

      The Older (but Solid) Kids

      + View on Wikipedia + Sign in with Disqus + Sign in with IntenseDebate + Sign in with Google + Sign in with Gmail + Upload to Vimeo + Read more on Scribd + Subscribe on YouTube + Sign in with WordPress + Sign in with Songkick + Sign in with Posterous + Sign in with Eventbrite + Tip with Flattr + Follow me on Plancast + + +

      The Kids That Kinda Smell but Some People Don't Mind

      + Submit resume for CEO + Download Internet Explorer 5 + Report bugs with Meetup.com + Learn how-to-use OpenID + Register now for HTML6 + Chat with your parents + +

      The Kids That Nobody Normally Notices

      + Sign in as guest + View Creative Commons Licence + Subscribe to RSS + Add to Chrome + +

      The He's-My-Son-So-Of-Course-He's-Here Kid

      + Sign up for Eventasaurus + +

      Kids By Request

      + Join me on Weibo + Sign in with Plurk + Play on Grooveshark + Post on Blogger + Sign in with Viadeo + Subscribe to this Podcast + View Portfolio on 500px + Bitcoin accepted here + View Portfolio on 99Designs + Bookmark with Pinboard + Stumble! + Find me on Myspace + Sign in with Windows Live + Find Events with Eventful + Sign in with Xing + Upload to Flickr + Sign in with Del.icio.us + Download from Google Play + Reserve with OpenTable + Digg this + Share on Reddit + Fund us on AngelList + Sign-in with Instagram + +

      The Multi-Purpose Kids (Credit: Pictos Icons)

      + + Call a phone + + Add to calendar + Add to cart + Print this page + Primary action + Secondary action + + +

      Icon versions of the above

      + + Sign in with Google+ + + Sign in with Google + Sign in with LinkedIn + Pay with Paypal + Sign in with Amazon + Sync with Dropbox + Clip to Evernote + Call me on Skype + Sign in as guest + Play on Spotify + Sign in with Last.fm + Sign in with Songkick + Follow me on Forrst + Sign in with Dribbble + Sign in to CloudApp + Fork me on Github + Follow me on Pinterest + Follow me on Quora + Bookmark with Pinboard + Attend on Lanyrd + Download on iTunes + Download on Android + Sign in with Disqus + Sign in with Yahoo + Upload to Vimeo + Add to Chrome + Get a new browser + Made from HTML5 + Read It Later + Read more on Scribd + View on Wikipedia + Tip with Flattr + Follow me on Tumblr + Subscribe to my Posterous + Check in with Gowalla + Check in with foursquare + Write a review on Yelp + Follow me on Soundcloud + Read on Smashing Magazine + Sign in with WordPress + Sign in with IntenseDebate + Sign in with OpenID + Sign in with Gmail + Sign in with Eventbrite + Sign in with Eventasaurus + Sign in with Meetup.com + Sign in with AIM + Follow me on Plancast + Subscribe on YouTube + Available on the Mac App Store + View Creative Commons Licence + Subscribe to RSS + Follow me on Weibo + Follow me on Plurk + Follow me on Grooveshark + Post on Blogger + Sign in with Viadeo + Subscribe to this Podcast + View Portfolio on 500px + Bitcoin accepted here + View Portfolio on 99Designs + Stumble! + Download on iTunes + Find me on Myspace + Sign in with Windows Live + Find Events with Eventful + Influence with Klout + Sign in with Xing + Upload to Flickr + Sign in with Del.icio.us + Download from Google Play + Reserve with OpenTable + Digg this + Share on Reddit + Fund us on AngelList + Sign-in with Instagram + Call a phone + + Add to calendar + Print this page + Add to cart + + + +

      Thanks to @guillermovs, @kamens, @vizualover, and @leaverou for code refinements and suggestions.

      + +

      Massive thanks to @drewwilson for making the multi-purpose buttons possible with his incredible Pictos icons.

      + +

      See code samples at zocial.smcllns.com — ask questions to @smcllns

      + + + + + + + + diff --git a/addons/auth_oauth/static/src/css/auth_oauth.css b/addons/auth_oauth/static/src/css/auth_oauth.css deleted file mode 100644 index c8e0efe4c32..00000000000 --- a/addons/auth_oauth/static/src/css/auth_oauth.css +++ /dev/null @@ -1,2 +0,0 @@ -.oe_login_oauth { -} \ No newline at end of file diff --git a/addons/auth_oauth/static/src/js/auth_oauth.js b/addons/auth_oauth/static/src/js/auth_oauth.js index 67b446a4580..eae423fae1f 100644 --- a/addons/auth_oauth/static/src/js/auth_oauth.js +++ b/addons/auth_oauth/static/src/js/auth_oauth.js @@ -4,7 +4,7 @@ openerp.auth_oauth = function(instance) { instance.web.Login = instance.web.Login.extend({ start: function(parent, params) { var d = this._super.apply(this, arguments); - this.$element.on('click', 'a.oe_oauth_sign_in', this.on_oauth_sign_in); + this.$element.on('click', 'a.zocial', this.on_oauth_sign_in); this.oauth_providers = []; if(this.params.oauth_error === 1) { this.do_warn("Sign up error.","Sign up is not allowed on this database."); @@ -26,20 +26,23 @@ openerp.auth_oauth = function(instance) { console.log(buttons); this.$(".oe_login_pane form ul").after(buttons); }, - oauth_url: function(state) { - }, on_oauth_sign_in: function(ev) { ev.preventDefault(); var index = $(ev.target).data('index'); var p = this.oauth_providers[index]; var ret = location.protocol+"//"+location.host+"/"; var dbname = self.$("form [name=db]").val(); + var state_object = { + d: dbname, + p: p.id + } + var state = JSON.stringify(state_object); var params = { response_type: 'token', client_id: p.client_id, redirect_uri: ret, scope: p.scope, - state: dbname, + state: state, }; var url = p.auth_endpoint + '?' + $.param(params); window.location = url; diff --git a/addons/auth_oauth/static/src/xml/auth_oauth.xml b/addons/auth_oauth/static/src/xml/auth_oauth.xml index 494dc20e1a1..c2693804e59 100644 --- a/addons/auth_oauth/static/src/xml/auth_oauth.xml +++ b/addons/auth_oauth/static/src/xml/auth_oauth.xml @@ -2,9 +2,7 @@ - +
      From 2051bd9fda8d3453c0d6223c1f95bc9ae597bc01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 16 Aug 2012 01:26:49 +0200 Subject: [PATCH 162/165] [IMP] mail_followers widget: removed white spaces, removed a debugger statement, made the title generic. bzr revid: tde@openerp.com-20120815232649-8e8ehqhchxh2kypk --- addons/mail/static/src/js/mail_followers.js | 39 ++++++++++--------- addons/mail/static/src/xml/mail_followers.xml | 4 +- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/addons/mail/static/src/js/mail_followers.js b/addons/mail/static/src/js/mail_followers.js index 30d83667165..1a8c68e803a 100644 --- a/addons/mail/static/src/js/mail_followers.js +++ b/addons/mail/static/src/js/mail_followers.js @@ -6,32 +6,34 @@ openerp_mail_followers = function(session, mail) { /** * ------------------------------------------------------------ - * mail_thread Widget + * mail_followers Widget * ------------------------------------------------------------ * - * This widget handles the display of the Chatter on documents. + * This widget handles the display of a list of records as a vetical + * list, with an image on the left. The widget itself is a floatting + * right-sided box. + * This widget is mainly used to display the followers of records + * in OpenChatter. */ - /* Add mail_thread widget to registry */ + /* Add the widget to registry */ session.web.form.widgets.add('mail_followers', 'openerp.mail_followers.Followers'); - /** mail_thread widget: thread of comments */ mail_followers.Followers = session.web.form.AbstractField.extend({ - // QWeb template to use when rendering the object template: 'mail.followers', - init: function() { + init: function() { this._super.apply(this, arguments); - debugger this.params = {}; this.params.image = this.node.attrs.image || 'image_small'; + this.params.title = this.node.attrs.title || 'Followers'; this.params.display_followers = true; this.params.display_control = this.node.attrs.display_control || false; this.params.display_actions = this.node.attrs.display_actions || false; this.ds_model = new session.web.DataSetSearch(this, this.view.model); this.ds_follow = new session.web.DataSetSearch(this, this.field.relation); }, - + start: function() { var self = this; // NB: all the widget should be modified to check the actual_mode property on view, not use @@ -49,15 +51,15 @@ openerp_mail_followers = function(session, mail) { .mouseleave(function () { $(this).html('Following').removeClass('oe_mail_button_mouseover').addClass('oe_mail_button_mouseout'); }); this.reinit(); }, - + _check_visibility: function() { this.$element.toggle(this.view.get("actual_mode") !== "create"); }, - + destroy: function () { this._super.apply(this, arguments); }, - + reinit: function() { this.params.display_followers = true; this.params.display_control = this.node.attrs.display_control || false; @@ -66,7 +68,7 @@ openerp_mail_followers = function(session, mail) { this.$element.find('button.oe_mail_button_follow').hide(); this.$element.find('button.oe_mail_button_unfollow').hide(); }, - + set_value: function(value_) { this.reinit(); if (! this.view.datarecord.id || @@ -76,16 +78,16 @@ openerp_mail_followers = function(session, mail) { } return this.fetch_subscribers(value_); }, - + fetch_subscribers: function (value_) { return this.ds_follow.call('read', [value_ || this.get_value(), ['name', this.params.image]]).then(this.proxy('display_subscribers')); }, - + display_subscribers: function (records) { var self = this; this.is_subscriber = false; var user_list = this.$element.find('ul.oe_mail_followers_display').empty(); - this.$element.find('div.oe_mail_recthread_followers h4').html('Followers (' + records.length + ')'); + this.$element.find('div.oe_mail_recthread_followers h4').html(this.params.title + ' (' + records.length + ')'); _(records).each(function (record) { if (record.id == self.session.uid) { self.is_subscriber = true; } record.avatar_url = mail.ChatterUtils.get_image(self.session.prefix, self.session.session_id, 'res.users', 'image_small', record.id); @@ -98,16 +100,15 @@ openerp_mail_followers = function(session, mail) { this.$element.find('button.oe_mail_button_follow').show(); this.$element.find('button.oe_mail_button_unfollow').hide(); } }, - + do_follow: function () { return this.ds_model.call('message_subscribe', [[this.view.datarecord.id]]).pipe(this.proxy('set_value')); }, - + do_unfollow: function () { - var self = this; return this.ds_model.call('message_unsubscribe', [[this.view.datarecord.id]]).pipe(this.proxy('set_value')); }, - + do_toggle_followers: function () { this.params.see_subscribers = ! this.params.see_subscribers; if (this.params.see_subscribers) { this.$element.find('button.oe_mail_button_followers').html('Hide followers'); } diff --git a/addons/mail/static/src/xml/mail_followers.xml b/addons/mail/static/src/xml/mail_followers.xml index ad7bc71e4e4..53c899b9569 100644 --- a/addons/mail/static/src/xml/mail_followers.xml +++ b/addons/mail/static/src/xml/mail_followers.xml @@ -12,7 +12,9 @@
      -

      Followers

      + +

      +
        From 540346de578c9c7da9e1d1a3f78560c00ce7fb03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 16 Aug 2012 01:28:25 +0200 Subject: [PATCH 163/165] [DOC] mail_followers: added few few comments. bzr revid: tde@openerp.com-20120815232825-avpmpmn3egjkt65y --- addons/mail/static/src/js/mail_followers.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/mail/static/src/js/mail_followers.js b/addons/mail/static/src/js/mail_followers.js index 1a8c68e803a..0e920f73041 100644 --- a/addons/mail/static/src/js/mail_followers.js +++ b/addons/mail/static/src/js/mail_followers.js @@ -83,6 +83,9 @@ openerp_mail_followers = function(session, mail) { return this.ds_follow.call('read', [value_ || this.get_value(), ['name', this.params.image]]).then(this.proxy('display_subscribers')); }, + /** + * Display the followers. + * TODO: replace the is_subscriber check by fields read */ display_subscribers: function (records) { var self = this; this.is_subscriber = false; From 1bde3b3a4ccc9e0bb87021d07182e8cca65a5ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 16 Aug 2012 01:38:31 +0200 Subject: [PATCH 164/165] [CLEAN] mail_thread: cleaned some typos/words. bzr revid: tde@openerp.com-20120815233831-66socygrtp99gve7 --- addons/mail/mail_thread.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 1c79b444b1b..56c7e6b7088 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -142,8 +142,8 @@ class mail_thread(osv.Model): 'message_ids': fields.function(_get_message_data, fnct_search=_search_message_ids, type='one2many', obj='mail.message', _fields_id = 'res_id', - string='Temp messages', multi="_get_message_data", - help="Functional field holding messages related to the current document."), + string='Messages', multi="_get_message_data", + help="Field holding discussion about the current document."), 'message_follower_ids': many2many_reference('res.users', rel='mail_followers', id1='res_id', id2='user_id', string="Followers", help="Followers of the document. The followers have full access to " \ @@ -159,7 +159,7 @@ class mail_thread(osv.Model): "This summary is directly in html format in order to "\ "be inserted in kanban views."), } - + _defaults = { 'message_state': True, } @@ -187,7 +187,7 @@ class mail_thread(osv.Model): if isinstance(ids, (int, long)): ids = [ids] for id in ids: - # copy origin al vals because we are going to modify it + # copy original vals because we are going to modify it specific_vals = dict(vals) # we modify followers: do not subscribe the uid if specific_vals.get('message_follower_ids'): From 370839860b9cd5ca1ef1b64e6d9be19c963453a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 16 Aug 2012 02:08:33 +0200 Subject: [PATCH 165/165] [FIX] mail.group security: member_ids -> message_follower_ids. bzr revid: tde@openerp.com-20120816000833-ld4cjhyvs8lc1ta4 --- addons/mail/security/mail_security.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/security/mail_security.xml b/addons/mail/security/mail_security.xml index e73279b1ad7..a12314e6f25 100644 --- a/addons/mail/security/mail_security.xml +++ b/addons/mail/security/mail_security.xml @@ -21,7 +21,7 @@ Mail.group: access only public and joined groups - ['|', '|', ('public', '=', 'public'), ('member_ids', 'in', [user.id]), '&', ('public','=','groups'), ('group_public_id','in', [x.id for x in user.groups_id])] + ['|', '|', ('public', '=', 'public'), ('message_follower_ids', 'in', [user.id]), '&', ('public','=','groups'), ('group_public_id','in', [x.id for x in user.groups_id])]