This commit is contained in:
uspallek@bart.dsl committed 2008-08-05 07:48:19 +02:00
commit 2d44cec016
6 files changed
+61 -26

No files matched your search

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

+26 -10
View File
@@ -192,8 +192,19 @@ class NumericField(FloatField):
def set_client(self, model, value, test_state=True, force_change=False):
value = Decimal(str(value))
return super(NumericField, self).set_client(model, value,
test_state=test_state, force_change=force_change)
internal = model.value[self.name]
self.set(model, value, test_state)
if isinstance(self.attrs.get('digits'), str):
digits = model.expr_eval(self.attrs['digits'])
else:
digits = self.attrs.get('digits', (12, 2))
if abs((internal or Decimal('0.0')) - (model.value[self.name] or Decimal('0.0'))) \
>= Decimal(str(10.0**(-int(digits[1])))):
if not self.get_state_attrs(model).get('readonly', False):
model.modified = True
model.modified_fields.setdefault(self.name)
self.sig_changed(model)
model.signal('record-changed', model)
class IntegerField(CharField):
@@ -341,7 +352,7 @@ class O2MField(CharField):
for model2 in model.value[self.name].models:
if (modified and not model2.is_modified()):
continue
if model2.id:
if model2.id > 0:
result.append(('write', model2.id,
model2.get(check_load=check_load, get_readonly=readonly,
get_modifiedonly=modified)))
@@ -408,14 +419,12 @@ class O2MField(CharField):
return True
def set_on_change(self, model, value):
from group import ModelRecordGroup
if value and value.get('add'):
if value and (value.get('add') or value.get('update')):
context = self.context_get(model)
rpc2 = RPCProxy(self.attrs['relation'])
try:
fields_name = []
for val in value['add']:
for val in (value.get('add', []) + value.get('update', [])):
for fieldname in val.keys():
if fieldname not in fields_name:
fields_name.append(fieldname)
@@ -436,12 +445,19 @@ class O2MField(CharField):
model.value[self.name].remove(mod)
mod = None
if value and value.get('add'):
if value and value.get('add') or value.get('update', []):
model.value[self.name].add_fields(fields, model.value[self.name])
for record in (value['add'] or []):
for record in value.get('add', []):
mod = model.value[self.name].model_new(default=False)
model.value[self.name].model_add(mod)
mod.set(record, modified=True, signal=True)
mod.set(record, modified=True, signal=False)
for record in value.get('update', []):
if 'id' not in record:
continue
mod = model.value[self.name].get_by_id(record['id'])
if mod:
mod.set(record, modified=True, signal=False)
model.value[self.name].current_model = mod
return True
+2 -2
View File
@@ -287,7 +287,7 @@ class ModelRecordGroup(SignalEvent):
def remove(self, model, remove=False, modified=True):
idx = self.models.index(model)
if self.models[idx].id:
if self.models[idx].id > 0:
if remove:
self.model_removed.append(self.models[idx].id)
else:
@@ -325,7 +325,7 @@ class ModelRecordGroup(SignalEvent):
old = []
new = []
for model in models:
if model.id:
if model.id > 0:
if model.is_modified():
old.append(model.id)
elif to_add:
+17 -9
View File
@@ -23,12 +23,18 @@ class EvalEnvironment(object):
class ModelRecord(SignalEvent):
id = -1
def __init__(self, resource, obj_id, window, group=None, parent=None, new=False ):
global ID_COUNT
super(ModelRecord, self).__init__()
self.window = window
self.resource = resource
self.rpc = RPCProxy(self.resource)
self.id = obj_id
self.id = obj_id or ModelRecord.id
if self.id < 0:
ModelRecord.id -= 1
self._loaded = False
self.parent = parent
self.mgroup = group
@@ -47,7 +53,7 @@ class ModelRecord(SignalEvent):
self.value[key].model_add(mod)
def __getitem__(self, name):
if not self._loaded and self.id:
if not self._loaded and self.id > 0:
ids = [self.id]
idx = self.mgroup.models.index(self)
length = len(self.mgroup.models)
@@ -135,7 +141,7 @@ class ModelRecord(SignalEvent):
def save(self, force_reload=True):
self._check_load()
if not self.id:
if self.id < 0:
value = self.get(get_readonly=True)
try:
self.id = self.rpc.create(value, self.context_get())
@@ -143,7 +149,7 @@ class ModelRecord(SignalEvent):
self.id = common.process_exception(exception, self.window, 'object',
'execute', self.resource, 'create', value,
self.context_get())
if not self.id:
if not self.id or self.id < 0:
return False
else:
if not self.is_modified():
@@ -256,7 +262,7 @@ class ModelRecord(SignalEvent):
self.signal('record-changed')
def reload(self):
if not self.id:
if self.id < 0:
return
ctx = rpc.CONTEXT.copy()
ctx.update(self.context_get())
@@ -297,7 +303,7 @@ class ModelRecord(SignalEvent):
args[arg] = self.expr_eval(arg)
except:
args[arg] = False
ids = self.id and [self.id] or []
ids = [self.id]
ctx = rpc.CONTEXT.copy()
ctx.update(self.context_get())
try:
@@ -320,19 +326,21 @@ class ModelRecord(SignalEvent):
self.mgroup.mfields[fieldname].set_on_change(self, value)
self.signal('record-changed')
def on_change_with(self, fieldname):
def on_change_with(self, field_name):
for fieldname in self.mgroup.mfields:
on_change_with = self.mgroup.mfields[fieldname].attrs.get(
'on_change_with')
if not on_change_with:
continue
if field_name not in on_change_with:
continue
args = {}
for arg in on_change_with:
try:
args[arg] = self.expr_eval(arg)
except:
args[arg] = False
ids = self.id and [self.id] or []
ids = [self.id]
ctx = rpc.CONTEXT.copy()
ctx.update(self.context_get())
try:
@@ -357,7 +365,7 @@ class ModelRecord(SignalEvent):
field_name + '=' + str(value), ctx))
def get_attachment_count(self, reload=False):
if not self.id:
if self.id < 0:
return 0
if self.attachment_count < 0 or reload:
ir_attachment = RPCProxy('ir.attachment')
+1 -1
View File
@@ -461,7 +461,7 @@ class Screen(SignalEvent):
reload_ids = []
if self.current_view.view_type == 'form' and self.current_model:
obj_id = self.current_model.id
if delete and obj_id:
if delete and obj_id > 0:
try:
reload_ids = self.models.on_write_ids(obj_id)
if reload_ids and obj_id in reload_ids:
@@ -160,6 +160,7 @@ class Dialog(object):
self.dia = gtk.Dialog(_('Link'), window,
gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT)
self.dia.connect('close', self._sig_close)
self.window = window
self.dia.set_property('default-width', 760)
self.dia.set_property('default-height', 500)
@@ -169,11 +170,11 @@ class Dialog(object):
self.accel_group = gtk.AccelGroup()
self.dia.add_accel_group(self.accel_group)
icon_cancel = gtk.STOCK_CLOSE
self.but_cancel = None
if not model:
icon_cancel = gtk.STOCK_CANCEL
self.but_cancel = self.dia.add_button(icon_cancel,
gtk.RESPONSE_CANCEL)
self.but_cancel = self.dia.add_button(icon_cancel,
gtk.RESPONSE_CANCEL)
self.but_ok = self.dia.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
self.but_ok.add_accelerator('clicked', self.accel_group,
@@ -366,13 +367,23 @@ class Dialog(object):
if not end:
self.screen.current_view.set_cursor()
self.screen.display()
self.but_cancel.set_label(gtk.STOCK_CLOSE)
if self.but_cancel:
self.but_cancel.set_label(gtk.STOCK_CLOSE)
if res == gtk.RESPONSE_OK:
model = self.screen.current_model
return (True, model)
return (False, None)
def _sig_close(self, widget):
self.screen.current_view.set_value()
if not self.but_cancel \
and self.screen.current_model \
and not self.screen.current_model.validate():
self.screen.current_view.set_cursor()
self.screen.display()
widget.emit_stop_by_name('close')
def destroy(self):
self.screen.signal_unconnect(self)
self.window.present()