Fall 1278: Feedback vom Workshop - 09.01.2018, US03 umgesetzt.
parent
c4b7f76025
commit
5dd53890c9
|
|
@ -0,0 +1,27 @@
|
|||
Odoo Proprietary License v1.0
|
||||
|
||||
This software and associated files (the "Software") may only be used (executed,
|
||||
modified, executed after modifications) if you have purchased a valid license
|
||||
from the authors, typically via Odoo Apps, or if you have received a written
|
||||
agreement from the authors of the Software (see the COPYRIGHT file).
|
||||
|
||||
You may develop Odoo modules that use the Software as a library (typically by
|
||||
depending on it, importing it and using its resources), but without copying any
|
||||
source code or material from the Software. You may distribute those modules
|
||||
under the license of your choice, provided that this license is compatible with
|
||||
the terms of the Odoo Proprietary License (For example: LGPL, MIT,
|
||||
or proprietary licenses similar to this one).
|
||||
|
||||
It is forbidden to publish, distribute, sublicense, or sell copies of the Software
|
||||
or modified copies of the Software.
|
||||
|
||||
The above copyright notice and this permission notice must be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2018-Today datenpol gmbh(<http://www.datenpol.at>)
|
||||
# License OPL-1 or later (https://www.odoo.com/documentation/user/11.0/legal/licenses/licenses.html#licenses).
|
||||
|
||||
|
||||
# noinspection PyStatementEffect
|
||||
{
|
||||
'name': 'Dp Sale Filter Partner Addresses',
|
||||
'version': '11.0.1.0.0',
|
||||
'license': 'OPL-1',
|
||||
'author': 'datenpol gmbh',
|
||||
'website': 'https://www.datenpol.at',
|
||||
'depends': [
|
||||
'sale',
|
||||
],
|
||||
'data': [
|
||||
'views/templates.xml',
|
||||
'views/sale_order.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
|
|
@ -0,0 +1,148 @@
|
|||
odoo.define('dp_sale_filter_partner_addresses.relational_fields', function (require) {
|
||||
"use strict";
|
||||
|
||||
var relational_fields = require('web.relational_fields');
|
||||
var dialogs = require('web.view_dialogs');
|
||||
var core = require('web.core');
|
||||
|
||||
var _t = core._t;
|
||||
|
||||
var FieldMany2OneAlwaysSearchMore = relational_fields.FieldMany2One.include({
|
||||
// RW: Gesamte Funktion überschreiben, weil einfacher
|
||||
/**
|
||||
* @private
|
||||
* @param {string} search_val
|
||||
* @returns {Deferred}
|
||||
*/
|
||||
_search: function (search_val) {
|
||||
var self = this;
|
||||
var def = $.Deferred();
|
||||
this.orderer.add(def);
|
||||
|
||||
var context = this.record.getContext(this.recordParams);
|
||||
var domain = this.record.getDomain(this.recordParams);
|
||||
|
||||
var blacklisted_ids = this._getSearchBlacklist();
|
||||
if (blacklisted_ids.length > 0) {
|
||||
domain.push(['id', 'not in', blacklisted_ids]);
|
||||
}
|
||||
|
||||
this._rpc({
|
||||
model: this.field.relation,
|
||||
method: "name_search",
|
||||
kwargs: {
|
||||
name: search_val,
|
||||
args: domain,
|
||||
operator: "ilike",
|
||||
limit: this.limit + 1,
|
||||
context: context,
|
||||
}})
|
||||
.then(function (result) {
|
||||
// possible selections for the m2o
|
||||
var values = _.map(result, function (x) {
|
||||
x[1] = self._getDisplayName(x[1]);
|
||||
return {
|
||||
label: _.str.escapeHTML(x[1].trim()) || data.noDisplayContent,
|
||||
value: x[1],
|
||||
name: x[1],
|
||||
id: x[0],
|
||||
};
|
||||
});
|
||||
|
||||
// search more... if more results than limit
|
||||
// RW Start, Check ob in der View (xml) die search_more option am Feld gesetzt ist (eg: options='{"search_more": True}')
|
||||
// wenn ja, dann immer "Search More..." Option im Dropdown
|
||||
if ((values.length > self.limit) || (self.nodeOptions.search_more)) {
|
||||
// RW End
|
||||
values = values.slice(0, self.limit);
|
||||
values.push({
|
||||
label: _t("Search More..."),
|
||||
action: function () {
|
||||
self._rpc({
|
||||
model: self.field.relation,
|
||||
method: 'name_search',
|
||||
kwargs: {
|
||||
name: search_val,
|
||||
args: domain,
|
||||
operator: "ilike",
|
||||
limit: 160,
|
||||
context: context,
|
||||
},
|
||||
})
|
||||
.then(self._searchCreatePopup.bind(self, "search"));
|
||||
},
|
||||
classname: 'o_m2o_dropdown_option',
|
||||
});
|
||||
}
|
||||
var create_enabled = self.can_create && !self.nodeOptions.no_create;
|
||||
// quick create
|
||||
var raw_result = _.map(result, function (x) { return x[1]; });
|
||||
if (create_enabled && !self.nodeOptions.no_quick_create &&
|
||||
search_val.length > 0 && !_.contains(raw_result, search_val)) {
|
||||
values.push({
|
||||
label: _.str.sprintf(_t('Create "<strong>%s</strong>"'),
|
||||
$('<span />').text(search_val).html()),
|
||||
action: self._quickCreate.bind(self, search_val),
|
||||
classname: 'o_m2o_dropdown_option'
|
||||
});
|
||||
}
|
||||
// create and edit ...
|
||||
if (create_enabled && !self.nodeOptions.no_create_edit) {
|
||||
var createAndEditAction = function () {
|
||||
// Clear the value in case the user clicks on discard
|
||||
self.$('input').val('');
|
||||
return self._searchCreatePopup("form", false, self._createContext(search_val));
|
||||
};
|
||||
values.push({
|
||||
label: _t("Create and Edit..."),
|
||||
action: createAndEditAction,
|
||||
classname: 'o_m2o_dropdown_option',
|
||||
});
|
||||
} else if (values.length === 0) {
|
||||
values.push({
|
||||
label: _t("No results to show..."),
|
||||
});
|
||||
}
|
||||
|
||||
def.resolve(values);
|
||||
});
|
||||
|
||||
return def;
|
||||
},
|
||||
// RW: Gesamte Funktion überschreiben, weil einfacher
|
||||
/**
|
||||
* all search/create popup handling
|
||||
*
|
||||
* @private
|
||||
* @param {any} view
|
||||
* @param {any} ids
|
||||
* @param {any} context
|
||||
*/
|
||||
_searchCreatePopup: function (view, ids, context) {
|
||||
var self = this;
|
||||
// RW Start, wenn search_more am Feld gesetzt, dann im Popup immer alle Records laden
|
||||
var domain = this.record.getDomain({fieldName: this.name});
|
||||
var initial_ids = ids ? _.map(ids, function (x) { return x[0]; }) : undefined;
|
||||
if (self.nodeOptions.search_more) {
|
||||
domain = [];
|
||||
initial_ids = undefined;
|
||||
}
|
||||
// RW End
|
||||
return new dialogs.SelectCreateDialog(this, _.extend({}, this.nodeOptions, {
|
||||
res_model: this.field.relation,
|
||||
domain: domain,
|
||||
context: _.extend({}, this.record.getContext(this.recordParams), context || {}),
|
||||
title: (view === 'search' ? _t("Search: ") : _t("Create: ")) + this.string,
|
||||
initial_ids: initial_ids,
|
||||
initial_view: view,
|
||||
disable_multiple_selection: true,
|
||||
on_selected: function (records) {
|
||||
self.reinitialize(records[0]);
|
||||
self.activate();
|
||||
}
|
||||
})).open();
|
||||
},
|
||||
|
||||
})
|
||||
});
|
||||
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2018-Today datenpol gmbh(<http://www.datenpol.at>)
|
||||
License OPL-1 or later (https://www.odoo.com/documentation/user/11.0/legal/licenses/licenses.html#licenses). -->
|
||||
|
||||
<odoo>
|
||||
|
||||
<record model="ir.ui.view" id="sale_order_form_view">
|
||||
<field name="name">sale.order.form (in dp_sale_filter_partner_addresses)</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="inherit_id" ref="sale.view_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_invoice_id" position="attributes">
|
||||
<attribute name="domain">[('commercial_partner_id', '=', partner_id)]</attribute>
|
||||
<attribute name="options">{"always_reload": True, "search_more": True}</attribute>
|
||||
</field>
|
||||
<field name="partner_shipping_id" position="attributes">
|
||||
<attribute name="domain">[('commercial_partner_id', '=', partner_id)]</attribute>
|
||||
<attribute name="options">{"always_reload": True, "search_more": True}</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2018-Today datenpol gmbh(<http://www.datenpol.at>)
|
||||
License OPL-1 or later (https://www.odoo.com/documentation/user/11.0/legal/licenses/licenses.html#licenses). -->
|
||||
|
||||
<odoo>
|
||||
|
||||
<template id="assets_backend" name="dp_sale_filter_partner_addresses assets" inherit_id="web.assets_backend">
|
||||
<xpath expr="." position="inside">
|
||||
<script type="text/javascript" src="/dp_sale_filter_partner_addresses/static/src/js/relational_fields.js"></script>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
</odoo>
|
||||
Loading…
Reference in New Issue