bzr revid: fp@tinyerp.com-20100824124700-mdefo6j77yaifhxc
This commit is contained in:
Fabien Pinckaers 2010-08-24 14:47:00 +02:00
commit ad4e36d09b
19 changed files with 466 additions and 420 deletions

View File

@ -179,7 +179,7 @@
<form string="Company">
<group colspan="4" col="6">
<field colspan="4" name="name" select="1"/>
<field name="partner_id" select="1"/>
<field name="partner_id" readonly="1" select="1" required="0"/>
<field name="parent_id" select="1" groups="base.group_multi_company"/>
</group>
<notebook colspan="4">

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-08-18 12:49+0000\n"
"PO-Revision-Date: 2010-08-23 06:26+0000\n"
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
"Language-Team: openerp-translators\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-08-19 03:45+0000\n"
"X-Launchpad-Export-Date: 2010-08-24 03:36+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"Language: hr\n"

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-08-18 12:43+0000\n"
"PO-Revision-Date: 2010-08-23 06:23+0000\n"
"Last-Translator: OpenERP Administrators <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: 2010-08-19 03:44+0000\n"
"X-Launchpad-Export-Date: 2010-08-24 03:36+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base

View File

@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-server\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-08-18 12:51+0000\n"
"PO-Revision-Date: 2010-08-23 06:18+0000\n"
"Last-Translator: Harry (Open ERP) <hmo@tinyerp.com>\n"
"Language-Team: Japanese <ja@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: 2010-08-19 03:45+0000\n"
"X-Launchpad-Export-Date: 2010-08-24 03:36+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: pt_BR\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-08-18 12:44+0000\n"
"PO-Revision-Date: 2010-08-23 06:28+0000\n"
"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: <pt@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: 2010-08-19 03:45+0000\n"
"X-Launchpad-Export-Date: 2010-08-24 03:36+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-08-18 12:56+0000\n"
"PO-Revision-Date: 2010-08-23 06:14+0000\n"
"Last-Translator: Anders Wallenquist <anders.wallenquist@vertel.se>\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: 2010-08-19 03:45+0000\n"
"X-Launchpad-Export-Date: 2010-08-24 03:36+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-08-18 12:47+0000\n"
"PO-Revision-Date: 2010-08-23 06:22+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\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: 2010-08-19 03:45+0000\n"
"X-Launchpad-Export-Date: 2010-08-24 03:36+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-08-18 12:53+0000\n"
"PO-Revision-Date: 2010-08-23 06:24+0000\n"
"Last-Translator: Eleanor Chen <chenyueg@gmail.com>\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: 2010-08-19 03:45+0000\n"
"X-Launchpad-Export-Date: 2010-08-24 03:37+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base

File diff suppressed because it is too large Load Diff

View File

@ -606,8 +606,20 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Role">
<field colspan="4" name="name" select="1"/>
<field colspan="4" name="parent_id"/>
<field name="name" select="1"/>
<field name="parent_id"/>
<separator string="Description" colspan="4"/>
<field name="description" nolabel="1" colspan="4"/>
<separator string="Workflow transitions" colspan="4"/>
<field name="workflow_transition_ids" nolabel="1" colspan="4">
<tree string="Workflow transitions">
<field name="wkf_id"/>
<field name="act_from"/>
<field name="act_to"/>
<field name="signal"/>
<field name="condition"/>
</tree>
</field>
</form>
</field>
</record>
@ -619,6 +631,8 @@
<field name="arch" type="xml">
<tree string="Roles">
<field name="name"/>
<field name="parent_id"/>
<field name="description"/>
</tree>
</field>
</record>

View File

