mirror of
https://gitlab.com/flectra-hq/flectra.git
synced 2026-08-19 01:34:43 -05:00
[PATCH] Upstream patch - 19102021
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
<field name="inherit_id" ref="event.event_type_ticket_view_tree_from_type"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="name" position="after">
|
||||
<field name="product_id"/>
|
||||
<field name="product_id" context="{'default_event_ok': 1, 'default_type': 'service'}"/>
|
||||
</field>
|
||||
<field name="description" position="after">
|
||||
<field name="price"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<field name="inherit_id" ref="event.event_type_ticket_view_form_from_type"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="name" position="after">
|
||||
<field name="product_id"/>
|
||||
<field name="product_id" context="{'default_event_ok': 1, 'default_type': 'service'}"/>
|
||||
</field>
|
||||
<field name="description" position="after">
|
||||
<field name="price"/>
|
||||
@@ -43,7 +43,7 @@
|
||||
<attribute name="string">Sales End</attribute>
|
||||
</field>
|
||||
<field name="name" position="after">
|
||||
<field name="product_id" context="{'default_event_ok': 1}"/>
|
||||
<field name="product_id" context="{'default_event_ok': 1, 'default_type': 'service'}"/>
|
||||
</field>
|
||||
<field name="description" position="after">
|
||||
<field name="price"/>
|
||||
@@ -57,7 +57,7 @@
|
||||
<field name="inherit_id" ref="event.event_event_ticket_view_form_from_event"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="name" position="after">
|
||||
<field name="product_id" context="{'default_event_ok':1}"/>
|
||||
<field name="product_id" context="{'default_event_ok':1, 'default_type': 'service'}"/>
|
||||
</field>
|
||||
<field name="description" position="after">
|
||||
<field name="price"/>
|
||||
|
||||
@@ -994,11 +994,6 @@ msgstr ""
|
||||
msgid "Liabilities under Short-Term Loan Agreements"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_lt
|
||||
#: model:account.account.template,name:l10n_lt.account_chart_template_lithuania_liquidity_transfer
|
||||
msgid "Liquidity Transfer"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_lt
|
||||
#: model:account.account.template,name:l10n_lt.account_account_template_4220
|
||||
msgid "Long-Term Liabilities under Loan Agreements"
|
||||
|
||||
@@ -994,11 +994,6 @@ msgstr "Atostoginių kaupiniai"
|
||||
msgid "Liabilities under Short-Term Loan Agreements"
|
||||
msgstr "Įsipareigojimai pagal trumpalaikių paskolų sutartis"
|
||||
|
||||
#. module: l10n_lt
|
||||
#: model:account.account.template,name:l10n_lt.account_chart_template_lithuania_liquidity_transfer
|
||||
msgid "Liquidity Transfer"
|
||||
msgstr "Likvidumo pervedimas"
|
||||
|
||||
#. module: l10n_lt
|
||||
#: model:account.account.template,name:l10n_lt.account_account_template_4220
|
||||
msgid "Long-Term Liabilities under Loan Agreements"
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
"chart6427","Outside services",6427,"account.data_account_type_expenses","vn_template","False"
|
||||
"chart6428","Other expenses",6428,"account.data_account_type_expenses","vn_template","False"
|
||||
"chart711","Other Income",711,"account.data_account_type_other_income","vn_template","False"
|
||||
"chart8111","Other Expenses",811,"account.data_account_type_expenses","vn_template","False"
|
||||
"chart811","Other Expenses",811,"account.data_account_type_expenses","vn_template","False"
|
||||
"chart8211","Current tax expense",8211,"account.data_account_type_expenses","vn_template","False"
|
||||
"chart8212","Deferred tax expense",8212,"account.data_account_type_expenses","vn_template","False"
|
||||
"chart911","Income Summary",911,"account.data_unaffected_earnings","vn_template","False"
|
||||
|
||||
|
@@ -631,8 +631,8 @@ msgid "Ordinary shares with voting rights"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_vn
|
||||
#: model:account.account,name:l10n_vn.1_chart8111
|
||||
#: model:account.account.template,name:l10n_vn.chart8111
|
||||
#: model:account.account,name:l10n_vn.1_chart811
|
||||
#: model:account.account.template,name:l10n_vn.chart811
|
||||
msgid "Other Expenses"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -632,8 +632,8 @@ msgid "Ordinary shares with voting rights"
|
||||
msgstr "Cổ phiếu phổ thông có quyền biểu quyết"
|
||||
|
||||
#. module: l10n_vn
|
||||
#: model:account.account,name:l10n_vn.1_chart8111
|
||||
#: model:account.account.template,name:l10n_vn.chart8111
|
||||
#: model:account.account,name:l10n_vn.1_chart811
|
||||
#: model:account.account.template,name:l10n_vn.chart811
|
||||
msgid "Other Expenses"
|
||||
msgstr "Chi phí bằng tiền khác"
|
||||
|
||||
|
||||
@@ -82,8 +82,21 @@ class LinkTracker(models.Model):
|
||||
|
||||
@api.depends('url')
|
||||
def _compute_redirected_url(self):
|
||||
"""Compute the URL to which we will redirect the user.
|
||||
|
||||
By default, add UTM values as GET parameters. But if the system parameter
|
||||
`link_tracker.no_external_tracking` is set, we add the UTM values in the URL
|
||||
*only* for URLs that redirect to the local website (base URL).
|
||||
"""
|
||||
no_external_tracking = self.env['ir.config_parameter'].sudo().get_param('link_tracker.no_external_tracking')
|
||||
|
||||
for tracker in self:
|
||||
base_domain = urls.url_parse(tracker.get_base_url()).netloc
|
||||
parsed = urls.url_parse(tracker.url)
|
||||
if no_external_tracking and parsed.netloc and parsed.netloc != base_domain:
|
||||
tracker.redirected_url = parsed.to_url()
|
||||
continue
|
||||
|
||||
utms = {}
|
||||
for key, field_name, cook in self.env['utm.mixin'].tracking_fields():
|
||||
field = self._fields[field_name]
|
||||
|
||||
@@ -2,4 +2,5 @@
|
||||
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import common
|
||||
from . import test_link_tracker
|
||||
from . import test_mail_render_mixin
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from .common import MockLinkTracker
|
||||
from flectra.tests import common
|
||||
|
||||
|
||||
class TestLinkTracker(common.TransactionCase, MockLinkTracker):
|
||||
@patch('flectra.addons.link_tracker.models.link_tracker.LinkTracker.get_base_url',
|
||||
return_value='http://example.com')
|
||||
def test_no_external_tracking(self, mocked_get_base_url):
|
||||
self.env['ir.config_parameter'].set_param('link_tracker.no_external_tracking', '1')
|
||||
|
||||
campaign = self.env['utm.campaign'].create({'name': 'campaign'})
|
||||
source = self.env['utm.source'].create({'name': 'source'})
|
||||
medium = self.env['utm.medium'].create({'name': 'medium'})
|
||||
|
||||
expected_utm_params = {
|
||||
'utm_campaign': campaign.name,
|
||||
'utm_source': source.name,
|
||||
'utm_medium': medium.name,
|
||||
}
|
||||
|
||||
# URL to an external website -> UTM parameters should no be added
|
||||
# because the system parameter "no_external_tracking" is set
|
||||
link = self.env['link.tracker'].create({
|
||||
'url': 'http://external.com/test?a=example.com',
|
||||
'campaign_id': campaign.id,
|
||||
'source_id': source.id,
|
||||
'medium_id': medium.id,
|
||||
'title': 'Title',
|
||||
})
|
||||
self.assertLinkParams(
|
||||
'http://external.com/test',
|
||||
link,
|
||||
{'a': 'example.com'}
|
||||
)
|
||||
|
||||
# URL to the local website -> UTM parameters should be added since we know we handle them
|
||||
# even though the parameter "no_external_tracking" is enabled
|
||||
link.url = 'http://example.com/test?a=example.com'
|
||||
self.assertLinkParams(
|
||||
'http://example.com/test',
|
||||
link,
|
||||
{**expected_utm_params, 'a': 'example.com'}
|
||||
)
|
||||
|
||||
# Relative URL to the local website -> UTM parameters should be added since we know we handle them
|
||||
# even though the parameter "no_external_tracking" is enabled
|
||||
link.url = '/test?a=example.com'
|
||||
|
||||
self.assertLinkParams(
|
||||
'/test',
|
||||
link,
|
||||
{**expected_utm_params, 'a': 'example.com'}
|
||||
)
|
||||
|
||||
# Deactivate the system parameter
|
||||
self.env['ir.config_parameter'].set_param('link_tracker.no_external_tracking', False)
|
||||
|
||||
# URL to an external website -> UTM parameters should be added since
|
||||
# the system parameter "link_tracker.no_external_tracking" is disabled
|
||||
link.url = 'http://external.com/test?a=example.com'
|
||||
self.assertLinkParams(
|
||||
'http://external.com/test',
|
||||
link,
|
||||
{**expected_utm_params, 'a': 'example.com'}
|
||||
)
|
||||
@@ -1216,7 +1216,7 @@ function factory(dependencies) {
|
||||
* If true composer will log a note, else a comment will be posted.
|
||||
*/
|
||||
isLog: attr({
|
||||
default: false,
|
||||
default: true,
|
||||
}),
|
||||
/**
|
||||
* Determines whether a post_message request is currently pending.
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="o.workorder_ids">
|
||||
<div t-if="o.workorder_ids" groups="mrp.group_mrp_routings">
|
||||
<h3>
|
||||
<span t-if="o.state == 'done'">Operations Done</span>
|
||||
<span t-else="">Operations Planned</span>
|
||||
|
||||
@@ -81,7 +81,9 @@ flectra.define('web.DatePickerOwl', function (require) {
|
||||
* @param {...any} args anything that will be passed to the datetimepicker function.
|
||||
*/
|
||||
_datetimepicker(...args) {
|
||||
this.ignoreBootstrapEvents = true;
|
||||
$(this.el).datetimepicker(...args);
|
||||
this.ignoreBootstrapEvents = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -120,6 +122,9 @@ flectra.define('web.DatePickerOwl', function (require) {
|
||||
* @private
|
||||
*/
|
||||
_onDateTimePickerHide() {
|
||||
if (this.ignoreBootstrapEvents) {
|
||||
return;
|
||||
}
|
||||
const date = this._parseInput(this.inputRef.el.value);
|
||||
this.state.warning = date.format('YYYY-MM-DD') > moment().format('YYYY-MM-DD');
|
||||
this.trigger('datetime-changed', { date });
|
||||
@@ -132,6 +137,9 @@ flectra.define('web.DatePickerOwl', function (require) {
|
||||
* @private
|
||||
*/
|
||||
_onDateTimePickerShow() {
|
||||
if (this.ignoreBootstrapEvents) {
|
||||
return;
|
||||
}
|
||||
this.inputRef.el.select();
|
||||
}
|
||||
|
||||
|
||||
@@ -628,6 +628,8 @@ var FieldDateRange = InputField.extend({
|
||||
autoUpdateInput: false,
|
||||
timePickerIncrement: 5,
|
||||
locale: {
|
||||
applyLabel: _t('Apply'),
|
||||
cancelLabel: _t('Cancel'),
|
||||
format: this.isDateField ? time.getLangDateFormat() : time.getLangDatetimeFormat(),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@ flectra.define('web.datepicker_tests', function (require) {
|
||||
const { DatePicker, DateTimePicker } = require('web.DatePickerOwl');
|
||||
const testUtils = require('web.test_utils');
|
||||
const time = require('web.time');
|
||||
const CustomFilterItem = require('web.CustomFilterItem');
|
||||
const ActionModel = require('web/static/src/js/views/action_model.js');
|
||||
|
||||
const { createComponent } = testUtils;
|
||||
|
||||
@@ -163,6 +165,43 @@ flectra.define('web.datepicker_tests', function (require) {
|
||||
testUtils.unpatch(time);
|
||||
});
|
||||
|
||||
QUnit.test('custom filter date', async function (assert) {
|
||||
assert.expect(5);
|
||||
|
||||
class MockedSearchModel extends ActionModel {
|
||||
dispatch(method, ...args) {
|
||||
assert.strictEqual(method, 'createNewFilters');
|
||||
const preFilters = args[0];
|
||||
const preFilter = preFilters[0];
|
||||
assert.strictEqual(preFilter.description,
|
||||
'A date is equal to "05/05/2005"',
|
||||
"description should be in localized format");
|
||||
assert.deepEqual(preFilter.domain,
|
||||
'[["date_field","=","2005-05-05"]]',
|
||||
"domain should be in UTC format");
|
||||
}
|
||||
}
|
||||
const searchModel = new MockedSearchModel();
|
||||
const date_field = { name: 'date_field', string: "A date", type: 'date', searchable: true };
|
||||
const cfi = await createComponent(CustomFilterItem, {
|
||||
props: {
|
||||
fields: { date_field },
|
||||
},
|
||||
env: { searchModel },
|
||||
});
|
||||
|
||||
await testUtils.controlPanel.toggleAddCustomFilter(cfi);
|
||||
await testUtils.fields.editSelect(cfi.el.querySelector('.o_generator_menu_field'), 'date_field');
|
||||
const valueInput = cfi.el.querySelector('.o_generator_menu_value .o_input');
|
||||
await testUtils.dom.click(valueInput);
|
||||
assert.containsOnce(document.body, '.datepicker');
|
||||
await testUtils.fields.editSelect(valueInput, '05/05/2005');
|
||||
await testUtils.controlPanel.applyFilter(cfi);
|
||||
assert.containsNone(document.body, '.datepicker');
|
||||
cfi.destroy();
|
||||
});
|
||||
|
||||
|
||||
QUnit.module('DateTimePicker');
|
||||
|
||||
QUnit.test("basic rendering", async function (assert) {
|
||||
|
||||
@@ -2574,6 +2574,7 @@ options.registry.ScrollButton = options.Class.extend({
|
||||
'justify-content-center',
|
||||
'mx-auto',
|
||||
'bg-primary',
|
||||
'o_not_editable',
|
||||
);
|
||||
anchor.href = '#';
|
||||
anchor.contentEditable = "false";
|
||||
|
||||
Reference in New Issue
Block a user