diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 522e9d97251..27881bf1280 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -286,6 +286,9 @@ class account_invoice(osv.osv): 'internal_number': False, 'user_id': lambda s, cr, u, c: u, } + _sql_constraints = [ + ('number_uniq', 'unique(number, company_id)', 'Invoice Number must be unique per Company!'), + ] def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False): journal_obj = self.pool.get('account.journal') diff --git a/addons/account/report/account_analytic_entries_report.py b/addons/account/report/account_analytic_entries_report.py index a53e19721dd..f6dfe7cbdb5 100644 --- a/addons/account/report/account_analytic_entries_report.py +++ b/addons/account/report/account_analytic_entries_report.py @@ -55,10 +55,10 @@ class analytic_entries_report(osv.osv): select min(a.id) as id, count(distinct a.id) as nbr, - a.create_date as date, - to_char(a.create_date, 'YYYY') as year, - to_char(a.create_date, 'MM') as month, - to_char(a.create_date, 'YYYY-MM-DD') as day, + a.date as date, + to_char(a.date, 'YYYY') as year, + to_char(a.date, 'MM') as month, + to_char(a.date, 'YYYY-MM-DD') as day, a.user_id as user_id, a.name as name, analytic.partner_id as partner_id, @@ -76,7 +76,7 @@ class analytic_entries_report(osv.osv): account_analytic_line a, account_analytic_account analytic where analytic.id = a.account_id group by - a.create_date, a.user_id,a.name,analytic.partner_id,a.company_id,a.currency_id, + a.date, a.user_id,a.name,analytic.partner_id,a.company_id,a.currency_id, a.account_id,a.general_account_id,a.journal_id, a.move_id,a.product_id,a.product_uom_id ) diff --git a/addons/account_accountant/i18n/bn.po b/addons/account_accountant/i18n/bn.po new file mode 100644 index 00000000000..9b62c14de4e --- /dev/null +++ b/addons/account_accountant/i18n/bn.po @@ -0,0 +1,36 @@ +# Bengali 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-21 12:33+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Bengali \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-22 05:00+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: account_accountant +#: model:ir.module.module,description:account_accountant.module_meta_information +msgid "" +"\n" +"This module gives the admin user the access to all the accounting features " +"like the journal\n" +"items and the chart of accounts.\n" +" " +msgstr "" +"\n" +"এই মডিউল admin ব্যবহারকারীকে সকল হিসাবরক্ষন এর সুবিধা দিবে\n" +" " + +#. module: account_accountant +#: model:ir.module.module,shortdesc:account_accountant.module_meta_information +msgid "Accountant" +msgstr "হিসাবরক্ষনকারী" diff --git a/addons/account_accountant/i18n/he.po b/addons/account_accountant/i18n/he.po new file mode 100644 index 00000000000..de5181d6440 --- /dev/null +++ b/addons/account_accountant/i18n/he.po @@ -0,0 +1,33 @@ +# Hebrew 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-18 17:39+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Hebrew \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-19 05:13+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: account_accountant +#: model:ir.module.module,description:account_accountant.module_meta_information +msgid "" +"\n" +"This module gives the admin user the access to all the accounting features " +"like the journal\n" +"items and the chart of accounts.\n" +" " +msgstr "" + +#. module: account_accountant +#: model:ir.module.module,shortdesc:account_accountant.module_meta_information +msgid "Accountant" +msgstr "" diff --git a/addons/account_accountant/i18n/oc.po b/addons/account_accountant/i18n/oc.po new file mode 100644 index 00000000000..d88b40aa957 --- /dev/null +++ b/addons/account_accountant/i18n/oc.po @@ -0,0 +1,38 @@ +# Occitan (post 1500) 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-20 09:14+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: account_accountant +#: model:ir.module.module,description:account_accountant.module_meta_information +msgid "" +"\n" +"This module gives the admin user the access to all the accounting features " +"like the journal\n" +"items and the chart of accounts.\n" +" " +msgstr "" +"\n" +"Aqueste modul balha a l'administrator los accèsses a totas las " +"foncionalitats comptablas talas coma las linhas\n" +"d'escritura e lo plan comptable.\n" +" " + +#. module: account_accountant +#: model:ir.module.module,shortdesc:account_accountant.module_meta_information +msgid "Accountant" +msgstr "Comptable" diff --git a/addons/account_cancel/i18n/bn.po b/addons/account_cancel/i18n/bn.po new file mode 100644 index 00000000000..3ba41e3969f --- /dev/null +++ b/addons/account_cancel/i18n/bn.po @@ -0,0 +1,36 @@ +# Bengali 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-21 12:37+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Bengali \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-22 05:00+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: account_cancel +#: model:ir.module.module,description:account_cancel.module_meta_information +msgid "" +"\n" +" Module adds 'Allow cancelling entries' field on form view of account " +"journal. If set to true it allows user to cancel entries & invoices.\n" +" " +msgstr "" +"\n" +" মডিউলটি 'Allow cancelling entries' ফিল্ড যুক্ত করবে যা দিয়ে জাবেদা " +"অন্তর্ভুক্তি বাতিল করা যাবে।\n" +" " + +#. module: account_cancel +#: model:ir.module.module,shortdesc:account_cancel.module_meta_information +msgid "Account Cancel" +msgstr "হিসাব বাতিল" diff --git a/addons/account_cancel/i18n/oc.po b/addons/account_cancel/i18n/oc.po new file mode 100644 index 00000000000..b1f4beeb05a --- /dev/null +++ b/addons/account_cancel/i18n/oc.po @@ -0,0 +1,37 @@ +# Occitan (post 1500) 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-20 09:15+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: account_cancel +#: model:ir.module.module,description:account_cancel.module_meta_information +msgid "" +"\n" +" Module adds 'Allow cancelling entries' field on form view of account " +"journal. If set to true it allows user to cancel entries & invoices.\n" +" " +msgstr "" +"\n" +" Lo modul apond lo camp 'Permetre l'anullacion de las entradas' dins la " +"vista formulari del jornal. S'es egal a Verai, aquò permet a l'utilizaire " +"d'anullar l'entrada e la factura.\n" +" " + +#. module: account_cancel +#: model:ir.module.module,shortdesc:account_cancel.module_meta_information +msgid "Account Cancel" +msgstr "Anullacion comptabla" diff --git a/addons/account_followup/account_followup.py b/addons/account_followup/account_followup.py index 8bc364ad306..a81535ad70c 100644 --- a/addons/account_followup/account_followup.py +++ b/addons/account_followup/account_followup.py @@ -28,7 +28,7 @@ class followup(osv.osv): 'name': fields.char('Name', size=64, required=True), 'description': fields.text('Description'), 'followup_line': fields.one2many('account_followup.followup.line', 'followup_id', 'Follow-Up'), - 'company_id': fields.many2one('res.company', 'Company'), + 'company_id': fields.many2one('res.company', 'Company', required=True), } _defaults = { 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'account_followup.followup', context=c), diff --git a/addons/account_followup/report/account_followup_print.py b/addons/account_followup/report/account_followup_print.py index 1d471d00ec2..f2cf476e674 100644 --- a/addons/account_followup/report/account_followup_print.py +++ b/addons/account_followup/report/account_followup_print.py @@ -35,45 +35,44 @@ class report_rappel(report_sxw.rml_parse): 'get_text': self._get_text }) - def _ids_to_objects(self, partner_ids): + def _ids_to_objects(self, ids): pool = pooler.get_pool(self.cr.dbname) - all_partners = [] - for partner in pool.get('res.partner').browse(self.cr, self.uid, partner_ids): - if partner not in all_partners: - all_partners.append(partner) - return all_partners + all_lines = [] + for line in pool.get('account_followup.stat.by.partner').browse(self.cr, self.uid, ids): + if line not in all_lines: + all_lines.append(line) + return all_lines - def _adr_get(self, partner, type): + def _adr_get(self, stat_line, type): res_partner = pooler.get_pool(self.cr.dbname).get('res.partner') res_partner_address = pooler.get_pool(self.cr.dbname).get('res.partner.address') - adr = res_partner.address_get(self.cr, self.uid, [partner.id], [type])[type] + adr = res_partner.address_get(self.cr, self.uid, [stat_line.partner_id.id], [type])[type] return adr and res_partner_address.read(self.cr, self.uid, [adr]) or [{}] - def _lines_get(self, partner): + def _lines_get(self, stat_by_partner_line): pool = pooler.get_pool(self.cr.dbname) moveline_obj = pool.get('account.move.line') company_obj = pool.get('res.company') obj_currency = pool.get('res.currency') - #FIXME: search on company accounting entries only movelines = moveline_obj.search(self.cr, self.uid, - [('partner_id', '=', partner.id), + [('partner_id', '=', stat_by_partner_line.partner_id.id), ('account_id.type', '=', 'receivable'), - ('reconcile_id', '=', False), ('state', '<>', 'draft')]) + ('reconcile_id', '=', False), ('state', '<>', 'draft'),('company_id','=', stat_by_partner_line.company_id.id)]) movelines = moveline_obj.browse(self.cr, self.uid, movelines) base_currency = movelines[0].company_id.currency_id final_res = [] line_cur = {base_currency.id: {'line': []}} for line in movelines: - if line.currency_id and (not line.currency_id.id in line_cur): - line_cur[line.currency_id.id] = {'line': []} - currency = line.currency_id or line.company_id.currency_id + if line.account_id.currency_id and (not line.account_id.currency_id.id in line_cur): + line_cur[line.account_id.currency_id.id] = {'line': []} + currency = line.account_id.currency_id or line.company_id.currency_id line_data = { 'name': line.move_id.name, 'ref': line.ref, 'date':line.date, 'date_maturity': line.date_maturity, - 'balance': line.currency_id and line.amount_currency or (line.debit - line.credit), + 'balance': currency.id <> line.company_id.currency_id.id and line.amount_currency or (line.debit - line.credit), 'blocked': line.blocked, 'currency_id': currency.symbol or currency.name, } @@ -85,7 +84,7 @@ class report_rappel(report_sxw.rml_parse): return final_res - def _get_text(self, partner, followup_id, context=None): + def _get_text(self, stat_line, followup_id, context=None): if context is None: context = {} fp_obj = pooler.get_pool(self.cr.dbname).get('account_followup.followup') @@ -96,10 +95,10 @@ class report_rappel(report_sxw.rml_parse): li_delay.sort(reverse=True) text = "" a = {} - partner_line = pooler.get_pool(self.cr.dbname).get('account.move.line').search(self.cr, self.uid, [('partner_id','=',partner.id),('reconcile_id','=',False)]) + partner_line_ids = pooler.get_pool(self.cr.dbname).get('account.move.line').search(self.cr, self.uid, [('partner_id','=',stat_line.partner_id.id),('reconcile_id','=',False),('company_id','=',stat_line.company_id.id)]) partner_delay = [] - context.update({'lang': partner.lang}) - for i in pooler.get_pool(self.cr.dbname).get('account.move.line').browse(self.cr, self.uid, partner_line, context): + context.update({'lang': stat_line.partner_id.lang}) + for i in pooler.get_pool(self.cr.dbname).get('account.move.line').browse(self.cr, self.uid, partner_line_ids, context): for delay in li_delay: if i.followup_line_id and str(i.followup_line_id.delay)==str(delay): text = i.followup_line_id.description @@ -108,16 +107,16 @@ class report_rappel(report_sxw.rml_parse): text = partner_delay and a[max(partner_delay)] or '' if text: text = text % { - 'partner_name': partner.name, + 'partner_name': stat_line.partner_id.name, 'date': time.strftime('%Y-%m-%d'), - 'company_name': fp_obj.browse(self.cr, self.uid, followup_id).company_id.name, + 'company_name': stat_line.company_id.name, 'user_signature': pooler.get_pool(self.cr.dbname).get('res.users').browse(self.cr, self.uid, self.uid, context).signature or '', } return text report_sxw.report_sxw('report.account_followup.followup.print', - 'res.partner', 'addons/account_followup/report/account_followup_print.rml', + 'account_followup.stat.by.partner', 'addons/account_followup/report/account_followup_print.rml', parser=report_rappel) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_followup/report/account_followup_print.rml b/addons/account_followup/report/account_followup_print.rml index 812f0aa0e50..92eda92e9ee 100644 --- a/addons/account_followup/report/account_followup_print.rml +++ b/addons/account_followup/report/account_followup_print.rml @@ -124,7 +124,7 @@ [[ repeatIn(ids_to_objects(data['form']['partner_ids']),'o') ]] - [[ setLang(o.lang) ]] + [[ setLang(o.partner_id.lang) ]] @@ -132,7 +132,7 @@ [[ repeatIn(adr_get(o,'invoice'),'a' )]] - [[ o.name or '' ]] + [[ o.partner_id.name or '' ]] [[ a['street'] or '']] [[ a['street2'] or removeParentNode('para') ]] [[ a['zip'] or '' ]] [[ a['city'] or '' ]] @@ -141,7 +141,7 @@ - VAT: [[ o.vat or removeParentNode('para') ]] + VAT: [[ o.partner_id.vat or removeParentNode('para') ]] @@ -150,7 +150,7 @@ Document : Customer account statement Date : [[ formatLang(data['form']['date'],date=True) ]] - Customer Ref : [[ o.ref or '' ]] + Customer Ref : [[ o.partner_id.ref or '' ]] diff --git a/addons/account_followup/report/account_followup_report.py b/addons/account_followup/report/account_followup_report.py index 25fc37691f4..c2a842cfd4c 100644 --- a/addons/account_followup/report/account_followup_report.py +++ b/addons/account_followup/report/account_followup_report.py @@ -68,7 +68,7 @@ class account_followup_stat(osv.osv): cr.execute(""" create or replace view account_followup_stat as ( SELECT - l.partner_id as id, + l.id as id, l.partner_id AS partner_id, min(l.date) AS date_move, max(l.date) AS date_move_last, diff --git a/addons/account_followup/test/account_followup.yml b/addons/account_followup/test/account_followup.yml index b43ca32d200..2650a40a7ad 100644 --- a/addons/account_followup/test/account_followup.yml +++ b/addons/account_followup/test/account_followup.yml @@ -105,4 +105,5 @@ self.do_print(cr, uid, [ref("account_followup_print_all_0")], {"lang": 'en_US', "active_model": "ir.ui.menu", "active_ids": [ref("account_followup.account_followup_print_menu")], "tz": False, "date": time.strftime('%Y-%m-%d'), "followup_id": ref("account_followup_followup_testfollowups0"), "active_id": ref("account_followup.account_followup_print_menu"), + "company_id": ref('base.main_company'), }) diff --git a/addons/account_followup/wizard/account_followup_print.py b/addons/account_followup/wizard/account_followup_print.py index 3fe404134ae..ea1083f26ff 100644 --- a/addons/account_followup/wizard/account_followup_print.py +++ b/addons/account_followup/wizard/account_followup_print.py @@ -31,7 +31,7 @@ class account_followup_print(osv.osv_memory): _description = 'Print Followup & Send Mail to Customers' _columns = { 'date': fields.date('Follow-up Sending Date', required=True, help="This field allow you to select a forecast date to plan your follow-ups"), - 'followup_id': fields.many2one('account_followup.followup', 'Follow-up', required=True) + 'followup_id': fields.many2one('account_followup.followup', 'Follow-up', required=True), } def _get_followup(self, cr, uid, context=None): @@ -51,7 +51,7 @@ class account_followup_print(osv.osv_memory): data = self.browse(cr, uid, ids, context=context)[0] model_data_ids = mod_obj.search(cr, uid, [('model','=','ir.ui.view'),('name','=','view_account_followup_print_all')], context=context) resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id'] - context.update({'followup_id': data.followup_id.id, 'date':data.date}) + context.update({'followup_id': data.followup_id.id, 'date': data.date, 'company_id': data.followup_id.company_id.id}) return { 'name': _('Select Partners'), 'view_type': 'form', @@ -87,10 +87,13 @@ class account_followup_stat_by_partner(osv.osv): def init(self, cr): tools.drop_view_if_exists(cr, 'account_followup_stat_by_partner') + # Here we don't have other choice but to create a virtual ID based on the concatenation + # of the partner_id and the company_id. An assumption that the number of companies will + # not reach 10 000 records is made, what should be enough for a time. cr.execute(""" create or replace view account_followup_stat_by_partner as ( SELECT - l.partner_id AS id, + l.partner_id * 10000 + l.company_id as id, l.partner_id AS partner_id, min(l.date) AS date_move, max(l.date) AS date_move_last, @@ -148,6 +151,8 @@ class account_followup_print_all(osv.osv_memory): context = {} if ids: data = self.browse(cr, uid, ids, context=context)[0] + company_id = 'company_id' in context and context['company_id'] or data.company_id.id + cr.execute( "SELECT l.partner_id, l.followup_line_id,l.date_maturity, l.date, l.id "\ "FROM account_move_line AS l "\ @@ -159,7 +164,8 @@ class account_followup_print_all(osv.osv_memory): "AND (l.partner_id is NOT NULL) "\ "AND (a.active) "\ "AND (l.debit > 0) "\ - "ORDER BY l.date") + "AND (l.company_id = %s) "\ + "ORDER BY l.date", (company_id,)) move_lines = cr.fetchall() old = None fups = {} @@ -189,16 +195,16 @@ class account_followup_print_all(osv.osv_memory): continue if followup_line_id not in fups: continue + stat_line_id = partner_id * 10000 + company_id if date_maturity: if date_maturity <= fups[followup_line_id][0].strftime('%Y-%m-%d'): if partner_id not in partner_list: - partner_list.append(partner_id) + partner_list.append(stat_line_id) to_update[str(id)]= {'level': fups[followup_line_id][1], 'partner_id': partner_id} elif date and date <= fups[followup_line_id][0].strftime('%Y-%m-%d'): if partner_id not in partner_list: - partner_list.append(partner_id) - to_update[str(id)]= {'level': fups[followup_line_id][1], 'partner_id': partner_id} - + partner_list.append(stat_line_id) + to_update[str(id)]= {'level': fups[followup_line_id][1], 'partner_id': stat_line_id} return {'partner_ids': partner_list, 'to_update': to_update} def do_mail(self ,cr, uid, ids, context=None): @@ -225,7 +231,7 @@ class account_followup_print_all(osv.osv_memory): partners.append(line.partner_id) dict_lines[line.partner_id.id] =line for partner in partners: - ids_lines = move_obj.search(cr,uid,[('partner_id','=',partner.id),('reconcile_id','=',False),('account_id.type','in',['receivable'])]) + ids_lines = move_obj.search(cr,uid,[('partner_id','=',partner.id),('reconcile_id','=',False),('account_id.type','in',['receivable']),('company_id','=',context.get('company_id', False))]) data_lines = move_obj.browse(cr, uid, ids_lines, context=context) followup_data = dict_lines[partner.id] dest = False diff --git a/addons/account_followup/wizard/account_followup_print_view.xml b/addons/account_followup/wizard/account_followup_print_view.xml index 9d74060b19a..ce178d9fa24 100644 --- a/addons/account_followup/wizard/account_followup_print_view.xml +++ b/addons/account_followup/wizard/account_followup_print_view.xml @@ -13,7 +13,6 @@ - @@ -81,7 +80,7 @@ - + @@ -137,7 +136,5 @@ form new - - diff --git a/addons/account_voucher/test/account_voucher.yml b/addons/account_voucher/test/account_voucher.yml index ce34733dda7..33ae609e3f3 100644 --- a/addons/account_voucher/test/account_voucher.yml +++ b/addons/account_voucher/test/account_voucher.yml @@ -48,7 +48,7 @@ - Now I create a Vendor Voucher - - !record {model: account.voucher, id: account_voucher_voucheraxelor0}: + !record {model: account.voucher, id: account_voucher_voucheraxelor0, view: False}: account_id: account.cash amount: 1000.0 company_id: base.main_company diff --git a/addons/audittrail/audittrail.py b/addons/audittrail/audittrail.py index 80af2e7ea3a..302d6e146bd 100644 --- a/addons/audittrail/audittrail.py +++ b/addons/audittrail/audittrail.py @@ -43,22 +43,17 @@ class audittrail_rule(osv.osv): "log_create": fields.boolean("Log Creates",help="Select this if you want to keep track of creation on any record of the object of this rule"), "log_action": fields.boolean("Log Action",help="Select this if you want to keep track of actions on the object of this rule"), "log_workflow": fields.boolean("Log Workflow",help="Select this if you want to keep track of workflow on any record of the object of this rule"), - "state": fields.selection((("draft", "Draft"), - ("subscribed", "Subscribed")), - "State", required=True), + "state": fields.selection((("draft", "Draft"), ("subscribed", "Subscribed")), "State", required=True), "action_id": fields.many2one('ir.actions.act_window', "Action ID"), - } - _defaults = { - 'state': lambda *a: 'draft', - 'log_create': lambda *a: 1, - 'log_unlink': lambda *a: 1, - 'log_write': lambda *a: 1, + 'state': 'draft', + 'log_create': 1, + 'log_unlink': 1, + 'log_write': 1, } - _sql_constraints = [ - ('model_uniq', 'unique (object_id)', """There is a rule defined on this object\n You cannot define another one the same object!""") + ('model_uniq', 'unique (object_id)', """There is already a rule defined on this object\n You cannot define another: please edit the existing one.""") ] __functions = {} @@ -178,54 +173,33 @@ class audittrail_log_line(osv.osv): class audittrail_objects_proxy(object_proxy): """ Uses Object proxy for auditing changes on object of subscribed Rules""" - def get_value_text(self, cr, uid, field_name, values, model, context=None): + def get_value_text(self, cr, uid, pool, resource_pool, method, field, value): + """ + Gets textual values for the fields. + If the field is a many2one, it returns the name. + If it's a one2many or a many2many, it returns a list of name. + In other cases, it just returns the value. + :param cr: the current row, from the database cursor, + :param uid: the current user’s ID for security checks, + :param pool: current db's pooler object. + :param resource_pool: pooler object of the model which values are being changed. + :param field: for which the text value is to be returned. + :param value: value of the field. + :param recursive: True or False, True will repeat the process recursively + :return: string value or a list of values(for O2M/M2M) """ - Gets textual values for the fields - e.g.: For field of type many2one it gives its name value instead of id - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param field_name: List of fields for text values - @param values: Values for field to be converted into textual values - @return: values: List of textual values for given fields - """ - if not context: - context = {} - if field_name in('__last_update','id'): - return values - pool = pooler.get_pool(cr.dbname) - field_pool = pool.get('ir.model.fields') - model_pool = pool.get('ir.model') - obj_pool = pool.get(model.model) - if obj_pool._inherits: - inherits_ids = model_pool.search(cr, uid, [('model', '=', obj_pool._inherits.keys()[0])]) - field_ids = field_pool.search(cr, uid, [('name', '=', field_name), ('model_id', 'in', (model.id, inherits_ids[0]))]) + field_obj = (resource_pool._all_columns.get(field)).column + if field_obj._type in ('one2many','many2many'): + data = pool.get(field_obj._obj).name_get(cr, uid, value) + #return the modifications on x2many fields as a list of names + res = map(lambda x:x[1], data) + elif field_obj._type == 'many2one': + #return the modifications on a many2one field as its value returned by name_get() + res = value and value[1] or value else: - field_ids = field_pool.search(cr, uid, [('name', '=', field_name), ('model_id', '=', model.id)]) - field_id = field_ids and field_ids[0] or False - assert field_id, _("'%s' field does not exist in '%s' model" %(field_name, model.model)) - - field = field_pool.read(cr, uid, field_id) - relation_model = field['relation'] - relation_model_pool = relation_model and pool.get(relation_model) or False - - if field['ttype'] == 'many2one': - res = False - relation_id = False - if values and type(values) == tuple: - relation_id = values[0] - if relation_id and relation_model_pool: - relation_model_object = relation_model_pool.read(cr, uid, relation_id, [relation_model_pool._rec_name]) - res = relation_model_object[relation_model_pool._rec_name] - return res - - elif field['ttype'] in ('many2many','one2many'): - res = [] - for relation_model_object in relation_model_pool.read(cr, uid, values, [relation_model_pool._rec_name]): - res.append(relation_model_object[relation_model_pool._rec_name]) - return res - - return values + res = value + return res def create_log_line(self, cr, uid, log_id, model, lines=[]): """ @@ -233,7 +207,7 @@ class audittrail_objects_proxy(object_proxy): @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, - @param model: Object who's values are being changed + @param model: Object which values are being changed @param lines: List of values for line is to be created """ pool = pooler.get_pool(cr.dbname) @@ -241,216 +215,273 @@ class audittrail_objects_proxy(object_proxy): model_pool = pool.get('ir.model') field_pool = pool.get('ir.model.fields') log_line_pool = pool.get('audittrail.log.line') - #start Loop for line in lines: - if line['name'] in('__last_update','id'): - continue + field_obj = obj_pool._all_columns.get(line['name']) + assert field_obj, _("'%s' field does not exist in '%s' model" %(line['name'], model.model)) + field_obj = field_obj.column + old_value = line.get('old_value', '') + new_value = line.get('new_value', '') + search_models = [model.id] if obj_pool._inherits: - inherits_ids = model_pool.search(cr, uid, [('model', '=', obj_pool._inherits.keys()[0])]) - field_ids = field_pool.search(cr, uid, [('name', '=', line['name']), ('model_id', 'in', (model.id, inherits_ids[0]))]) - else: - field_ids = field_pool.search(cr, uid, [('name', '=', line['name']), ('model_id', '=', model.id)]) - field_id = field_ids and field_ids[0] or False - assert field_id, _("'%s' field does not exist in '%s' model" %(line['name'], model.model)) - - field = field_pool.read(cr, uid, field_id) - old_value = 'old_value' in line and line['old_value'] or '' - new_value = 'new_value' in line and line['new_value'] or '' - old_value_text = 'old_value_text' in line and line['old_value_text'] or '' - new_value_text = 'new_value_text' in line and line['new_value_text'] or '' - - if old_value_text == new_value_text: - continue - if field['ttype'] == 'many2one': - if type(old_value) == tuple: - old_value = old_value[0] - if type(new_value) == tuple: - new_value = new_value[0] + search_models += model_pool.search(cr, uid, [('model', 'in', obj_pool._inherits.keys())]) + field_id = field_pool.search(cr, uid, [('name', '=', line['name']), ('model_id', 'in', search_models)]) + if field_obj._type == 'many2one': + old_value = old_value and old_value[0] or old_value + new_value = new_value and new_value[0] or new_value vals = { "log_id": log_id, - "field_id": field_id, + "field_id": field_id and field_id[0] or False, "old_value": old_value, "new_value": new_value, - "old_value_text": old_value_text, - "new_value_text": new_value_text, - "field_description": field['field_description'] + "old_value_text": line.get('old_value_text', ''), + "new_value_text": line.get('new_value_text', ''), + "field_description": field_obj.string } line_id = log_line_pool.create(cr, uid, vals) - cr.commit() - #End Loop return True - def log_fct(self, cr, uid, model, method, fct_src, *args): + def log_fct(self, cr, uid_orig, model, method, fct_src, *args): """ - Logging function: This function is performs logging oprations according to method - @param db: the current database - @param uid: the current user’s ID for security checks, - @param object: Object who's values are being changed - @param method: method to log: create, read, write, unlink + Logging function: This function is performing the logging operation + @param model: Object whose values are being changed + @param method: method to log: create, read, write, unlink, action or workflow action @param fct_src: execute method of Object proxy @return: Returns result as per method of Object proxy """ - uid_orig = uid - uid = 1 - res2 = args pool = pooler.get_pool(cr.dbname) resource_pool = pool.get(model) - log_pool = pool.get('audittrail.log') model_pool = pool.get('ir.model') - - model_ids = model_pool.search(cr, uid, [('model', '=', model)]) + model_ids = model_pool.search(cr, 1, [('model', '=', model)]) model_id = model_ids and model_ids[0] or False assert model_id, _("'%s' Model does not exist..." %(model)) - model = model_pool.browse(cr, uid, model_id) + model = model_pool.browse(cr, 1, model_id) - if method in ('create'): - res_id = fct_src(cr, uid_orig, model.model, method, *args) - resource = resource_pool.read(cr, uid, res_id, args[0].keys()) - vals = { - "method": method, - "object_id": model.id, - "user_id": uid_orig, - "res_id": resource['id'], - } - if 'id' in resource: - del resource['id'] - log_id = log_pool.create(cr, uid, vals) - lines = [] - for field in resource: - line = { - 'name': field, - 'new_value': resource[field], - 'new_value_text': self.get_value_text(cr, uid, field, resource[field], model) - } - lines.append(line) - self.create_log_line(cr, uid, log_id, model, lines) + # fields to log. currently only used by log on read() + field_list = [] + old_values = new_values = {} - return res_id - - elif method in ('read'): - res_ids = args[0] - old_values = {} + if method == 'create': res = fct_src(cr, uid_orig, model.model, method, *args) - if type(res) == list: - for v in res: - old_values[v['id']] = v - else: - old_values[res['id']] = res - for res_id in old_values: - vals = { - "method": method, - "object_id": model.id, - "user_id": uid_orig, - "res_id": res_id, - - } - log_id = log_pool.create(cr, uid, vals) - lines = [] - for field in old_values[res_id]: - line = { - 'name': field, - 'old_value': old_values[res_id][field], - 'old_value_text': self.get_value_text(cr, uid, field, old_values[res_id][field], model) - } - lines.append(line) - - self.create_log_line(cr, uid, log_id, model, lines) - return res - - elif method in ('unlink'): - res_ids = args[0] - old_values = {} - for res_id in res_ids: - old_values[res_id] = resource_pool.read(cr, uid, res_id) - - for res_id in res_ids: - vals = { - "method": method, - "object_id": model.id, - "user_id": uid_orig, - "res_id": res_id, - - } - log_id = log_pool.create(cr, uid, vals) - lines = [] - for field in old_values[res_id]: - if field in ('id'): - continue - line = { - 'name': field, - 'old_value': old_values[res_id][field], - 'old_value_text': self.get_value_text(cr, uid, field, old_values[res_id][field], model) - } - lines.append(line) - - self.create_log_line(cr, uid, log_id, model, lines) + if res: + res_ids = [res] + new_values = self.get_data(cr, uid_orig, pool, res_ids, model, method) + elif method == 'read': res = fct_src(cr, uid_orig, model.model, method, *args) - return res - else: + # build the res_ids and the old_values dict. Here we don't use get_data() to + # avoid performing an additional read() + res_ids = [] + for record in res: + res_ids.append(record['id']) + old_values[(model.id, record['id'])] = {'value': record, 'text': record} + # log only the fields read + field_list = args[1] + elif method == 'unlink': + res_ids = args[0] + old_values = self.get_data(cr, uid_orig, pool, res_ids, model, method) + res = fct_src(cr, uid_orig, model.model, method, *args) + else: # method is write, action or workflow action res_ids = [] - res = True if args: res_ids = args[0] - old_values = {} - fields = [] - if len(args)>1 and type(args[1]) == dict: - fields = args[1].keys() - if type(res_ids) in (long, int): + if isinstance(res_ids, (long, int)): res_ids = [res_ids] if res_ids: - for resource in resource_pool.read(cr, uid, res_ids): - resource_id = resource['id'] - if 'id' in resource: - del resource['id'] - old_values_text = {} - old_value = {} - for field in resource.keys(): - old_value[field] = resource[field] - old_values_text[field] = self.get_value_text(cr, uid, field, resource[field], model) - old_values[resource_id] = {'text':old_values_text, 'value': old_value} - + # store the old values into a dictionary + old_values = self.get_data(cr, uid_orig, pool, res_ids, model, method) + # process the original function, workflow trigger... res = fct_src(cr, uid_orig, model.model, method, *args) - + if method == 'copy': + res_ids = [res] if res_ids: - for resource in resource_pool.read(cr, uid, res_ids): - resource_id = resource['id'] - if 'id' in resource: - del resource['id'] - vals = { - "method": method, - "object_id": model.id, - "user_id": uid_orig, - "res_id": resource_id, - } + # check the new values and store them into a dictionary + new_values = self.get_data(cr, uid_orig, pool, res_ids, model, method) + # compare the old and new values and create audittrail log if needed + self.process_data(cr, uid_orig, pool, res_ids, model, method, old_values, new_values, field_list) + return res + def get_data(self, cr, uid, pool, res_ids, model, method): + """ + This function simply read all the fields of the given res_ids, and also recurisvely on + all records of a x2m fields read that need to be logged. Then it returns the result in + convenient structure that will be used as comparison basis. - log_id = log_pool.create(cr, uid, vals) - lines = [] - for field in resource.keys(): - line = { - 'name': field, - 'new_value': resource[field], - 'old_value': old_values[resource_id]['value'][field], - 'new_value_text': self.get_value_text(cr, uid, field, resource[field], model), - 'old_value_text': old_values[resource_id]['text'][field] - } - lines.append(line) + :param cr: the current row, from the database cursor, + :param uid: the current user’s ID. This parameter is currently not used as every + operation to get data is made as super admin. Though, it could be usefull later. + :param pool: current db's pooler object. + :param res_ids: Id's of resource to be logged/compared. + :param model: Object whose values are being changed + :param method: method to log: create, read, unlink, write, actions, workflow actions + :return: dict mapping a tuple (model_id, resource_id) with its value and textual value + { (model_id, resource_id): { 'value': ... + 'textual_value': ... + }, + } + """ + data = {} + resource_pool = pool.get(model.model) + # read all the fields of the given resources in super admin mode + for resource in resource_pool.read(cr, 1, res_ids): + values = {} + values_text = {} + resource_id = resource['id'] + # loop on each field on the res_ids we just have read + for field in resource: + if field in ('__last_update', 'id'): + continue + values[field] = resource[field] + # get the textual value of that field for this record + values_text[field] = self.get_value_text(cr, 1, pool, resource_pool, method, field, resource[field]) - self.create_log_line(cr, uid, log_id, model, lines) - return res + field_obj = resource_pool._all_columns.get(field).column + if field_obj._type in ('one2many','many2many'): + # check if an audittrail rule apply in super admin mode + if self.check_rules(cr, 1, field_obj._obj, method): + # check if the model associated to a *2m field exists, in super admin mode + x2m_model_ids = pool.get('ir.model').search(cr, 1, [('model', '=', field_obj._obj)]) + x2m_model_id = x2m_model_ids and x2m_model_ids[0] or False + assert x2m_model_id, _("'%s' Model does not exist..." %(field_obj._obj)) + x2m_model = pool.get('ir.model').browse(cr, 1, x2m_model_id) + #recursive call on x2m fields that need to be checked too + data.update(self.get_data(cr, 1, pool, resource[field], x2m_model, method)) + data[(model.id, resource_id)] = {'text':values_text, 'value': values} + return data + + def prepare_audittrail_log_line(self, cr, uid, pool, model, resource_id, method, old_values, new_values, field_list=[]): + """ + This function compares the old data (i.e before the method was executed) and the new data + (after the method was executed) and returns a structure with all the needed information to + log those differences. + + :param cr: the current row, from the database cursor, + :param uid: the current user’s ID. This parameter is currently not used as every + operation to get data is made as super admin. Though, it could be usefull later. + :param pool: current db's pooler object. + :param model: model object which values are being changed + :param resource_id: ID of record to which values are being changed + :param method: method to log: create, read, unlink, write, actions, workflow actions + :param old_values: dict of values read before execution of the method + :param new_values: dict of values read after execution of the method + :param field_list: optional argument containing the list of fields to log. Currently only + used when performing a read, it could be usefull later on if we want to log the write + on specific fields only. + + :return: dictionary with + * keys: tuples build as ID of model object to log and ID of resource to log + * values: list of all the changes in field values for this couple (model, resource) + return { + (model.id, resource_id): [] + } + + The reason why the structure returned is build as above is because when modifying an existing + record (res.partner, for example), we may have to log a change done in a x2many field (on + res.partner.address, for example) + """ + key = (model.id, resource_id) + lines = { + key: [] + } + # loop on all the fields + for field_name, field_definition in pool.get(model.model)._all_columns.items(): + #if the field_list param is given, skip all the fields not in that list + if field_list and field_name not in field_list: + continue + field_obj = field_definition.column + if field_obj._type in ('one2many','many2many'): + # checking if an audittrail rule apply in super admin mode + if self.check_rules(cr, 1, field_obj._obj, method): + # checking if the model associated to a *2m field exists, in super admin mode + x2m_model_ids = pool.get('ir.model').search(cr, 1, [('model', '=', field_obj._obj)]) + x2m_model_id = x2m_model_ids and x2m_model_ids[0] or False + assert x2m_model_id, _("'%s' Model does not exist..." %(field_obj._obj)) + x2m_model = pool.get('ir.model').browse(cr, 1, x2m_model_id) + # the resource_ids that need to be checked are the sum of both old and previous values (because we + # need to log also creation or deletion in those lists). + x2m_old_values_ids = old_values.get(key, {'value': {}})['value'].get(field_name, []) + x2m_new_values_ids = new_values.get(key, {'value': {}})['value'].get(field_name, []) + # We use list(set(...)) to remove duplicates. + res_ids = list(set(x2m_old_values_ids + x2m_new_values_ids)) + for res_id in res_ids: + lines.update(self.prepare_audittrail_log_line(cr, 1, pool, x2m_model, res_id, method, old_values, new_values, field_list)) + # if the value value is different than the old value: record the change + if key not in old_values or key not in new_values or old_values[key]['value'][field_name] != new_values[key]['value'][field_name]: + data = { + 'name': field_name, + 'new_value': key in new_values and new_values[key]['value'].get(field_name), + 'old_value': key in old_values and old_values[key]['value'].get(field_name), + 'new_value_text': key in new_values and new_values[key]['text'].get(field_name), + 'old_value_text': key in old_values and old_values[key]['text'].get(field_name) + } + lines[key].append(data) + return lines + + def process_data(self, cr, uid, pool, res_ids, model, method, old_values={}, new_values={}, field_list=[]): + """ + This function processes and iterates recursively to log the difference between the old + data (i.e before the method was executed) and the new data and creates audittrail log + accordingly. + + :param cr: the current row, from the database cursor, + :param uid: the current user’s ID, + :param pool: current db's pooler object. + :param res_ids: Id's of resource to be logged/compared. + :param model: model object which values are being changed + :param method: method to log: create, read, unlink, write, actions, workflow actions + :param old_values: dict of values read before execution of the method + :param new_values: dict of values read after execution of the method + :param field_list: optional argument containing the list of fields to log. Currently only + used when performing a read, it could be usefull later on if we want to log the write + on specific fields only. + :return: True + """ + # loop on all the given ids + for res_id in res_ids: + # compare old and new values and get audittrail log lines accordingly + lines = self.prepare_audittrail_log_line(cr, uid, pool, model, res_id, method, old_values, new_values, field_list) + + # if at least one modification has been found + for model_id, resource_id in lines: + vals = { + 'method': method, + 'object_id': model_id, + 'user_id': uid, + 'res_id': resource_id, + } + if (model_id, resource_id) not in old_values and method not in ('copy', 'read'): + # the resource was not existing so we are forcing the method to 'create' + # (because it could also come with the value 'write' if we are creating + # new record through a one2many field) + vals.update({'method': 'create'}) + if (model_id, resource_id) not in new_values and method not in ('copy', 'read'): + # the resource is not existing anymore so we are forcing the method to 'unlink' + # (because it could also come with the value 'write' if we are deleting the + # record through a one2many field) + vals.update({'method': 'unlink'}) + # create the audittrail log in super admin mode, only if a change has been detected + if lines[(model_id, resource_id)]: + log_id = pool.get('audittrail.log').create(cr, 1, vals) + model = pool.get('ir.model').browse(cr, uid, model_id) + self.create_log_line(cr, 1, log_id, model, lines[(model_id, resource_id)]) return True def check_rules(self, cr, uid, model, method): + """ + Checks if auditrails is installed for that db and then if one rule match + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID, + @param model: value of _name of the object which values are being changed + @param method: method to log: create, read, unlink,write,actions,workflow actions + @return: True or False + """ pool = pooler.get_pool(cr.dbname) - # Check if auditrails is installed for that db and then if one rule match if 'audittrail.rule' in pool.models: model_ids = pool.get('ir.model').search(cr, 1, [('model', '=', model)]) model_id = model_ids and model_ids[0] or False if model_id: rule_ids = pool.get('audittrail.rule').search(cr, 1, [('object_id', '=', model_id), ('state', '=', 'subscribed')]) for rule in pool.get('audittrail.rule').read(cr, 1, rule_ids, ['user_id','log_read','log_write','log_create','log_unlink','log_action','log_workflow']): - if len(rule['user_id'])==0 or uid in rule['user_id']: + if len(rule['user_id']) == 0 or uid in rule['user_id']: if rule.get('log_'+method,0): return True elif method not in ('default_get','read','fields_view_get','fields_get','search','search_count','name_search','name_get','get','request_get', 'get_sc', 'unlink', 'write', 'create'): @@ -460,18 +491,14 @@ class audittrail_objects_proxy(object_proxy): def execute_cr(self, cr, uid, model, method, *args, **kw): fct_src = super(audittrail_objects_proxy, self).execute_cr if self.check_rules(cr,uid,model,method): - res = self.log_fct(cr, uid, model, method, fct_src, *args) - else: - res = fct_src(cr, uid, model, method, *args) - return res + return self.log_fct(cr, uid, model, method, fct_src, *args) + return fct_src(cr, uid, model, method, *args) def exec_workflow_cr(self, cr, uid, model, method, *args, **argv): fct_src = super(audittrail_objects_proxy, self).exec_workflow_cr if self.check_rules(cr,uid,model,'workflow'): - res = self.log_fct(cr, uid, model, method, fct_src, *args) - else: - res = fct_src(cr, uid, model, method, *args) - return res + return self.log_fct(cr, uid, model, method, fct_src, *args) + return fct_src(cr, uid, model, method, *args) audittrail_objects_proxy() diff --git a/addons/base_calendar/i18n/bn.po b/addons/base_calendar/i18n/bn.po new file mode 100644 index 00000000000..e0d0b9c7cca --- /dev/null +++ b/addons/base_calendar/i18n/bn.po @@ -0,0 +1,1658 @@ +# Bengali 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-21 12:57+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Bengali \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-22 05:00+0000\n" +"X-Generator: Launchpad (build 14299)\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 "" + +#. 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 "বাতিল (_C)" + +#. 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 "ঠিক আছে(_O)" + +#. 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 "সংরক্ষণ (_S)" + +#. 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_crypt/i18n/oc.po b/addons/base_crypt/i18n/oc.po new file mode 100644 index 00000000000..ef234e97cb7 --- /dev/null +++ b/addons/base_crypt/i18n/oc.po @@ -0,0 +1,73 @@ +# Occitan (post 1500) 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-20 09:17+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: base_crypt +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "Podètz pas aver dos utilizaires amb lo meteis identificant !" + +#. module: base_crypt +#: model:ir.model,name:base_crypt.model_res_users +msgid "res.users" +msgstr "res.users" + +#. module: base_crypt +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "" +"La societat causida fa pas partida de las societats autorizadas per aqueste " +"utilizaire" + +#. module: base_crypt +#: code:addons/base_crypt/crypt.py:132 +#, python-format +msgid "Please specify the password !" +msgstr "Entratz un senhal" + +#. module: base_crypt +#: model:ir.module.module,shortdesc:base_crypt.module_meta_information +msgid "Base - Password Encryption" +msgstr "Basa - Chifratge del senhal" + +#. module: base_crypt +#: code:addons/base_crypt/crypt.py:132 +#, python-format +msgid "Error" +msgstr "Error" + +#. module: base_crypt +#: model:ir.module.module,description:base_crypt.module_meta_information +msgid "" +"This module replaces the cleartext password in the database with a password " +"hash,\n" +"preventing anyone from reading the original password.\n" +"For your existing user base, the removal of the cleartext passwords occurs " +"the first time\n" +"a user logs into the database, after installing base_crypt.\n" +"After installing this module it won't be possible to recover a forgotten " +"password for your\n" +"users, the only solution is for an admin to set a new password.\n" +"\n" +"Note: installing this module does not mean you can ignore basic security " +"measures,\n" +"as the password is still transmitted unencrypted on the network (by the " +"client),\n" +"unless you are using a secure protocol such as XML-RPCS.\n" +" " +msgstr "" diff --git a/addons/base_tools/i18n/oc.po b/addons/base_tools/i18n/oc.po new file mode 100644 index 00000000000..47c934ff404 --- /dev/null +++ b/addons/base_tools/i18n/oc.po @@ -0,0 +1,32 @@ +# Occitan (post 1500) 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-20 09:19+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: base_tools +#: model:ir.module.module,shortdesc:base_tools.module_meta_information +msgid "Common base for tools modules" +msgstr "Basa comuna pels moduls utilitaris" + +#. module: base_tools +#: model:ir.module.module,description:base_tools.module_meta_information +msgid "" +"\n" +" " +msgstr "" +"\n" +" " diff --git a/addons/board/board_data_admin.xml b/addons/board/board_data_admin.xml index 0a65d816d8f..c43b2cd9602 100644 --- a/addons/board/board_data_admin.xml +++ b/addons/board/board_data_admin.xml @@ -158,7 +158,7 @@ - + diff --git a/addons/claim_from_delivery/i18n/oc.po b/addons/claim_from_delivery/i18n/oc.po new file mode 100644 index 00000000000..e7670a75613 --- /dev/null +++ b/addons/claim_from_delivery/i18n/oc.po @@ -0,0 +1,33 @@ +# Occitan (post 1500) 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-20 09:19+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: claim_from_delivery +#: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery +msgid "Claim" +msgstr "Reclamacion" + +#. module: claim_from_delivery +#: model:ir.module.module,description:claim_from_delivery.module_meta_information +msgid "Create Claim from delivery order:\n" +msgstr "Crear una reclamacion sus un bon de liurason :\n" + +#. module: claim_from_delivery +#: model:ir.module.module,shortdesc:claim_from_delivery.module_meta_information +msgid "Claim from delivery" +msgstr "Reclamacion sus la liurason" diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 91c8a453cd6..e72358a79a5 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -42,11 +42,17 @@ class crm_lead(crm_case, osv.osv): _order = "priority,date_action,id desc" _inherit = ['mail.thread','res.partner.address'] - def _read_group_stage_ids(self, cr, uid, ids, domain, context=None): - context = context or {} + def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, context=None): stage_obj = self.pool.get('crm.case.stage') - stage_ids = stage_obj.search(cr, uid, ['|', ('id','in',ids), ('case_default','=',1)], context=context) - return stage_obj.name_get(cr, uid, stage_ids, context=context) + order = stage_obj._order + if read_group_order == 'stage_id desc': + # lame hack to allow reverting search, should just work in the trivial case + order = "%s desc" % order + stage_ids = stage_obj.search(cr, uid, ['|', ('id','in',ids),('case_default','=',1)], order=order, context=context) + result = stage_obj.name_get(cr, uid, stage_ids, context=context) + # restore order of the search + result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) + return result _group_by_full = { 'stage_id': _read_group_stage_ids diff --git a/addons/crm_caldav/i18n/oc.po b/addons/crm_caldav/i18n/oc.po new file mode 100644 index 00000000000..58d92403c46 --- /dev/null +++ b/addons/crm_caldav/i18n/oc.po @@ -0,0 +1,50 @@ +# Occitan (post 1500) 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:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:20+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: crm_caldav +#: model:ir.actions.act_window,name:crm_caldav.action_caldav_browse +msgid "Caldav Browse" +msgstr "Navigar dins CalDav" + +#. module: crm_caldav +#: model:ir.model,name:crm_caldav.model_crm_meeting +msgid "Meeting" +msgstr "Rendètz-vos" + +#. module: crm_caldav +#: model:ir.module.module,shortdesc:crm_caldav.module_meta_information +msgid "Extended Module to Add CalDav feature on Meeting" +msgstr "Modul espandit per apondre la foncionalitat CalDav a las acampadas" + +#. module: crm_caldav +#: model:ir.module.module,description:crm_caldav.module_meta_information +msgid "" +"\n" +" New Features in Meeting:\n" +" * Share meeting with other calendar clients like sunbird\n" +msgstr "" +"\n" +" Foncionalitats novèlas per las acampadas :\n" +" * Partiment d'acampadas amb d'autres clients de calendièrs coma " +"sunbird\n" + +#. module: crm_caldav +#: model:ir.ui.menu,name:crm_caldav.menu_caldav_browse +msgid "Synchronyze this calendar" +msgstr "Sincronizar aqueste calendièr" diff --git a/addons/document_ftp/i18n/ar.po b/addons/document_ftp/i18n/ar.po new file mode 100644 index 00000000000..d0483dce57c --- /dev/null +++ b/addons/document_ftp/i18n/ar.po @@ -0,0 +1,135 @@ +# 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:15+0000\n" +"PO-Revision-Date: 2011-11-18 07:10+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-19 05:13+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: document_ftp +#: model:ir.model,name:document_ftp.model_document_ftp_configuration +msgid "Auto Directory Configuration" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.configuration:0 +msgid "" +"Indicate the network address on which your OpenERP server should be " +"reachable for end-users. This depends on your network topology and " +"configuration, and will only affect the links displayed to the users. The " +"format is HOST:PORT and the default host (localhost) is only suitable for " +"access from the server machine itself.." +msgstr "" + +#. module: document_ftp +#: field:document.ftp.configuration,progress:0 +msgid "Configuration Progress" +msgstr "" + +#. module: document_ftp +#: model:ir.actions.url,name:document_ftp.action_document_browse +msgid "Browse Files" +msgstr "" + +#. module: document_ftp +#: field:document.ftp.configuration,config_logo:0 +msgid "Image" +msgstr "الصورة" + +#. module: document_ftp +#: field:document.ftp.configuration,host:0 +msgid "Address" +msgstr "العنوان" + +#. module: document_ftp +#: field:document.ftp.browse,url:0 +msgid "FTP Server" +msgstr "" + +#. module: document_ftp +#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory +msgid "FTP Server Configuration" +msgstr "" + +#. module: document_ftp +#: model:ir.module.module,description:document_ftp.module_meta_information +msgid "" +"This is a support FTP Interface with document management system.\n" +" With this module you would not only be able to access documents through " +"OpenERP\n" +" but you would also be able to connect with them through the file system " +"using the\n" +" FTP client.\n" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.browse:0 +msgid "_Browse" +msgstr "" + +#. module: document_ftp +#: help:document.ftp.configuration,host:0 +msgid "" +"Server address or IP and port to which users should connect to for DMS access" +msgstr "" + +#. module: document_ftp +#: model:ir.ui.menu,name:document_ftp.menu_document_browse +msgid "Shared Repository (FTP)" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.browse:0 +msgid "_Cancel" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.configuration:0 +msgid "Configure FTP Server" +msgstr "" + +#. module: document_ftp +#: model:ir.module.module,shortdesc:document_ftp.module_meta_information +msgid "Integrated FTP Server with Document Management System" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.configuration:0 +msgid "title" +msgstr "" + +#. module: document_ftp +#: model:ir.model,name:document_ftp.model_document_ftp_browse +msgid "Document FTP Browse" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.configuration:0 +msgid "Knowledge Application Configuration" +msgstr "" + +#. module: document_ftp +#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse +msgid "Document Browse" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.browse:0 +msgid "Browse Document" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.configuration:0 +msgid "res_config_contents" +msgstr "" diff --git a/addons/edi/__init__.py b/addons/edi/__init__.py index 3aa7f74ebd7..f0f96a936ec 100644 --- a/addons/edi/__init__.py +++ b/addons/edi/__init__.py @@ -18,10 +18,17 @@ # along with this program. If not, see . # ############################################################################## +import logging import models import edi_service from models.edi import EDIMixin, edi_document # web -import controllers \ No newline at end of file +try: + import controllers +except ImportError: + logging.getLogger('init.load').warn( + """Could not load openerp-web section of EDI, EDI will not behave correctly + +To fix, launch openerp-web in embedded mode""") diff --git a/addons/edi/static/src/js/edi.js b/addons/edi/static/src/js/edi.js index 7eb118baeb3..9397c1cf280 100644 --- a/addons/edi/static/src/js/edi.js +++ b/addons/edi/static/src/js/edi.js @@ -1,5 +1,4 @@ openerp.edi = function(openerp) { -openerp.web.qweb.add_template("/web/static/src/xml/base.xml"); openerp.web.qweb.add_template("/edi/static/src/xml/edi.xml"); openerp.web.qweb.add_template("/edi/static/src/xml/edi_account.xml"); openerp.web.qweb.add_template("/edi/static/src/xml/edi_sale_purchase.xml"); diff --git a/addons/edi/static/src/xml/edi_account.xml b/addons/edi/static/src/xml/edi_account.xml index d9c9af9c401..dc6fb7f9754 100644 --- a/addons/edi/static/src/xml/edi_account.xml +++ b/addons/edi/static/src/xml/edi_account.xml @@ -31,7 +31,7 @@