@ -151,6 +151,7 @@ class wkf_transition(osv.osv):
'condition': fields.char('Condition', required=True, size=128),
'act_from': fields.many2one('workflow.activity', 'Source Activity', required=True, select=True, ondelete='cascade'),
'act_to': fields.many2one('workflow.activity', 'Destination Activity', required=True, select=True, ondelete='cascade'),
'wkf_id': fields.related('act_from','wkf_id', type='many2one', relation='workflow', string='Workflow', select=True),
}
_defaults = {
'condition': lambda *a: 'True',

View File

@ -33,7 +33,7 @@ view_form="""<?xml version="1.0"?>
<field name="name" width="200"/>
<field name="code"/>
<field name="data" colspan="4"/>
<label string="You have to import a .CSV file wich is encoded in UTF-8.\n
<label string="You have to import a .CSV file which is encoded in UTF-8.\n
Please check that the first line of your file is one of the following:" colspan="4" align="0.0"/>
<label string="type,name,res_id,src,value" colspan="4"/>
<label string="module,type,name,res_id,src,value" colspan="4"/>

View File

@ -396,6 +396,7 @@
<field name="domain">[]</field>
<field name="context">{'default_customer':0, 'search_default_supplier': 1, 'default_supplier':1}</field>
<field name="filter" eval="True"/>
<field name="help">With the Suppliers menu, you have access to all informations regarding your suppliers, including an history to track event (crm) and his accounting properties.</field>
</record>
<record id="action_partner_employee_form" model="ir.actions.act_window">

View File

@ -42,7 +42,7 @@ class multi_company_default(osv.osv):
'company_dest_id': fields.many2one('res.company', 'Default Company', required=True,
help='Company to store the current record'),
'object_id': fields.many2one('ir.model', 'Object', required=True,
help='Object affect by this rules'),
help='Object affected by this rule'),
'expression': fields.char('Expression', size=256, required=True,
help='Expression, must be True to match\nuse context.get or user (browse)'),
'field_id': fields.many2one('ir.model.fields', 'Field', help='Select field property'),
@ -162,9 +162,17 @@ class res_company(osv.osv):
def cache_restart(self, cr):
self._get_company_children.clear_cache(cr.dbname)
def create(self, cr, *args, **argv):
def create(self, cr, uid, vals, context=None):
if not vals.get('name', False) or vals.get('partner_id', False):
self.cache_restart(cr)
return super(res_company, self).create(cr, uid, vals, context=context)
obj_partner = self.pool.get('res.partner')
partner_id = obj_partner.create(cr, uid, {'name': vals['name']}, context=context)
vals.update({'partner_id': partner_id})
self.cache_restart(cr)
return super(res_company, self).create(cr, *args, **argv)
company_id = super(res_company, self).create(cr, uid, vals, context=context)
obj_partner.write(cr, uid, partner_id, {'company_id': company_id}, context=context)
return company_id
def write(self, cr, *args, **argv):
self.cache_restart(cr)

View File

@ -10,5 +10,24 @@
<field eval="[(6,0,[ref('group_system'), ref('group_partner_manager')])]" name="groups_id"/>
</record>
<!-- Record Rule For Company -->
<record id="res_company_rule" model="ir.rule">
<field name="name">company rule</field>
<field model="ir.model" name="model_id" ref="model_res_company"/>
<field eval="True" name="global"/>
<field name="domain_force">['|',('user_ids','=',user.id),('parent_id','=',user.company_id.id)]</field>
</record>
<!-- Record Rule For User -->
<record id="res_users_rule" model="ir.rule">
<field name="name">user rule</field>
<field model="ir.model" name="model_id" ref="model_res_users"/>
<field eval="True" name="global"/>
<field name="domain_force">['|',('company_id','=',user.company_id.id),('company_id','child_of',[user.company_id.id])]</field>
</record>
</data>
</openerp>

View File

@ -93,13 +93,19 @@ class roles(osv.osv):
_name = "res.roles"
_columns = {
'name': fields.char('Role Name', size=64, required=True),
'parent_id': fields.many2one('res.roles', 'Parent', select=True),
'parent_id': fields.many2one('res.roles', 'Parent', select=True,
help="The parent role can be used to construct a hierarchy of roles. Parent roles inherit from the roles of their descendants."),
'child_id': fields.one2many('res.roles', 'parent_id', 'Children'),
'users': fields.many2many('res.users', 'res_roles_users_rel', 'rid', 'uid', 'Users'),
}
_defaults = {
'description': fields.text('Description', help="Description of this role and where it is relevant in workflows and processes"),
'workflow_transition_ids': fields.one2many('workflow.transition', 'role_id', 'Workflow Transitions',
help="The workflow transitions associated with this role"),
}
def check(self, cr, uid, ids, role_id):
"""Verifies that the role with id ``role_id`` is granted directly or indirectly to a
user that possesses the roles with ids ``ids``. Indirectly means that one of the
roles with id in ``ids`` is an ancestor role of the role with id ``role_id``.
"""
if role_id in ids:
return True
cr.execute('select parent_id from res_roles where id=%s', (role_id,))

View File

@ -103,10 +103,12 @@ class ExportService(object):
_services = {}
_groups = {}
_logger = logging.getLogger('web-services')
def __init__(self, name, audience=''):
ExportService._services[name] = self
self.__name = name
self._logger.info("Exported service registered: %s" % name)
def joinGroup(self, name):
ExportService._groups.setdefault(name, {})[self.__name] = self

View File

@ -115,6 +115,7 @@ class expression(object):
if self._is_operator(e) or e == self.__DUMMY_LEAF:
continue
left, operator, right = e
operator = operator.lower()
working_table = table
main_table = table
fargs = left.split('.', 1)
@ -278,15 +279,34 @@ class expression(object):
dom = _rec_get(ids2, working_table, parent=left)
self.__exp = self.__exp[:i] + dom + self.__exp[i+1:]
else:
if isinstance(right, basestring): # and not isinstance(field, fields.related):
def _get_expression(field_obj,cr, uid, left, right, operator, context=None):
if context is None:
context = {}
c = context.copy()
c['active_test'] = False
dict_op = {'not in':'!=','in':'='}
if isinstance(right,tuple):
right = list(right)
if (not isinstance(right,list)) and operator in ['not in','in']:
operator = dict_op[operator]
res_ids = field_obj.name_search(cr, uid, right, [], operator, limit=None, context=c)
if not res_ids:
self.__exp[i] = ('id','=',0)
return ('id','=',0)
else:
right = map(lambda x: x[0], res_ids)
self.__exp[i] = (left, 'in', right)
return (left, 'in', right)
m2o_str = False
if isinstance(right, basestring): # and not isinstance(field, fields.related):
m2o_str = True
elif isinstance(right, list) or isinstance(right, tuple):
m2o_str = True
for ele in right:
if not isinstance(ele, basestring):
m2o_str = False
break
if m2o_str:
self.__exp[i] = _get_expression(field_obj,cr, uid, left, right, operator, context=context)
else:
# other field type
# add the time part to datetime field when it's not there:

114
setup.py
View File

@ -32,8 +32,8 @@ import os
from os.path import join, isfile, basename
import glob
from distutils.core import setup, Command
from distutils.command.install import install
from setuptools import setup, find_packages
from setuptools.command.install import install
from distutils.sysconfig import get_python_lib
has_py2exe = False
@ -51,54 +51,10 @@ if 'bdist_rpm' in sys.argv:
# get python short version
py_short_version = '%s.%s' % sys.version_info[:2]
required_modules = [
('lxml', 'lxml module: pythonic libxml2 and libxslt bindings'),
('mako', 'Mako template engine'),
('dateutil', "Extensions to the standard datetime module"),
('psycopg2', 'PostgreSQL module'),
('pychart', 'pychart module'),
('pydot', 'pydot module'),
('pytz', 'Timezone handling library for Python'),
('reportlab', 'reportlab module'),
('yaml', 'YAML parser and emitter for Python'),
('DAV', 'PyWebDAV is a standards compliant WebDAV server and library written in Python'),
]
def check_modules():
errors = []
for modname, desc in required_modules:
try:
imp.find_module(modname)
except ImportError:
errors.append(
'Error: python module %s (%s) is required' % (modname, desc))
if errors:
print '\n'.join(errors)
sys.exit(1)
def find_addons():
for root, _, names in os.walk(join('bin', 'addons')):
for root, _, names in os.walk(join('bin', 'addons'), followlinks=True):
if '__openerp__.py' in names or '__terp__.py' in names:
yield basename(root), root
#look for extra modules
try:
empath = os.getenv('EXTRA_MODULES_PATH', '../addons/')
for mname in open(join(empath, 'server_modules.list')):
mname = mname.strip()
if not mname:
continue
terp = join(empath, mname, '__openerp__.py')
if not os.path.exists(terp):
terp = join(empath, mname, '__terp__.py')
if os.path.exists(terp):
yield mname, join(empath, mname)
else:
print "Module %s specified, but no valid path." % mname
except:
pass
def data_files():
'''Build list of data files to be installed'''
@ -145,9 +101,6 @@ def data_files():
return files
if not os.getenv('NO_CHECK_MODULES') :
check_modules()
f = file('openerp-server','w')
f.write("""#!/bin/sh
echo "Error: the content of this file should have been replaced during "
@ -173,6 +126,8 @@ class openerp_server_install(install):
f.close()
install.run(self)
options = {
"py2exe": {
"compressed": 1,
@ -201,37 +156,42 @@ setup(name = name,
license = license,
data_files = data_files(),
cmdclass = {
'install' : openerp_server_install,
'install' : openerp_server_install,
},
scripts = ['openerp-server'],
packages = ['openerp-server',
'openerp-server.addons',
'openerp-server.ir',
'openerp-server.osv',
'openerp-server.pychart',
'openerp-server.pychart.afm',
'openerp-server.report',
'openerp-server.report.printscreen',
'openerp-server.report.pyPdf',
'openerp-server.report.render',
'openerp-server.report.render.html2html',
'openerp-server.report.render.makohtml2html',
'openerp-server.report.render.odt2odt',
'openerp-server.report.render.rml2html',
'openerp-server.report.render.rml2pdf',
'openerp-server.report.render.rml2txt',
'openerp-server.service',
'openerp-server.tools',
'openerp-server.wizard',
'openerp-server.workflow'] + \
[('openerp-server.addons.' + name)
for name, _ in find_addons()],
packages = [
'.'.join(['openerp-server'] + package.split('.')[1:]) for package in find_packages()
],
package_dir = find_package_dirs(),
console = [{"script": join("bin", "openerp-server.py"),
"icon_resources": [(1,join("pixmaps","openerp-icon.ico"))]
}],
console = [
{
"script": join("bin", "openerp-server.py"),
"icon_resources": [(1, join("pixmaps","openerp-icon.ico"))]
}
],
options = options,
)
install_requires = ['lxml',
'mako',
'python-dateutil',
'psycopg2',
'pychart',
'pydot',
'pytz',
'reportlab',
'caldav',
'pyyaml',
'sqlalchemy',
'django',
'pywebdav'
'cx_Oracle',
'mysqldb',
'feedparser',
'bsddb3',
'egenix-mx-base'],
extras_require={
'SSL' : ['pyopenssl'],
}
)
if has_py2exe:
# Sometime between pytz-2008a and pytz-2008i common_timezones started to