[quote author=javic link=topic=9207.msg19013#msg19013 date=1376134998]
想用OE7开发一套餐饮管理系统,可行否?
[/quote]
用合适的工具做合适的事情
openerp虽有二次开发功能,但他并非是个合适的开发工具
jjx
-
想用OE7开发一套餐饮管理系统 -
请教数据纪录实时保存的问题[quote author=digitalsatori link=topic=2800.msg9443#msg9443 date=1331214475]
@jjx 终于又看到你的身影了,真是久违了
要寻找大牛的弟兄们,大牛现身了,别再让他跑了
[/quote]
绝不敢当啊,比在座各位对openerp的理解差远了,现在正在每天看贴子学习呢 -
请教数据纪录实时保存的问题订单确认执行的是工作流 转换
你这个需求应该在sale_order 的create 中进行
判断vals的order_line是否是[] 无明细或对其中的记录进行判断来确定 -
Openerp 增加明细行时更新主表的汇总字段通常,这任务可以覆盖主表 objects 的create或 write方法来达成,但为了给操作者一个实时的观感,最好在用户更新或增加明细行时更新界面上的汇总字段
这 需要了解一对多的数值格式
<A href="http://openerp.com/wiki/index.php/Developers:Developper's_Book/Objects/ObjectsAccess/ObjectsWritingValues" target="_blank"> openerp.com/wiki/index.php/Developers :Developper%27s_Book/Objects/ObjectsAccess/ObjectsWritingValues
如:
[(1,1,{'item_id':1,'price':30,'cost':20,'quantity':1}),(0,0,{'item_id':3,'price';20,'cost':20,'quantity':10}]可以明确的有以下几点
- 这是一个列表
- 列表元素是一个tuple
- 每个tuple有三个元素,op,id,values ,其中op 表示动作,有0 -create ,1- write ,2 unlink(删除) ,6- values 是一个记录id值的列表,表示将这些id值的记录作为多方保存,id 是具体记录的编号,当op为0时,为0,values 在op是0,1,2的情况下是一个字段名:值的词典
为一对多字段增加on_change属性
<field name='line_ids' noable='1' colspan='4' on_change='line_ids_changed(line_ids)'/>
在objects中写方法def line_ids_changed(self,cr,uid,ids,line_ids):
amount=0
for row in line_ids:
if row[0] in (0,1):
amount += row[2]['quantity']*row[2]['price']
return {'value':{'total_amount':amount}}[b]问题,如果在view中将total_amount的reaonly 为1(在objects定义中设置字段的readonly=True效果相同),则在保存时该汇总字段不会被保存. 这个举止是有问题的,因为通常readonly只是意味着阻止用户手动更新 . 并不意味着阻止程序更新[/b]
[[i] 本帖最后由 jjx 于 2008-8-18 11:12 编辑 [/i]]
-
Etiny 本地化方法etiny 的本地化其实就是turbogears 的本地化,同大部分python应用一样.本质上都是在用gettext.鉴于我本身不使用turbogears ,摘录这些步骤备忘
进入etiny目录,通常是c:python25libsite-packageseTiny-xxxxx
- 运行tg-admin --config=config/default.cfg i18n collect
该命令会在locales 生成messages.pot文件
- 添加中文
默认的,在locales 目录只有fr,你可以通过如下命令增加中文支持
tg-admin --config=config/default.cfg i18n add zh
zh也可以是zh-CN 添加繁体可以是zh-TW
该命令会在locales 目录创建zhLC_MESSAGES 目录并将messages.pot文件复制到该目录并更名为messages.po
注意,该过程只需要做一次
- 修改messages.po文件中的msgstr部分,并编译
tg-admin --config=config/default.cfg i18n compile
以后只需要重复1和3
turboGears 使用的模板是kid www.kid-templating.org/language.html ,在kid模板中,对需要本地化的词汇使用_("") 进行标识, tg-admin i18n collect命令会收集这些字符串. 在kid 模板中用${} 进行表达式置换,所以,通常的用法是
例子:
etinyxxx/tinyep/templaes/master.kid
原来的<a href="/about">About</a>
可替换为 <a hrer="/about">${_('About')}</a> 进行本地化
执行1和3,然后重新启动start-tinyerp 登录后就能看到效果
-
运行后有几个问题你客气了,呵呵. 像视图,如果在客户端的系统管理-自定义-界面-视图中修改, 是立即反映变化的,你可能是指这个.我的意思是说修改view的xml文件,在客户端是没有反应变化,只有更新模板才行
因为tiny会将view等的定义装载到数据库中去,更新这个动作就应该,将视图定义写入或更新数据库过程. 在自定义-界面-视图中修改的是数据库的东西其实如果两者是双向的就行,比方修改数据库时同步到xml文件或是监视文件的变化,将文件同步到数据库中. 这个实现起来不难,就看tinyerp的团队如何考虑的了
-
运行后有几个问题tinyerp 采用了类似eclipse的插件机制, base account这两个模块是基本模块,大部分模块都依赖他们, 从编程角度而言,依赖就意味着重用,这是一种双刃剑,过多的依赖也不好,如果没有 依赖,通常也就意味着没有重用
这种东西要用,肯定是要开发人员介入的, 不用说这个开源的,连商业的100%都不能够拿来就用的. 因为这个毕竟不是有针对性的财务软件或是进销存,更何况是老外做的.我现在在做一个axapta项目,ui基本都是重新构造,原来的那种ui,给那些一线用户,一打开他们就晕掉了
tinyerp 现在的思路是好的,比方说把基础架构单独出openobject ,但这部分还需要加强,现在wiki 上文档很多都是todo, 另外,这两天我试了一下,开发还是有点麻烦,没有利用python的一些特点,比方说在开发时即修改即生效,开发时用shell交互的调式.(可以举例的是django的开发时是即修改即生效的,还有就可以用manage.py shell 进入python提示符做些交互性的测试)
现在修改一个模块必须要更新模块才能反应变化,效率太低
[[i] 本帖最后由 jjx 于 2008-8-12 17:22 编辑 [/i]]
-
下载codegen_openerp.py下载可以下载 安装 Bazaar.
然后从Launchpad 下载bzr clone lp:~openerp-commiter/openobject-addons/trunk-extra-addons extra-addons
可参考这个blog
stephane-wirtel-at-tiny.blogspot.com/2008/08/how-to-get-trunk-version-from-launchpad.html -
Etiny 启动问题过奖,我这个是今天早上用 easy_install etiny 安装的, 查看了一下调用链,会调用etinyxxtinyerpcommands.py . 这里有
if len(sys.argv) > 1:
configfile = sys.argv[1]
elif exists(join(setupdir, "setup.py")):
configfile = join(setupdir, "dev.cfg")
elif exists(join(curdir, "prod.cfg")):
configfile = join(curdir, "prod.cfg")
else:
try:
configfile = pkg_resources.resource_filename(
pkg_resources.Requirement.parse("eTiny"),
"config/default.cfg")
except pkg_resources.DistributionNotFound:
raise ConfigurationError(_("Could not find default configuration."))说明是先取命令行参数,然后依次是有setup.py取dev.cfg,否则取prod.cfg,都没有,则取config/default.cfg,第一个取绝对路径,后二个都在etiny的根目录,后一个在config/default.cfg
晚上我想了一下,既然报错是出在
File "c:python25libsite-packagescherrypy-2.3.0-py2.5.eggcherrypy_cpserve
r.py", line 253, in wait_for_free_port
这里,而我又确认端口是可用的 ,所以,就干脆在该文件这个函数后直接加了个return
def wait_for_free_port(host, port):
"""Wait for the specified port to become free (drop requests)."""
return这样,etiny就跑起来了
真是奇怪
[[i] 本帖最后由 jjx 于 2008-8-8 19:43 编辑 [/i]]
-
Etiny 启动问题按说明安装完毕后
start-tinyerp
出现cherrypy._cperror.NotReady: Port not free好,去 修改
server.socket_port=8000
试了无数个端口,这些端口应该是没有占用的
都是cherrypy._cperror.NotReady: Port not free
最后都直接到turbogearsstartup.py中了
加了tg.fancy_exception=True的设置,直接使用SimpleWSGIServer
在 都直接写port 了CherryPyWSGIServer.__init__(self, ('192.168.1.169',8999), wsgi_app, 1, '192.168.1.169', request_queue_size = conf( "server.socket_queue_size"), )
包括直接更新cherrypy的配置
cherrypy.config.update({'server.socket_port':8999,'server.socket_host':'192.168.1.169'})最后还是提示
cherrypy._cperror.NotReady: Port not free看来只好归结人品问题了