[MERGE]sync with trunk

bzr revid: sgo@tinyerp.com-20130326100719-85r6zm65cf8h8d1d
bzr revid: sgo@tinyerp.com-20130328060222-fb9ijzumjtedqbzs
This commit is contained in:
sgo@tinyerp.com 2013-03-28 11:32:22 +05:30
commit 2aa1350efc
146 changed files with 10283 additions and 7000 deletions

View File

@ -25,8 +25,9 @@ from dateutil.relativedelta import relativedelta
from operator import itemgetter
import time
import openerp
from openerp import SUPERUSER_ID
from openerp import pooler, tools
from openerp import tools
from openerp.osv import fields, osv
from openerp.tools.translate import _
from openerp.tools.float_utils import float_round
@ -1883,7 +1884,7 @@ class account_tax(osv.osv):
def get_precision_tax():
def change_digit_tax(cr):
res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, SUPERUSER_ID, 'Account')
res = openerp.registry(cr.dbname)['decimal.precision'].precision_get(cr, SUPERUSER_ID, 'Account')
return (16, res+2)
return change_digit_tax

View File

@ -25,7 +25,6 @@ from dateutil.relativedelta import relativedelta
from operator import itemgetter
from openerp import netsvc
from openerp import pooler
from openerp.osv import fields, osv
import openerp.addons.decimal_precision as dp
from openerp.tools.translate import _

View File

@ -24,7 +24,6 @@ from lxml import etree
import openerp.addons.decimal_precision as dp
import openerp.exceptions
from openerp import pooler
from openerp.osv import fields, osv, orm
from openerp.tools.translate import _
@ -97,6 +96,8 @@ class account_invoice(osv.osv):
for m in invoice.move_id.line_id:
if m.account_id.type in ('receivable','payable'):
result[invoice.id] += m.amount_residual_currency
#prevent the residual amount on the invoice to be less than 0
result[invoice.id] = max(result[invoice.id], 0.0)
return result
# Give Journal Items related to the payment reconciled to this invoice

View File

