[MERGE] sync with latest trunk
bzr revid: mat@openerp.com-20130521132230-0ov3cdnqv3eb6uvb
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-server\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2013-03-07 08:36+0000\n"
|
||||
"PO-Revision-Date: 2013-03-29 04:45+0000\n"
|
||||
"Last-Translator: Josh Kim <joshkkim@gmail.com>\n"
|
||||
"PO-Revision-Date: 2013-05-18 23:13+0000\n"
|
||||
"Last-Translator: AhnJD <zion64@zeiv.dsmynas.com>\n"
|
||||
"Language-Team: Korean <ko@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-30 06:08+0000\n"
|
||||
"X-Generator: Launchpad (build 16546)\n"
|
||||
"X-Launchpad-Export-Date: 2013-05-19 06:12+0000\n"
|
||||
"X-Generator: Launchpad (build 16626)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
@@ -129,6 +129,16 @@ msgid ""
|
||||
" * Product Attributes\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"제품양식에 특성과 제조회사를 추가하는 모듈\n"
|
||||
"====================================================================\n"
|
||||
"제품에 아래 내용을 정의할 수 있습니다.\n"
|
||||
"-----------------------------------------------\n"
|
||||
" * 제조회사\n"
|
||||
" * 제조회사 제품명칭\n"
|
||||
" * 제조회사 제품코드\n"
|
||||
" * 제품 특성\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.client,params:0
|
||||
@@ -551,6 +561,14 @@ msgid ""
|
||||
"that have no counterpart in the general financial accounts.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"관리회계 객체를 지정하기 위한 모듈\n"
|
||||
"===============================================\n"
|
||||
"\n"
|
||||
"OpenERP에서는 관리회계가 일반회계와 연계되지만 완전히\n"
|
||||
"독립적으로 취급됩니다. 따라서, 일반 재무회계에는 영향을 주지\n"
|
||||
"않으면서 다양하고 차별화된 분석 작업을 수행할 수 있습니다.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_idea
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-server\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2013-03-07 08:36+0000\n"
|
||||
"PO-Revision-Date: 2013-04-01 12:25+0000\n"
|
||||
"PO-Revision-Date: 2013-05-20 14:30+0000\n"
|
||||
"Last-Translator: Dušan Laznik (Mentis) <laznik@mentis.si>\n"
|
||||
"Language-Team: Slovenian <sl@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-04-02 05:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16546)\n"
|
||||
"X-Launchpad-Export-Date: 2013-05-21 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16626)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
@@ -11374,9 +11374,12 @@ msgid ""
|
||||
"Thank you in advance for your cooperation.\n"
|
||||
"Best Regards,"
|
||||
msgstr ""
|
||||
"Spoštovani,\n"
|
||||
"Iz naših poslovnih knjig je razvidno,da imate zapadle obveznosti do našega "
|
||||
"podjetja.\n"
|
||||
"\n"
|
||||
"Naši podatki kažejo , da nam dolgujete spodaj navedeni znesek."
|
||||
"Prosimo, da svoj dolg takoj poravnate na naš račun.\n"
|
||||
"\n"
|
||||
"Če ste svoj dolg že poravnali, upoštevajte opomin za brezpredmeten."
|
||||
|
||||
#. module: base
|
||||
#: view:ir.module.category:0
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-server\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2013-03-07 08:36+0000\n"
|
||||
"PO-Revision-Date: 2013-05-05 17:30+0000\n"
|
||||
"PO-Revision-Date: 2013-05-19 13:35+0000\n"
|
||||
"Last-Translator: Ayhan KIZILTAN <Unknown>\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-05-06 06:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16598)\n"
|
||||
"X-Launchpad-Export-Date: 2013-05-20 06:31+0000\n"
|
||||
"X-Generator: Launchpad (build 16626)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
@@ -2104,6 +2104,8 @@ msgid ""
|
||||
"Check this box if this contact is a supplier. If it's not checked, purchase "
|
||||
"people will not see it when encoding a purchase order."
|
||||
msgstr ""
|
||||
"Bu kişi bir tedarikçi ise bu kutuyu işaretleyin. Eğer işaretlenmemişse, "
|
||||
"satınalma elemanı sipariş kodlarken bunu göremezler."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_hr_evaluation
|
||||
|
||||
@@ -54,6 +54,34 @@ class ir_sequence(openerp.osv.osv.osv):
|
||||
"""
|
||||
_name = 'ir.sequence'
|
||||
_order = 'name'
|
||||
|
||||
def _get_number_next_actual(self, cr, user, ids, field_name, arg, context=None):
|
||||
'''Return number from ir_sequence row when no_gap implementation,
|
||||
and number from postgres sequence when standard implementation.'''
|
||||
res = dict.fromkeys(ids)
|
||||
for element in self.browse(cr, user, ids, context=context):
|
||||
if element.implementation != 'standard':
|
||||
res[element.id] = element.number_next
|
||||
else:
|
||||
# get number from postgres sequence. Cannot use
|
||||
# currval, because that might give an error when
|
||||
# not having used nextval before.
|
||||
statement = (
|
||||
"SELECT last_value, increment_by, is_called"
|
||||
" FROM ir_sequence_%03d"
|
||||
% element.id)
|
||||
cr.execute(statement)
|
||||
(last_value, increment_by, is_called) = cr.fetchone()
|
||||
if is_called:
|
||||
res[element.id] = last_value + increment_by
|
||||
else:
|
||||
res[element.id] = last_value
|
||||
return res
|
||||
|
||||
def _set_number_next_actual(self, cr, uid, id, name, value, args=None, context=None):
|
||||
return self.write(cr, uid, id, {'number_next': value or 0}, context=context)
|
||||
|
||||
|
||||
_columns = {
|
||||
'name': openerp.osv.fields.char('Name', size=64, required=True),
|
||||
'code': openerp.osv.fields.selection(_code_get, 'Code', size=64),
|
||||
@@ -67,6 +95,7 @@ class ir_sequence(openerp.osv.osv.osv):
|
||||
'prefix': openerp.osv.fields.char('Prefix', size=64, help="Prefix value of the record for the sequence"),
|
||||
'suffix': openerp.osv.fields.char('Suffix', size=64, help="Suffix value of the record for the sequence"),
|
||||
'number_next': openerp.osv.fields.integer('Next Number', required=True, help="Next number of this sequence"),
|
||||
'number_next_actual': openerp.osv.fields.function(_get_number_next_actual, fnct_inv=_set_number_next_actual, type='integer', required=True, string='Next Number', help='Next number that will be used. This number can be incremented frequently so the displayed value might already be obsolete'),
|
||||
'number_increment': openerp.osv.fields.integer('Increment Number', required=True, help="The next number of the sequence will be incremented by this number"),
|
||||
'padding' : openerp.osv.fields.integer('Number Padding', required=True, help="OpenERP will automatically adds some '0' on the left of the 'Next Number' to get the required padding size."),
|
||||
'company_id': openerp.osv.fields.many2one('res.company', 'Company'),
|
||||
@@ -77,6 +106,7 @@ class ir_sequence(openerp.osv.osv.osv):
|
||||
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'ir.sequence', context=c),
|
||||
'number_increment': 1,
|
||||
'number_next': 1,
|
||||
'number_next_actual': 1,
|
||||
'padding' : 0,
|
||||
}
|
||||
|
||||
@@ -121,7 +151,7 @@ class ir_sequence(openerp.osv.osv.osv):
|
||||
# object depends on it.
|
||||
cr.execute("DROP SEQUENCE IF EXISTS %s RESTRICT " % names)
|
||||
|
||||
def _alter_sequence(self, cr, id, number_increment, number_next):
|
||||
def _alter_sequence(self, cr, id, number_increment, number_next=None):
|
||||
""" Alter a PostreSQL sequence.
|
||||
|
||||
There is no access rights check.
|
||||
@@ -129,9 +159,15 @@ class ir_sequence(openerp.osv.osv.osv):
|
||||
if number_increment == 0:
|
||||
raise osv.except_osv(_('Warning!'),_("Increment number must not be zero."))
|
||||
assert isinstance(id, (int, long))
|
||||
cr.execute("""
|
||||
ALTER SEQUENCE ir_sequence_%03d INCREMENT BY %%s RESTART WITH %%s
|
||||
""" % id, (number_increment, number_next))
|
||||
seq_name = 'ir_sequence_%03d' % (id,)
|
||||
cr.execute("SELECT relname FROM pg_class WHERE relkind = %s AND relname=%s", ('S', seq_name))
|
||||
if not cr.fetchone():
|
||||
# sequence is not created yet, we're inside create() so ignore it, will be set later
|
||||
return
|
||||
statement = "ALTER SEQUENCE %s INCREMENT BY %d" % (seq_name, number_increment)
|
||||
if number_next is not None:
|
||||
statement += " RESTART WITH %d" % (number_next, )
|
||||
cr.execute(statement)
|
||||
|
||||
def create(self, cr, uid, values, context=None):
|
||||
""" Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
|
||||
@@ -160,7 +196,13 @@ class ir_sequence(openerp.osv.osv.osv):
|
||||
n = values.get('number_next', row['number_next'])
|
||||
if row['implementation'] == 'standard':
|
||||
if new_implementation in ('standard', None):
|
||||
self._alter_sequence(cr, row['id'], i, n)
|
||||
# Implementation has NOT changed.
|
||||
# Only change sequence if really requested.
|
||||
if row['number_next'] != n:
|
||||
self._alter_sequence(cr, row['id'], i, n)
|
||||
else:
|
||||
# Just in case only increment changed
|
||||
self._alter_sequence(cr, row['id'], i)
|
||||
else:
|
||||
self._drop_sequence(cr, row['id'])
|
||||
else:
|
||||
@@ -200,7 +242,7 @@ class ir_sequence(openerp.osv.osv.osv):
|
||||
force_company = context.get('force_company')
|
||||
if not force_company:
|
||||
force_company = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
|
||||
sequences = self.read(cr, uid, seq_ids, ['company_id','implementation','number_next','prefix','suffix','padding'])
|
||||
sequences = self.read(cr, uid, seq_ids, ['name','company_id','implementation','number_next','prefix','suffix','padding'])
|
||||
preferred_sequences = [s for s in sequences if s['company_id'] and s['company_id'][0] == force_company ]
|
||||
seq = preferred_sequences[0] if preferred_sequences else sequences[0]
|
||||
if seq['implementation'] == 'standard':
|
||||
@@ -210,8 +252,11 @@ class ir_sequence(openerp.osv.osv.osv):
|
||||
cr.execute("SELECT number_next FROM ir_sequence WHERE id=%s FOR UPDATE NOWAIT", (seq['id'],))
|
||||
cr.execute("UPDATE ir_sequence SET number_next=number_next+number_increment WHERE id=%s ", (seq['id'],))
|
||||
d = self._interpolation_dict()
|
||||
interpolated_prefix = self._interpolate(seq['prefix'], d)
|
||||
interpolated_suffix = self._interpolate(seq['suffix'], d)
|
||||
try:
|
||||
interpolated_prefix = self._interpolate(seq['prefix'], d)
|
||||
interpolated_suffix = self._interpolate(seq['suffix'], d)
|
||||
except ValueError:
|
||||
raise osv.except_osv(_('Warning'), _('Invalid prefix or suffix for sequence \'%s\'') % (seq.get('name')))
|
||||
return interpolated_prefix + '%%0%sd' % seq['padding'] % seq['number_next'] + interpolated_suffix
|
||||
|
||||
def next_by_id(self, cr, uid, sequence_id, context=None):
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<field name="suffix"/>
|
||||
<field name="padding"/>
|
||||
<field name="number_increment"/>
|
||||
<field name="number_next"/>
|
||||
<field name="number_next_actual"/>
|
||||
<field name="implementation"/>
|
||||
</group>
|
||||
<group col="3" string="Legend (for prefix, suffix)">
|
||||
@@ -57,7 +57,7 @@
|
||||
<field name="prefix"/>
|
||||
<field name="padding"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="number_next"/>
|
||||
<field name="number_next_actual"/>
|
||||
<field name="number_increment"/>
|
||||
<field name="implementation"/>
|
||||
</tree>
|
||||
|
||||
@@ -73,6 +73,7 @@ class res_currency(osv.osv):
|
||||
'position' : 'after',
|
||||
'rounding': 0.01,
|
||||
'accuracy': 4,
|
||||
'company_id': False,
|
||||
}
|
||||
_sql_constraints = [
|
||||
# this constraint does not cover all cases due to SQL NULL handling for company_id,
|
||||
|
||||
@@ -74,7 +74,8 @@ class format_address(object):
|
||||
|
||||
|
||||
def _tz_get(self,cr,uid, context=None):
|
||||
return [(x, x) for x in pytz.all_timezones]
|
||||
# put POSIX 'Etc/*' entries at the end to avoid confusing users - see bug 1086728
|
||||
return [(tz,tz) for tz in sorted(pytz.all_timezones, key=lambda tz: tz if not tz.startswith('Etc/') else '_')]
|
||||
|
||||
class res_partner_category(osv.osv):
|
||||
|
||||
|
||||
@@ -87,6 +87,12 @@
|
||||
<field name="domain_force">['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field>
|
||||
</record>
|
||||
|
||||
<record id="res_currency_rule" model="ir.rule">
|
||||
<field name="name">multi-company currency rule</field>
|
||||
<field model="ir.model" name="model_id" ref="model_res_currency"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
|
||||
@@ -291,22 +291,22 @@
|
||||
assert res_101 == [], 'res_101: expected %r, got %r' % ([], res_101)
|
||||
assert res_102 == company_ids, 'res_102: expected %r, got %r' % (company_ids, res_102)
|
||||
-
|
||||
Property of the query (one2many != False).
|
||||
Verify domain evaluation for `one2many != False`
|
||||
-
|
||||
!python {model: res.currency }: |
|
||||
ids = self.search(cr, uid, [])
|
||||
referenced_companies = set([x.company_id.id for x in self.browse(cr, uid, ids)])
|
||||
companies = set(self.pool.get('res.company').search(cr, uid, [('currency_ids', '!=', False)]))
|
||||
assert referenced_companies == companies
|
||||
!python {model: res.partner.category }: |
|
||||
all_ids = self.search(cr, uid, [])
|
||||
parent_categs = set([c.parent_id.id for c in self.browse(cr, uid, all_ids) if c.parent_id])
|
||||
result = set(self.search(cr, uid, [('child_ids', '!=', False)]))
|
||||
assert result and result == parent_categs, "Got %r, expected %r" % (result, parent_categs)
|
||||
-
|
||||
Property of the query (one2many = False).
|
||||
Verify domain evaluation for `one2many == False`
|
||||
-
|
||||
!python {model: res.currency }: |
|
||||
ids = self.search(cr, uid, [])
|
||||
referenced_companies = set([x.company_id.id for x in self.browse(cr, uid, ids)])
|
||||
unreferenced_companies = set(self.pool.get('res.company').search(cr, uid, [])).difference(referenced_companies)
|
||||
companies = set(self.pool.get('res.company').search(cr, uid, [('currency_ids', '=', False)]))
|
||||
assert unreferenced_companies == companies
|
||||
!python {model: res.partner.category }: |
|
||||
all_ids = self.search(cr, uid, [])
|
||||
parent_categs = set([c.parent_id.id for c in self.browse(cr, uid, all_ids) if c.parent_id])
|
||||
leaf_categs = set(all_ids) - parent_categs
|
||||
result = set(self.search(cr, uid, [('child_ids', '=', False)]))
|
||||
assert result and result == leaf_categs, "Got %r, expected %r" % (result, leaf_categs)
|
||||
-
|
||||
Equivalent queries.
|
||||
-
|
||||
|
||||
Regular → Executable
Reference in New Issue
Block a user