Store records selection on export

Closes #12179
This commit is contained in:
Cédric Krier committed 2023-04-12 17:41:48 +02:00
1 parent 74540107b1
commit 54fad3a1c8
8 files changed
+82 -50

No files matched your search

+1 -3
View File
@@ -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
View File
@@ -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;
+1 -3
View File
@@ -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:
+33 -18
View File
@@ -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
View File
@@ -1,3 +1,4 @@
* Store records selection on export
Version 6.8.0 - 2023-05-01
--------------------------
+11 -1
View File
@@ -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:
+5 -1
View File
@@ -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>
+1 -1
View File
@@ -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'])