1 parent
74540107b1
commit
54fad3a1c8
8 files changed
+82
-50
No files matched your search
+1
-3
@@ -1506,9 +1506,7 @@
|
||||
do_export: function(export_) {
|
||||
this.modified_save().then(() => {
|
||||
var ids, paths;
|
||||
if (this.screen.current_view &&
|
||||
(this.screen.current_view.view_type == 'tree') &&
|
||||
this.screen.current_view.children_field) {
|
||||
if (export_.records == 'listed') {
|
||||
ids = this.screen.listed_records.map(r => r.id);
|
||||
paths = this.screen.listed_paths;
|
||||
} else {
|
||||
|
||||
+29
-23
@@ -1939,11 +1939,14 @@
|
||||
'method': 'model.ir.export.search_read',
|
||||
'params': [
|
||||
[['resource', '=', this.screen.model_name]], 0, null, null,
|
||||
['name', 'export_fields.name'], {}],
|
||||
['name', 'header', 'records', 'export_fields.name'], {}],
|
||||
}, this.session).done(exports => {
|
||||
for (const export_ of exports) {
|
||||
this.predef_exports[export_.id] = export_['export_fields.']
|
||||
.map(field => field.name);
|
||||
this.predef_exports[export_.id] = {
|
||||
'fields': export_['export_fields.'].map(
|
||||
field => field.name),
|
||||
'values': export_,
|
||||
};
|
||||
this.add_to_predef(export_.id, export_.name);
|
||||
this.predef_exports_list.children('li').first().focus();
|
||||
}
|
||||
@@ -1981,38 +1984,37 @@
|
||||
|
||||
const save = name => {
|
||||
var prm;
|
||||
var values = {
|
||||
'header': this.el_add_field_names.is(':checked'),
|
||||
'records': (
|
||||
JSON.parse(this.selected_records.val()) ?
|
||||
'selected' : 'listed'),
|
||||
};
|
||||
if (!pref_id) {
|
||||
values.name = name;
|
||||
values.resource = this.screen.model_name;
|
||||
values.export_fields = [
|
||||
['create', fields.map(f => ({'name': f}))]];
|
||||
prm = Sao.rpc({
|
||||
method: 'model.ir.export.create',
|
||||
params: [[{
|
||||
name: name,
|
||||
resource: this.screen.model_name,
|
||||
header: this.el_add_field_names.is(':checked'),
|
||||
export_fields: [['create', fields.map(function(f) {
|
||||
return {name: f};
|
||||
})]],
|
||||
}], this.context],
|
||||
}, this.session).then(function(new_ids) {
|
||||
return new_ids[0];
|
||||
});
|
||||
params: [[values], this.context],
|
||||
}, this.session).then(([id]) => id);
|
||||
} else {
|
||||
prm = Sao.rpc({
|
||||
method: 'model.ir.export.update',
|
||||
params: [[pref_id], fields, this.context],
|
||||
}, this.session).then(function() {
|
||||
return pref_id;
|
||||
});
|
||||
params: [[pref_id], values, fields, this.context],
|
||||
}, this.session).then(() => pref_id);
|
||||
}
|
||||
return prm.then(pref_id => {
|
||||
this.session.cache.clear(
|
||||
'model.' + this.screen.model_name + '.view_toolbar_get');
|
||||
this.predef_exports[pref_id] = fields;
|
||||
this.predef_exports[pref_id] = {
|
||||
'fields': fields,
|
||||
'values': values,
|
||||
};
|
||||
if (selection.length === 0) {
|
||||
this.add_to_predef(pref_id, name);
|
||||
}
|
||||
else {
|
||||
selection.attr('export_id', pref_id);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -2050,7 +2052,8 @@
|
||||
},
|
||||
sel_predef: function(export_id) {
|
||||
this.fields_selected.empty();
|
||||
for (const name of this.predef_exports[export_id]) {
|
||||
const export_ = this.predef_exports[export_id];
|
||||
for (const name of export_.fields) {
|
||||
if (!(name in this.fields)) {
|
||||
var fields = this.fields_model;
|
||||
var prefix = '';
|
||||
@@ -2062,6 +2065,9 @@
|
||||
}
|
||||
this.sel_field(name);
|
||||
}
|
||||
this.el_add_field_names.prop('checked', export_.values.header);
|
||||
this.selected_records.val(
|
||||
JSON.stringify(export_.values.records == 'selected'));
|
||||
},
|
||||
_traverse: function(fields, prefix, parents, i) {
|
||||
var field, item;
|
||||
|
||||
@@ -408,9 +408,7 @@ class Form(TabContent):
|
||||
def do_export(self, widget, export):
|
||||
if not self.modified_save():
|
||||
return
|
||||
if (self.screen.current_view
|
||||
and self.screen.current_view.view_type == 'tree'
|
||||
and self.screen.current_view.children_field):
|
||||
if export.get('records') == 'listed':
|
||||
ids = [r.id for r in self.screen.listed_records]
|
||||
paths = self.screen.listed_paths
|
||||
else:
|
||||
|
||||
@@ -99,15 +99,16 @@ class WinExport(WinCSV):
|
||||
|
||||
self.pref_export = Gtk.TreeView()
|
||||
self.pref_export.append_column(
|
||||
Gtk.TreeViewColumn(_('Name'), Gtk.CellRendererText(), text=2))
|
||||
Gtk.TreeViewColumn(_('Name'), Gtk.CellRendererText(), text=1))
|
||||
scrolledwindow_exports.add(self.pref_export)
|
||||
self.pref_export.connect("button-press-event", self.export_click)
|
||||
self.pref_export.connect("key-press-event", self.export_keypress)
|
||||
|
||||
self.predef_model = Gtk.ListStore(
|
||||
GObject.TYPE_INT,
|
||||
GObject.TYPE_PYOBJECT,
|
||||
GObject.TYPE_STRING)
|
||||
GObject.TYPE_INT,
|
||||
GObject.TYPE_STRING,
|
||||
GObject.TYPE_PYOBJECT,
|
||||
GObject.TYPE_PYOBJECT)
|
||||
self.fill_predefwin()
|
||||
|
||||
def add_chooser(self, box):
|
||||
@@ -216,15 +217,16 @@ class WinExport(WinCSV):
|
||||
exports = RPCExecute(
|
||||
'model', 'ir.export', 'search_read',
|
||||
[('resource', '=', self.model)], 0, None, None,
|
||||
['name', 'export_fields.name'],
|
||||
['name', 'header', 'records', 'export_fields.name'],
|
||||
context=self.context)
|
||||
except RPCException:
|
||||
return
|
||||
for export in exports:
|
||||
self.predef_model.append((
|
||||
export['id'],
|
||||
export['name'],
|
||||
[f['name'] for f in export['export_fields.']],
|
||||
export['name']))
|
||||
export))
|
||||
self.pref_export.set_model(self.predef_model)
|
||||
|
||||
def addreplace_predef(self, widget):
|
||||
@@ -248,31 +250,39 @@ class WinExport(WinCSV):
|
||||
return
|
||||
else:
|
||||
pref_id = model.get_value(iter_, 0)
|
||||
name = model.get_value(iter_, 2)
|
||||
name = model.get_value(iter_, 1)
|
||||
override = common.sur(_("Override '%s' definition?") % name)
|
||||
if not override:
|
||||
return
|
||||
try:
|
||||
values = {
|
||||
'header': self.add_field_names.get_active(),
|
||||
'records': (
|
||||
'selected' if self.selected_records.get_active()
|
||||
else 'listed'),
|
||||
}
|
||||
if not pref_id:
|
||||
pref_id, = RPCExecute('model', 'ir.export', 'create', [{
|
||||
values.update({
|
||||
'name': name,
|
||||
'resource': self.model,
|
||||
'header': self.add_field_names.get_active(),
|
||||
'export_fields': [('create', [{
|
||||
'name': x,
|
||||
} for x in fields])],
|
||||
}], context=self.context)
|
||||
'export_fields': [
|
||||
('create', [{'name': x, } for x in fields])],
|
||||
})
|
||||
pref_id, = RPCExecute(
|
||||
'model', 'ir.export', 'create', [values],
|
||||
context=self.context)
|
||||
else:
|
||||
RPCExecute('model', 'ir.export', 'update', [pref_id], fields,
|
||||
RPCExecute(
|
||||
'model', 'ir.export', 'update', [pref_id], values, fields,
|
||||
context=self.context)
|
||||
except RPCException:
|
||||
return
|
||||
clear_cache('model.%s.view_toolbar_get' % self.model)
|
||||
if iter_ is None:
|
||||
self.predef_model.append((pref_id, fields, name))
|
||||
self.predef_model.append((pref_id, name, fields, values))
|
||||
else:
|
||||
model.set_value(iter_, 0, pref_id)
|
||||
model.set_value(iter_, 1, fields)
|
||||
model.set_value(iter_, 2, fields)
|
||||
model.set_value(iter_, 3, values)
|
||||
|
||||
def remove_predef(self, widget):
|
||||
sel = self.pref_export.get_selection().get_selected()
|
||||
@@ -296,7 +306,8 @@ class WinExport(WinCSV):
|
||||
|
||||
def sel_predef(self, path):
|
||||
self.model2.clear()
|
||||
for name in self.predef_model[path[0]][1]:
|
||||
_, _, fields, values = self.predef_model[path[0]]
|
||||
for name in fields:
|
||||
if name not in self.fields:
|
||||
iter = self.model1.get_iter_first()
|
||||
prefix = ''
|
||||
@@ -316,6 +327,10 @@ class WinExport(WinCSV):
|
||||
continue
|
||||
self.sel_field(name)
|
||||
|
||||
self.add_field_names.set_active(values.get('header'))
|
||||
self.selected_records.set_active(
|
||||
int(values.get('records') == 'selected'))
|
||||
|
||||
def sel_field(self, name):
|
||||
string_, relation = self.fields[name]
|
||||
if relation:
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
* Store records selection on export
|
||||
|
||||
Version 6.8.0 - 2023-05-01
|
||||
--------------------------
|
||||
|
||||
@@ -31,6 +31,11 @@ class Export(_ClearCache, ModelSQL, ModelView):
|
||||
header = fields.Boolean(
|
||||
"Header",
|
||||
help="Check to include field names on the export.")
|
||||
records = fields.Selection([
|
||||
('selected', "Selected"),
|
||||
('listed', "Listed"),
|
||||
], "Records",
|
||||
help="The records on which the export runs.")
|
||||
export_fields = fields.One2Many('ir.export.line', 'export',
|
||||
'Fields')
|
||||
|
||||
@@ -45,9 +50,14 @@ class Export(_ClearCache, ModelSQL, ModelView):
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def update(cls, exports, fields):
|
||||
def default_records(cls):
|
||||
return 'selected'
|
||||
|
||||
@classmethod
|
||||
def update(cls, exports, values, fields):
|
||||
pool = Pool()
|
||||
Line = pool.get('ir.export.line')
|
||||
cls.write(exports, values)
|
||||
to_delete = []
|
||||
to_save = []
|
||||
for export in exports:
|
||||
|
||||
@@ -3,10 +3,14 @@
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<form>
|
||||
<label name="name"/>
|
||||
<field name="name" colspan="3"/>
|
||||
<field name="name"/>
|
||||
<label name="resource"/>
|
||||
<field name="resource"/>
|
||||
|
||||
<label name="header"/>
|
||||
<field name="header"/>
|
||||
<label name="records"/>
|
||||
<field name="records"/>
|
||||
|
||||
<field name="export_fields" colspan="4"/>
|
||||
</form>
|
||||
@@ -319,7 +319,7 @@ class ModelView(Model):
|
||||
relates = Action.get_keyword('form_relate', (cls.__name__, -1))
|
||||
exports = Export.search_read(
|
||||
[('resource', '=', cls.__name__)],
|
||||
fields_names=['name', 'header', 'export_fields.name'])
|
||||
fields_names=['name', 'header', 'records', 'export_fields.name'])
|
||||
emails = Email.search_read(
|
||||
[('model.model', '=', cls.__name__)],
|
||||
fields_names=['name'])
|
||||
|
||||
Reference in new issue
Block a user