4 changed files with 72 additions and 166 deletions
@ -1,146 +1,55 @@ |
|||||
odoo.define('one2many_mass_select_delete.form_widgets', function (require) { |
/** @odoo-module */ |
||||
"use strict"; |
|
||||
|
import { X2ManyField } from "@web/views/fields/x2many/x2many_field"; |
||||
var core = require('web.core'); |
import { registry } from "@web/core/registry"; |
||||
var utils = require('web.utils'); |
import { standardFieldProps } from "@web/views/fields/standard_field_props"; |
||||
var fieldRegistry = require('web.field_registry'); |
import { ListRenderer } from "@web/views/list/list_renderer"; |
||||
var ListRenderer = require('web.ListRenderer'); |
import {listView} from '@web/views/list/list_view'; |
||||
var rpc = require('web.rpc'); |
import { patch } from "@web/core/utils/patch"; |
||||
var FieldOne2Many = require('web.relational_fields').FieldOne2Many; |
|
||||
var _t = core._t; |
export class TestListRenderer extends ListRenderer { |
||||
|
get hasSelectors() { |
||||
ListRenderer.include({ |
this.props.allowSelectors = true |
||||
_updateSelection: function () { |
this.props.list.selection = true |
||||
this.selection = []; |
return this.props.allowSelectors && !this.env.isSmall; |
||||
var self = this; |
} |
||||
var $inputs = this.$('tbody .o_list_record_selector input:visible:not(:disabled)'); |
toggleRecordSelection(record) { |
||||
var allChecked = $inputs.length > 0; |
record.toggleSelection(); |
||||
$inputs.each(function (index, input) { |
} |
||||
if (input.checked) { |
|
||||
self.selection.push($(input).closest('tr').data('id')); |
} |
||||
} else { |
export class TestX2ManyField extends X2ManyField { |
||||
allChecked = false; |
get hasSelected(){ |
||||
} |
return this.list.records.filter((rec) => rec.selected).length |
||||
}); |
} |
||||
if(this.selection.length > 0){ |
deleteSelected(){ |
||||
$('.button_delete_order_lines').show() |
var w_response = confirm("Dou You Want to Delete ?"); |
||||
$('.button_select_order_lines').show() |
if (w_response){ |
||||
|
console.log(this.list.records) |
||||
}else{ |
let selected = this.list.records.filter((rec) => rec.selected) |
||||
$('.button_delete_order_lines').hide() |
if (this.activeActions.onDelete) { |
||||
$('.button_select_order_lines').hide() |
selected.forEach((rec) => { |
||||
} |
this.activeActions.onDelete(rec); |
||||
this.$('thead .o_list_record_selector input').prop('checked', allChecked); |
}) |
||||
this.trigger_up('selection_changed', { selection: this.selection }); |
|
||||
this._updateFooter(); |
|
||||
}, |
|
||||
}) |
|
||||
|
|
||||
var One2manyDelete = FieldOne2Many.extend({ |
|
||||
template: 'One2manyDelete', |
|
||||
events: { |
|
||||
"click .button_delete_order_lines": "delete_selected_lines", |
|
||||
"click .button_select_order_lines": "selected_lines", |
|
||||
}, |
|
||||
init: function() { |
|
||||
this._super.apply(this, arguments); |
|
||||
}, |
|
||||
delete_selected_lines: function() |
|
||||
{ |
|
||||
var self=this; |
|
||||
var current_model = this.recordData[this.name].model; |
|
||||
var selected_lines = self.find_deleted_lines(); |
|
||||
if (selected_lines.length === 0) |
|
||||
{ |
|
||||
return this.displayNotification({ message: _t('Please Select at least One Record.'), type: 'danger' }); |
|
||||
} |
|
||||
|
|
||||
var w_response = confirm("Dou You Want to Delete ?"); |
|
||||
if (w_response) { |
|
||||
rpc.query({ |
|
||||
'model': current_model, |
|
||||
'method': 'unlink', |
|
||||
'args': [selected_lines], |
|
||||
}).then(function(result){ |
|
||||
self.trigger_up('reload'); |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
selected_lines: function() |
|
||||
{ |
|
||||
var self=this; |
|
||||
var current_model = this.recordData[this.name].model; |
|
||||
var selected_lines = self.find_selected_lines(); |
|
||||
if (selected_lines.length === 0) |
|
||||
{ |
|
||||
return this.displayNotification({ message: _t('Please Select at least One Record.'), type: 'danger' }); |
|
||||
} |
|
||||
var w_response = confirm("Dou You Want to Select ?"); |
|
||||
if (w_response) { |
|
||||
|
|
||||
rpc.query({ |
|
||||
'model': current_model, |
|
||||
'method': 'unlink', |
|
||||
'args': [selected_lines], |
|
||||
}).then(function(result){ |
|
||||
self.trigger_up('reload'); |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
_getRenderer: function () { |
|
||||
if (this.view.arch.tag === 'kanban') { |
|
||||
return One2ManyKanbanRenderer; |
|
||||
} |
} |
||||
if (this.view.arch.tag === 'tree') { |
} |
||||
return ListRenderer.extend({ |
} |
||||
init: function (parent, state, params) { |
deleteUnselected(){ |
||||
this._super.apply(this, arguments); |
var w_response = confirm("Dou You Want to Select?"); |
||||
this.hasSelectors = true; |
if (w_response){ |
||||
}, |
let unselected = this.list.records.filter((rec) => !rec.selected) |
||||
}); |
if (this.activeActions.onDelete) { |
||||
|
unselected.forEach((rec) => { |
||||
|
this.activeActions.onDelete(rec); |
||||
|
}) |
||||
} |
} |
||||
return this._super.apply(this, arguments); |
} |
||||
}, |
} |
||||
find_deleted_lines: function () { |
} |
||||
var self=this; |
TestX2ManyField.components = { |
||||
var selected_list =[]; |
...X2ManyField.components, ListRenderer: TestListRenderer |
||||
this.$el.find('td.o_list_record_selector input:checked') |
}; |
||||
.closest('tr').each(function () { |
TestX2ManyField.template = "one2many_mass_select_delete.One2manyDelete"; |
||||
selected_list.push(parseInt(self._getResId($(this).data('id')))); |
|
||||
}); |
|
||||
return selected_list; |
|
||||
}, |
|
||||
|
|
||||
find_selected_lines: function () |
|
||||
{ var self = this; |
|
||||
var selected_list =[]; |
|
||||
var selected_list1 =[]; |
|
||||
var selected_list2 =[]; |
|
||||
this.$el.find('td.o_list_record_selector input:checked') |
|
||||
.closest('tr').each(function () { |
|
||||
selected_list.push(parseInt(self._getResId($(this).data('id')))); |
|
||||
}); |
|
||||
if (selected_list.length != 0) { |
|
||||
this.$el.find('td.o_list_record_selector') |
|
||||
.closest('tr').each(function () { |
|
||||
selected_list1.push(parseInt(self._getResId($(this).data('id')))); |
|
||||
}); |
|
||||
selected_list2 = selected_list1.filter(function (x) { |
|
||||
return selected_list.indexOf(x) < 0 |
|
||||
}); |
|
||||
} |
|
||||
return selected_list2; |
|
||||
}, |
|
||||
_getResId: function (recordId) { |
|
||||
var record; |
|
||||
utils.traverse_records(this.recordData[this.name], function (r) { |
|
||||
if (r.id === recordId) { |
|
||||
record = r; |
|
||||
} |
|
||||
}); |
|
||||
return record.res_id; |
|
||||
}, |
|
||||
|
|
||||
}); |
registry.category("fields").add("one2many_delete", TestX2ManyField); |
||||
fieldRegistry.add('one2many_delete', One2manyDelete); |
|
||||
}); |
|
||||
|
@ -1,20 +1,19 @@ |
|||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||
<templates id="template" xml:space="preserve"> |
<templates id="template" xml:space="preserve"> |
||||
<t t-name="One2manyDelete"> |
<t t-name="one2many_mass_select_delete.One2manyDelete" t-inherit="web.X2ManyField" t-inherit-mode="primary" owl="1"> |
||||
<div> |
<xpath expr="//div[hasclass('o_x2m_control_panel')]" position="before"> |
||||
<button t-if="!widget.get('effective_readonly')" style="margin-bottom: 1%;display:none;" |
<div> |
||||
class="button_delete_order_lines" |
<button t-if="hasSelected" class="btn btn-danger" t-on-click="deleteSelected"> |
||||
href="javascript:void(0)"> |
<span class="fa fa-trash"/> |
||||
<span class="fa fa-trash"/> |
</button> |
||||
</button> |
<button t-if="hasSelected" class="btn btn-success" t-on-click="deleteUnselected"> |
||||
<button t-if="!widget.get('effective_readonly')" style="margin-bottom: 1%;display:none;" |
<span class="fa fa-check"/> |
||||
class="button_select_order_lines" |
</button> |
||||
href="javascript:void(0)"> |
<t t-if="props.readonly"> |
||||
<span class="fa fa-check"/> |
<span class="oe_form_char_content"/> |
||||
</button> |
</t> |
||||
<t t-if="widget.get('effective_readonly')"> |
</div> |
||||
<span class="oe_form_char_content"></span> |
</xpath> |
||||
</t> |
</t> |
||||
</div> |
|
||||
</t> |
|
||||
</templates> |
</templates> |
||||
|
|
||||
|
|
||||
|
Loading…
Reference in new issue