From b03e5f9034430dde015ad3511f6e4acff4b61936 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 22 Apr 2011 10:54:46 +0200 Subject: [PATCH 001/204] [IMP] Add a cron for the analytic accounts, this cron will send an email to the responsible of the pending accounts bzr revid: stephane@openerp.com-20110422085446-r744ot300i6qwksv --- addons/account_analytic_analysis/__init__.py | 1 + .../account_analytic_analysis/__openerp__.py | 1 + .../account_analytic_analysis.py | 20 ++++- .../account_analytic_analysis_cron.xml | 15 ++++ .../account_analytic_analysis_menu.xml | 58 ++++++++++++++ .../cron_account_analytic_account.py | 79 +++++++++++++++++++ 6 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 addons/account_analytic_analysis/account_analytic_analysis_cron.xml create mode 100644 addons/account_analytic_analysis/cron_account_analytic_account.py diff --git a/addons/account_analytic_analysis/__init__.py b/addons/account_analytic_analysis/__init__.py index a7bdb11ad67..429aa011f31 100644 --- a/addons/account_analytic_analysis/__init__.py +++ b/addons/account_analytic_analysis/__init__.py @@ -20,6 +20,7 @@ ############################################################################## import account_analytic_analysis +import cron_account_analytic_account # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_analytic_analysis/__openerp__.py b/addons/account_analytic_analysis/__openerp__.py index 588055b3741..f5dea6e77e0 100644 --- a/addons/account_analytic_analysis/__openerp__.py +++ b/addons/account_analytic_analysis/__openerp__.py @@ -41,6 +41,7 @@ user-wise as well as month wise. "security/ir.model.access.csv", "account_analytic_analysis_view.xml", "account_analytic_analysis_menu.xml", + "account_analytic_analysis_cron.xml", ], 'demo_xml' : [], 'installable': True, diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py index 11f92614b73..03dea210396 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis.py +++ b/addons/account_analytic_analysis/account_analytic_analysis.py @@ -374,7 +374,25 @@ class account_analytic_account(osv.osv): res[id] = round(res.get(id, 0.0),2) return res - _columns ={ + def _is_overdue_quantity(self, cr, uid, ids, fieldnames, args, context=None): + result = dict.fromkeys(ids, 0) + + for record in self.browse(cr, uid, ids, context=context): + result[record.id] = int(record.quantity >= record.quantity_max) + + return result + + def _get_analytic_account(self, cr, uid, ids, context=None): + result = set() + for line in self.pool.get('account.analytic.line').browse(cr, uid, ids, context=context): + result.add(line.account_id.id) + return list(result) + + _columns = { + 'is_overdue_quantity' : fields.function(_is_overdue_quantity, method=True, type='boolean', string='Overdue Quantity', + store={ + 'account.analytic.line' : (_get_analytic_account, None, 20), + }), 'ca_invoiced': fields.function(_ca_invoiced_calc, method=True, type='float', string='Invoiced Amount', help="Total customer invoiced amount for this account.", digits_compute=dp.get_precision('Account')), diff --git a/addons/account_analytic_analysis/account_analytic_analysis_cron.xml b/addons/account_analytic_analysis/account_analytic_analysis_cron.xml new file mode 100644 index 00000000000..7134d59414b --- /dev/null +++ b/addons/account_analytic_analysis/account_analytic_analysis_cron.xml @@ -0,0 +1,15 @@ + + + + + Analytic Account Report for Sales + 1 + weeks + -1 + + + + + + + diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml index badd7e1816a..a564db17dfc 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml @@ -21,5 +21,63 @@ [('date','<=',time.strftime('%Y-%m-%d')),('state','=','open')] + + + account.analytic.account.search + account.analytic.account + search + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Overdue Accounts + account.analytic.account + form + tree,form,graph + {'search_default_has_partner' : 1, 'search_default_current' : 1} + + + + + diff --git a/addons/account_analytic_analysis/cron_account_analytic_account.py b/addons/account_analytic_analysis/cron_account_analytic_account.py new file mode 100644 index 00000000000..2bc8e0f98b1 --- /dev/null +++ b/addons/account_analytic_analysis/cron_account_analytic_account.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +from osv import osv +from mako.template import Template +import time +try: + import cStringIO as StringIO +except ImportError: + import StringIO + +import tools + +MAKO_TEMPLATE = u"""Hello ${user.name}, + +Here is a list of contracts that have to be renewed for two +possible reasons: + - the end of contract date is passed + - the customer consumed more support hours than expected + +Can you contact the customer in order to sell a new or renew its contract. +the contract has been set with a pending state, can you update the status +of the analytic account following this rule: + - Set Done: if the customer does not want to renew + - Set Open: if the customer purchased an extra contract + +Here is the list of contracts to renew: +% for partner, accounts in partners.iteritems(): + * ${partner.name} + % for account in accounts: + - Name: ${account.name} + % if account.quantity_max != 0.0: + - Quantity: ${account.quantity}/${account.quantity_max} hours + % endif + - Dates: ${account.date_start} to ${account.date and account.date or '???'} + - Contacts: + % for address in account.partner_id.address: + . ${address.name}, ${address.phone}, ${address.email} + % endfor + + % endfor +% endfor + +You can use the report in the menu: Sales > Invoicing > Overdue Accounts + +Regards, + +-- +OpenERP +""" + +class analytic_account(osv.osv): + _inherit = 'account.analytic.account' + + def cron_account_analytic_account(self, cr, uid, context=None): + domain = [ + ('name', 'not ilike', 'maintenance'), + ('partner_id', '!=', False), + ('user_id', '!=', False), + ('user_id.user_email', '!=', False), + ('state', 'in', ('draft', 'open')), + '|', ('date', '<', time.strftime('%Y-%m-%d')), ('date', '=', False), + ] + + account_ids = self.search(cr, uid, domain, context=context, order='name asc') + accounts = self.browse(cr, uid, account_ids, context=context) + + users = dict() + for account in accounts: + users.setdefault(account.user_id, dict()).setdefault(account.partner_id, []).append(account) + + account.write({'state' : 'pending'}, context=context) + + 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) + + return True + +analytic_account() From 8fee569a7b4ea90ee4946975fdb6f3ad3d130c8f Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 22 Apr 2011 13:37:06 +0200 Subject: [PATCH 002/204] [REF] Clean up bzr revid: stephane@openerp.com-20110422113706-kyeoyfb79uvc5899 --- addons/base_action_rule/base_action_rule.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 2a4e2c0e4e1..869c8ea1f03 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -325,7 +325,7 @@ the rule to mark CC(mail to any other person defined in actions)."), @param context: A standard dictionary for contextual values """ if context is None: context = {} - ok = True + ok = True if action.filter_id: if action.model_id.model == action.filter_id.model_id: context.update(eval(action.filter_id.context)) @@ -445,19 +445,13 @@ the rule to mark CC(mail to any other person defined in actions)."), context = {} context.update({'action': True}) - if not scrit: - scrit = [] for action in self.browse(cr, uid, ids, context=context): - model_obj = self.pool.get(action.model_id.model) for obj in objects: - ok = self.do_check(cr, uid, action, obj, context=context) - if not ok: - continue + if self.do_check(cr, uid, action, obj, context=context): + model_obj = self.pool.get(action.model_id.model) + self.do_action(cr, uid, action, model_obj, obj, context=context) - if ok: - self.do_action(cr, uid, action, model_obj, obj, context) - break context.update({'action': False}) return True @@ -480,7 +474,7 @@ the rule to mark CC(mail to any other person defined in actions)."), return True _constraints = [ - (_check_mail, 'Error: The mail is not well formated', ['act_mail_body']), + (_check_mail, 'Error: The mail is not well formatted', ['act_mail_body']), ] base_action_rule() From 63573d48d887a2906a54d9a08828984030acf8d0 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 22 Apr 2011 13:41:11 +0200 Subject: [PATCH 003/204] [FIX] Use the last description where the name is not a state of a CRM case bzr revid: stephane@openerp.com-20110422114111-pb1boou0lf3q9rlh --- addons/crm/crm.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/crm/crm.py b/addons/crm/crm.py index f25e4c1a0bf..227b19db73e 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -466,6 +466,11 @@ class crm_case(object): src = case_email dest = case.user_id body = case.description or "" + for message in case.message_ids: + if message.name not in AVAILABLE_STATES.values(): + body = message.description + break + if case.message_ids: body = case.message_ids[0].description or "" if not destination: @@ -486,7 +491,7 @@ class crm_case(object): attach_to_send = map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send) # Send an email - subject = "Reminder: [%s] %s" % (str(case.id), case.name,) + subject = "[%s] %s" % (str(case.id), case.name,) tools.email_send( src, [dest], From 65f1b3bcfb68db284e5fb530ba6a8e32f23a4386 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 22 Apr 2011 13:41:43 +0200 Subject: [PATCH 004/204] [FIX] Apply the change and call the do_action callback bzr revid: stephane@openerp.com-20110422114143-vum7ebti5q3lutip --- addons/crm/crm_action_rule.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/crm/crm_action_rule.py b/addons/crm/crm_action_rule.py index 477f9132fab..62948a1d650 100644 --- a/addons/crm/crm_action_rule.py +++ b/addons/crm/crm_action_rule.py @@ -107,9 +107,7 @@ this if you want the rule to send an email to the partner."), @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param context: A standard dictionary for contextual values """ - res = super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context) write = {} - if hasattr(action, 'act_section_id') and action.act_section_id: obj.section_id = action.act_section_id write['section_id'] = action.act_section_id.id @@ -127,6 +125,7 @@ this if you want the rule to send an email to the partner."), model_obj._history(cr, uid, [obj], _(action.act_state)) model_obj.write(cr, uid, [obj.id], write, context) + super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context) emails = [] if hasattr(obj, 'email_from') and action.act_mail_to_partner: From 1704c9f8822f77066ca78136f485bec995484716 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 22 Apr 2011 13:43:07 +0200 Subject: [PATCH 005/204] [REF] Use the set_reply_to function if this one exists in the object bzr revid: stephane@openerp.com-20110422114307-dyymgrgz0j4e1ace --- addons/crm/wizard/crm_send_email.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/addons/crm/wizard/crm_send_email.py b/addons/crm/wizard/crm_send_email.py index 21902d9ece4..0282ddd346b 100644 --- a/addons/crm/wizard/crm_send_email.py +++ b/addons/crm/wizard/crm_send_email.py @@ -212,9 +212,13 @@ class crm_send_new_email(osv.osv_memory): res.update({'email_to': ''}) if 'email_from' in fields: res.update({'email_from': user_mail_from and tools.ustr(user_mail_from) or ''}) + if 'reply_to' in fields: - if hasattr(case, 'section_id'): - res.update({'reply_to': case.section_id and case.section_id.reply_to or False}) + if hasattr(case, 'set_reply_to'): + case.set_reply_to(res) + elif hasattr(case, 'section_id'): + res.update({'reply_to' : case.section_id and case.section_id.reply_to or False}) + if 'subject' in fields: res.update({'subject': tools.ustr(context.get('subject', case.name) or '')}) if context.get('mass_mail'): @@ -276,9 +280,10 @@ class crm_send_new_email(osv.osv_memory): if 'email_cc' in fields: email_cc = (case.email_cc and tools.ustr(case.email_cc) + ', ' or '') + (hist.email_cc or '') res.update({'email_cc': email_cc}) - if 'reply_to' in fields: - if hasattr(case, 'section_id'): - res.update({'reply_to': case.section_id.reply_to or ''}) + if hasattr(case, 'set_reply_to'): + case.set_reply_to(res) + elif hasattr(case, 'section_id'): + res.update({'reply_to': case.section_id.reply_to or ''}) if 'state' in fields: res['state'] = u'pending' return res From 6063f74810a9e2e510ec87f83709542c6a0c3f34 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 22 Apr 2011 13:43:35 +0200 Subject: [PATCH 006/204] [FIX] Catch the Exception and not the all bzr revid: stephane@openerp.com-20110422114335-jxm4jrbkw1hw24t3 --- .../mail_gateway/scripts/openerp_mailgate/openerp_mailgate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail_gateway/scripts/openerp_mailgate/openerp_mailgate.py b/addons/mail_gateway/scripts/openerp_mailgate/openerp_mailgate.py index 204cb2d5d03..e30741c882e 100644 --- a/addons/mail_gateway/scripts/openerp_mailgate/openerp_mailgate.py +++ b/addons/mail_gateway/scripts/openerp_mailgate/openerp_mailgate.py @@ -86,7 +86,7 @@ if __name__ == '__main__': custom_values = {} try: custom_values = dict(eval(options.custom_values)) - except: + except Exception: pass parser.parse(msg_txt, custom_values) From dcf034bd52a861454a5dd7f10b0af5409468ba13 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 22 Apr 2011 13:44:23 +0200 Subject: [PATCH 007/204] [FIX] Use the Responsible (user_id) of the case as the default value in the sheet line. [FIX] Remove the on_change event on the analytic account in the worklogs bzr revid: stephane@openerp.com-20110422114423-fhqluv4tp1uho6x7 --- addons/project_issue_sheet/project_issue_sheet_view.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/project_issue_sheet/project_issue_sheet_view.xml b/addons/project_issue_sheet/project_issue_sheet_view.xml index 058fd67a946..4de1caeddd3 100644 --- a/addons/project_issue_sheet/project_issue_sheet_view.xml +++ b/addons/project_issue_sheet/project_issue_sheet_view.xml @@ -18,11 +18,11 @@ - - + + - + From c56df0436089193581ccdf961f51442b96b38152 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 22 Apr 2011 13:46:05 +0200 Subject: [PATCH 008/204] [FIX] Set the user_id (Responsible) field when the user clicks up on the "Open" button. [FIX] There was a bug in the computation function for the working_hours, delay_open, ... fields. [FIX] The user_id (Responsible) is replaced by a many2one instead of a related field. [IMP] Escalation: The user_id (Responsible) is the project manager of the project escalation, if there is no project manager, let's empty. bzr revid: stephane@openerp.com-20110422114605-nlle7h9mpqq9yj00 --- addons/project_issue/project_issue.py | 43 ++++++++++++------- addons/project_issue/project_issue_view.xml | 21 +++++---- .../report/project_issue_report_view.xml | 8 ++-- 3 files changed, 42 insertions(+), 30 deletions(-) diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index a8a32847243..e6ebf64e453 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -56,7 +56,7 @@ class project_issue(crm.crm_case, osv.osv): """ res = super(project_issue, self).case_open(cr, uid, ids, *args) - self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'), 'assigned_to' : uid}) + self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'), 'user_id' : uid}) for (id, name) in self.name_get(cr, uid, ids): message = _("Issue '%s' has been opened.") % name self.log(cr, uid, id, message) @@ -90,32 +90,32 @@ class project_issue(crm.crm_case, osv.osv): res = {} for issue in self.browse(cr, uid, ids, context=context): + res[issue.id] = {} for field in fields: - res[issue.id] = {} duration = 0 ans = False hours = 0 + date_create = datetime.strptime(issue.create_date, "%Y-%m-%d %H:%M:%S") if field in ['working_hours_open','day_open']: if issue.date_open: - date_create = datetime.strptime(issue.create_date, "%Y-%m-%d %H:%M:%S") date_open = datetime.strptime(issue.date_open, "%Y-%m-%d %H:%M:%S") ans = date_open - date_create date_until = issue.date_open #Calculating no. of working hours to open the issue hours = cal_obj.interval_hours_get(cr, uid, issue.project_id.resource_calendar_id.id, - datetime.strptime(issue.create_date, '%Y-%m-%d %H:%M:%S'), - datetime.strptime(issue.date_open, '%Y-%m-%d %H:%M:%S')) + date_create, + date_open) elif field in ['working_hours_close','day_close']: if issue.date_closed: - date_create = datetime.strptime(issue.create_date, "%Y-%m-%d %H:%M:%S") date_close = datetime.strptime(issue.date_closed, "%Y-%m-%d %H:%M:%S") date_until = issue.date_closed ans = date_close - date_create #Calculating no. of working hours to close the issue hours = cal_obj.interval_hours_get(cr, uid, issue.project_id.resource_calendar_id.id, - datetime.strptime(issue.create_date, '%Y-%m-%d %H:%M:%S'), - datetime.strptime(issue.date_closed, '%Y-%m-%d %H:%M:%S')) + date_create, + date_close) + if ans: resource_id = False if issue.user_id: @@ -125,7 +125,11 @@ class project_issue(crm.crm_case, osv.osv): duration = float(ans.days) if issue.project_id and issue.project_id.resource_calendar_id: duration = float(ans.days) * 24 - new_dates = cal_obj.interval_min_get(cr, uid, issue.project_id.resource_calendar_id.id, datetime.strptime(issue.create_date, '%Y-%m-%d %H:%M:%S'), duration, resource=resource_id) + + new_dates = cal_obj.interval_min_get(cr, uid, + issue.project_id.resource_calendar_id.id, + date_create, + duration, resource=resource_id) no_days = [] date_until = datetime.strptime(date_until, '%Y-%m-%d %H:%M:%S') for in_time, out_time in new_dates: @@ -134,10 +138,12 @@ class project_issue(crm.crm_case, osv.osv): if out_time > date_until: break duration = len(no_days) + if field in ['working_hours_open','working_hours_close']: res[issue.id][field] = hours else: res[issue.id][field] = abs(float(duration)) + return res def _get_issue_task(self, cr, uid, ids, context=None): @@ -175,7 +181,7 @@ class project_issue(crm.crm_case, osv.osv): 'section_id': fields.many2one('crm.case.section', 'Sales Team', \ select=True, help='Sales team to which Case belongs to.\ Define Responsible user and Email account for mail gateway.'), - 'user_id': fields.related('project_id', 'user_id', type='many2one', relation='res.users', store=True, select=1, string='Responsible'), + 'user_id' : fields.many2one('res.users', select=1, string='Responsible'), 'partner_id': fields.many2one('res.partner', 'Partner'), 'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \ domain="[('partner_id','=',partner_id)]"), @@ -282,7 +288,7 @@ class project_issue(crm.crm_case, osv.osv): 'date': bug.date, 'project_id': bug.project_id.id, 'priority': bug.priority, - 'user_id': bug.assigned_to.id, + 'user_id': bug.user_id.id, 'planned_hours': 0.0, }) @@ -362,13 +368,10 @@ class project_issue(crm.crm_case, osv.osv): """ cases = self.browse(cr, uid, ids) for case in cases: - data = {} + data = {'state' : 'draft'} if case.project_id.project_escalation_id: data['project_id'] = case.project_id.project_escalation_id.id - if case.project_id.project_escalation_id.user_id: - data['user_id'] = case.project_id.project_escalation_id.user_id.id - if case.task_id: - self.pool.get('project.task').write(cr, uid, [case.task_id.id], {'project_id': data['project_id'], 'user_id': False}) + data['user_id'] = case.project_id.project_escalation_id.user_id and case.project_id.project_escalation_id.user_id.id or False else: raise osv.except_osv(_('Warning !'), _('You cannot escalate this issue.\nThe relevant Project has not configured the Escalation Project!')) self.write(cr, uid, [case.id], data) @@ -487,6 +490,14 @@ class project_issue(crm.crm_case, osv.osv): return super(project_issue, self).copy(cr, uid, id, default=default, context=context) + #def set_reply_to(self, cr, uid, oid, values, context=None): + # default_value = False + + # if oid: + # this = self.browse(cr, uid, oid, context=context)[0] + # if this.section_id: + # values['reply_to'] = this.section_id.email or default_value + project_issue() class project(osv.osv): diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index 2224527e9d2..34d429b4352 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -55,8 +55,7 @@ - - + @@ -75,7 +74,7 @@ - + +
From db36bc97b4d6e12478830d47c820b183e697687b Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 7 Nov 2011 15:13:23 +0100 Subject: [PATCH 102/204] [fix] categories were broken bzr revid: nicolas.vanhoren@openerp.com-20111107141323-zmariwqu0qns3bcm --- addons/point_of_sale/static/src/js/pos.js | 9 +++++++++ addons/point_of_sale/static/src/xml/pos.xml | 12 ++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/addons/point_of_sale/static/src/js/pos.js b/addons/point_of_sale/static/src/js/pos.js index 2964ad75991..5835f1e35e1 100644 --- a/addons/point_of_sale/static/src/js/pos.js +++ b/addons/point_of_sale/static/src/js/pos.js @@ -751,6 +751,10 @@ openerp.point_of_sale = function(db) { function CategoryView() { CategoryView.__super__.constructor.apply(this, arguments); } + + CategoryView.prototype.events = { + 'click .oe-pos-categories-list a': 'changeCategory' + }; CategoryView.prototype.template = qweb_template('pos-category-template'); CategoryView.prototype.render = function(ancestors, children) { @@ -776,6 +780,10 @@ openerp.point_of_sale = function(db) { })() })); }; + CategoryView.prototype.changeCategory = function(a) { + var id = $(a.target).data("category-id"); + this.trigger("changeCategory", id); + }; return CategoryView; })(); ProductView = (function() { @@ -1153,6 +1161,7 @@ openerp.point_of_sale = function(db) { } c = pos.categories[id]; $('#products-screen').html(this.categoryView.render(c.ancestors, c.children)); + this.categoryView.delegateEvents(); products = pos.store.get('product.product').filter( function(p) { var _ref; return _ref = p.pos_categ_id[0], __indexOf.call(c.subtree, _ref) >= 0; diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml index d4962a62084..b9148395cbe 100644 --- a/addons/point_of_sale/static/src/xml/pos.xml +++ b/addons/point_of_sale/static/src/xml/pos.xml @@ -143,15 +143,15 @@
@@ -346,4 +347,4 @@ - + \ No newline at end of file From 9abd2f721d6a3778e95d1682983871427d8751cc Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Thu, 10 Nov 2011 12:49:51 +0530 Subject: [PATCH 177/204] [IMP]auction: improve buyer id for both case tuple and list bzr revid: mma@tinyerp.com-20111110071951-o7wnkopqfmzyyo40 --- addons/auction/wizard/auction_pay_buy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/auction/wizard/auction_pay_buy.py b/addons/auction/wizard/auction_pay_buy.py index db7d3bf0e29..f73552aa69f 100644 --- a/addons/auction/wizard/auction_pay_buy.py +++ b/addons/auction/wizard/auction_pay_buy.py @@ -82,7 +82,7 @@ class auction_pay_buy(osv.osv_memory): lots = lot_obj.browse(cr, uid, context.get('active_ids', []), context=context) for lot in lots: if datas['buyer_id']: - if isinstance(datas['buyer_id'], tuple): + if isinstance(datas['buyer_id'], (tuple, list)): datas['buyer_id'] = datas['buyer_id'][0] lot_obj.write(cr, uid, [lot.id], {'ach_uid': datas['buyer_id']}) if not lot.auction_id: From a1dfda310b032d0d025417ac4df4722d69f41ca5 Mon Sep 17 00:00:00 2001 From: "Jiten (OpenERP)" Date: Thu, 10 Nov 2011 12:51:48 +0530 Subject: [PATCH 178/204] [IMP] Minor change. bzr revid: jra@tinyerp.com-20111110072148-4lcpu2m3vir86xul --- addons/web_mobile/static/src/js/chrome_mobile.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/addons/web_mobile/static/src/js/chrome_mobile.js b/addons/web_mobile/static/src/js/chrome_mobile.js index 99b9651fa7b..516de784adc 100644 --- a/addons/web_mobile/static/src/js/chrome_mobile.js +++ b/addons/web_mobile/static/src/js/chrome_mobile.js @@ -20,13 +20,10 @@ openerp.web_mobile.MobileWebClient = openerp.web.Widget.extend({ openerp.web.qweb.add_template("xml/web_mobile.xml"); var params = {}; this.$element.html(this.render()); - this.session = new openerp.web.Session("oe_errors"); this.crashmanager = new openerp.web.CrashManager(this); this.login = new openerp.web_mobile.Login(this, "oe_login"); -// this.session.on_session_invalid.add(this.login.do_ask_login); }, start: function() { - this.session.start(); this.login.start(); } }); From 390b83c7fcc2d11f8cd451866cbfba3cedecf73c Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 10 Nov 2011 10:32:21 +0100 Subject: [PATCH 179/204] [fix] problem in form open popup a form select create popup lp bug: https://launchpad.net/bugs/888395 fixed bzr revid: nicolas.vanhoren@openerp.com-20111110093221-u1ry76juajt6c1lz --- addons/web/static/src/js/core.js | 15 ++++++--------- addons/web/static/src/js/view_form.js | 6 ++++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 1929c573e42..0b49e1cc52d 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -887,8 +887,11 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W */ render_element: function() { var rendered = this.render(); - if (rendered || rendered === "") - this.$element = $(rendered); + if (rendered) { + var elem = $(rendered); + this.$element.replaceWith(elem); + this.$element = elem; + } return this; }, /** @@ -900,7 +903,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W render: function (additional) { if (this.template) return openerp.web.qweb.render(this.template, _.extend({widget: this}, additional || {})); - return false; + return null; }, /** * Method called after rendering. Mostly used to bind actions, perform asynchronous @@ -912,12 +915,6 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W * @returns {jQuery.Deferred} */ start: function() { - /* The default implementation is only useful for retro-compatibility, it is - not necessary to call it using _super() when using Widget for new components. */ - if (!this.$element) { - var tmp = document.getElementById(this.element_id); - this.$element = tmp ? $(tmp) : undefined; - } return $.Deferred().done().promise(); }, /** diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 15790d3c1c0..f532ea4a538 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2419,7 +2419,8 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope }, read_function: null}); this.initial_ids = this.options.initial_ids; this.created_elements = []; - openerp.web.form.dialog(this.render(), {close:function() { + this.render_element(); + openerp.web.form.dialog(this.$element, {close:function() { self.check_exit(); }}); this.start(); @@ -2607,7 +2608,8 @@ openerp.web.form.FormOpenPopup = openerp.web.OldWidget.extend(/** @lends openerp this.row_id = row_id; this.context = context || {}; this.options = _.defaults(options || {}, {"auto_write": true}); - jQuery(this.render()).dialog({title: '', + this.render_element(); + this.$element.dialog({title: '', modal: true, width: 960, height: 600}); From a11dfc5e3578c583847e119830723047fa38bc76 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 11:07:52 +0100 Subject: [PATCH 180/204] [IMP] open non-editable m2o links inline (replace current record) rather than in a popup bzr revid: xmo@openerp.com-20111110100752-6x11ros4z1fhp0gc --- addons/web/static/src/js/view_form.js | 34 ++++++++++++++++----------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index f532ea4a538..cd02267d0bc 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3015,7 +3015,7 @@ openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend( this.$element.find('div').text(option ? option[1] : this.values[0][1]); } }); -openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldCharReadonly.extend({ +openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldURIReadonly.extend({ set_value: function (value) { value = value || null; this.invalid = false; @@ -3025,21 +3025,27 @@ openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldCharReadonly.exte self.on_value_changed(); var real_set_value = function(rval) { self.value = rval; - var div = $(self.$element.find('div')); - div.html(''); - var a = $(div.find("a")); - a.text(rval ? rval[1] : ''); - a.click(function() { - var pop = new openerp.web.form.FormOpenPopup(self.view); - pop.show_element(self.field.relation, self.value[0],self.build_context(), {readonly:true}); - }); + self.$element.find('a') + .unbind('click') + .text(rval ? rval[1] : '') + .click(function () { + self.do_action({ + type: 'ir.actions.act_window', + res_model: self.field.relation, + res_id: self.value[0], + context: self.build_context(), + views: [[false, 'form']], + target: 'current' + }); + return false; + }); }; if (value && !(value instanceof Array)) { - var dataset = new openerp.web.DataSetStatic( - this, this.field.relation, self.build_context()); - dataset.name_get([value], function(data) { - real_set_value(data[0]); - }).fail(function() {self.tmp_value = undefined;}); + new openerp.web.DataSetStatic( + this, this.field.relation, self.build_context()) + .name_get([value], function(data) { + real_set_value(data[0]); + }); } else { setTimeout(function() {real_set_value(value);}, 0); } From 4ce75b1f7a60406523137680c1edbb5399a574f4 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 10 Nov 2011 11:21:53 +0100 Subject: [PATCH 181/204] [FIX] adpat web modules to changes in webclient [FIX] enable some web module only when there is a webclient (prepare embed) bzr revid: chs@openerp.com-20111110102153-pgktyws0gdgyq4f5 --- addons/pad/__openerp__.py | 3 ++ addons/pad/static/src/js/pad.js | 3 -- addons/share/__openerp__.py | 3 ++ addons/share/static/src/js/share.js | 9 ++-- addons/web_livechat/__openerp__.py | 3 ++ .../static/src/js/web_livechat.js | 47 +++++++++---------- addons/web_uservoice/__openerp__.py | 3 ++ .../static/src/js/web_uservoice.js | 20 ++++---- 8 files changed, 46 insertions(+), 45 deletions(-) diff --git a/addons/pad/__openerp__.py b/addons/pad/__openerp__.py index 9bbeb558375..1abf8f0ebfa 100644 --- a/addons/pad/__openerp__.py +++ b/addons/pad/__openerp__.py @@ -22,5 +22,8 @@ Lets the company customize which Pad installation should be used to link to new 'web': True, 'certificate' : '001183545978470526509', 'js': ['static/src/js/pad.js'], + 'qweb' : [ + "static/src/xml/*.xml", + ], 'images': ['static/src/img/pad_link_companies.jpeg'], } diff --git a/addons/pad/static/src/js/pad.js b/addons/pad/static/src/js/pad.js index d6f2c1de26b..acc91f2273e 100644 --- a/addons/pad/static/src/js/pad.js +++ b/addons/pad/static/src/js/pad.js @@ -1,8 +1,5 @@ openerp.pad = function(instance) { -var QWeb = instance.web.qweb; -QWeb.add_template('/pad/static/src/xml/pad.xml'); - instance.web.form.SidebarAttachments = instance.web.form.SidebarAttachments.extend({ on_attachments_loaded: function(attachments) { this._super(attachments); diff --git a/addons/share/__openerp__.py b/addons/share/__openerp__.py index 954f915c885..b9077109c3c 100644 --- a/addons/share/__openerp__.py +++ b/addons/share/__openerp__.py @@ -56,6 +56,9 @@ synchronization with other companies, etc. 'certificate' : '001301246528927038493', 'js': ['static/src/js/share.js'], 'css': ['static/src/css/share.css'], + 'qweb' : [ + "static/src/xml/*.xml", + ], 'images': ['images/share_wizard.jpeg','images/sharing_wizard_step1.jpeg', 'images/sharing_wizard_step2.jpeg'], } diff --git a/addons/share/static/src/js/share.js b/addons/share/static/src/js/share.js index 6d02a39cf1f..b2abc1832a4 100644 --- a/addons/share/static/src/js/share.js +++ b/addons/share/static/src/js/share.js @@ -1,7 +1,5 @@ openerp.share = function(instance) { -var QWeb = instance.web.qweb; -QWeb.add_template('/share/static/src/xml/share.xml'); function launch_wizard(self, view) { var action = view.widget_parent.action; @@ -30,10 +28,9 @@ function if_has_share(yes, no) { if (!_has_share) { _has_share = $.Deferred(function() { var self = this; - var session = instance.webclient.session; - session.on_session_invalid.add_last(function() { _has_share = null; }); - var func = new instance.web.Model(session, "share.wizard").get_func("has_share"); - func(session.uid).pipe(function(res) { + instance.connection.on_session_invalid.add_last(function() { _has_share = null; }); + var func = new instance.web.Model(null, "share.wizard").get_func("has_share"); + func(instance.connection.uid).pipe(function(res) { if(res) { self.resolve(); } else { diff --git a/addons/web_livechat/__openerp__.py b/addons/web_livechat/__openerp__.py index 0731b003dbc..750c4ca7ec5 100644 --- a/addons/web_livechat/__openerp__.py +++ b/addons/web_livechat/__openerp__.py @@ -39,6 +39,9 @@ Add "Support" button in header from where you can access OpenERP Support. 'css' : [ 'static/src/css/lc.css', ], + 'qweb' : [ + "static/src/xml/*.xml", + ], 'installable': True, 'active': False, 'certificate': '0013762192410413', diff --git a/addons/web_livechat/static/src/js/web_livechat.js b/addons/web_livechat/static/src/js/web_livechat.js index 6fed859449c..13c4bbe28d4 100644 --- a/addons/web_livechat/static/src/js/web_livechat.js +++ b/addons/web_livechat/static/src/js/web_livechat.js @@ -22,29 +22,6 @@ var __lc_buttons = []; openerp.web_livechat = function (openerp) { -var QWeb = openerp.web.qweb; -QWeb.add_template('/web_livechat/static/src/xml/web_livechat.xml'); - - -// tracking code from LiveChat -var license = '1035052', - params = '', - lang = 'en', - skill = '0'; -__lc_load = function (p) { if (typeof __lc_loaded != 'function') - if (p) { var d = document, l = d.createElement('script'), s = - d.getElementsByTagName('script')[0], a = unescape('%26'), - h = ('https:' == d.location.protocol ? 'https://' : 'http://'); l.type = 'text/javascript'; l.async = true; - l.src = h + 'gis' + p +'.livechatinc.com/gis.cgi?serverType=control'+a+'licenseID='+license+a+'jsonp=__lc_load'; - if (!(typeof p['server'] !== 'string' || typeof __lc_serv === 'string')) { - l.src = h + (__lc_serv = p['server']) + '/licence/'+license+'/script.cgi?lang='+lang+a+'groups='+skill; - l.src += (params == '') ? '' : a+'params='+encodeURIComponent(encodeURIComponent(params)); s.parentNode.insertBefore(l, s); - } else setTimeout(__lc_load, 1000); if(typeof __lc_serv != 'string'){ s.parentNode.insertBefore(l, s);} - } else __lc_load(Math.ceil(Math.random()*5)); } -__lc_load(); - - - openerp.web_livechat.Livechat = openerp.web.Widget.extend({ template: 'Header-LiveChat', @@ -94,7 +71,27 @@ openerp.web_livechat.Livechat = openerp.web.Widget.extend({ } }); -openerp.webclient.livechat = new openerp.web_livechat.Livechat(openerp.webclient); -openerp.webclient.livechat.prependTo('div.header_corner'); +if (openerp.webclient) { + // tracking code from LiveChat + var license = '1035052', + params = '', + lang = 'en', + skill = '0'; + __lc_load = function (p) { if (typeof __lc_loaded != 'function') + if (p) { var d = document, l = d.createElement('script'), s = + d.getElementsByTagName('script')[0], a = unescape('%26'), + h = ('https:' == d.location.protocol ? 'https://' : 'http://'); l.type = 'text/javascript'; l.async = true; + l.src = h + 'gis' + p +'.livechatinc.com/gis.cgi?serverType=control'+a+'licenseID='+license+a+'jsonp=__lc_load'; + if (!(typeof p['server'] !== 'string' || typeof __lc_serv === 'string')) { + l.src = h + (__lc_serv = p['server']) + '/licence/'+license+'/script.cgi?lang='+lang+a+'groups='+skill; + l.src += (params == '') ? '' : a+'params='+encodeURIComponent(encodeURIComponent(params)); s.parentNode.insertBefore(l, s); + } else setTimeout(__lc_load, 1000); if(typeof __lc_serv != 'string'){ s.parentNode.insertBefore(l, s);} + } else __lc_load(Math.ceil(Math.random()*5)); } + __lc_load(); + + // and add widget to webclient + openerp.webclient.livechat = new openerp.web_livechat.Livechat(openerp.webclient); + openerp.webclient.livechat.prependTo('div.header_corner'); +} }; diff --git a/addons/web_uservoice/__openerp__.py b/addons/web_uservoice/__openerp__.py index 65f953ed3d1..64b443be3e2 100644 --- a/addons/web_uservoice/__openerp__.py +++ b/addons/web_uservoice/__openerp__.py @@ -39,5 +39,8 @@ Invite OpenERP user feedback, powered by uservoice. 'js': ['static/src/js/web_uservoice.js'], 'css': ['static/src/css/uservoice.css'], + 'qweb' : [ + "static/src/xml/*.xml", + ], 'images': ['static/src/img/submit_an_idea.jpeg', 'static/src/img/web_uservoice_feedback.jpeg'], } diff --git a/addons/web_uservoice/static/src/js/web_uservoice.js b/addons/web_uservoice/static/src/js/web_uservoice.js index a574652686f..4110f149300 100644 --- a/addons/web_uservoice/static/src/js/web_uservoice.js +++ b/addons/web_uservoice/static/src/js/web_uservoice.js @@ -1,15 +1,6 @@ openerp.web_uservoice = function(instance) { -var QWeb = instance.web.qweb; -QWeb.add_template('/web_uservoice/static/src/xml/web_uservoice.xml'); - -$(function() { - var src = ("https:" == document.location.protocol ? "https://" : "http://") + "cdn.uservoice.com/javascripts/widgets/tab.js"; - $.getScript(src); -}); - - instance.web_uservoice.UserVoice = instance.web.Widget.extend({ template: 'Header-UserVoice', default_forum: '77459', @@ -73,8 +64,15 @@ instance.web_uservoice.UserVoice = instance.web.Widget.extend({ }); -instance.webclient.uservoice = new instance.web_uservoice.UserVoice(instance.webclient); -instance.webclient.uservoice.prependTo('div.header_corner'); +if (instance.webclient) { + $(function() { + var src = ("https:" == document.location.protocol ? "https://" : "http://") + "cdn.uservoice.com/javascripts/widgets/tab.js"; + $.getScript(src); + }); + + instance.webclient.uservoice = new instance.web_uservoice.UserVoice(instance.webclient); + instance.webclient.uservoice.prependTo('div.header_corner'); +} }; From 90972f5e27e82bc10d6c5459d6f90606f2674a84 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 11:36:50 +0100 Subject: [PATCH 182/204] [IMP] add confirmation message when deleting a record in form view bzr revid: xmo@openerp.com-20111110103650-pqss9bfejudyqkp2 --- addons/web/static/src/js/view_form.js | 14 ++++++++++---- addons/web/static/src/js/view_list.js | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index cd02267d0bc..2739c74437e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -387,10 +387,16 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# var def = $.Deferred(); $.when(this.has_been_loaded).then(function() { if (self.can_be_discarded() && self.datarecord.id) { - self.dataset.unlink([self.datarecord.id]).then(function() { - self.on_pager_action('next'); - def.resolve(); - }); + if (confirm(_t("Do you really want to delete this record?"))) { + self.dataset.unlink([self.datarecord.id]).then(function() { + self.on_pager_action('next'); + def.resolve(); + }); + } else { + setTimeout(function () { + def.reject(); + }, 0) + } } }); return def.promise(); diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index e891a6c7db7..d1b9fd8cc0d 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -476,7 +476,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# * @param {Array} ids the ids of the records to delete */ do_delete: function (ids) { - if (!(ids.length && confirm(_t("Are you sure to remove those records ?")))) { + if (!(ids.length && confirm(_t("Do you really want to remove these records?")))) { return; } var self = this; From 8015497a02e5afe435eed9b13e1ad2dcaa116c13 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 11:49:33 +0100 Subject: [PATCH 183/204] [IMP] fix some identation bzr revid: xmo@openerp.com-20111110104933-cd4nfujpgxwqf817 --- openerp/addons/base/rng/view.rng | 116 +++++++++++++++---------------- 1 file changed, 57 insertions(+), 59 deletions(-) diff --git a/openerp/addons/base/rng/view.rng b/openerp/addons/base/rng/view.rng index 7c13afd8bfc..a80dbb78bf9 100644 --- a/openerp/addons/base/rng/view.rng +++ b/openerp/addons/base/rng/view.rng @@ -1,42 +1,42 @@ - - - - - - - - - before - - after - - inside - - replace - - - - - - attributes - - - - - - - - - - - + + + + + + + + + before + + after + + inside + + replace + + + + + + attributes + + + + + + + + + + + @@ -44,29 +44,27 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + From c0c31c74bce5e48fb558b9c3aad5b67d802a5224 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 10 Nov 2011 12:02:06 +0100 Subject: [PATCH 184/204] [imp] made editable list in o2m auto-save bzr revid: nicolas.vanhoren@openerp.com-20111110110206-2ba4qnj71wa5l3p3 --- addons/web/static/src/js/view_form.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 2739c74437e..51e1577c6ff 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2041,7 +2041,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ once.resolve(); }); controller.on_pager_action.add_first(function() { - self.save_form_view(); + self.save_any_view(); }); controller.$element.find(".oe_form_button_save").hide(); } else if (view_type == "graph") { @@ -2050,7 +2050,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ def.resolve(); }); this.viewmanager.on_mode_switch.add_first(function(n_mode, b, c, d, e) { - $.when(self.save_form_view()).then(function() { + $.when(self.save_any_view()).then(function() { if(n_mode === "list") setTimeout(function() {self.reload_current_view();}, 0); }); @@ -2160,7 +2160,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ this.dataset.to_delete, function(x) { return commands['delete'](x.id);})); }, - save_form_view: function() { + save_any_view: function() { if (this.viewmanager && this.viewmanager.views && this.viewmanager.active_view && this.viewmanager.views[this.viewmanager.active_view] && this.viewmanager.views[this.viewmanager.active_view].controller) { @@ -2172,6 +2172,13 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ console.warn("Asynchronous get_value() is not supported in form view."); }*/ return res; + } else if (this.viewmanager.active_view === "list") { + var res = $.when(view.ensure_saved()); + // it seems line there are some cases when this happens + /*if (!res.isResolved() && !res.isRejected()) { + console.warn("Asynchronous get_value() is not supported in list view."); + }*/ + return res; } } return false; @@ -2196,7 +2203,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ } }, is_dirty: function() { - this.save_form_view(); + this.save_any_view(); return this._super(); }, update_dom: function() { From 044ff3d2feab21d5650ca0c218f2763b5eb38c34 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 10 Nov 2011 12:21:39 +0100 Subject: [PATCH 185/204] [IMP] purchase: cleanup/improve refactored code, including: - correct wrong indentation for move/picking confirmation - improved/corrected docstring - change returned values to lists, as returning single ID has no sense - simplify code when possible bzr revid: odo@openerp.com-20111110112139-9qflyeuysrp138mt --- addons/purchase/purchase.py | 50 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index fe77e164fca..ecb2684d232 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -425,17 +425,13 @@ class purchase_order(osv.osv): return True def _prepare_order_picking(self, cr, uid, order, *args): - pick_name = self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.in') - istate = 'none' - if order.invoice_method=='picking': - istate = '2binvoiced' return { - 'name': pick_name, - 'origin': order.name+((order.origin and (':'+order.origin)) or ''), + 'name': self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.in'), + 'origin': order.name + ((order.origin and (':' + order.origin)) or ''), 'date': order.date_order, 'type': 'in', 'address_id': order.dest_address_id.id or order.partner_address_id.id, - 'invoice_state': istate, + 'invoice_state': '2binvoiced' if order.invoice_method == 'picking' else 'none', 'purchase_id': order.id, 'company_id': order.company_id.id, 'move_lines' : [], @@ -443,7 +439,7 @@ class purchase_order(osv.osv): def _prepare_order_line_move(self, cr, uid, order, order_line, picking_id, *args): return { - 'name': order.name + ': ' +(order_line.name or ''), + 'name': order.name + ': ' + (order_line.name or ''), 'product_id': order_line.product_id.id, 'product_qty': order_line.product_qty, 'product_uos_qty': order_line.product_qty, @@ -463,8 +459,8 @@ class purchase_order(osv.osv): } def _create_pickings(self, cr, uid, order, order_lines, picking_id=False, *args): - """ - Creates pickings and appropriate stock moves for given order lines. + """Creates pickings and appropriate stock moves for given order lines, then + confirms the moves, makes them available, and confirms the picking. If ``picking_id`` is provided, the stock moves will be added to it, otherwise a standard outgoing picking will be created to wrap the stock moves, as returned @@ -475,33 +471,35 @@ class purchase_order(osv.osv): different subsets of ``order_lines`` and/or preset ``picking_id`` values. :param browse_record order: purchase order to which the order lines belong - :param list(browse_record) order_lines: sale order line records to procure + :param list(browse_record) order_lines: purchase order line records for which picking + and moves should be created. :param int picking_id: optional ID of a stock picking to which the created stock moves - will be added. A new picking will be created if ommitted. - :return: True + will be added. A new picking will be created if omitted. + :return: list of IDs of pickings used/created for the given order lines (usually just one) """ if not picking_id: - picking_id = self.pool.get('stock.picking').create(cr, uid, self._prepare_order_picking(cr, uid, order, args)) + picking_id = self.pool.get('stock.picking').create(cr, uid, self._prepare_order_picking(cr, uid, order, *args)) todo_moves = [] + stock_move = self.pool.get('stock.move') + wf_service = netsvc.LocalService("workflow") for order_line in order_lines: if not order_line.product_id: continue - if order_line.product_id.product_tmpl_id.type in ('product', 'consu'): - move = self.pool.get('stock.move').create(cr, uid, self._prepare_order_line_move(cr, uid, order, order_line, picking_id, args)) + if order_line.product_id.type in ('product', 'consu'): + move = stock_move.create(cr, uid, self._prepare_order_line_move(cr, uid, order, order_line, picking_id, *args)) if order_line.move_dest_id: - self.pool.get('stock.move').write(cr, uid, [order_line.move_dest_id.id], {'location_id': order.location_id.id}) + order_line.move_dest_id.write({'location_id': order.location_id.id}) todo_moves.append(move) - self.pool.get('stock.move').action_confirm(cr, uid, todo_moves) - self.pool.get('stock.move').force_assign(cr, uid, todo_moves) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) - - return picking_id - + stock_move.action_confirm(cr, uid, todo_moves) + stock_move.force_assign(cr, uid, todo_moves) + wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) + return [picking_id] + def action_picking_create(self,cr, uid, ids, *args): + picking_ids = [] for order in self.browse(cr, uid, ids): - picking_id = self._create_pickings(cr, uid, order, [order_line for order_line in order.order_line], None, args) - return picking_id #FIXME this is brittle to assume there is only 1 picking_id, but has been kept for API compatibility + picking_ids.extend(self._create_pickings(cr, uid, order, order.order_line, None, *args)) + return picking_ids def copy(self, cr, uid, id, default=None, context=None): if not default: From e361ee97d1fbd032ba32ee949e89cf51059b20f9 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 12:26:11 +0100 Subject: [PATCH 186/204] [REF] deduplicate old-style dashboard elements bzr revid: xmo@openerp.com-20111110112611-u4mxmgp6lrezytdy --- openerp/addons/base/rng/view.rng | 57 +++++++++++++------------------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/openerp/addons/base/rng/view.rng b/openerp/addons/base/rng/view.rng index a80dbb78bf9..d77c9cac6a9 100644 --- a/openerp/addons/base/rng/view.rng +++ b/openerp/addons/base/rng/view.rng @@ -44,6 +44,26 @@ + + + + + hpaned + vpaned + + + + + + + + + + + + + + @@ -52,12 +72,11 @@ - - + @@ -217,12 +236,11 @@ - - + @@ -276,34 +294,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -339,8 +329,7 @@ - - + From 1b70c3d08a7632aafcb42cc9c7a33371a437115d Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 10 Nov 2011 13:32:58 +0100 Subject: [PATCH 187/204] [fix] problem in readonly m2o lp bug: https://launchpad.net/bugs/888502 fixed bzr revid: nicolas.vanhoren@openerp.com-20111110123258-rae9jtwxk7ny38d3 --- addons/web/static/src/js/view_form.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 51e1577c6ff..b306dd3fdeb 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3062,6 +3062,15 @@ openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldURIReadonly.exten } else { setTimeout(function() {real_set_value(value);}, 0); } + }, + get_value: function() { + if (!this.value) { + return false; + } else if (this.value instanceof Array) { + return this.value[0]; + } else { + return this.value; + } } }); From 783cc897d7e9beae53b31592c28c6036f77fe044 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 13:41:02 +0100 Subject: [PATCH 188/204] [ADD] new-style dashboards to schema bzr revid: xmo@openerp.com-20111110124102-2zhxrk8a68bvo75h --- openerp/addons/base/rng/view.rng | 70 +++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/openerp/addons/base/rng/view.rng b/openerp/addons/base/rng/view.rng index d77c9cac6a9..408d032d75c 100644 --- a/openerp/addons/base/rng/view.rng +++ b/openerp/addons/base/rng/view.rng @@ -1,6 +1,7 @@ + xmlns:a="http://relaxng.org/ns/annotation/1.0" + datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> @@ -44,8 +45,75 @@ + + + + + + + + + + + + + + + + + + + + + New-style (6.1) dashboard definition + + + + + Single-column dashboard style + + + 1 + + + + + + Three different 2-column dashboard styles: + 50|50, 33|66 and 66|33. + + + + 1-1 + 1-2 + 2-1 + + + + + + + + Three-column dashboard style: 33|33|33 + + + 1-1-1 + + + + + + + + hpaned From 0edad4d844730a04a76025cee79a4d276870f863 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 10 Nov 2011 13:50:46 +0100 Subject: [PATCH 189/204] [imp] critical improvement to avoid hurting sensibility of well-educated users that know stuff about typography conventions in english writing bzr revid: nicolas.vanhoren@openerp.com-20111110125046-3iii8wysyzwh3qcs --- addons/web/static/src/js/views.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index a6aaf02d5e6..92ad85232c4 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -471,7 +471,7 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner $search_prefix = $title.find('span'); if (controller.searchable !== false) { if (!$search_prefix.length) { - $title.prepend('' + _t("Search:") + ''); + $title.prepend('' + _t("Search: ") + ''); } } else { $search_prefix.remove(); From f7d8a68af5d96c0539348b7a3be2ab3254bd79e5 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 14:02:41 +0100 Subject: [PATCH 190/204] [IMP] board: migrate home and administration dashboards to new dashboard style bzr revid: xmo@openerp.com-20111110130241-5on26qoypm5736d0 --- addons/board/board_data_admin.xml | 12 ++++++------ addons/board/board_data_home.xml | 22 ++++++---------------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/addons/board/board_data_admin.xml b/addons/board/board_data_admin.xml index 1f45a6f5a72..0a65d816d8f 100644 --- a/addons/board/board_data_admin.xml +++ b/addons/board/board_data_admin.xml @@ -136,15 +136,15 @@ form - - + + - - + + - - + + diff --git a/addons/board/board_data_home.xml b/addons/board/board_data_home.xml index 0c360589a92..accb112673b 100644 --- a/addons/board/board_data_home.xml +++ b/addons/board/board_data_home.xml @@ -44,25 +44,15 @@ form
- - + + - - + + - - - + +
From f119de785c73619d5792df08b116c05a90ac4a3a Mon Sep 17 00:00:00 2001 From: "Kunal Chavda (OpenERP)" Date: Thu, 10 Nov 2011 18:39:50 +0530 Subject: [PATCH 191/204] [FIX]Fixed code for export xls null values should not shown in spreadsheet. lp bug: https://launchpad.net/bugs/885117 fixed bzr revid: kch@tinyerp.com-20111110130950-ap52c2x6fgklkuz2 --- addons/web/controllers/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 6f72d836ea4..72868647a48 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -1417,6 +1417,7 @@ class ExcelExport(Export): for cell_index, cell_value in enumerate(row): if isinstance(cell_value, basestring): cell_value = re.sub("\r", " ", cell_value) + if cell_value is False: cell_value = None worksheet.write(row_index + 1, cell_index, cell_value, style) fp = StringIO() From f05f9130164222e4b99e7ef5c84ed37cf40c2609 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 14:29:40 +0100 Subject: [PATCH 192/204] [IMP] some naming in openerp.web.parse_value, throw actual errors bzr revid: xmo@openerp.com-20111110132940-0jt103hhlhh5jzej --- addons/web/static/src/js/formats.js | 60 ++++++++++++++--------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/addons/web/static/src/js/formats.js b/addons/web/static/src/js/formats.js index ca540844b7f..bf25f55fef6 100644 --- a/addons/web/static/src/js/formats.js +++ b/addons/web/static/src/js/formats.js @@ -93,7 +93,7 @@ openerp.web.parse_value = function (value, descriptor, value_if_empty) { } while(tmp !== value); tmp = Number(value); if (isNaN(tmp)) - throw value + " is not a correct integer"; + throw new Error(value + " is not a correct integer"); return tmp; case 'float': var tmp = Number(value); @@ -107,42 +107,42 @@ openerp.web.parse_value = function (value, descriptor, value_if_empty) { } while(tmp !== tmp2); tmp = Number(tmp); if (isNaN(tmp)) - throw value + " is not a correct float"; + throw new Error(value + " is not a correct float"); return tmp; case 'float_time': - var tmp = value.split(":"); - if (tmp.length != 2) - throw value + " is not a correct float_time"; - var tmp1 = openerp.web.parse_value(tmp[0], {type: "integer"}); - var tmp2 = openerp.web.parse_value(tmp[1], {type: "integer"}); - return tmp1 + (tmp2 / 60); + var float_time_pair = value.split(":"); + if (float_time_pair.length != 2) + throw new Error(value + " is not a correct float_time"); + var hours = openerp.web.parse_value(float_time_pair[0], {type: "integer"}); + var minutes = openerp.web.parse_value(float_time_pair[1], {type: "integer"}); + return hours + (minutes / 60); case 'progressbar': return openerp.web.parse_value(value, {type: "float"}); case 'datetime': - var tmp = Date.parseExact(value, _.sprintf("%s %s", Date.CultureInfo.formatPatterns.shortDate, - Date.CultureInfo.formatPatterns.longTime)); - if (tmp !== null) - return openerp.web.datetime_to_str(tmp); - tmp = Date.parse(value); - if (tmp !== null) - return openerp.web.datetime_to_str(tmp); - throw value + " is not a valid datetime"; + var datetime = Date.parseExact(value, _.sprintf("%s %s", Date.CultureInfo.formatPatterns.shortDate, + Date.CultureInfo.formatPatterns.longTime)); + if (datetime !== null) + return openerp.web.datetime_to_str(datetime); + datetime = Date.parse(value); + if (datetime !== null) + return openerp.web.datetime_to_str(datetime); + throw new Error(value + " is not a valid datetime"); case 'date': - var tmp = Date.parseExact(value, Date.CultureInfo.formatPatterns.shortDate); - if (tmp !== null) - return openerp.web.date_to_str(tmp); - tmp = Date.parse(value); - if (tmp !== null) - return openerp.web.date_to_str(tmp); - throw value + " is not a valid date"; + var date = Date.parseExact(value, Date.CultureInfo.formatPatterns.shortDate); + if (date !== null) + return openerp.web.date_to_str(date); + date = Date.parse(value); + if (date !== null) + return openerp.web.date_to_str(date); + throw new Error(value + " is not a valid date"); case 'time': - var tmp = Date.parseExact(value, Date.CultureInfo.formatPatterns.longTime); - if (tmp !== null) - return openerp.web.time_to_str(tmp); - tmp = Date.parse(value); - if (tmp !== null) - return openerp.web.time_to_str(tmp); - throw value + " is not a valid time"; + var time = Date.parseExact(value, Date.CultureInfo.formatPatterns.longTime); + if (time !== null) + return openerp.web.time_to_str(time); + time = Date.parse(value); + if (time !== null) + return openerp.web.time_to_str(time); + throw new Error(value + " is not a valid time"); } return value; }; From abf6f08df0ca88b741adde1f3a48309243b24ffa Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 14:31:00 +0100 Subject: [PATCH 193/204] [ADD] fallback float_time parsing on float parsing if the value does not match float_time's format bzr revid: xmo@openerp.com-20111110133100-sp4ttbfy90cz9kjq --- addons/web/static/src/js/formats.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/formats.js b/addons/web/static/src/js/formats.js index bf25f55fef6..ae40981e1a7 100644 --- a/addons/web/static/src/js/formats.js +++ b/addons/web/static/src/js/formats.js @@ -112,7 +112,7 @@ openerp.web.parse_value = function (value, descriptor, value_if_empty) { case 'float_time': var float_time_pair = value.split(":"); if (float_time_pair.length != 2) - throw new Error(value + " is not a correct float_time"); + return openerp.web.parse_value(value, {type: "float"}); var hours = openerp.web.parse_value(float_time_pair[0], {type: "integer"}); var minutes = openerp.web.parse_value(float_time_pair[1], {type: "integer"}); return hours + (minutes / 60); From d1d47a3ff28641eb3bdf049c9e61177a9127ad67 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Thu, 10 Nov 2011 14:41:23 +0100 Subject: [PATCH 194/204] [FIX] Hitting ^C on Windows is broken, this patch should address the situation. This patch is adapted for trunk from the one provided by Olivier Ligot from Group S for 6.0. bzr revid: vmt@openerp.com-20111110134123-9sxi1s86pp242wbe --- openerp-server | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/openerp-server b/openerp-server index f17627906f1..71a52d5f06b 100755 --- a/openerp-server +++ b/openerp-server @@ -179,9 +179,12 @@ def dumpstacks(sig, frame): def setup_signal_handlers(): """ Register the signal handler defined above. """ SIGNALS = map(lambda x: getattr(signal, "SIG%s" % x), "INT TERM".split()) - map(lambda sig: signal.signal(sig, signal_handler), SIGNALS) if os.name == 'posix': + map(lambda sig: signal.signal(sig, signal_handler), SIGNALS) signal.signal(signal.SIGQUIT, dumpstacks) + elif os.name == 'nt': + import win32api + win32api.SetConsoleCtrlHandler(lambda sig: signal_handler(sig, None), 1) def quit_on_signals(): """ Wait for one or two signals then shutdown the server. @@ -191,9 +194,12 @@ def quit_on_signals(): """ # Wait for a first signal to be handled. (time.sleep will be interrupted - # by the signal handler.) - while quit_signals_received == 0: - time.sleep(60) + # by the signal handler.) The try/except is for the win32 case. + try: + while quit_signals_received == 0: + time.sleep(60) + except KeyboardInterrupt, e: + pass if config['pidfile']: os.unlink(config['pidfile']) From a21a208e4c7a46ec7e7128ea6015cad251da5894 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 14:50:52 +0100 Subject: [PATCH 195/204] [FIX] graph tooltips remaining on screen after clicking them bzr revid: xmo@openerp.com-20111110135052-u6r2uw5o5pqdgzpm --- addons/web_graph/static/src/js/graph.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index 04e9d77f5d0..e183fc5cc43 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -373,9 +373,8 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ }, open_list_view : function (id){ var self = this; - if($(".dhx_tooltip").is(":visible")) { - $(".dhx_tooltip").remove('div'); - } + // unconditionally nuke tooltips before switching view + $(".dhx_tooltip").remove('div'); id = id[this.abscissa]; if (typeof id == 'object'){ id = id[0]; From dbb82b089b3e4d64b995850fdbf515030994a574 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 10 Nov 2011 14:51:06 +0100 Subject: [PATCH 196/204] [fix] exception when querying a tree view for an osv which does not contain any column (common in the wizards) lp bug: https://launchpad.net/bugs/877989 fixed bzr revid: nicolas.vanhoren@openerp.com-20111110135106-crieyt6cnscqocs5 --- openerp/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 0d867fd946a..a89074d322d 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1808,7 +1808,7 @@ class BaseModel(object): """ _rec_name = self._rec_name if _rec_name not in self._columns: - _rec_name = self._columns.keys()[0] + _rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id" view = etree.Element('tree', string=self._description) etree.SubElement(view, 'field', name=_rec_name) From 96edd0d489154088f09b992f03228d1d2c21980a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 10 Nov 2011 15:07:54 +0100 Subject: [PATCH 197/204] [imp] made m2m support embedded list view lp bug: https://launchpad.net/bugs/888471 fixed bzr revid: nicolas.vanhoren@openerp.com-20111110140754-1nvbhwjpey7sr215 --- addons/web/static/src/js/view_form.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index b306dd3fdeb..53d7eeb60fb 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2331,6 +2331,10 @@ openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({ 'deletable': self.is_readonly() ? false : true, 'selectable': self.multi_selection }); + var embedded = (this.field.views || {}).tree; + if (embedded) { + this.list_view.set_embedded_view(embedded); + } this.list_view.m2m_field = this; var loaded = $.Deferred(); this.list_view.on_loaded.add_last(function() { From 57b7239ad2e67cc67c2c5c6c15eb7c55a33f3b53 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 10 Nov 2011 15:13:43 +0100 Subject: [PATCH 198/204] [fix] advanced filters were broken bzr revid: nicolas.vanhoren@openerp.com-20111110141343-iavtdbq0i56ma0nl --- addons/web/static/src/js/search.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 18e035a40b8..0ceab43f1fd 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -963,10 +963,7 @@ openerp.web.search.ExtendedSearch = openerp.web.OldWidget.extend({ this.check_last_element(); }, start: function () { - this._super(); - if (!this.$element) { - return; // not a logical state but sometimes it happens - } + this.$element = $("#" + this.element_id); this.$element.closest("table.oe-searchview-render-line").css("display", "none"); var self = this; this.rpc("/web/searchview/fields_get", @@ -1028,7 +1025,7 @@ openerp.web.search.ExtendedSearchGroup = openerp.web.OldWidget.extend({ prop.start(); }, start: function () { - this._super(); + this.$element = $("#" + this.element_id); var _this = this; this.add_prop(); this.$element.find('.searchview_extended_add_proposition').click(function () { @@ -1080,7 +1077,7 @@ openerp.web.search.ExtendedSearchProposition = openerp.web.OldWidget.extend(/** this.value = null; }, start: function () { - this._super(); + this.$element = $("#" + this.element_id); this.select_field(this.fields.length > 0 ? this.fields[0] : null); var _this = this; this.$element.find(".searchview_extended_prop_field").change(function() { @@ -1188,7 +1185,7 @@ openerp.web.search.ExtendedSearchProposition.DateTime = openerp.web.OldWidget.ex return this.datewidget.get_value(); }, start: function() { - this._super(); + this.$element = $("#" + this.element_id); this.datewidget = new openerp.web.DateTimeWidget(this); this.datewidget.prependTo(this.$element); } @@ -1208,7 +1205,7 @@ openerp.web.search.ExtendedSearchProposition.Date = openerp.web.OldWidget.extend return this.datewidget.get_value(); }, start: function() { - this._super(); + this.$element = $("#" + this.element_id); this.datewidget = new openerp.web.DateWidget(this); this.datewidget.prependTo(this.$element); } From 9d81a30ca7dc17906bdcfc4a63ad576316ce023d Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Thu, 10 Nov 2011 15:35:40 +0100 Subject: [PATCH 199/204] [FIX] Added menu name to a menu item. lp bug: https://launchpad.net/bugs/888068 fixed bzr revid: vmt@openerp.com-20111110143540-xf035b5eg379rzdt --- addons/project/project_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 295009e85bf..4c4d4b668b1 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -604,7 +604,7 @@ - + From 78dec879cfa55787813bbd7bb222bddbf7d36aee Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 16:23:13 +0100 Subject: [PATCH 200/204] [IMP] throw actual errors in formatting functions, in order for browser devtools to be useful throwing strings prevents browser devtools/consoles from using traceback information (because there isn't any on strings) bzr revid: xmo@openerp.com-20111110152313-phgtr24gyu2ltjn7 --- addons/web/static/src/js/dates.js | 12 ++++++------ addons/web/static/src/js/formats.js | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/js/dates.js b/addons/web/static/src/js/dates.js index 036cf8cd90b..7861dd21b79 100644 --- a/addons/web/static/src/js/dates.js +++ b/addons/web/static/src/js/dates.js @@ -18,11 +18,11 @@ openerp.web.str_to_datetime = function(str) { var regex = /^(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d)(?:\.\d+)?$/; var res = regex.exec(str); if ( !res ) { - throw "'" + str + "' is not a valid datetime"; + throw new Error("'" + str + "' is not a valid datetime"); } var obj = Date.parse(res[1] + " GMT"); if (! obj) { - throw "'" + str + "' is not a valid datetime"; + throw new Error("'" + str + "' is not a valid datetime"); } return obj; }; @@ -41,11 +41,11 @@ openerp.web.str_to_date = function(str) { var regex = /^\d\d\d\d-\d\d-\d\d$/; var res = regex.exec(str); if ( !res ) { - throw "'" + str + "' is not a valid date"; + throw new Error("'" + str + "' is not a valid date"); } var obj = Date.parse(str); if (! obj) { - throw "'" + str + "' is not a valid date"; + throw new Error("'" + str + "' is not a valid date"); } return obj; }; @@ -64,11 +64,11 @@ openerp.web.str_to_time = function(str) { var regex = /^(\d\d:\d\d:\d\d)(?:\.\d+)?$/; var res = regex.exec(str); if ( !res ) { - throw "'" + str + "' is not a valid time"; + throw new Error("'" + str + "' is not a valid time"); } var obj = Date.parse(res[1]); if (! obj) { - throw "'" + str + "' is not a valid time"; + throw new Error("'" + str + "' is not a valid time"); } return obj; }; diff --git a/addons/web/static/src/js/formats.js b/addons/web/static/src/js/formats.js index ae40981e1a7..d5fcdd35b62 100644 --- a/addons/web/static/src/js/formats.js +++ b/addons/web/static/src/js/formats.js @@ -157,7 +157,7 @@ openerp.web.auto_str_to_date = function(value, type) { try { return openerp.web.str_to_time(value); } catch(e) {} - throw "'" + value + "' is not a valid date, datetime nor time" + throw new Error("'" + value + "' is not a valid date, datetime nor time"); }; openerp.web.auto_date_to_str = function(value, type) { @@ -169,7 +169,7 @@ openerp.web.auto_date_to_str = function(value, type) { case 'time': return openerp.web.time_to_str(value); default: - throw type + " is not convertible to date, datetime nor time" + throw new Error(type + " is not convertible to date, datetime nor time"); } }; From 48499f2e0a97f8c84cf3d45755309995a5ff5445 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 10 Nov 2011 16:28:50 +0100 Subject: [PATCH 201/204] [FIX] list view: display group titles straight from read_group if we fail to format them read_group plays fast and loose with formats, and apparently has no problem returning arbitrary strings for date columns, arbitrary strings which may very well be completely unparseable. lp bug: https://launchpad.net/bugs/885289 fixed bzr revid: xmo@openerp.com-20111110152850-o31j3r4u5gdugznw --- addons/web/static/src/js/view_list.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index d1b9fd8cc0d..207d12a64e1 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -1145,9 +1145,12 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L row_data[group.grouped_on] = group; var group_column = _(self.columns).detect(function (column) { return column.id === group.grouped_on; }); - $group_column.html(openerp.web.format_cell( - row_data, group_column, _t("Undefined") - )); + try { + $group_column.html(openerp.web.format_cell( + row_data, group_column, _t("Undefined"))); + } catch (e) { + $group_column.html(row_data[group_column.id].value); + } if (group.openable) { // Make openable if not terminal group & group_by_no_leaf $group_column From 42262e849721ef605c566cbe968aea0093e590de Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 10 Nov 2011 23:55:25 +0100 Subject: [PATCH 202/204] [FIX] sale: leftover typos in recent action_ship_create, *args need unpacking bzr revid: odo@openerp.com-20111110225525-qtseh6gsl6byn0nb --- addons/sale/sale.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index e54433c0b32..8963942dbff 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -767,13 +767,13 @@ class sale_order(osv.osv): if line.product_id: if line.product_id.product_tmpl_id.type in ('product', 'consu'): if not picking_id: - picking_id = self.pool.get('stock.picking').create(cr, uid, self._prepare_order_picking(cr, uid, order, args)) - move_id = self.pool.get('stock.move').create(cr, uid, self._prepare_order_line_move(cr, uid, order, line, picking_id, date_planned, args)) + picking_id = self.pool.get('stock.picking').create(cr, uid, self._prepare_order_picking(cr, uid, order, *args)) + move_id = self.pool.get('stock.move').create(cr, uid, self._prepare_order_line_move(cr, uid, order, line, picking_id, date_planned, *args)) else: # a service has no stock move move_id = False - proc_id = self.pool.get('procurement.order').create(cr, uid, self._prepare_order_line_procurement(cr, uid, order, line, move_id, date_planned, args)) + proc_id = self.pool.get('procurement.order').create(cr, uid, self._prepare_order_line_procurement(cr, uid, order, line, move_id, date_planned, *args)) proc_ids.append(proc_id) line.write({'procurement_id': proc_id}) @@ -812,7 +812,7 @@ class sale_order(osv.osv): def action_ship_create(self, cr, uid, ids, *args): for order in self.browse(cr, uid, ids, context={}): - self._create_pickings_and_procurements(cr, uid, order, order.order_line, None, args) + self._create_pickings_and_procurements(cr, uid, order, order.order_line, None, *args) return True def action_ship_end(self, cr, uid, ids, context=None): From d84a6c57579c96ef1fc9c9ab3b6c711152ee22ea Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Fri, 11 Nov 2011 01:31:27 +0100 Subject: [PATCH 203/204] [FIX] purchase: correct remaining error in last merge action_picking_create() must only return one picking ID, to be used to bind that picking's subflow in the PO's workflow. bzr revid: odo@openerp.com-20111111003127-gweu0vkcdgwi4tqd --- addons/purchase/purchase.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 7a074c9f679..83b20833c5f 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -500,7 +500,12 @@ class purchase_order(osv.osv): picking_ids = [] for order in self.browse(cr, uid, ids): picking_ids.extend(self._create_pickings(cr, uid, order, order.order_line, None, *args)) - return picking_ids + + # Must return one unique picking ID: the one to connect in the subflow of the purchase order. + # In case of multiple (split) pickings, we should return the ID of the critical one, i.e. the + # one that should trigger the advancement of the purchase workflow. + # By default we will consider the first one as most important, but this behavior can be overridden. + return picking_ids[0] if picking_ids else False def copy(self, cr, uid, id, default=None, context=None): if not default: From 2e2aa576d82b040051434076dc022e6b430fdcab Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Fri, 11 Nov 2011 04:53:59 +0000 Subject: [PATCH 204/204] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20111111045359-wofm3sh3jd0wnqnw --- addons/account_asset/i18n/sr@latin.po | 536 ++++++++ addons/account_budget/i18n/sr@latin.po | 113 +- addons/base_calendar/i18n/ar.po | 1665 ++++++++++++++++++++++++ addons/base_tools/i18n/sv.po | 30 + 4 files changed, 2292 insertions(+), 52 deletions(-) create mode 100644 addons/account_asset/i18n/sr@latin.po create mode 100644 addons/base_calendar/i18n/ar.po create mode 100644 addons/base_tools/i18n/sv.po diff --git a/addons/account_asset/i18n/sr@latin.po b/addons/account_asset/i18n/sr@latin.po new file mode 100644 index 00000000000..1b4d07213d3 --- /dev/null +++ b/addons/account_asset/i18n/sr@latin.po @@ -0,0 +1,536 @@ +# Serbian Latin translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2009-11-24 12:54+0000\n" +"PO-Revision-Date: 2011-11-10 16:33+0000\n" +"Last-Translator: Milan Milosevic \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: 2011-11-11 04:53+0000\n" +"X-Generator: Launchpad (build 14277)\n" + +#. module: account_asset +#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list_normal +#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_list_normal +msgid "Open Assets" +msgstr "Slobodna sredstva" + +#. module: account_asset +#: field:account.asset.property,method_end:0 +#: field:account.asset.property.history,method_end:0 +msgid "Ending date" +msgstr "Datum završetka" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Depreciation board" +msgstr "Odbor za amortizaciju" + +#. module: account_asset +#: view:account.asset.asset:0 +#: field:account.asset.asset,name:0 +#: field:account.asset.board,asset_id:0 +#: field:account.asset.property,asset_id:0 +#: field:account.invoice.line,asset_id:0 +#: field:account.move.line,asset_id:0 +#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_form +#: model:ir.model,name:account_asset.model_account_asset_asset +#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_form +msgid "Asset" +msgstr "Sredstvo" + +#. module: account_asset +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "Pogrešno ime modela u definiciji akcije." + +#. module: account_asset +#: selection:account.asset.property,method:0 +msgid "Linear" +msgstr "Linearno" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Change duration" +msgstr "Izmeni trajanje" + +#. module: account_asset +#: field:account.asset.asset,child_ids:0 +msgid "Child assets" +msgstr "Dečja sredstva" + +#. module: account_asset +#: field:account.asset.board,value_asset:0 +msgid "Asset Value" +msgstr "Vrednost sredstva" + +#. module: account_asset +#: wizard_field:account.asset.modify,init,name:0 +msgid "Reason" +msgstr "Razlog" + +#. module: account_asset +#: view:account.asset.asset:0 +#: field:account.asset.asset,entry_ids:0 +#: wizard_field:account.asset.compute,asset_compute,move_ids:0 +msgid "Entries" +msgstr "Stavke" + +#. module: account_asset +#: wizard_view:account.asset.compute,asset_compute:0 +msgid "Generated entries" +msgstr "Generisane stavke" + +#. module: account_asset +#: wizard_field:account.asset.modify,init,method_delay:0 +#: field:account.asset.property,method_delay:0 +#: field:account.asset.property.history,method_delay:0 +msgid "Number of interval" +msgstr "Broj intervalâ" + +#. module: account_asset +#: wizard_button:account.asset.compute,asset_compute,asset_open:0 +msgid "Open entries" +msgstr "Otvorene stavke" + +#. module: account_asset +#: view:account.asset.asset:0 +#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list +#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_list +#: model:ir.ui.menu,name:account_asset.menu_finance_Assets +#: model:ir.ui.menu,name:account_asset.menu_finance_config_Assets +msgid "Assets" +msgstr "Sredstva" + +#. module: account_asset +#: selection:account.asset.property,method:0 +msgid "Progressive" +msgstr "Progresivno" + +#. module: account_asset +#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list_draft +#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_list_draft +msgid "Draft Assets" +msgstr "Sredstva kao zabeleške" + +#. module: account_asset +#: wizard_view:account.asset.modify,init:0 +#: wizard_field:account.asset.modify,init,note:0 +#: view:account.asset.property.history:0 +msgid "Notes" +msgstr "Napomene" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Change history" +msgstr "Izmeni istoriju" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Depreciation entries" +msgstr "Stavke amortizacije" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Methods" +msgstr "Metode" + +#. module: account_asset +#: wizard_view:account.asset.modify,init:0 +msgid "Asset properties to modify" +msgstr "Osobine sredstava za izmenu" + +#. module: account_asset +#: field:account.asset.asset,partner_id:0 +msgid "Partner" +msgstr "Partner" + +#. module: account_asset +#: wizard_field:account.asset.modify,init,method_period:0 +#: field:account.asset.property,method_period:0 +#: field:account.asset.property.history,method_period:0 +msgid "Period per interval" +msgstr "Period po intervalu" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Depreciation duration" +msgstr "Trajanje amortizacije" + +#. module: account_asset +#: field:account.asset.property,account_analytic_id:0 +msgid "Analytic account" +msgstr "Analitički konto" + +#. module: account_asset +#: field:account.asset.property,state:0 +msgid "State" +msgstr "Stanje" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Depreciation methods" +msgstr "Metodi amortizacije" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Other information" +msgstr "Ostale Informacije" + +#. module: account_asset +#: field:account.asset.board,value_asset_cumul:0 +msgid "Cumul. value" +msgstr "Kumul. vrednost" + +#. module: account_asset +#: view:account.asset.property:0 +msgid "Assets methods" +msgstr "Metodi sredstava" + +#. module: account_asset +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "Nepravilan XML format za pregled ''Architecture''!" + +#. module: account_asset +#: model:ir.model,name:account_asset.model_account_asset_property +msgid "Asset property" +msgstr "Osobina sredstva" + +#. module: account_asset +#: wizard_view:account.asset.compute,asset_compute:0 +#: wizard_view:account.asset.compute,init:0 +#: wizard_button:account.asset.compute,init,asset_compute:0 +#: model:ir.actions.wizard,name:account_asset.wizard_asset_compute +#: model:ir.ui.menu,name:account_asset.menu_wizard_asset_compute +msgid "Compute assets" +msgstr "Izračunaj sredstva" + +#. module: account_asset +#: wizard_view:account.asset.modify,init:0 +#: wizard_button:account.asset.modify,init,asset_modify:0 +#: model:ir.actions.wizard,name:account_asset.wizard_asset_modify +msgid "Modify asset" +msgstr "Izmeni sredstvo" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Confirm asset" +msgstr "Potvrdi sredstvo" + +#. module: account_asset +#: view:account.asset.property.history:0 +#: model:ir.model,name:account_asset.model_account_asset_property_history +msgid "Asset history" +msgstr "Istorija sredstava" + +#. module: account_asset +#: field:account.asset.property,date:0 +msgid "Date created" +msgstr "Datum pravljenja" + +#. module: account_asset +#: model:ir.module.module,description:account_asset.module_meta_information +msgid "" +"Financial and accounting asset management.\n" +" Allows to define\n" +" * Asset category. \n" +" * Assets.\n" +" *Asset usage period and property.\n" +" " +msgstr "" +"Uređivanje finansijskih i obračunskih sredstava.\n" +" Omogućava definisanje\n" +" *Kategorije sredstva. \n" +" *Sredstva.\n" +" *Osobinu i trajanje upotrebe sredstva.\n" +" " + +#. module: account_asset +#: field:account.asset.board,value_gross:0 +#: field:account.asset.property,value_total:0 +msgid "Gross value" +msgstr "Bruto vrednost" + +#. module: account_asset +#: selection:account.asset.property,method_time:0 +msgid "Ending period" +msgstr "Datum završetka" + +#. module: account_asset +#: field:account.asset.board,name:0 +msgid "Asset name" +msgstr "Naziv sredstva" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Accounts information" +msgstr "Informacije o računu" + +#. module: account_asset +#: field:account.asset.asset,note:0 +#: field:account.asset.category,note:0 +#: field:account.asset.property.history,note:0 +msgid "Note" +msgstr "Napomena" + +#. module: account_asset +#: selection:account.asset.asset,state:0 +#: selection:account.asset.property,state:0 +msgid "Draft" +msgstr "Nacrt" + +#. module: account_asset +#: field:account.asset.property,type:0 +msgid "Depr. method type" +msgstr "Tip metode amort." + +#. module: account_asset +#: field:account.asset.property,account_asset_id:0 +msgid "Asset account" +msgstr "Račun sredstva" + +#. module: account_asset +#: field:account.asset.property.history,asset_property_id:0 +msgid "Method" +msgstr "Metod" + +#. module: account_asset +#: selection:account.asset.asset,state:0 +msgid "Normal" +msgstr "Normalno" + +#. module: account_asset +#: field:account.asset.property,method_progress_factor:0 +msgid "Progressif factor" +msgstr "Progresivni faktor" + +#. module: account_asset +#: field:account.asset.asset,localisation:0 +msgid "Localisation" +msgstr "Lokalizacija" + +#. module: account_asset +#: field:account.asset.property,method:0 +msgid "Computation method" +msgstr "Metod obračuna" + +#. module: account_asset +#: field:account.asset.property,method_time:0 +msgid "Time method" +msgstr "Metod vremena" + +#. module: account_asset +#: field:account.asset.asset,active:0 +msgid "Active" +msgstr "Aktivno" + +#. module: account_asset +#: field:account.asset.property.history,user_id:0 +msgid "User" +msgstr "Korisnik" + +#. module: account_asset +#: field:account.asset.asset,property_ids:0 +msgid "Asset method name" +msgstr "Naziv metoda sredstva" + +#. module: account_asset +#: field:account.asset.asset,date:0 +#: field:account.asset.property.history,date:0 +msgid "Date" +msgstr "Datum" + +#. module: account_asset +#: field:account.asset.board,value_net:0 +msgid "Net value" +msgstr "Neto vrednost" + +#. module: account_asset +#: wizard_view:account.asset.close,init:0 +#: model:ir.actions.wizard,name:account_asset.wizard_asset_close +msgid "Close asset" +msgstr "Zatvoreno sredstvo" + +#. module: account_asset +#: field:account.asset.property,history_ids:0 +msgid "History" +msgstr "Istorijat" + +#. module: account_asset +#: field:account.asset.property,account_actif_id:0 +msgid "Depreciation account" +msgstr "Račun za amortizaciju" + +#. module: account_asset +#: field:account.asset.asset,period_id:0 +#: wizard_field:account.asset.compute,init,period_id:0 +msgid "Period" +msgstr "Period" + +#. module: account_asset +#: model:ir.actions.act_window,name:account_asset.action_account_asset_category_form +#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_category_form +msgid "Asset Category" +msgstr "Kategorija sredstva" + +#. module: account_asset +#: wizard_button:account.asset.close,init,end:0 +#: wizard_button:account.asset.compute,init,end:0 +#: wizard_button:account.asset.modify,init,end:0 +msgid "Cancel" +msgstr "Otkaži" + +#. module: account_asset +#: selection:account.asset.asset,state:0 +#: wizard_button:account.asset.compute,asset_compute,end:0 +#: selection:account.asset.property,state:0 +msgid "Close" +msgstr "Zatvori" + +#. module: account_asset +#: selection:account.asset.property,state:0 +msgid "Open" +msgstr "Otvori" + +#. module: account_asset +#: constraint:ir.model:0 +msgid "" +"The Object name must start with x_ and not contain any special character !" +msgstr "" +"Ime stavke mora da počne sa x_ i ne sme da sadrži specijalne karaktere !" + +#. module: account_asset +#: model:ir.module.module,shortdesc:account_asset.module_meta_information +msgid "Asset management" +msgstr "Uređivanje sredstava" + +#. module: account_asset +#: view:account.asset.board:0 +#: field:account.asset.property,board_ids:0 +#: model:ir.model,name:account_asset.model_account_asset_board +msgid "Asset board" +msgstr "Odbor za sredstva" + +#. module: account_asset +#: field:account.asset.asset,state:0 +msgid "Global state" +msgstr "Globalno stanje" + +#. module: account_asset +#: selection:account.asset.property,method_time:0 +msgid "Delay" +msgstr "Kašnjenje" + +#. module: account_asset +#: wizard_view:account.asset.close,init:0 +msgid "General information" +msgstr "Opšti podaci" + +#. module: account_asset +#: field:account.asset.property,journal_analytic_id:0 +msgid "Analytic journal" +msgstr "Analitički dnevnik" + +#. module: account_asset +#: field:account.asset.property,name:0 +msgid "Method name" +msgstr "Naziv metode" + +#. module: account_asset +#: field:account.asset.property,journal_id:0 +msgid "Journal" +msgstr "Dnevnik" + +#. module: account_asset +#: field:account.asset.property.history,name:0 +msgid "History name" +msgstr "Naziv istorijata" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Close method" +msgstr "Zatvorena metoda" + +#. module: account_asset +#: field:account.asset.property,entry_asset_ids:0 +msgid "Asset Entries" +msgstr "Stavke sredstava" + +#. module: account_asset +#: field:account.asset.asset,category_id:0 +#: view:account.asset.category:0 +#: field:account.asset.category,name:0 +#: model:ir.model,name:account_asset.model_account_asset_category +msgid "Asset category" +msgstr "Kategorija sredstva" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "Depreciation" +msgstr "Amortizacija" + +#. module: account_asset +#: field:account.asset.asset,code:0 +#: field:account.asset.category,code:0 +msgid "Asset code" +msgstr "Kod sredstva" + +#. module: account_asset +#: field:account.asset.asset,value_total:0 +msgid "Total value" +msgstr "Ukupna vrednost" + +#. module: account_asset +#: selection:account.asset.asset,state:0 +msgid "View" +msgstr "Pregled" + +#. module: account_asset +#: view:account.asset.asset:0 +msgid "General info" +msgstr "Opšti podaci" + +#. module: account_asset +#: field:account.asset.asset,sequence:0 +msgid "Sequence" +msgstr "Sekvenca" + +#. module: account_asset +#: field:account.asset.property,value_residual:0 +msgid "Residual value" +msgstr "Rezidualna vrednost" + +#. module: account_asset +#: wizard_button:account.asset.close,init,asset_close:0 +msgid "End of asset" +msgstr "Kraj sredstva" + +#. module: account_asset +#: selection:account.asset.property,type:0 +msgid "Direct" +msgstr "Direktno" + +#. module: account_asset +#: selection:account.asset.property,type:0 +msgid "Indirect" +msgstr "Indirektno" + +#. module: account_asset +#: field:account.asset.asset,parent_id:0 +msgid "Parent asset" +msgstr "Glavno sredstvo" + +#. module: account_asset +#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_tree +#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_tree +msgid "Asset Hierarchy" +msgstr "Hijerarhija sredstava" diff --git a/addons/account_budget/i18n/sr@latin.po b/addons/account_budget/i18n/sr@latin.po index 875d9341d99..55a5cf35391 100644 --- a/addons/account_budget/i18n/sr@latin.po +++ b/addons/account_budget/i18n/sr@latin.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-12-23 16:00+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-11-10 16:52+0000\n" +"Last-Translator: Milan Milosevic \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: 2011-11-05 05:37+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-11 04:53+0000\n" +"X-Generator: Launchpad (build 14277)\n" #. module: account_budget #: field:crossovered.budget,creating_user_id:0 msgid "Responsible User" -msgstr "Odgovorni Korisnik" +msgstr "Odgovorni korisnik" #. module: account_budget #: selection:crossovered.budget,state:0 @@ -57,7 +57,7 @@ msgstr "Potvrdi korisnika" #. module: account_budget #: model:ir.actions.act_window,name:account_budget.action_account_budget_crossvered_summary_report msgid "Print Summary" -msgstr "Stampa Suamrnog" +msgstr "Ištampaj rezime" #. module: account_budget #: field:crossovered.budget.lines,paid_date:0 @@ -76,7 +76,7 @@ msgstr "Završetak perioda" #: view:crossovered.budget:0 #: selection:crossovered.budget,state:0 msgid "Draft" -msgstr "Priprema" +msgstr "Nacrt" #. module: account_budget #: report:account.budget:0 @@ -88,7 +88,7 @@ msgstr "u" #: model:ir.actions.act_window,name:account_budget.action_account_budget_analytic #: model:ir.actions.act_window,name:account_budget.action_account_budget_crossvered_report msgid "Print Budgets" -msgstr "Stampa Budzeta" +msgstr "Ištampaj Budžete" #. module: account_budget #: report:account.budget:0 @@ -98,7 +98,7 @@ msgstr "Valuta:" #. module: account_budget #: model:ir.model,name:account_budget.model_account_budget_crossvered_report msgid "Account Budget crossvered report" -msgstr "Izvestaj Unakrsnog budzeta Naloga" +msgstr "Izveštaj unakrsnog naloga budžeta" #. module: account_budget #: selection:crossovered.budget,state:0 @@ -118,7 +118,7 @@ msgstr "do" #. module: account_budget #: field:crossovered.budget,state:0 msgid "Status" -msgstr "Status" +msgstr "Stanje" #. module: account_budget #: model:ir.actions.act_window,help:account_budget.act_crossovered_budget_view @@ -132,11 +132,19 @@ msgid "" "revenue per analytic account and monitor its evolution based on the actuals " "realised during that period." msgstr "" +"Budžet je predviđanje očekivanih dohodaka i rashoda Vašeg preduzeća za " +"jedan period u budućnosti. Sa budžetom, preduzeće može da ima uvid u to " +"koliko novca uzima za jedan dati period, i da odredi najbolji mogući način " +"za njegovu podelu na razne kategorije. Uz praćenje gde novac ide, biće manje " +"izgleda za njegovo suvišno trošenje, kao i za postizanje Vaših finansijskih " +"ciljeva. Predvidite budžet detaljisanjem očekivanog dohotka po analitičkom " +"kontu i pratite mu razvoj baziran na aktuelnostima za vreme trajanja tog " +"perioda." #. module: account_budget #: view:account.budget.crossvered.summary.report:0 msgid "This wizard is used to print summary of budgets" -msgstr "Ovaj carobnjak je koriscen za prikaz sumarnog budzeta" +msgstr "Ovaj wizard se upotrebljava za štampanje rezimee budžeta" #. module: account_budget #: report:account.budget:0 @@ -153,7 +161,7 @@ msgstr "Opis" #. module: account_budget #: report:crossovered.budget.report:0 msgid "Currency" -msgstr "" +msgstr "Valuta" #. module: account_budget #: report:crossovered.budget.report:0 @@ -170,12 +178,12 @@ msgstr "Preduzeće" #. module: account_budget #: view:crossovered.budget:0 msgid "To Approve" -msgstr "Za Odobravanje" +msgstr "Za odobravanje" #. module: account_budget #: view:crossovered.budget:0 msgid "Reset to Draft" -msgstr "Vrati na Pripremu" +msgstr "Vrati na pripremu" #. module: account_budget #: view:account.budget.post:0 @@ -214,35 +222,35 @@ msgstr "Stvarni iznos" #: field:crossovered.budget,date_to:0 #: field:crossovered.budget.lines,date_to:0 msgid "End Date" -msgstr "Završni Datum" +msgstr "Datum završetka" #. module: account_budget #: model:ir.model,name:account_budget.model_account_budget_analytic #: model:ir.model,name:account_budget.model_account_budget_report msgid "Account Budget report for analytic account" -msgstr "Izvestaj Budzeta Naloga za Analiticki Konto" +msgstr "Izveštaj budžeta za nalog analitičkog konta" #. module: account_budget #: view:account.analytic.account:0 msgid "Theoritical Amount" -msgstr "Teoretski Iznos" +msgstr "Teoretski iznos" #. module: account_budget #: field:account.budget.post,name:0 #: field:crossovered.budget,name:0 msgid "Name" -msgstr "Ime" +msgstr "Naziv" #. module: account_budget #: model:ir.model,name:account_budget.model_crossovered_budget_lines msgid "Budget Line" -msgstr "Lnija Budzeta" +msgstr "Linija budžeta" #. module: account_budget #: view:account.analytic.account:0 #: view:account.budget.post:0 msgid "Lines" -msgstr "redova" +msgstr "Redovi" #. module: account_budget #: report:account.budget:0 @@ -252,13 +260,13 @@ msgstr "redova" #: model:ir.actions.report.xml,name:account_budget.account_budget #: model:ir.model,name:account_budget.model_crossovered_budget msgid "Budget" -msgstr "Budzet" +msgstr "Budžet" #. module: account_budget #: code:addons/account_budget/account_budget.py:119 #, python-format msgid "Error!" -msgstr "Greška" +msgstr "Greška!" #. module: account_budget #: field:account.budget.post,code:0 @@ -270,7 +278,7 @@ msgstr "Kod" #: view:account.budget.analytic:0 #: view:account.budget.crossvered.report:0 msgid "This wizard is used to print budget" -msgstr "Ovaj carobnjak je koristen za prikaz budzeta" +msgstr "Ovaj wizard se upotrebljava za štampanje budžeta" #. module: account_budget #: model:ir.actions.act_window,name:account_budget.act_crossovered_budget_view @@ -282,19 +290,19 @@ msgstr "Ovaj carobnjak je koristen za prikaz budzeta" #: model:ir.ui.menu,name:account_budget.next_id_31 #: model:ir.ui.menu,name:account_budget.next_id_pos msgid "Budgets" -msgstr "Budzeti" +msgstr "Budžeti" #. module: account_budget #: constraint:account.analytic.account:0 msgid "" "Error! The currency has to be the same as the currency of the selected " "company" -msgstr "" +msgstr "Greška! Valuta mora biti ista kao i valuta izabranog preduzeća" #. module: account_budget #: selection:crossovered.budget,state:0 msgid "Cancelled" -msgstr "Отказано" +msgstr "Otkazano" #. module: account_budget #: view:crossovered.budget:0 @@ -305,14 +313,14 @@ msgstr "Odobri" #: field:crossovered.budget,date_from:0 #: field:crossovered.budget.lines,date_from:0 msgid "Start Date" -msgstr "Početni datum" +msgstr "Datum početka" #. module: account_budget #: view:account.budget.post:0 #: field:crossovered.budget.lines,general_budget_id:0 #: model:ir.model,name:account_budget.model_account_budget_post msgid "Budgetary Position" -msgstr "Budzetska pozicija" +msgstr "Budžetska pozicija" #. module: account_budget #: field:account.budget.analytic,date_from:0 @@ -320,12 +328,12 @@ msgstr "Budzetska pozicija" #: field:account.budget.crossvered.summary.report,date_from:0 #: field:account.budget.report,date_from:0 msgid "Start of period" -msgstr "Početak razdoblja" +msgstr "Početak perioda" #. module: account_budget #: model:ir.model,name:account_budget.model_account_budget_crossvered_summary_report msgid "Account Budget crossvered summary report" -msgstr "Izvestaj unakrsnog budzeta naloga" +msgstr "Izvestaj rezimea budžeta za unakrsni konto" #. module: account_budget #: report:account.budget:0 @@ -339,7 +347,7 @@ msgstr "Teoretska zarada" #: view:account.budget.crossvered.summary.report:0 #: view:account.budget.report:0 msgid "Select Dates Period" -msgstr "Selektuj Datume razdoblja" +msgstr "Izaberi periode datuma" #. module: account_budget #: view:account.budget.analytic:0 @@ -377,38 +385,39 @@ msgid "" "Budgets per Budgets.\n" "\n" msgstr "" -"Ovaj modul omogucava knjigovodjama da obradjuju analize i unakrsne budzete.\n" +"Ovaj modul omogucava knjigovodjama da obradjuju analitičke i unakrsne " +"budžete.\n" "\n" -"Kada je jedno definisan Master Budzet i budzeti ( U knjigovodstvo/Budzeti),\n" -"Menadzer Projekta moze da postavi planirani iznos za svaki analiticki " +"Jednom kad se definišu Master Budžet i budžeti ( U knjigovodstvo/Budžeti),\n" +"Menadžer projekta može da postavi planirani iznos za svaki analitički " "konto.\n" "\n" -"Knjigovodja ima mogucnost da vidi ukupni planirani iznos za svaki\n" -"Budzet i Master Budzet da bi osigurao da ukupno planirani iznos nije manji " -"/veci od \n" -"planiranog Budzeta/Master Budzeta. Svaka lista\n" -"zapisa moze da se prebaci i u grafikon za laksi pregled iste.\n" +"Knjigovodja ima mogućnost da vidi ukupni planirani iznos za svaki\n" +"Budžet i Master Budžet da bi osigurao da ukupni planirani iznos nije manji " +"/veći od \n" +"planiranog Budžeta/Master Budžeta. Svaka lista\n" +"zapisa može da se prebaci i u grafikon.\n" "\n" -"Dostupna su TRI Izvestaja:\n" -" 1. Prvi je dostupan iz liste Budzeta. I on daje rasipanje za te budzete, " -"analitickog konta u odnosu na Master Budzet.\n" -" 2.Drugi je sumarni predhodnog izvestaja, on samo daje rasispanje za " -"selektovani Budzet analitickog konta.\n" -" 3.Poslednji je dostupan iz Analitickog Grafikona naloga ( konta). On " -"daje rasipanje za slektovani analiticki konto, MAster Budzeta po \n" -"Budzetu.\n" +"Dostupna su TRI izveštaja:\n" +" 1. Prvi je dostupan iz liste Budžeta. Za te budžete daje rasipanje " +"analitickog konta u odnosu na Master Budžet.\n" +" 2.Drugi je rezime predhodnog izveštaja, daje rasipanje samo za izabrani " +"Budžet analitičkog konta.\n" +" 3.Poslednji je dostupan iz analitičkog grafikona naloga ( konta). On " +"daje rasipanje za izabrani analitički konto, Master Budžeta po \n" +"Budžetu.\n" "\n" #. module: account_budget #: field:crossovered.budget.lines,analytic_account_id:0 #: model:ir.model,name:account_budget.model_account_analytic_account msgid "Analytic Account" -msgstr "Analitički nalog" +msgstr "Analitički konto" #. module: account_budget #: report:account.budget:0 msgid "Budget :" -msgstr "Budzet" +msgstr "Budžet" #. module: account_budget #: report:account.budget:0 @@ -434,7 +443,7 @@ msgstr "Nalozi" #: model:ir.actions.act_window,name:account_budget.act_crossovered_budget_lines_view #: model:ir.ui.menu,name:account_budget.menu_act_crossovered_budget_lines_view msgid "Budget Lines" -msgstr "Budzetski Redovi" +msgstr "Budžetske linije" #. module: account_budget #: view:account.budget.analytic:0 @@ -448,12 +457,12 @@ msgstr "Otkaži" #. module: account_budget #: model:ir.module.module,shortdesc:account_budget.module_meta_information msgid "Budget Management" -msgstr "Budzetski Menadzment" +msgstr "Uređivanje budžeta" #. module: account_budget #: constraint:account.analytic.account:0 msgid "Error! You can not create recursive analytic accounts." -msgstr "" +msgstr "Greška! Ne možete praviti rekurzivne analitičke naloge." #. module: account_budget #: report:account.budget:0 diff --git a/addons/base_calendar/i18n/ar.po b/addons/base_calendar/i18n/ar.po new file mode 100644 index 00000000000..bf7e3d0748a --- /dev/null +++ b/addons/base_calendar/i18n/ar.po @@ -0,0 +1,1665 @@ +# Arabic translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-10 06:06+0000\n" +"Last-Translator: FULL NAME \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: 2011-11-11 04:53+0000\n" +"X-Generator: Launchpad (build 14277)\n" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_related:0 +#: selection:res.alarm,trigger_related:0 +msgid "The event starts" +msgstr "بداية الحدث" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +msgid "Hourly" +msgstr "كل ساعة" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Required to Join" +msgstr "مطلوب للانضمام" + +#. module: base_calendar +#: help:calendar.event,exdate:0 +#: help:calendar.todo,exdate:0 +msgid "" +"This property defines the list of date/time exceptions for a recurring " +"calendar component." +msgstr "" + +#. module: base_calendar +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "" +"الشركة المختارة غير مدرجة ضمن قائمة الشركات المسموح بها لهذا المستخدم" + +#. module: base_calendar +#: field:calendar.event.edit.all,name:0 +msgid "Title" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +#: selection:calendar.event,rrule_type:0 +#: selection:calendar.todo,rrule_type:0 +msgid "Monthly" +msgstr "شهرياً" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Invited User" +msgstr "مستخدم مدعو" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Invitation" +msgstr "دعوة" + +#. module: base_calendar +#: help:calendar.event,recurrency:0 +#: help:calendar.todo,recurrency:0 +msgid "Recurrent Meeting" +msgstr "اجتماع دوري" + +#. module: base_calendar +#: model:ir.actions.act_window,name:base_calendar.action_res_alarm_view +#: model:ir.ui.menu,name:base_calendar.menu_crm_meeting_avail_alarm +msgid "Alarms" +msgstr "المنبهات" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Sunday" +msgstr "الأحد" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: field:calendar.attendee,role:0 +msgid "Role" +msgstr "الدور" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Invitation details" +msgstr "تفاصيل الدعوة" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "Fourth" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,show_as:0 +#: field:calendar.todo,show_as:0 +msgid "Show as" +msgstr "عرض كـ" + +#. module: base_calendar +#: field:base.calendar.set.exrule,day:0 +#: selection:base.calendar.set.exrule,select1:0 +#: field:calendar.event,day:0 +#: selection:calendar.event,select1:0 +#: field:calendar.todo,day:0 +#: selection:calendar.todo,select1:0 +msgid "Date of month" +msgstr "اليوم من الشهر" + +#. module: base_calendar +#: selection:calendar.event,class:0 +#: selection:calendar.todo,class:0 +msgid "Public" +msgstr "عام" + +#. module: base_calendar +#: view:calendar.event:0 +msgid " " +msgstr " " + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "March" +msgstr "مارس/آذار" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:414 +#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:90 +#, python-format +msgid "Warning !" +msgstr "تحذير !" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Friday" +msgstr "الجمعة" + +#. module: base_calendar +#: field:calendar.event,allday:0 +#: field:calendar.todo,allday:0 +msgid "All Day" +msgstr "كامل اليوم" + +#. module: base_calendar +#: field:base.calendar.set.exrule,select1:0 +#: field:calendar.event,select1:0 +#: field:calendar.todo,select1:0 +msgid "Option" +msgstr "خيار" + +#. module: base_calendar +#: selection:calendar.attendee,availability:0 +#: selection:calendar.event,show_as:0 +#: selection:calendar.todo,show_as:0 +#: selection:res.users,availability:0 +msgid "Free" +msgstr "حرّ" + +#. module: base_calendar +#: help:calendar.attendee,rsvp:0 +msgid "Indicats whether the favor of a reply is requested" +msgstr "يشير إلى استحسان الرد" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_ir_attachment +msgid "ir.attachment" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,delegated_to:0 +msgid "The users that the original request was delegated to" +msgstr "المستخدمون الذين فُوِّض إليهم الطلب الأصلي" + +#. module: base_calendar +#: field:calendar.attendee,ref:0 +msgid "Event Ref" +msgstr "مرجع الحدث" + +#. module: base_calendar +#: field:base.calendar.set.exrule,we:0 +#: field:calendar.event,we:0 +#: field:calendar.todo,we:0 +msgid "Wed" +msgstr "الأربعاء" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Show time as" +msgstr "اعرض الوقت كـ" + +#. module: base_calendar +#: field:base.calendar.set.exrule,tu:0 +#: field:calendar.event,tu:0 +#: field:calendar.todo,tu:0 +msgid "Tue" +msgstr "الثلاثاء" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +#: selection:calendar.event,rrule_type:0 +#: selection:calendar.todo,rrule_type:0 +msgid "Yearly" +msgstr "سنوياً" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_related:0 +#: selection:res.alarm,trigger_related:0 +msgid "The event ends" +msgstr "نهاية الحدث" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "Last" +msgstr "الأخير" + +#. module: base_calendar +#: help:calendar.attendee,state:0 +msgid "Status of the attendee's participation" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,cutype:0 +msgid "Room" +msgstr "غرفة" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_interval:0 +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +#: selection:res.alarm,trigger_interval:0 +msgid "Days" +msgstr "الأيام" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Invitation Detail" +msgstr "تفاصيل الدعوة" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:1355 +#: code:addons/base_calendar/wizard/base_calendar_invite_attendee.py:96 +#: code:addons/base_calendar/wizard/base_calendar_invite_attendee.py:143 +#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:128 +#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:136 +#, python-format +msgid "Error!" +msgstr "خطأ!" + +#. module: base_calendar +#: selection:calendar.attendee,role:0 +msgid "Chair Person" +msgstr "الرئيس" + +#. module: base_calendar +#: selection:calendar.alarm,action:0 +msgid "Procedure" +msgstr "الإجراءات" + +#. module: base_calendar +#: selection:calendar.event,state:0 +#: selection:calendar.todo,state:0 +msgid "Cancelled" +msgstr "ملغي" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_interval:0 +#: selection:res.alarm,trigger_interval:0 +msgid "Minutes" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,action:0 +msgid "Display" +msgstr "عرض" + +#. module: base_calendar +#: view:calendar.event.edit.all:0 +msgid "Edit all Occurrences" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Invitation type" +msgstr "نوع الدعوة" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +msgid "Secondly" +msgstr "ثانياً" + +#. module: base_calendar +#: field:calendar.alarm,event_date:0 +#: field:calendar.attendee,event_date:0 +#: view:calendar.event:0 +msgid "Event Date" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Group By..." +msgstr "تجميع حسب ..." + +#. module: base_calendar +#: help:base_calendar.invite.attendee,email:0 +msgid "Provide external email address who will receive this invitation." +msgstr "أضف عنوان بريد إلكتروني خارجي لتلقي هذه الدعوة." + +#. module: base_calendar +#: model:ir.module.module,description:base_calendar.module_meta_information +msgid "" +"Full featured calendar system that supports:\n" +" - Calendar of events\n" +" - Alerts (create requests)\n" +" - Recurring events\n" +" - Invitations to people" +msgstr "" +"نظام تقويم متميز يوفر ويدعم:\n" +" - جدولاً زمنياً للأحداث\n" +" - منبهات (إنشاء طلبات)\n" +" - الأحداث الدورية\n" +" - توجيه الدعوات" + +#. module: base_calendar +#: help:calendar.attendee,cutype:0 +msgid "Specify the type of Invitation" +msgstr "حدد نوع الدعوة" + +#. module: base_calendar +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +msgid "Years" +msgstr "سنوات" + +#. module: base_calendar +#: field:calendar.alarm,event_end_date:0 +#: field:calendar.attendee,event_end_date:0 +msgid "Event End Date" +msgstr "الحدث والتاريخ" + +#. module: base_calendar +#: selection:calendar.attendee,role:0 +msgid "Optional Participation" +msgstr "مشاركة اختيارية" + +#. module: base_calendar +#: field:calendar.event,date_deadline:0 +#: field:calendar.todo,date_deadline:0 +msgid "Deadline" +msgstr "الموعد النهائي" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:385 +#: code:addons/base_calendar/base_calendar.py:1088 +#: code:addons/base_calendar/base_calendar.py:1090 +#, python-format +msgid "Warning!" +msgstr "تحذير!" + +#. module: base_calendar +#: help:calendar.event,active:0 +#: help:calendar.todo,active:0 +msgid "" +"If the active field is set to true, it will allow you to hide the " +"event alarm information without removing it." +msgstr "" +"في حالة اختيار الحقل \"نشط\"، يمكنك إخفاء معلومات المنبه للحدث دون حذفه." + +#. module: base_calendar +#: model:ir.module.module,shortdesc:base_calendar.module_meta_information +msgid "Basic Calendar Functionality" +msgstr "تقويم بسيط" + +#. module: base_calendar +#: field:calendar.event,organizer:0 +#: field:calendar.event,organizer_id:0 +#: field:calendar.todo,organizer:0 +#: field:calendar.todo,organizer_id:0 +msgid "Organizer" +msgstr "المنظِّم" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +#: field:calendar.event,user_id:0 +#: field:calendar.todo,user_id:0 +msgid "Responsible" +msgstr "مسئول" + +#. module: base_calendar +#: view:calendar.event:0 +#: model:res.request.link,name:base_calendar.request_link_meeting +msgid "Event" +msgstr "الحدث" + +#. module: base_calendar +#: help:calendar.event,edit_all:0 +#: help:calendar.todo,edit_all:0 +msgid "Edit all Occurrences of recurrent Meeting." +msgstr "تعديل جميع مرات الاجتماع الدوري" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_occurs:0 +#: selection:res.alarm,trigger_occurs:0 +msgid "Before" +msgstr "قبل" + +#. module: base_calendar +#: view:calendar.event:0 +#: selection:calendar.event,state:0 +#: selection:calendar.todo,state:0 +msgid "Confirmed" +msgstr "مؤكد" + +#. module: base_calendar +#: model:ir.actions.act_window,name:base_calendar.action_calendar_event_edit_all +msgid "Edit all events" +msgstr "تعديل جميع الأحداث" + +#. module: base_calendar +#: field:calendar.alarm,attendee_ids:0 +#: field:calendar.event,attendee_ids:0 +#: field:calendar.todo,attendee_ids:0 +msgid "Attendees" +msgstr "الحضور" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Confirm" +msgstr "تأكيد" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_calendar_todo +msgid "Calendar Task" +msgstr "مهمة تقويم" + +#. module: base_calendar +#: field:base.calendar.set.exrule,su:0 +#: field:calendar.event,su:0 +#: field:calendar.todo,su:0 +msgid "Sun" +msgstr "الأحد" + +#. module: base_calendar +#: field:calendar.attendee,cutype:0 +msgid "Invite Type" +msgstr "نوع الدعوة" + +#. module: base_calendar +#: help:calendar.attendee,partner_id:0 +msgid "Partner related to contact" +msgstr "" + +#. module: base_calendar +#: view:res.alarm:0 +msgid "Reminder details" +msgstr "تفاصيل التذكير" + +#. module: base_calendar +#: field:calendar.attendee,parent_ids:0 +msgid "Delegrated From" +msgstr "مفوّض من" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,select1:0 +#: selection:calendar.event,select1:0 +#: selection:calendar.todo,select1:0 +msgid "Day of month" +msgstr "اليوم من الشهر" + +#. module: base_calendar +#: view:calendar.event:0 +#: field:calendar.event,location:0 +#: field:calendar.event.edit.all,location:0 +#: field:calendar.todo,location:0 +msgid "Location" +msgstr "المكان" + +#. module: base_calendar +#: field:base_calendar.invite.attendee,send_mail:0 +msgid "Send mail?" +msgstr "إرسال رسالة؟" + +#. module: base_calendar +#: field:base_calendar.invite.attendee,email:0 +#: selection:calendar.alarm,action:0 +#: field:calendar.attendee,email:0 +msgid "Email" +msgstr "البريد الإلكتروني" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Event Detail" +msgstr "تفاصيل الحدث" + +#. module: base_calendar +#: selection:calendar.alarm,state:0 +msgid "Run" +msgstr "تنفيذ" + +#. module: base_calendar +#: field:calendar.event,exdate:0 +#: field:calendar.todo,exdate:0 +msgid "Exception Date/Times" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,class:0 +#: selection:calendar.todo,class:0 +msgid "Confidential" +msgstr "سرّي" + +#. module: base_calendar +#: field:base.calendar.set.exrule,end_date:0 +#: field:calendar.event,end_date:0 +#: field:calendar.todo,end_date:0 +msgid "Repeat Until" +msgstr "كرر حتى" + +#. module: base_calendar +#: model:ir.actions.act_window,help:base_calendar.action_res_alarm_view +msgid "" +"Create specific calendar alarms that may be assigned to calendar events or " +"meetings." +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Visibility" +msgstr "الظهور" + +#. module: base_calendar +#: field:calendar.attendee,rsvp:0 +msgid "Required Reply?" +msgstr "الرد مطلوب؟" + +#. module: base_calendar +#: field:calendar.event,base_calendar_url:0 +#: field:calendar.todo,base_calendar_url:0 +msgid "Caldav URL" +msgstr "" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +msgid "Select range to Exclude" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,recurrent_uid:0 +#: field:calendar.todo,recurrent_uid:0 +msgid "Recurrent ID" +msgstr "معرّف التكرار" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "July" +msgstr "يوليو/تموز" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: selection:calendar.attendee,state:0 +msgid "Accepted" +msgstr "تم القبول" + +#. module: base_calendar +#: field:base.calendar.set.exrule,th:0 +#: field:calendar.event,th:0 +#: field:calendar.todo,th:0 +msgid "Thu" +msgstr "الخميس" + +#. module: base_calendar +#: field:calendar.attendee,child_ids:0 +msgid "Delegrated To" +msgstr "مفوّض إلى" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Required Reply" +msgstr "الرد مطلوب" + +#. module: base_calendar +#: selection:calendar.event,end_type:0 +#: selection:calendar.todo,end_type:0 +msgid "Forever" +msgstr "إلى الأبد" + +#. module: base_calendar +#: selection:calendar.attendee,role:0 +msgid "Participation required" +msgstr "المشاركة مطلوبة" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +msgid "_Cancel" +msgstr "ال_غاء" + +#. module: base_calendar +#: field:calendar.event,create_date:0 +#: field:calendar.todo,create_date:0 +msgid "Created" +msgstr "تمّ الإنشاء" + +#. module: base_calendar +#: selection:calendar.event,class:0 +#: selection:calendar.todo,class:0 +msgid "Private" +msgstr "خاص" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +#: selection:calendar.event,rrule_type:0 +#: selection:calendar.todo,rrule_type:0 +msgid "Daily" +msgstr "يومياً" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:385 +#, python-format +msgid "Can not Duplicate" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,class:0 +#: field:calendar.todo,class:0 +msgid "Mark as" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: field:calendar.attendee,partner_address_id:0 +msgid "Contact" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,rrule_type:0 +#: help:calendar.todo,rrule_type:0 +msgid "Let the event automatically repeat at that interval" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Delegate" +msgstr "" + +#. module: base_calendar +#: field:base_calendar.invite.attendee,partner_id:0 +#: view:calendar.attendee:0 +#: field:calendar.attendee,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +#: selection:base_calendar.invite.attendee,type:0 +msgid "Partner Contacts" +msgstr "" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +msgid "_Ok" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "First" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Privacy" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,vtimezone:0 +#: field:calendar.todo,vtimezone:0 +msgid "Timezone" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Subject" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "September" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "December" +msgstr "" + +#. module: base_calendar +#: help:base_calendar.invite.attendee,send_mail:0 +msgid "Check this if you want to send an Email to Invited Person" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Availability" +msgstr "" + +#. module: base_calendar +#: view:calendar.event.edit.all:0 +msgid "_Save" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,cutype:0 +msgid "Individual" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,count:0 +#: help:calendar.todo,count:0 +msgid "Repeat x times" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,user_id:0 +msgid "Owner" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Delegation Info" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: field:calendar.event.edit.all,date:0 +msgid "Start Date" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,cn:0 +msgid "Common name" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: selection:calendar.attendee,state:0 +msgid "Declined" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "My Role" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "My Events" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Decline" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +msgid "Weeks" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,cutype:0 +msgid "Group" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,edit_all:0 +#: field:calendar.todo,edit_all:0 +msgid "Edit All" +msgstr "" + +#. module: base_calendar +#: field:base_calendar.invite.attendee,contact_ids:0 +msgid "Contacts" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_res_alarm +msgid "Basic Alarm Information" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,fr:0 +#: field:calendar.event,fr:0 +#: field:calendar.todo,fr:0 +msgid "Fri" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_interval:0 +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +#: selection:res.alarm,trigger_interval:0 +msgid "Hours" +msgstr "" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:1090 +#, python-format +msgid "Count can not be Negative" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,member:0 +msgid "Member" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,location:0 +#: help:calendar.todo,location:0 +msgid "Location of Event" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,rrule:0 +#: field:calendar.todo,rrule:0 +msgid "Recurrent Rule" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,state:0 +msgid "Draft" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,attach:0 +msgid "Attachment" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Invitation From" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "End of recurrency" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: field:calendar.event.edit.all,alarm_id:0 +msgid "Reminder" +msgstr "" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +#: model:ir.model,name:base_calendar.model_base_calendar_set_exrule +msgid "Set Exrule" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: model:ir.actions.act_window,name:base_calendar.action_view_event +#: model:ir.ui.menu,name:base_calendar.menu_events +msgid "Events" +msgstr "" + +#. module: base_calendar +#: model:ir.actions.act_window,name:base_calendar.action_view_calendar_invite_attendee_wizard +#: model:ir.model,name:base_calendar.model_base_calendar_invite_attendee +msgid "Invite Attendees" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,email:0 +msgid "Email of Invited Person" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,repeat:0 +#: field:calendar.event,count:0 +#: field:calendar.todo,count:0 +#: field:res.alarm,repeat:0 +msgid "Repeat" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,dir:0 +msgid "" +"Reference to the URIthat points to the directory information corresponding " +"to the attendee." +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "August" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Monday" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "Third" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "June" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,alarm_id:0 +msgid "Basic Alarm" +msgstr "" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +#: view:calendar.event:0 +msgid "The" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: field:calendar.attendee,delegated_from:0 +msgid "Delegated From" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,user_id:0 +msgid "User" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: field:calendar.event,date:0 +msgid "Date" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "November" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,member:0 +msgid "Indicate the groups that the attendee belongs to" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +msgid "Data" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,mo:0 +#: field:calendar.event,mo:0 +#: field:calendar.todo,mo:0 +msgid "Mon" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,count:0 +msgid "Count" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +msgid "No Repeat" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "October" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Uncertain" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,language:0 +msgid "Language" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,trigger_occurs:0 +#: field:res.alarm,trigger_occurs:0 +msgid "Triggers" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "January" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,trigger_related:0 +#: field:res.alarm,trigger_related:0 +msgid "Related to" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,interval:0 +#: field:calendar.alarm,trigger_interval:0 +#: field:res.alarm,trigger_interval:0 +msgid "Interval" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Wednesday" +msgstr "" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:1088 +#, python-format +msgid "Interval can not be Negative" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,name:0 +#: view:calendar.event:0 +msgid "Summary" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,active:0 +#: field:calendar.event,active:0 +#: field:calendar.todo,active:0 +#: field:res.alarm,active:0 +msgid "Active" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Choose day in the month where repeat the meeting" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,action:0 +msgid "Action" +msgstr "" + +#. module: base_calendar +#: help:base_calendar.invite.attendee,type:0 +msgid "Select whom you want to Invite" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,duration:0 +#: help:res.alarm,duration:0 +msgid "" +"Duration' and 'Repeat' are both optional, but if one occurs, so MUST the " +"other" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_calendar_event_edit_all +msgid "Calendar Edit all event" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,role:0 +msgid "Participation role for the calendar user" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: field:calendar.attendee,delegated_to:0 +msgid "Delegated To" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,action:0 +msgid "Defines the action to be invoked when an alarm is triggered" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,end_type:0 +#: selection:calendar.todo,end_type:0 +msgid "End date" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Search Events" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Recurrency Option" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +#: selection:calendar.event,rrule_type:0 +#: selection:calendar.todo,rrule_type:0 +msgid "Weekly" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,active:0 +#: help:res.alarm,active:0 +msgid "" +"If the active field is set to true, it will allow you to hide the event " +"alarm information without removing it." +msgstr "" + +#. module: base_calendar +#: field:calendar.event,recurrent_id:0 +#: field:calendar.todo,recurrent_id:0 +msgid "Recurrent ID date" +msgstr "" + +#. module: base_calendar +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,state:0 +#: view:calendar.attendee:0 +#: field:calendar.attendee,state:0 +#: view:calendar.event:0 +#: field:calendar.event,state:0 +#: field:calendar.todo,state:0 +msgid "State" +msgstr "" + +#. module: base_calendar +#: view:res.alarm:0 +msgid "Reminder Details" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "To Review" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,freq:0 +#: field:calendar.event,freq:0 +#: field:calendar.todo,freq:0 +msgid "Frequency" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,state:0 +msgid "Done" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,interval:0 +#: help:calendar.todo,interval:0 +msgid "Repeat every (Days/Week/Month/Year)" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +#: field:base_calendar.invite.attendee,user_ids:0 +msgid "Users" +msgstr "" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +msgid "of" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +#: view:calendar.event:0 +#: view:calendar.event.edit.all:0 +msgid "Cancel" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_res_users +msgid "res.users" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Tuesday" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,description:0 +msgid "" +"Provides a more complete description of the " +"calendar component, than that provided by the " +"\"SUMMARY\" property" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Responsible User" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,availability:0 +#: selection:calendar.event,show_as:0 +#: selection:calendar.todo,show_as:0 +#: selection:res.users,availability:0 +msgid "Busy" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_calendar_event +msgid "Calendar Event" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,state:0 +#: selection:calendar.event,state:0 +#: selection:calendar.todo,state:0 +msgid "Tentative" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,interval:0 +#: field:calendar.todo,interval:0 +msgid "Repeat every" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,end_type:0 +#: selection:calendar.todo,end_type:0 +msgid "Fix amout of times" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,recurrency:0 +#: field:calendar.todo,recurrency:0 +msgid "Recurrent" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,rrule_type:0 +#: field:calendar.todo,rrule_type:0 +msgid "Recurrency" +msgstr "" + +#. module: base_calendar +#: model:ir.actions.act_window,name:base_calendar.action_view_attendee_form +#: model:ir.ui.menu,name:base_calendar.menu_attendee_invitations +msgid "Event Invitations" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Thursday" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,exrule:0 +#: field:calendar.todo,exrule:0 +msgid "Exception Rule" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,language:0 +msgid "" +"To specify the language for text values in aproperty or property parameter." +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Details" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,exrule:0 +#: help:calendar.todo,exrule:0 +msgid "" +"Defines a rule or repeating pattern of time to exclude from the recurring " +"rule." +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,month_list:0 +#: field:calendar.event,month_list:0 +#: field:calendar.todo,month_list:0 +msgid "Month" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +#: view:calendar.event:0 +msgid "Invite People" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,rrule:0 +#: help:calendar.todo,rrule:0 +msgid "" +"Defines a rule or repeating pattern for recurring events\n" +"e.g.: Every other month on the last Sunday of the month for 10 occurrences: " +" FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=-1SU" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,dir:0 +msgid "URI Reference" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,description:0 +#: view:calendar.event:0 +#: field:calendar.event,description:0 +#: field:calendar.event,name:0 +#: field:calendar.todo,description:0 +#: field:calendar.todo,name:0 +msgid "Description" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "May" +msgstr "" + +#. module: base_calendar +#: field:base_calendar.invite.attendee,type:0 +#: view:calendar.attendee:0 +msgid "Type" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Search Invitations" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_occurs:0 +#: selection:res.alarm,trigger_occurs:0 +msgid "After" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,state:0 +msgid "Stop" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_ir_values +msgid "ir.values" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_ir_model +msgid "Objects" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: selection:calendar.attendee,state:0 +msgid "Delegated" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,sa:0 +#: field:calendar.event,sa:0 +#: field:calendar.todo,sa:0 +msgid "Sat" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Choose day where repeat the meeting" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +msgid "Minutely" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,sent_by:0 +msgid "Specify the user that is acting on behalf of the calendar user" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: field:calendar.event.edit.all,date_deadline:0 +msgid "End Date" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "February" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +msgid "Months" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,cutype:0 +msgid "Resource" +msgstr "" + +#. module: base_calendar +#: field:res.alarm,name:0 +msgid "Name" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_calendar_alarm +msgid "Event alarm information" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,name:0 +msgid "" +"Contains the text to be used as the message subject for " +"email or contains the text to be used for display" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,alarm_id:0 +#: field:calendar.event,base_calendar_alarm_id:0 +#: field:calendar.todo,alarm_id:0 +#: field:calendar.todo,base_calendar_alarm_id:0 +msgid "Alarm" +msgstr "" + +#. module: base_calendar +#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:90 +#, python-format +msgid "Please Apply Recurrency before applying Exception Rule." +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,sent_by_uid:0 +msgid "Sent By User" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "April" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Recurrency period" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,week_list:0 +#: field:calendar.event,week_list:0 +#: field:calendar.todo,week_list:0 +msgid "Weekday" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,byday:0 +#: field:calendar.event,byday:0 +#: field:calendar.todo,byday:0 +msgid "By day" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,model_id:0 +msgid "Model" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,action:0 +msgid "Audio" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,id:0 +#: field:calendar.todo,id:0 +msgid "ID" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,role:0 +msgid "For information Purpose" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +msgid "Invite" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_calendar_attendee +msgid "Attendee information" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,res_id:0 +msgid "Resource ID" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,state:0 +msgid "Needs Action" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,sent_by:0 +msgid "Sent By" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,sequence:0 +#: field:calendar.todo,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,alarm_id:0 +#: help:calendar.todo,alarm_id:0 +msgid "Set an alarm at this time, before the event occurs" +msgstr "" + +#. module: base_calendar +#: selection:base_calendar.invite.attendee,type:0 +msgid "Internal User" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Accept" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Saturday" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Invitation To" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "Second" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,availability:0 +#: field:res.users,availability:0 +msgid "Free/Busy" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,end_type:0 +#: field:calendar.todo,end_type:0 +msgid "Way to end reccurency" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,duration:0 +#: field:calendar.alarm,trigger_duration:0 +#: field:calendar.event,duration:0 +#: field:calendar.todo,date:0 +#: field:calendar.todo,duration:0 +#: field:res.alarm,duration:0 +#: field:res.alarm,trigger_duration:0 +msgid "Duration" +msgstr "" + +#. module: base_calendar +#: selection:base_calendar.invite.attendee,type:0 +msgid "External Email" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,trigger_date:0 +msgid "Trigger Date" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,attach:0 +msgid "" +"* Points to a sound resource, which is rendered when the " +"alarm is triggered for audio,\n" +" * File which is intended to be sent as message " +"attachments for email,\n" +" * Points to a procedure resource, which is invoked when " +" the alarm is triggered for procedure." +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "Fifth" +msgstr "" diff --git a/addons/base_tools/i18n/sv.po b/addons/base_tools/i18n/sv.po new file mode 100644 index 00000000000..135f6134c11 --- /dev/null +++ b/addons/base_tools/i18n/sv.po @@ -0,0 +1,30 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-10 15:12+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: 2011-11-11 04:53+0000\n" +"X-Generator: Launchpad (build 14277)\n" + +#. module: base_tools +#: model:ir.module.module,shortdesc:base_tools.module_meta_information +msgid "Common base for tools modules" +msgstr "" + +#. module: base_tools +#: model:ir.module.module,description:base_tools.module_meta_information +msgid "" +"\n" +" " +msgstr ""