-

Invoice :

+

Invoice :

@@ -60,10 +60,10 @@
- - - - + + + + @@ -73,7 +73,7 @@ Net Total:
- +
@@ -84,7 +84,7 @@ Taxes:
- +
@@ -95,7 +95,7 @@ Total:
- +
@@ -110,8 +110,8 @@ - - + + @@ -145,7 +145,7 @@

- Please transfer to + Please transfer to (postal address on the invoice header) using one of the following bank accounts. Be sure to mention the invoice reference on the transfer: diff --git a/addons/edi/static/src/xml/edi_sale_purchase.xml b/addons/edi/static/src/xml/edi_sale_purchase.xml index cbd16507b62..4e0fdd7fc4e 100644 --- a/addons/edi/static/src/xml/edi_sale_purchase.xml +++ b/addons/edi/static/src/xml/edi_sale_purchase.xml @@ -33,7 +33,7 @@ -

Order :

+

Order :

Description
@@ -68,11 +68,11 @@ - - - + + + @@ -82,7 +82,7 @@ Net Total:
- +
@@ -93,7 +93,7 @@ Taxes:
- +
@@ -104,7 +104,7 @@ Total:
- +
@@ -137,7 +137,7 @@

- Please transfer to + Please transfer to (postal address on the order header) using one of the following bank accounts. Be sure to mention the document reference on the transfer: diff --git a/addons/hr/i18n/bn.po b/addons/hr/i18n/bn.po new file mode 100644 index 00000000000..05fd169ae01 --- /dev/null +++ b/addons/hr/i18n/bn.po @@ -0,0 +1,829 @@ +# Bengali 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:15+0000\n" +"PO-Revision-Date: 2011-11-21 12:43+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Bengali \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-22 05:00+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: hr +#: model:process.node,name:hr.process_node_openerpuser0 +msgid "Openerp user" +msgstr "Openerp ব্যাবহারকারী" + +#. module: hr +#: view:hr.job:0 +#: field:hr.job,requirements:0 +msgid "Requirements" +msgstr "আবশ্যকতা" + +#. module: hr +#: constraint:hr.department:0 +msgid "Error! You can not create recursive departments." +msgstr "ভুল! আপনি রিকারসিভ দপ্তর তৈরি করতে পারবেন না।" + +#. module: hr +#: model:process.transition,name:hr.process_transition_contactofemployee0 +msgid "Link the employee to information" +msgstr "তথ্যের সাথে কর্মচারী যুক্ত করুন" + +#. module: hr +#: field:hr.employee,sinid:0 +msgid "SIN No" +msgstr "ন্যাশনাল আইডি নং" + +#. module: hr +#: model:ir.module.module,shortdesc:hr.module_meta_information +#: model:ir.ui.menu,name:hr.menu_hr_deshboard +#: model:ir.ui.menu,name:hr.menu_hr_main +#: model:ir.ui.menu,name:hr.menu_hr_management +#: model:ir.ui.menu,name:hr.menu_hr_root +msgid "Human Resources" +msgstr "জনসম্পদ" + +#. module: hr +#: view:hr.employee:0 +#: view:hr.job:0 +msgid "Group By..." +msgstr "...দিয়ে গ্রুপ করুন" + +#. module: hr +#: model:ir.actions.act_window,help:hr.action_hr_job +msgid "" +"Job Positions are used to define jobs and their requirements. You can keep " +"track of the number of employees you have per job position and how many you " +"expect in the future. You can also attach a survey to a job position that " +"will be used in the recruitment process to evaluate the applicants for this " +"job position." +msgstr "" + +#. module: hr +#: view:hr.employee:0 +#: field:hr.employee,department_id:0 +#: view:hr.job:0 +#: field:hr.job,department_id:0 +#: view:res.users:0 +msgid "Department" +msgstr "বিভাগ" + +#. module: hr +#: help:hr.installer,hr_attendance:0 +msgid "Simplifies the management of employee's attendances." +msgstr "কর্মচারী উপস্থিতি ম্যানেজমেন্ট সহজতর করে" + +#. module: hr +#: view:hr.job:0 +msgid "Mark as Old" +msgstr "" + +#. module: hr +#: view:hr.job:0 +msgid "Jobs" +msgstr "কাজ" + +#. module: hr +#: view:hr.job:0 +msgid "In Recruitment" +msgstr "নিয়োগপ্রাপ্ত" + +#. module: hr +#: view:hr.installer:0 +msgid "title" +msgstr "শিরোনাম" + +#. module: hr +#: field:hr.department,company_id:0 +#: view:hr.employee:0 +#: view:hr.job:0 +#: field:hr.job,company_id:0 +msgid "Company" +msgstr "কোম্পানি" + +#. module: hr +#: field:hr.job,no_of_recruitment:0 +msgid "Expected in Recruitment" +msgstr "নিয়োগে কাম্য" + +#. module: hr +#: model:ir.ui.menu,name:hr.menu_open_view_attendance_reason_config +msgid "Holidays" +msgstr "ছুটির দিন" + +#. module: hr +#: help:hr.installer,hr_holidays:0 +msgid "Tracks employee leaves, allocation requests and planning." +msgstr "কর্মচারীদের ছুটির হিসাব রাখে" + +#. module: hr +#: model:ir.model,name:hr.model_hr_employee_marital_status +msgid "Employee Marital Status" +msgstr "কর্মচারীর বৈবাহিক অবস্থা" + +#. module: hr +#: help:hr.employee,partner_id:0 +msgid "" +"Partner that is related to the current employee. Accounting transaction will " +"be written on this partner belongs to employee." +msgstr "" + +#. module: hr +#: model:process.transition,name:hr.process_transition_employeeuser0 +msgid "Link a user to an employee" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_contract:0 +msgid "Employee's Contracts" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_payroll:0 +msgid "Generic Payroll system." +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "My Departments Employee" +msgstr "" + +#. module: hr +#: model:hr.employee.marital.status,name:hr.hr_employee_marital_status_married +msgid "Married" +msgstr "" + +#. module: hr +#: constraint:hr.employee:0 +msgid "" +"Error ! You cannot select a department for which the employee is the manager." +msgstr "" + +#. module: hr +#: help:hr.employee,passport_id:0 +msgid "Employee Passport Information" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,help:hr.open_module_tree_department +msgid "" +"Your Company's Department Structure is used to manage all documents related " +"to employees by departments: expenses and timesheet validation, leaves " +"management, recruitments, etc." +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Position" +msgstr "পদ" + +#. module: hr +#: model:ir.actions.act_window,name:hr.action2 +msgid "Employee Hierarchy" +msgstr "" + +#. module: hr +#: model:process.transition,note:hr.process_transition_employeeuser0 +msgid "" +"The Related user field on the Employee form allows to link the OpenERP user " +"(and her rights) to the employee." +msgstr "" + +#. module: hr +#: view:hr.job:0 +#: selection:hr.job,state:0 +msgid "In Recruitement" +msgstr "" + +#. module: hr +#: field:hr.employee,identification_id:0 +msgid "Identification No" +msgstr "" + +#. module: hr +#: field:hr.job,no_of_employee:0 +msgid "No of Employee" +msgstr "" + +#. module: hr +#: selection:hr.employee,gender:0 +msgid "Female" +msgstr "মহিলা" + +#. module: hr +#: help:hr.installer,hr_timesheet_sheet:0 +msgid "" +"Tracks and helps employees encode and validate timesheets and attendances." +msgstr "" + +#. module: hr +#: field:hr.installer,hr_evaluation:0 +msgid "Periodic Evaluations" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_timesheet_sheet:0 +msgid "Timesheets" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.open_view_employee_tree +msgid "Employees Structure" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Social IDs" +msgstr "" + +#. module: hr +#: help:hr.job,no_of_employee:0 +msgid "Number of employee with that job." +msgstr "" + +#. module: hr +#: field:hr.employee,work_phone:0 +msgid "Work Phone" +msgstr "কর্মস্থলের ফোন" + +#. module: hr +#: field:hr.employee.category,child_ids:0 +msgid "Child Categories" +msgstr "" + +#. module: hr +#: view:hr.job:0 +#: field:hr.job,description:0 +#: model:ir.model,name:hr.model_hr_job +msgid "Job Description" +msgstr "" + +#. module: hr +#: field:hr.employee,work_location:0 +msgid "Office Location" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +#: view:hr.job:0 +#: model:ir.model,name:hr.model_hr_employee +#: model:process.node,name:hr.process_node_employee0 +msgid "Employee" +msgstr "" + +#. module: hr +#: model:process.node,note:hr.process_node_employeecontact0 +msgid "Other information" +msgstr "" + +#. module: hr +#: field:hr.employee,work_email:0 +msgid "Work E-mail" +msgstr "" + +#. module: hr +#: field:hr.department,complete_name:0 +#: field:hr.employee.category,complete_name:0 +msgid "Name" +msgstr "নাম" + +#. module: hr +#: field:hr.employee,birthday:0 +msgid "Date of Birth" +msgstr "জন্মদিন" + +#. module: hr +#: model:ir.ui.menu,name:hr.menu_hr_reporting +msgid "Reporting" +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_ir_actions_act_window +msgid "ir.actions.act_window" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.open_board_hr +msgid "Human Resources Dashboard" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +#: field:hr.employee,job_id:0 +#: view:hr.job:0 +msgid "Job" +msgstr "" + +#. module: hr +#: view:hr.department:0 +#: field:hr.department,member_ids:0 +msgid "Members" +msgstr "" + +#. module: hr +#: model:ir.ui.menu,name:hr.menu_hr_configuration +msgid "Configuration" +msgstr "" + +#. module: hr +#: view:hr.installer:0 +msgid "" +"You can enhance the base HR Application by installing few HR-related " +"functionalities." +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Categories" +msgstr "" + +#. module: hr +#: field:hr.job,expected_employees:0 +msgid "Expected Employees" +msgstr "" + +#. module: hr +#: help:hr.employee,sinid:0 +msgid "Social Insurance Number" +msgstr "" + +#. module: hr +#: model:hr.employee.marital.status,name:hr.hr_employee_marital_status_divorced +msgid "Divorced" +msgstr "" + +#. module: hr +#: field:hr.employee.category,parent_id:0 +msgid "Parent Category" +msgstr "" + +#. module: hr +#: constraint:hr.employee.category:0 +msgid "Error ! You cannot create recursive Categories." +msgstr "" + +#. module: hr +#: view:hr.department:0 +#: model:ir.actions.act_window,name:hr.open_module_tree_department +#: model:ir.ui.menu,name:hr.menu_hr_department_tree +#: view:res.users:0 +#: field:res.users,context_department_id:0 +msgid "Departments" +msgstr "" + +#. module: hr +#: model:process.node,name:hr.process_node_employeecontact0 +msgid "Employee Contact" +msgstr "" + +#. module: hr +#: view:board.board:0 +msgid "My Board" +msgstr "" + +#. module: hr +#: selection:hr.employee,gender:0 +msgid "Male" +msgstr "" + +#. module: hr +#: field:hr.installer,progress:0 +msgid "Configuration Progress" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.open_view_categ_form +#: model:ir.ui.menu,name:hr.menu_view_employee_category_form +msgid "Categories of Employee" +msgstr "" + +#. module: hr +#: view:hr.employee.category:0 +#: model:ir.model,name:hr.model_hr_employee_category +msgid "Employee Category" +msgstr "" + +#. module: hr +#: field:hr.installer,config_logo:0 +msgid "Image" +msgstr "" + +#. module: hr +#: model:process.process,name:hr.process_process_employeecontractprocess0 +msgid "Employee Contract" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_evaluation:0 +msgid "" +"Lets you create and manage the periodic evaluation and performance review of " +"employees." +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_hr_department +msgid "hr.department" +msgstr "" + +#. module: hr +#: help:hr.employee,parent_id:0 +msgid "It is linked with manager of Department" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_recruitment:0 +msgid "Recruitment Process" +msgstr "" + +#. module: hr +#: field:hr.employee,category_ids:0 +#: field:hr.employee.category,name:0 +msgid "Category" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,help:hr.open_view_employee_list_my +msgid "" +"Here you can manage your work force by creating employees and assigning them " +"specific properties in the system. Maintain all employee related information " +"and keep track of anything that needs to be recorded for them. The personal " +"information tab will help you maintain their identity data. The Categories " +"tab gives you the opportunity to assign them related employee categories " +"depending on their position and activities within the company. A category " +"can be a seniority level within the company or a department. The Timesheets " +"tab allows to assign them a specific timesheet and analytic journal where " +"they will be able to enter time through the system. In the note tab, you can " +"enter text data that should be recorded for a specific employee." +msgstr "" + +#. module: hr +#: help:hr.employee,bank_account_id:0 +msgid "Employee bank salary account" +msgstr "" + +#. module: hr +#: field:hr.department,note:0 +msgid "Note" +msgstr "" + +#. module: hr +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Contact Information" +msgstr "" + +#. module: hr +#: field:hr.employee,address_id:0 +msgid "Working Address" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.open_board_hr_manager +msgid "HR Manager Dashboard" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Status" +msgstr "" + +#. module: hr +#: view:hr.installer:0 +msgid "Configure" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.open_view_categ_tree +#: model:ir.ui.menu,name:hr.menu_view_employee_category_tree +msgid "Categories structure" +msgstr "" + +#. module: hr +#: field:hr.employee,partner_id:0 +msgid "unknown" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_holidays:0 +msgid "Holidays / Leaves Management" +msgstr "" + +#. module: hr +#: field:hr.employee,ssnid:0 +msgid "SSN No" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Active" +msgstr "" + +#. module: hr +#: constraint:hr.employee:0 +msgid "Error ! You cannot create recursive Hierarchy of Employees." +msgstr "" + +#. module: hr +#: view:hr.department:0 +msgid "Companies" +msgstr "" + +#. module: hr +#: model:ir.module.module,description:hr.module_meta_information +msgid "" +"\n" +" Module for human resource management. You can manage:\n" +" * Employees and hierarchies : You can define your employee with User and " +"display hierarchies\n" +" * HR Departments\n" +" * HR Jobs\n" +" " +msgstr "" + +#. module: hr +#: model:process.transition,note:hr.process_transition_contactofemployee0 +msgid "" +"In the Employee form, there are different kind of information like Contact " +"information." +msgstr "" + +#. module: hr +#: help:hr.job,expected_employees:0 +msgid "Required number of Employees in total for that job." +msgstr "" + +#. module: hr +#: selection:hr.job,state:0 +msgid "Old" +msgstr "" + +#. module: hr +#: field:hr.employee.marital.status,description:0 +msgid "Status Description" +msgstr "" + +#. module: hr +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "" + +#. module: hr +#: view:hr.job:0 +#: field:hr.job,state:0 +msgid "State" +msgstr "" + +#. module: hr +#: field:hr.employee,marital:0 +#: view:hr.employee.marital.status:0 +#: field:hr.employee.marital.status,name:0 +#: model:ir.actions.act_window,name:hr.action_hr_marital_status +#: model:ir.ui.menu,name:hr.hr_menu_marital_status +msgid "Marital Status" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_recruitment:0 +msgid "Helps you manage and streamline your recruitment process." +msgstr "" + +#. module: hr +#: model:process.node,note:hr.process_node_employee0 +msgid "Employee form and structure" +msgstr "" + +#. module: hr +#: field:hr.employee,photo:0 +msgid "Photo" +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_res_users +msgid "res.users" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_payroll_account:0 +msgid "Payroll Accounting" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Personal Information" +msgstr "" + +#. module: hr +#: field:hr.employee,passport_id:0 +msgid "Passport No" +msgstr "" + +#. module: hr +#: view:res.users:0 +msgid "Current Activity" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_expense:0 +msgid "" +"Tracks and manages employee expenses, and can automatically re-invoice " +"clients if the expenses are project-related." +msgstr "" + +#. module: hr +#: view:hr.job:0 +msgid "Current" +msgstr "" + +#. module: hr +#: field:hr.department,parent_id:0 +msgid "Parent Department" +msgstr "" + +#. module: hr +#: view:hr.employee.category:0 +msgid "Employees Categories" +msgstr "" + +#. module: hr +#: field:hr.employee,address_home_id:0 +msgid "Home Address" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_attendance:0 +#: model:ir.ui.menu,name:hr.menu_open_view_attendance_reason_new_config +msgid "Attendances" +msgstr "" + +#. module: hr +#: view:hr.employee.marital.status:0 +#: view:hr.job:0 +msgid "Description" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_contract:0 +msgid "Extends employee profiles to help manage their contracts." +msgstr "" + +#. module: hr +#: field:hr.installer,hr_payroll:0 +msgid "Payroll" +msgstr "" + +#. module: hr +#: model:hr.employee.marital.status,name:hr.hr_employee_marital_status_single +msgid "Single" +msgstr "" + +#. module: hr +#: field:hr.job,name:0 +msgid "Job Name" +msgstr "" + +#. module: hr +#: view:hr.job:0 +#: selection:hr.job,state:0 +msgid "In Position" +msgstr "" + +#. module: hr +#: field:hr.employee,mobile_phone:0 +msgid "Mobile" +msgstr "" + +#. module: hr +#: view:hr.department:0 +msgid "department" +msgstr "" + +#. module: hr +#: field:hr.employee,country_id:0 +msgid "Nationality" +msgstr "" + +#. module: hr +#: view:hr.department:0 +#: view:hr.employee:0 +#: field:hr.employee,notes:0 +msgid "Notes" +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_hr_installer +msgid "hr.installer" +msgstr "" + +#. module: hr +#: view:board.board:0 +msgid "HR Manager Board" +msgstr "" + +#. module: hr +#: field:hr.employee,resource_id:0 +msgid "Resource" +msgstr "" + +#. module: hr +#: view:hr.installer:0 +#: model:ir.actions.act_window,name:hr.action_hr_installer +msgid "Human Resources Application Configuration" +msgstr "" + +#. module: hr +#: field:hr.employee,gender:0 +msgid "Gender" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +#: field:hr.job,employee_ids:0 +#: model:ir.actions.act_window,name:hr.hr_employee_normal_action_tree +#: model:ir.actions.act_window,name:hr.open_view_employee_list +#: model:ir.actions.act_window,name:hr.open_view_employee_list_my +#: model:ir.ui.menu,name:hr.menu_open_view_employee_list_my +#: model:ir.ui.menu,name:hr.menu_view_employee_category_configuration_form +msgid "Employees" +msgstr "" + +#. module: hr +#: field:hr.employee,bank_account_id:0 +msgid "Bank Account" +msgstr "" + +#. module: hr +#: field:hr.department,name:0 +msgid "Department Name" +msgstr "" + +#. module: hr +#: help:hr.employee,ssnid:0 +msgid "Social Security Number" +msgstr "" + +#. module: hr +#: model:process.node,note:hr.process_node_openerpuser0 +msgid "Creation of a OpenERP user" +msgstr "" + +#. module: hr +#: field:hr.department,child_ids:0 +msgid "Child Departments" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.action_hr_job +#: model:ir.ui.menu,name:hr.menu_hr_job +msgid "Job Positions" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +#: field:hr.employee,coach_id:0 +msgid "Coach" +msgstr "" + +#. module: hr +#: view:hr.installer:0 +msgid "Configure Your Human Resources Application" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_expense:0 +msgid "Expenses" +msgstr "" + +#. module: hr +#: field:hr.department,manager_id:0 +#: view:hr.employee:0 +#: field:hr.employee,parent_id:0 +msgid "Manager" +msgstr "" + +#. module: hr +#: model:hr.employee.marital.status,name:hr.hr_employee_marital_status_widower +msgid "Widower" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_payroll_account:0 +msgid "Generic Payroll system Integrated with Accountings." +msgstr "" + +#. module: hr +#: field:hr.employee,child_ids:0 +msgid "Subordinates" +msgstr "" diff --git a/addons/hr_evaluation/__openerp__.py b/addons/hr_evaluation/__openerp__.py index f082d9bfcef..720c49302d4 100644 --- a/addons/hr_evaluation/__openerp__.py +++ b/addons/hr_evaluation/__openerp__.py @@ -39,7 +39,7 @@ level of employee hierarchy fills what and final review and evaluation is done by the manager.Every evaluation filled by the employees can be viewed in the form of pdf file. Implements a dashboard for My Current Evaluations """, - "demo": [], + "demo": ["hr_evaluation_demo.xml"], "data": [ "security/ir.model.access.csv", "security/hr_evaluation_security.xml", diff --git a/addons/hr_evaluation/hr_evaluation_data.xml b/addons/hr_evaluation/hr_evaluation_data.xml index 6745b997b3f..40ff397534e 100644 --- a/addons/hr_evaluation/hr_evaluation_data.xml +++ b/addons/hr_evaluation/hr_evaluation_data.xml @@ -1210,23 +1210,11 @@ Once the form had been filled, the employee send it to his supervisor. - + - - - - - - - - - - - - diff --git a/addons/hr_evaluation/hr_evaluation_demo.xml b/addons/hr_evaluation/hr_evaluation_demo.xml new file mode 100644 index 00000000000..db096f13266 --- /dev/null +++ b/addons/hr_evaluation/hr_evaluation_demo.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py index 201c70c642c..478b8120935 100644 --- a/addons/hr_expense/hr_expense.py +++ b/addons/hr_expense/hr_expense.py @@ -137,8 +137,9 @@ class hr_expense_expense(osv.osv): inv_ids.append(self.browse(cr, uid, id).invoice_id.id) return { 'name': _('Supplier Invoices'), + 'view_type': 'form', 'view_mode': 'form', - 'view_id': [res[1] if res else False], + 'view_id': [res and res[1] or False], 'res_model': 'account.invoice', 'context': "{'type':'out_invoice', 'journal_type': 'purchase'}", 'type': 'ir.actions.act_window', diff --git a/addons/hr_expense/hr_expense_workflow.xml b/addons/hr_expense/hr_expense_workflow.xml index 7946bef3b6b..328a07879a4 100644 --- a/addons/hr_expense/hr_expense_workflow.xml +++ b/addons/hr_expense/hr_expense_workflow.xml @@ -104,13 +104,6 @@ - - - subflow.cancel - - - - draft diff --git a/addons/hr_payroll_account/hr_payroll_account.py b/addons/hr_payroll_account/hr_payroll_account.py index 684289c9737..3463713d37d 100644 --- a/addons/hr_payroll_account/hr_payroll_account.py +++ b/addons/hr_payroll_account/hr_payroll_account.py @@ -39,7 +39,13 @@ class hr_payslip(osv.osv): 'journal_id': fields.many2one('account.journal', 'Expense Journal',states={'draft': [('readonly', False)]}, readonly=True, required=True), 'move_id': fields.many2one('account.move', 'Accounting Entry', readonly=True), } - + + def copy(self, cr, uid, id, default=None, context=None): + if default is None: + default = {} + default['move_id'] = False + return super(hr_payslip, self).copy(cr, uid, id, default, context=context) + def create(self, cr, uid, vals, context=None): if context is None: context = {} @@ -95,9 +101,9 @@ class hr_payslip(osv.osv): partner_id = False debit_account_id = line.salary_rule_id.account_debit.id credit_account_id = line.salary_rule_id.account_credit.id - + if debit_account_id: - + debit_line = (0, 0, { 'name': line.name, 'date': timenow, @@ -113,9 +119,9 @@ class hr_payslip(osv.osv): }) line_ids.append(debit_line) debit_sum += debit_line[2]['debit'] - debit_line[2]['credit'] - + if credit_account_id: - + credit_line = (0, 0, { 'name': line.name, 'date': timenow, @@ -147,7 +153,7 @@ class hr_payslip(osv.osv): 'credit': debit_sum - credit_sum, }) line_ids.append(adjust_credit) - + elif debit_sum < credit_sum: acc_id = slip.journal_id.default_debit_account_id.id if not acc_id: diff --git a/addons/hr_recruitment/__openerp__.py b/addons/hr_recruitment/__openerp__.py index b728609c53d..4797ef14044 100644 --- a/addons/hr_recruitment/__openerp__.py +++ b/addons/hr_recruitment/__openerp__.py @@ -54,7 +54,7 @@ system to store and search in your CV base. 'hr_recruitment_data.xml' ], 'demo_xml': [ - 'hr_recruitment_demo.xml', + 'hr_recruitment_demo.yml', ], 'test':['test/test_hr_recruitment.yml'], 'installable': True, diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index 931600fef9f..d9438e9beee 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -197,11 +197,17 @@ class hr_applicant(crm.crm_case, osv.osv): 'color': 0, } - def _read_group_stage_ids(self, cr, uid, ids, domain, context=None): - context = context or {} + def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, context=None): stage_obj = self.pool.get('hr.recruitment.stage') - stage_ids = stage_obj.search(cr, uid, ['|',('id','in',ids), ('department_id','=',False)], context=context) - return stage_obj.name_get(cr, uid, stage_ids, context=context) + order = stage_obj._order + if read_group_order == 'stage_id desc': + # lame hack to allow reverting search, should just work in the trivial case + order = "%s desc" % order + stage_ids = stage_obj.search(cr, uid, ['|',('id','in',ids),('department_id','=',False)], order=order, context=context) + result = stage_obj.name_get(cr, uid, stage_ids, context=context) + # restore order of the search + result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) + return result _group_by_full = { 'stage_id': _read_group_stage_ids @@ -440,7 +446,18 @@ class hr_applicant(crm.crm_case, osv.osv): }) else: raise osv.except_osv(_('Warning!'),_('You must define Applied Job for Applicant !')) - return self.case_close(cr, uid, ids, *args) + self.case_close(cr, uid, ids, *args) + + mod_obj = self.pool.get('ir.model.data') + act = mod_obj.get_object_reference(cr, uid, 'hr', 'open_view_employee_list') + + act_obj = self.pool.get('ir.actions.act_window') + act_win = act_obj.read(cr, uid, act[1], []) + + act_win['domain'] = [('id','=',emp_id)] + act_win['view_mode'] = 'form,tree' + act_win['res_id'] = emp_id + return act_win def case_reset(self, cr, uid, ids, *args): """Resets case as draft diff --git a/addons/hr_recruitment/hr_recruitment_data.xml b/addons/hr_recruitment/hr_recruitment_data.xml index e1172f0b075..d6cb5952d38 100644 --- a/addons/hr_recruitment/hr_recruitment_data.xml +++ b/addons/hr_recruitment/hr_recruitment_data.xml @@ -19,19 +19,6 @@ - - - - - Salesman - - - - - Junior Developer - - - diff --git a/addons/hr_recruitment/hr_recruitment_demo.xml b/addons/hr_recruitment/hr_recruitment_demo.xml deleted file mode 100644 index 0fc2c94f034..00000000000 --- a/addons/hr_recruitment/hr_recruitment_demo.xml +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/hr_recruitment/hr_recruitment_demo.yml b/addons/hr_recruitment/hr_recruitment_demo.yml new file mode 100644 index 00000000000..bcf2248fc40 --- /dev/null +++ b/addons/hr_recruitment/hr_recruitment_demo.yml @@ -0,0 +1,109 @@ +- + !record {model: hr.applicant, id: hr_case_salesman0}: + date: !eval time.strftime('%Y-%m-01 10:35:50') + type_id: degree_graduate + priority: '2' + partner_name: 'Enrique Jones' + partner_mobile: '9963214587' + job_id: hr.job_jr_appli + stage_id: stage_job1 + name: 'Salesman' + partner_phone: '1236547890' + +- + !record {model: hr.applicant, id: hr_case_traineemca0}: + partner_address_id: base.res_partner_address_14 + date: !eval time.strftime('%Y-%m-10 18:15:00') + type_id: degree_bac5 + priority: '3' + user_id: base.user_demo + partner_name: 'Marie Justine' + state: 'open' + partner_mobile: '9988774455' + job_id: hr.job_jr_appli + stage_id: stage_job4 + name: 'Trainee - MCA' + partner_phone: '6633225' +- + !record {model: hr.applicant, id: hr_case_fresher0}: + date: !eval time.strftime('%Y-%m-15 16:10:00') + type_id: degree_licenced + priority: '1' + user_id: base.user_root + partner_name: 'Jose' + job_id: hr.job_jr_appli + stage_id: stage_job3 + name: 'Fresher' + partner_phone: '999666735' +- + !record {model: hr.applicant, id: hr_case_yrsexperienceinphp0}: + date: !eval time.strftime('%Y-%m-25 16:25:52') + job_id: hr.job_jr_appli + type_id: degree_bac5 + user_id: base.user_root + partner_name: 'Sandra Elvis' + state: 'cancel' + stage_id: stage_job6 + name: 'More than 5 yrs Experience in PHP' +- + !record {model: hr.applicant, id: hr_case_marketingjob0}: + date: !eval time.strftime('%Y-%m-26 17:15:32') + type_id: degree_licenced + user_id: base.user_demo + partner_name: 'John Bruno' + state: 'done' + job_id: hr.job_jr_appli + stage_id: stage_job5 + name: 'Marketing Job' +- + !record {model: hr.applicant, id: hr_case_financejob0}: + date: !eval time.strftime('%Y-%m-26 17:39:42') + type_id: degree_licenced + priority: '4' + partner_name: 'David Armstrong' + state: 'pending' + state: open + partner_mobile: '9966332214' + job_id: hr.job_jr_appli + stage_id: stage_job2 + name: 'Finance Job' + partner_phone: '33968745' +- + !record {model: hr.applicant, id: hr_case_traineemca1}: + partner_address_id: base.res_partner_address_14 + date: !eval time.strftime('%Y-%m-12 17:49:19') + type_id: degree_bac5 + partner_name: 'Tina Augustie' + state: 'open' + partner_mobile: '9898745745' + job_id: hr.job_jr_appli + stage_id: stage_job4 + name: 'Trainee - MCA' + partner_phone: '6630125' + +- + !record {model: hr.applicant, id: hr_case_programmer}: + partner_address_id: base.res_partner_address_14 + date: !eval time.strftime('%Y-%m-12 17:49:19') + type_id: degree_bac5 + partner_name: 'Shane Williams' + state: 'open' + partner_mobile: '9812398524' + stage_id: stage_job4 + name: 'Programmer' + partner_phone: '6630125' + job_id: hr.job_jr_appli + department_id: hr.dep_it + salary_expected: 11000.0 + +- + !record {model: hr.applicant, id: hr_case_advertisement}: + date: !eval time.strftime('%Y-%m-26 17:39:42') + type_id: degree_licenced + partner_id: base.res_partner_11 + partner_name: 'David Armstrong' + job_id: hr.job_jr_appli + stage_id: stage_job2 + name: 'Advertisement' + salary_expected: 11000.0 + diff --git a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py b/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py index d11a1f16775..291c16a7644 100644 --- a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py +++ b/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py @@ -48,8 +48,7 @@ class hired_employee(osv.osv_memory): """ if context is None: context = {} - self.pool.get('hr.applicant').case_close_with_emp(cr, uid,context.get('active_ids', [])) - return {} + return self.pool.get('hr.applicant').case_close_with_emp(cr, uid,context.get('active_ids', [])) hired_employee() diff --git a/addons/hr_timesheet/hr_timesheet_data.xml b/addons/hr_timesheet/hr_timesheet_data.xml index 5dc95cf9ddc..e9aa56d4646 100644 --- a/addons/hr_timesheet/hr_timesheet_data.xml +++ b/addons/hr_timesheet/hr_timesheet_data.xml @@ -2,9 +2,6 @@ - - - TS @@ -12,5 +9,10 @@ general + + + + + diff --git a/addons/l10n_br/i18n/oc.po b/addons/l10n_br/i18n/oc.po new file mode 100644 index 00000000000..371c4f5adeb --- /dev/null +++ b/addons/l10n_br/i18n/oc.po @@ -0,0 +1,36 @@ +# Occitan (post 1500) 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-07 06:40+0000\n" +"PO-Revision-Date: 2011-11-20 09:22+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: l10n_br +#: model:ir.actions.todo,note:l10n_br.config_call_account_template_brazilian_localization +msgid "" +"Generate Chart of Accounts from a Chart Template. You will be asked to pass " +"the name of the company, the chart template to follow, the no. of digits to " +"generate the code for your accounts and Bank account, currency to create " +"Journals. Thus,the pure copy of chart Template is generated.\n" +" This is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" + +#. module: l10n_br +#: model:ir.module.module,description:l10n_br.module_meta_information +#: model:ir.module.module,shortdesc:l10n_br.module_meta_information +msgid "Brazilian Localization" +msgstr "Localizacion brasilièra" diff --git a/addons/l10n_ch/__openerp__.py b/addons/l10n_ch/__openerp__.py index 1c6bb5688d7..cabd15e42de 100644 --- a/addons/l10n_ch/__openerp__.py +++ b/addons/l10n_ch/__openerp__.py @@ -63,7 +63,7 @@ TODO : """, "version" : "6.1", "author" : "Camptocamp", - "category" : "Finance", + 'category': 'Localization/Account Charts', "website": "http://www.camptocamp.com", "depends" : [ diff --git a/addons/l10n_es/i18n/oc.po b/addons/l10n_es/i18n/oc.po new file mode 100644 index 00000000000..3abe8d9ae4a --- /dev/null +++ b/addons/l10n_es/i18n/oc.po @@ -0,0 +1,39 @@ +# Occitan (post 1500) 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:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:22+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: l10n_es +#: model:ir.module.module,shortdesc:l10n_es.module_meta_information +msgid "Spanish Charts of Accounts (PGCE 2008)" +msgstr "Plan comptable espanhòl (PGCE 2008)" + +#. module: l10n_es +#: model:ir.module.module,description:l10n_es.module_meta_information +msgid "" +"Spanish Charts of Accounts (PGCE 2008)\n" +"\n" +"* Defines the following chart of account templates:\n" +" * Spanish General Chart of Accounts 2008.\n" +" * Spanish General Chart of Accounts 2008 for small and medium " +"companies.\n" +"* Defines templates for sale and purchase VAT.\n" +"* Defines tax code templates.\n" +"\n" +"Note: You should install the l10n_ES_account_balance_report module\n" +"for yearly account reporting (balance, profit & losses).\n" +msgstr "" diff --git a/addons/l10n_gt/i18n/oc.po b/addons/l10n_gt/i18n/oc.po new file mode 100644 index 00000000000..e077ec6c3c0 --- /dev/null +++ b/addons/l10n_gt/i18n/oc.po @@ -0,0 +1,39 @@ +# Occitan (post 1500) 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:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:23+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: l10n_gt +#: model:ir.module.module,shortdesc:l10n_gt.module_meta_information +msgid "Guatemala - Plan contable general" +msgstr "Guatemala - Plan comptable general" + +#. module: l10n_gt +#: model:ir.actions.todo,note:l10n_gt.config_call_account_template_gt_minimal +msgid "" +"Generar la nomenclatura contable a partir de un modelo. Deberá seleccionar " +"una compañía, el modelo a utilizar, el número de digitos a usar en la " +"nomenclatura, la moneda para crear los diarios." +msgstr "" + +#. module: l10n_gt +#: model:ir.module.module,description:l10n_gt.module_meta_information +msgid "" +"Agrega una nomenclatura contable para Guatemala. También icluye impuestos y " +"la moneda del Quetzal. -- Adds accounting chart for Guatemala. It also " +"includes taxes and the Quetzal currency" +msgstr "" diff --git a/addons/l10n_in/i18n/oc.po b/addons/l10n_in/i18n/oc.po new file mode 100644 index 00000000000..f52b722a33a --- /dev/null +++ b/addons/l10n_in/i18n/oc.po @@ -0,0 +1,46 @@ +# Occitan (post 1500) 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:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:23+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: l10n_in +#: model:ir.module.module,description:l10n_in.module_meta_information +msgid "" +"\n" +" Indian Accounting : chart of Account\n" +" " +msgstr "" +"\n" +" Comptabilitat indiana : plan de comptes\n" +" " + +#. module: l10n_in +#: model:ir.module.module,shortdesc:l10n_in.module_meta_information +msgid "Indian Chart of Account" +msgstr "Plan comptable indian" + +#. module: l10n_in +#: model:ir.actions.todo,note:l10n_in.config_call_account_template_in_minimal +msgid "" +"Generate Chart of Accounts from a Chart Template. You will be asked to pass " +"the name of the company, the chart template to follow, the no. of digits to " +"generate the code for your accounts and Bank account, currency to create " +"Journals. Thus,the pure copy of chart Template is generated.\n" +"\tThis is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" diff --git a/addons/l10n_th/i18n/th.po b/addons/l10n_th/i18n/th.po index 99c7d628c4d..d9b675d399b 100644 --- a/addons/l10n_th/i18n/th.po +++ b/addons/l10n_th/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-17 05:22+0000\n" -"X-Generator: Launchpad (build 14291)\n" +"X-Launchpad-Export-Date: 2011-11-18 05:13+0000\n" +"X-Generator: Launchpad (build 14299)\n" #. module: l10n_th #: model:ir.actions.todo,note:l10n_th.config_call_account_template_th diff --git a/addons/membership/membership_view.xml b/addons/membership/membership_view.xml index b14a72b278e..a1c39165c82 100644 --- a/addons/membership/membership_view.xml +++ b/addons/membership/membership_view.xml @@ -107,7 +107,7 @@ Membership Products product.product [('membership','=',True), ('type', '=', 'service')] - {'membership':True, 'type':'service'} + {'membership':True, 'type':'service', 'default_membership': True, 'default_type': 'service'} diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index 0fd75d7ca7a..356a762c0c5 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -491,6 +491,9 @@ class mrp_production(osv.osv): 'name': lambda x, y, z, c: x.pool.get('ir.sequence').get(y, z, 'mrp.production') or '/', 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.production', context=c), } + _sql_constraints = [ + ('name_uniq', 'unique(name, company_id)', 'Reference must be unique per Company!'), + ] _order = 'priority desc, date_planned asc'; def _check_qty(self, cr, uid, ids, context=None): diff --git a/addons/mrp/test/mrp_phantom_bom.yml b/addons/mrp/test/mrp_phantom_bom.yml index 41f1920dc2d..ca29b24ea23 100644 --- a/addons/mrp/test/mrp_phantom_bom.yml +++ b/addons/mrp/test/mrp_phantom_bom.yml @@ -179,11 +179,9 @@ - !record {model: mrp.production, id: mrp_production_mo0}: bom_id: mrp.mrp_bom_orangejuice0 - company_id: base.main_company date_planned: !eval datetime.today().strftime("%Y-%m-%d %H:%M:%S") location_dest_id: stock.stock_location_output location_src_id: stock.stock_location_stock - name: MO/00002 product_id: mrp.product_product_orangejuice0 product_lines: - name: Orange diff --git a/addons/mrp_subproduct/test/mrp_subproduct.yml b/addons/mrp_subproduct/test/mrp_subproduct.yml index 43bb6e7247e..2d05a448cde 100644 --- a/addons/mrp_subproduct/test/mrp_subproduct.yml +++ b/addons/mrp_subproduct/test/mrp_subproduct.yml @@ -106,14 +106,11 @@ - !record {model: mrp.production, id: mrp_production_mo0}: bom_id: mrp_bom_woodenchair0 - company_id: base.main_company date_planned: !eval datetime.today().strftime("%Y-%m-%d %H:%M:%S") location_dest_id: stock.stock_location_stock location_src_id: stock.stock_location_stock - name: MO/00004 product_id: product_product_woodenchair0 product_qty: 10.0 - product_uom: product.product_uom_unit product_uos_qty: 0.0 - I compute the data of production order. diff --git a/addons/point_of_sale/test/01_order_to_payment.yml b/addons/point_of_sale/test/01_order_to_payment.yml index fd8ffbaa3e0..7c6b4817666 100644 --- a/addons/point_of_sale/test/01_order_to_payment.yml +++ b/addons/point_of_sale/test/01_order_to_payment.yml @@ -74,7 +74,7 @@ - I click on the "Make Payment" wizard to pay the PoS order with a partial amount of 100.0 EUR - - !record {model: pos.make.payment, id: pos_make_payment_0, context: {'active_id': ref('pos_order_pos0'), 'active_ids': [ref('pos_order_pos0')]} }: + !record {model: pos.make.payment, id: pos_make_payment_0, context: '{"active_id": ref("pos_order_pos0"), "active_ids": [ref("pos_order_pos0")]}' }: amount: 100.0 - I click on the validate button to register the payment. @@ -95,7 +95,7 @@ - I pay the remaining balance. - - !record {model: pos.make.payment, id: pos_make_payment_1, context: {'active_id': [ref('pos_order_pos0')], 'active_ids': [ref('pos_order_pos0')]} }: + !record {model: pos.make.payment, id: pos_make_payment_1, context: '{"active_id": ref("pos_order_pos0"), "active_ids": [ref("pos_order_pos0")]}' }: amount: !eval > (450*2 + 300*3*1.05)*0.95-100.0 - diff --git a/addons/point_of_sale/test/02_order_to_invoice.yml b/addons/point_of_sale/test/02_order_to_invoice.yml index 3436e176678..0de4e518ebd 100644 --- a/addons/point_of_sale/test/02_order_to_invoice.yml +++ b/addons/point_of_sale/test/02_order_to_invoice.yml @@ -18,7 +18,7 @@ - I click on the "Make Payment" wizard to pay the PoS order - - !record {model: pos.make.payment, id: pos_make_payment_2, context: {'active_id': ref('pos_order_pos1'), 'active_ids': [ref('pos_order_pos1')]} }: + !record {model: pos.make.payment, id: pos_make_payment_2, context: '{"active_id": ref("pos_order_pos1"), "active_ids": [ref("pos_order_pos1")]}' }: amount: !eval > (450*2 + 300*3*1.05)*0.95 - diff --git a/addons/project/project.py b/addons/project/project.py index 5ab7af9de79..589d3ebde97 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -78,7 +78,7 @@ class project(osv.osv): return {'value':{'contact_id': False}} addr = partner_obj.address_get(cr, uid, [part], ['contact']) val = {'contact_id': addr['contact']} - if pricelist_id in self._columns: + if 'pricelist_id' in self.fields_get(cr, uid, context=context): pricelist = partner_obj.read(cr, uid, part, ['property_product_pricelist'], context=context) pricelist_id = pricelist.get('property_product_pricelist', False) and pricelist.get('property_product_pricelist')[0] or False val['pricelist_id'] = pricelist_id @@ -424,21 +424,53 @@ class task(osv.osv): _log_create = True _date_name = "date_start" - def _read_group_type_id(self, cr, uid, ids, domain, context=None): - context = context or {} - stage_obj = self.pool.get('project.task.type') - stage_ids = stage_obj.search(cr, uid, ['|',('id','in',ids)] + [('project_default','=',1)], context=context) - return stage_obj.name_get(cr, uid, stage_ids, context=context) - def _read_group_user_id(self, cr, uid, ids, domain, context={}): - context = context or {} - if type(context.get('project_id', None)) not in (int, long): - return None - proj = self.pool.get('project.project').browse(cr, uid, context['project_id'], context=context) - ids += map(lambda x: x.id, proj.members) - stage_obj = self.pool.get('res.users') - stage_ids = stage_obj.search(cr, uid, [('id','in',ids)], context=context) - return stage_obj.name_get(cr, uid, ids, context=context) + def _resolve_project_id_from_context(self, cr, uid, context=None): + """Return ID of project based on the value of 'project_id' + context key, or None if it cannot be resolved to a single project. + """ + if context is None: context = {} + if type(context.get('project_id')) in (int, long): + project_id = context['project_id'] + return project_id + if isinstance(context.get('project_id'), basestring): + project_name = context['project_id'] + project_ids = self.pool.get('project.project').name_search(cr, uid, name=project_name) + if len(project_ids) == 1: + return project_ids[0][0] + + def _read_group_type_id(self, cr, uid, ids, domain, read_group_order=None, context=None): + stage_obj = self.pool.get('project.task.type') + project_id = self._resolve_project_id_from_context(cr, uid, context=context) + order = stage_obj._order + if read_group_order == 'type_id desc': + # lame way to allow reverting search, should just work in the trivial case + order = '%s desc' % order + if project_id: + domain = ['|', ('id','in',ids), ('project_ids','in',project_id)] + else: + domain = ['|', ('id','in',ids), ('project_default','=',1)] + stage_ids = stage_obj.search(cr, uid, domain, order=order, context=context) + result = stage_obj.name_get(cr, uid, stage_ids, context=context) + # restore order of the search + result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) + return result + + def _read_group_user_id(self, cr, uid, ids, domain, read_group_order=None, context=None): + res_users = self.pool.get('res.users') + project_id = self._resolve_project_id_from_context(cr, uid, context=context) + if project_id: + ids += self.pool.get('project.project').read(cr, uid, project_id, ['members'], context=context)['members'] + order = res_users._order + # lame way to allow reverting search, should just work in the trivial case + if read_group_order == 'user_id desc': + order = '%s desc' % order + # de-duplicate and apply search order + ids = res_users.search(cr, uid, [('id','in',ids)], order=order, context=context) + result = res_users.name_get(cr, uid, ids, context=context) + # restore order of the search + result.sort(lambda x,y: cmp(ids.index(x[0]), ids.index(y[0]))) + return result _group_by_full = { 'type_id': _read_group_type_id, @@ -560,7 +592,12 @@ class task(osv.osv): 'state': fields.selection([('draft', 'New'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done'), ('cancelled', 'Cancelled')], 'State', readonly=True, required=True, help='If the task is created the state is \'Draft\'.\n If the task is started, the state becomes \'In Progress\'.\n If review is needed the task is in \'Pending\' state.\ \n If the task is over, the states is set to \'Done\'.'), - 'kanban_state': fields.selection([('blocked', 'Blocked'),('normal', 'Normal'),('done', 'Done')], 'Kanban State', readonly=True, required=False), + 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready To Pull')], 'Kanban State', + help="A task's kanban state indicates special situations affecting it:\n" + " * Normal is the default situation\n" + " * Blocked indicates something is preventing the progress of this task\n" + " * Ready To Pull indicates the task is ready to be pulled to the next stage", + readonly=True, required=False), 'create_date': fields.datetime('Create Date', readonly=True,select=True), 'date_start': fields.datetime('Starting Date',select=True), 'date_end': fields.datetime('Ending Date',select=True), @@ -840,37 +877,39 @@ class task(osv.osv): self.write(cr, uid, ids, {'state': 'draft'}, context=context) return True - def do_delegate(self, cr, uid, task_id, delegate_data={}, context=None): + def do_delegate(self, cr, uid, ids, delegate_data={}, context=None): """ Delegate Task to another users. """ - task = self.browse(cr, uid, task_id, context=context) - self.copy(cr, uid, task.id, { - 'name': delegate_data['name'], - 'user_id': delegate_data['user_id'], - 'planned_hours': delegate_data['planned_hours'], - 'remaining_hours': delegate_data['planned_hours'], - 'parent_ids': [(6, 0, [task.id])], - 'state': 'draft', - 'description': delegate_data['new_task_description'] or '', - 'child_ids': [], - 'work_ids': [] - }, context=context) - newname = delegate_data['prefix'] or '' - self.write(cr, uid, [task.id], { - 'remaining_hours': delegate_data['planned_hours_me'], - 'planned_hours': delegate_data['planned_hours_me'] + (task.effective_hours or 0.0), - 'name': newname, - }, context=context) - if delegate_data['state'] == 'pending': - self.do_pending(cr, uid, [task.id], context) - else: - self.do_close(cr, uid, [task.id], context=context) - user_pool = self.pool.get('res.users') - delegate_user = user_pool.browse(cr, uid, delegate_data['user_id'], context=context) - message = _("The task '%s' has been delegated to %s.") % (delegate_data['name'], delegate_user.name) - self.log(cr, uid, task.id, message) - return True + assert delegate_data['user_id'], _("Delegated User should be specified") + delegrated_tasks = {} + for task in self.browse(cr, uid, ids, context=context): + delegrated_task_id = self.copy(cr, uid, task.id, { + 'name': delegate_data['name'], + 'project_id': delegate_data['project_id'] and delegate_data['project_id'][0] or False, + 'user_id': delegate_data['user_id'] and delegate_data['user_id'][0] or False, + 'planned_hours': delegate_data['planned_hours'] or 0.0, + 'parent_ids': [(6, 0, [task.id])], + 'state': 'draft', + 'description': delegate_data['new_task_description'] or '', + 'child_ids': [], + 'work_ids': [] + }, context=context) + newname = delegate_data['prefix'] or '' + task.write({ + 'remaining_hours': delegate_data['planned_hours_me'], + 'planned_hours': delegate_data['planned_hours_me'] + (task.effective_hours or 0.0), + 'name': newname, + }, context=context) + if delegate_data['state'] == 'pending': + self.do_pending(cr, uid, task.id, context=context) + elif delegate_data['state'] == 'done': + self.do_close(cr, uid, task.id, context=context) + + message = _("The task '%s' has been delegated to %s.") % (delegate_data['name'], delegate_data['user_id'][1]) + self.log(cr, uid, task.id, message) + delegrated_tasks[task.id] = delegrated_task_id + return delegrated_tasks def do_pending(self, cr, uid, ids, context={}): self.write(cr, uid, ids, {'state': 'pending'}, context=context) @@ -933,6 +972,20 @@ class task(osv.osv): def prev_type(self, cr, uid, ids, *args): return self._change_type(cr, uid, ids, False, *args) + # Overridden to reset the kanban_state to normal whenever + # the stage (type_id) of the task changes. + def write(self, cr, uid, ids, vals, context=None): + if isinstance(ids, (int, long)): + ids = [ids] + if vals and not 'kanban_state' in vals and 'type_id' in vals: + new_stage = vals.get('type_id') + vals_reset_kstate = dict(vals, kanban_state='normal') + for t in self.browse(cr, uid, ids, context=context): + write_vals = vals_reset_kstate if t.type_id != new_stage else vals + super(task,self).write(cr, uid, [t.id], write_vals, context=context) + return True + return super(task,self).write(cr, uid, ids, vals, context=context) + def unlink(self, cr, uid, ids, context=None): if context == None: context = {} diff --git a/addons/project/wizard/project_task_delegate.py b/addons/project/wizard/project_task_delegate.py index eaf5dea3084..0b4457d5e7f 100644 --- a/addons/project/wizard/project_task_delegate.py +++ b/addons/project/wizard/project_task_delegate.py @@ -31,14 +31,23 @@ class project_task_delegate(osv.osv_memory): _columns = { 'name': fields.char('Delegated Title', size=64, required=True, help="New title of the task delegated to the user"), - 'prefix': fields.char('Your Task Title', size=64, required=True, help="Title for your validation task"), + 'prefix': fields.char('Your Task Title', size=64, help="Title for your validation task"), + 'project_id': fields.many2one('project.project', 'Project', help="User you want to delegate this task to"), 'user_id': fields.many2one('res.users', 'Assign To', required=True, help="User you want to delegate this task to"), 'new_task_description': fields.text('New Task Description', help="Reinclude the description of the task in the task of the user"), 'planned_hours': fields.float('Planned Hours', help="Estimated time to close this task by the delegated user"), - 'planned_hours_me': fields.float('Hours to Validate', required=True, help="Estimated time for you to validate the work done by the user to whom you delegate this task"), - 'state': fields.selection([('pending','Pending'), ('done','Done'), ], 'Validation State', required=True, help="New state of your own task. Pending will be reopened automatically when the delegated task is closed") + 'planned_hours_me': fields.float('Hours to Validate', help="Estimated time for you to validate the work done by the user to whom you delegate this task"), + 'state': fields.selection([('pending','Pending'), ('done','Done'), ], 'Validation State', help="New state of your own task. Pending will be reopened automatically when the delegated task is closed") } + def onchange_project_id(self, cr, uid, ids, project_id=False, context=None): + project_project = self.pool.get('project.project') + if not project_id: + return {'value':{'user_id': False}} + project = project_project.browse(cr, uid, project_id, context=context) + return {'value': {'user_id': project.user_id and project.user_id.id or False}} + + def default_get(self, cr, uid, fields, context=None): """ This function gets default values @@ -47,10 +56,15 @@ class project_task_delegate(osv.osv_memory): if context is None: context = {} record_id = context and context.get('active_id', False) or False + if not record_id: + return res task_pool = self.pool.get('project.task') task = task_pool.browse(cr, uid, record_id, context=context) task_name =tools.ustr(task.name) + if 'project_id' in fields: + res.update({'project_id': task.project_id and task.project_id.id}) + if 'name' in fields: if task_name.startswith(_('CHECK: ')): newname = tools.ustr(task_name).replace(_('CHECK: '), '') @@ -105,9 +119,17 @@ class project_task_delegate(osv.osv_memory): task_id = context.get('active_id', False) task_pool = self.pool.get('project.task') delegate_data = self.read(cr, uid, ids, context=context)[0] - delegate_data['user_id'] = delegate_data['user_id'][0] - delegate_data['name'] = tools.ustr(delegate_data['name']) - task_pool.do_delegate(cr, uid, task_id, delegate_data, context=context) - return {'type': 'ir.actions.act_window_close'} + delegated_tasks = task_pool.do_delegate(cr, uid, [task_id], delegate_data, context=context) + models_data = self.pool.get('ir.model.data') + + action_model, action_id = models_data.get_object_reference(cr, uid, 'project', 'action_view_task') + view_model, task_view_form_id = models_data.get_object_reference(cr, uid, 'project', 'view_task_form2') + view_model, task_view_tree_id = models_data.get_object_reference(cr, uid, 'project', 'view_task_tree2') + action = self.pool.get(action_model).read(cr, uid, action_id, context=context) + action['res_id'] = delegated_tasks[task_id] + action['view_id'] = False + action['views'] = [(task_view_form_id, 'form'), (task_view_tree_id, 'tree')] + action['help'] = False + return action project_task_delegate() diff --git a/addons/project/wizard/project_task_delegate_view.xml b/addons/project/wizard/project_task_delegate_view.xml index f9b27af05b3..072325c2b53 100644 --- a/addons/project/wizard/project_task_delegate_view.xml +++ b/addons/project/wizard/project_task_delegate_view.xml @@ -8,18 +8,19 @@ form
+ + - - - + + - + - - + + @@ -40,7 +41,6 @@ form form - {'record_id' : active_id} new diff --git a/addons/project_retro_planning/i18n/oc.po b/addons/project_retro_planning/i18n/oc.po new file mode 100644 index 00000000000..7451fd7b147 --- /dev/null +++ b/addons/project_retro_planning/i18n/oc.po @@ -0,0 +1,47 @@ +# Occitan (post 1500) 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:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:25+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: project_retro_planning +#: model:ir.model,name:project_retro_planning.model_project_project +msgid "Project" +msgstr "Projècte" + +#. module: project_retro_planning +#: model:ir.module.module,shortdesc:project_retro_planning.module_meta_information +msgid "Project Retro planning" +msgstr "Retroplanificacion de projèctes" + +#. module: project_retro_planning +#: model:ir.module.module,description:project_retro_planning.module_meta_information +msgid "" +"\n" +" - If end date of project is changed\n" +" then the deadline date and start date for all the tasks will " +"change accordingly " +msgstr "" + +#. module: project_retro_planning +#: constraint:project.project:0 +msgid "Error! project start-date must be lower then project end-date." +msgstr "" + +#. module: project_retro_planning +#: constraint:project.project:0 +msgid "Error! You cannot assign escalation to the same project!" +msgstr "" diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index d2154a9630d..0dc015834a0 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -227,7 +227,7 @@ class purchase_order(osv.osv): 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'purchase.order', context=c), } _sql_constraints = [ - ('name_uniq', 'unique(name)', 'Order Reference must be unique !'), + ('name_uniq', 'unique(name, company_id)', 'Order Reference must be unique per Company!'), ] _name = "purchase.order" _description = "Purchase Order" diff --git a/addons/report_designer/i18n/th.po b/addons/report_designer/i18n/th.po new file mode 100644 index 00000000000..1625e20012d --- /dev/null +++ b/addons/report_designer/i18n/th.po @@ -0,0 +1,98 @@ +# Thai 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:15+0000\n" +"PO-Revision-Date: 2011-11-17 07:34+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Thai \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-18 05:13+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: report_designer +#: model:ir.actions.act_window,name:report_designer.action_report_designer_installer +#: view:report_designer.installer:0 +msgid "Reporting Tools Configuration" +msgstr "" + +#. module: report_designer +#: field:report_designer.installer,base_report_creator:0 +msgid "Query Builder" +msgstr "" + +#. module: report_designer +#: view:report_designer.installer:0 +msgid "Configure" +msgstr "" + +#. module: report_designer +#: view:report_designer.installer:0 +msgid "title" +msgstr "" + +#. module: report_designer +#: model:ir.model,name:report_designer.model_report_designer_installer +msgid "report_designer.installer" +msgstr "" + +#. module: report_designer +#: field:report_designer.installer,config_logo:0 +msgid "Image" +msgstr "" + +#. module: report_designer +#: field:report_designer.installer,base_report_designer:0 +msgid "OpenOffice Report Designer" +msgstr "" + +#. module: report_designer +#: model:ir.module.module,shortdesc:report_designer.module_meta_information +msgid "Reporting Tools" +msgstr "" + +#. module: report_designer +#: view:report_designer.installer:0 +msgid "" +"OpenERP's built-in reporting abilities can be improved even further with " +"some of the following applications" +msgstr "" + +#. module: report_designer +#: view:report_designer.installer:0 +msgid "Configure Reporting Tools" +msgstr "" + +#. module: report_designer +#: help:report_designer.installer,base_report_creator:0 +msgid "" +"Allows you to create any statistic reports on several objects. It's a SQL " +"query builder and browser for end users." +msgstr "" + +#. module: report_designer +#: help:report_designer.installer,base_report_designer:0 +msgid "" +"Adds wizards to Import/Export .SXW report which you can modify in " +"OpenOffice.Once you have modified it you can upload the report using the " +"same wizard." +msgstr "" + +#. module: report_designer +#: model:ir.module.module,description:report_designer.module_meta_information +msgid "" +"Installer for reporting tools selection\n" +" " +msgstr "" + +#. module: report_designer +#: field:report_designer.installer,progress:0 +msgid "Configuration Progress" +msgstr "" diff --git a/addons/sale/i18n/oc.po b/addons/sale/i18n/oc.po new file mode 100644 index 00000000000..b40a8630c3d --- /dev/null +++ b/addons/sale/i18n/oc.po @@ -0,0 +1,2059 @@ +# Occitan (post 1500) 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:16+0000\n" +"PO-Revision-Date: 2011-11-20 09:33+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: sale +#: view:board.board:0 +#: model:ir.actions.act_window,name:sale.action_sales_by_salesman +msgid "Sales by Salesman in last 90 days" +msgstr "" + +#. module: sale +#: help:sale.installer,delivery:0 +msgid "Allows you to compute delivery costs on your quotations." +msgstr "" + +#. module: sale +#: help:sale.order,picking_policy:0 +msgid "" +"If you don't have enough stock available to deliver all at once, do you " +"accept partial shipments or not?" +msgstr "" + +#. module: sale +#: help:sale.order,partner_shipping_id:0 +msgid "Shipping address for current sales order." +msgstr "" + +#. module: sale +#: field:sale.advance.payment.inv,qtty:0 +#: report:sale.order:0 +msgid "Quantity" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,day:0 +msgid "Day" +msgstr "" + +#. module: sale +#: model:process.transition.action,name:sale.process_transition_action_cancelorder0 +#: view:sale.order:0 +msgid "Cancel Order" +msgstr "" + +#. module: sale +#: view:sale.config.picking_policy:0 +msgid "Configure Sales Order Logistics" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:603 +#, python-format +msgid "The quotation '%s' has been converted to a sales order." +msgstr "" + +#. module: sale +#: selection:sale.order,order_policy:0 +msgid "Payment Before Delivery" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice.py:42 +#, python-format +msgid "Warning !" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "VAT" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_saleorderprocurement0 +msgid "Drives procurement orders for every sales order line." +msgstr "" + +#. module: sale +#: selection:sale.config.picking_policy,picking_policy:0 +msgid "All at Once" +msgstr "" + +#. module: sale +#: field:sale.order,project_id:0 +#: view:sale.report:0 +#: field:sale.report,analytic_account_id:0 +#: field:sale.shop,project_id:0 +msgid "Analytic Account" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,help:sale.action_order_line_tree2 +msgid "" +"Here is a list of each sales order line to be invoiced. You can invoice " +"sales orders partially, by lines of sales order. You do not need this list " +"if you invoice from the delivery orders or if you invoice sales totally." +msgstr "" + +#. module: sale +#: model:process.node,name:sale.process_node_saleprocurement0 +msgid "Procurement Order" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Order Line" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,help:sale.action_order_form +msgid "" +"Sales Orders help you manage quotations and orders from your customers. " +"OpenERP suggests that you start by creating a quotation. Once it is " +"confirmed, the quotation will be converted into a Sales Order. OpenERP can " +"handle several types of products so that a sales order may trigger tasks, " +"delivery orders, manufacturing orders, purchases and so on. Based on the " +"configuration of the sales order, a draft invoice will be generated so that " +"you just have to confirm it when you want to bill your customer." +msgstr "" + +#. module: sale +#: help:sale.order,invoice_quantity:0 +msgid "" +"The sale order will automatically create the invoice proposition (draft " +"invoice). Ordered and delivered quantities may not be the same. You have to " +"choose if you want your invoice based on ordered or shipped quantities. If " +"the product is a service, shipped quantities means hours spent on the " +"associated tasks." +msgstr "" + +#. module: sale +#: field:sale.shop,payment_default_id:0 +msgid "Default Payment Term" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_config_picking_policy +msgid "Configure Picking Policy for Sales Order" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: view:sale.order.line:0 +#: field:sale.order.line,state:0 +#: view:sale.report:0 +msgid "State" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Disc.(%)" +msgstr "" + +#. module: sale +#: model:process.transition.action,name:sale.process_transition_action_forceassignation0 +msgid "Force Assignation" +msgstr "" + +#. module: sale +#: help:sale.make.invoice,grouped:0 +msgid "Check the box to group the invoices for the same customers" +msgstr "" + +#. module: sale +#: selection:sale.order,invoice_quantity:0 +msgid "Ordered Quantities" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Sales by Salesman" +msgstr "" + +#. module: sale +#: field:sale.order.line,move_ids:0 +msgid "Inventory Moves" +msgstr "" + +#. module: sale +#: field:sale.order,name:0 +#: field:sale.order.line,order_id:0 +msgid "Order Reference" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Other Information" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Dates" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_invoiceafterdelivery0 +msgid "" +"The invoice is created automatically if the shipping policy is 'Invoice from " +"pick' or 'Invoice on order after delivery'." +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_make_invoice +msgid "Sales Make Invoice" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Recreate Packing" +msgstr "" + +#. module: sale +#: field:sale.order.line,discount:0 +msgid "Discount (%)" +msgstr "" + +#. module: sale +#: help:res.company,security_lead:0 +msgid "" +"This is the days added to what you promise to customers for security purpose" +msgstr "" + +#. module: sale +#: view:board.board:0 +#: model:ir.actions.act_window,name:sale.open_board_sales_manager +#: model:ir.ui.menu,name:sale.menu_board_sales_manager +msgid "Sales Manager Dashboard" +msgstr "" + +#. module: sale +#: field:sale.order.line,product_packaging:0 +msgid "Packaging" +msgstr "" + +#. module: sale +#: model:process.transition,name:sale.process_transition_saleinvoice0 +msgid "From a sales order" +msgstr "" + +#. module: sale +#: field:sale.shop,name:0 +msgid "Shop Name" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:1014 +#, python-format +msgid "No Customer Defined !" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_tree2 +msgid "Sales in Exception" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Set to Draft" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Conditions" +msgstr "" + +#. module: sale +#: help:sale.order,order_policy:0 +msgid "" +"The Shipping Policy is used to synchronise invoice and delivery operations.\n" +" - The 'Pay Before delivery' choice will first generate the invoice and " +"then generate the picking order after the payment of this invoice.\n" +" - The 'Shipping & Manual Invoice' will create the picking order directly " +"and wait for the user to manually click on the 'Invoice' button to generate " +"the draft invoice.\n" +" - The 'Invoice On Order After Delivery' choice will generate the draft " +"invoice based on sales order after all picking lists have been finished.\n" +" - The 'Invoice From The Picking' choice is used to create an invoice " +"during the picking process." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:939 +#, python-format +msgid "" +"There is no income category account defined in default Properties for " +"Product Category or Fiscal Position is not defined !" +msgstr "" + +#. module: sale +#: view:sale.installer:0 +msgid "Configure" +msgstr "" + +#. module: sale +#: constraint:stock.move:0 +msgid "You try to assign a lot which is not from the same product" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:620 +#, python-format +msgid "invalid mode for test_state" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "June" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:584 +#, python-format +msgid "Could not cancel this sales order !" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_report +msgid "Sales Orders Statistics" +msgstr "" + +#. module: sale +#: help:sale.order,project_id:0 +msgid "The analytic account related to a sales order." +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "October" +msgstr "" + +#. module: sale +#: view:board.board:0 +#: model:ir.actions.act_window,name:sale.action_quotation_for_sale +#: view:sale.order:0 +#: view:sale.report:0 +msgid "Quotations" +msgstr "" + +#. module: sale +#: help:sale.order,pricelist_id:0 +msgid "Pricelist for current sales order." +msgstr "" + +#. module: sale +#: selection:sale.config.picking_policy,step:0 +msgid "Delivery Order Only" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "TVA :" +msgstr "" + +#. module: sale +#: help:sale.order.line,delay:0 +msgid "" +"Number of days between the order confirmation the shipping of the products " +"to the customer" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Quotation Date" +msgstr "" + +#. module: sale +#: field:sale.order,fiscal_position:0 +msgid "Fiscal Position" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: view:sale.order.line:0 +msgid "UoM" +msgstr "" + +#. module: sale +#: field:sale.order.line,number_packages:0 +msgid "Number Packages" +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.report,state:0 +msgid "In Progress" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_confirmquotation0 +msgid "" +"The salesman confirms the quotation. The state of the sales order becomes " +"'In progress' or 'Manual in progress'." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:971 +#, python-format +msgid "You must first cancel stock moves attached to this sales order line." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:1042 +#, python-format +msgid "(n/a)" +msgstr "" + +#. module: sale +#: help:sale.advance.payment.inv,product_id:0 +msgid "" +"Select a product of type service which is called 'Advance Product'. You may " +"have to create it and set it as a default value on this field." +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Tel. :" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice_advance.py:64 +#, python-format +msgid "" +"You cannot make an advance on a sales order " +"that is defined as 'Automatic Invoice after delivery'." +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: field:sale.order,note:0 +#: view:sale.order.line:0 +#: field:sale.order.line,notes:0 +msgid "Notes" +msgstr "" + +#. module: sale +#: help:sale.order,partner_invoice_id:0 +msgid "Invoice address for current sales order." +msgstr "" + +#. module: sale +#: view:sale.installer:0 +msgid "Enhance your core Sales Application with additional functionalities." +msgstr "" + +#. module: sale +#: field:sale.order,invoiced_rate:0 +#: field:sale.order.line,invoiced:0 +msgid "Invoiced" +msgstr "" + +#. module: sale +#: model:process.node,name:sale.process_node_deliveryorder0 +msgid "Delivery Order" +msgstr "" + +#. module: sale +#: field:sale.order,date_confirm:0 +msgid "Confirmation Date" +msgstr "" + +#. module: sale +#: field:sale.order.line,address_allotment_id:0 +msgid "Allotment Partner" +msgstr "" + +#. module: sale +#: sql_constraint:sale.order:0 +msgid "Order Reference must be unique !" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "March" +msgstr "" + +#. module: sale +#: help:sale.order,amount_total:0 +msgid "The total amount." +msgstr "" + +#. module: sale +#: field:sale.order.line,price_subtotal:0 +msgid "Subtotal" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Invoice address :" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_saleorderprocurement0 +msgid "" +"For every sales order line, a procurement order is created to supply the " +"sold product." +msgstr "" + +#. module: sale +#: help:sale.order,incoterm:0 +msgid "" +"Incoterm which stands for 'International Commercial terms' implies its a " +"series of sales terms which are used in the commercial transaction." +msgstr "" + +#. module: sale +#: field:sale.order,partner_invoice_id:0 +msgid "Invoice Address" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Search Uninvoiced Lines" +msgstr "" + +#. module: sale +#: model:ir.actions.report.xml,name:sale.report_sale_order +msgid "Quotation / Order" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,nbr:0 +msgid "# of Lines" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_open_invoice +msgid "Sales Open Invoice" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_order_line +#: field:stock.move,sale_line_id:0 +msgid "Sales Order Line" +msgstr "" + +#. module: sale +#: view:sale.config.picking_policy:0 +msgid "Setup your sales workflow and default values." +msgstr "" + +#. module: sale +#: field:sale.shop,warehouse_id:0 +msgid "Warehouse" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Order N°" +msgstr "" + +#. module: sale +#: field:sale.order,order_line:0 +msgid "Order Lines" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Untaxed amount" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_line_tree2 +#: model:ir.ui.menu,name:sale.menu_invoicing_sales_order_lines +msgid "Lines to Invoice" +msgstr "" + +#. module: sale +#: field:sale.order.line,product_uom_qty:0 +msgid "Quantity (UoM)" +msgstr "" + +#. module: sale +#: field:sale.order,create_date:0 +msgid "Creation Date" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_line_tree3 +msgid "Uninvoiced and Delivered Lines" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Total :" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "My Sales" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:290 +#: code:addons/sale/sale.py:966 +#: code:addons/sale/sale.py:1165 +#, python-format +msgid "Invalid action !" +msgstr "" + +#. module: sale +#: field:sale.order,pricelist_id:0 +#: field:sale.report,pricelist_id:0 +#: field:sale.shop,pricelist_id:0 +msgid "Pricelist" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,product_uom_qty:0 +msgid "# of Qty" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Order Date" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +#: field:sale.report,shipped:0 +msgid "Shipped" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_tree5 +msgid "All Quotations" +msgstr "" + +#. module: sale +#: selection:sale.order,order_policy:0 +msgid "Invoice On Order After Delivery" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "September" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,categ_id:0 +msgid "Category of Product" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Taxes :" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Stock Moves" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid " Year " +msgstr "" + +#. module: sale +#: field:sale.order,state:0 +#: field:sale.report,state:0 +msgid "Order State" +msgstr "" + +#. module: sale +#: view:sale.make.invoice:0 +#: view:sale.order.line.make.invoice:0 +msgid "Do you really want to create the invoice(s) ?" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Sales By Month" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:970 +#, python-format +msgid "Could not cancel sales order line!" +msgstr "" + +#. module: sale +#: field:res.company,security_lead:0 +msgid "Security Days" +msgstr "" + +#. module: sale +#: model:process.transition,name:sale.process_transition_saleorderprocurement0 +msgid "Procurement of sold material" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Create Final Invoice" +msgstr "" + +#. module: sale +#: field:sale.order,partner_shipping_id:0 +msgid "Shipping Address" +msgstr "" + +#. module: sale +#: help:sale.order,shipped:0 +msgid "" +"It indicates that the sales order has been delivered. This field is updated " +"only after the scheduler(s) have been launched." +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: sale +#: model:ir.module.module,description:sale.module_meta_information +msgid "" +"\n" +" The base module to manage quotations and sales orders.\n" +"\n" +" * Workflow with validation steps:\n" +" - Quotation -> Sales order -> Invoice\n" +" * Invoicing methods:\n" +" - Invoice on order (before or after shipping)\n" +" - Invoice on delivery\n" +" - Invoice on timesheets\n" +" - Advance invoice\n" +" * Partners preferences (shipping, invoicing, incoterm, ...)\n" +" * Products stocks and prices\n" +" * Delivery methods:\n" +" - all at once, multi-parcel\n" +" - delivery costs\n" +" * Dashboard for salesman that includes:\n" +" * Your open quotations\n" +" * Top 10 sales of the month\n" +" * Cases statistics\n" +" * Graph of sales by product\n" +" * Graph of cases of the month\n" +" " +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_shop +#: view:sale.shop:0 +msgid "Sales Shop" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_res_company +msgid "Companies" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "November" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "History" +msgstr "" + +#. module: sale +#: field:sale.config.picking_policy,picking_policy:0 +msgid "Picking Default Policy" +msgstr "" + +#. module: sale +#: help:sale.order,invoice_ids:0 +msgid "" +"This is the list of invoices that have been generated for this sales order. " +"The same sales order may have been invoiced in several times (by line for " +"example)." +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Your Reference" +msgstr "" + +#. module: sale +#: help:sale.order,partner_order_id:0 +msgid "" +"The name and address of the contact who requested the order or quotation." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:966 +#, python-format +msgid "You cannot cancel a sales order line that has already been invoiced !" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: view:sale.order.line:0 +msgid "Qty" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "References" +msgstr "" + +#. module: sale +#: model:process.transition.action,name:sale.process_transition_action_cancel0 +#: model:process.transition.action,name:sale.process_transition_action_cancel1 +#: model:process.transition.action,name:sale.process_transition_action_cancel2 +#: view:sale.advance.payment.inv:0 +#: view:sale.make.invoice:0 +#: view:sale.order.line:0 +#: view:sale.order.line.make.invoice:0 +msgid "Cancel" +msgstr "" + +#. module: sale +#: field:sale.installer,sale_order_dates:0 +msgid "Sales Order Dates" +msgstr "" + +#. module: sale +#: selection:sale.order.line,state:0 +msgid "Exception" +msgstr "" + +#. module: sale +#: model:process.transition,name:sale.process_transition_invoice0 +#: model:process.transition,name:sale.process_transition_invoiceafterdelivery0 +#: model:process.transition.action,name:sale.process_transition_action_createinvoice0 +#: view:sale.advance.payment.inv:0 +#: view:sale.order.line:0 +msgid "Create Invoice" +msgstr "" + +#. module: sale +#: field:sale.installer,sale_margin:0 +msgid "Margins in Sales Orders" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Total Tax Excluded" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Compute" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Sales by Partner" +msgstr "" + +#. module: sale +#: field:sale.order,partner_order_id:0 +msgid "Ordering Contact" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_view_sale_open_invoice +#: view:sale.open.invoice:0 +msgid "Open Invoice" +msgstr "" + +#. module: sale +#: report:sale.order:0 +#: view:sale.order.line:0 +msgid "Price" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_sale_installer +#: view:sale.config.picking_policy:0 +#: view:sale.installer:0 +msgid "Sales Application Configuration" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,price_total:0 +msgid "Total Price" +msgstr "" + +#. module: sale +#: selection:sale.order.line,type:0 +msgid "on order" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_invoiceafterdelivery0 +msgid "Based on the shipped or on the ordered quantities." +msgstr "" + +#. module: sale +#: field:sale.order,picking_ids:0 +msgid "Related Picking" +msgstr "" + +#. module: sale +#: field:sale.config.picking_policy,name:0 +msgid "Name" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Shipping address :" +msgstr "" + +#. module: sale +#: view:board.board:0 +#: model:ir.actions.act_window,name:sale.action_sales_by_partner +msgid "Sales per Customer in last 90 days" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_quotation0 +msgid "Draft state of sales order" +msgstr "" + +#. module: sale +#: model:process.transition,name:sale.process_transition_deliver0 +msgid "Create Delivery Order" +msgstr "" + +#. module: sale +#: field:sale.installer,delivery:0 +msgid "Delivery Costs" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Total Tax Included" +msgstr "" + +#. module: sale +#: model:process.transition,name:sale.process_transition_packing0 +msgid "Create Pick List" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Sales by Product Category" +msgstr "" + +#. module: sale +#: selection:sale.order,picking_policy:0 +msgid "Partial Delivery" +msgstr "" + +#. module: sale +#: model:process.transition,name:sale.process_transition_confirmquotation0 +msgid "Confirm Quotation" +msgstr "" + +#. module: sale +#: help:sale.order,origin:0 +msgid "Reference of the document that generated this sales order request." +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: view:sale.order.line:0 +#: view:sale.report:0 +msgid "Group By..." +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Recreate Invoice" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.outgoing_picking_list_to_invoice +#: model:ir.ui.menu,name:sale.menu_action_picking_list_to_invoice +msgid "Deliveries to Invoice" +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.report,state:0 +msgid "Waiting Schedule" +msgstr "" + +#. module: sale +#: field:sale.order.line,type:0 +msgid "Procurement Method" +msgstr "" + +#. module: sale +#: view:sale.config.picking_policy:0 +#: view:sale.installer:0 +msgid "title" +msgstr "" + +#. module: sale +#: model:process.node,name:sale.process_node_packinglist0 +msgid "Pick List" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Order date" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_packinglist0 +msgid "Document of the move to the output or to the customer." +msgstr "" + +#. module: sale +#: model:process.transition.action,name:sale.process_transition_action_validate0 +msgid "Validate" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Confirm Order" +msgstr "" + +#. module: sale +#: model:process.transition,name:sale.process_transition_saleprocurement0 +msgid "Create Procurement Order" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: field:sale.order,amount_tax:0 +#: field:sale.order.line,tax_id:0 +msgid "Taxes" +msgstr "" + +#. module: sale +#: field:sale.order,order_policy:0 +msgid "Shipping Policy" +msgstr "" + +#. module: sale +#: help:sale.order,create_date:0 +msgid "Date on which sales order is created." +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: sale +#: view:sale.make.invoice:0 +#: view:sale.order.line.make.invoice:0 +msgid "Create Invoices" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Extra Info" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Fax :" +msgstr "" + +#. module: sale +#: field:sale.advance.payment.inv,amount:0 +msgid "Advance Amount" +msgstr "" + +#. module: sale +#: selection:sale.order,invoice_quantity:0 +msgid "Shipped Quantities" +msgstr "" + +#. module: sale +#: selection:sale.config.picking_policy,order_policy:0 +msgid "Invoice Based on Sales Orders" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_stock_picking +msgid "Picking List" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:387 +#: code:addons/sale/sale.py:920 +#: code:addons/sale/sale.py:938 +#, python-format +msgid "Error !" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:570 +#, python-format +msgid "Could not cancel sales order !" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "July" +msgstr "" + +#. module: sale +#: field:sale.order.line,procurement_id:0 +msgid "Procurement" +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.report,state:0 +msgid "Shipping Exception" +msgstr "" + +#. module: sale +#: field:sale.make.invoice,grouped:0 +msgid "Group the invoices" +msgstr "" + +#. module: sale +#: selection:sale.order,order_policy:0 +msgid "Shipping & Manual Invoice" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:1051 +#, python-format +msgid "Picking Information !" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,month:0 +msgid "Month" +msgstr "" + +#. module: sale +#: model:ir.module.module,shortdesc:sale.module_meta_information +msgid "Sales Management" +msgstr "" + +#. module: sale +#: selection:sale.order,order_policy:0 +msgid "Invoice From The Picking" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_invoice0 +msgid "To be reviewed by the accountant." +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,uom_name:0 +msgid "Reference UoM" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_order_line_make_invoice +msgid "Sale OrderLine Make_invoice" +msgstr "" + +#. module: sale +#: help:sale.config.picking_policy,step:0 +msgid "" +"By default, OpenERP is able to manage complex routing and paths of products " +"in your warehouse and partner locations. This will configure the most common " +"and simple methods to deliver products to the customer in one or two " +"operations by the worker." +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_tree +msgid "Old Quotations" +msgstr "" + +#. module: sale +#: field:sale.order,invoiced:0 +msgid "Paid" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_report_all +#: model:ir.ui.menu,name:sale.menu_report_product_all +#: view:sale.report:0 +msgid "Sales Analysis" +msgstr "" + +#. module: sale +#: field:sale.order.line,property_ids:0 +msgid "Properties" +msgstr "" + +#. module: sale +#: model:process.node,name:sale.process_node_quotation0 +#: selection:sale.order,state:0 +#: selection:sale.report,state:0 +msgid "Quotation" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_invoice0 +msgid "" +"The Salesman creates an invoice manually, if the sales order shipping policy " +"is 'Shipping and Manual in Progress'. The invoice is created automatically " +"if the shipping policy is 'Payment before Delivery'." +msgstr "" + +#. module: sale +#: help:sale.config.picking_policy,order_policy:0 +msgid "" +"You can generate invoices based on sales orders or based on shippings." +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.act_res_partner_2_sale_order +#: model:process.process,name:sale.process_process_salesprocess0 +#: view:sale.order:0 +#: view:sale.report:0 +msgid "Sales" +msgstr "" + +#. module: sale +#: report:sale.order:0 +#: field:sale.order.line,price_unit:0 +msgid "Unit Price" +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: view:sale.order.line:0 +#: selection:sale.order.line,state:0 +#: selection:sale.report,state:0 +msgid "Done" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_installer +msgid "sale.installer" +msgstr "" + +#. module: sale +#: model:process.node,name:sale.process_node_invoice0 +#: model:process.node,name:sale.process_node_invoiceafterdelivery0 +msgid "Invoice" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:1014 +#, python-format +msgid "" +"You have to select a customer in the sales form !\n" +"Please set one customer before choosing a product." +msgstr "" + +#. module: sale +#: selection:sale.config.picking_policy,step:0 +msgid "Picking List & Delivery Order" +msgstr "" + +#. module: sale +#: field:sale.order,origin:0 +msgid "Source Document" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "To Do" +msgstr "" + +#. module: sale +#: field:sale.order,picking_policy:0 +msgid "Picking Policy" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_deliveryorder0 +msgid "Document of the move to the customer." +msgstr "" + +#. module: sale +#: help:sale.order,amount_untaxed:0 +msgid "The amount without tax." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:571 +#, python-format +msgid "You must first cancel all picking attached to this sales order." +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_advance_payment_inv +msgid "Sales Advance Payment Invoice" +msgstr "" + +#. module: sale +#: field:sale.order,incoterm:0 +msgid "Incoterm" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +#: field:sale.order.line,product_id:0 +#: view:sale.report:0 +#: field:sale.report,product_id:0 +msgid "Product" +msgstr "" + +#. module: sale +#: model:ir.ui.menu,name:sale.menu_invoiced +msgid "Invoicing" +msgstr "" + +#. module: sale +#: model:process.transition.action,name:sale.process_transition_action_cancelassignation0 +msgid "Cancel Assignation" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_config_picking_policy +msgid "sale.config.picking_policy" +msgstr "" + +#. module: sale +#: help:sale.order,state:0 +msgid "" +"Gives the state of the quotation or sales order. \n" +"The exception state is automatically set when a cancel operation occurs in " +"the invoice validation (Invoice Exception) or in the picking list process " +"(Shipping Exception). \n" +"The 'Waiting Schedule' state is set when the invoice is confirmed but " +"waiting for the scheduler to run on the date 'Ordered Date'." +msgstr "" + +#. module: sale +#: field:sale.order,invoice_quantity:0 +msgid "Invoice on" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Date Ordered" +msgstr "" + +#. module: sale +#: field:sale.order.line,product_uos:0 +msgid "Product UoS" +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.report,state:0 +msgid "Manual In Progress" +msgstr "" + +#. module: sale +#: field:sale.order.line,product_uom:0 +msgid "Product UoM" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Logistic" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Order" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:921 +#, python-format +msgid "There is no income account defined for this product: \"%s\" (id:%d)" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Ignore Exception" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_saleinvoice0 +msgid "" +"Depending on the Invoicing control of the sales order, the invoice can be " +"based on delivered or on ordered quantities. Thus, a sales order can " +"generates an invoice or a delivery order as soon as it is confirmed by the " +"salesman." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:1116 +#, python-format +msgid "" +"You plan to sell %.2f %s but you only have %.2f %s available !\n" +"The real stock is %.2f %s. (without reservations)" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "States" +msgstr "" + +#. module: sale +#: view:sale.config.picking_policy:0 +msgid "res_config_contents" +msgstr "" + +#. module: sale +#: field:sale.order,client_order_ref:0 +msgid "Customer Reference" +msgstr "" + +#. module: sale +#: field:sale.order,amount_total:0 +#: view:sale.order.line:0 +msgid "Total" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:388 +#, python-format +msgid "There is no sales journal defined for this company: \"%s\" (id:%d)" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_deliver0 +msgid "" +"Depending on the configuration of the location Output, the move between the " +"output area and the customer is done through the Delivery Order manually or " +"automatically." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:1165 +#, python-format +msgid "Cannot delete a sales order line which is %s !" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_sale_order_make_invoice +#: model:ir.actions.act_window,name:sale.action_view_sale_order_line_make_invoice +#: view:sale.order:0 +msgid "Make Invoices" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: view:sale.order.line:0 +msgid "To Invoice" +msgstr "" + +#. module: sale +#: help:sale.order,date_confirm:0 +msgid "Date on which sales order is confirmed." +msgstr "" + +#. module: sale +#: field:sale.order,company_id:0 +#: field:sale.order.line,company_id:0 +#: view:sale.report:0 +#: field:sale.report,company_id:0 +#: field:sale.shop,company_id:0 +msgid "Company" +msgstr "" + +#. module: sale +#: field:sale.make.invoice,invoice_date:0 +msgid "Invoice Date" +msgstr "" + +#. module: sale +#: help:sale.advance.payment.inv,amount:0 +msgid "The amount to be invoiced in advance." +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.report,state:0 +msgid "Invoice Exception" +msgstr "" + +#. module: sale +#: help:sale.order,picking_ids:0 +msgid "" +"This is a list of picking that has been generated for this sales order." +msgstr "" + +#. module: sale +#: help:sale.installer,sale_margin:0 +msgid "" +"Gives the margin of profitability by calculating the difference between Unit " +"Price and Cost Price." +msgstr "" + +#. module: sale +#: view:sale.make.invoice:0 +#: view:sale.order.line.make.invoice:0 +msgid "Create invoices" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Net Total :" +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.order.line,state:0 +#: selection:sale.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_shop_form +#: model:ir.ui.menu,name:sale.menu_action_shop_form +#: field:sale.order,shop_id:0 +#: view:sale.report:0 +#: field:sale.report,shop_id:0 +msgid "Shop" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid " Month " +msgstr "" + +#. module: sale +#: field:sale.report,date_confirm:0 +msgid "Date Confirm" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_line_invoice.py:111 +#, python-format +msgid "Warning" +msgstr "" + +#. module: sale +#: view:board.board:0 +#: model:ir.actions.act_window,name:sale.action_view_sales_by_month +msgid "Sales by Month" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:1045 +#, python-format +msgid "" +"You selected a quantity of %d Units.\n" +"But it's not compatible with the selected packaging.\n" +"Here is a proposition of quantities according to the packaging:\n" +"\n" +"EAN: %s Quantity: %s Type of ul: %s" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_order +#: model:process.node,name:sale.process_node_order0 +#: model:process.node,name:sale.process_node_saleorder0 +#: model:res.request.link,name:sale.req_link_sale_order +#: view:sale.order:0 +#: field:stock.picking,sale_id:0 +msgid "Sales Order" +msgstr "" + +#. module: sale +#: field:sale.order.line,product_uos_qty:0 +msgid "Quantity (UoS)" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_packing0 +msgid "" +"The Pick List form is created as soon as the sales order is confirmed, in " +"the same time as the procurement order. It represents the assignment of " +"parts to the sales order. There is 1 pick list by sales order line which " +"evolves with the availability of parts." +msgstr "" + +#. module: sale +#: selection:sale.order.line,state:0 +msgid "Confirmed" +msgstr "" + +#. module: sale +#: model:process.transition.action,name:sale.process_transition_action_confirm0 +msgid "Confirm" +msgstr "" + +#. module: sale +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: sale +#: view:board.board:0 +#: model:ir.actions.act_window,name:sale.action_sales_product_total_price +msgid "Sales by Product's Category in last 90 days" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: field:sale.order.line,invoice_lines:0 +msgid "Invoice Lines" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: view:sale.order.line:0 +msgid "Sales Order Lines" +msgstr "" + +#. module: sale +#: field:sale.order.line,delay:0 +msgid "Delivery Lead Time" +msgstr "" + +#. module: sale +#: view:res.company:0 +msgid "Configuration" +msgstr "" + +#. module: sale +#: selection:sale.order,picking_policy:0 +msgid "Complete Delivery" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid " Month-1 " +msgstr "" + +#. module: sale +#: help:sale.config.picking_policy,picking_policy:0 +msgid "" +"The Shipping Policy is used to configure per order if you want to deliver as " +"soon as possible when one product is available or you wait that all products " +"are available.." +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "August" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_line_invoice.py:111 +#, python-format +msgid "" +"Invoice cannot be created for this Sales Order Line due to one of the " +"following reasons:\n" +"1.The state of this sales order line is either \"draft\" or \"cancel\"!\n" +"2.The Sales Order Line is Invoiced!" +msgstr "" + +#. module: sale +#: field:sale.order.line,th_weight:0 +msgid "Weight" +msgstr "" + +#. module: sale +#: view:sale.open.invoice:0 +#: view:sale.order:0 +#: field:sale.order,invoice_ids:0 +msgid "Invoices" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "December" +msgstr "" + +#. module: sale +#: field:sale.config.picking_policy,config_logo:0 +#: field:sale.installer,config_logo:0 +msgid "Image" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_saleprocurement0 +msgid "" +"A procurement order is automatically created as soon as a sales order is " +"confirmed or as the invoice is paid. It drives the purchasing and the " +"production of products regarding to the rules and to the sales order's " +"parameters. " +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Uninvoiced" +msgstr "" + +#. module: sale +#: report:sale.order:0 +#: view:sale.order:0 +#: field:sale.order,user_id:0 +#: view:sale.order.line:0 +#: field:sale.order.line,salesman_id:0 +#: view:sale.report:0 +#: field:sale.report,user_id:0 +msgid "Salesman" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_saleorder0 +msgid "Drives procurement and invoicing" +msgstr "" + +#. module: sale +#: field:sale.order,amount_untaxed:0 +msgid "Untaxed Amount" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice_advance.py:163 +#: model:ir.actions.act_window,name:sale.action_view_sale_advance_payment_inv +#: view:sale.advance.payment.inv:0 +#: view:sale.order:0 +#, python-format +msgid "Advance Invoice" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:591 +#, python-format +msgid "The sales order '%s' has been cancelled." +msgstr "" + +#. module: sale +#: selection:sale.order.line,state:0 +msgid "Draft" +msgstr "" + +#. module: sale +#: help:sale.order.line,state:0 +msgid "" +"* The 'Draft' state is set when the related sales order in draft state. " +" \n" +"* The 'Confirmed' state is set when the related sales order is confirmed. " +" \n" +"* The 'Exception' state is set when the related sales order is set as " +"exception. \n" +"* The 'Done' state is set when the sales order line has been picked. " +" \n" +"* The 'Cancelled' state is set when a user cancel the sales order related." +msgstr "" + +#. module: sale +#: help:sale.order,amount_tax:0 +msgid "The tax amount." +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Packings" +msgstr "" + +#. module: sale +#: field:sale.config.picking_policy,progress:0 +#: field:sale.installer,progress:0 +msgid "Configuration Progress" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_line_product_tree +msgid "Product sales" +msgstr "" + +#. module: sale +#: field:sale.order,date_order:0 +msgid "Ordered Date" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_form +#: model:ir.ui.menu,name:sale.menu_sale_order +#: view:sale.order:0 +msgid "Sales Orders" +msgstr "" + +#. module: sale +#: selection:sale.config.picking_policy,picking_policy:0 +msgid "Direct Delivery" +msgstr "" + +#. module: sale +#: field:sale.installer,sale_journal:0 +msgid "Invoicing journals" +msgstr "" + +#. module: sale +#: field:sale.advance.payment.inv,product_id:0 +msgid "Advance Product" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,shipped_qty_1:0 +msgid "Shipped Qty" +msgstr "" + +#. module: sale +#: view:sale.open.invoice:0 +msgid "You invoice has been successfully created!" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:585 +#, python-format +msgid "You must first cancel all invoices attached to this sales order." +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "January" +msgstr "" + +#. module: sale +#: view:sale.installer:0 +msgid "Configure Your Sales Management Application" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_tree4 +msgid "Sales Order in Progress" +msgstr "" + +#. module: sale +#: field:sale.installer,sale_layout:0 +msgid "Sales Order Layout Improvement" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice_advance.py:63 +#, python-format +msgid "Error" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,delay:0 +msgid "Commitment Delay" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_saleprocurement0 +msgid "" +"One Procurement order for each sales order line and for each of the " +"components." +msgstr "" + +#. module: sale +#: model:process.transition.action,name:sale.process_transition_action_assign0 +msgid "Assign" +msgstr "" + +#. module: sale +#: field:sale.report,date:0 +msgid "Date Order" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_order0 +msgid "Confirmed sales order to invoice." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:290 +#, python-format +msgid "Cannot delete Sales Order(s) which are already confirmed !" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:316 +#, python-format +msgid "The sales order '%s' has been set in draft state." +msgstr "" + +#. module: sale +#: selection:sale.order.line,type:0 +msgid "from stock" +msgstr "" + +#. module: sale +#: field:sale.config.picking_policy,order_policy:0 +msgid "Shipping Default Policy" +msgstr "" + +#. module: sale +#: view:sale.open.invoice:0 +msgid "Close" +msgstr "" + +#. module: sale +#: field:sale.order,shipped:0 +msgid "Delivered" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:1115 +#, python-format +msgid "Not enough stock !" +msgstr "" + +#. module: sale +#: constraint:stock.move:0 +msgid "You must assign a production lot for this product" +msgstr "" + +#. module: sale +#: field:sale.order.line,sequence:0 +msgid "Layout Sequence" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,help:sale.action_shop_form +msgid "" +"If you have more than one shop reselling your company products, you can " +"create and manage that from here. Whenever you will record a new quotation " +"or sales order, it has to be linked to a shop. The shop also defines the " +"warehouse from which the products will be delivered for each particular " +"sales." +msgstr "" + +#. module: sale +#: help:sale.order,invoiced:0 +msgid "It indicates that an invoice has been paid." +msgstr "" + +#. module: sale +#: report:sale.order:0 +#: field:sale.order.line,name:0 +msgid "Description" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "May" +msgstr "" + +#. module: sale +#: help:sale.installer,sale_order_dates:0 +msgid "Adds commitment, requested and effective dates on Sales Orders." +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: field:sale.order,partner_id:0 +#: field:sale.order.line,order_partner_id:0 +msgid "Customer" +msgstr "" + +#. module: sale +#: model:product.template,name:sale.advance_product_0_product_template +msgid "Advance" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "February" +msgstr "" + +#. module: sale +#: help:sale.installer,sale_journal:0 +msgid "" +"Allows you to group and invoice your delivery orders according to different " +"invoicing types: daily, weekly, etc." +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "April" +msgstr "" + +#. module: sale +#: view:sale.shop:0 +msgid "Accounting" +msgstr "" + +#. module: sale +#: field:sale.config.picking_policy,step:0 +msgid "Steps To Deliver a Sales Order" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: view:sale.order.line:0 +msgid "Search Sales Order" +msgstr "" + +#. module: sale +#: model:process.node,name:sale.process_node_saleorderprocurement0 +msgid "Sales Order Requisition" +msgstr "" + +#. module: sale +#: report:sale.order:0 +#: field:sale.order,payment_term:0 +msgid "Payment Term" +msgstr "Relambi de pagament" + +#. module: sale +#: help:sale.installer,sale_layout:0 +msgid "" +"Provides some features to improve the layout of the Sales Order reports." +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,help:sale.action_order_report_all +msgid "" +"This report performs analysis on your quotations and sales orders. Analysis " +"check your sales revenues and sort it by different group criteria (salesman, " +"partner, product, etc.) Use this report to perform analysis on sales not " +"having invoiced yet. If you want to analyse your turnover, you should use " +"the Invoice Analysis report in the Accounting application." +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Quotation N°" +msgstr "Devís N°" + +#. module: sale +#: field:sale.order,picked_rate:0 +#: view:sale.report:0 +msgid "Picked" +msgstr "Liurada" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,year:0 +msgid "Year" +msgstr "Annada" + +#. module: sale +#: selection:sale.config.picking_policy,order_policy:0 +msgid "Invoice Based on Deliveries" +msgstr "Factura basada sus las liurasons" diff --git a/addons/sale/sale.py b/addons/sale/sale.py index ae979aac91d..6ffab87f2e8 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -280,7 +280,7 @@ class sale_order(osv.osv): 'partner_shipping_id': lambda self, cr, uid, context: context.get('partner_id', False) and self.pool.get('res.partner').address_get(cr, uid, [context['partner_id']], ['delivery'])['delivery'], } _sql_constraints = [ - ('name_uniq', 'unique(name)', 'Order Reference must be unique !'), + ('name_uniq', 'unique(name, company_id)', 'Order Reference must be unique per Company!'), ] _order = 'name desc' @@ -772,6 +772,10 @@ class sale_order(osv.osv): will be added. A new picking will be created if ommitted. :return: True """ + move_obj = self.pool.get('stock.move') + picking_obj = self.pool.get('stock.picking') + procurement_obj = self.pool.get('procurement.order') + proc_ids = [] move_obj = self.pool.get('stock.move') for line in order_lines: @@ -784,17 +788,17 @@ 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)) + picking_id = picking_obj.create(cr, uid, self._prepare_order_picking(cr, uid, order, *args)) move_id = move_obj.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 = procurement_obj.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}) self.ship_exception(cr, uid, order, move_obj, line, move_id, proc_id) - + wf_service = netsvc.LocalService("workflow") if picking_id: wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) diff --git a/addons/sale_analytic_plans/i18n/oc.po b/addons/sale_analytic_plans/i18n/oc.po new file mode 100644 index 00000000000..e4af10e9b81 --- /dev/null +++ b/addons/sale_analytic_plans/i18n/oc.po @@ -0,0 +1,45 @@ +# Occitan (post 1500) 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-03 16:58+0000\n" +"PO-Revision-Date: 2011-11-20 09:25+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: sale_analytic_plans +#: field:sale.order.line,analytics_id:0 +msgid "Analytic Distribution" +msgstr "Distribucion analitica" + +#. module: sale_analytic_plans +#: model:ir.module.module,shortdesc:sale_analytic_plans.module_meta_information +msgid "Sales Analytic Distribution Management" +msgstr "Gestion de la Distribucion Analitica de las Vendas" + +#. module: sale_analytic_plans +#: model:ir.module.module,description:sale_analytic_plans.module_meta_information +msgid "" +"\n" +" The base module to manage analytic distribution and sales orders.\n" +" " +msgstr "" +"\n" +" Lo modul de basa per gerir la distribucion analitica e los bons de " +"comanda.\n" +" " + +#. module: sale_analytic_plans +#: model:ir.model,name:sale_analytic_plans.model_sale_order_line +msgid "Sales Order Line" +msgstr "Linha de bon de comanda" diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 34b601a712c..292cd052d5a 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -661,6 +661,9 @@ class stock_picking(osv.osv): 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.picking', context=c) } + _sql_constraints = [ + ('name_uniq', 'unique(name, company_id)', 'Reference must be unique per Company!'), + ] def action_process(self, cr, uid, ids, context=None): if context is None: context = {} @@ -1525,7 +1528,7 @@ class stock_move(osv.osv): return True _columns = { - 'name': fields.char('Name', size=64, required=True, select=True), + 'name': fields.char('Name', size=250, required=True, select=True), 'priority': fields.selection([('0', 'Not urgent'), ('1', 'Urgent')], 'Priority'), 'create_date': fields.datetime('Creation Date', readonly=True, select=True), 'date': fields.datetime('Date', required=True, select=True, help="Move date: scheduled date until move is done, then date of actual move processing", states={'done': [('readonly', True)]}), diff --git a/addons/stock/wizard/stock_location_product.py b/addons/stock/wizard/stock_location_product.py index 2ac350cb108..49dc048d0ab 100644 --- a/addons/stock/wizard/stock_location_product.py +++ b/addons/stock/wizard/stock_location_product.py @@ -43,15 +43,15 @@ class stock_location_product(osv.osv_memory): location_products = self.read(cr, uid, ids, ['from_date', 'to_date'], context=context) if location_products: return { - 'name': False, - 'view_type': 'form', - 'view_mode': 'tree,form', - 'res_model': 'product.product', - 'type': 'ir.actions.act_window', - 'context': {'location': context.get('active_id'), - 'from_date': location_products[0]['from_date'], - 'to_date': location_products[0]['to_date']}, - 'domain': [('type', '<>', 'service')], + 'name': False, + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'product.product', + 'type': 'ir.actions.act_window', + 'context': {'location': context['active_id'], + 'from_date': location_products[0]['from_date'], + 'to_date': location_products[0]['to_date']}, + 'domain': [('type', '<>', 'service')], } stock_location_product() diff --git a/addons/stock_invoice_directly/i18n/oc.po b/addons/stock_invoice_directly/i18n/oc.po new file mode 100644 index 00000000000..e831eb21aee --- /dev/null +++ b/addons/stock_invoice_directly/i18n/oc.po @@ -0,0 +1,37 @@ +# Occitan (post 1500) 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-03 16:58+0000\n" +"PO-Revision-Date: 2011-11-20 09:30+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: stock_invoice_directly +#: model:ir.model,name:stock_invoice_directly.model_stock_partial_picking +msgid "Partial Picking" +msgstr "Tractament parcial" + +#. module: stock_invoice_directly +#: model:ir.module.module,description:stock_invoice_directly.module_meta_information +msgid "" +"\n" +" When you send or deliver goods, this module automatically launch\n" +" the invoicing wizard if the delivery is to be invoiced.\n" +" " +msgstr "" + +#. module: stock_invoice_directly +#: model:ir.module.module,shortdesc:stock_invoice_directly.module_meta_information +msgid "Invoice Picking Directly" +msgstr "Facturar la liurason dirèctament" diff --git a/addons/stock_no_autopicking/i18n/oc.po b/addons/stock_no_autopicking/i18n/oc.po new file mode 100644 index 00000000000..2e8cda677ab --- /dev/null +++ b/addons/stock_no_autopicking/i18n/oc.po @@ -0,0 +1,70 @@ +# Occitan (post 1500) 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-03 16:58+0000\n" +"PO-Revision-Date: 2011-11-20 09:30+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: stock_no_autopicking +#: model:ir.model,name:stock_no_autopicking.model_product_product +msgid "Product" +msgstr "Produch" + +#. module: stock_no_autopicking +#: model:ir.module.module,description:stock_no_autopicking.module_meta_information +msgid "" +"\n" +" This module allows an intermediate picking process to provide raw " +"materials\n" +" to production orders.\n" +"\n" +" One example of usage of this module is to manage production made by " +"your\n" +" suppliers (sub-contracting). To achieve this, set the assembled product\n" +" which is sub-contracted to \"No Auto-Picking\" and put the location of " +"the\n" +" supplier in the routing of the assembly operation.\n" +" " +msgstr "" + +#. module: stock_no_autopicking +#: model:ir.model,name:stock_no_autopicking.model_mrp_production +msgid "Manufacturing Order" +msgstr "Òrdre de fabricacion" + +#. module: stock_no_autopicking +#: field:product.product,auto_pick:0 +msgid "Auto Picking" +msgstr "Prelevament automatic" + +#. module: stock_no_autopicking +#: help:product.product,auto_pick:0 +msgid "Auto picking for raw materials of production orders." +msgstr "" + +#. module: stock_no_autopicking +#: constraint:product.product:0 +msgid "Error: Invalid ean code" +msgstr "Error : Còde ean invalid" + +#. module: stock_no_autopicking +#: model:ir.module.module,shortdesc:stock_no_autopicking.module_meta_information +msgid "Stock No Auto-Picking" +msgstr "" + +#. module: stock_no_autopicking +#: constraint:mrp.production:0 +msgid "Order quantity cannot be negative or zero !" +msgstr "" diff --git a/addons/stock_no_autopicking/test/stock_no_autopicking.yml b/addons/stock_no_autopicking/test/stock_no_autopicking.yml index 99c2db37177..f3620ce655e 100644 --- a/addons/stock_no_autopicking/test/stock_no_autopicking.yml +++ b/addons/stock_no_autopicking/test/stock_no_autopicking.yml @@ -142,11 +142,9 @@ product_uos_qty: 0.0 bom_id: mrp_bom_cupoftea0 routing_id: mrp_routing_productionrouting0 - company_id: base.main_company date_planned: !eval time.strftime('%Y-%m-%d %H:%M:%S') location_dest_id: stock.stock_location_stock location_src_id: stock.stock_location_stock - name: MO/00002 - I compute the data of production order. - diff --git a/addons/web_livechat/i18n/oc.po b/addons/web_livechat/i18n/oc.po new file mode 100644 index 00000000000..5b19d5b8c77 --- /dev/null +++ b/addons/web_livechat/i18n/oc.po @@ -0,0 +1,41 @@ +# Occitan (post 1500) 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:16+0000\n" +"PO-Revision-Date: 2011-11-20 09:29+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: web_livechat +#: sql_constraint:publisher_warranty.contract:0 +msgid "" +"Your publisher warranty contract is already subscribed in the system !" +msgstr "" + +#. module: web_livechat +#: model:ir.module.module,shortdesc:web_livechat.module_meta_information +msgid "Live Chat Support" +msgstr "Supòrt per messatjariá instantanèa" + +#. module: web_livechat +#: model:ir.model,name:web_livechat.model_publisher_warranty_contract +msgid "publisher_warranty.contract" +msgstr "publisher_warranty.contract" + +#. module: web_livechat +#: model:ir.module.module,description:web_livechat.module_meta_information +msgid "Enable live chat support for whom have a maintenance contract" +msgstr "" +"Validar lo supòrt per messatjariá instantanèa pels detentors d'un contracte " +"de mantenença" diff --git a/addons/web_uservoice/i18n/oc.po b/addons/web_uservoice/i18n/oc.po new file mode 100644 index 00000000000..3867b8c4947 --- /dev/null +++ b/addons/web_uservoice/i18n/oc.po @@ -0,0 +1,29 @@ +# Occitan (post 1500) 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-12 16:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:28+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: web_uservoice +#: model:ir.module.module,shortdesc:web_uservoice.module_meta_information +msgid "Add uservoice button in header" +msgstr "Apondre un boton \"viscut utilizaire\" dins l'entèsta" + +#. module: web_uservoice +#: code:addons/web_uservoice/web/editors.py:72 +#, python-format +msgid "feedback" +msgstr "retorn d'experiéncia" diff --git a/addons/wiki_faq/i18n/oc.po b/addons/wiki_faq/i18n/oc.po new file mode 100644 index 00000000000..c9408fe9635 --- /dev/null +++ b/addons/wiki_faq/i18n/oc.po @@ -0,0 +1,32 @@ +# Occitan (post 1500) 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:16+0000\n" +"PO-Revision-Date: 2011-11-20 09:27+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: wiki_faq +#: model:ir.module.module,description:wiki_faq.module_meta_information +msgid "" +"This module provides a wiki FAQ Template\n" +" " +msgstr "" +"Aqueste modul provesís un modèl de FAQ Wiki\n" +" " + +#. module: wiki_faq +#: model:ir.module.module,shortdesc:wiki_faq.module_meta_information +msgid "Document Management - Wiki - FAQ" +msgstr "Gestion documentària - Wiki - FAQ" diff --git a/addons/wiki_quality_manual/i18n/oc.po b/addons/wiki_quality_manual/i18n/oc.po new file mode 100644 index 00000000000..28a4d42ec98 --- /dev/null +++ b/addons/wiki_quality_manual/i18n/oc.po @@ -0,0 +1,32 @@ +# Occitan (post 1500) 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:16+0000\n" +"PO-Revision-Date: 2011-11-20 09:27+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: wiki_quality_manual +#: model:ir.module.module,description:wiki_quality_manual.module_meta_information +msgid "" +"Quality Manual Template\n" +" " +msgstr "" +"Modèl de manual qualitat\n" +" " + +#. module: wiki_quality_manual +#: model:ir.module.module,shortdesc:wiki_quality_manual.module_meta_information +msgid "Document Management - Wiki - Quality Manual" +msgstr "Gestion documentària - Wiki - Manual Qualitat" diff --git a/addons/wiki_sale_faq/i18n/oc.po b/addons/wiki_sale_faq/i18n/oc.po new file mode 100644 index 00000000000..dfe98f46645 --- /dev/null +++ b/addons/wiki_sale_faq/i18n/oc.po @@ -0,0 +1,68 @@ +# Occitan (post 1500) 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:16+0000\n" +"PO-Revision-Date: 2011-11-20 09:26+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \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-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: wiki_sale_faq +#: model:ir.actions.act_window,name:wiki_sale_faq.action_document_form +#: model:ir.ui.menu,name:wiki_sale_faq.menu_document_files +#: model:ir.ui.menu,name:wiki_sale_faq.menu_sales +msgid "Documents" +msgstr "Documents" + +#. module: wiki_sale_faq +#: model:ir.actions.act_window,name:wiki_sale_faq.action_wiki_test +msgid "Wiki Pages" +msgstr "Paginas del wiki" + +#. module: wiki_sale_faq +#: model:ir.ui.menu,name:wiki_sale_faq.menu_action_wiki_wiki +msgid "FAQ" +msgstr "Questions frequentas (FAQ)" + +#. module: wiki_sale_faq +#: model:ir.module.module,description:wiki_sale_faq.module_meta_information +msgid "" +"This module provides a wiki FAQ Template\n" +" " +msgstr "" + +#. module: wiki_sale_faq +#: model:ir.actions.act_window,help:wiki_sale_faq.action_wiki_test +msgid "" +"Wiki pages allow you to share ideas and questions with coworkers. You can " +"create a new document that can be linked to one or several applications " +"(specifications of a project, FAQ for sales teams, etc.). Keywords can be " +"used to easily tag wiki pages. You should use this application with the " +"OpenERP web client interface." +msgstr "" + +#. module: wiki_sale_faq +#: model:ir.module.module,shortdesc:wiki_sale_faq.module_meta_information +msgid "Wiki -Sale - FAQ" +msgstr "FAQ Wiki Vendas" + +#. module: wiki_sale_faq +#: model:ir.actions.act_window,help:wiki_sale_faq.action_document_form +msgid "" +"Documents give you access to all files attached to any record. It is a " +"repository of all documents such as emails, project-related attachments or " +"any other documents. From this view, you can search through the content of " +"the documents. OpenERP automatically assign meta data based on the record " +"like the related partner and indexes the content of .DOC, .ODT, .TXT, .SXW " +"and .PDF documents." +msgstr ""

- +