@ -741,20 +741,17 @@ class account_move_line(osv.osv):
def list_partners_to_reconcile(self, cr, uid, context=None):
cr.execute(
"""
SELECT partner_id
FROM (
SELECT l.partner_id, p.last_reconciliation_date, SUM(l.debit) AS debit, SUM(l.credit) AS credit
"""SELECT partner_id FROM (
SELECT l.partner_id, p.last_reconciliation_date, SUM(l.debit) AS debit, SUM(l.credit) AS credit, MAX(l.date) AS max_date
FROM account_move_line l
RIGHT JOIN account_account a ON (a.id = l.account_id)
RIGHT JOIN res_partner p ON (l.partner_id = p.id)
WHERE a.reconcile IS TRUE
AND l.reconcile_id IS NULL
AND (p.last_reconciliation_date IS NULL OR l.date > p.last_reconciliation_date)
AND l.state <> 'draft'
GROUP BY l.partner_id, p.last_reconciliation_date
) AS s
WHERE debit > 0 AND credit > 0
WHERE debit > 0 AND credit > 0 AND (last_reconciliation_date IS NULL OR max_date > last_reconciliation_date)
ORDER BY last_reconciliation_date""")
ids = cr.fetchall()
ids = len(ids) and [x[0] for x in ids] or []

View File

@ -233,7 +233,7 @@ class res_partner(osv.osv):
help="This payment term will be used instead of the default one for purchase orders and supplier invoices"),
'ref_companies': fields.one2many('res.company', 'partner_id',
'Companies that refers to partner'),
'last_reconciliation_date': fields.datetime('Latest Reconciliation Date', help='Date on which the partner accounting entries were fully reconciled last time. It differs from the date of the last reconciliation made for this partner, as here we depict the fact that nothing more was to be reconciled at this date. This can be achieved in 2 ways: either the last debit/credit entry was reconciled, either the user pressed the button "Fully Reconciled" in the manual reconciliation process')
'last_reconciliation_date': fields.datetime('Latest Full Reconciliation Date', help='Date on which the partner accounting entries were fully reconciled last time. It differs from the last date where a reconciliation has been made for this partner, as here we depict the fact that nothing more was to be reconciled at this date. This can be achieved in 2 different ways: either the last unreconciled debit/credit entry of this partner was reconciled, either the user pressed the button "Nothing more to reconcile" during the manual reconciliation process.')
}
res_partner()

View File

@ -21,7 +21,6 @@
import time
from openerp import pooler
from openerp.report import report_sxw
#

View File

@ -21,7 +21,6 @@
import time
from openerp import pooler
from openerp.report import report_sxw
class account_analytic_cost_ledger(report_sxw.rml_parse):

View File

@ -21,7 +21,6 @@
import time
from openerp import pooler
from openerp.report import report_sxw
class account_inverted_analytic_balance(report_sxw.rml_parse):

View File

@ -20,7 +20,6 @@
##############################################################################
import time
from openerp import pooler
from openerp.report import report_sxw
class account_analytic_quantity_cost_ledger(report_sxw.rml_parse):

View File

@ -22,7 +22,6 @@
import time
from openerp.report import report_sxw
from openerp import pooler
class Overdue(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
@ -38,7 +37,7 @@ class Overdue(report_sxw.rml_parse):
def _tel_get(self,partner):
if not partner:
return False
res_partner = pooler.get_pool(self.cr.dbname).get('res.partner')
res_partner = self.pool['res.partner']
addresses = res_partner.address_get(self.cr, self.uid, [partner.id], ['invoice'])
adr_id = addresses and addresses['invoice'] or False
if adr_id:
@ -49,7 +48,7 @@ class Overdue(report_sxw.rml_parse):
return False
def _lines_get(self, partner):
moveline_obj = pooler.get_pool(self.cr.dbname).get('account.move.line')
moveline_obj = self.pool['account.move.line']
movelines = moveline_obj.search(self.cr, self.uid,
[('partner_id', '=', partner.id),
('account_id.type', 'in', ['receivable', 'payable']),
@ -58,7 +57,7 @@ class Overdue(report_sxw.rml_parse):
return movelines
def _message(self, obj, company):
company_pool = pooler.get_pool(self.cr.dbname).get('res.company')
company_pool = self.pool['res.company']
message = company_pool.browse(self.cr, self.uid, company.id, {'lang':obj.lang}).overdue_msg
return message.split('\n')

View File

@ -23,7 +23,6 @@ import time
from datetime import datetime
from dateutil.relativedelta import relativedelta
from openerp import pooler
from openerp import tools
from openerp.osv import fields,osv
@ -123,7 +122,7 @@ class report_aged_receivable(osv.osv):
""" This view will be used in dashboard
The reason writing this code here is, we need to check date range from today to first date of fiscal year.
"""
pool_obj_fy = pooler.get_pool(cr.dbname).get('account.fiscalyear')
pool_obj_fy = self.pool['account.fiscalyear']
today = time.strftime('%Y-%m-%d')
fy_id = pool_obj_fy.find(cr, uid, exception=False)
LIST_RANGES = []
@ -141,7 +140,7 @@ class report_aged_receivable(osv.osv):
cr.execute('delete from temp_range')
for range in LIST_RANGES:
pooler.get_pool(cr.dbname).get('temp.range').create(cr, uid, {'name':range})
self.pool['temp.range'].create(cr, uid, {'name':range})
cr.execute("""
create or replace view report_aged_receivable as (

View File

@ -19,9 +19,9 @@
#
##############################################################################
from openerp import pooler
from openerp.tools.translate import _
# Mixin to use with rml_parse, so self.pool will be defined.
class common_report_header(object):
def _sum_debit(self, period_id=False, journal_id=False):
@ -75,17 +75,17 @@ class common_report_header(object):
def get_start_period(self, data):
if data.get('form', False) and data['form'].get('period_from', False):
return pooler.get_pool(self.cr.dbname).get('account.period').browse(self.cr,self.uid,data['form']['period_from']).name
return self.pool.get('account.period').browse(self.cr,self.uid,data['form']['period_from']).name
return ''
def get_end_period(self, data):
if data.get('form', False) and data['form'].get('period_to', False):
return pooler.get_pool(self.cr.dbname).get('account.period').browse(self.cr, self.uid, data['form']['period_to']).name
return self.pool.get('account.period').browse(self.cr, self.uid, data['form']['period_to']).name
return ''
def _get_account(self, data):
if data.get('form', False) and data['form'].get('chart_account_id', False):
return pooler.get_pool(self.cr.dbname).get('account.account').browse(self.cr, self.uid, data['form']['chart_account_id']).name
return self.pool.get('account.account').browse(self.cr, self.uid, data['form']['chart_account_id']).name
return ''
def _get_sortby(self, data):
@ -120,12 +120,12 @@ class common_report_header(object):
def _get_fiscalyear(self, data):
if data.get('form', False) and data['form'].get('fiscalyear_id', False):
return pooler.get_pool(self.cr.dbname).get('account.fiscalyear').browse(self.cr, self.uid, data['form']['fiscalyear_id']).name
return self.pool.get('account.fiscalyear').browse(self.cr, self.uid, data['form']['fiscalyear_id']).name
return ''
def _get_company(self, data):
if data.get('form', False) and data['form'].get('chart_account_id', False):
return pooler.get_pool(self.cr.dbname).get('account.account').browse(self.cr, self.uid, data['form']['chart_account_id']).company_id.name
return self.pool.get('account.account').browse(self.cr, self.uid, data['form']['chart_account_id']).company_id.name
return ''
def _get_journal(self, data):
@ -137,7 +137,7 @@ class common_report_header(object):
def _get_currency(self, data):
if data.get('form', False) and data['form'].get('chart_account_id', False):
return pooler.get_pool(self.cr.dbname).get('account.account').browse(self.cr, self.uid, data['form']['chart_account_id']).company_id.currency_id.symbol
return self.pool.get('account.account').browse(self.cr, self.uid, data['form']['chart_account_id']).company_id.currency_id.symbol
return ''
#vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -22,13 +22,13 @@
<button class="oe_account_recon_next oe_button" href="javascript:void(0)">&gt;</button>
</div>
<div>
Last Reconciliation: <t t-esc="widget.last_reconciliation_date" />
Latest Manual Reconciliation Processed: <t t-esc="widget.last_reconciliation_date" />
</div>
</div>
<div>
<button class="oe_account_recon_reconcile oe_button oe_highlight" href="javascript:void(0)"
disabled="">Reconcile</button>
<button class="oe_account_recom_mark_as_reconciled oe_button" href="javascript:void(0)">Nothing to reconcile</button>
<button class="oe_account_recom_mark_as_reconciled oe_button" href="javascript:void(0)">Nothing more to reconcile</button>
</div>
</t>
</div>

View File

@ -7,7 +7,7 @@
import time
journal = self._default_journal_id(cr, uid, {'lang': u'en_US', 'tz': False, 'active_model': 'ir.ui.menu',
'journal_type': 'bank', 'period_id': time.strftime('%m'), 'active_ids': [ref('menu_bank_statement_tree')], 'active_id': ref('menu_bank_statement_tree')})
assert journal, _('Journal has not been selected')
assert journal, 'Journal has not been selected'
-
I create a bank statement with Opening and Closing balance 0.
-

View File

@ -41,7 +41,7 @@
ids = self.search(cr, uid, [('ref', '=', 'My Test Model')])
self.button_validate(cr, uid, ids, {})
moves = self.browse(cr, uid, ids)[0]
assert(moves.state == 'posted'), _('Journal Entries are not in posted state')
assert(moves.state == 'posted'), 'Journal Entries are not in posted state'
-
Then I create Recurring Lines
-
@ -57,7 +57,7 @@
self.compute(cr, uid, [ref('test_recurring_lines')], {'lang': u'en_US', 'active_model': 'ir.ui.menu',
'active_ids': [ref('menu_action_subscription_form')], 'tz': False, 'active_id': ref('menu_action_subscription_form')})
subscription_lines = subscription_line_obj.search(cr, uid, [('subscription_id', '=', ref('test_recurring_lines'))])
assert subscription_lines, _('Subscription lines has not been created')
assert subscription_lines, 'Subscription lines has not been created'
-
I provide date in 'Generate Entries' wizard
-
@ -69,5 +69,5 @@
!python {model: account.subscription.generate}: |
res = self.action_generate(cr, uid, [ref('account_subscription_generate')], {'lang': u'en_US', 'active_model': 'ir.ui.menu',
'active_ids': [ref('menu_generate_subscription')], 'tz': False, 'active_id': ref('menu_generate_subscription')})
assert res, _('Move for subscription lines has not been created')
assert res, 'Move for subscription lines has not been created'

View File

@ -21,7 +21,6 @@
from openerp.osv import osv
from openerp.tools.translate import _
from openerp import pooler
class account_invoice_confirm(osv.osv_memory):
"""
@ -34,8 +33,7 @@ class account_invoice_confirm(osv.osv_memory):
def invoice_confirm(self, cr, uid, ids, context=None):
if context is None:
context = {}
pool_obj = pooler.get_pool(cr.dbname)
account_invoice_obj = pool_obj.get('account.invoice')
account_invoice_obj = self.pool['account.invoice']
data_inv = account_invoice_obj.read(cr, uid, context['active_ids'], ['state'], context=context)
for record in data_inv:
if record['state'] not in ('draft','proforma','proforma2'):
@ -58,8 +56,7 @@ class account_invoice_cancel(osv.osv_memory):
def invoice_cancel(self, cr, uid, ids, context=None):
if context is None:
context = {}
pool_obj = pooler.get_pool(cr.dbname)
account_invoice_obj = pool_obj.get('account.invoice')
account_invoice_obj = self.pool['account.invoice']
data_inv = account_invoice_obj.read(cr, uid, context['active_ids'], ['state'], context=context)
for record in data_inv:
if record['state'] in ('cancel','paid'):

View File

@ -21,15 +21,12 @@
##############################################################################
import time
from openerp.report import report_sxw
from openerp import pooler
import logging
_logger = logging.getLogger(__name__)
class bank_statement_balance_report(report_sxw.rml_parse):
def set_context(self, objects, data, ids, report_type=None):
#_logger.warning('addons.'+__name__, 'set_context, objects = %s, data = %s, ids = %s' % (objects, data, ids))
cr = self.cr
uid = self.uid
context = self.context

View File

@ -22,7 +22,6 @@
import time
import datetime
from openerp import pooler
from openerp.report import report_sxw
class analytic_account_budget_report(report_sxw.rml_parse):

View File

@ -22,7 +22,6 @@
import time
import datetime
from openerp import pooler
from openerp.report import report_sxw
import operator
from openerp import osv

View File

@ -22,7 +22,6 @@
import time
from collections import defaultdict
from openerp import pooler
from openerp.report import report_sxw
class report_rappel(report_sxw.rml_parse):
@ -38,9 +37,8 @@ class report_rappel(report_sxw.rml_parse):
})
def _ids_to_objects(self, ids):
pool = pooler.get_pool(self.cr.dbname)
all_lines = []
for line in pool.get('account_followup.stat.by.partner').browse(self.cr, self.uid, ids):
for line in self.pool['account_followup.stat.by.partner'].browse(self.cr, self.uid, ids):
if line not in all_lines:
all_lines.append(line)
return all_lines
@ -49,8 +47,7 @@ class report_rappel(report_sxw.rml_parse):
return self._lines_get_with_partner(stat_by_partner_line.partner_id, stat_by_partner_line.company_id.id)
def _lines_get_with_partner(self, partner, company_id):
pool = pooler.get_pool(self.cr.dbname)
moveline_obj = pool.get('account.move.line')
moveline_obj = self.pool['account.move.line']
moveline_ids = moveline_obj.search(self.cr, self.uid, [
('partner_id', '=', partner.id),
('account_id.type', '=', 'receivable'),
@ -80,7 +77,7 @@ class report_rappel(report_sxw.rml_parse):
if context is None:
context = {}
context.update({'lang': stat_line.partner_id.lang})
fp_obj = pooler.get_pool(self.cr.dbname).get('account_followup.followup')
fp_obj = self.pool['account_followup.followup']
fp_line = fp_obj.browse(self.cr, self.uid, followup_id, context=context).followup_line
if not fp_line:
raise osv.except_osv(_('Error!'),_("The followup plan defined for the current company does not have any followup action."))
@ -94,10 +91,10 @@ class report_rappel(report_sxw.rml_parse):
li_delay.sort(reverse=True)
a = {}
#look into the lines of the partner that already have a followup level, and take the description of the higher level for which it is available
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),('blocked','=',False),('state','!=','draft'),('debit','!=',False),('account_id.type','=','receivable'),('followup_line_id','!=',False)])
partner_line_ids = self.pool['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),('blocked','=',False),('state','!=','draft'),('debit','!=',False),('account_id.type','=','receivable'),('followup_line_id','!=',False)])
partner_max_delay = 0
partner_max_text = ''
for i in pooler.get_pool(self.cr.dbname).get('account.move.line').browse(self.cr, self.uid, partner_line_ids, context=context):
for i in self.pool['account.move.line'].browse(self.cr, self.uid, partner_line_ids, context=context):
if i.followup_line_id.delay > partner_max_delay and i.followup_line_id.description:
partner_max_delay = i.followup_line_id.delay
partner_max_text = i.followup_line_id.description
@ -107,7 +104,7 @@ class report_rappel(report_sxw.rml_parse):
'partner_name': stat_line.partner_id.name,
'date': time.strftime('%Y-%m-%d'),
'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 '',
'user_signature': self.pool['res.users'].browse(self.cr, self.uid, self.uid, context).signature or '',
}
return text

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2011-01-30 18:36+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n"
"PO-Revision-Date: 2013-03-26 14:28+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-16 05:26+0000\n"
"X-Generator: Launchpad (build 16532)\n"
"X-Launchpad-Export-Date: 2013-03-27 04:36+0000\n"
"X-Generator: Launchpad (build 16540)\n"
#. module: account_payment
#: model:ir.actions.act_window,help:account_payment.action_payment_order_tree
@ -28,6 +28,14 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Kattintson átutalási megbízás létrehozásához.\n"
" </p><p>\n"
" Az átutalási, fizetési megbízás egy fizetési igény "
"kiegyenlítése a beszállító felé vagy \n"
" egy vevő jóváíró számlájához a vállalkozásánál.\n"
" </p>\n"
" "
#. module: account_payment
#: field:payment.line,currency:0
@ -81,7 +89,7 @@ msgstr "Vállalat"
#. module: account_payment
#: model:res.groups,name:account_payment.group_account_payment
msgid "Accounting / Payments"
msgstr ""
msgstr "Könyvelés / Átutalások, fizetések"
#. module: account_payment
#: selection:payment.line,state:0
@ -123,13 +131,15 @@ msgid ""
"You cannot cancel an invoice which has already been imported in a payment "
"order. Remove it from the following payment order : %s."
msgstr ""
"Nem tud visszavonni olyan számlát ami már be lett töltve, importálva az "
"utalásba. Vegye le a következő utalási megbízásból : %s."
#. module: account_payment
#: code:addons/account_payment/account_invoice.py:43
#: code:addons/account_payment/account_move_line.py:110
#, python-format
msgid "Error!"
msgstr ""
msgstr "Hiba!"
#. module: account_payment
#: report:payment.order:0
@ -194,6 +204,10 @@ msgid ""
" Once the bank is confirmed the status is set to 'Confirmed'.\n"
" Then the order is paid the status is 'Done'."
msgstr ""
"Ha az utalás, megbízás be lett rögzítve akkor annak állapota 'Tervezet'.\n"
" Ha a bank jóváhagyta annak rögzítési állapotát akkor az állapota "
"'Jóváhagyott'.\n"
" Ha az utalás, fizetés végrehajtva akkor annak az állapota 'Elvégezve'."
#. module: account_payment
#: view:payment.order:0
@ -219,7 +233,7 @@ msgstr "Struktúrált"
#. module: account_payment
#: view:account.bank.statement:0
msgid "Import Payment Lines"
msgstr ""
msgstr "Utalási sorok betöltése, importálása"
#. module: account_payment
#: view:payment.line:0
@ -261,7 +275,7 @@ msgstr ""
#. module: account_payment
#: field:payment.order,date_created:0
msgid "Creation Date"
msgstr ""
msgstr "Létrehozás dátuma"
#. module: account_payment
#: help:payment.mode,journal:0
@ -271,7 +285,7 @@ msgstr "A fizetési mód bank- vagy pénztárnaplója"
#. module: account_payment
#: selection:payment.order,date_prefered:0
msgid "Fixed date"
msgstr "Rögzített"
msgstr "Rögzített dátum"
#. module: account_payment
#: field:payment.line,info_partner:0
@ -369,7 +383,7 @@ msgstr "Átutalás hozzáadása a kivonathoz"
#: code:addons/account_payment/account_move_line.py:110
#, python-format
msgid "There is no partner defined on the entry line."
msgstr ""
msgstr "A beviteli soron nem lett partner meghatározva"
#. module: account_payment
#: help:payment.mode,name:0
@ -401,7 +415,7 @@ msgstr "Tervezet"
#: view:payment.order:0
#: field:payment.order,state:0
msgid "Status"
msgstr ""
msgstr "Állapot"
#. module: account_payment
#: help:payment.line,communication2:0
@ -432,7 +446,7 @@ msgstr "Átutalás sorok"
#. module: account_payment
#: model:ir.model,name:account_payment.model_account_move_line
msgid "Journal Items"
msgstr "Könyvelési tételsorok"
msgstr "Könyvelési napló tételsorok"
#. module: account_payment
#: help:payment.line,move_line_id:0
@ -449,7 +463,7 @@ msgstr "Keresés"
#. module: account_payment
#: field:payment.order,user_id:0
msgid "Responsible"
msgstr ""
msgstr "Felelős"
#. module: account_payment
#: field:payment.line,date:0
@ -464,7 +478,7 @@ msgstr "Összesen:"
#. module: account_payment
#: field:payment.order,date_done:0
msgid "Execution Date"
msgstr ""
msgstr "Kivitelezés dátuma"
#. module: account_payment
#: view:account.payment.populate.statement:0
@ -538,12 +552,12 @@ msgstr "Közlemény"
#: view:account.payment.populate.statement:0
#: view:payment.order.create:0
msgid "Cancel"
msgstr "Mégse"
msgstr "Visszavonás"
#. module: account_payment
#: field:payment.line,bank_id:0
msgid "Destination Bank Account"
msgstr ""
msgstr "Jogosult bankszámla száma"
#. module: account_payment
#: view:payment.line:0
@ -581,7 +595,7 @@ msgstr "Közlemény folytatása"
#. module: account_payment
#: field:payment.order,date_scheduled:0
msgid "Scheduled Date"
msgstr ""
msgstr "Tervezett dátum"
#. module: account_payment
#: view:account.payment.make.payment:0
@ -676,14 +690,14 @@ msgstr "Átutalás végrehajtása"
#. module: account_payment
#: field:payment.order,date_prefered:0
msgid "Preferred Date"
msgstr ""
msgstr "Előnyben részesített dátum"
#. module: account_payment
#: view:account.payment.make.payment:0
#: view:account.payment.populate.statement:0
#: view:payment.order.create:0
msgid "or"
msgstr ""
msgstr "vagy"
#. module: account_payment
#: help:payment.mode,bank_id:0

View File

@ -21,7 +21,6 @@
import time
from openerp import pooler
from openerp.report import report_sxw
class payment_order(report_sxw.rml_parse):
@ -38,8 +37,7 @@ class payment_order(report_sxw.rml_parse):
def _get_invoice_name(self, invoice_id):
if invoice_id:
pool = pooler.get_pool(self.cr.dbname)
value_name = pool.get('account.invoice').name_get(self.cr, self.uid, [invoice_id])
value_name = self.pool['account.invoice'].name_get(self.cr, self.uid, [invoice_id])
if value_name:
return value_name[0][1]
return False
@ -67,8 +65,7 @@ class payment_order(report_sxw.rml_parse):
def _get_account_name(self,bank_id):
if bank_id:
pool = pooler.get_pool(self.cr.dbname)
value_name = pool.get('res.partner.bank').name_get(self.cr, self.uid, [bank_id])
value_name = self.pool['res.partner.bank'].name_get(self.cr, self.uid, [bank_id])
if value_name:
return value_name[0][1]
return False

View File

@ -0,0 +1,241 @@
# Chinese (Simplified) translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-21 19:22+0000\n"
"Last-Translator: Liuming <gumdam20@me.com>\n"
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-22 04:57+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: account_test
#: view:accounting.assert.test:0
msgid ""
"Code should always set a variable named `result` with the result of your "
"test, that can be a list or\n"
"a dictionary. If `result` is an empty list, it means that the test was "
"succesful. Otherwise it will\n"
"try to translate and print what is inside `result`.\n"
"\n"
"If the result of your test is a dictionary, you can set a variable named "
"`column_order` to choose in\n"
"what order you want to print `result`'s content.\n"
"\n"
"Should you need them, you can also use the following variables into your "
"code:\n"
" * cr: cursor to the database\n"
" * uid: ID of the current user\n"
"\n"
"In any ways, the code must be legal python statements with correct "
"indentation (if needed).\n"
"\n"
"Example: \n"
" sql = '''SELECT id, name, ref, date\n"
" FROM account_move_line \n"
" WHERE account_id IN (SELECT id FROM account_account WHERE type "
"= 'view')\n"
" '''\n"
" cr.execute(sql)\n"
" result = cr.dictfetchall()"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,name:account_test.account_test_02
msgid "Test 2: Opening a fiscal year"
msgstr "测试2: 打开一个会计年度"
#. module: account_test
#: model:accounting.assert.test,desc:account_test.account_test_05
msgid ""
"Check that reconciled invoice for Sales/Purchases has reconciled entries for "
"Payable and Receivable Accounts"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,desc:account_test.account_test_03
msgid ""
"Check if movement lines are balanced and have the same date and period"
msgstr ""
#. module: account_test
#: field:accounting.assert.test,name:0
msgid "Test Name"
msgstr ""
#. module: account_test
#: report:account.test.assert.print:0
msgid "Accouting tests on"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,name:account_test.account_test_01
msgid "Test 1: General balance"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,desc:account_test.account_test_06
msgid "Check that paid/reconciled invoices are not in 'Open' state"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,desc:account_test.account_test_05_2
msgid ""
"Check that reconciled account moves, that define Payable and Receivable "
"accounts, are belonging to reconciled invoices"
msgstr ""
#. module: account_test
#: view:accounting.assert.test:0
msgid "Tests"
msgstr ""
#. module: account_test
#: field:accounting.assert.test,desc:0
msgid "Test Description"
msgstr ""
#. module: account_test
#: view:accounting.assert.test:0
msgid "Description"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,desc:account_test.account_test_06_1
msgid "Check that there's no move for any account with « View » account type"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,name:account_test.account_test_08
msgid "Test 9 : Accounts and partners on account moves"
msgstr ""
#. module: account_test
#: model:ir.actions.act_window,name:account_test.action_accounting_assert
#: model:ir.actions.report.xml,name:account_test.account_assert_test_report
#: model:ir.ui.menu,name:account_test.menu_action_license
msgid "Accounting Tests"
msgstr ""
#. module: account_test
#: code:addons/account_test/report/account_test_report.py:74
#, python-format
msgid "The test was passed successfully"
msgstr ""
#. module: account_test
#: field:accounting.assert.test,active:0
msgid "Active"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,name:account_test.account_test_06
msgid "Test 6 : Invoices status"
msgstr ""
#. module: account_test
#: model:ir.model,name:account_test.model_accounting_assert_test
msgid "accounting.assert.test"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,name:account_test.account_test_05
msgid ""
"Test 5.1 : Payable and Receivable accountant lines of reconciled invoices"
msgstr ""
#. module: account_test
#: field:accounting.assert.test,code_exec:0
msgid "Python code"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,desc:account_test.account_test_07
msgid ""
"Check on bank statement that the Closing Balance = Starting Balance + sum of "
"statement lines"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,name:account_test.account_test_07
msgid "Test 8 : Closing balance on bank statements"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,name:account_test.account_test_03
msgid "Test 3: Movement lines"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,name:account_test.account_test_05_2
msgid "Test 5.2 : Reconcilied invoices and Payable/Receivable accounts"
msgstr ""
#. module: account_test
#: view:accounting.assert.test:0
msgid "Expression"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,name:account_test.account_test_04
msgid "Test 4: Totally reconciled mouvements"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,desc:account_test.account_test_04
msgid "Check if the totally reconciled movements are balanced"
msgstr ""
#. module: account_test
#: field:accounting.assert.test,sequence:0
msgid "Sequence"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,desc:account_test.account_test_02
msgid ""
"Check if the balance of the new opened fiscal year matches with last year's "
"balance"
msgstr ""
#. module: account_test
#: view:accounting.assert.test:0
msgid "Python Code"
msgstr ""
#. module: account_test
#: model:ir.actions.act_window,help:account_test.action_accounting_assert
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Click to create Accounting Test.\n"
" </p>\n"
" "
msgstr ""
#. module: account_test
#: model:accounting.assert.test,desc:account_test.account_test_01
msgid "Check the balance: Debit sum = Credit sum"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,desc:account_test.account_test_08
msgid "Check that general accounts and partners on account moves are active"
msgstr ""
#. module: account_test
#: model:accounting.assert.test,name:account_test.account_test_06_1
msgid "Test 7: « View  » account type"
msgstr ""
#. module: account_test
#: view:accounting.assert.test:0
msgid "Code Help"
msgstr ""

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2012-12-27 22:53+0000\n"
"Last-Translator: Balint (eSolve) <Unknown>\n"
"PO-Revision-Date: 2013-03-26 15:03+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-16 05:33+0000\n"
"X-Generator: Launchpad (build 16532)\n"
"X-Launchpad-Export-Date: 2013-03-27 04:36+0000\n"
"X-Generator: Launchpad (build 16540)\n"
#. module: account_voucher
#: field:account.bank.statement.line,voucher_id:0
@ -24,7 +24,7 @@ msgstr ""
#. module: account_voucher
#: model:ir.model,name:account_voucher.model_account_config_settings
msgid "account.config.settings"
msgstr ""
msgstr "account.config.settings"
#. module: account_voucher
#: code:addons/account_voucher/account_voucher.py:369
@ -59,11 +59,13 @@ msgid ""
"Computed as the difference between the amount stated in the voucher and the "
"sum of allocation on the voucher lines."
msgstr ""
"Különbség ami a nyugtán lévő végösszeg és a nyugta soraiban lévő rész "
"összegek különbsége."
#. module: account_voucher
#: view:account.voucher:0
msgid "(Update)"
msgstr ""
msgstr "(Frissítés)"
#. module: account_voucher
#: view:account.voucher:0
@ -90,7 +92,7 @@ msgstr "Március"
#. module: account_voucher
#: field:account.voucher,message_unread:0
msgid "Unread Messages"
msgstr ""
msgstr "Olvasatlan üzenetek"
#. module: account_voucher
#: view:account.voucher:0
@ -115,13 +117,13 @@ msgstr "Tranzakció hivatkozási száma"
#. module: account_voucher
#: view:sale.receipt.report:0
msgid "Group by year of Invoice Date"
msgstr ""
msgstr "Számla kibocsátási éve szerinti csoportosítás"
#. module: account_voucher
#: view:sale.receipt.report:0
#: field:sale.receipt.report,user_id:0
msgid "Salesperson"
msgstr ""
msgstr "Értékesítő"
#. module: account_voucher
#: view:account.voucher:0
@ -145,7 +147,7 @@ msgstr "Jóváhagyás"
#: model:ir.actions.act_window,name:account_voucher.action_vendor_payment
#: model:ir.ui.menu,name:account_voucher.menu_action_vendor_payment
msgid "Supplier Payments"
msgstr ""
msgstr "Beszállítói átutalások, fizetések"
#. module: account_voucher
#: model:ir.actions.act_window,help:account_voucher.action_purchase_receipt
@ -179,7 +181,7 @@ msgstr "Főkönyvi számla"
#. module: account_voucher
#: field:account.voucher,line_dr_ids:0
msgid "Debits"
msgstr "Tartozik"
msgstr "Tartozások"
#. module: account_voucher
#: view:account.statement.from.invoice.lines:0
@ -207,7 +209,7 @@ msgstr "Megjegyzések"
#. module: account_voucher
#: field:account.voucher,message_ids:0
msgid "Messages"
msgstr ""
msgstr "Üzenetek"
#. module: account_voucher
#: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt
@ -225,7 +227,7 @@ msgstr "Könyvelési tételsor"
#: code:addons/account_voucher/account_voucher.py:981
#, python-format
msgid "Error!"
msgstr ""
msgstr "Hiba!"
#. module: account_voucher
#: field:account.voucher.line,amount:0
@ -347,7 +349,7 @@ msgstr "Számlák importálása"
#: code:addons/account_voucher/account_voucher.py:1112
#, python-format
msgid "Wrong voucher line"
msgstr ""
msgstr "Nem megfelelő nyugta sorok"
#. module: account_voucher
#: selection:account.voucher,pay_now:0
@ -425,7 +427,7 @@ msgstr "Típus"
#. module: account_voucher
#: view:sale.receipt.report:0
msgid "Pro-forma Vouchers"
msgstr ""
msgstr "Pro-forma nyugták"
#. module: account_voucher
#: view:account.voucher:0
@ -468,7 +470,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher,is_multi_currency:0
msgid "Multi Currency Voucher"
msgstr ""
msgstr "Több pénznemű nyugták"
#. module: account_voucher
#: view:account.voucher:0
@ -524,7 +526,7 @@ msgstr "ÁFA összege"
#. module: account_voucher
#: view:sale.receipt.report:0
msgid "Validated Vouchers"
msgstr ""
msgstr "Jóváhagyott nyugták"
#. module: account_voucher
#: model:ir.actions.act_window,help:account_voucher.action_vendor_receipt
@ -589,7 +591,7 @@ msgstr "Költség sorok"
#. module: account_voucher
#: view:account.voucher:0
msgid "Sale voucher"
msgstr ""
msgstr "Értékesítési nyugta"
#. module: account_voucher
#: help:account.voucher,is_multi_currency:0
@ -639,12 +641,12 @@ msgstr "Vevők és szállítók"
#. module: account_voucher
#: view:account.voucher:0
msgid "Voucher Payment"
msgstr ""
msgstr "Nyugta kiegyenlítés"
#. module: account_voucher
#: field:sale.receipt.report,state:0
msgid "Voucher Status"
msgstr ""
msgstr "Nyugta állapota"
#. module: account_voucher
#: view:account.voucher:0
@ -662,7 +664,7 @@ msgstr "Vállalat"
#. module: account_voucher
#: help:account.voucher,paid:0
msgid "The Voucher has been totally paid."
msgstr ""
msgstr "A nyugta ki lett egyenlítve"
#. module: account_voucher
#: selection:account.voucher,payment_option:0
@ -679,7 +681,7 @@ msgstr ""
#: view:account.voucher:0
#: view:sale.receipt.report:0
msgid "Draft Vouchers"
msgstr ""
msgstr "Nyugta tervezetek"
#. module: account_voucher
#: view:sale.receipt.report:0
@ -690,7 +692,7 @@ msgstr "Bruttó érték"
#. module: account_voucher
#: view:account.voucher:0
msgid "Purchase Voucher"
msgstr ""
msgstr "Beszerzési nyugta"
#. module: account_voucher
#: view:account.voucher:0

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2011-01-30 18:54+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n"
"PO-Revision-Date: 2013-03-25 13:25+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-16 05:41+0000\n"
"X-Generator: Launchpad (build 16532)\n"
"X-Launchpad-Export-Date: 2013-03-26 04:44+0000\n"
"X-Generator: Launchpad (build 16540)\n"
#. module: analytic
#: field:account.analytic.account,child_ids:0
@ -24,13 +24,13 @@ msgstr "Alárendelt gyűjtőkódok"
#. module: analytic
#: selection:account.analytic.account,state:0
msgid "In Progress"
msgstr ""
msgstr "Folyamatban"
#. module: analytic
#: code:addons/analytic/analytic.py:229
#, python-format
msgid "Contract: "
msgstr ""
msgstr "Szerződés: "
#. module: analytic
#: selection:account.analytic.account,state:0
@ -40,7 +40,7 @@ msgstr "Sablon"
#. module: analytic
#: view:account.analytic.account:0
msgid "End Date"
msgstr ""
msgstr "Befejezés dátuma"
#. module: analytic
#: help:account.analytic.line,unit_amount:0
@ -64,6 +64,14 @@ msgid ""
"The special type 'Template of Contract' allows you to define a template with "
"default data that you can reuse easily."
msgstr ""
"A nézet típus kiválasztásával, megtiltja ezzel a fiókkal a napló bejegyzés "
"készítését.\n"
"Az 'Elemző/gyüjtő számla' típust olyan fiókokhoz használja, melyeket csak "
"könyveléshez használ.\n"
"Ha Szerződést vagy Projektet választ, lehetősége lesz kezelni a fiók "
"érvényesítés és számlázási lehetőségeit.\n"
"A speciális 'Szerződési sablon' típus lehetővé teszi alapértékekkel "
"kitöltött sablon létrehozását, melyet könnyen ismét felhasználhat."
#. module: analytic
#: view:account.analytic.account:0
@ -82,12 +90,12 @@ msgstr ""
#. module: analytic
#: selection:account.analytic.account,type:0
msgid "Contract or Project"
msgstr ""
msgstr "Projekt szerződése"
#. module: analytic
#: field:account.analytic.account,name:0
msgid "Account/Contract Name"
msgstr ""
msgstr "Fiók/Szerződés neve"
#. module: analytic
#: field:account.analytic.account,manager_id:0
@ -97,7 +105,7 @@ msgstr "Felelős"
#. module: analytic
#: field:account.analytic.account,message_follower_ids:0
msgid "Followers"
msgstr ""
msgstr "Követők"
#. module: analytic
#: selection:account.analytic.account,state:0
@ -107,28 +115,28 @@ msgstr "Lezárt"
#. module: analytic
#: model:mail.message.subtype,name:analytic.mt_account_pending
msgid "Contract to Renew"
msgstr ""
msgstr "Megújítandó szerződés"
#. module: analytic
#: selection:account.analytic.account,state:0
msgid "New"
msgstr ""
msgstr "Új"
#. module: analytic
#: field:account.analytic.account,user_id:0
msgid "Project Manager"
msgstr ""
msgstr "Projektmenedzser"
#. module: analytic
#: field:account.analytic.account,state:0
msgid "Status"
msgstr ""
msgstr "Állapot"
#. module: analytic
#: code:addons/analytic/analytic.py:271
#, python-format
msgid "%s (copy)"
msgstr ""
msgstr "%s (másolat)"
#. module: analytic
#: model:ir.model,name:analytic.model_account_analytic_line
@ -144,12 +152,12 @@ msgstr "Leírás"
#. module: analytic
#: field:account.analytic.account,message_unread:0
msgid "Unread Messages"
msgstr ""
msgstr "Olvasatlan üzenetek"
#. module: analytic
#: constraint:account.analytic.account:0
msgid "Error! You cannot create recursive analytic accounts."
msgstr ""
msgstr "Hiba! Nem tud visszatérő Elemző/Gyűjtő számlákat létrehozni."
#. module: analytic
#: field:account.analytic.account,company_id:0
@ -160,12 +168,12 @@ msgstr "Vállalat"
#. module: analytic
#: view:account.analytic.account:0
msgid "Renewal"
msgstr ""
msgstr "Megújítás"
#. module: analytic
#: help:account.analytic.account,message_ids:0
msgid "Messages and communication history"
msgstr ""
msgstr "Üzenetek és kommunikációs történet"
#. module: analytic
#: model:mail.message.subtype,description:analytic.mt_account_opened
@ -194,7 +202,7 @@ msgstr ""
#. module: analytic
#: field:account.analytic.account,message_is_follower:0
msgid "Is a Follower"
msgstr ""
msgstr "Ez egy követő"
#. module: analytic
#: field:account.analytic.line,user_id:0
@ -204,7 +212,7 @@ msgstr "Felhasználó"
#. module: analytic
#: model:mail.message.subtype,description:analytic.mt_account_pending
msgid "Contract <b>pending</b>"
msgstr ""
msgstr "Szerződés <b>függőben</b>"
#. module: analytic
#: field:account.analytic.line,date:0
@ -214,12 +222,12 @@ msgstr "Dátum"
#. module: analytic
#: model:mail.message.subtype,name:analytic.mt_account_closed
msgid "Contract Finished"
msgstr ""
msgstr "Szerződés végrehejtva"
#. module: analytic
#: view:account.analytic.account:0
msgid "Terms and Conditions"
msgstr ""
msgstr "Kikötések és feltételek"
#. module: analytic
#: help:account.analytic.line,amount:0
@ -233,17 +241,17 @@ msgstr ""
#. module: analytic
#: field:account.analytic.account,partner_id:0
msgid "Customer"
msgstr ""
msgstr "Vevő"
#. module: analytic
#: field:account.analytic.account,child_complete_ids:0
msgid "Account Hierarchy"
msgstr ""
msgstr "Számla fiók hierarchia, rangsor"
#. module: analytic
#: field:account.analytic.account,message_ids:0
msgid "Messages"
msgstr ""
msgstr "Üzenetek"
#. module: analytic
#: field:account.analytic.account,parent_id:0
@ -253,23 +261,23 @@ msgstr "Fölérendelt gyűjtőkód"
#. module: analytic
#: view:account.analytic.account:0
msgid "Contract Information"
msgstr ""
msgstr "Szerződé információja"
#. module: analytic
#: field:account.analytic.account,template_id:0
#: selection:account.analytic.account,type:0
msgid "Template of Contract"
msgstr ""
msgstr "Szerződés sablonja"
#. module: analytic
#: field:account.analytic.account,message_summary:0
msgid "Summary"
msgstr ""
msgstr "Összegzés"
#. module: analytic
#: field:account.analytic.account,quantity_max:0
msgid "Prepaid Service Units"
msgstr ""
msgstr "Előre fizetett szolgáltatási egység"
#. module: analytic
#: field:account.analytic.account,credit:0
@ -279,12 +287,12 @@ msgstr "Követel"
#. module: analytic
#: model:mail.message.subtype,name:analytic.mt_account_opened
msgid "Contract Opened"
msgstr ""
msgstr "Szerződés megnyitva, elindítva"
#. module: analytic
#: model:mail.message.subtype,description:analytic.mt_account_closed
msgid "Contract <b>closed</b>"
msgstr ""
msgstr "Szerződés <b>lezárva</b>"
#. module: analytic
#: selection:account.analytic.account,state:0
@ -294,7 +302,7 @@ msgstr "Érvénytelenített"
#. module: analytic
#: selection:account.analytic.account,type:0
msgid "Analytic View"
msgstr ""
msgstr "Elemző nézet"
#. module: analytic
#: field:account.analytic.account,balance:0

View File

@ -76,11 +76,11 @@ class account_analytic_account(osv.osv):
GROUP BY product_id, user_id, to_invoice, product_uom_id, line.name""", (account.id,))
res[account.id] = 0.0
for product_id, price, user_id, factor_id, qty, uom, line_name in cr.fetchall():
for product_id, total_amount, user_id, factor_id, qty, uom, line_name in cr.fetchall():
#the amount to reinvoice is the real cost. We don't use the pricelist
price = -price
total_amount = -total_amount
factor = self.pool.get('hr_timesheet_invoice.factor').browse(cr, uid, factor_id, context=context)
res[account.id] += price * qty * (100 - factor.factor or 0.0) / 100.0
res[account.id] += total_amount * (100 - factor.factor or 0.0) / 100.0
return res
def _expense_invoiced_calc(self, cr, uid, ids, name, arg, context=None):
@ -89,8 +89,13 @@ class account_analytic_account(osv.osv):
for account in self.browse(cr, uid, ids, context=context):
res[account.id] = 0.0
line_ids = lines_obj.search(cr, uid, [('account_id','=', account.id), ('invoice_id','!=',False), ('to_invoice','!=', False), ('journal_id.type', '=', 'purchase')], context=context)
#Put invoices in separate array in order not to calculate them double
invoices = []
for line in lines_obj.browse(cr, uid, line_ids, context=context):
res[account.id] += line.invoice_id.amount_untaxed
if line.invoice_id not in invoices:
invoices.append(line.invoice_id)
for invoice in invoices:
res[account.id] += invoice.amount_untaxed
return res
def _ca_invoiced_calc(self, cr, uid, ids, name, arg, context=None):

View File

@ -0,0 +1,72 @@
# Hungarian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-20 14:54+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-21 04:38+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: analytic_contract_hr_expense
#: view:account.analytic.account:0
msgid "or view"
msgstr "vagy nézet"
#. module: analytic_contract_hr_expense
#: view:account.analytic.account:0
msgid "Nothing to invoice, create"
msgstr "Nincs mit számlázni, hozzon létre"
#. module: analytic_contract_hr_expense
#: view:account.analytic.account:0
msgid "expenses"
msgstr "költségek"
#. module: analytic_contract_hr_expense
#: model:ir.model,name:analytic_contract_hr_expense.model_account_analytic_account
msgid "Analytic Account"
msgstr "Gyűjtő/elemző könyvelés"
#. module: analytic_contract_hr_expense
#: code:addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py:129
#, python-format
msgid "Expenses to Invoice of %s"
msgstr "Ennek számlázandó költségei %s"
#. module: analytic_contract_hr_expense
#: code:addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py:121
#, python-format
msgid "Expenses of %s"
msgstr "Ennek költségei %s"
#. module: analytic_contract_hr_expense
#: field:account.analytic.account,expense_invoiced:0
#: field:account.analytic.account,expense_to_invoice:0
#: field:account.analytic.account,remaining_expense:0
msgid "unknown"
msgstr "ismeretlen"
#. module: analytic_contract_hr_expense
#: field:account.analytic.account,est_expenses:0
msgid "Estimation of Expenses to Invoice"
msgstr "Költségek költségek számlázára"
#. module: analytic_contract_hr_expense
#: field:account.analytic.account,charge_expenses:0
msgid "Charge Expenses"
msgstr "Költségek felszámolása"
#. module: analytic_contract_hr_expense
#: view:account.analytic.account:0
msgid "⇒ Invoice"
msgstr "⇒ Számla"

View File

@ -7,44 +7,44 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2011-02-09 13:28+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n"
"PO-Revision-Date: 2013-03-20 14:30+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-16 05:34+0000\n"
"X-Launchpad-Export-Date: 2013-03-21 04:38+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: analytic_user_function
#: model:ir.model,name:analytic_user_function.model_account_analytic_line
msgid "Analytic Line"
msgstr ""
msgstr "Gyűjtőkód tételsor"
#. module: analytic_user_function
#: view:account.analytic.account:0
msgid "Invoice Price Rate per User"
msgstr ""
msgstr "Számlázási ár mértéke felhasználónként"
#. module: analytic_user_function
#: field:analytic.user.funct.grid,product_id:0
msgid "Service"
msgstr ""
msgstr "Szolgáltatás"
#. module: analytic_user_function
#: model:ir.model,name:analytic_user_function.model_analytic_user_funct_grid
msgid "Price per User"
msgstr ""
msgstr "Felhasználónkénti ár"
#. module: analytic_user_function
#: field:analytic.user.funct.grid,price:0
msgid "Price"
msgstr ""
msgstr "Ár"
#. module: analytic_user_function
#: help:analytic.user.funct.grid,price:0
msgid "Price per hour for this user."
msgstr ""
msgstr "Ennek a felhasználónak a óránkénti ára."
#. module: analytic_user_function
#: field:analytic.user.funct.grid,account_id:0
@ -57,12 +57,12 @@ msgstr "Gyűjtőkód"
#: code:addons/analytic_user_function/analytic_user_function.py:135
#, python-format
msgid "Error!"
msgstr ""
msgstr "Hiba!"
#. module: analytic_user_function
#: view:analytic.user.funct.grid:0
msgid "Invoicing Data"
msgstr ""
msgstr "Számlázási adatok"
#. module: analytic_user_function
#: field:account.analytic.account,user_product_ids:0
@ -78,11 +78,16 @@ msgid ""
" of the default values when invoicing the "
"customer."
msgstr ""
"Határozzon meg egy sajátos szolgáltatást (pl. Rangelső tanácsadó)\n"
" és árat egy pár felhasználóhoz ezeknek az "
"adatoknak az alap\n"
" adatok helyetti használatához a vevő "
"számlázására."
#. module: analytic_user_function
#: field:analytic.user.funct.grid,uom_id:0
msgid "Unit of Measure"
msgstr ""
msgstr "Mértékegység"
#. module: analytic_user_function
#: code:addons/analytic_user_function/analytic_user_function.py:107
@ -105,6 +110,13 @@ msgid ""
" specific user. This allows to set invoicing\n"
" conditions for a group of contracts."
msgstr ""
"OpenERP visszamenőlegesen keresi a szülő fiókokban annak\n"
" ellenőrzésére, hogy sajátos körülmények vannak-"
"e\n"
" meghatározva a felhasználóhoz. Ez lehetővé "
"teszi\n"
" sajátos számlázási körülmény beállítását egy "
"vevő csoporthoz."
#. module: analytic_user_function
#: field:analytic.user.funct.grid,user_id:0

View File

@ -0,0 +1,350 @@
# Hungarian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-20 14:51+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-21 04:38+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: anonymization
#: model:ir.model,name:anonymization.model_ir_model_fields_anonymize_wizard
msgid "ir.model.fields.anonymize.wizard"
msgstr "ir.model.fields.anonymize.wizard"
#. module: anonymization
#: field:ir.model.fields.anonymization,model_id:0
msgid "Object"
msgstr "Objektum"
#. module: anonymization
#: model:ir.model,name:anonymization.model_ir_model_fields_anonymization_migration_fix
msgid "ir.model.fields.anonymization.migration.fix"
msgstr "ir.model.fields.anonymization.migration.fix"
#. module: anonymization
#: field:ir.model.fields.anonymization.migration.fix,target_version:0
msgid "Target Version"
msgstr "Cél verziója"
#. module: anonymization
#: selection:ir.model.fields.anonymization.migration.fix,query_type:0
msgid "sql"
msgstr "sql"
#. module: anonymization
#: code:addons/anonymization/anonymization.py:91
#, python-format
msgid ""
"The database anonymization is currently in an unstable state. Some fields "
"are anonymized, while some fields are not anonymized. You should try to "
"solve this problem before trying to create, write or delete fields."
msgstr ""
"Az adatbázis névtelenítő/titkosító bizonytalan állapotban van. Egyes mezők "
"névtelenítettek/titkosítottak lesznek, de egyesek nem. Ezt a problémát meg "
"kell oldania, mielőtt mezőket hozna létre, írna vagy törölne."
#. module: anonymization
#: field:ir.model.fields.anonymization,field_name:0
msgid "Field Name"
msgstr "Mezőnév"
#. module: anonymization
#: field:ir.model.fields.anonymization,field_id:0
#: field:ir.model.fields.anonymization.migration.fix,field_name:0
msgid "Field"
msgstr "Mező"
#. module: anonymization
#: selection:ir.model.fields.anonymization,state:0
msgid "New"
msgstr "Új"
#. module: anonymization
#: field:ir.model.fields.anonymize.wizard,file_import:0
msgid "Import"
msgstr "Importálás"
#. module: anonymization
#: model:ir.model,name:anonymization.model_ir_model_fields_anonymization
msgid "ir.model.fields.anonymization"
msgstr "ir.model.fields.anonymization"
#. module: anonymization
#: code:addons/anonymization/anonymization.py:300
#, python-format
msgid ""
"Before executing the anonymization process, you should make a backup of your "
"database."
msgstr ""
"Mielőtt kiadna egy névtelenítő/titkosító folyamatot, készítsen mentést az "
"adatbázisról."
#. module: anonymization
#: field:ir.model.fields.anonymization.history,state:0
#: field:ir.model.fields.anonymize.wizard,state:0
msgid "Status"
msgstr "Állapot"
#. module: anonymization
#: field:ir.model.fields.anonymization.history,direction:0
msgid "Direction"
msgstr "Irány"
#. module: anonymization
#: model:ir.actions.act_window,name:anonymization.action_ir_model_fields_anonymization_tree
#: view:ir.model.fields.anonymization:0
#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization_fields
msgid "Anonymized Fields"
msgstr "névtelenített/titkosított mezők"
#. module: anonymization
#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization
msgid "Database anonymization"
msgstr "Adatbázis névtelenítés/titkosítás"
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,direction:0
msgid "clear -> anonymized"
msgstr "törlés -> titkosított"
#. module: anonymization
#: selection:ir.model.fields.anonymization,state:0
#: selection:ir.model.fields.anonymize.wizard,state:0
msgid "Anonymized"
msgstr "Névtelenített/titkosított"
#. module: anonymization
#: field:ir.model.fields.anonymization,state:0
msgid "unknown"
msgstr "ismeretlen"
#. module: anonymization
#: code:addons/anonymization/anonymization.py:448
#, python-format
msgid "Anonymized value is None. This cannot happens."
msgstr "Nincs névtelenítés/titkosítás. Ilyen nincs."
#. module: anonymization
#: field:ir.model.fields.anonymization.history,filepath:0
msgid "File path"
msgstr "Fájl elérési útvonal"
#. module: anonymization
#: help:ir.model.fields.anonymize.wizard,file_import:0
msgid ""
"This is the file created by the anonymization process. It should have the "
"'.pickle' extention."
msgstr ""
"Ez a névtelenítési/titkosítási folyamat által létrehozott fájl. Ennek "
"'.pickle' kiterjesztésűnek kell lennie."
#. module: anonymization
#: field:ir.model.fields.anonymization.history,date:0
msgid "Date"
msgstr "Dátum"
#. module: anonymization
#: field:ir.model.fields.anonymize.wizard,file_export:0
msgid "Export"
msgstr "Exportálás"
#. module: anonymization
#: view:ir.model.fields.anonymize.wizard:0
msgid "Reverse the Database Anonymization"
msgstr "Állítsa vissza az adatbázis névtelenítését/titkosítását"
#. module: anonymization
#: code:addons/anonymization/anonymization.py:444
#, python-format
msgid ""
"Cannot anonymize fields of these types: binary, many2many, many2one, "
"one2many, reference."
msgstr ""
"ilyen típusú mezőket nem tud névteleníteni/titkosítani: bináris, many2many, "
"many2one, one2many, referencia, hivatkozás."
#. module: anonymization
#: view:ir.model.fields.anonymize.wizard:0
msgid "Database Anonymization"
msgstr "Adatbázis névtelenítése/titkosítása"
#. module: anonymization
#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization_wizard
msgid "Anonymize database"
msgstr "Adatbázis névtelenítés/titkosítás"
#. module: anonymization
#: selection:ir.model.fields.anonymization.migration.fix,query_type:0
msgid "python"
msgstr "python"
#. module: anonymization
#: view:ir.model.fields.anonymization.history:0
#: field:ir.model.fields.anonymization.history,field_ids:0
msgid "Fields"
msgstr "Mezők"
#. module: anonymization
#: selection:ir.model.fields.anonymization,state:0
#: selection:ir.model.fields.anonymize.wizard,state:0
msgid "Clear"
msgstr "Tiszta"
#. module: anonymization
#: code:addons/anonymization/anonymization.py:533
#, python-format
msgid ""
"It is not possible to reverse the anonymization process without supplying "
"the anonymization export file."
msgstr ""
"Nem lehetséges a névtelenítés/titkosítás visszaállítási folyamat az "
"névtelenítési/titkosítási export fájl megléte nélkül."
#. module: anonymization
#: field:ir.model.fields.anonymize.wizard,summary:0
msgid "Summary"
msgstr "Összegzés"
#. module: anonymization
#: view:ir.model.fields.anonymization:0
msgid "Anonymized Field"
msgstr "Névtelenített/titkosított mező"
#. module: anonymization
#: code:addons/anonymization/anonymization.py:391
#: code:addons/anonymization/anonymization.py:526
#, python-format
msgid ""
"The database anonymization is currently in an unstable state. Some fields "
"are anonymized, while some fields are not anonymized. You should try to "
"solve this problem before trying to do anything."
msgstr ""
"Az adatbázis névtelenítő/titkosító bizonytalan állapotban van. Egyes mezők "
"névtelenítettek/titkosítottak lesznek, de egyesek nem. Ezt a problémát meg "
"kell oldania, mielőtt tenne valamit."
#. module: anonymization
#: selection:ir.model.fields.anonymize.wizard,state:0
msgid "Unstable"
msgstr "Bizonytalan"
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,state:0
msgid "Exception occured"
msgstr "Kivétel keletkezett"
#. module: anonymization
#: selection:ir.model.fields.anonymization,state:0
msgid "Not Existing"
msgstr "Nem létező"
#. module: anonymization
#: field:ir.model.fields.anonymization,model_name:0
msgid "Object Name"
msgstr "Tárgy neve"
#. module: anonymization
#: model:ir.actions.act_window,name:anonymization.action_ir_model_fields_anonymization_history_tree
#: view:ir.model.fields.anonymization.history:0
#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization_history
msgid "Anonymization History"
msgstr "Névtelenítési/titkosítási történet"
#. module: anonymization
#: field:ir.model.fields.anonymization.migration.fix,model_name:0
msgid "Model"
msgstr "Modell"
#. module: anonymization
#: model:ir.model,name:anonymization.model_ir_model_fields_anonymization_history
msgid "ir.model.fields.anonymization.history"
msgstr "ir.model.fields.anonymization.history"
#. module: anonymization
#: code:addons/anonymization/anonymization.py:358
#, python-format
msgid ""
"The database anonymization is currently in an unstable state. Some fields "
"are anonymized, while some fields are not anonymized. You should try to "
"solve this problem before trying to do anything else."
msgstr ""
"Az adatbázis névtelenítő/titkosító bizonytalan állapotban van. Egyes mezők "
"névtelenítettek/titkosítottak lesznek, de egyesek nem. Ezt a problémát meg "
"kell oldania, mielőtt tenne valami mást."
#. module: anonymization
#: code:addons/anonymization/anonymization.py:389
#: code:addons/anonymization/anonymization.py:448
#, python-format
msgid "Error !"
msgstr "Hiba!"
#. module: anonymization
#: model:ir.actions.act_window,name:anonymization.action_ir_model_fields_anonymize_wizard
#: view:ir.model.fields.anonymize.wizard:0
msgid "Anonymize Database"
msgstr "Adatbázis névtelenítés/titkosítás"
#. module: anonymization
#: field:ir.model.fields.anonymize.wizard,name:0
msgid "File Name"
msgstr "Fájl neve"
#. module: anonymization
#: field:ir.model.fields.anonymization.migration.fix,sequence:0
msgid "Sequence"
msgstr "Sorrend/szekvencia"
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,direction:0
msgid "anonymized -> clear"
msgstr "névtelenített/titkosított -> üres"
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,state:0
msgid "Started"
msgstr "Elkezdve"
#. module: anonymization
#: code:addons/anonymization/anonymization.py:389
#, python-format
msgid "The database is currently anonymized, you cannot anonymize it again."
msgstr ""
"Az adatbázis jelenleg névtelenítettek/titkosítot, nem tudja még egyszer "
"névteleníteteni/titkosítani."
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,state:0
msgid "Done"
msgstr "Elvégezve"
#. module: anonymization
#: field:ir.model.fields.anonymization.migration.fix,query:0
#: field:ir.model.fields.anonymization.migration.fix,query_type:0
msgid "Query"
msgstr "Kérdés"
#. module: anonymization
#: view:ir.model.fields.anonymization.history:0
#: field:ir.model.fields.anonymization.history,msg:0
#: field:ir.model.fields.anonymize.wizard,msg:0
msgid "Message"
msgstr "Üzenet"
#. module: anonymization
#: code:addons/anonymization/anonymization.py:65
#: sql_constraint:ir.model.fields.anonymization:0
#, python-format
msgid "You cannot have two fields with the same name on the same object!"
msgstr "Nem lehet ugyanazon a tárgyon lévő két mezőnek ugyanaz a neve!"

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-02-02 16:47+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n"
"PO-Revision-Date: 2013-03-20 13:52+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-16 05:47+0000\n"
"X-Launchpad-Export-Date: 2013-03-21 04:38+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: association
@ -29,7 +29,7 @@ msgstr "Események kezelése"
#. module: association
#: field:profile.association.config.install_modules_wizard,project_gtd:0
msgid "Getting Things Done"
msgstr ""
msgstr "Getting Things Done - GTD módszer, végezzük el a feladatokat"
#. module: association
#: model:ir.module.module,description:association.module_meta_information
@ -81,6 +81,8 @@ msgid ""
"GTD is a methodology to efficiently organise yourself and your tasks. This "
"module fully integrates GTD principle with OpenERP's project management."
msgstr ""
"A GTD a feladatok hatékony rendszerezésére szolgáló módszertan. Ez a modul "
"teljesen integrálja a GTD alapelvet az OpenERP projektmenedzsmentjébe."
#. module: association
#: view:profile.association.config.install_modules_wizard:0

View File

@ -19,10 +19,10 @@
#
##############################################################################
import openerp
from openerp.osv import fields, osv
import openerp.service.model
from openerp.tools.translate import _
from openerp import pooler
import time
from openerp import tools
from openerp import SUPERUSER_ID
@ -113,7 +113,6 @@ class audittrail_rule(osv.osv):
value = "ir.actions.act_window" + ',' + str(w_id[0])
val_id = ir_values_obj.search(cr, uid, [('model', '=', thisrule.object_id.model), ('value', '=', value)])
if val_id:
ir_values_obj = pooler.get_pool(cr.dbname).get('ir.values')
res = ir_values_obj.unlink(cr, uid, [val_id[0]])
self.write(cr, uid, [thisrule.id], {"state": "draft"})
#End Loop
@ -212,7 +211,7 @@ def create_log_line(cr, uid, log_id, model, lines=None):
"""
if lines is None:
lines = []
pool = pooler.get_pool(cr.dbname)
pool = openerp.registry(cr.dbname)
obj_pool = pool.get(model.model)
model_pool = pool.get('ir.model')
field_pool = pool.get('ir.model.fields')
@ -251,7 +250,7 @@ def log_fct(cr, uid_orig, model, method, fct_src, *args, **kw):
@return: Returns result as per method of Object proxy
"""
pool = pooler.get_pool(cr.dbname)
pool = openerp.registry(cr.dbname)
resource_pool = pool.get(model)
model_pool = pool.get('ir.model')
model_ids = model_pool.search(cr, SUPERUSER_ID, [('model', '=', model)])
@ -492,7 +491,7 @@ def check_rules(cr, uid, model, method):
@param method: method to log: create, read, unlink,write,actions,workflow actions
@return: True or False
"""
pool = pooler.get_pool(cr.dbname)
pool = openerp.registry(cr.dbname)
if 'audittrail.rule' in pool.models:
model_ids = pool.get('ir.model').search(cr, SUPERUSER_ID, [('model', '=', model)])
model_id = model_ids and model_ids[0] or False

View File

@ -7,25 +7,25 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2011-01-31 12:50+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n"
"PO-Revision-Date: 2013-03-20 14:23+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-16 05:32+0000\n"
"X-Launchpad-Export-Date: 2013-03-21 04:38+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: audittrail
#: view:audittrail.log:0
msgid "Old Value Text : "
msgstr ""
msgstr "Szöveg régi értéke: "
#. module: audittrail
#: code:addons/audittrail/audittrail.py:76
#, python-format
msgid "WARNING: audittrail is not part of the pool"
msgstr ""
msgstr "VIGYÁZAT: sávvizsgálat nem képezi részét az összegyűjtött edatnak"
#. module: audittrail
#: field:audittrail.log.line,log_id:0
@ -36,7 +36,7 @@ msgstr "Napló"
#: view:audittrail.rule:0
#: selection:audittrail.rule,state:0
msgid "Subscribed"
msgstr ""
msgstr "Feliratkozva"
#. module: audittrail
#: code:addons/audittrail/audittrail.py:260
@ -44,31 +44,31 @@ msgstr ""
#: code:addons/audittrail/audittrail.py:408
#, python-format
msgid "'%s' Model does not exist..."
msgstr ""
msgstr "'%s' Modell nem létezik..."
#. module: audittrail
#: view:audittrail.rule:0
msgid "Subscribed Rule"
msgstr ""
msgstr "Szabály a feliratkozáshoz"
#. module: audittrail
#: view:audittrail.rule:0
#: model:ir.model,name:audittrail.model_audittrail_rule
msgid "Audittrail Rule"
msgstr ""
msgstr "Szabály a sávvizsgálatra"
#. module: audittrail
#: view:audittrail.rule:0
#: field:audittrail.rule,state:0
msgid "Status"
msgstr ""
msgstr "Állapot"
#. module: audittrail
#: view:audittrail.view.log:0
#: model:ir.actions.act_window,name:audittrail.action_audittrail_log_tree
#: model:ir.ui.menu,name:audittrail.menu_audit_logs
msgid "Audit Logs"
msgstr ""
msgstr "Vizsgálati naplózások"
#. module: audittrail
#: view:audittrail.log:0
@ -79,7 +79,7 @@ msgstr "Csoportosítás..."
#. module: audittrail
#: view:audittrail.rule:0
msgid "_Subscribe"
msgstr ""
msgstr "_Feliratkozás"
#. module: audittrail
#: view:audittrail.rule:0
@ -103,6 +103,8 @@ msgid ""
"Select this if you want to keep track of read/open on any record of the "
"object of this rule"
msgstr ""
"Válassza ezt, ha nyomon akarja követni ehhez a szabályhoz tartozó bármely "
"objektum rekord írását/olvasását"
#. module: audittrail
#: field:audittrail.log,method:0
@ -112,7 +114,7 @@ msgstr "Módszer"
#. module: audittrail
#: field:audittrail.view.log,from:0
msgid "Log From"
msgstr ""
msgstr "Naplózási forma"
#. module: audittrail
#: field:audittrail.log.line,log:0
@ -127,7 +129,7 @@ msgstr "Forrás ID"
#. module: audittrail
#: help:audittrail.rule,user_id:0
msgid "if User is not added then it will applicable for all users"
msgstr ""
msgstr "Ha nincs felhasználó hozzáadva akkor minden felhasználó hozzáférhet"
#. module: audittrail
#: help:audittrail.rule,log_workflow:0
@ -135,6 +137,8 @@ msgid ""
"Select this if you want to keep track of workflow on any record of the "
"object of this rule"
msgstr ""
"Válassza ezt, ha nyomon akarja követni ehhez a szabályhoz tartozó bármely "
"objektum rekord munkafolyamatát"
#. module: audittrail
#: field:audittrail.rule,user_id:0
@ -144,7 +148,7 @@ msgstr "Felhasználók"
#. module: audittrail
#: view:audittrail.log:0
msgid "Log Lines"
msgstr ""
msgstr "Naplózási sorok"
#. module: audittrail
#: view:audittrail.log:0
@ -156,28 +160,28 @@ msgstr "Tárgy"
#. module: audittrail
#: view:audittrail.rule:0
msgid "AuditTrail Rule"
msgstr ""
msgstr "Sávvizsgálati szabály"
#. module: audittrail
#: field:audittrail.view.log,to:0
msgid "Log To"
msgstr ""
msgstr "Napló erre"
#. module: audittrail
#: view:audittrail.log:0
msgid "New Value Text: "
msgstr ""
msgstr "Új érték a szövegre: "
#. module: audittrail
#: view:audittrail.rule:0
msgid "Search Audittrail Rule"
msgstr ""
msgstr "Sávvizsgálati szabály keresése"
#. module: audittrail
#: model:ir.actions.act_window,name:audittrail.action_audittrail_rule_tree
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail_rule_tree
msgid "Audit Rules"
msgstr ""
msgstr "Vizsgálati szabályok"
#. module: audittrail
#: view:audittrail.log:0
@ -201,42 +205,45 @@ msgid ""
"Select this if you want to keep track of modification on any record of the "
"object of this rule"
msgstr ""
"Válassza ezt, ha nyomon akarja követni ehhez a szabályhoz tartozó bármely "
"objektum rekord módosítását"
#. module: audittrail
#: view:audittrail.rule:0
msgid "AuditTrail Rules"
msgstr ""
msgstr "Sávvizsgálati szabályok"
#. module: audittrail
#: help:audittrail.rule,object_id:0
msgid "Select object for which you want to generate log."
msgstr ""
msgstr "Válassza ki az objektumot amire a naplózást szeretné végezni."
#. module: audittrail
#: model:ir.ui.menu,name:audittrail.menu_audit
msgid "Audit"
msgstr ""
msgstr "Vizsgálat"
#. module: audittrail
#: field:audittrail.rule,log_workflow:0
msgid "Log Workflow"
msgstr ""
msgstr "Naplózza a munkafolyamatot"
#. module: audittrail
#: field:audittrail.rule,log_read:0
msgid "Log Reads"
msgstr ""
msgstr "Naplózza az olvasásokat"
#. module: audittrail
#: code:addons/audittrail/audittrail.py:77
#, python-format
msgid "Change audittrail depends -- Setting rule as DRAFT"
msgstr ""
"Sávvizsgálat függőség megváltoztatása -- A szabály TERVEZET -re állítja"
#. module: audittrail
#: field:audittrail.log,line_ids:0
msgid "Log lines"
msgstr ""
msgstr "Naplózza a sorokat"
#. module: audittrail
#: field:audittrail.log.line,field_id:0
@ -246,7 +253,7 @@ msgstr "Mezők"
#. module: audittrail
#: field:audittrail.rule,log_create:0
msgid "Log Creates"
msgstr ""
msgstr "Naplózza a létrehozásokat"
#. module: audittrail
#: help:audittrail.rule,log_unlink:0
@ -254,6 +261,8 @@ msgid ""
"Select this if you want to keep track of deletion on any record of the "
"object of this rule"
msgstr ""
"Válassza ezt, ha nyomon akarja követni ehhez a szabályhoz tartozó bármely "
"objektum rekord törlését"
#. module: audittrail
#: view:audittrail.log:0
@ -270,6 +279,8 @@ msgstr "Művelet ID"
#: view:audittrail.rule:0
msgid "Users (if User is not added then it will applicable for all users)"
msgstr ""
"Felhasználók (ha nincs felhasználó hozzáadva akkor az összes felhasználóra "
"érvényes)"
#. module: audittrail
#: view:audittrail.rule:0
@ -282,17 +293,19 @@ msgid ""
"There is already a rule defined on this object\n"
" You cannot define another: please edit the existing one."
msgstr ""
"Erre az objektumra már van szabály\n"
" Nem tud másikat meghatározni: kérem szerkessze a meglévőt."
#. module: audittrail
#: field:audittrail.rule,log_unlink:0
msgid "Log Deletes"
msgstr ""
msgstr "Naplók a törlésre"
#. module: audittrail
#: view:audittrail.log:0
#: view:audittrail.rule:0
msgid "Model"
msgstr ""
msgstr "Modell"
#. module: audittrail
#: field:audittrail.log.line,field_description:0
@ -302,22 +315,22 @@ msgstr "Mező leírása"
#. module: audittrail
#: view:audittrail.log:0
msgid "Search Audittrail Log"
msgstr ""
msgstr "Sávvizsgálat napló keresése"
#. module: audittrail
#: field:audittrail.rule,log_write:0
msgid "Log Writes"
msgstr ""
msgstr "Napló az írásra"
#. module: audittrail
#: view:audittrail.view.log:0
msgid "Open Logs"
msgstr ""
msgstr "Naplók megnyitása"
#. module: audittrail
#: field:audittrail.log.line,new_value_text:0
msgid "New value Text"
msgstr ""
msgstr "Szöveh új értéke"
#. module: audittrail
#: field:audittrail.rule,name:0
@ -333,29 +346,31 @@ msgstr "Új érték"
#: code:addons/audittrail/audittrail.py:223
#, python-format
msgid "'%s' field does not exist in '%s' model"
msgstr ""
msgstr "'%s' mező nem létezik a '%s' modellben"
#. module: audittrail
#: view:audittrail.log:0
msgid "AuditTrail Logs"
msgstr ""
msgstr "Sávvizsgálati naplók"
#. module: audittrail
#: view:audittrail.rule:0
msgid "Draft Rule"
msgstr ""
msgstr "Szabály tervezet"
#. module: audittrail
#: view:audittrail.log:0
#: model:ir.model,name:audittrail.model_audittrail_log
msgid "Audittrail Log"
msgstr ""
msgstr "Sávvizsgálati napló"
#. module: audittrail
#: help:audittrail.rule,log_action:0
msgid ""
"Select this if you want to keep track of actions on the object of this rule"
msgstr ""
"VVálassza ezt, ha nyomon akarja követni ehhez a szabályhoz tartozó bármely "
"objektum rekord műveleteit"
#. module: audittrail
#: view:audittrail.log:0
@ -365,32 +380,32 @@ msgstr "Új érték : "
#. module: audittrail
#: field:audittrail.log.line,old_value_text:0
msgid "Old value Text"
msgstr ""
msgstr "Szöveg régi értéke"
#. module: audittrail
#: view:audittrail.view.log:0
msgid "Cancel"
msgstr ""
msgstr "Megszakítás"
#. module: audittrail
#: model:ir.model,name:audittrail.model_audittrail_view_log
msgid "View Log"
msgstr ""
msgstr "Napló megtekintése"
#. module: audittrail
#: model:ir.model,name:audittrail.model_audittrail_log_line
msgid "Log Line"
msgstr ""
msgstr "Napló a sorokra"
#. module: audittrail
#: view:audittrail.view.log:0
msgid "or"
msgstr ""
msgstr "vagy"
#. module: audittrail
#: field:audittrail.rule,log_action:0
msgid "Log Action"
msgstr ""
msgstr "napló a műveletekre"
#. module: audittrail
#: help:audittrail.rule,log_create:0
@ -398,6 +413,8 @@ msgid ""
"Select this if you want to keep track of creation on any record of the "
"object of this rule"
msgstr ""
"Válassza ezt, ha nyomon akarja követni ehhez a szabályhoz tartozó bármely "
"objektum rekord létrehozását"
#~ msgid "State"
#~ msgstr "Állapot"

View File

@ -0,0 +1,28 @@
# Hungarian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-19 18:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-20 04:42+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: auth_crypt
#: field:res.users,password_crypt:0
msgid "Encrypted Password"
msgstr "Kódolt jalszó"
#. module: auth_crypt
#: model:ir.model,name:auth_crypt.model_res_users
msgid "Users"
msgstr "Felhasználók"

View File

@ -23,7 +23,6 @@ import logging
from ldap.filter import filter_format
import openerp.exceptions
from openerp import pooler
from openerp import tools
from openerp.osv import fields, osv
from openerp import SUPERUSER_ID
@ -188,7 +187,7 @@ class CompanyLDAP(osv.osv):
user_id = res[0]
elif conf['create_user']:
_logger.debug("Creating new OpenERP user \"%s\" from LDAP" % login)
user_obj = self.pool.get('res.users')
user_obj = self.pool['res.users']
values = self.map_ldap_attributes(cr, uid, conf, login, ldap_entry)
if conf['user']:
user_id = user_obj.copy(cr, SUPERUSER_ID, conf['user'],
@ -246,8 +245,8 @@ class users(osv.osv):
user_id = super(users, self).login(db, login, password)
if user_id:
return user_id
cr = pooler.get_db(db).cursor()
ldap_obj = pooler.get_pool(db).get('res.company.ldap')
cr = self.pool.db.cursor()
ldap_obj = self.pool['res.company.ldap']
for conf in ldap_obj.get_ldap_dicts(cr):
entry = ldap_obj.authenticate(conf, login, password)
if entry:
@ -269,12 +268,12 @@ class users(osv.osv):
except openerp.exceptions.AccessDenied:
pass
cr = pooler.get_db(db).cursor()
cr = self.pool.db.cursor()
cr.execute('SELECT login FROM res_users WHERE id=%s AND active=TRUE',
(int(uid),))
res = cr.fetchone()
if res:
ldap_obj = pooler.get_pool(db).get('res.company.ldap')
ldap_obj = self.pool['res.company.ldap']
for conf in ldap_obj.get_ldap_dicts(cr):
if ldap_obj.authenticate(conf, res[0], passwd):
self._uid_cache.setdefault(db, {})[uid] = passwd

View File

@ -64,8 +64,13 @@ class OAuthController(oeweb.Controller):
u = registry.get('res.users')
credentials = u.auth_oauth(cr, SUPERUSER_ID, provider, kw, context=context)
cr.commit()
action = state.get('a', None)
url = '/#action=' + action if action else '/'
action = state.get('a')
menu = state.get('m')
url = '/'
if action:
url = '/#action=%s' % action
elif menu:
url = '/#menu_id=%s' % menu
return login_and_redirect(req, *credentials, redirect_url=url)
except AttributeError:
# auth_signup is not installed

View File

@ -0,0 +1,135 @@
# Hungarian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-19 18:17+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-20 04:42+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: auth_oauth
#: field:auth.oauth.provider,validation_endpoint:0
msgid "Validation URL"
msgstr "URL elérési út érvényesítés"
#. module: auth_oauth
#: field:auth.oauth.provider,auth_endpoint:0
msgid "Authentication URL"
msgstr "URL elérési út hitelesítés"
#. module: auth_oauth
#: model:ir.model,name:auth_oauth.model_base_config_settings
msgid "base.config.settings"
msgstr "base.config.settings"
#. module: auth_oauth
#: field:auth.oauth.provider,name:0
msgid "Provider name"
msgstr "Szolgáltató neve"
#. module: auth_oauth
#: field:auth.oauth.provider,scope:0
msgid "Scope"
msgstr "Hatáskör"
#. module: auth_oauth
#: field:res.users,oauth_provider_id:0
msgid "OAuth Provider"
msgstr "OAuth szolgáltató"
#. module: auth_oauth
#: field:auth.oauth.provider,css_class:0
msgid "CSS class"
msgstr "CSS osztály"
#. module: auth_oauth
#: field:auth.oauth.provider,body:0
msgid "Body"
msgstr "Törzs"
#. module: auth_oauth
#: model:ir.model,name:auth_oauth.model_res_users
msgid "Users"
msgstr "Felhasználók"
#. module: auth_oauth
#: field:auth.oauth.provider,sequence:0
msgid "unknown"
msgstr "ismeretlen"
#. module: auth_oauth
#: field:res.users,oauth_access_token:0
msgid "OAuth Access Token"
msgstr "OAuth hozzáférési Token"
#. module: auth_oauth
#: field:auth.oauth.provider,client_id:0
#: field:base.config.settings,auth_oauth_facebook_client_id:0
#: field:base.config.settings,auth_oauth_google_client_id:0
msgid "Client ID"
msgstr "Ügyfál ID azonosító"
#. module: auth_oauth
#: model:ir.ui.menu,name:auth_oauth.menu_oauth_providers
msgid "OAuth Providers"
msgstr "OAuth szolgáltatók"
#. module: auth_oauth
#: model:ir.model,name:auth_oauth.model_auth_oauth_provider
msgid "OAuth2 provider"
msgstr "OAuth2 szolgáltató"
#. module: auth_oauth
#: field:res.users,oauth_uid:0
msgid "OAuth User ID"
msgstr "OAuth felhasználó ID azonosító"
#. module: auth_oauth
#: field:base.config.settings,auth_oauth_facebook_enabled:0
msgid "Allow users to sign in with Facebook"
msgstr "Felhasználók Facebook keresztüli bejelentkezés engedélyezése"
#. module: auth_oauth
#: sql_constraint:res.users:0
msgid "OAuth UID must be unique per provider"
msgstr "OAuth UID egyedinek kell lennie mindegyik szolgáltatóhoz"
#. module: auth_oauth
#: help:res.users,oauth_uid:0
msgid "Oauth Provider user_id"
msgstr "Oauth szolgáltatói felhasználó_id"
#. module: auth_oauth
#: field:auth.oauth.provider,data_endpoint:0
msgid "Data URL"
msgstr "Adat URL elérési út"
#. module: auth_oauth
#: view:auth.oauth.provider:0
msgid "arch"
msgstr ""
#. module: auth_oauth
#: model:ir.actions.act_window,name:auth_oauth.action_oauth_provider
msgid "Providers"
msgstr ""
#. module: auth_oauth
#: field:base.config.settings,auth_oauth_google_enabled:0
msgid "Allow users to sign in with Google"
msgstr ""
#. module: auth_oauth
#: field:auth.oauth.provider,enabled:0
msgid "Allowed"
msgstr ""

View File

@ -0,0 +1,135 @@
# Turkish translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-21 19:39+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Turkish <tr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-22 04:57+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: auth_oauth
#: field:auth.oauth.provider,validation_endpoint:0
msgid "Validation URL"
msgstr "Onaylama URL"
#. module: auth_oauth
#: field:auth.oauth.provider,auth_endpoint:0
msgid "Authentication URL"
msgstr "Kimlik Doğrulama URL"
#. module: auth_oauth
#: model:ir.model,name:auth_oauth.model_base_config_settings
msgid "base.config.settings"
msgstr "base.config.settings"
#. module: auth_oauth
#: field:auth.oauth.provider,name:0
msgid "Provider name"
msgstr "Sağlayıcı adı"
#. module: auth_oauth
#: field:auth.oauth.provider,scope:0
msgid "Scope"
msgstr "Kapsam"
#. module: auth_oauth
#: field:res.users,oauth_provider_id:0
msgid "OAuth Provider"
msgstr ""
#. module: auth_oauth
#: field:auth.oauth.provider,css_class:0
msgid "CSS class"
msgstr "CSS class"
#. module: auth_oauth
#: field:auth.oauth.provider,body:0
msgid "Body"
msgstr ""
#. module: auth_oauth
#: model:ir.model,name:auth_oauth.model_res_users
msgid "Users"
msgstr "Kullanıcılar"
#. module: auth_oauth
#: field:auth.oauth.provider,sequence:0
msgid "unknown"
msgstr "bilinmeyen"
#. module: auth_oauth
#: field:res.users,oauth_access_token:0
msgid "OAuth Access Token"
msgstr ""
#. module: auth_oauth
#: field:auth.oauth.provider,client_id:0
#: field:base.config.settings,auth_oauth_facebook_client_id:0
#: field:base.config.settings,auth_oauth_google_client_id:0
msgid "Client ID"
msgstr ""
#. module: auth_oauth
#: model:ir.ui.menu,name:auth_oauth.menu_oauth_providers
msgid "OAuth Providers"
msgstr ""
#. module: auth_oauth
#: model:ir.model,name:auth_oauth.model_auth_oauth_provider
msgid "OAuth2 provider"
msgstr ""
#. module: auth_oauth
#: field:res.users,oauth_uid:0
msgid "OAuth User ID"
msgstr ""
#. module: auth_oauth
#: field:base.config.settings,auth_oauth_facebook_enabled:0
msgid "Allow users to sign in with Facebook"
msgstr "Kullanıcılara Facebook ile oturum için izin ver"
#. module: auth_oauth
#: sql_constraint:res.users:0
msgid "OAuth UID must be unique per provider"
msgstr ""
#. module: auth_oauth
#: help:res.users,oauth_uid:0
msgid "Oauth Provider user_id"
msgstr ""
#. module: auth_oauth
#: field:auth.oauth.provider,data_endpoint:0
msgid "Data URL"
msgstr "Data URL"
#. module: auth_oauth
#: view:auth.oauth.provider:0
msgid "arch"
msgstr ""
#. module: auth_oauth
#: model:ir.actions.act_window,name:auth_oauth.action_oauth_provider
msgid "Providers"
msgstr "Sağlayıcılar"
#. module: auth_oauth
#: field:base.config.settings,auth_oauth_google_enabled:0
msgid "Allow users to sign in with Google"
msgstr ""
#. module: auth_oauth
#: field:auth.oauth.provider,enabled:0
msgid "Allowed"
msgstr "İzinVerildi"

View File

@ -0,0 +1,23 @@
# Hungarian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-19 18:13+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-20 04:42+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: auth_oauth_signup
#: model:ir.model,name:auth_oauth_signup.model_res_users
msgid "Users"
msgstr "Felhasználók"

View File

@ -0,0 +1,97 @@
# Hungarian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-19 18:15+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-20 04:42+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:24
#, python-format
msgid "Username"
msgstr "Felhasználónév"
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:12
#: view:res.users:0
#, python-format
msgid "OpenID"
msgstr "OpenID"
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:30
#: field:res.users,openid_url:0
#, python-format
msgid "OpenID URL"
msgstr "OpenID URL elérési út"
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:9
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:10
#, python-format
msgid "Google"
msgstr "Google"
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:11
#, python-format
msgid "Launchpad"
msgstr "Launchpad/Kiadásiszerk"
#. module: auth_openid
#: help:res.users,openid_email:0
msgid "Used for disambiguation in case of a shared OpenID URL"
msgstr ""
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:18
#, python-format
msgid "Google Apps Domain"
msgstr "Google Alk Domain"
#. module: auth_openid
#: field:res.users,openid_email:0
msgid "OpenID Email"
msgstr "OpenID Email"
#. module: auth_openid
#: field:res.users,openid_key:0
msgid "OpenID Key"
msgstr "OpenID Kulcs"
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:8
#, python-format
msgid "Password"
msgstr "Jelszó"
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:10
#, python-format
msgid "Google Apps"
msgstr "Google Alk"
#. module: auth_openid
#: model:ir.model,name:auth_openid.model_res_users
msgid "Users"
msgstr "Felhasználók"

View File

@ -0,0 +1,97 @@
# Russian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-23 11:37+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-24 04:45+0000\n"
"X-Generator: Launchpad (build 16540)\n"
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:24
#, python-format
msgid "Username"
msgstr ""
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:12
#: view:res.users:0
#, python-format
msgid "OpenID"
msgstr ""
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:30
#: field:res.users,openid_url:0
#, python-format
msgid "OpenID URL"
msgstr ""
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:9
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:10
#, python-format
msgid "Google"
msgstr ""
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:11
#, python-format
msgid "Launchpad"
msgstr ""
#. module: auth_openid
#: help:res.users,openid_email:0
msgid "Used for disambiguation in case of a shared OpenID URL"
msgstr ""
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:18
#, python-format
msgid "Google Apps Domain"
msgstr ""
#. module: auth_openid
#: field:res.users,openid_email:0
msgid "OpenID Email"
msgstr ""
#. module: auth_openid
#: field:res.users,openid_key:0
msgid "OpenID Key"
msgstr ""
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:8
#, python-format
msgid "Password"
msgstr ""
#. module: auth_openid
#. openerp-web
#: code:addons/auth_openid/static/src/xml/auth_openid.xml:10
#, python-format
msgid "Google Apps"
msgstr ""
#. module: auth_openid
#: model:ir.model,name:auth_openid.model_res_users
msgid "Users"
msgstr ""

View File

@ -0,0 +1,298 @@
# Spanish (Colombia) translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-21 21:49+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish (Colombia) <es_CO@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-22 04:57+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: auth_signup
#: field:res.partner,signup_type:0
msgid "Signup Token Type"
msgstr "Tipo de palabra de ingreso"
#. module: auth_signup
#: field:base.config.settings,auth_signup_uninvited:0
msgid "Allow external users to sign up"
msgstr "Permitir ingreso a usuarios externos"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
#, python-format
msgid "Confirm Password"
msgstr "Confirmar Contraseña"
#. module: auth_signup
#: help:base.config.settings,auth_signup_uninvited:0
msgid "If unchecked, only invited users may sign up."
msgstr "Si no está marcado, sólo los usuarios invitados pueden ingresar."
#. module: auth_signup
#: model:ir.model,name:auth_signup.model_base_config_settings
msgid "base.config.settings"
msgstr "base.config.settings"
#. module: auth_signup
#: code:addons/auth_signup/res_users.py:265
#, python-format
msgid "Cannot send email: user has no email address."
msgstr ""
"No se pudo enviar el correo eléctronico: el usuario no tiene dirección de "
"correo."
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:28
#, python-format
msgid "Reset password"
msgstr "Restablecer contraseña"
#. module: auth_signup
#: field:base.config.settings,auth_signup_template_user_id:0
msgid "Template user for new users created through signup"
msgstr ""
"Plantilla de usuario para los nuevos usuarios creados a través del ingreso"
#. module: auth_signup
#: model:email.template,subject:auth_signup.reset_password_email
msgid "Password reset"
msgstr "Restablecer contraseña"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/js/auth_signup.js:117
#, python-format
msgid "Please enter a password and confirm it."
msgstr "Por favor introduzca una contraseña y confírmela."
#. module: auth_signup
#: view:res.users:0
msgid "Send an email to the user to (re)set their password."
msgstr ""
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:26
#, python-format
msgid "Sign Up"
msgstr "Registro"
#. module: auth_signup
#: selection:res.users,state:0
msgid "New"
msgstr "Nuevo(a)"
#. module: auth_signup
#: code:addons/auth_signup/res_users.py:258
#, python-format
msgid "Mail sent to:"
msgstr ""
#. module: auth_signup
#: field:res.users,state:0
msgid "Status"
msgstr "Estado"
#. module: auth_signup
#: model:email.template,body_html:auth_signup.reset_password_email
msgid ""
"\n"
"<p>A password reset was requested for the OpenERP account linked to this "
"email.</p>\n"
"\n"
"<p>You may change your password by following <a "
"href=\"${object.signup_url}\">this link</a>.</p>\n"
"\n"
"<p>Note: If you do not expect this, you can safely ignore this email.</p>"
msgstr ""
"\n"
"<p>Se ha solicitado un cambio de contraseña dedse la cuenta de OpenERP "
"asociada con este correo eléctronico.</p>\n"
"\n"
"<p>Debería cambiar su contraseña siguiendo <a "
"href=\"${object.signup_url}\">este enlace</a>.</p>\n"
"\n"
"<p>Nota: Si no espera estanotificación, puede ignorarla de forma segura.</p>"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/js/auth_signup.js:111
#, python-format
msgid "Please enter a name."
msgstr "Por favor, introduzca un nombre."
#. module: auth_signup
#: model:ir.model,name:auth_signup.model_res_users
msgid "Users"
msgstr "Usuarios"
#. module: auth_signup
#: field:res.partner,signup_url:0
msgid "Signup URL"
msgstr "URL de Ingreso"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/js/auth_signup.js:114
#, python-format
msgid "Please enter a username."
msgstr "Por favor, introduzca un nombre de usuario."
#. module: auth_signup
#: selection:res.users,state:0
msgid "Active"
msgstr "Activo(a)"
#. module: auth_signup
#: code:addons/auth_signup/res_users.py:269
#, python-format
msgid ""
"Cannot send email: no outgoing email server configured.\n"
"You can configure it under Settings/General Settings."
msgstr ""
"No se puede enviar el correo electrónico: no se ha configurado un servidor "
"de correo saliente.\n"
"Puede configurarlo en Configuración / Configuraciones Generales."
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
#, python-format
msgid "Username"
msgstr "Nombre de Usuario"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
#, python-format
msgid "Name"
msgstr "Nombre"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/js/auth_signup.js:170
#, python-format
msgid "Please enter a username or email address."
msgstr ""
"Por favor ingresea un Nombre de Usuario o dirección de correo electrónico."
#. module: auth_signup
#: selection:res.users,state:0
msgid "Resetting Password"
msgstr "Restableciendo la Contraseña"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
#, python-format
msgid "Username (Email)"
msgstr "Nombre de Usuario (Dirección de correo electrónico)"
#. module: auth_signup
#: field:res.partner,signup_expiration:0
msgid "Signup Expiration"
msgstr "Vencimiento del Ingreso"
#. module: auth_signup
#: help:base.config.settings,auth_signup_reset_password:0
msgid "This allows users to trigger a password reset from the Login page."
msgstr ""
"Esto permite a los usuarios lanzar un restablecimiento de la contraseña "
"desde la página de Inicio de Sesión."
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
#, python-format
msgid "Log in"
msgstr "Iniciar Sesión"
#. module: auth_signup
#: field:res.partner,signup_valid:0
msgid "Signup Token is Valid"
msgstr "La Palabra de Ingreso es Válida"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/js/auth_signup.js:108
#: code:addons/auth_signup/static/src/js/auth_signup.js:111
#: code:addons/auth_signup/static/src/js/auth_signup.js:114
#: code:addons/auth_signup/static/src/js/auth_signup.js:117
#: code:addons/auth_signup/static/src/js/auth_signup.js:120
#: code:addons/auth_signup/static/src/js/auth_signup.js:167
#: code:addons/auth_signup/static/src/js/auth_signup.js:170
#, python-format
msgid "Login"
msgstr "Inicio de Sesión"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/js/auth_signup.js:94
#, python-format
msgid "Invalid signup token"
msgstr "Palabra de ingreso no válida"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/js/auth_signup.js:120
#, python-format
msgid "Passwords do not match; please retype them."
msgstr "Las contraseñas no coinciden. Por favor vuelva a escribirlas."
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/js/auth_signup.js:108
#: code:addons/auth_signup/static/src/js/auth_signup.js:167
#, python-format
msgid "No database selected !"
msgstr "No se ha seleccionado ninguna base de datos!"
#. module: auth_signup
#: view:res.users:0
msgid "Reset Password"
msgstr ""
#. module: auth_signup
#: field:base.config.settings,auth_signup_reset_password:0
msgid "Enable password reset from Login page"
msgstr ""
"Habilitar restablecimiento de la contraseña desde la página de Inicio de "
"Sesión"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:27
#, python-format
msgid "Back to Login"
msgstr "Volver al Inicio de Sesión"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
#, python-format
msgid "Sign up"
msgstr ""
#. module: auth_signup
#: model:ir.model,name:auth_signup.model_res_partner
msgid "Partner"
msgstr "Empresa/Cliente"
#. module: auth_signup
#: field:res.partner,signup_token:0
msgid "Signup Token"
msgstr "Palabra de Ingreso"

View File

@ -8,24 +8,24 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-01-11 17:36+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2013-03-20 13:50+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
"X-Launchpad-Export-Date: 2013-03-21 04:38+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: auth_signup
#: field:res.partner,signup_type:0
msgid "Signup Token Type"
msgstr ""
msgstr "Feliratkozó Token típus"
#. module: auth_signup
#: field:base.config.settings,auth_signup_uninvited:0
msgid "Allow external users to sign up"
msgstr ""
msgstr "Külső felhasználók bejelentkezésének engedéjezése"
#. module: auth_signup
#. openerp-web
@ -37,18 +37,18 @@ msgstr "Jelszó megerõsítése"
#. module: auth_signup
#: help:base.config.settings,auth_signup_uninvited:0
msgid "If unchecked, only invited users may sign up."
msgstr ""
msgstr "He nincs bejelölve, vsak maghívott felhasználók jelentkezhetnek be."
#. module: auth_signup
#: model:ir.model,name:auth_signup.model_base_config_settings
msgid "base.config.settings"
msgstr ""
msgstr "base.config.settings"
#. module: auth_signup
#: code:addons/auth_signup/res_users.py:265
#, python-format
msgid "Cannot send email: user has no email address."
msgstr ""
msgstr "Nem küldhető e-mail: a felhasználónak nincs e-mail címe."
#. module: auth_signup
#. openerp-web
@ -61,7 +61,7 @@ msgstr "Jelszó visszaállítása"
#. module: auth_signup
#: field:base.config.settings,auth_signup_template_user_id:0
msgid "Template user for new users created through signup"
msgstr ""
msgstr "Sablon felhasználó amit a új felhasznlók létrehozásához használ"
#. module: auth_signup
#: model:email.template,subject:auth_signup.reset_password_email
@ -78,7 +78,7 @@ msgstr "Kérem adjon meg egy jelszót és erősítse meg."
#. module: auth_signup
#: view:res.users:0
msgid "Send an email to the user to (re)set their password."
msgstr ""
msgstr "Küldjön egy e-mailt a felhasználónak a jelszava visszaállításához."
#. module: auth_signup
#. openerp-web
@ -97,12 +97,12 @@ msgstr "Új"
#: code:addons/auth_signup/res_users.py:258
#, python-format
msgid "Mail sent to:"
msgstr ""
msgstr "Címzett:"
#. module: auth_signup
#: field:res.users,state:0
msgid "Status"
msgstr ""
msgstr "Állapot"
#. module: auth_signup
#: model:email.template,body_html:auth_signup.reset_password_email
@ -116,6 +116,15 @@ msgid ""
"\n"
"<p>Note: If you do not expect this, you can safely ignore this email.</p>"
msgstr ""
"\n"
"<p>Egy jelszó visszaállítást indított el az e-mailhez tartozó OpenERP "
"fiókhoz.</p>\n"
"\n"
"<p>Meg kell változtatnia a jelszavát a következő <a "
"href=\"${object.signup_url}\">linken</a>.</p>\n"
"\n"
"<p>Megjegyzés: Ha nem várta ezt az e-mail-t, akkor biztonságosan törölje "
"azt.</p>"
#. module: auth_signup
#. openerp-web
@ -132,14 +141,14 @@ msgstr "Felhasználók"
#. module: auth_signup
#: field:res.partner,signup_url:0
msgid "Signup URL"
msgstr ""
msgstr "Bejelentkezési URL elérési útvonal"
#. module: auth_signup
#. openerp-web
#: code:addons/auth_signup/static/src/js/auth_signup.js:114
#, python-format
msgid "Please enter a username."
msgstr ""
msgstr "Kérjük, adja meg a felhasználónevet."
#. module: auth_signup
#: selection:res.users,state:0
@ -153,6 +162,8 @@ msgid ""
"Cannot send email: no outgoing email server configured.\n"
"You can configure it under Settings/General Settings."
msgstr ""
"Nem küldhető e-mail: nincs kimenő e-mail szerver beállítva.\n"
"Beállíthatja a Beállítások/Általános beállítások alatt."
#. module: auth_signup
#. openerp-web
@ -173,7 +184,7 @@ msgstr "Név"
#: code:addons/auth_signup/static/src/js/auth_signup.js:170
#, python-format
msgid "Please enter a username or email address."
msgstr ""
msgstr "Kérem adjon meg egy felhasználónevet vagy e-mail címet."
#. module: auth_signup
#: selection:res.users,state:0
@ -190,12 +201,14 @@ msgstr "Felhasználónév (Email)"
#. module: auth_signup
#: field:res.partner,signup_expiration:0
msgid "Signup Expiration"
msgstr ""
msgstr "Bejelentkezési határidő"
#. module: auth_signup
#: help:base.config.settings,auth_signup_reset_password:0
msgid "This allows users to trigger a password reset from the Login page."
msgstr ""
"Ez lehetővé teszi a felhasználó részére a jelszó megváltoztatásának "
"elindítását a bejelentkezési oldalról."
#. module: auth_signup
#. openerp-web
@ -247,12 +260,12 @@ msgstr "Nincs kiválasztott adatbázis!"
#. module: auth_signup
#: view:res.users:0
msgid "Reset Password"
msgstr ""
msgstr "Jelszó visszaállítása"
#. module: auth_signup
#: field:base.config.settings,auth_signup_reset_password:0
msgid "Enable password reset from Login page"
msgstr ""
msgstr "Jelszóváltoztató engedélyezése a belépési oldalról"
#. module: auth_signup
#. openerp-web

View File

@ -27,8 +27,8 @@
<page string="Conditions">
<group>
<group name="filter" string="Filter Condition">
<field name="filter_pre_id" domain="[('model_id','=',model), ('user_id', '=', False)]" context="{'default_model_id': model}"/>
<field name="filter_id" domain="[('model_id','=',model), ('user_id', '=', False)]" context="{'default_model_id': model}"/>
<field name="filter_pre_id" domain="[('model_id','=',model)]" context="{'default_model_id': model}"/>
<field name="filter_id" domain="[('model_id','=',model)]" context="{'default_model_id': model}"/>
</group>
<group name="timing" string="Timer">
<field name="trg_date_id"/>

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-18 00:17+0000\n"
"PO-Revision-Date: 2013-03-19 17:29+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-19 05:33+0000\n"
"X-Launchpad-Export-Date: 2013-03-20 04:42+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: base_calendar
@ -257,7 +257,7 @@ msgstr "Hiba!"
#. module: base_calendar
#: selection:calendar.attendee,role:0
msgid "Chair Person"
msgstr ""
msgstr "Elnök személye"
#. module: base_calendar
#: view:crm.meeting:0
@ -886,7 +886,7 @@ msgstr "Ügyféltalálkozó"
msgid ""
"Reference to the URIthat points to the directory information corresponding "
"to the attendee."
msgstr ""
msgstr "URI hivatkozás mely a felszólaló információs könyvtárára mutat"
#. module: base_calendar
#: selection:calendar.event,month_list:0
@ -1099,6 +1099,7 @@ msgstr "Feladattal megbízva"
#: help:calendar.alarm,action:0
msgid "Defines the action to be invoked when an alarm is triggered"
msgstr ""
"Meghatározza a segítségül hivható műveletet egy vészjelzés beindítása esetén"
#. module: base_calendar
#: view:crm.meeting:0
@ -1124,18 +1125,20 @@ msgid ""
"If the active field is set to true, it will allow you to hide the event "
"alarm information without removing it."
msgstr ""
"Ha egy aktív mező igazra állított, akkor lehetővé teszi az esemény riasztás "
"információ eltüntetését annak törlése nélkül."
#. module: base_calendar
#: field:calendar.event,end_type:0
#: field:calendar.todo,end_type:0
#: field:crm.meeting,end_type:0
msgid "Recurrence Termination"
msgstr ""
msgstr "Ismétlés megállítása"
#. module: base_calendar
#: view:crm.meeting:0
msgid "Until"
msgstr ""
msgstr "Eddig"
#. module: base_calendar
#: view:res.alarm:0
@ -1145,12 +1148,12 @@ msgstr "Emlékeztető részletei"
#. module: base_calendar
#: model:crm.meeting.type,name:base_calendar.categ_meet3
msgid "Off-site Meeting"
msgstr ""
msgstr "Külső találkozó"
#. module: base_calendar
#: view:crm.meeting:0
msgid "Day of Month"
msgstr ""
msgstr "A hónap napja"
#. module: base_calendar
#: selection:calendar.alarm,state:0
@ -1167,7 +1170,7 @@ msgstr "Ismétlés (nap/hét/hó/év)"
#. module: base_calendar
#: view:crm.meeting:0
msgid "All Day?"
msgstr ""
msgstr "Minden nap?"
#. module: base_calendar
#: view:calendar.event:0
@ -1188,6 +1191,16 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Kattintson új találkozó ütemezéséhez.\n"
" </p><p>\n"
" A naptár az alkalmazottak között megosztott és teljesen "
"integrált az\n"
" egyéb alkalmazásokkal mint az alkalmazotti szabadságok vagy az "
"üzleti\n"
" lehetőségek.\n"
" </p>\n"
" "
#. module: base_calendar
#: help:calendar.alarm,description:0
@ -1196,6 +1209,8 @@ msgid ""
"calendar component, than that provided by the "
"\"SUMMARY\" property"
msgstr ""
"Egy jóval összetettebb leírást biztosít a naptári bejegyzéshez, mint amit az "
"\"ÖSSZEGZÉS\" tulajdonságoknál létre lett hozva"
#. module: base_calendar
#: view:calendar.event:0
@ -1205,7 +1220,7 @@ msgstr "Felelős felhasználó"
#. module: base_calendar
#: view:crm.meeting:0
msgid "Select Weekdays"
msgstr ""
msgstr "Munkanapokat válasszon"
#. module: base_calendar
#: code:addons/base_calendar/base_calendar.py:1519
@ -1220,7 +1235,7 @@ msgstr "Foglalt"
#. module: base_calendar
#: model:ir.model,name:base_calendar.model_calendar_event
msgid "Calendar Event"
msgstr ""
msgstr "Naptári esemény"
#. module: base_calendar
#: field:calendar.event,recurrency:0
@ -1255,6 +1270,8 @@ msgstr "Kivétel szabály"
msgid ""
"To specify the language for text values in aproperty or property parameter."
msgstr ""
"Nyelv meghatározása a tulajdonság vagy a tulajdonság paraméter szöveg "
"értékekhez."
#. module: base_calendar
#: view:calendar.event:0
@ -1269,6 +1286,8 @@ msgid ""
"Defines a rule or repeating pattern of time to exclude from the recurring "
"rule."
msgstr ""
"Meghatároz egy idő szabályt vagy ismétlődési mintát az ismétlődési "
"szabályból való kizáráshoz."
#. module: base_calendar
#: field:calendar.event,month_list:0
@ -1282,17 +1301,17 @@ msgstr "Hónap"
#: selection:calendar.todo,rrule_type:0
#: selection:crm.meeting,rrule_type:0
msgid "Day(s)"
msgstr ""
msgstr "Nap(ok)"
#. module: base_calendar
#: view:calendar.event:0
msgid "Confirmed Events"
msgstr ""
msgstr "Nyugtázozz események"
#. module: base_calendar
#: field:calendar.attendee,dir:0
msgid "URI Reference"
msgstr ""
msgstr "URI Referencia"
#. module: base_calendar
#: field:calendar.alarm,description:0
@ -1331,7 +1350,7 @@ msgstr "ir.values"
#. module: base_calendar
#: view:crm.meeting:0
msgid "Search Meetings"
msgstr ""
msgstr "Találkozó keresés"
#. module: base_calendar
#: model:ir.model,name:base_calendar.model_ir_attachment
@ -1341,7 +1360,7 @@ msgstr "ir.attachment"
#. module: base_calendar
#: model:ir.model,name:base_calendar.model_crm_meeting_type
msgid "Meeting Type"
msgstr ""
msgstr "Találkozó típusa"
#. module: base_calendar
#: selection:calendar.attendee,state:0
@ -1367,16 +1386,24 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Kattintson új riasztás típus beállításához.\n"
" </p><p>\n"
" Meg tud határozni egy személyre szabott naptári riasztás "
"típust melyet\n"
" hozzá lehet rendelni naptári eseményhez vagy találkozókhoz.\n"
" </p>\n"
" "
#. module: base_calendar
#: selection:crm.meeting,state:0
msgid "Unconfirmed"
msgstr ""
msgstr "Nincs megerősítve"
#. module: base_calendar
#: help:calendar.attendee,sent_by:0
msgid "Specify the user that is acting on behalf of the calendar user"
msgstr ""
msgstr "Határozza meg a falhasználót aki a naptár felhasználója lesz"
#. module: base_calendar
#: view:calendar.event:0
@ -1409,7 +1436,7 @@ msgstr "Név"
#: field:calendar.todo,exdate:0
#: field:crm.meeting,exdate:0
msgid "Exception Date/Times"
msgstr ""
msgstr "Dátum/idő kivételek"
#. module: base_calendar
#: help:calendar.alarm,name:0
@ -1417,11 +1444,13 @@ msgid ""
"Contains the text to be used as the message subject for "
"email or contains the text to be used for display"
msgstr ""
"Tartalmazza az e-mail tárgyaként felhasznált szöveget vagy a megjeleníteni "
"kívánt üzenetet"
#. module: base_calendar
#: model:ir.model,name:base_calendar.model_mail_message
msgid "Message"
msgstr ""
msgstr "Üzenet"
#. module: base_calendar
#: field:calendar.event,base_calendar_alarm_id:0
@ -1446,7 +1475,7 @@ msgstr "Április"
#: code:addons/base_calendar/crm_meeting.py:106
#, python-format
msgid "Email addresses not found"
msgstr ""
msgstr "E-mail cím nem található"
#. module: base_calendar
#: view:calendar.event:0
@ -1464,7 +1493,7 @@ msgstr "Hétköznap"
#: code:addons/base_calendar/base_calendar.py:1013
#, python-format
msgid "Interval cannot be negative."
msgstr ""
msgstr "Intervallum nem lehet negatív."
#. module: base_calendar
#: field:calendar.event,byday:0
@ -1477,7 +1506,7 @@ msgstr "Nappal"
#: code:addons/base_calendar/base_calendar.py:441
#, python-format
msgid "First you have to specify the date of the invitation."
msgstr ""
msgstr "Elöször meg kell határoznia a meghívó dátumát."
#. module: base_calendar
#: field:calendar.alarm,model_id:0
@ -1499,7 +1528,7 @@ msgstr "ID"
#. module: base_calendar
#: selection:calendar.attendee,role:0
msgid "For information Purpose"
msgstr ""
msgstr "Információs célokra"
#. module: base_calendar
#: field:calendar.event,select1:0
@ -1511,7 +1540,7 @@ msgstr "Opció"
#. module: base_calendar
#: model:ir.model,name:base_calendar.model_calendar_attendee
msgid "Attendee information"
msgstr ""
msgstr "Résztvevők információi"
#. module: base_calendar
#: field:calendar.alarm,res_id:0
@ -1521,12 +1550,12 @@ msgstr "Erőforrás ID"
#. module: base_calendar
#: selection:calendar.attendee,state:0
msgid "Needs Action"
msgstr ""
msgstr "Beavatkozás szükséges"
#. module: base_calendar
#: field:calendar.attendee,sent_by:0
msgid "Sent By"
msgstr ""
msgstr "Küldte"
#. module: base_calendar
#: field:calendar.event,sequence:0
@ -1540,7 +1569,7 @@ msgstr "Sorszám"
#: help:calendar.todo,alarm_id:0
#: help:crm.meeting,alarm_id:0
msgid "Set an alarm at this time, before the event occurs"
msgstr ""
msgstr "Most beállított riasztás, mielőtt az esemény elkezdődne"
#. module: base_calendar
#: view:calendar.event:0
@ -1560,7 +1589,7 @@ msgstr "Szombat"
#: field:calendar.todo,interval:0
#: field:crm.meeting,interval:0
msgid "Repeat Every"
msgstr ""
msgstr "Ismétlés minden"
#. module: base_calendar
#: selection:calendar.event,byday:0
@ -1601,6 +1630,11 @@ msgid ""
" * Points to a procedure resource, which is invoked when "
" the alarm is triggered for procedure."
msgstr ""
"* Hangforrásra mutat, mely beindul, ha a hangra "
"riasztást ad,\n"
" * Fájl mely elküldésre szánt mint e-mail melléklet,\n"
" * Művelet forrásra mutat, melyet segítségül hív ha "
" a riasztás a művelet miatt lett kapcsolva."
#. module: base_calendar
#: selection:calendar.event,byday:0

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-17 23:49+0000\n"
"PO-Revision-Date: 2013-03-27 22:52+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-19 05:33+0000\n"
"X-Generator: Launchpad (build 16532)\n"
"X-Launchpad-Export-Date: 2013-03-28 04:41+0000\n"
"X-Generator: Launchpad (build 16546)\n"
#. module: base_import
#. openerp-web
@ -441,6 +441,20 @@ msgid ""
"category \n"
" hierarchy."
msgstr ""
"Például, ha két termék kategóriával rendelkezik \n"
" ezzel az al-névvel \"Értékesíthető\" (pl. \"Egyéb \n"
" Termékek/Értékesíthetők\" & \"Más "
"Termékek/Értékesíthetők\"),\n"
" akkor a jóváhagyás meg lesz állítva, de az adatait "
"még tudja \n"
" importálni. Azonban, nem ajánlott az adat betöltése "
"\n"
" mivel az összes adat az első találhat "
"'Értékesíthető' kategóriához \n"
" lesz hozzárendelve a Termék kategória listában \n"
" (\"Egyéb Termékeke/Értékesíthető\"). Ajánljuk, hogy "
"módosítsa \n"
" a termék kategória rangsor egyik ismétlődő értékét ."
#. module: base_import
#. openerp-web
@ -452,6 +466,9 @@ msgid ""
"\n"
" PSQL:"
msgstr ""
"Személyekhez CVS fájl létrehozása, vállalatokhoz\n"
" kapcsolva, a következő SQL parancsot használva a \n"
" PSQL-ben:"
#. module: base_import
#. openerp-web
@ -463,11 +480,16 @@ msgid ""
" (in 'Save As' dialog box > click 'Tools' dropdown \n"
" list > Encoding tab)."
msgstr ""
"Microsoft Excel lehetővé teszi\n"
" csak a kódolás módosítását az elmentés alatt \n"
" (a 'Mentés másként' párbeszéd ablakban > kattints a "
"'Kellékek' legördülő \n"
" listán > a Kódolás fülre)."
#. module: base_import
#: field:base_import.tests.models.preview,othervalue:0
msgid "Other Variable"
msgstr ""
msgstr "Másik változó"
#. module: base_import
#. openerp-web
@ -479,6 +501,11 @@ msgid ""
" later, it's thus good practice to specify it\n"
" whenever possible"
msgstr ""
"az eredeti importálás frissítéséhez is \n"
" használja, ha később is fel akarja használni az újra-"
"importált módosított\n"
" adatot, amikor csak lehet ez egy jó gyakorlás a \n"
" meghatározáshoz"
#. module: base_import
#. openerp-web
@ -488,6 +515,9 @@ msgid ""
"file to import. If you need a sample importable file, you\n"
" can use the export tool to generate one."
msgstr ""
"fájl importáláshoz, betöltéshez. Ha szüksége van egy importálható példa "
"fájlra, akkor\n"
" használhatja az export eszközt egy új generálásához."
#. module: base_import
#. openerp-web
@ -497,16 +527,19 @@ msgid ""
"Country/Database \n"
" ID: 21"
msgstr ""
"Ország/Adatbázis \n"
" ID: 21"
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_tests_models_char
msgid "base_import.tests.models.char"
msgstr ""
msgstr "base_import.tests.models.char"
#. module: base_import
#: help:base_import.import,file:0
msgid "File to check and/or import, raw binary (not base64)"
msgstr ""
"Az importálandó és/vagy ellenőrizni kívánt fájl, nyers bináris (nem base64)"
#. module: base_import
#. openerp-web
@ -514,6 +547,7 @@ msgstr ""
#, python-format
msgid "Purchase orders with their respective purchase order lines"
msgstr ""
"Beszerzési megrendelések a hozzájuk tartozó beszerzési megrendelés sorokkal"
#. module: base_import
#. openerp-web
@ -525,13 +559,18 @@ msgid ""
" field corresponding to the column. This makes imports\n"
" simpler especially when the file has many columns."
msgstr ""
"Ha a fájl tartalmazza\n"
" az oszlop neveket, OpenERP megpróbálhatja automatikusan "
"észlelni\n"
" oszlophoz tartozó mezőt. Ez az importálásokat egyszerűbbé\n"
" teszi, főként, ha a fájl tele van oszlopokkal."
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:26
#, python-format
msgid ".CSV"
msgstr ""
msgstr ".CSV"
#. module: base_import
#. openerp-web
@ -541,16 +580,18 @@ msgid ""
". The issue is\n"
" usually an incorrect file encoding."
msgstr ""
". A probléma\n"
" általában a téves fájl kódolás."
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_tests_models_m2o_required
msgid "base_import.tests.models.m2o.required"
msgstr ""
msgstr "base_import.tests.models.m2o.required"
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_tests_models_char_noreadonly
msgid "base_import.tests.models.char.noreadonly"
msgstr ""
msgstr "base_import.tests.models.char.noreadonly"
#. module: base_import
#. openerp-web
@ -567,65 +608,75 @@ msgid ""
"filter \n"
" settings' > Save)."
msgstr ""
"Ha szerkeszti és menti a CSV fájlt a táblázat kezelő \n"
" alkalmazásokban, a számítógépének területi "
"beállítása lesz \n"
" az elválasztáshoz és a határolójelekhez használva. \n"
" Ajánljuk az OpenOffice vagy LibreOffice Calc \n"
" használatát, mivel ezek lehetővé teszik mindhárom "
"lehetőség\n"
" módosítását (a 'Mentés másként' beszédpanelen > a\n"
" 'Szerkesztési szűrő beállítás' négyzetnek\n"
" a bejelölésével > Mentés)."
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:30
#, python-format
msgid "CSV File:"
msgstr ""
msgstr "CSV Fájl:"
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_tests_models_preview
msgid "base_import.tests.models.preview"
msgstr ""
msgstr "base_import.tests.models.preview"
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_tests_models_char_required
msgid "base_import.tests.models.char.required"
msgstr ""
msgstr "base_import.tests.models.char.required"
#. module: base_import
#: code:addons/base_import/models.py:112
#, python-format
msgid "Database ID"
msgstr ""
msgstr "Adatbázis ID azonosító"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:313
#, python-format
msgid "It will produce the following CSV file:"
msgstr ""
msgstr "Ez a következő CSV fájlt fogja létrehozni:"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:362
#, python-format
msgid "Here is the start of the file we could not import:"
msgstr ""
msgstr "Itt van a fájlnak az eleje, melyiket nem tudtuk importálni:"
#. module: base_import
#: field:base_import.import,file_type:0
msgid "File Type"
msgstr ""
msgstr "Fájl típus"
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_import
msgid "base_import.import"
msgstr ""
msgstr "base_import.import"
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_tests_models_o2m
msgid "base_import.tests.models.o2m"
msgstr ""
msgstr "base_import.tests.models.o2m"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:360
#, python-format
msgid "Import preview failed due to:"
msgstr ""
msgstr "Import előnézet ezért nem sikerült:"
#. module: base_import
#. openerp-web
@ -637,18 +688,22 @@ msgid ""
"\n"
" that imported it)"
msgstr ""
"Ország/Külső ID azonosító: ennek a rekordnak az ID azonosítója\n"
" másik alkalmazásban egy hivatkozás (vagy az .XML "
"fájl \n"
" ami importálta azt)"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:35
#, python-format
msgid "Reload data to check changes."
msgstr ""
msgstr "Adatok újratöltése a változások ellenőrzéséhez."
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_tests_models_char_readonly
msgid "base_import.tests.models.char.readonly"
msgstr ""
msgstr "base_import.tests.models.char.readonly"
#. module: base_import
#. openerp-web
@ -665,6 +720,18 @@ msgid ""
"\n"
" per field you want to import."
msgstr ""
"Egyes mezők hivatkozásokat határoznak meg más \n"
" objektummal. Például, egy kapcsolat országa \n"
" csatolva van egy 'Ország' tárgyú rekorddal. Ha ilyen "
"\n"
" mezőket szeretne importálni, OpenERP újra létre "
"kell\n"
" hozza a kapcsolatokat a különböző rekordokhoz. \n"
" Ilyen mezők importálásának segítésére, OpenERP három "
"\n"
" módot biztosít. Kizárólag egy módszert használhat az "
"\n"
" importálni kívánt mezőnként."
#. module: base_import
#. openerp-web
@ -678,19 +745,26 @@ msgid ""
" then you will encode it as follow \"Manufacturer,\n"
" Retailer\" in the same column of your CSV file."
msgstr ""
"A címkéket vesszővel kell elválasztani egyéb szóköz használata \n"
" nélkül. Például, ha a vevőjét két címkéhez szeretné "
"\n"
" társítani, mint 'Gyártó' és 'Kiskereskedő' \n"
" akkor azt a következő képpen kell bevinnie "
"\"Gyártó,\n"
" Kiskereskedő\" a CVS fájl ugyanazon oszlopába."
#. module: base_import
#: code:addons/base_import/models.py:264
#, python-format
msgid "You must configure at least one field to import"
msgstr ""
msgstr "Legalább egy mezőt be kell állítania az importáláshoz"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:304
#, python-format
msgid "company_2,Organi,True"
msgstr ""
msgstr "vállalat_2,Organi,Igaz"
#. module: base_import
#. openerp-web
@ -700,37 +774,39 @@ msgid ""
"The first row of the\n"
" file contains the label of the column"
msgstr ""
"A fájl első oszlopa\n"
" tartalmazza az oszlop elnevezését"
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_tests_models_char_states
msgid "base_import.tests.models.char.states"
msgstr ""
msgstr "base_import.tests.models.char.states"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:7
#, python-format
msgid "Import a CSV File"
msgstr ""
msgstr "Egy CVS fájl importálása"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/js/import.js:74
#, python-format
msgid "Quoting:"
msgstr ""
msgstr "Hivatkozni:"
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_tests_models_m2o_required_related
msgid "base_import.tests.models.m2o.required.related"
msgstr ""
msgstr "base_import.tests.models.m2o.required.related"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:293
#, python-format
msgid ")."
msgstr ""
msgstr "nkat)."
#. module: base_import
#. openerp-web
@ -738,21 +814,21 @@ msgstr ""
#: code:addons/base_import/static/src/xml/import.xml:396
#, python-format
msgid "Import"
msgstr ""
msgstr "Importálás"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/js/import.js:438
#, python-format
msgid "Here are the possible values:"
msgstr ""
msgstr "Ezek a lehetséges értékek:"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:82
#, python-format
msgid "The"
msgstr ""
msgstr "A"
#. module: base_import
#. openerp-web
@ -762,20 +838,22 @@ msgid ""
"A single column was found in the file, this often means the file separator "
"is incorrect"
msgstr ""
"Egy oszlop található a fájlban, Ez sokszor azt jelenti, hogy a fájl "
"elválasztó hibás"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:293
#, python-format
msgid "dump of such a PostgreSQL database"
msgstr ""
msgstr "ilyen jellegű PostgreSQL adatbázis eldobása"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:301
#, python-format
msgid "This SQL command will create the following CSV file:"
msgstr ""
msgstr "Ez az SQL parancs ezt a CSV fájlt fogja létre hozni:"
#. module: base_import
#. openerp-web
@ -785,6 +863,9 @@ msgid ""
"The following CSV file shows how to import purchase \n"
" orders with their respective purchase order lines:"
msgstr ""
"A következő CSV fájl megmutatja hogyan importálja a beszerzési \n"
" megrendeléseket a hozzá tartozó beszerzési "
"megrendelés sorokkal:"
#. module: base_import
#. openerp-web
@ -794,6 +875,8 @@ msgid ""
"What can I do when the Import preview table isn't \n"
" displayed correctly?"
msgstr ""
"Mit tehetek, ha a kijelzőn lévő import tábla\n"
" előnézete hibás?"
#. module: base_import
#: field:base_import.tests.models.char,value:0
@ -810,21 +893,21 @@ msgstr ""
#: field:base_import.tests.models.o2m.child,parent_id:0
#: field:base_import.tests.models.o2m.child,value:0
msgid "unknown"
msgstr ""
msgstr "ismeretlen"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:317
#, python-format
msgid "person_2,Laurence,False,company_1"
msgstr ""
msgstr "személy_2,Laurence,Hamis,vállalat_1"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:149
#, python-format
msgid "Country/External ID: base.be"
msgstr ""
msgstr "Ország/Külső ID azonosító: base.be"
#. module: base_import
#. openerp-web
@ -839,27 +922,35 @@ msgid ""
" the company he work for. (If you want to test this \n"
" example, here is a"
msgstr ""
"Példának, feltételezzük, hogy van egy SQL adatbázis \n"
" két importálandó táblázattal: vállalatok és \n"
" személyek. Mindegyik személy egy vállalathoz "
"tartozik, így \n"
" létre kell hozni a kapcsolatot a személyek és a "
"munkahelyi \n"
" vállalatuk közt. (Ha tesztelni szeretné \n"
" ezt a példát, itt van a"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/js/import.js:427
#, python-format
msgid "(%d more)"
msgstr ""
msgstr "(%d több)"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:227
#, python-format
msgid "File for some Quotations"
msgstr ""
msgstr "Fájl egy pár kérdésnek"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/js/import.js:72
#, python-format
msgid "Encoding:"
msgstr ""
msgstr "Kódolás:"
#. module: base_import
#. openerp-web
@ -879,6 +970,20 @@ msgid ""
"\n"
" table. (like 'company_1', 'person_1' instead of '1')"
msgstr ""
"Táblák közti relációk összefésülésének kezelése, \n"
" használhatja a \"Külső ID azonosító\" OpenERP "
"lehetőséget. \n"
" A rekordhoz tartozó \"Külső ID azonosító\" a rekord "
"egy másik \n"
" alkalmazáson belüli egyedi azonosítója. Ez a \"Külső "
"ID\n"
" azonosító\" egyedi kell legyen minden rekordban és "
"az összes \n"
" objektumon, ezért jó gyakorlat ennek a \"Külső ID "
"azonosítónak\"\n"
" az alkalmazás vagy tábla előtaggal való "
"kiegészítése. \n"
" (mint 'vállalat_1', 'személy_1' az '1' helyett)"
#. module: base_import
#. openerp-web
@ -889,6 +994,9 @@ msgid ""
" \"External ID\". In PSQL, write the following "
"command:"
msgstr ""
"Először az összes vállalatot és a hozzá tartozó \"Külső ID azonosító\" lesz "
"\n"
" exportálva. A PSQL-ben, írja a következő parancsot:"
#. module: base_import
#. openerp-web
@ -898,13 +1006,15 @@ msgid ""
"How can I import a one2many relationship (e.g. several \n"
" Order Lines of a Sales Order)?"
msgstr ""
"Hogyan tudom importálni a one2many kapcsolatot (pl. egyes \n"
" megrendelés sorokat egy megrendelésből)?"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/js/import.js:404
#, python-format
msgid "Everything seems valid."
msgstr ""
msgstr "Úgy néz ki mindegyik érvényes."
#. module: base_import
#. openerp-web
@ -917,13 +1027,18 @@ msgid ""
" use make use of the external ID for this field \n"
" 'Category'."
msgstr ""
"Azonban, ha nem szeretné a termék kategóriákat\n"
" beállításait megváltoztatni, azt ajánljuk, hogy "
"használja \n"
" a külső ID azonosító használatát erre a 'Kategória'\n"
" mezőre."
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/js/import.js:421
#, python-format
msgid "at row %d"
msgstr ""
msgstr "Ebben a sorban %d"
#. module: base_import
#. openerp-web
@ -933,13 +1048,15 @@ msgid ""
"How can I import a many2many relationship field \n"
" (e.g. a customer that has multiple tags)?"
msgstr ""
"Hogyan tudom importálni egy many2many kapcsolati mezőt \n"
" (pl. egy vevő akinek több címkéje van)?"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:80
#, python-format
msgid "XXX/ID"
msgstr ""
msgstr "XXX/ID"
#. module: base_import
#. openerp-web
@ -955,6 +1072,14 @@ msgid ""
" link between each person and the company they work \n"
" for)."
msgstr ""
"Ha különböző táblázatokból kell adatot importálni, \n"
" akkor a különböző táblázatok közötti rekordok "
"kapcsolatait\n"
" újra létre kell hozni. (pl. ha vállalatokat és "
"személyeket \n"
" importál, akkor létre kell hoznia a kapcsolatot \n"
" minden személy és a vállalata közt, ahol "
"alakalmazott)."
#. module: base_import
#. openerp-web
@ -967,13 +1092,19 @@ msgid ""
" Here is when you should use one or the other, \n"
" according to your need:"
msgstr ""
"Az igénye szerint, használni kell \n"
" egyet a lehetésges 3 közül a a rekordokra "
"hivatkozáshoz a kapcsolatokban. \n"
" It van, ha egyiket a másik helyett kelle használni, "
"\n"
" az igénye szerint:"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:319
#, python-format
msgid "person_4,Ramsy,False,company_3"
msgstr ""
msgstr "személy_4,Ramsy,Hamis,vállalat_3"
#. module: base_import
#. openerp-web
@ -989,13 +1120,20 @@ msgid ""
" will set the EMPTY value in the field, instead of \n"
" assigning the default value."
msgstr ""
"Ha nem állítja be az összes mezőt a CSV fájlban, \n"
" OpenERP az alapértelmezett értéket fogja adni minden "
"olyan mezőnak ami \n"
" nincs meghatározva. Ha a mezőnek\n"
" üres értéket ad a CSV fájlban, OpenERP \n"
" az ÜRES értéket fogja beállítani a mezőre, az \n"
" alapértelmezett érték hozzáadása helyett."
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:20
#, python-format
msgid "Cancel"
msgstr ""
msgstr "Megszakítás"
#. module: base_import
#. openerp-web
@ -1005,20 +1143,22 @@ msgid ""
"What happens if I do not provide a value for a \n"
" specific field?"
msgstr ""
"Mi történik, ha nem adok meg értéket egy \n"
" bizonyos mezőhöz?"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:68
#, python-format
msgid "Frequently Asked Questions"
msgstr ""
msgstr "Leggyakoribb kérdések"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:305
#, python-format
msgid "company_3,Boum,True"
msgstr ""
msgstr "vállalat_3,Boum,Igaz"
#. module: base_import
#. openerp-web
@ -1032,6 +1172,12 @@ msgid ""
"spreadsheet \n"
" application."
msgstr ""
"Ez a tulajdonság \n"
" lehetővé teszi az OpenERP Import/Export eszköz "
"használatát \n"
" a rekord kötegek módosítására a kedvenc táblázat "
"kezelőjénak \n"
" alkalmazásával."
#. module: base_import
#. openerp-web
@ -1042,6 +1188,9 @@ msgid ""
" import an other record that links to the first\n"
" one, use"
msgstr ""
"oszlop az OpenERP-ben. Ha\n"
" másik rekordot importál amelyik az elsőre\n"
" hivatkozik, hasznája"
#. module: base_import
#. openerp-web
@ -1068,14 +1217,14 @@ msgstr ""
#: code:addons/base_import/static/src/xml/import.xml:169
#, python-format
msgid "CSV file for categories"
msgstr ""
msgstr "CSV fájl kategóriákhoz"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/js/import.js:330
#, python-format
msgid "Normal Fields"
msgstr ""
msgstr "Normál mezők"
#. module: base_import
#. openerp-web
@ -1087,13 +1236,18 @@ msgid ""
" identifier from the original application and\n"
" map it to the"
msgstr ""
"A különböző rekordok közötti kapcsolat újboli\n"
" létrehozásához, az eredeti alkalmazás \n"
" egyedi azonosítójának használata\n"
" szükséges amit\n"
" irányítson ehhez"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:170
#, python-format
msgid "CSV file for Products"
msgstr ""
msgstr "CSV fájl a termékekhez"
#. module: base_import
#. openerp-web
@ -1117,31 +1271,31 @@ msgstr ""
#. module: base_import
#: model:ir.model,name:base_import.model_base_import_tests_models_m2o_related
msgid "base_import.tests.models.m2o.related"
msgstr ""
msgstr "base_import.tests.models.m2o.related"
#. module: base_import
#: field:base_import.tests.models.preview,name:0
msgid "Name"
msgstr ""
msgstr "Név"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:80
#, python-format
msgid "to the original unique identifier."
msgstr ""
msgstr "az eredeti egyedi ID azonosítóhoz."
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:318
#, python-format
msgid "person_3,Eric,False,company_2"
msgstr ""
msgstr "személy_3,Eric,Hamis,vállalt_2"
#. module: base_import
#: field:base_import.import,res_model:0
msgid "Model"
msgstr ""
msgstr "Modell"
#. module: base_import
#. openerp-web
@ -1149,7 +1303,7 @@ msgstr ""
#: code:addons/base_import/static/src/xml/import.xml:82
#, python-format
msgid "ID"
msgstr ""
msgstr "Azonosító ID"
#. module: base_import
#. openerp-web
@ -1184,12 +1338,12 @@ msgstr ""
#: code:addons/base_import/static/src/js/import.js:73
#, python-format
msgid "Separator:"
msgstr ""
msgstr "Elválasztó:"
#. module: base_import
#: field:base_import.import,file_name:0
msgid "File Name"
msgstr ""
msgstr "Fájl neve"
#. module: base_import
#. openerp-web
@ -1199,28 +1353,28 @@ msgstr ""
#: code:addons/base_import/static/src/xml/import.xml:82
#, python-format
msgid "External ID"
msgstr ""
msgstr "Külső ID azonosító"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:39
#, python-format
msgid "File Format Options…"
msgstr ""
msgstr "Fájl formátum lehetőségek…"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/js/import.js:423
#, python-format
msgid "between rows %d and %d"
msgstr ""
msgstr "oszlopok közt %d és %d"
#. module: base_import
#. openerp-web
#: code:addons/base_import/static/src/xml/import.xml:19
#, python-format
msgid "or"
msgstr ""
msgstr "vagy"
#. module: base_import
#. openerp-web

View File

@ -24,7 +24,6 @@ import openerp.modules.registry
from openerp.osv import osv
from openerp_sxw2rml import sxw2rml
from StringIO import StringIO
from openerp import pooler
from openerp import addons
@ -46,20 +45,19 @@ class report_xml(osv.osv):
'''
Untested function
'''
pool = pooler.get_pool(cr.dbname)
sxwval = StringIO(base64.decodestring(file_sxw))
if file_type=='sxw':
fp = open(addons.get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_oo2rml.xsl'),'rb')
if file_type=='odt':
fp = open(addons.get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_odt2rml.xsl'),'rb')
report = pool.get('ir.actions.report.xml').write(cr, uid, [report_id], {
report = self.pool['ir.actions.report.xml'].write(cr, uid, [report_id], {
'report_sxw_content': base64.decodestring(file_sxw),
'report_rml_content': str(sxw2rml(sxwval, xsl=fp.read())),
})
# FIXME: this should be moved to an override of the ir.actions.report_xml.create() method
cr.commit()
pool.get('ir.actions.report.xml').register_all(cr)
self.pool['ir.actions.report.xml'].register_all(cr)
openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname)
return True

View File

@ -24,7 +24,7 @@ import base64
import time
import urllib
from openerp import osv, pooler, tools
from openerp import osv, tools
from openerp.osv import fields, osv
from openerp.tools.translate import _
@ -39,9 +39,9 @@ class base_report_sxw(osv.osv_memory):
def get_report(self, cr, uid, ids, context=None):
data = self.read(cr, uid, ids, context=context)[0]
data_obj = self.pool.get('ir.model.data')
data_obj = self.pool['ir.model.data']
id2 = data_obj._get_id(cr, uid, 'base_report_designer', 'view_base_report_file_sxw')
report = self.pool.get('ir.actions.report.xml').browse(cr, uid, data['report_id'], context=context)
report = self.pool['ir.actions.report.xml'].browse(cr, uid, data['report_id'], context=context)
if id2:
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
return {
@ -74,9 +74,9 @@ class base_report_file_sxw(osv.osv_memory):
"""
res = super(base_report_file_sxw, self).default_get(cr, uid, fields, context=context)
report_id1 = self.pool.get('base.report.sxw').search(cr,uid,[])
data = self.pool.get('base.report.sxw').read(cr, uid, report_id1, context=context)[0]
report = self.pool.get('ir.actions.report.xml').browse(cr, uid, data['report_id'], context=context)
report_id1 = self.pool['base.report.sxw'].search(cr,uid,[])
data = self.pool['base.report.sxw'].read(cr, uid, report_id1, context=context)[0]
report = self.pool['ir.actions.report.xml'].browse(cr, uid, data['report_id'], context=context)
if context is None:
context={}
if 'report_id' in fields:
@ -97,14 +97,14 @@ class base_report_file_sxw(osv.osv_memory):
sxwval = StringIO.StringIO(base64.decodestring(data['file_sxw_upload']))
fp = tools.file_open('normalized_oo2rml.xsl',subdir='addons/base_report_designer/openerp_sxw2rml')
newrmlcontent = str(openerp_sxw2rml.sxw2rml(sxwval, xsl=fp.read()))
report = self.pool.get('ir.actions.report.xml').write(cr, uid, [data['report_id']], {
report = self.pool['ir.actions.report.xml'].write(cr, uid, [data['report_id']], {
'report_sxw_content': base64.decodestring(data['file_sxw_upload']),
'report_rml_content': newrmlcontent
})
cr.commit()
data_obj = self.pool.get('ir.model.data')
data_obj = self.pool['ir.model.data']
id2 = data_obj._get_id(cr, uid, 'base_report_designer', 'view_base_report_file_rml')
report = self.pool.get('ir.actions.report.xml').browse(cr, uid, data['report_id'], context=context)
report = self.pool['ir.actions.report.xml'].browse(cr, uid, data['report_id'], context=context)
if id2:
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
return {
@ -135,9 +135,9 @@ class base_report_rml_save(osv.osv_memory):
"""
res = super(base_report_rml_save, self).default_get(cr, uid, fields, context=context)
report_id = self.pool.get('base.report.sxw').search(cr,uid,[])
data = self.pool.get('base.report.file.sxw').read(cr, uid, report_id, context=context)[0]
report = self.pool.get('ir.actions.report.xml').browse(cr, uid, data['report_id'], context=context)
report_id = self.pool['base.report.sxw'].search(cr,uid,[])
data = self.pool['base.report.file.sxw'].read(cr, uid, report_id, context=context)[0]
report = self.pool['ir.actions.report.xml'].browse(cr, uid, data['report_id'], context=context)
if 'file_rml' in fields:
res['file_rml'] = base64.encodestring(report.report_rml_content)

View File

@ -21,7 +21,6 @@
import simplejson
import cgi
from openerp import pooler
from openerp import tools
from openerp.osv import fields, osv
from openerp.tools.translate import _

View File

@ -0,0 +1,46 @@
# Spanish (Colombia) translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-21 21:43+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish (Colombia) <es_CO@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-22 04:57+0000\n"
"X-Generator: Launchpad (build 16532)\n"
#. module: contacts
#: model:ir.actions.act_window,help:contacts.action_contacts
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Click to add a contact in your address book.\n"
" </p><p>\n"
" OpenERP helps you easily track all activities related to\n"
" a customer; discussions, history of business opportunities,\n"
" documents, etc.\n"
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Pulse para añadir un contacto a su libreta de direcciones.\n"
" </p><p>\n"
" OpenERP le ayuda a seguir el rastro a todas las actividades "
"relativas a\n"
" un cliente: discusiones, histórico de oportunidades de negocio,\n"
" documentos, etc.\n"
" </p>\n"
" "
#. module: contacts
#: model:ir.actions.act_window,name:contacts.action_contacts
#: model:ir.ui.menu,name:contacts.menu_contacts
msgid "Contacts"
msgstr "Contactos"

File diff suppressed because it is too large Load Diff

View File

@ -19,8 +19,9 @@
#
##############################################################################
import openerp
from openerp import SUPERUSER_ID
from openerp import pooler, tools
from openerp import tools
from openerp.osv import osv, fields
class decimal_precision(osv.osv):
@ -57,7 +58,7 @@ class decimal_precision(osv.osv):
res = super(decimal_precision, self).write(cr, uid, ids, data, *args, **argv)
self.precision_get.clear_cache(self)
for obj in self.pool.obj_list():
for colname, col in self.pool.get(obj)._columns.items():
for colname, col in self.pool[obj]._columns.items():
if isinstance(col, (fields.float, fields.function)):
col.digits_change(cr)
return res
@ -66,7 +67,8 @@ decimal_precision()
def get_precision(application):
def change_digit(cr):
res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, SUPERUSER_ID, application)
decimal_precision = openerp.registry(cr.dbname)['decimal.precision']
res = decimal_precision.precision_get(cr, SUPERUSER_ID, application)
return (16, res)
return change_digit

View File

@ -31,7 +31,6 @@ from StringIO import StringIO
import psycopg2
import openerp
from openerp import pooler
from openerp import tools
from openerp.osv import fields, osv
from openerp.osv.orm import except_orm
@ -620,7 +619,7 @@ class node_context(object):
if context is None:
context = {}
context['uid'] = uid
self._dirobj = pooler.get_pool(cr.dbname).get('document.directory')
self._dirobj = openerp.registry(cr.dbname).get('document.directory')
self.node_file_class = node_file
self.extra_ctx = {} # Extra keys for context, that do _not_ trigger inequality
assert self._dirobj
@ -1999,7 +1998,7 @@ class nodefd_content(StringIO, node_descriptor):
par = self._get_parent()
uid = par.context.uid
cr = pooler.get_db(par.context.dbname).cursor()
cr = openerp.registry(par.context.dbname).db.cursor()
try:
if self.mode in ('w', 'w+', 'r+'):
data = self.getvalue()
@ -2052,7 +2051,7 @@ class nodefd_static(StringIO, node_descriptor):
par = self._get_parent()
# uid = par.context.uid
cr = pooler.get_db(par.context.dbname).cursor()
cr = openerp.registry(par.context.dbname).db.cursor()
try:
if self.mode in ('w', 'w+', 'r+'):
data = self.getvalue()

View File

@ -9,7 +9,8 @@ import errno
import glob
import fnmatch
from openerp import pooler, netsvc, sql_db
import openerp
from openerp import sql_db
import openerp.service
from openerp.service import security
from openerp.osv import osv
@ -192,7 +193,7 @@ class abstracted_fs(object):
if dir:
cr = dir.cr
uid = dir.uid
pool = pooler.get_pool(node.context.dbname)
pool = openerp.registry(node.context.dbname)
object=dir and dir.object or False
object2=dir and dir.object2 or False
res=pool.get('ir.attachment').search(cr,uid,[('name','like',prefix),('parent_id','=',object and object.type in ('directory','ressource') and object.id or False),('res_id','=',object2 and object2.id or False),('res_model','=',object2 and object2._name or False)])
@ -291,7 +292,7 @@ class abstracted_fs(object):
if dbname not in self.db_list():
raise IOError(errno.ENOENT,'Invalid database path: %s.' % dbname)
try:
db = pooler.get_db(dbname)
db = openerp.registry(dbname).db
except Exception:
raise OSError(1, 'Database cannot be used.')
cr = db.cursor()
@ -324,7 +325,7 @@ class abstracted_fs(object):
""" Get cr, uid, pool from a node
"""
assert node
db = pooler.get_db(node.context.dbname)
db = openerp.registry.(node.context.dbname).db
return db.cursor(), node.context.uid
def get_node_cr(self, node):

View File

@ -48,7 +48,6 @@ class authorizer:
if not len(paths)>2:
return True
db_name = paths[1]
db,pool = pooler.get_db_and_pool(db_name)
res = security.login(db_name, username, self.password)
return bool(res)

View File

@ -37,7 +37,7 @@ except ImportError:
from DAV.davcmd import copyone, copytree, moveone, movetree, delone, deltree
import openerp
from openerp import pooler, sql_db, netsvc
from openerp import sql_db, netsvc
import openerp.service
from openerp.tools import misc
@ -494,9 +494,9 @@ class openerp_dav_handler(dav_interface):
self.parent.auth_provider.checkRequest(self.parent, uri, dbname)
res = self.parent.auth_provider.auth_creds[dbname]
user, passwd, dbn2, uid = res
db,pool = pooler.get_db_and_pool(dbname)
cr = db.cursor()
return cr, uid, pool, dbname, uri2
registry = openerp.registry(dbname)
cr = registery.db.cursor()
return cr, uid, registry, dbname, uri2
def uri2object(self, cr, uid, pool, uri):
if not uid:

335
addons/fetchmail/i18n/cs.po Normal file
View File

@ -0,0 +1,335 @@
# Czech translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-27 09:03+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Czech <cs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-28 04:41+0000\n"
"X-Generator: Launchpad (build 16546)\n"
#. module: fetchmail
#: selection:fetchmail.server,state:0
msgid "Confirmed"
msgstr "Potvrzeno"
#. module: fetchmail
#: field:fetchmail.server,server:0
msgid "Server Name"
msgstr "Název serveru"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "POP"
msgstr "POP"
#. module: fetchmail
#: help:fetchmail.server,priority:0
msgid "Defines the order of processing, lower values mean higher priority"
msgstr "Určuje pořadí provádění, nižší hodnota znamená vyšší prioritu"
#. module: fetchmail
#: help:fetchmail.server,is_ssl:0
msgid ""
"Connections are encrypted with SSL/TLS through a dedicated port (default: "
"IMAPS=993, POP3S=995)"
msgstr ""
"Přenos je zabezpečen certifikáty SSL/TSL a probíhá přes vyhrazené porty "
"(standardně: IMAPS=993, POP3S=995)"
#. module: fetchmail
#: field:fetchmail.server,attach:0
msgid "Keep Attachments"
msgstr "Ponechat přílohy"
#. module: fetchmail
#: field:fetchmail.server,is_ssl:0
msgid "SSL/TLS"
msgstr "SSL/TLS"
#. module: fetchmail
#: help:fetchmail.server,original:0
msgid ""
"Whether a full original copy of each email should be kept for referenceand "
"attached to each processed message. This will usually double the size of "
"your message database."
msgstr ""
"Mají-li být zahrnuty také originály každého e-mailu u zpracovávaných zpráv. "
"To obvykle zdvojnásí velikost databáze zpráv."
#. module: fetchmail
#: view:base.config.settings:0
msgid "Configure the incoming email gateway"
msgstr "Nastavení příchozí poštovní brány"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Fetch Now"
msgstr "Zkontrolovat"
#. module: fetchmail
#: model:ir.actions.act_window,name:fetchmail.action_email_server_tree
#: model:ir.ui.menu,name:fetchmail.menu_action_fetchmail_server_tree
msgid "Incoming Mail Servers"
msgstr "Servery příchozí pošty"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Server type IMAP."
msgstr "IMAP server."
#. module: fetchmail
#: view:fetchmail.server:0
msgid "POP/IMAP Servers"
msgstr "POP/IMAP servery"
#. module: fetchmail
#: selection:fetchmail.server,type:0
msgid "Local Server"
msgstr "Místní server"
#. module: fetchmail
#: field:fetchmail.server,state:0
msgid "Status"
msgstr "Stav"
#. module: fetchmail
#: model:ir.model,name:fetchmail.model_fetchmail_server
msgid "POP/IMAP Server"
msgstr "POP/IMAP server"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Reset Confirmation"
msgstr "Obnovit potvrzení"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "SSL"
msgstr "SSL"
#. module: fetchmail
#: model:ir.model,name:fetchmail.model_fetchmail_config_settings
msgid "fetchmail.config.settings"
msgstr "fetchmail.config.settings"
#. module: fetchmail
#: field:fetchmail.server,date:0
msgid "Last Fetch Date"
msgstr "Poslední kontrola pošty"
#. module: fetchmail
#: help:fetchmail.server,action_id:0
msgid ""
"Optional custom server action to trigger for each incoming mail, on the "
"record that was created or updated by this mail"
msgstr ""
"Volitelné vlastní akce serveru pro příchozí e-mail na záznamu, který byl "
"vytvořen nebo aktualizován tímto e-mailem."
#. module: fetchmail
#: view:fetchmail.server:0
msgid "# of emails"
msgstr "# e-mailů"
#. module: fetchmail
#: field:fetchmail.server,original:0
msgid "Keep Original"
msgstr "Ponechat originál"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Advanced Options"
msgstr "Rozšířené volby"
#. module: fetchmail
#: view:fetchmail.server:0
#: field:fetchmail.server,configuration:0
msgid "Configuration"
msgstr "Nastavení"
#. module: fetchmail
#: field:fetchmail.server,script:0
msgid "Script"
msgstr "Skript"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Incoming Mail Server"
msgstr "Server příchozí pošty"
#. module: fetchmail
#: code:addons/fetchmail/fetchmail.py:164
#, python-format
msgid "Connection test failed!"
msgstr "Tes připojení byl neúspěšný!"
#. module: fetchmail
#: field:fetchmail.server,user:0
msgid "Username"
msgstr "Uživatelské jméno"
#. module: fetchmail
#: help:fetchmail.server,server:0
msgid "Hostname or IP of the mail server"
msgstr "Název nebo IP adresa e-mail serveru"
#. module: fetchmail
#: field:fetchmail.server,name:0
msgid "Name"
msgstr "Název"
#. module: fetchmail
#: code:addons/fetchmail/fetchmail.py:164
#, python-format
msgid ""
"Here is what we got instead:\n"
" %s."
msgstr ""
"Bylo obdrženo namísto:\n"
" %s."
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Test & Confirm"
msgstr "Test & Potvrzení"
#. module: fetchmail
#: field:fetchmail.server,action_id:0
msgid "Server Action"
msgstr "Akce serveru"
#. module: fetchmail
#: field:mail.mail,fetchmail_server_id:0
msgid "Inbound Mail Server"
msgstr "Server příchozí pošty"
#. module: fetchmail
#: field:fetchmail.server,message_ids:0
#: model:ir.actions.act_window,name:fetchmail.act_server_history
msgid "Messages"
msgstr "Zprávy"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Search Incoming Mail Servers"
msgstr "Hledat servery příchozí pošty"
#. module: fetchmail
#: field:fetchmail.server,active:0
msgid "Active"
msgstr "Aktivní"
#. module: fetchmail
#: help:fetchmail.server,attach:0
msgid ""
"Whether attachments should be downloaded. If not enabled, incoming emails "
"will be stripped of any attachments before being processed"
msgstr ""
"Mají-li být za zahrnuty také přílohy. Pokud nebude povoleno, budou příchozí "
"e-maily zbaveny všech příloh před dalším zpracováním."
#. module: fetchmail
#: model:ir.model,name:fetchmail.model_mail_mail
msgid "Outgoing Mails"
msgstr "Odchozí e-maily"
#. module: fetchmail
#: field:fetchmail.server,priority:0
msgid "Server Priority"
msgstr "Priorita serveru"
#. module: fetchmail
#: selection:fetchmail.server,type:0
msgid "IMAP Server"
msgstr "IMAP server"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "IMAP"
msgstr "IMAP"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Server type POP."
msgstr "POP server."
#. module: fetchmail
#: field:fetchmail.server,password:0
msgid "Password"
msgstr "Heslo"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Actions to Perform on Incoming Mails"
msgstr "Akce prováděné s příchozími e-maily"
#. module: fetchmail
#: field:fetchmail.server,type:0
msgid "Server Type"
msgstr "Druh serveru"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Login Information"
msgstr "Přihlašovací údaje"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Server Information"
msgstr "Údaje o serveru"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "If SSL required."
msgstr "Je-li požádován SSL."
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Advanced"
msgstr "Rozšířené"
#. module: fetchmail
#: view:fetchmail.server:0
msgid "Server & Login"
msgstr "Server & Přihlášení"
#. module: fetchmail
#: help:fetchmail.server,object_id:0
msgid ""
"Process each incoming mail as part of a conversation corresponding to this "
"document type. This will create new documents for new conversations, or "
"attach follow-up emails to the existing conversations (documents)."
msgstr ""
"Zpracuje každý příchozí e-mail jako součást konverzace podle druhu "
"dokumentu. Buď se nové konverzaci se vytvoří nové dokumenty, nebo se ke "
"stávající konverzaci připojí navazující e-maily (dokumenty)."
#. module: fetchmail
#: field:fetchmail.server,object_id:0
msgid "Create a New Record"
msgstr "Vytvořit nový záznam"
#. module: fetchmail
#: selection:fetchmail.server,state:0
msgid "Not Confirmed"
msgstr "Nepotvrzeno"
#. module: fetchmail
#: selection:fetchmail.server,type:0
msgid "POP Server"
msgstr "POP server"
#. module: fetchmail
#: field:fetchmail.server,port:0
msgid "Port"
msgstr "Port"

View File

@ -23,7 +23,7 @@ from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
import time
from openerp import netsvc, pooler
import openerp
from openerp.report import report_sxw
from openerp.report.interface import report_rml
from openerp.report.interface import toxml
@ -46,7 +46,8 @@ def lengthmonth(year, month):
class report_custom(report_rml):
def create_xml(self, cr, uid, ids, datas, context=None):
obj_emp = pooler.get_pool(cr.dbname).get('hr.employee')
registry = openerp.registry(cr.dbname)
obj_emp = registry['hr.employee']
if context is None:
context = {}
month = datetime(datas['form']['year'], datas['form']['month'], 1)
@ -102,14 +103,14 @@ class report_custom(report_rml):
days_xml.append(today_xml)
user_xml.append(user_repr % '\n'.join(days_xml))
rpt_obj = pooler.get_pool(cr.dbname).get('hr.employee')
rpt_obj = obj_emp
rml_obj=report_sxw.rml_parse(cr, uid, rpt_obj._name,context)
header_xml = '''
<header>
<date>%s</date>
<company>%s</company>
</header>
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,uid).company_id.name))
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(registry['res.users'].browse(cr,uid,uid).company_id.name))
first_date = str(month)
som = datetime.strptime(first_date, '%Y-%m-%d %H:%M:%S')

View File

@ -22,7 +22,6 @@
import datetime
import time
from openerp import pooler
from openerp.report import report_sxw
class attendance_print(report_sxw.rml_parse):

View File

@ -24,7 +24,8 @@ from datetime import datetime
from dateutil.relativedelta import relativedelta
import time
from openerp import pooler, tools
import openerp
from openerp import tools
from openerp.report import report_sxw
from openerp.report.interface import report_rml, toxml
from openerp.tools.translate import _
@ -38,7 +39,8 @@ def to_hour(h):
class report_custom(report_rml):
def create_xml(self, cr, uid, ids, datas, context=None):
obj_emp = pooler.get_pool(cr.dbname).get('hr.employee')
registry = openerp.registry(cr.dbname)
obj_emp = registry['hr.employee']
emp_ids = datas['active_ids']
start_date = datetime.strptime(datas['form']['init_date'], '%Y-%m-%d')
@ -49,14 +51,14 @@ class report_custom(report_rml):
if last_monday < first_monday:
first_monday, last_monday = last_monday, first_monday
rpt_obj = pooler.get_pool(cr.dbname).get('hr.employee')
rpt_obj = obj_emp
rml_obj=report_sxw.rml_parse(cr, uid, rpt_obj._name,context)
header_xml = '''
<header>
<date>%s</date>
<company>%s</company>
</header>
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,uid).company_id.name)
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),registry['res.users'].browse(cr,uid,uid).company_id.name)
user_xml = []
for employee_id in emp_ids:
emp = obj_emp.read(cr, uid, [employee_id], ['id', 'name'])[0]

View File

@ -22,12 +22,11 @@
import datetime
import time
import openerp
from openerp.osv import fields, osv
from openerp.report.interface import report_rml
from openerp.report.interface import toxml
from openerp import pooler
import time
from openerp.report import report_sxw
from openerp.tools import ustr
from openerp.tools.translate import _
@ -50,8 +49,9 @@ def emp_create_xml(self, cr, uid, dept, holiday_type, row_id, empid, name, som,
display={}
if dept==0:
count=0
p_id=pooler.get_pool(cr.dbname).get('hr.holidays').search(cr, uid, [('employee_id','in',[empid,False]), ('type', '=', 'remove')])
ids_date = pooler.get_pool(cr.dbname).get('hr.holidays').read(cr, uid, p_id, ['date_from','date_to','holiday_status_id','state'])
registry = openerp.registry(cr.dbname)
p_id = registry['hr.holidays'].search(cr, uid, [('employee_id','in',[empid,False]), ('type', '=', 'remove')])
ids_date = registry['hr.holidays'].read(cr, uid, p_id, ['date_from','date_to','holiday_status_id','state'])
for index in range(1,61):
diff=index-1
@ -85,12 +85,12 @@ def emp_create_xml(self, cr, uid, dept, holiday_type, row_id, empid, name, som,
class report_custom(report_rml):
def create_xml(self, cr, uid, ids, data, context):
obj_dept = pooler.get_pool(cr.dbname).get('hr.department')
obj_emp = pooler.get_pool(cr.dbname).get('hr.employee')
registry = openerp.registry(cr.dbname)
obj_dept = registry['hr.department']
obj_emp = registry['hr.employee']
depts=[]
emp_id={}
# done={}
rpt_obj = pooler.get_pool(cr.dbname).get('hr.holidays')
rpt_obj = registry['hr.holidays']
rml_obj=report_sxw.rml_parse(cr, uid, rpt_obj._name,context)
cr.execute("SELECT name FROM res_company")
res=cr.fetchone()[0]
@ -242,7 +242,7 @@ class report_custom(report_rml):
<date>%s</date>
<company>%s</company>
</header>
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,uid).company_id.name))
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(registry['res.users'].browse(cr,uid,uid).company_id.name))
# Computing the xml
xml='''<?xml version="1.0" encoding="UTF-8" ?>

View File

@ -68,9 +68,8 @@
I verify that the payslip is in done state
-
!python {model: hr.payslip}: |
from openerp.tools.translate import _
payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
assert(payslip_brw.state == 'done'), _('State not changed!')
assert(payslip_brw.state == 'done'), 'State not changed!'
-
I want to check refund payslip so I click on refund button.
-

View File

@ -89,9 +89,8 @@
I verify the payslip is in draft state.
-
!python {model: hr.payslip}: |
from openerp.tools.translate import _
payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
assert(payslip_brw.state == 'draft'), _('State not changed!')
assert(payslip_brw.state == 'draft'), 'State not changed!'
-
I click on "Compute Sheet" button.
-
@ -120,7 +119,6 @@
I verify that the payslip is in done state.
-
!python {model: hr.payslip}: |
from openerp.tools.translate import _
payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
assert(payslip_brw.state == 'done'), _('State not changed!')
assert(payslip_brw.state == 'done'), 'State not changed!'

View File

@ -74,8 +74,9 @@ class hr_analytic_timesheet(osv.osv):
toremove = {}
for obj in self.browse(cr, uid, ids, context=context):
toremove[obj.line_id.id] = True
super(hr_analytic_timesheet, self).unlink(cr, uid, ids, context=context)
self.pool.get('account.analytic.line').unlink(cr, uid, toremove.keys(), context=context)
return super(hr_analytic_timesheet, self).unlink(cr, uid, ids, context=context)
return True
def on_change_unit_amount(self, cr, uid, id, prod_id, unit_amount, company_id, unit=False, journal_id=False, context=None):

View File

@ -20,12 +20,12 @@
##############################################################################
import datetime
import time
import openerp
from openerp.report.interface import report_rml
from openerp.report.interface import toxml
from openerp.tools.translate import _
import time
from openerp import pooler
from openerp.report import report_sxw
from openerp.tools import ustr
from openerp.tools import to_xml
@ -45,10 +45,11 @@ class report_custom(report_rml):
return _weekdays[weekday]
def create_xml(self, cr, uid, ids, data, context):
registry = openerp.registry(cr.dbname)
# Get the user id from the selected employee record
emp_id = data['form']['employee_id']
emp_obj = pooler.get_pool(cr.dbname).get('hr.employee')
emp_obj = registry['hr.employee']
user_id = emp_obj.browse(cr, uid, emp_id).user_id.id
empl_name = emp_obj.browse(cr, uid, emp_id).name
@ -87,7 +88,7 @@ class report_custom(report_rml):
<amount>%.2f</amount>
</time-element>
'''
rpt_obj = pooler.get_pool(cr.dbname).get('hr.employee')
rpt_obj = registry['hr.employee']
rml_obj = report_sxw.rml_parse(cr, uid, rpt_obj._name,context)
if user_id:
header_xml = '''
@ -95,12 +96,12 @@ class report_custom(report_rml):
<date>%s</date>
<company>%s</company>
</header>
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,user_id).company_id.name))
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(registry['res.users'].browse(cr,uid,user_id).company_id.name))
account_xml = []
for account, telems in accounts.iteritems():
aid, aname = account
aname = pooler.get_pool(cr.dbname).get('account.analytic.account').name_get(cr, uid, [aid], context)
aname = registry['account.analytic.account'].name_get(cr, uid, [aid], context)
aname = aname[0][1]
account_xml.append('<account id="%d" name="%s">' % (aid, toxml(aname)))

View File

@ -20,10 +20,11 @@
##############################################################################
import datetime
import time
import openerp
from openerp.report.interface import report_rml
from openerp.report.interface import toxml
import time
from openerp import pooler
from openerp.tools.translate import _
from openerp.report import report_sxw
from openerp.tools import ustr
@ -78,6 +79,7 @@ class report_custom(report_rml):
return _weekdays[weekday]
def create_xml(self, cr, uid, ids, data, context):
registry = openerp.registry(cr.dbname)
# Computing the dates (start of month: som, and end of month: eom)
som = datetime.date(data['form']['year'], data['form']['month'], 1)
@ -88,7 +90,7 @@ class report_custom(report_rml):
date_xml.append('<cols>2.5cm%s,2cm</cols>\n' % (',0.7cm' * lengthmonth(som.year, som.month)))
emp_xml=''
emp_obj = pooler.get_pool(cr.dbname).get('hr.employee')
emp_obj = registry['hr.employee']
for id in data['form']['employee_ids']:
user = emp_obj.browse(cr, uid, id).user_id.id
empl_name = emp_obj.browse(cr, uid, id).name
@ -97,14 +99,14 @@ class report_custom(report_rml):
# Computing the xml
#Without this, report don't show non-ascii characters (TO CHECK)
date_xml = '\n'.join(date_xml)
rpt_obj = pooler.get_pool(cr.dbname).get('hr.employee')
rpt_obj = emp_obj
rml_obj=report_sxw.rml_parse(cr, uid, rpt_obj._name,context)
header_xml = '''
<header>
<date>%s</date>
<company>%s</company>
</header>
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),pooler.get_pool(cr.dbname).get('res.users').browse(cr,uid,uid).company_id.name)
''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),registry['res.users'].browse(cr,uid,uid).company_id.name)
xml='''<?xml version="1.0" encoding="UTF-8" ?>
<report>

View File

@ -20,7 +20,6 @@
##############################################################################
from openerp.report import report_sxw
from openerp import pooler
class account_analytic_profit(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
@ -32,13 +31,13 @@ class account_analytic_profit(report_sxw.rml_parse):
'line': self._line,
})
def _user_ids(self, lines):
user_obj=pooler.get_pool(self.cr.dbname).get('res.users')
user_obj = self.pool['res.users']
ids=list(set([b.user_id.id for b in lines]))
return user_obj.browse(self.cr, self.uid, ids)
def _journal_ids(self, form, user_id):
line_obj=pooler.get_pool(self.cr.dbname).get('account.analytic.line')
journal_obj=pooler.get_pool(self.cr.dbname).get('account.analytic.journal')
line_obj = self.pool['account.analytic.line']
journal_obj = self.pool['account.analytic.journal']
line_ids=line_obj.search(self.cr, self.uid, [
('date', '>=', form['date_from']),
('date', '<=', form['date_to']),
@ -49,10 +48,9 @@ class account_analytic_profit(report_sxw.rml_parse):
return journal_obj.browse(self.cr, self.uid, ids)
def _line(self, form, journal_ids, user_ids):
pool=pooler.get_pool(self.cr.dbname)
line_obj=pool.get('account.analytic.line')
product_obj=pool.get('product.product')
price_obj=pool.get('product.pricelist')
line_obj = self.pool['account.analytic.line']
product_obj = self.pool['product.product']
price_obj = self.pool['product.pricelist']
ids=line_obj.search(self.cr, self.uid, [
('date', '>=', form['date_from']),
('date', '<=', form['date_to']),
@ -109,7 +107,7 @@ class account_analytic_profit(report_sxw.rml_parse):
return res.values()
def _lines(self, form):
line_obj=pooler.get_pool(self.cr.dbname).get('account.analytic.line')
line_obj = self.pool['account.analytic.line']
ids=line_obj.search(self.cr, self.uid, [
('date', '>=', form['date_from']),
('date', '<=', form['date_to']),

View File

@ -9,16 +9,17 @@
<form string="Create Invoice" version="7.0">
<notebook>
<page string="Billing Data">
<group>
<group string="Do you want to show details of work in invoice?">
<field name="date"/>
<field name="time"/>
<field name="name"/>
<field name="price"/>
</group>
<group string="Force to use a specific product">
<field name="product"/>
</group>
<group cols="2">
<group string="Do you want to show details of work in invoice?" colspan="1" cols="2">
<field name="date"/>
<field name="time"/>
<field name="name"/>
<field name="price"/>
</group>
<group string="Force to use a specific product" colspan="1" cols="2">
<p class="oe_grey" colspan="2">When reinvoicing costs, the amount on the invoice lines is given by the sale price of the corresponding product (if any, and if its sale price is not 0). You can use the following field to enforce the use of a single product for all the chosen lines in the future invoices.</p>
<field name="product"/>
</group>
</group>
</page>
</notebook>

View File

@ -41,6 +41,7 @@
<field name="priority">10</field>
<field name="arch" type="xml">
<tree editable="bottom" string="Statement lines">
<field name="statement_id" readonly="1" invisible="1"/>
<field name="sequence" readonly="1" invisible="1"/>
<field name="date"/>
<field name="name"/>

View File

@ -17,7 +17,7 @@
#along with this program. If not, see <http://www.gnu.org/licenses/>. #
#################################################################################
from openerp import pooler
import openerp
from openerp.osv import fields, osv
TAX_CODE_COLUMNS = {
@ -92,7 +92,8 @@ class account_tax_code(osv.osv):
def get_precision_tax():
def change_digit_tax(cr):
res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, 1, 'Account')
decimal_precision = openerp.registry(cr.dbname)['decimal.precision']
res = decimal_precision.precision_get(cr, 1, 'Account')
return (16, res+2)
return change_digit_tax

View File

@ -5,8 +5,9 @@
#Tranquil IT Systems
from __future__ import with_statement
import openerp
from openerp.osv import fields, osv
from openerp import pooler
from openerp import tools
from openerp.tools.translate import _
from openerp.report.render import render
@ -30,8 +31,8 @@ class report_custom(report_int):
def create(self, cr, uid, ids, datas, context=None):
pool = pooler.get_pool(cr.dbname)
taxobj = pool.get('account.tax.code')
registry = openerp.registry(cr.dbname)
taxobj = registry['account.tax.code']
if context is None:
context = {}
@ -40,7 +41,7 @@ class report_custom(report_int):
for t in taxobj.browse(cr, uid, code_ids, {'period_id': datas['form']['period_id']}):
if str(t.code):
result['case_'+str(t.code)] = '%.2f' % (t.sum_period or 0.0, )
user = pool.get('res.users').browse(cr, uid, uid, context)
user = registry['res.users'].browse(cr, uid, uid, context)
# Not Clean, to be changed
partner = user.company_id.partner_id

1687
addons/mail/i18n/cs.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -186,10 +186,13 @@ class mail_alias(osv.Model):
def create_unique_alias(self, cr, uid, vals, model_name=None, context=None):
"""Creates an email.alias record according to the values provided in ``vals``,
with 2 alterations: the ``alias_name`` value may be suffixed in order to
make it unique, and the ``alias_model_id`` value will set to the
model ID of the ``model_name`` value, if provided,
make it unique (and certain unsafe characters replaced), and
he ``alias_model_id`` value will set to the model ID of the ``model_name``
value, if provided,
"""
alias_name = re.sub(r'[^\w+]', '-', remove_accents(vals['alias_name'])).lower()
# when an alias name appears to already be an email, we keep the local part only
alias_name = remove_accents(vals['alias_name']).lower().split('@')[0]
alias_name = re.sub(r'[^\w+.]+', '-', alias_name)
alias_name = self._find_unique(cr, uid, alias_name, context=context)
vals['alias_name'] = alias_name
if model_name:

View File

@ -95,6 +95,9 @@ class mail_notification(osv.Model):
# Do not send to partners without email address defined
if not partner.email:
continue
# Do not send to partners having same email address than the author (can cause loops or bounce effect due to messy database)
if message.author_id and message.author_id.email == partner.email:
continue
# Partner does not want to receive any emails or is opt-out
if partner.notification_email_send == 'none':
continue
@ -136,10 +139,10 @@ class mail_notification(osv.Model):
company = user.company_id.website and "<a style='color:inherit' href='%s'>%s</a>" % (user.company_id.website, user.company_id.name) or user.company_id.name
else:
company = user.name
signature_company = _('<small>Send by %(company)s using %(openerp)s.</small>' % {
signature_company = _('<small>Send by %(company)s using %(openerp)s.</small>') % {
'company': company,
'openerp': "<a style='color:inherit' href='https://www.openerp.com/'>OpenERP</a>"
})
}
footer = tools.append_content_to_html(footer, signature_company, plaintext=False, container_tag='div')
return footer
@ -186,11 +189,16 @@ class mail_notification(osv.Model):
signature_company = self.get_signature_footer(cr, uid, user_id, res_model=msg.model, res_id=msg.res_id, context=context)
body_html = tools.append_content_to_html(body_html, signature_company, plaintext=False, container_tag='div')
references = False
if msg.parent_id:
references = msg.parent_id.message_id
mail_values = {
'mail_message_id': msg.id,
'auto_delete': True,
'body_html': body_html,
'recipient_ids': [(4, id) for id in notify_partner_ids]
'recipient_ids': [(4, id) for id in notify_partner_ids],
'references': references,
}
if msg.email_from:
mail_values['email_from'] = msg.email_from

View File

@ -21,6 +21,7 @@
import base64
import logging
import re
from urllib import urlencode
from urlparse import urljoin
@ -96,9 +97,19 @@ class mail_mail(osv.Model):
return values.get('reply_to')
email_reply_to = False
# model, res_id: comes from values OR related message
model = values.get('model')
res_id = values.get('res_id')
if values.get('mail_message_id') and (not model or not res_id):
message = self.pool.get('mail.message').browse(cr, uid, values.get('mail_message_id'), context=context)
if not model:
model = message.model
if not res_id:
res_id = message.res_id
# if model and res_id: try to use ``message_get_reply_to`` that returns the document alias
if values.get('model') and values.get('res_id') and hasattr(self.pool.get(values.get('model')), 'message_get_reply_to'):
email_reply_to = self.pool.get(values.get('model')).message_get_reply_to(cr, uid, [values.get('res_id')], context=context)[0]
if model and res_id and hasattr(self.pool.get(model), 'message_get_reply_to'):
email_reply_to = self.pool.get(model).message_get_reply_to(cr, uid, [res_id], context=context)[0]
# no alias reply_to -> reply_to will be the email_from, only the email part
if not email_reply_to and values.get('email_from'):
emails = tools.email_split(values.get('email_from'))
@ -106,10 +117,13 @@ class mail_mail(osv.Model):
email_reply_to = emails[0]
# format 'Document name <email_address>'
if email_reply_to and values.get('model') and values.get('res_id'):
document_name = self.pool.get(values.get('model')).name_get(cr, SUPERUSER_ID, [values.get('res_id')], context=context)[0]
if email_reply_to and model and res_id:
document_name = self.pool.get(model).name_get(cr, SUPERUSER_ID, [res_id], context=context)[0]
if document_name:
email_reply_to = _('Followers of %s <%s>') % (document_name[1], email_reply_to)
# sanitize document name
sanitized_doc_name = re.sub(r'[^\w+.]+', '-', document_name[1])
# generate reply to
email_reply_to = _('"Followers of %s" <%s>') % (sanitized_doc_name, email_reply_to)
return email_reply_to
@ -242,7 +256,7 @@ class mail_mail(osv.Model):
body = self.send_get_mail_body(cr, uid, mail, partner=partner, context=context)
subject = self.send_get_mail_subject(cr, uid, mail, partner=partner, context=context)
body_alternative = tools.html2plaintext(body)
email_to = [partner.email] if partner else tools.email_split(mail.email_to)
email_to = ['%s <%s>' % (partner.name, partner.email)] if partner else tools.email_split(mail.email_to)
return {
'body': body,
'body_alternative': body_alternative,

View File

@ -416,9 +416,15 @@ class mail_thread(osv.AbstractModel):
def _message_find_partners(self, cr, uid, message, header_fields=['From'], context=None):
""" Find partners related to some header fields of the message. """
partner_obj = self.pool.get('res.partner')
partner_ids = []
s = ', '.join([decode(message.get(h)) for h in header_fields if message.get(h)])
return [partner_id for email in tools.email_split(s)
for partner_id in self.pool.get('res.partner').search(cr, uid, [('email', 'ilike', email)], limit=1, context=context)]
for email_address in tools.email_split(s):
related_partners = partner_obj.search(cr, uid, [('email', 'ilike', email_address), ('user_ids', '!=', False)], limit=1, context=context)
if not related_partners:
related_partners = partner_obj.search(cr, uid, [('email', 'ilike', email_address)], limit=1, context=context)
partner_ids += related_partners
return partner_ids
def _message_find_user_id(self, cr, uid, message, context=None):
from_local_part = tools.email_split(decode(message.get('From')))[0]
@ -527,6 +533,11 @@ class mail_thread(osv.AbstractModel):
# Legacy: fallback to matching [ID] in the Subject
match = tools.res_re.search(decode_header(message, 'Subject'))
thread_id = match and match.group(1)
# Convert into int (bug spotted in 7.0 because of str)
try:
thread_id = int(thread_id)
except:
thread_id = False
assert thread_id and hasattr(model_pool, 'message_update') or hasattr(model_pool, 'message_new'), \
"No possible route found for incoming message with Message-Id %s. " \
"Create an appropriate mail.alias or force the destination model." % message_id
@ -929,6 +940,22 @@ class mail_thread(osv.AbstractModel):
model = False
if thread_id:
model = context.get('thread_model', self._name) if self._name == 'mail.thread' else self._name
if model != self._name:
del context['thread_model']
return self.pool.get(model).message_post(cr, uid, thread_id, body=body, subject=subject, type=type, subtype=subtype, parent_id=parent_id, attachments=attachments, context=context, content_subtype=content_subtype, **kwargs)
# 0: Parse email-from, try to find a better author_id based on document's followers for incoming emails
email_from = kwargs.get('email_from')
if email_from and thread_id and type == 'email' and kwargs.get('author_id'):
email_list = tools.email_split(email_from)
doc = self.browse(cr, uid, thread_id, context=context)
if email_list and doc:
author_ids = self.pool.get('res.partner').search(cr, uid, [
('email', 'ilike', email_list[0]),
('id', 'in', [f.id for f in doc.message_follower_ids])
], limit=1, context=context)
if author_ids:
kwargs['author_id'] = author_ids[0]
# 1: Handle content subtype: if plaintext, converto into HTML
if content_subtype == 'plaintext':

View File

@ -688,6 +688,10 @@ openerp.mail = function (session) {
on_message_post: function (event) {
var self = this;
if (self.flag_post) {
return;
}
self.flag_post = true;
if (this.do_check_attachment_upload() && (this.attachment_ids.length || this.$('textarea').val().match(/\S+/))) {
if (this.is_log) {
this.do_send_message_post([], this.is_log);
@ -735,6 +739,7 @@ openerp.mail = function (session) {
thread.insert_message( message, root ? undefined : self.$el, root );
});
self.on_cancel();
self.flag_post = false;
});
},
@ -910,9 +915,6 @@ openerp.mail = function (session) {
// read messages
self.parent_thread.message_fetch(this.domain, this.context, false, function (arg, data) {
if (self.options.root_thread == self.parent_thread) {
data.reverse();
}
self.id = false;
// insert the message on dom after this message
self.parent_thread.switch_new_message( data, self.$el );
@ -1212,7 +1214,7 @@ openerp.mail = function (session) {
this.partner_ids = datasets.partner_ids;
this.messages = [];
this.options.flat_mode = !!(this.options.display_indented_thread > this.thread_level ? this.options.display_indented_thread - this.thread_level : 0);
this.options.flat_mode = (this.options.display_indented_thread - this.thread_level > 0);
// object compose message
this.compose_message = false;
@ -1434,8 +1436,8 @@ openerp.mail = function (session) {
create_message_object: function (data) {
var self = this;
var data = _.extend(data, {'thread_level': data.thread_level ? data.thread_level : self.thread_level});
data.options = _.extend(self.options, data.options);
data.thread_level = self.thread_level || 0;
data.options = _.extend(data.options || {}, self.options);
if (data.type=='expandable') {
var message = new mail.ThreadExpandable(self, data, {'context':{
@ -1480,8 +1482,7 @@ openerp.mail = function (session) {
}
this.$('.oe_view_nocontent').remove();
if (dom_insert_after) {
if (dom_insert_after && dom_insert_after.parent()[0] == self.$el[0]) {
message.insertAfter(dom_insert_after);
} else if (prepend) {
message.prependTo(self.$el);
@ -1500,6 +1501,7 @@ openerp.mail = function (session) {
*/
switch_new_message: function (records, dom_insert_after) {
var self=this;
var dom_insert_after = typeof dom_insert_after == 'object' ? dom_insert_after : false;
_(records).each(function (record) {
var thread = self.browse_thread({
'id': record.parent_id,
@ -1508,7 +1510,7 @@ openerp.mail = function (session) {
// create object and attach to the thread object
var message = thread.create_message_object( record );
// insert the message on dom
thread.insert_message( message, typeof dom_insert_after == 'object' ? dom_insert_after : false);
thread.insert_message( message, dom_insert_after);
});
if (!records.length && this.options.root_thread == this) {
this.no_message();

View File

@ -19,11 +19,12 @@
#
##############################################################################
from . import test_mail_message, test_mail_features, test_message_read, test_invite
from . import test_mail_message, test_mail_features, test_mail_gateway, test_message_read, test_invite
checks = [
test_mail_message,
test_mail_features,
test_mail_gateway,
test_message_read,
test_invite,
]

View File

@ -70,9 +70,9 @@ class TestMailBase(common.TransactionCase):
# Test users to use through the various tests
self.user_raoul_id = self.res_users.create(cr, uid,
{'name': 'Raoul Grosbedon', 'signature': 'Raoul', 'email': 'raoul@raoul.fr', 'login': 'raoul', 'groups_id': [(6, 0, [self.group_employee_id])]})
{'name': 'Raoul Grosbedon', 'signature': 'SignRaoul', 'email': 'raoul@raoul.fr', 'login': 'raoul', 'groups_id': [(6, 0, [self.group_employee_id])]})
self.user_bert_id = self.res_users.create(cr, uid,
{'name': 'Bert Tartignole', 'signature': 'Bert', 'email': 'bert@bert.fr', 'login': 'bert', 'groups_id': [(6, 0, [])]})
{'name': 'Bert Tartignole', 'signature': 'SignBert', 'email': 'bert@bert.fr', 'login': 'bert', 'groups_id': [(6, 0, [])]})
self.user_raoul = self.res_users.browse(cr, uid, self.user_raoul_id)
self.user_bert = self.res_users.browse(cr, uid, self.user_bert_id)
self.user_admin = self.res_users.browse(cr, uid, uid)

View File

@ -22,164 +22,29 @@
from openerp.addons.mail.tests.test_mail_base import TestMailBase
from openerp.tools.mail import html_sanitize
MAIL_TEMPLATE = """Return-Path: <whatever-2a840@postmaster.twitter.com>
To: {to}
Received: by mail1.openerp.com (Postfix, from userid 10002)
id 5DF9ABFB2A; Fri, 10 Aug 2012 16:16:39 +0200 (CEST)
From: Sylvie Lelitre <sylvie.lelitre@agrolait.com>
Subject: {subject}
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_Part_4200734_24778174.1344608186754"
Date: Fri, 10 Aug 2012 14:16:26 +0000
Message-ID: <1198923581.41972151344608186760.JavaMail@agrolait.com>
{extra}
------=_Part_4200734_24778174.1344608186754
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Please call me as soon as possible this afternoon!
--
Sylvie
------=_Part_4200734_24778174.1344608186754
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>=20
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8" />
</head>=20
<body style=3D"margin: 0; padding: 0; background: #ffffff;-webkit-text-size-adjust: 100%;">=20
<p>Please call me as soon as possible this afternoon!</p>
<p>--<br/>
Sylvie
<p>
</body>
</html>
------=_Part_4200734_24778174.1344608186754--
"""
MAIL_TEMPLATE_PLAINTEXT = """Return-Path: <whatever-2a840@postmaster.twitter.com>
To: {to}
Received: by mail1.openerp.com (Postfix, from userid 10002)
id 5DF9ABFB2A; Fri, 10 Aug 2012 16:16:39 +0200 (CEST)
From: Sylvie Lelitre <sylvie.lelitre@agrolait.com>
Subject: {subject}
MIME-Version: 1.0
Content-Type: text/plain
Date: Fri, 10 Aug 2012 14:16:26 +0000
Message-ID: {msg_id}
{extra}
Please call me as soon as possible this afternoon!
--
Sylvie
"""
class test_mail(TestMailBase):
def test_00_message_process(self):
""" Testing incoming emails processing. """
cr, uid, user_raoul = self.cr, self.uid, self.user_raoul
# groups@.. will cause the creation of new mail groups
self.mail_group_model_id = self.ir_model.search(cr, uid, [('model', '=', 'mail.group')])[0]
self.mail_alias.create(cr, uid, {'alias_name': 'groups', 'alias_model_id': self.mail_group_model_id})
# Incoming mail creates a new mail_group "frogs"
self.assertEqual(self.mail_group.search(cr, uid, [('name', '=', 'frogs')]), [])
mail_frogs = MAIL_TEMPLATE.format(to='groups@example.com, other@gmail.com', subject='frogs', extra='')
self.mail_thread.message_process(cr, uid, None, mail_frogs)
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'frogs')])
self.assertTrue(len(frog_groups) == 1)
# Previously-created group can be emailed now - it should have an implicit alias group+frogs@...
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
group_messages = frog_group.message_ids
self.assertTrue(len(group_messages) == 1, 'New group should only have the original message')
mail_frog_news = MAIL_TEMPLATE.format(to='Friendly Frogs <group+frogs@example.com>', subject='news', extra='')
self.mail_thread.message_process(cr, uid, None, mail_frog_news)
frog_group.refresh()
self.assertTrue(len(frog_group.message_ids) == 2, 'Group should contain 2 messages now')
# Even with a wrong destination, a reply should end up in the correct thread
mail_reply = MAIL_TEMPLATE.format(to='erroneous@example.com>', subject='Re: news',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
self.mail_thread.message_process(cr, uid, None, mail_reply)
frog_group.refresh()
self.assertTrue(len(frog_group.message_ids) == 3, 'Group should contain 3 messages now')
# No model passed and no matching alias must raise
mail_spam = MAIL_TEMPLATE.format(to='noone@example.com', subject='spam', extra='')
self.assertRaises(Exception,
self.mail_thread.message_process,
cr, uid, None, mail_spam)
# plain text content should be wrapped and stored as html
test_msg_id = '<deadcafe.1337@smtp.agrolait.com>'
mail_text = MAIL_TEMPLATE_PLAINTEXT.format(to='groups@example.com', subject='frogs', extra='', msg_id=test_msg_id)
self.mail_thread.message_process(cr, uid, None, mail_text)
new_mail = self.mail_message.browse(cr, uid, self.mail_message.search(cr, uid, [('message_id', '=', test_msg_id)])[0])
self.assertEqual(new_mail.body, '<pre>\nPlease call me as soon as possible this afternoon!\n\n--\nSylvie\n</pre>',
'plaintext mail incorrectly parsed')
# Do: post a new message, with a known partner
test_msg_id = '<deadcafe.1337-2@smtp.agrolait.com>'
TEMPLATE_MOD = MAIL_TEMPLATE_PLAINTEXT.replace('Sylvie Lelitre <sylvie.lelitre@agrolait.com>', user_raoul.email)
mail_new = TEMPLATE_MOD.format(to='Friendly Frogs <group+frogs@example.com>', subject='extra news', extra='', msg_id=test_msg_id)
self.mail_thread.message_process(cr, uid, None, mail_new)
new_mail = self.mail_message.browse(cr, uid, self.mail_message.search(cr, uid, [('message_id', '=', test_msg_id)])[0])
# Test: author_id set, not email_from
self.assertEqual(new_mail.author_id, user_raoul.partner_id, 'message process wrong author found')
self.assertEqual(new_mail.email_from, user_raoul.email, 'message process wrong email_from')
# Do: post a new message, with a unknown partner
test_msg_id = '<deadcafe.1337-3@smtp.agrolait.com>'
TEMPLATE_MOD = MAIL_TEMPLATE_PLAINTEXT.replace('Sylvie Lelitre <sylvie.lelitre@agrolait.com>', '_abcd_')
mail_new = TEMPLATE_MOD.format(to='Friendly Frogs <group+frogs@example.com>', subject='super news', extra='', msg_id=test_msg_id)
self.mail_thread.message_process(cr, uid, None, mail_new)
new_mail = self.mail_message.browse(cr, uid, self.mail_message.search(cr, uid, [('message_id', '=', test_msg_id)])[0])
# Test: author_id set, not email_from
self.assertFalse(new_mail.author_id, 'message process shnould not have found a partner for _abcd_ email address')
self.assertIn('_abcd_', new_mail.email_from, 'message process should set en email_from when not finding a partner_id')
def test_05_thread_parent_resolution(self):
"""Verify parent/child relationships are correctly established when processing incoming mails"""
def test_000_alias_setup(self):
""" Test basic mail.alias setup works, before trying to use them for routing """
cr, uid = self.cr, self.uid
group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id)
msg1 = group_pigs.message_post(body='My Body', subject='1')
msg2 = group_pigs.message_post(body='My Body', subject='2')
msg1, msg2 = self.mail_message.browse(cr, uid, [msg1, msg2])
self.assertTrue(msg1.message_id, "New message should have a proper message_id")
self.user_valentin_id = self.res_users.create(cr, uid,
{'name': 'Valentin Cognito', 'email': 'valentin.cognito@gmail.com', 'login': 'valentin.cognito'})
self.user_valentin = self.res_users.browse(cr, uid, self.user_valentin_id)
self.assertEquals(self.user_valentin.alias_name, self.user_valentin.login, "Login should be used as alias")
# Reply to msg1, make sure the reply is properly attached using the various reply identification mechanisms
# 1. In-Reply-To header
reply_msg = MAIL_TEMPLATE.format(to='Pretty Pigs <group+pigs@example.com>, other@gmail.com', subject='Re: 1',
extra='In-Reply-To: %s' % msg1.message_id)
self.mail_group.message_process(cr, uid, None, reply_msg)
self.user_pagan_id = self.res_users.create(cr, uid,
{'name': 'Pagan Le Marchant', 'email': 'plmarchant@gmail.com', 'login': 'plmarchant@gmail.com'})
self.user_pagan = self.res_users.browse(cr, uid, self.user_pagan_id)
self.assertEquals(self.user_pagan.alias_name, 'plmarchant', "If login is an email, the alias should keep only the local part")
# 2. References header
reply_msg2 = MAIL_TEMPLATE.format(to='Pretty Pigs <group+pigs@example.com>, other@gmail.com', subject='Re: Re: 1',
extra='References: <2233@a.com>\r\n\t<3edss_dsa@b.com> %s' % msg1.message_id)
self.mail_group.message_process(cr, uid, None, reply_msg2)
self.user_barty_id = self.res_users.create(cr, uid,
{'name': 'Bartholomew Ironside', 'email': 'barty@gmail.com', 'login': 'b4r+_#_R3wl$$'})
self.user_barty = self.res_users.browse(cr, uid, self.user_barty_id)
self.assertEquals(self.user_barty.alias_name, 'b4r+_-_r3wl-', 'Disallowed chars should be replaced by hyphens')
# 3. Subject contains [<ID>] + model passed to message+process -> only attached to group, not to mail
reply_msg3 = MAIL_TEMPLATE.format(to='Pretty Pigs <group+pigs@example.com>, other@gmail.com',
extra='', subject='Re: [%s] 1' % self.group_pigs_id)
self.mail_group.message_process(cr, uid, 'mail.group', reply_msg3)
group_pigs.refresh()
msg1.refresh()
self.assertEqual(5, len(group_pigs.message_ids), 'group should contain 5 messages')
self.assertEqual(2, len(msg1.child_ids), 'msg1 should have 2 children now')
def test_10_followers_function_field(self):
def test_00_followers_function_field(self):
""" Tests designed for the many2many function field 'follower_ids'.
We will test to perform writes using the many2many commands 0, 3, 4,
5 and 6. """
@ -236,7 +101,7 @@ class test_mail(TestMailBase):
follower_ids = set([follower.partner_id.id for follower in self.mail_followers.browse(cr, uid, fol_obj_ids)])
self.assertEqual(follower_ids, set([partner_bert_id, user_admin.partner_id.id]), 'Bert and Admin should be the followers of dummy mail.group data')
def test_11_message_followers_and_subtypes(self):
def test_05_message_followers_and_subtypes(self):
""" Tests designed for the subscriber API as well as message subtypes """
cr, uid, user_admin, user_raoul, group_pigs = self.cr, self.uid, self.user_admin, self.user_raoul, self.group_pigs
# Data: message subtypes
@ -288,7 +153,7 @@ class test_mail(TestMailBase):
self.assertTrue(subtype_data['mt_mg_nodef']['followed'], 'Admin should follow mt_mg_nodef in pigs')
self.assertTrue(subtype_data['mt_all_nodef']['followed'], 'Admin should follow mt_all_nodef in pigs')
def test_20_message_quote_context(self):
def test_10_message_quote_context(self):
""" Tests designed for message_post. """
cr, uid, user_admin, group_pigs = self.cr, self.uid, self.user_admin, self.group_pigs
@ -306,239 +171,396 @@ class test_mail(TestMailBase):
self.assertNotIn('First answer, should not be displayed', result, 'Old answer should not be in quote.')
self.assertNotIn('My answer I am propagating', result, 'Thread header content should be in quote.')
def test_21_message_post(self):
def test_20_message_post(self):
""" Tests designed for message_post. """
cr, uid, user_raoul, group_pigs = self.cr, self.uid, self.user_raoul, self.group_pigs
self.res_users.write(cr, uid, [uid], {'signature': 'Admin', 'email': 'a@a'})
# --------------------------------------------------
# Data creation
# --------------------------------------------------
# 0 - Update existing users-partners
self.res_users.write(cr, uid, [uid], {'email': 'a@a'})
self.res_users.write(cr, uid, [self.user_raoul_id], {'email': 'r@r'})
# 1 - Bert Tartopoils, with email, should receive emails for comments and emails
p_b_id = self.res_partner.create(cr, uid, {'name': 'Bert Tartopoils', 'email': 'b@b'})
# 2 - Carine Poilvache, with email, should receive emails for emails
p_c_id = self.res_partner.create(cr, uid, {'name': 'Carine Poilvache', 'email': 'c@c', 'notification_email_send': 'email'})
# 3 - Dédé Grosbedon, without email, to test email verification; should receive emails for every message
p_d_id = self.res_partner.create(cr, uid, {'name': 'Dédé Grosbedon', 'notification_email_send': 'all'})
# Subscribe Raoul, #1, #2
group_pigs.message_subscribe([self.partner_raoul_id, p_b_id, p_c_id])
# Mail data
p_d_id = self.res_partner.create(cr, uid, {'name': 'Dédé Grosbedon', 'email': 'd@d', 'notification_email_send': 'all'})
# 4 - Attachments
attach1_id = self.ir_attachment.create(cr, user_raoul.id, {
'name': 'Attach1', 'datas_fname': 'Attach1',
'datas': 'bWlncmF0aW9uIHRlc3Q=',
'res_model': 'mail.compose.message', 'res_id': 0})
attach2_id = self.ir_attachment.create(cr, user_raoul.id, {
'name': 'Attach2', 'datas_fname': 'Attach2',
'datas': 'bWlncmF0aW9uIHRlc3Q=',
'res_model': 'mail.compose.message', 'res_id': 0})
attach3_id = self.ir_attachment.create(cr, user_raoul.id, {
'name': 'Attach3', 'datas_fname': 'Attach3',
'datas': 'bWlncmF0aW9uIHRlc3Q=',
'res_model': 'mail.compose.message', 'res_id': 0})
# 5 - Mail data
_subject = 'Pigs'
_mail_subject = 'Re: %s' % (group_pigs.name)
_body1 = '<p>Pigs rules</p>'
_mail_body1 = '<p>Pigs rules</p>'
_mail_signature1 = '<p>Raoul</p>'
_mail_bodyalt1 = 'Pigs rules\n'
_mail_signaturealt1 = '\nRaoul\n'
_body2 = '<html>Pigs rules</html>'
_mail_body2 = '<div><p>Pigs rules</p></div>'
_mail_signature2 = '<p>Raoul</p>'
_mail_bodyalt2 = 'Pigs rules\n'
_mail_signaturealt2 = '\nRaoul\n'
_attachments = [('First', 'My first attachment'), ('Second', 'My second attachment')]
_body2 = '<html>Pigs rocks</html>'
_attachments = [
('List1', 'My first attachment'),
('List2', 'My second attachment')
]
# ----------------------------------------
# CASE1: post comment, body and subject specified
# ----------------------------------------
# --------------------------------------------------
# CASE1: post comment + partners + attachments
# --------------------------------------------------
# 1. Post a new comment on Pigs
# Data: set alias_domain to see emails with alias
self.registry('ir.config_parameter').set_param(self.cr, self.uid, 'mail.catchall.domain', 'schlouby.fr')
# Data: change Pigs name to test reply_to
self.mail_group.write(cr, uid, [self.group_pigs_id], {'name': '"Pigs" !ù $%-'})
# Do: subscribe Raoul
new_follower_ids = [self.partner_raoul_id]
group_pigs.message_subscribe(new_follower_ids)
# Test: group followers = Raoul + uid
group_fids = [follower.id for follower in group_pigs.message_follower_ids]
test_fids = new_follower_ids + [self.partner_admin_id]
self.assertEqual(set(test_fids), set(group_fids),
'message_subscribe: incorrect followers after subscribe')
# Do: Raoul message_post on Pigs
self._init_mock_build_email()
msg1_id = self.mail_group.message_post(cr, user_raoul.id, self.group_pigs_id, body=_body1, subject=_subject, type='comment', subtype='mt_comment')
message1 = self.mail_message.browse(cr, uid, msg1_id)
msg1_id = self.mail_group.message_post(cr, user_raoul.id, self.group_pigs_id,
body=_body1, subject=_subject, partner_ids=[p_b_id, p_c_id],
attachment_ids=[attach1_id, attach2_id], attachments=_attachments,
type='comment', subtype='mt_comment')
msg = self.mail_message.browse(cr, uid, msg1_id)
msg_message_id = msg.message_id
msg_pids = [partner.id for partner in msg.notified_partner_ids]
msg_aids = [attach.id for attach in msg.attachment_ids]
sent_emails = self._build_email_kwargs_list
# Test: mail.mail notifications have been deleted
self.assertFalse(self.mail_mail.search(cr, uid, [('mail_message_id', '=', msg1_id)]), 'mail.mail notifications should have been auto-deleted!')
# Test: mail_message: subject is _subject, body is _body1 (no formatting done)
self.assertEqual(message1.subject, _subject, 'mail.message subject incorrect')
self.assertEqual(message1.body, _body1, 'mail.message body incorrect')
# Test: sent_email: email send by server: correct subject, body, body_alternative
self.assertEqual(len(sent_emails), 2, 'sent_email number of sent emails incorrect')
for sent_email in sent_emails:
self.assertEqual(sent_email['subject'], _subject, 'sent_email subject incorrect')
self.assertIn(_mail_body1, sent_email['body'], 'sent_email body incorrect')
self.assertIn(_mail_signature1, sent_email['body'], 'sent_email body incorrect (no signature)')
self.assertIn("OpenERP", sent_email['body'], 'sent_email body incorrect (no OpenERP company)')
# the html2plaintext uses etree or beautiful soup, so the result may be slighly different
# depending if you have installed beautiful soup.
self.assertIn(_mail_bodyalt1, sent_email['body_alternative'], 'sent_email body_alternative is incorrect')
self.assertIn(_mail_signaturealt1, sent_email['body_alternative'], 'sent_email body_alternative is incorrect (no signature)')
self.assertIn("OpenERP", sent_email['body_alternative'], 'sent_email body incorrect (no OpenERP company)')
# Test: mail_message: notified_partner_ids = group followers
message_pids = set([partner.id for partner in message1.notified_partner_ids])
# Test: mail_message: subject and body not modified
self.assertEqual(_subject, msg.subject, 'message_post: mail.message subject incorrect')
self.assertEqual(_body1, msg.body, 'message_post: mail.message body incorrect')
# Test: mail_message: notified_partner_ids = group followers + partner_ids - author
test_pids = set([self.partner_admin_id, p_b_id, p_c_id])
self.assertEqual(test_pids, message_pids, 'mail.message notified partners incorrect')
self.assertEqual(test_pids, set(msg_pids), 'message_post: mail.message notified partners incorrect')
# Test: mail_message: attachments (4, attachment_ids + attachments)
test_aids = set([attach1_id, attach2_id])
msg_attach_names = set([attach.name for attach in msg.attachment_ids])
test_attach_names = set(['Attach1', 'Attach2', 'List1', 'List2'])
self.assertEqual(len(msg_aids), 4,
'message_post: mail.message wrong number of attachments')
self.assertEqual(msg_attach_names, test_attach_names,
'message_post: mail.message attachments incorrectly added')
self.assertTrue(test_aids.issubset(set(msg_aids)),
'message_post: mail.message attachments duplicated')
for attach in msg.attachment_ids:
self.assertEqual(attach.res_model, 'mail.group',
'message_post: mail.message attachments were not linked to the document')
self.assertEqual(attach.res_id, group_pigs.id,
'message_post: mail.message attachments were not linked to the document')
if 'List' in attach.name:
self.assertIn((attach.name, attach.datas.decode('base64')), _attachments,
'message_post: mail.message attachment name / data incorrect')
dl_attach = self.mail_message.download_attachment(cr, user_raoul.id, id_message=msg.id, attachment_id=attach.id)
self.assertIn((dl_attach['filename'], dl_attach['base64'].decode('base64')), _attachments,
'message_post: mail.message download_attachment is incorrect')
# Test: followers: same as before (author was already subscribed)
group_pigs.refresh()
group_fids = [follower.id for follower in group_pigs.message_follower_ids]
test_fids = new_follower_ids + [self.partner_admin_id]
self.assertEqual(set(test_fids), set(group_fids),
'message_post: wrong followers after posting')
# Test: mail_mail: notifications have been deleted
self.assertFalse(self.mail_mail.search(cr, uid, [('mail_message_id', '=', msg1_id)]),
'message_post: mail.mail notifications should have been auto-deleted!')
# Test: notifications emails: to a and b, c is email only, r is author
test_emailto = ['Administrator <a@a>', 'Bert Tartopoils <b@b>']
self.assertEqual(len(sent_emails), 2,
'message_post: notification emails wrong number of send emails')
self.assertEqual(set([m['email_to'][0] for m in sent_emails]), set(test_emailto),
'message_post: notification emails wrong recipients (email_to)')
for sent_email in sent_emails:
self.assertEqual(sent_email['email_from'], 'Raoul Grosbedon <raoul@schlouby.fr>',
'message_post: notification email wrong email_from: should use alias of sender')
self.assertEqual(len(sent_email['email_to']), 1,
'message_post: notification email sent to more than one email address instead of a precise partner')
self.assertIn(sent_email['email_to'][0], test_emailto,
'message_post: notification email email_to incorrect')
self.assertEqual(sent_email['reply_to'], '"Followers of -Pigs-" <group+pigs@schlouby.fr>',
'message_post: notification email reply_to incorrect')
self.assertEqual(_subject, sent_email['subject'],
'message_post: notification email subject incorrect')
self.assertIn(_body1, sent_email['body'],
'message_post: notification email body incorrect')
self.assertIn(user_raoul.signature, sent_email['body'],
'message_post: notification email body should contain the sender signature')
self.assertIn('Pigs rules', sent_email['body_alternative'],
'message_post: notification email body alternative should contain the body')
self.assertNotIn('<p>', sent_email['body_alternative'],
'message_post: notification email body alternative still contains html')
self.assertIn(user_raoul.signature, sent_email['body_alternative'],
'message_post: notification email body alternative should contain the sender signature')
self.assertFalse(sent_email['references'],
'message_post: references should be False when sending a message that is not a reply')
# Test: notification linked to this message = group followers = notified_partner_ids
notif_ids = self.mail_notification.search(cr, uid, [('message_id', '=', msg1_id)])
notif_pids = set([notif.partner_id.id for notif in self.mail_notification.browse(cr, uid, notif_ids)])
self.assertEqual(notif_pids, test_pids, 'mail.message notification partners incorrect')
# Test: sent_email: email_to should contain b@b, not c@c (pref email), not a@a (writer)
for sent_email in sent_emails:
self.assertTrue(set(sent_email['email_to']).issubset(set(['a@a', 'b@b'])), 'sent_email email_to is incorrect')
self.assertEqual(notif_pids, test_pids,
'message_post: mail.message created mail.notification incorrect')
# ----------------------------------------
# CASE2: post an email with attachments, parent_id, partner_ids, parent notification
# ----------------------------------------
# Data: Pigs name back to normal
self.mail_group.write(cr, uid, [self.group_pigs_id], {'name': 'Pigs'})
# 1. Post a new email comment on Pigs
# --------------------------------------------------
# CASE2: reply + parent_id + parent notification
# --------------------------------------------------
# Data: remove alias_domain to see emails with alias
param_ids = self.registry('ir.config_parameter').search(cr, uid, [('key', '=', 'mail.catchall.domain')])
self.registry('ir.config_parameter').unlink(cr, uid, param_ids)
# Do: Raoul message_post on Pigs
self._init_mock_build_email()
msg2_id = self.mail_group.message_post(cr, user_raoul.id, self.group_pigs_id, body=_body2, type='email', subtype='mt_comment',
partner_ids=[p_d_id], parent_id=msg1_id, attachments=_attachments,
context={'mail_post_autofollow': True})
message2 = self.mail_message.browse(cr, uid, msg2_id)
msg2_id = self.mail_group.message_post(cr, user_raoul.id, self.group_pigs_id,
body=_body2, type='email', subtype='mt_comment',
partner_ids=[p_d_id], parent_id=msg1_id, attachment_ids=[attach3_id],
context={'mail_post_autofollow': True})
msg = self.mail_message.browse(cr, uid, msg2_id)
msg_pids = [partner.id for partner in msg.notified_partner_ids]
msg_aids = [attach.id for attach in msg.attachment_ids]
sent_emails = self._build_email_kwargs_list
self.assertFalse(self.mail_mail.search(cr, uid, [('mail_message_id', '=', msg2_id)]), 'mail.mail notifications should have been auto-deleted!')
# Test: mail_message: subject is False, body is _body2 (no formatting done), parent_id is msg_id
self.assertEqual(message2.subject, False, 'mail.message subject incorrect')
self.assertEqual(message2.body, html_sanitize(_body2), 'mail.message body incorrect')
self.assertEqual(message2.parent_id.id, msg1_id, 'mail.message parent_id incorrect')
# Test: sent_email: email send by server: correct automatic subject, body, body_alternative
self.assertEqual(len(sent_emails), 3, 'sent_email number of sent emails incorrect')
for sent_email in sent_emails:
self.assertEqual(sent_email['subject'], _mail_subject, 'sent_email subject incorrect')
self.assertIn(_mail_body2, sent_email['body'], 'sent_email body incorrect')
self.assertIn(_mail_signature2, sent_email['body'], 'sent_email body incorrect (no signature)')
self.assertIn("OpenERP", sent_email['body'], 'sent_email body incorrect (no OpenERP company)')
# body_alternative
self.assertIn(_mail_bodyalt2, sent_email['body_alternative'], 'sent_email body_alternative is incorrect')
self.assertIn(_mail_signaturealt2, sent_email['body_alternative'], 'sent_email body_alternative is incorrect (no signature)')
self.assertIn("OpenERP", sent_email['body'], 'sent_email body incorrect (no OpenERP company)')
# Test: mail_message: subject is False, body, parent_id is msg_id
self.assertEqual(msg.subject, False, 'message_post: mail.message subject incorrect')
self.assertEqual(msg.body, html_sanitize(_body2), 'message_post: mail.message body incorrect')
self.assertEqual(msg.parent_id.id, msg1_id, 'message_post: mail.message parent_id incorrect')
# Test: mail_message: notified_partner_ids = group followers
message_pids = set([partner.id for partner in message2.notified_partner_ids])
test_pids = set([self.partner_admin_id, p_b_id, p_c_id, p_d_id])
self.assertEqual(message_pids, test_pids, 'mail.message partners incorrect')
# Test: notifications linked to this message = group followers = notified_partner_ids
test_pids = [self.partner_admin_id, p_d_id]
self.assertEqual(set(test_pids), set(msg_pids), 'message_post: mail.message partners incorrect')
# Test: mail_message: notifications linked to this message = group followers = notified_partner_ids
notif_ids = self.mail_notification.search(cr, uid, [('message_id', '=', msg2_id)])
notif_pids = set([notif.partner_id.id for notif in self.mail_notification.browse(cr, uid, notif_ids)])
self.assertEqual(notif_pids, test_pids, 'mail.message notification partners incorrect')
# Test: sent_email: email_to should contain b@b, c@c, not a@a (writer)
notif_pids = [notif.partner_id.id for notif in self.mail_notification.browse(cr, uid, notif_ids)]
self.assertEqual(set(test_pids), set(notif_pids), 'message_post: mail.message notification partners incorrect')
# Test: mail_mail: notifications deleted
self.assertFalse(self.mail_mail.search(cr, uid, [('mail_message_id', '=', msg2_id)]), 'mail.mail notifications should have been auto-deleted!')
# Test: emails send by server (to a, b, c, d)
test_emailto = [u'Administrator <a@a>', u'Bert Tartopoils <b@b>', u'Carine Poilvache <c@c>', u'D\xe9d\xe9 Grosbedon <d@d>']
# self.assertEqual(len(sent_emails), 3, 'sent_email number of sent emails incorrect')
for sent_email in sent_emails:
self.assertTrue(set(sent_email['email_to']).issubset(set(['a@a', 'b@b', 'c@c'])), 'sent_email email_to incorrect')
# Test: attachments
for attach in message2.attachment_ids:
self.assertEqual(attach.res_model, 'mail.group', 'mail.message attachment res_model incorrect')
self.assertEqual(attach.res_id, self.group_pigs_id, 'mail.message attachment res_id incorrect')
self.assertIn((attach.name, attach.datas.decode('base64')), _attachments,
'mail.message attachment name / data incorrect')
# Test: download attachments
for attach in message2.attachment_ids:
dl_attach = self.mail_message.download_attachment(cr, user_raoul.id, id_message=message2.id, attachment_id=attach.id)
self.assertIn((dl_attach['filename'], dl_attach['base64'].decode('base64')), _attachments, 'mail.message download_attachment is incorrect')
self.assertEqual(sent_email['email_from'], 'Raoul Grosbedon <r@r>',
'message_post: notification email wrong email_from: should use email of sender when no alias domain set')
self.assertEqual(len(sent_email['email_to']), 1,
'message_post: notification email sent to more than one email address instead of a precise partner')
self.assertIn(sent_email['email_to'][0], test_emailto,
'message_post: notification email email_to incorrect')
self.assertEqual(sent_email['reply_to'], '"Followers of Pigs" <r@r>',
'message_post: notification email reply_to incorrect: should name Followers of Pigs, and have raoul email')
self.assertEqual(_mail_subject, sent_email['subject'],
'message_post: notification email subject incorrect')
self.assertIn(html_sanitize(_body2), sent_email['body'],
'message_post: notification email does not contain the body')
self.assertIn(user_raoul.signature, sent_email['body'],
'message_post: notification email body should contain the sender signature')
self.assertIn('Pigs rocks', sent_email['body_alternative'],
'message_post: notification email body alternative should contain the body')
self.assertNotIn('<p>', sent_email['body_alternative'],
'message_post: notification email body alternative still contains html')
self.assertIn(user_raoul.signature, sent_email['body_alternative'],
'message_post: notification email body alternative should contain the sender signature')
self.assertIn(msg_message_id, sent_email['references'],
'message_post: notification email references lacks parent message message_id')
# Test: attachments + download
for attach in msg.attachment_ids:
self.assertEqual(attach.res_model, 'mail.group',
'message_post: mail.message attachment res_model incorrect')
self.assertEqual(attach.res_id, self.group_pigs_id,
'message_post: mail.message attachment res_id incorrect')
# 2. Dédé has been notified -> should also have been notified of the parent message
message1.refresh()
message_pids = set([partner.id for partner in message1.notified_partner_ids])
# Test: Dédé has been notified -> should also have been notified of the parent message
msg = self.mail_message.browse(cr, uid, msg1_id)
msg_pids = set([partner.id for partner in msg.notified_partner_ids])
test_pids = set([self.partner_admin_id, p_b_id, p_c_id, p_d_id])
self.assertEqual(test_pids, message_pids, 'mail.message parent notification not created')
self.assertEqual(test_pids, msg_pids, 'message_post: mail.message parent notification not created')
# 3. Reply to the last message, check that its parent will be the first message
# Do: reply to last message
msg3_id = self.mail_group.message_post(cr, user_raoul.id, self.group_pigs_id, body='Test', parent_id=msg2_id)
message = self.mail_message.browse(cr, uid, msg3_id)
self.assertEqual(message.parent_id.id, msg1_id, 'message_post did not flatten the thread structure')
msg = self.mail_message.browse(cr, uid, msg3_id)
# Test: check that its parent will be the first message
self.assertEqual(msg.parent_id.id, msg1_id, 'message_post did not flatten the thread structure')
def test_25_message_compose_wizard(self):
""" Tests designed for the mail.compose.message wizard. """
cr, uid, user_admin, group_pigs = self.cr, self.uid, self.user_admin, self.group_pigs
cr, uid, user_raoul, group_pigs = self.cr, self.uid, self.user_raoul, self.group_pigs
mail_compose = self.registry('mail.compose.message')
self.res_users.write(cr, uid, [uid], {'signature': 'Admin', 'email': 'a@a'})
group_bird_id = self.mail_group.create(cr, uid, {'name': 'Bird', 'description': 'Bird resistance'}, {'mail_create_nolog': True})
group_bird = self.mail_group.browse(cr, uid, group_bird_id)
# Mail data
# --------------------------------------------------
# Data creation
# --------------------------------------------------
# 0 - Update existing users-partners
self.res_users.write(cr, uid, [uid], {'email': 'a@a'})
self.res_users.write(cr, uid, [self.user_raoul_id], {'email': 'r@r'})
# 1 - Bert Tartopoils, with email, should receive emails for comments and emails
p_b_id = self.res_partner.create(cr, uid, {'name': 'Bert Tartopoils', 'email': 'b@b'})
# 2 - Carine Poilvache, with email, should receive emails for emails
p_c_id = self.res_partner.create(cr, uid, {'name': 'Carine Poilvache', 'email': 'c@c', 'notification_email_send': 'email'})
# 3 - Dédé Grosbedon, without email, to test email verification; should receive emails for every message
p_d_id = self.res_partner.create(cr, uid, {'name': 'Dédé Grosbedon', 'email': 'd@d', 'notification_email_send': 'all'})
# 4 - Create a Bird mail.group, that will be used to test mass mailing
group_bird_id = self.mail_group.create(cr, uid,
{
'name': 'Bird',
'description': 'Bird resistance',
}, context={'mail_create_nolog': True})
group_bird = self.mail_group.browse(cr, uid, group_bird_id)
# 5 - Mail data
_subject = 'Pigs'
_body = 'Pigs <b>rule</b>'
_reply_subject = 'Re: Pigs'
_reply_subject = 'Re: %s' % _subject
_attachments = [
{'name': 'First', 'datas_fname': 'first.txt', 'datas': 'My first attachment'.encode('base64')},
{'name': 'Second', 'datas_fname': 'second.txt', 'datas': 'My second attachment'.encode('base64')}
]
_attachments_test = [('first.txt', 'My first attachment'), ('second.txt', 'My second attachment')]
# 1 - Bert Tartopoils, with email, should receive emails for comments and emails
p_b_id = self.res_partner.create(cr, uid, {'name': 'Bert Tartopoils', 'email': 'b@b'})
# 2 - Carine Poilvache, with email, should never receive emails
p_c_id = self.res_partner.create(cr, uid, {'name': 'Carine Poilvache', 'email': 'c@c', 'notification_email_send': 'email'})
# 3 - Dédé Grosbedon, without email, to test email verification; should receive emails for every message
p_d_id = self.res_partner.create(cr, uid, {'name': 'Dédé Grosbedon', 'email': 'd@d', 'notification_email_send': 'all'})
# Subscribe #1
# 6 - Subscribe Bert to Pigs
group_pigs.message_subscribe([p_b_id])
# ----------------------------------------
# CASE1: comment on group_pigs
# ----------------------------------------
# --------------------------------------------------
# CASE1: wizard + partners + context keys
# --------------------------------------------------
# 1. Comment group_pigs with body_text and subject
compose_id = mail_compose.create(cr, uid,
{'subject': _subject, 'body': _body, 'partner_ids': [(4, p_c_id), (4, p_d_id)]},
{'default_composition_mode': 'comment', 'default_model': 'mail.group', 'default_res_id': self.group_pigs_id,
'default_content_subtype': 'plaintext'})
# Do: Raoul wizard-composes on Pigs with auto-follow for partners, not for author
compose_id = mail_compose.create(cr, user_raoul.id,
{
'subject': _subject,
'body': _body,
'partner_ids': [(4, p_c_id), (4, p_d_id)],
}, context={
'default_composition_mode': 'comment',
'default_model': 'mail.group',
'default_res_id': self.group_pigs_id,
})
compose = mail_compose.browse(cr, uid, compose_id)
# Test: mail.compose.message: composition_mode, model, res_id
self.assertEqual(compose.composition_mode, 'comment', 'mail.compose.message incorrect composition_mode')
self.assertEqual(compose.model, 'mail.group', 'mail.compose.message incorrect model')
self.assertEqual(compose.res_id, self.group_pigs_id, 'mail.compose.message incorrect res_id')
# 2. Post the comment, get created message
mail_compose.send_mail(cr, uid, [compose_id], {'mail_post_autofollow': True})
# Test: mail.compose.message: composition_mode, model, res_id
self.assertEqual(compose.composition_mode, 'comment', 'compose wizard: mail.compose.message incorrect composition_mode')
self.assertEqual(compose.model, 'mail.group', 'compose wizard: mail.compose.message incorrect model')
self.assertEqual(compose.res_id, self.group_pigs_id, 'compose wizard: mail.compose.message incorrect res_id')
# Do: Post the comment
mail_compose.send_mail(cr, user_raoul.id, [compose_id], {'mail_post_autofollow': True, 'mail_create_nosubscribe': True})
group_pigs.refresh()
message = group_pigs.message_ids[0]
# Test: mail.message: subject, body inside pre
self.assertEqual(message.subject, _subject, 'mail.message incorrect subject')
self.assertEqual(message.body, '<p>%s</p>' % _body, 'mail.message incorrect body')
# Test: mail.message: notified_partner_ids = entries in mail.notification: group_pigs fans (a, b) + mail.compose.message partner_ids (c, d)
# Test: mail.group: followers (c and d added by auto follow key; raoul not added by nosubscribe key)
pigs_pids = [p.id for p in group_pigs.message_follower_ids]
test_pids = [self.partner_admin_id, p_b_id, p_c_id, p_d_id]
self.assertEqual(set(pigs_pids), set(test_pids),
'compose wizard: mail_post_autofollow and mail_create_nosubscribe context keys not correctly taken into account')
# Test: mail.message: subject, body inside p
self.assertEqual(message.subject, _subject, 'compose wizard: mail.message incorrect subject')
self.assertEqual(message.body, '<p>%s</p>' % _body, 'compose wizard: mail.message incorrect body')
# Test: mail.message: notified_partner_ids = admin + bert (followers) + c + d (recipients)
msg_pids = [partner.id for partner in message.notified_partner_ids]
test_pids = [p_b_id, p_c_id, p_d_id]
notif_ids = self.mail_notification.search(cr, uid, [('message_id', '=', message.id)])
self.assertEqual(len(notif_ids), 3, 'mail.message: too much notifications created')
self.assertEqual(set(msg_pids), set(test_pids), 'mail.message notified_partner_ids incorrect')
test_pids = [self.partner_admin_id, p_b_id, p_c_id, p_d_id]
self.assertEqual(set(msg_pids), set(test_pids),
'compose wizard: mail.message notified_partner_ids incorrect')
# ----------------------------------------
# CASE2: reply to last comment with attachments
# ----------------------------------------
# --------------------------------------------------
# CASE2: reply + attachments
# --------------------------------------------------
# 1. Update last comment subject, reply with attachments
message.write({'subject': _subject})
compose_id = mail_compose.create(cr, uid,
{'attachment_ids': [(0, 0, _attachments[0]), (0, 0, _attachments[1])]},
{'default_composition_mode': 'reply', 'default_model': 'mail.thread', 'default_res_id': self.group_pigs_id, 'default_parent_id': message.id})
# Do: Reply with attachments
compose_id = mail_compose.create(cr, user_raoul.id,
{
'attachment_ids': [(0, 0, _attachments[0]), (0, 0, _attachments[1])]
}, context={
'default_composition_mode': 'reply',
'default_model': 'mail.thread',
'default_res_id': self.group_pigs_id,
'default_parent_id': message.id
})
compose = mail_compose.browse(cr, uid, compose_id)
# Test: model, res_id, parent_id
self.assertEqual(compose.model, 'mail.group', 'mail.compose.message incorrect model')
self.assertEqual(compose.res_id, self.group_pigs_id, 'mail.compose.message incorrect res_id')
self.assertEqual(compose.parent_id.id, message.id, 'mail.compose.message incorrect parent_id')
# Test: mail.message: subject as Re:.., body in html, parent_id
self.assertEqual(compose.subject, _reply_subject, 'mail.message incorrect subject')
# self.assertIn('Administrator wrote:<blockquote><pre>Pigs rules</pre></blockquote>', compose.body, 'mail.message body is incorrect')
self.assertEqual(compose.parent_id and compose.parent_id.id, message.id, 'mail.message parent_id incorrect')
# Test: mail.message: attachments
# Test: mail.compose.message: model, res_id, parent_id
self.assertEqual(compose.model, 'mail.group', 'compose wizard: mail.compose.message incorrect model')
self.assertEqual(compose.res_id, self.group_pigs_id, 'compose wizard: mail.compose.message incorrect res_id')
self.assertEqual(compose.parent_id.id, message.id, 'compose wizard: mail.compose.message incorrect parent_id')
# Test: mail.compose.message: subject as Re:.., body, parent_id
self.assertEqual(compose.subject, _reply_subject, 'compose wizard: mail.compose.message incorrect subject')
self.assertFalse(compose.body, 'compose wizard: mail.compose.message body should not contain parent message body')
self.assertEqual(compose.parent_id and compose.parent_id.id, message.id, 'compose wizard: mail.compose.message parent_id incorrect')
# Test: mail.compose.message: attachments
for attach in compose.attachment_ids:
self.assertIn((attach.datas_fname, attach.datas.decode('base64')), _attachments_test, 'mail.message attachment name / data incorrect')
self.assertIn((attach.datas_fname, attach.datas.decode('base64')), _attachments_test,
'compose wizard: mail.message attachment name / data incorrect')
# ----------------------------------------
# --------------------------------------------------
# CASE3: mass_mail on Pigs and Bird
# ----------------------------------------
# --------------------------------------------------
# 1. mass_mail on pigs and bird
compose_id = mail_compose.create(cr, uid,
{'subject': _subject, 'body': '${object.description}'},
{'default_composition_mode': 'mass_mail', 'default_model': 'mail.group', 'default_res_id': False, 'default_notify': True,
'active_ids': [self.group_pigs_id, group_bird_id]})
# Do: Compose in mass_mail_mode on pigs and bird
compose_id = mail_compose.create(cr, user_raoul.id,
{
'subject': _subject,
'body': '${object.description}',
'partner_ids': [(4, p_c_id), (4, p_d_id)],
}, context={
'default_composition_mode': 'mass_mail',
'default_model': 'mail.group',
'default_res_id': False,
'active_ids': [self.group_pigs_id, group_bird_id],
})
compose = mail_compose.browse(cr, uid, compose_id)
# 2. Post the comment, get created message for each group
mail_compose.send_mail(cr, uid, [compose_id],
context={'default_res_id': -1, 'active_ids': [self.group_pigs_id, group_bird_id]})
# D: Post the comment, get created message for each group
mail_compose.send_mail(cr, user_raoul.id, [compose_id], context={
'default_res_id': -1,
'active_ids': [self.group_pigs_id, group_bird_id]
})
group_pigs.refresh()
group_bird.refresh()
message1 = group_pigs.message_ids[0]
message2 = group_bird.message_ids[0]
# Test: Pigs and Bird did receive their message
test_msg_ids = self.mail_message.search(cr, uid, [], limit=2)
self.assertIn(message1.id, test_msg_ids, 'Pigs did not receive its mass mailing message')
self.assertIn(message2.id, test_msg_ids, 'Bird did not receive its mass mailing message')
# Test: mail.message: subject, body
self.assertEqual(message1.subject, _subject, 'mail.message subject incorrect')
self.assertEqual(message1.body, '<p>%s</p>' % group_pigs.description, 'mail.message body incorrect')
self.assertEqual(message2.subject, _subject, 'mail.message subject incorrect')
self.assertEqual(message2.body, '<p>%s</p>' % group_bird.description, 'mail.message body incorrect')
self.assertIn(message1.id, test_msg_ids, 'compose wizard: Pigs did not receive its mass mailing message')
self.assertIn(message2.id, test_msg_ids, 'compose wizard: Bird did not receive its mass mailing message')
# Test: mail.message: subject, body, subtype, notified partners (nobody + specific recipients)
self.assertEqual(message1.subject, _subject,
'compose wizard: message_post: mail.message in mass mail subject incorrect')
self.assertEqual(message1.body, '<p>%s</p>' % group_pigs.description,
'compose wizard: message_post: mail.message in mass mail body incorrect')
self.assertEqual(set([p.id for p in message1.notified_partner_ids]), set([p_c_id, p_d_id]),
'compose wizard: message_post: mail.message in mass mail incorrect notified partners')
self.assertEqual(message2.subject, _subject,
'compose wizard: message_post: mail.message in mass mail subject incorrect')
self.assertEqual(message2.body, '<p>%s</p>' % group_bird.description,
'compose wizard: message_post: mail.message in mass mail body incorrect')
self.assertEqual(set([p.id for p in message2.notified_partner_ids]), set([p_c_id, p_d_id]),
'compose wizard: message_post: mail.message in mass mail incorrect notified partners')
# Test: mail.group followers: author not added as follower in mass mail mode
pigs_pids = [p.id for p in group_pigs.message_follower_ids]
test_pids = [self.partner_admin_id, p_b_id, p_c_id, p_d_id]
self.assertEqual(set(pigs_pids), set(test_pids),
'compose wizard: mail_post_autofollow and mail_create_nosubscribe context keys not correctly taken into account')
bird_pids = [p.id for p in group_bird.message_follower_ids]
test_pids = [self.partner_admin_id]
self.assertEqual(set(bird_pids), set(test_pids),
'compose wizard: mail_post_autofollow and mail_create_nosubscribe context keys not correctly taken into account')
def test_30_needaction(self):
""" Tests for mail.message needaction. """

View File

@ -0,0 +1,330 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Business Applications
# Copyright (c) 2012-TODAY OpenERP S.A. <http://openerp.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.addons.mail.tests.test_mail_base import TestMailBase
MAIL_TEMPLATE = """Return-Path: <whatever-2a840@postmaster.twitter.com>
To: {to}
Received: by mail1.openerp.com (Postfix, from userid 10002)
id 5DF9ABFB2A; Fri, 10 Aug 2012 16:16:39 +0200 (CEST)
From: {email_from}
Subject: {subject}
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_Part_4200734_24778174.1344608186754"
Date: Fri, 10 Aug 2012 14:16:26 +0000
Message-ID: {msg_id}
{extra}
------=_Part_4200734_24778174.1344608186754
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Please call me as soon as possible this afternoon!
--
Sylvie
------=_Part_4200734_24778174.1344608186754
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>=20
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8" />
</head>=20
<body style=3D"margin: 0; padding: 0; background: #ffffff;-webkit-text-size-adjust: 100%;">=20
<p>Please call me as soon as possible this afternoon!</p>
<p>--<br/>
Sylvie
<p>
</body>
</html>
------=_Part_4200734_24778174.1344608186754--
"""
MAIL_TEMPLATE_PLAINTEXT = """Return-Path: <whatever-2a840@postmaster.twitter.com>
To: {to}
Received: by mail1.openerp.com (Postfix, from userid 10002)
id 5DF9ABFB2A; Fri, 10 Aug 2012 16:16:39 +0200 (CEST)
From: Sylvie Lelitre <sylvie.lelitre@agrolait.com>
Subject: {subject}
MIME-Version: 1.0
Content-Type: text/plain
Date: Fri, 10 Aug 2012 14:16:26 +0000
Message-ID: {msg_id}
{extra}
Please call me as soon as possible this afternoon!
--
Sylvie
"""
class TestMailgateway(TestMailBase):
def test_00_message_process(self):
""" Testing incoming emails processing. """
cr, uid, user_raoul = self.cr, self.uid, self.user_raoul
def format_and_process(template, to='groups@example.com, other@gmail.com', subject='Frogs',
extra='', email_from='Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>',
msg_id='<1198923581.41972151344608186760.JavaMail@agrolait.com>',
model=None):
self.assertEqual(self.mail_group.search(cr, uid, [('name', '=', subject)]), [])
mail = template.format(to=to, subject=subject, extra=extra, email_from=email_from, msg_id=msg_id)
self.mail_thread.message_process(cr, uid, model, mail)
return self.mail_group.search(cr, uid, [('name', '=', subject)])
# --------------------------------------------------
# Data creation
# --------------------------------------------------
# groups@.. will cause the creation of new mail groups
self.mail_group_model_id = self.ir_model.search(cr, uid, [('model', '=', 'mail.group')])[0]
alias_id = self.mail_alias.create(cr, uid, {
'alias_name': 'groups',
'alias_user_id': False,
'alias_model_id': self.mail_group_model_id})
# --------------------------------------------------
# Test1: new record creation
# --------------------------------------------------
# Do: incoming mail from an unknown partner on an alias creates a new mail_group "frogs"
self._init_mock_build_email()
frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other@gmail.com')
sent_emails = self._build_email_kwargs_list
# Test: one group created by mailgateway administrator
self.assertTrue(len(frog_groups) == 1)
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: one message that is the incoming email
self.assertEqual(len(frog_group.message_ids), 1,
'message_process: newly created group should have the incoming email in message_ids')
msg = frog_group.message_ids[0]
self.assertEqual('Frogs', msg.subject,
'message_process: newly created group should have the incoming email as first message')
self.assertIn('Please call me as soon as possible this afternoon!', msg.body,
'message_process: newly created group should have the incoming email as first message')
self.assertEqual('email', msg.type,
'message_process: newly created group should have an email as first message')
self.assertEqual('Discussions', msg.subtype_id.name,
'message_process: newly created group should not have a log first message but an email')
# Test: message: unknown email address -> message has email_from, not author_id
self.assertFalse(msg.author_id,
'message_process: message on created group should not have an author_id')
self.assertIn('test.sylvie.lelitre@agrolait.com', msg.email_from,
'message_process: message on created group should have an email_from')
# Test: followers: nobody
self.assertEqual(len(frog_group.message_follower_ids), 0, 'message_process: newly create group should not have any follower')
# Test: sent emails: no-one
self.assertEqual(len(sent_emails), 0,
'message_process: should create emails without any follower added')
# Data: unlink group
frog_group.unlink()
# Do: incoming email from a known partner on an alias with known recipients, alias is owned by user that can create a group
self.mail_alias.write(cr, uid, [alias_id], {'alias_user_id': self.user_raoul_id})
p1id = self.res_partner.create(cr, uid, {'name': 'Sylvie Lelitre', 'email': 'test.sylvie.lelitre@agrolait.com'})
p2id = self.res_partner.create(cr, uid, {'name': 'Other Poilvache', 'email': 'other@gmail.com'})
self._init_mock_build_email()
frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other@gmail.com')
sent_emails = self._build_email_kwargs_list
# Test: one group created by raoul
self.assertTrue(len(frog_groups) == 1)
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: one message that is the incoming email
self.assertEqual(len(frog_group.message_ids), 1,
'message_process: newly created group should have the incoming email in message_ids')
msg = frog_group.message_ids[0]
# Test: message: unknown email address -> message has email_from, not author_id
self.assertEqual(p1id, msg.author_id.id,
'message_process: message on created group should have Sylvie as author_id')
self.assertIn('Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>', msg.email_from,
'message_process: message on created group should have have an email_from')
# Test: author (not recipient and not raoul (as alias owner)) added as follower
frog_follower_ids = set([p.id for p in frog_group.message_follower_ids])
self.assertEqual(frog_follower_ids, set([p1id]),
'message_process: newly created group should have 1 follower (author, not creator, not recipients)')
# Test: sent emails: no-one, no bounce effet
self.assertEqual(len(sent_emails), 0,
'message_process: should not bounce incoming emails')
# Data: unlink group
frog_group.unlink()
# Do: incoming email from a known partner that is also an user that can create a mail.group
self.res_users.create(cr, uid, {'partner_id': p1id, 'login': 'sylvie', 'groups_id': [(6, 0, [self.group_employee_id])]})
frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other@gmail.com')
# Test: one group created by Sylvie
self.assertTrue(len(frog_groups) == 1)
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: one message that is the incoming email
self.assertEqual(len(frog_group.message_ids), 1,
'message_process: newly created group should have the incoming email in message_ids')
# Test: author (and not recipient) added as follower
frog_follower_ids = set([p.id for p in frog_group.message_follower_ids])
self.assertEqual(frog_follower_ids, set([p1id]),
'message_process: newly created group should have 1 follower (author, not creator, not recipients)')
# Test: sent emails: no-one, no bounce effet
self.assertEqual(len(sent_emails), 0,
'message_process: should not bounce incoming emails')
# --------------------------------------------------
# Test2: discussion update
# --------------------------------------------------
# Do: even with a wrong destination, a reply should end up in the correct thread
frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other@gmail.com',
to='erroneous@example.com>', subject='Re: news',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
# Test: no group 'Re: news' created, still only 1 Frogs group
self.assertEqual(len(frog_groups), 0,
'message_process: reply on Frogs should not have created a new group with new subject')
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
self.assertEqual(len(frog_groups), 1,
'message_process: reply on Frogs should not have created a duplicate group with old subject')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: one new message
self.assertTrue(len(frog_group.message_ids) == 2, 'message_process: group should contain 2 messages after reply')
# Test: author (and not recipient) added as follower
frog_follower_ids = set([p.id for p in frog_group.message_follower_ids])
self.assertEqual(frog_follower_ids, set([p1id, p2id]),
'message_process: after reply, group should have 2 followers')
# --------------------------------------------------
# Test3: email_from and partner finding
# --------------------------------------------------
# Data: extra partner with Raoul's email -> test the 'better author finding'
extra_partner_id = self.res_partner.create(cr, uid, {'name': 'A-Raoul', 'email': 'test_raoul@email.com'})
# extra_user_id = self.res_users.create(cr, uid, {'name': 'B-Raoul', 'email': self.user_raoul.email})
# extra_user_pid = self.res_users.browse(cr, uid, extra_user_id).partner_id.id
# Do: post a new message, with a known partner -> duplicate emails -> partner
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
to='erroneous@example.com>', subject='Re: news (2)',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: author is A-Raoul (only existing)
self.assertEqual(frog_group.message_ids[0].author_id.id, extra_partner_id,
'message_process: email_from -> author_id wrong')
# Do: post a new message, with a known partner -> duplicate emails -> user
frog_group.message_unsubscribe([extra_partner_id])
raoul_email = self.user_raoul.email
self.res_users.write(cr, uid, self.user_raoul_id, {'email': 'test_raoul@email.com'})
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
to='erroneous@example.com>', subject='Re: news (3)',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: author is Raoul (user), not A-Raoul
self.assertEqual(frog_group.message_ids[0].author_id.id, self.partner_raoul_id,
'message_process: email_from -> author_id wrong')
# Do: post a new message, with a known partner -> duplicate emails -> partner because is follower
frog_group.message_unsubscribe([self.partner_raoul_id])
frog_group.message_subscribe([extra_partner_id])
raoul_email = self.user_raoul.email
self.res_users.write(cr, uid, self.user_raoul_id, {'email': 'test_raoul@email.com'})
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
to='erroneous@example.com>', subject='Re: news (3)',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: author is Raoul (user), not A-Raoul
self.assertEqual(frog_group.message_ids[0].author_id.id, extra_partner_id,
'message_process: email_from -> author_id wrong')
self.res_users.write(cr, uid, self.user_raoul_id, {'email': raoul_email})
# --------------------------------------------------
# Test4: misc gateway features
# --------------------------------------------------
# Do: incoming email with model that does not accepts incoming emails must raise
self.assertRaises(AssertionError,
format_and_process,
MAIL_TEMPLATE, to='noone@example.com', subject='spam', extra='', model='res.country')
# Do: incoming email without model and without alias must raise
self.assertRaises(AssertionError,
format_and_process,
MAIL_TEMPLATE, to='noone@example.com', subject='spam', extra='')
# Do: incoming email with model that accepting incoming emails as fallback
frog_groups = format_and_process(MAIL_TEMPLATE, to='noone@example.com', subject='Spammy', extra='', model='mail.group')
self.assertEqual(len(frog_groups), 1,
'message_process: erroneous email but with a fallback model should have created a new mail.group')
# Do: incoming email in plaintext should be stored as html
frog_groups = format_and_process(MAIL_TEMPLATE_PLAINTEXT, to='groups@example.com', subject='Frogs Return', extra='', msg_id='<deadcafe.1337@smtp.agrolait.com>')
# Test: one group created with one message
self.assertTrue(len(frog_groups) == 1)
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
msg = frog_group.message_ids[0]
# Test: plain text content should be wrapped and stored as html
self.assertEqual(msg.body, '<pre>\nPlease call me as soon as possible this afternoon!\n\n--\nSylvie\n</pre>',
'message_process: plaintext incoming email incorrectly parsed')
def test_10_thread_parent_resolution(self):
""" Testing parent/child relationships are correctly established when processing incoming mails """
cr, uid = self.cr, self.uid
def format(template, to='Pretty Pigs <group+pigs@example.com>, other@gmail.com', subject='Re: 1',
extra='', email_from='Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>',
msg_id='<1198923581.41972151344608186760.JavaMail@agrolait.com>'):
return template.format(to=to, subject=subject, extra=extra, email_from=email_from, msg_id=msg_id)
group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id)
msg1 = group_pigs.message_post(body='My Body', subject='1')
msg2 = group_pigs.message_post(body='My Body', subject='2')
msg1, msg2 = self.mail_message.browse(cr, uid, [msg1, msg2])
self.assertTrue(msg1.message_id, "message_process: new message should have a proper message_id")
# Reply to msg1, make sure the reply is properly attached using the various reply identification mechanisms
# 0. Direct alias match
reply_msg1 = format(MAIL_TEMPLATE, to='Pretty Pigs <group+pigs@example.com>', extra='In-Reply-To: %s' % msg1.message_id)
self.mail_group.message_process(cr, uid, None, reply_msg1)
# 1. In-Reply-To header
reply_msg2 = format(MAIL_TEMPLATE, to='erroneous@example.com', extra='In-Reply-To: %s' % msg1.message_id)
self.mail_group.message_process(cr, uid, None, reply_msg2)
# 2. References header
reply_msg3 = format(MAIL_TEMPLATE, to='erroneous@example.com', extra='References: <2233@a.com>\r\n\t<3edss_dsa@b.com> %s' % msg1.message_id)
self.mail_group.message_process(cr, uid, None, reply_msg3)
# 3. Subject contains [<ID>] + model passed to message+process -> only attached to group, but not to mail (not in msg1.child_ids)
reply_msg4 = format(MAIL_TEMPLATE, to='erroneous@example.com', extra='', subject='Re: [%s] 1' % self.group_pigs_id)
self.mail_group.message_process(cr, uid, 'mail.group', reply_msg4)
group_pigs.refresh()
msg1.refresh()
self.assertEqual(6, len(group_pigs.message_ids), 'message_process: group should contain 6 messages')
self.assertEqual(3, len(msg1.child_ids), 'message_process: msg1 should have 3 children now')
def test_20_private_discussion(self):
""" Testing private discussion between partners. """
pass

View File

@ -5,7 +5,7 @@ import sys
import urllib
import urllib2
from openerp import pooler
import openerp
from openerp import release
from openerp.osv import fields, osv
from openerp.tools.translate import _
@ -26,7 +26,7 @@ def get_sys_logs(self, cr, uid):
"""
Utility method to send a publisher warranty get logs messages.
"""
pool = pooler.get_pool(cr.dbname)
pool = openerp.registry(cr.dbname)
dbuuid = pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid')
db_create_date = pool.get('ir.config_parameter').get_param(cr, uid, 'database.create_date')

View File

@ -23,6 +23,7 @@ import base64
import re
from openerp import tools
from openerp import SUPERUSER_ID
from openerp.osv import osv
from openerp.osv import fields
from openerp.tools.safe_eval import safe_eval as eval
@ -136,6 +137,29 @@ class mail_compose_message(osv.TransientModel):
'same_thread': lambda self, cr, uid, ctx={}: True,
}
def check_access_rule(self, cr, uid, ids, operation, context=None):
""" Access rules of mail.compose.message:
- create: if
- model, no res_id, I create a message in mass mail mode
- then: fall back on mail.message acces rules
"""
if isinstance(ids, (int, long)):
ids = [ids]
# Author condition (CREATE (mass_mail))
if operation == 'create' and uid != SUPERUSER_ID:
# read mail_compose_message.ids to have their values
message_values = {}
cr.execute('SELECT DISTINCT id, model, res_id FROM "%s" WHERE id = ANY (%%s) AND res_id = 0' % self._table, (ids,))
for id, rmod, rid in cr.fetchall():
message_values[id] = {'model': rmod, 'res_id': rid}
# remove from the set to check the ids that mail_compose_message accepts
author_ids = [mid for mid, message in message_values.iteritems()
if message.get('model') and not message.get('res_id')]
ids = list(set(ids) - set(author_ids))
return super(mail_compose_message, self).check_access_rule(cr, uid, ids, operation, context=context)
def _notify(self, cr, uid, newid, context=None):
""" Override specific notify method of mail.message, because we do
not want that feature in the wizard. """
@ -244,8 +268,12 @@ class mail_compose_message(osv.TransientModel):
self.pool.get('mail.mail').create(cr, uid, post_values, context=context)
else:
subtype = 'mail.mt_comment'
if is_log or (mass_mail_mode and not wizard.notify):
if is_log: # log a note: subtype is False
subtype = False
elif mass_mail_mode: # mass mail: is a log pushed to recipients unless specified, author not added
if not wizard.notify:
subtype = False
context = dict(context, mail_create_nosubscribe=True) # add context key to avoid subscribing the author
msg_id = active_model_pool.message_post(cr, uid, [res_id], type='comment', subtype=subtype, context=context, **post_values)
# mass_mailing, post without notify: notify specific partners
if mass_mail_mode and not wizard.notify and post_values['partner_ids']:

View File

@ -31,7 +31,6 @@
I'm Opening that Invoice which is created for "Seagate".
-
!python {model: res.partner}: |
from openerp.tools.translate import _
invoice_pool = self.pool.get('account.invoice')
partner_pool = self.pool.get('res.partner')
membership_line_pool = self.pool.get('membership.membership_line')
@ -39,7 +38,7 @@
membership_line_ids = membership_line_pool.search(cr, uid, [('membership_id','=',ref('product_product_membershipproduct0')),('partner','=',ref('base.res_partner_19'))])
membership_lines = membership_line_pool.browse(cr, uid, membership_line_ids)
assert membership_lines, _('Membership is not registrated.')
assert membership_lines, 'Membership is not registrated.'
membership_line = membership_lines[0]
invoice_pool.signal_invoice_open(cr, uid, [membership_line.account_invoice_id.id])
@ -105,7 +104,6 @@
I'm doing to make credit note of invoice which is paid by "Seagate" to cancel membership.
-
!python {model: account.invoice}: |
from openerp.tools.translate import _
invoice_pool = self.pool.get('account.invoice')
partner_pool = self.pool.get('res.partner')
membership_line_pool = self.pool.get('membership.membership_line')
@ -114,7 +112,7 @@
membership_line_ids = membership_line_pool.search(cr, uid, [('membership_id','=',ref('product_product_membershipproduct0')),('partner','=',ref('base.res_partner_19'))])
membership_lines = membership_line_pool.browse(cr, uid, membership_line_ids)
assert membership_lines, _('Membership is not registrated.')
assert membership_lines, 'Membership is not registrated.'
membership_line = membership_lines[0]
refund_id = invoice_refund_pool.create(cr, uid, {'description': 'Refund of Membership', 'filter_refund': 'refund'}, {'active_id': membership_line.account_invoice_id.id})
invoice_refund_pool.invoice_refund(cr, uid, [refund_id], {'active_id': membership_line.account_invoice_id.id, 'active_ids': [membership_line.account_invoice_id.id]})

File diff suppressed because it is too large Load Diff

View File

@ -701,11 +701,6 @@
<field name="prodlot_id" context="{'product_id': product_id}" groups="stock.group_production_lot"/>
<field name="state" invisible="1"/>
<field name="scrapped" invisible="1"/>
<button
name="%(stock.move_scrap)d"
string="Scrap Products" type="action"
icon="terp-gtk-jump-to-ltr"
states="done,cancel"/>
</tree>
</field>
</group>
@ -724,10 +719,6 @@
string="Partial"
type="action" states="confirmed,assigned"
icon="gtk-justify-fill"/>
<button name="%(stock.move_scrap)d"
string="Scrap Products" type="action"
icon="terp-gtk-jump-to-ltr" context="{'scrap': True}"
states="draft,waiting,confirmed,assigned"/>
</tree>
</field>
</group>

View File

@ -21,8 +21,6 @@
import time
from openerp.report import report_sxw
from openerp.osv import osv
from openerp import pooler
class bom_structure(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):

View File

@ -20,7 +20,8 @@
##############################################################################
import time
from openerp import pooler
import openerp
from openerp.report.interface import report_rml
from openerp.tools import to_xml
from openerp.report import report_sxw
@ -30,14 +31,14 @@ from openerp.tools.translate import _
class report_custom(report_rml):
def create_xml(self, cr, uid, ids, datas, context=None):
number = (datas.get('form', False) and datas['form']['number']) or 1
pool = pooler.get_pool(cr.dbname)
product_pool = pool.get('product.product')
product_uom_pool = pool.get('product.uom')
supplier_info_pool = pool.get('product.supplierinfo')
workcenter_pool = pool.get('mrp.workcenter')
user_pool = pool.get('res.users')
bom_pool = pool.get('mrp.bom')
pricelist_pool = pool.get('product.pricelist')
registry = openerp.registry(cr.dbname)
product_pool = registry.get('product.product')
product_uom_pool = registry.get('product.uom')
supplier_info_pool = registry.get('product.supplierinfo')
workcenter_pool = registry.get('mrp.workcenter')
user_pool = registry.get('res.users')
bom_pool = registry.get('mrp.bom')
pricelist_pool = registry.get('product.pricelist')
rml_obj=report_sxw.rml_parse(cr, uid, product_pool._name,context)
rml_obj.localcontext.update({'lang':context.get('lang',False)})
company_currency = user_pool.browse(cr, uid, uid).company_id.currency_id

View File

@ -20,7 +20,6 @@
##############################################################################
from openerp.osv import fields, osv
from openerp import pooler
from openerp.tools.translate import _
class mrp_config_settings(osv.osv_memory):

View File

@ -19,7 +19,6 @@
#
##############################################################################
from openerp import pooler
import time
from openerp.report import report_sxw

View File

@ -19,7 +19,6 @@
#
##############################################################################
from openerp import pooler
import time
from openerp.report import report_sxw

View File

@ -0,0 +1,819 @@
# Latvian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-24 11:43+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Latvian <lv@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-25 04:38+0000\n"
"X-Generator: Launchpad (build 16540)\n"
#. module: mrp_repair
#: field:mrp.repair.line,move_id:0
msgid "Inventory Move"
msgstr ""
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Group By..."
msgstr "Grupēt pēc..."
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Recreate Invoice"
msgstr "Pārveidot rēķinu"
#. module: mrp_repair
#: code:addons/mrp_repair/mrp_repair.py:371
#, python-format
msgid "You have to select a Partner Invoice Address in the repair form !"
msgstr "Labojumu formā Jums ir jānorāda partnera rēķina adrese!"
#. module: mrp_repair
#: model:ir.actions.act_window,name:mrp_repair.action_cancel_repair
#: view:mrp.repair.cancel:0
msgid "Cancel Repair Order"
msgstr "Atcelt labojumu orderi"
#. module: mrp_repair
#: field:mrp.repair.fee,to_invoice:0
#: field:mrp.repair.line,to_invoice:0
msgid "To Invoice"
msgstr ""
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Unit of Measure"
msgstr "Mērvienība"
#. module: mrp_repair
#: report:repair.order:0
msgid "Printing Date"
msgstr "Drukāšanas datums"
#. module: mrp_repair
#: field:mrp.repair.make_invoice,group:0
msgid "Group by partner invoice address"
msgstr "Grupēt pēc partnera rēķina adreses"
#. module: mrp_repair
#: field:mrp.repair,message_unread:0
msgid "Unread Messages"
msgstr "Neizlasītie ziņojumi"
#. module: mrp_repair
#: code:addons/mrp_repair/mrp_repair.py:435
#, python-format
msgid "No product defined on Fees!"
msgstr "Maksājumam nav nodefinēts produkts!"
#. module: mrp_repair
#: view:mrp.repair:0
#: field:mrp.repair,company_id:0
msgid "Company"
msgstr "Uzņēmums"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Set to Draft"
msgstr "Atzīmēt kā melnrakstu"
#. module: mrp_repair
#: selection:mrp.repair,state:0
msgid "Invoice Exception"
msgstr "Rēķina izņēmums"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Serial Number"
msgstr "Sērijas numurs"
#. module: mrp_repair
#: field:mrp.repair,address_id:0
msgid "Delivery Address"
msgstr "Piegādes adrese"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "History"
msgstr "Vēsture"
#. module: mrp_repair
#: field:mrp.repair.fee,price_subtotal:0
#: field:mrp.repair.line,price_subtotal:0
msgid "Subtotal"
msgstr "Kopā"
#. module: mrp_repair
#: report:repair.order:0
msgid "Invoice address :"
msgstr "Rēķina adrese:"
#. module: mrp_repair
#: help:mrp.repair,partner_id:0
msgid "Choose partner for whom the order will be invoiced and delivered."
msgstr ""
"Izvēlieties partneri kuram pēc ordera tiks izveidots rēķins un piegādāts."
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Guarantee limit"
msgstr "Garantijas limits"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Notes"
msgstr "Piezīmes"
#. module: mrp_repair
#: field:mrp.repair,message_ids:0
msgid "Messages"
msgstr "Ziņojumi"
#. module: mrp_repair
#: field:mrp.repair,amount_tax:0
#: field:mrp.repair.fee,tax_id:0
#: field:mrp.repair.line,tax_id:0
msgid "Taxes"
msgstr "Nodokļi"
#. module: mrp_repair
#: code:addons/mrp_repair/mrp_repair.py:385
#: code:addons/mrp_repair/mrp_repair.py:413
#: code:addons/mrp_repair/mrp_repair.py:442
#, python-format
msgid "Error!"
msgstr "Kļūda!"
#. module: mrp_repair
#: report:repair.order:0
msgid "Net Total :"
msgstr "Neto kopā:"
#. module: mrp_repair
#: selection:mrp.repair,state:0
#: selection:mrp.repair.line,state:0
msgid "Cancelled"
msgstr "Atcelts"
#. module: mrp_repair
#: help:mrp.repair,message_unread:0
msgid "If checked new messages require your attention."
msgstr ""
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Operations"
msgstr "Operācijas"
#. module: mrp_repair
#: model:ir.actions.act_window,help:mrp_repair.action_repair_order_tree
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Click to create a reparation order. \n"
" </p><p>\n"
" In a repair order, you can detail the components you "
"remove,\n"
" add or replace and record the time you spent on the "
"different\n"
" operations.\n"
" </p><p>\n"
" The repair order uses the warranty date on the Serial Number "
"in\n"
" order to know if whether the repair should be invoiced to "
"the\n"
" customer or not.\n"
" </p>\n"
" "
msgstr ""
#. module: mrp_repair
#: help:mrp.repair.line,state:0
msgid ""
" * The 'Draft' status is set automatically as draft when repair order in "
"draft status. \n"
"* The 'Confirmed' status is set automatically as confirm when repair order "
"in confirm status. \n"
"* The 'Done' status is set automatically when repair order is completed. "
" \n"
"* The 'Cancelled' status is set automatically when user cancel repair order."
msgstr ""
#. module: mrp_repair
#: field:mrp.repair,move_id:0
msgid "Move"
msgstr "Kustība"
#. module: mrp_repair
#: report:repair.order:0
msgid "Tax"
msgstr "Nodoklis"
#. module: mrp_repair
#: model:ir.actions.act_window,name:mrp_repair.action_repair_order_tree
#: model:ir.ui.menu,name:mrp_repair.menu_repair_order
msgid "Repair Orders"
msgstr "Labojumu orderi"
#. module: mrp_repair
#: model:ir.actions.report.xml,name:mrp_repair.report_mrp_repair
msgid "Quotation / Order"
msgstr "Piedāvājums / Orderis"
#. module: mrp_repair
#: help:mrp.repair,message_summary:0
msgid ""
"Holds the Chatter summary (number of messages, ...). This summary is "
"directly in html format in order to be inserted in kanban views."
msgstr ""
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Extra Info"
msgstr "Papildus informācija"
#. module: mrp_repair
#: code:addons/mrp_repair/mrp_repair.py:336
#: code:addons/mrp_repair/mrp_repair.py:349
#: code:addons/mrp_repair/mrp_repair.py:435
#: code:addons/mrp_repair/wizard/cancel_repair.py:49
#, python-format
msgid "Warning!"
msgstr "Brīdinājums!"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "(update)"
msgstr "(atjaunināt)"
#. module: mrp_repair
#: view:mrp.repair:0
#: field:mrp.repair,partner_id:0
msgid "Partner"
msgstr "Partneris"
#. module: mrp_repair
#: code:addons/mrp_repair/mrp_repair.py:385
#, python-format
msgid "No account defined for partner \"%s\"."
msgstr "Nav nodefinēt konts partnerim \"%s\"."
#. module: mrp_repair
#: view:mrp.repair:0
#: selection:mrp.repair,state:0
#: selection:mrp.repair.line,state:0
msgid "Confirmed"
msgstr "Apstiprināts"
#. module: mrp_repair
#: help:mrp.repair,state:0
msgid ""
" * The 'Draft' status is used when a user is encoding a new and unconfirmed "
"repair order. \n"
"* The 'Confirmed' status is used when a user confirms the repair order. "
" \n"
"* The 'Ready to Repair' status is used to start to repairing, user can start "
"repairing only after repair order is confirmed. \n"
"* The 'To be Invoiced' status is used to generate the invoice before or "
"after repairing done. \n"
"* The 'Done' status is set when repairing is completed. \n"
"* The 'Cancelled' status is used when user cancel repair order."
msgstr ""
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Repairs order"
msgstr "Labojumu orderis"
#. module: mrp_repair
#: code:addons/mrp_repair/mrp_repair.py:336
#, python-format
msgid "Serial number is required for operation line with product '%s'"
msgstr "Sērijas numurs ir obligāts operācijas rindai ar produktu '%s'"
#. module: mrp_repair
#: report:repair.order:0
msgid "Repair Order N° :"
msgstr "Labojumu orderis Nr. :"
#. module: mrp_repair
#: field:mrp.repair,prodlot_id:0
#: field:mrp.repair.line,prodlot_id:0
#: report:repair.order:0
msgid "Lot Number"
msgstr "Partijas numurs"
#. module: mrp_repair
#: field:mrp.repair,message_follower_ids:0
msgid "Followers"
msgstr "Sekotāji"
#. module: mrp_repair
#: field:mrp.repair,fees_lines:0
msgid "Fees Lines"
msgstr ""
#. module: mrp_repair
#: field:mrp.repair.line,type:0
msgid "Type"
msgstr "Veids"
#. module: mrp_repair
#: report:repair.order:0
msgid "Fees Line(s)"
msgstr "Maksājumu rinda(s)"
#. module: mrp_repair
#: selection:mrp.repair,state:0
msgid "To be Invoiced"
msgstr "Tiks izrakstīts rēķins"
#. module: mrp_repair
#: report:repair.order:0
msgid "Shipping address :"
msgstr "Piegādes adrese:"
#. module: mrp_repair
#: report:repair.order:0
msgid "Total :"
msgstr "Kopā:"
#. module: mrp_repair
#: view:mrp.repair.cancel:0
msgid ""
"This operation will cancel the Repair process, but will not cancel it's "
"Invoice. Do you want to continue?"
msgstr ""
"Šī darbība atcels labojumu procesu, bet neatcels tā rēķinu. Vai vēlaties "
"turpināt?"
#. module: mrp_repair
#: field:mrp.repair,pricelist_id:0
msgid "Pricelist"
msgstr "Cenrādis"
#. module: mrp_repair
#: field:mrp.repair,quotation_notes:0
msgid "Quotation Notes"
msgstr "Piedāvājuma piezīmes"
#. module: mrp_repair
#: view:mrp.repair:0
#: field:mrp.repair,state:0
#: field:mrp.repair.line,state:0
msgid "Status"
msgstr "Statuss"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Search Reair Orders"
msgstr "Meklēt labojumu orderus"
#. module: mrp_repair
#: report:repair.order:0
msgid "(Add)"
msgstr "(Pievienot)"
#. module: mrp_repair
#: model:ir.model,name:mrp_repair.model_mrp_repair_line
#: view:mrp.repair:0
msgid "Repair Line"
msgstr "Labojumu rinda"
#. module: mrp_repair
#: report:repair.order:0
msgid "N° :"
msgstr "Nr. :"
#. module: mrp_repair
#: field:mrp.repair,invoice_method:0
msgid "Invoice Method"
msgstr "Rēķina metode"
#. module: mrp_repair
#: field:mrp.repair,repaired:0
#: selection:mrp.repair,state:0
msgid "Repaired"
msgstr "Izlabots"
#. module: mrp_repair
#: field:mrp.repair.fee,invoice_line_id:0
#: field:mrp.repair.line,invoice_line_id:0
msgid "Invoice Line"
msgstr "Rēķina rinda"
#. module: mrp_repair
#: selection:mrp.repair,invoice_method:0
msgid "Before Repair"
msgstr "Pirms labojumiem"
#. module: mrp_repair
#: field:mrp.repair,location_id:0
msgid "Current Location"
msgstr "Pašreizējā atrašanās vieta"
#. module: mrp_repair
#: view:mrp.repair.cancel:0
msgid "Yes"
msgstr "Jā"
#. module: mrp_repair
#: view:mrp.repair.cancel:0
#: view:mrp.repair.make_invoice:0
msgid "or"
msgstr "vai"
#. module: mrp_repair
#: view:mrp.repair:0
#: field:mrp.repair,invoiced:0
#: field:mrp.repair.fee,invoiced:0
#: field:mrp.repair.line,invoiced:0
msgid "Invoiced"
msgstr "Rēķins izrakstīts"
#. module: mrp_repair
#: field:mrp.repair.fee,product_uom:0
#: field:mrp.repair.line,product_uom:0
msgid "Product Unit of Measure"
msgstr "Produkta mērvienība"
#. module: mrp_repair
#: view:mrp.repair.make_invoice:0
msgid "Create invoices"
msgstr "Izveidot rēķinus"
#. module: mrp_repair
#: report:repair.order:0
msgid "(Remove)"
msgstr "(Noņemt)"
#. module: mrp_repair
#: selection:mrp.repair.line,type:0
msgid "Add"
msgstr "Pievienot"
#. module: mrp_repair
#: selection:mrp.repair.line,state:0
msgid "Draft"
msgstr "Melnraksts"
#. module: mrp_repair
#: field:mrp.repair,name:0
msgid "Repair Reference"
msgstr "Labojuma atsauce"
#. module: mrp_repair
#: model:ir.model,name:mrp_repair.model_mrp_repair
#: view:mrp.repair:0
msgid "Repair Order"
msgstr "Labojumu orderis"
#. module: mrp_repair
#: selection:mrp.repair,state:0
msgid "Under Repair"
msgstr ""
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Ready To Repair"
msgstr "Gatavs labojumiem"
#. module: mrp_repair
#: field:mrp.repair,amount_untaxed:0
msgid "Untaxed Amount"
msgstr "Summa bez nodokļa"
#. module: mrp_repair
#: help:mrp.repair,invoice_method:0
msgid ""
"Selecting 'Before Repair' or 'After Repair' will allow you to generate "
"invoice before or after the repair is done respectively. 'No invoice' means "
"you don't want to generate invoice for this repair order."
msgstr ""
#. module: mrp_repair
#: field:mrp.repair,guarantee_limit:0
msgid "Warranty Expiration"
msgstr "Garantijas termiņš"
#. module: mrp_repair
#: help:mrp.repair,pricelist_id:0
msgid "Pricelist of the selected partner."
msgstr "Atzīmētā partnera cenrādis."
#. module: mrp_repair
#: report:repair.order:0
msgid "Guarantee Limit"
msgstr "Garantijas limits"
#. module: mrp_repair
#: field:mrp.repair,default_address_id:0
msgid "unknown"
msgstr "nezināms"
#. module: mrp_repair
#: field:mrp.repair,product_id:0
#: report:repair.order:0
msgid "Product to Repair"
msgstr "Produkts labojumam"
#. module: mrp_repair
#: selection:mrp.repair,invoice_method:0
msgid "After Repair"
msgstr "Pēc labojuma"
#. module: mrp_repair
#: code:addons/mrp_repair/wizard/cancel_repair.py:41
#, python-format
msgid "Active ID not Found"
msgstr "Aktīvs ID nav atrasts"
#. module: mrp_repair
#: field:mrp.repair,message_is_follower:0
msgid "Is a Follower"
msgstr "Ir sekotājs"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Date"
msgstr "Datums"
#. module: mrp_repair
#: model:ir.model,name:mrp_repair.model_mrp_repair_fee
msgid "Repair Fees Line"
msgstr "Labojuma maksājumu rinda"
#. module: mrp_repair
#: selection:mrp.repair,state:0
msgid "Quotation"
msgstr ""
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Confirm Repair"
msgstr "Apstiprināt labojumu"
#. module: mrp_repair
#: report:repair.order:0
msgid "Repair Quotation"
msgstr "Labojuma piedāvājums"
#. module: mrp_repair
#: field:mrp.repair,message_summary:0
msgid "Summary"
msgstr "Kopsavilkums"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "End Repair"
msgstr "Beigt labojumu"
#. module: mrp_repair
#: code:addons/mrp_repair/mrp_repair.py:413
#: code:addons/mrp_repair/mrp_repair.py:442
#, python-format
msgid "No account defined for product \"%s\"."
msgstr "Produktam \"%s\" nav nodefinēts konts."
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Quotations"
msgstr "Piedāvājumi"
#. module: mrp_repair
#: view:mrp.repair:0
#: field:mrp.repair.fee,product_uom_qty:0
#: field:mrp.repair.line,product_uom_qty:0
#: report:repair.order:0
msgid "Quantity"
msgstr "Daudzums"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Product Information"
msgstr "Produkta informācija"
#. module: mrp_repair
#: model:ir.actions.act_window,name:mrp_repair.act_mrp_repair_invoice
#: model:ir.model,name:mrp_repair.model_mrp_repair_make_invoice
#: view:mrp.repair:0
msgid "Make Invoice"
msgstr "Veidot rēķinu"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Start Repair"
msgstr "Sākt labojumu"
#. module: mrp_repair
#: field:mrp.repair.fee,price_unit:0
#: field:mrp.repair.line,price_unit:0
#: report:repair.order:0
msgid "Unit Price"
msgstr "Vienības cena"
#. module: mrp_repair
#: selection:mrp.repair.line,state:0
msgid "Done"
msgstr "Pabeigts"
#. module: mrp_repair
#: field:mrp.repair,invoice_id:0
msgid "Invoice"
msgstr "Rēķins"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Fees"
msgstr "Maksājumi"
#. module: mrp_repair
#: view:mrp.repair.cancel:0
#: view:mrp.repair.make_invoice:0
msgid "Cancel"
msgstr "Atcelt"
#. module: mrp_repair
#: field:mrp.repair.line,location_dest_id:0
msgid "Dest. Location"
msgstr "Piegādes vieta"
#. module: mrp_repair
#: report:repair.order:0
msgid "Operation Line(s)"
msgstr "Operācijas rinda(s)"
#. module: mrp_repair
#: field:mrp.repair,location_dest_id:0
msgid "Delivery Location"
msgstr "Piegādes vieta"
#. module: mrp_repair
#: help:mrp.repair,deliver_bool:0
msgid ""
"Check this box if you want to manage the delivery once the product is "
"repaired and create a picking with selected product. Note that you can "
"select the locations in the Info tab, if you have the extended view."
msgstr ""
#. module: mrp_repair
#: help:mrp.repair,guarantee_limit:0
msgid ""
"The warranty expiration limit is computed as: last move date + warranty "
"defined on selected product. If the current date is below the warranty "
"expiration limit, each operation and fee you will add will be set as 'not to "
"invoiced' by default. Note that you can change manually afterwards."
msgstr ""
#. module: mrp_repair
#: view:mrp.repair.make_invoice:0
msgid "Create Invoice"
msgstr "Izveidot rēķinu"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Reair Orders"
msgstr "Labojumu orderi"
#. module: mrp_repair
#: field:mrp.repair.fee,name:0
#: field:mrp.repair.line,name:0
#: report:repair.order:0
msgid "Description"
msgstr "Apraksts"
#. module: mrp_repair
#: field:mrp.repair,operations:0
msgid "Operation Lines"
msgstr "Operāciju rindas"
#. module: mrp_repair
#: view:mrp.repair:0
#: field:mrp.repair.fee,product_id:0
#: field:mrp.repair.line,product_id:0
msgid "Product"
msgstr "Produkts"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Invoice Corrected"
msgstr "Rēķins izlabots"
#. module: mrp_repair
#: report:repair.order:0
msgid "Price"
msgstr "Cena"
#. module: mrp_repair
#: field:mrp.repair,deliver_bool:0
msgid "Deliver"
msgstr "Piegādāt"
#. module: mrp_repair
#: field:mrp.repair,internal_notes:0
msgid "Internal Notes"
msgstr "Iekšējās piezīmes"
#. module: mrp_repair
#: report:repair.order:0
msgid "Taxes:"
msgstr "Nodokļi:"
#. module: mrp_repair
#: view:mrp.repair.make_invoice:0
msgid "Do you really want to create the invoice(s)?"
msgstr "Vai Jūs tiešām vēlaties izveidot rēķinu(s)?"
#. module: mrp_repair
#: code:addons/mrp_repair/mrp_repair.py:349
#, python-format
msgid "Repair order is already invoiced."
msgstr "No labojumu ordera rēķins jau ir izveidots."
#. module: mrp_repair
#: field:mrp.repair,picking_id:0
msgid "Picking"
msgstr "Izsniegšana"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Untaxed amount"
msgstr "Summa bez nodokļiem"
#. module: mrp_repair
#: field:mrp.repair.fee,repair_id:0
#: field:mrp.repair.line,repair_id:0
msgid "Repair Order Reference"
msgstr "Labojumu ordera atsauce"
#. module: mrp_repair
#: code:addons/mrp_repair/wizard/cancel_repair.py:49
#, python-format
msgid "Repair order is not invoiced."
msgstr "No labojumu ordera rēķins nav izveidots."
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Total amount"
msgstr "Summa kopā"
#. module: mrp_repair
#: selection:mrp.repair.line,type:0
msgid "Remove"
msgstr "Izņemt"
#. module: mrp_repair
#: field:mrp.repair,partner_invoice_id:0
msgid "Invoicing Address"
msgstr "Rēķina adrese"
#. module: mrp_repair
#: help:mrp.repair,message_ids:0
msgid "Messages and communication history"
msgstr "Ziņojumu un komunikāciju vēsture"
#. module: mrp_repair
#: view:mrp.repair:0
msgid "Invoicing"
msgstr "Rēķina izrakstīšana"
#. module: mrp_repair
#: field:mrp.repair.line,location_id:0
msgid "Source Location"
msgstr "Resursa novietojums"
#. module: mrp_repair
#: model:ir.model,name:mrp_repair.model_mrp_repair_cancel
#: view:mrp.repair:0
msgid "Cancel Repair"
msgstr "Atcelt labojumu"
#. module: mrp_repair
#: selection:mrp.repair,invoice_method:0
msgid "No Invoice"
msgstr "Nav rēķina"
#. module: mrp_repair
#: field:mrp.repair,amount_total:0
msgid "Total"
msgstr "Kopā"
#. module: mrp_repair
#: selection:mrp.repair,state:0
msgid "Ready to Repair"
msgstr "Gatavs labojumiem"
#. module: mrp_repair
#: code:addons/mrp_repair/mrp_repair.py:371
#, python-format
msgid "No partner !"
msgstr "Nav partnera!"

View File

@ -36,4 +36,4 @@
-
!python {model: mrp.repair}: |
repair_id = self.browse(cr, uid, [ref('mrp_repair_rmrp0')], context=context)[0]
assert repair_id.invoice_id.id, _("No invoice exists for this repair order")
assert repair_id.invoice_id.id, "No invoice exists for this repair order"

View File

@ -21,7 +21,7 @@
-
!python {model: mrp.repair}: |
repair_id = self.browse(cr, uid, [ref('mrp_repair_rmrp2')], context=context)[0]
assert repair_id.invoice_id.id, _("No invoice exists for this repair order.")
assert repair_id.invoice_id.id, "No invoice exists for this repair order."
-
I start the Repairing process by clicking on "Start Repair" button.
-

View File

@ -26,5 +26,5 @@
-
!python {model: mrp.repair}: |
repair_id = self.browse(cr, uid, [ref('mrp_repair_rmrp1')], context=context)[0]
assert not repair_id.invoice_id.id, _("Invoice should not be exists for this repair order")
assert not repair_id.invoice_id.id, "Invoice should not be exists for this repair order"

284
addons/note/i18n/cs.po Normal file
View File

@ -0,0 +1,284 @@
# Czech translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-03-27 09:45+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Czech <cs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-03-28 04:41+0000\n"
"X-Generator: Launchpad (build 16546)\n"
#. module: note
#: field:note.note,memo:0
msgid "Note Content"
msgstr ""
#. module: note
#: view:note.stage:0
msgid "Stages of Notes"
msgstr ""
#. module: note
#: model:note.stage,name:note.demo_note_stage_04
#: model:note.stage,name:note.note_stage_02
msgid "This Week"
msgstr ""
#. module: note
#: model:ir.model,name:note.model_base_config_settings
msgid "base.config.settings"
msgstr ""
#. module: note
#: model:ir.model,name:note.model_note_tag
msgid "Note Tag"
msgstr ""
#. module: note
#: model:res.groups,name:note.group_note_fancy
msgid "Notes / Fancy mode"
msgstr ""
#. module: note
#: model:ir.model,name:note.model_note_note
#: view:note.note:0
msgid "Note"
msgstr ""
#. module: note
#: view:note.note:0
msgid "Group By..."
msgstr ""
#. module: note
#: field:note.note,message_follower_ids:0
msgid "Followers"
msgstr ""
#. module: note
#: model:ir.actions.act_window,help:note.action_note_note
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Click to add a personal note.\n"
" </p><p>\n"
" Use notes to organize personal tasks or notes. All\n"
" notes are private; no one else will be able to see them. "
"However\n"
" you can share some notes with other people by inviting "
"followers\n"
" on the note. (Useful for meeting minutes, especially if\n"
" you activate the pad feature for collaborative writings).\n"
" </p><p>\n"
" You can customize how you process your notes/tasks by adding,\n"
" removing or modifying columns.\n"
" </p>\n"
" "
msgstr ""
#. module: note
#: model:note.stage,name:note.demo_note_stage_01
#: model:note.stage,name:note.note_stage_01
msgid "Today"
msgstr ""
#. module: note
#: model:ir.model,name:note.model_res_users
msgid "Users"
msgstr ""
#. module: note
#: view:note.note:0
msgid "í"
msgstr ""
#. module: note
#: view:note.stage:0
msgid "Stage of Notes"
msgstr ""
#. module: note
#: field:note.note,message_unread:0
msgid "Unread Messages"
msgstr ""
#. module: note
#: field:note.note,current_partner_id:0
msgid "unknown"
msgstr ""
#. module: note
#: view:note.note:0
msgid "By sticky note Category"
msgstr ""
#. module: note
#: help:note.note,message_unread:0
msgid "If checked new messages require your attention."
msgstr ""
#. module: note
#: field:note.stage,name:0
msgid "Stage Name"
msgstr ""
#. module: note
#: field:note.note,message_is_follower:0
msgid "Is a Follower"
msgstr ""
#. module: note
#: model:note.stage,name:note.demo_note_stage_02
msgid "Tomorrow"
msgstr ""
#. module: note
#: view:note.note:0
#: field:note.note,open:0
msgid "Active"
msgstr ""
#. module: note
#: help:note.stage,user_id:0
msgid "Owner of the note stage."
msgstr ""
#. module: note
#: model:ir.ui.menu,name:note.menu_notes_stage
msgid "Categories"
msgstr ""
#. module: note
#: view:note.note:0
#: field:note.note,stage_id:0
msgid "Stage"
msgstr ""
#. module: note
#: field:note.tag,name:0
msgid "Tag Name"
msgstr ""
#. module: note
#: field:note.note,message_ids:0
msgid "Messages"
msgstr ""
#. module: note
#: view:base.config.settings:0
#: model:ir.actions.act_window,name:note.action_note_note
#: model:ir.ui.menu,name:note.menu_note_notes
#: view:note.note:0
#: model:note.stage,name:note.note_stage_04
msgid "Notes"
msgstr ""
#. module: note
#: model:note.stage,name:note.demo_note_stage_03
#: model:note.stage,name:note.note_stage_03
msgid "Later"
msgstr ""
#. module: note
#: model:ir.model,name:note.model_note_stage
msgid "Note Stage"
msgstr ""
#. module: note
#: field:note.note,message_summary:0
msgid "Summary"
msgstr ""
#. module: note
#: field:note.note,stage_ids:0
msgid "Stages of Users"
msgstr ""
#. module: note
#: field:note.note,name:0
msgid "Note Summary"
msgstr ""
#. module: note
#: model:ir.actions.act_window,name:note.action_note_stage
#: view:note.note:0
msgid "Stages"
msgstr ""
#. module: note
#: help:note.note,message_ids:0
msgid "Messages and communication history"
msgstr ""
#. module: note
#: view:note.note:0
msgid "Delete"
msgstr ""
#. module: note
#: field:note.note,color:0
msgid "Color Index"
msgstr ""
#. module: note
#: field:note.note,sequence:0
#: field:note.stage,sequence:0
msgid "Sequence"
msgstr ""
#. module: note
#: view:note.note:0
#: field:note.note,tag_ids:0
msgid "Tags"
msgstr ""
#. module: note
#: view:note.note:0
msgid "Archive"
msgstr ""
#. module: note
#: field:base.config.settings,module_note_pad:0
msgid "Use collaborative pads (etherpad)"
msgstr ""
#. module: note
#: help:note.note,message_summary:0
msgid ""
"Holds the Chatter summary (number of messages, ...). This summary is "
"directly in html format in order to be inserted in kanban views."
msgstr ""
#. module: note
#: field:base.config.settings,group_note_fancy:0
msgid "Use fancy layouts for notes"
msgstr ""
#. module: note
#: field:note.note,current_partner_id:0
#: field:note.stage,user_id:0
msgid "Owner"
msgstr ""
#. module: note
#: help:note.stage,sequence:0
msgid "Used to order the note stages"
msgstr ""
#. module: note
#: field:note.note,date_done:0
msgid "Date done"
msgstr ""
#. module: note
#: field:note.stage,fold:0
msgid "Folded by Default"
msgstr ""

View File

@ -89,7 +89,7 @@ class pos_config(osv.osv):
'sequence_id' : False,
}
d.update(default)
return super(pos_order, self).copy(cr, uid, id, d, context=context)
return super(pos_config, self).copy(cr, uid, id, d, context=context)
def name_get(self, cr, uid, ids, context=None):

View File

@ -21,7 +21,6 @@
import time
from openerp.report import report_sxw
from openerp import pooler
def titlize(journal_name):
words = journal_name.split()
@ -34,7 +33,7 @@ class order(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(order, self).__init__(cr, uid, name, context=context)
user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid, context=context)
user = self.pool['res.users'].browse(cr, uid, uid, context=context)
partner = user.company_id.partner_id
self.localcontext.update({

View File

@ -31,6 +31,10 @@ class PosBoxIn(PosBox):
_inherit = 'cash.box.in'
def _compute_values_for_statement_line(self, cr, uid, box, record, context=None):
if context is None:
context = {}
values = super(PosBoxIn, self)._compute_values_for_statement_line(cr, uid, box, record, context=context)
active_model = context.get('active_model', False) or False

View File

@ -43,8 +43,12 @@ openerp.portal_anonymous = function(instance) {
instance.web.Login.include({
start: function() {
var self = this;
var anonymous_mode = (!self.session.session_is_valid() && !(self.params.token || self.params.login));
if (anonymous_mode) {
self.$el.hide();
}
return $.when(this._super()).then(function() {
if (!self.session.session_is_valid() && !(self.params.token || self.params.login)) {
if (anonymous_mode) {
self.remember_credentials = false;
// XXX get login/pass from server (via a rpc call) ?
return self.do_login(self.selected_db, 'anonymous', 'anonymous');

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2010-Today OpenERP S.A. (<http://www.openerp.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

Some files were not shown because too many files have changed in this diff Show More