diff --git a/addons/l10n_it_edi/models/__init__.py b/addons/l10n_it_edi/models/__init__.py index e2f3f69717a5f54c5076e5e2867c27c1a4fe383c..c29c131a927dcfde56994bc90f4e16892cba60d6 100644 --- a/addons/l10n_it_edi/models/__init__.py +++ b/addons/l10n_it_edi/models/__init__.py @@ -5,5 +5,6 @@ from . import res_partner from . import res_company from . import account_invoice from . import account_edi_format +from . import account_chart_template from . import ir_mail_server from . import ddt diff --git a/addons/l10n_it_edi/models/account_chart_template.py b/addons/l10n_it_edi/models/account_chart_template.py new file mode 100644 index 0000000000000000000000000000000000000000..9bd1d1c7b2a1cfcf97c723340b54b9879abafbc6 --- /dev/null +++ b/addons/l10n_it_edi/models/account_chart_template.py @@ -0,0 +1,20 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models + + +class AccountChartTemplate(models.Model): + + _inherit = 'account.chart.template' + + def _load(self, sale_tax_rate, purchase_tax_rate, company): + res = super()._load(sale_tax_rate, purchase_tax_rate, company) + if self == self.env.ref('l10n_it.l10n_it_chart_template_generic', raise_if_not_found=False): + tax = self.env.ref(f'l10n_it.{company.id}_00eu', raise_if_not_found=False) + if tax: + tax.write({ + 'l10n_it_has_exoneration': True, + 'l10n_it_kind_exoneration': 'N3.2', + 'l10n_it_law_reference': 'Art. 41, DL n. 331/93', + }) + return res diff --git a/addons/website_slides/views/website_slides_templates_course.xml b/addons/website_slides/views/website_slides_templates_course.xml index 10587ef55a55b57772728184be1e3175b3a16c30..ac81035283644330b067888738f08ec9e5babdc9 100644 --- a/addons/website_slides/views/website_slides_templates_course.xml +++ b/addons/website_slides/views/website_slides_templates_course.xml @@ -8,7 +8,7 @@ <div class="row align-items-center justify-content-between"> <!-- Desktop Mode --> <nav aria-label="breadcrumb" class="col-md-8 d-none d-md-flex"> - <ol class="breadcrumb bg-transparent mb-0 pl-0 py-0"> + <ol class="breadcrumb bg-transparent mb-0 pl-0 py-0 overflow-hidden"> <li class="breadcrumb-item"> <a href="/slides">Courses</a> </li> @@ -28,7 +28,7 @@ <li t-att-class="breadcrumb_class" t-att-aria-current="'page' and search_slide_type" t-if="search_slide_type"> <a t-att-href="'/slides/%s?slide_type=%s' % (slug(channel), search_slide_type)"><span t-esc="slide_types[search_slide_type]"/></a> </li> - <li t-if="slide" class="breadcrumb-item active"> + <li t-if="slide" class="breadcrumb-item active text-truncate text-white"> <a t-att-href="'/slides/slide/%s' % slug(slide)"><span t-esc="slide.name"/></a> </li> </ol> diff --git a/addons/website_slides/views/website_slides_templates_lesson.xml b/addons/website_slides/views/website_slides_templates_lesson.xml index 8fd7575d1c8635e1ca7e8622cb1b1b711c4db80f..d1927eec8a00d470922e334fb811c4a001619402 100644 --- a/addons/website_slides/views/website_slides_templates_lesson.xml +++ b/addons/website_slides/views/website_slides_templates_lesson.xml @@ -208,8 +208,8 @@ <t t-set="is_training_channel" t-value="slide.channel_id.channel_type == 'training'"/> <div class="row align-items-center my-3"> <div class="col-12 col-md order-2 order-md-1 d-flex"> - <div class="d-flex align-items-center"> - <h1 class="h4 my-0"> + <div class="d-flex align-items-center overflow-hidden"> + <h1 class="h4 my-0 text-truncate"> <t t-call="website_slides.slide_icon"> <t t-set="icon_class" t-valuef="mr-1"/> </t> diff --git a/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml b/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml index 3d8d405908e7b0cb5d554f2e4f62858a7c1ba709..12a601be6bceb7c68fe55f17f9415aa96e6e585e 100644 --- a/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml +++ b/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml @@ -105,18 +105,18 @@ <i t-if="slide_completed and is_member" class="o_wslides_slide_completed fa fa-check fa-fw text-success" t-att-data-slide-id="slide.id"/> <i t-if="not slide_completed and is_member" class="fa fa-circle-thin fa-fw" t-att-data-slide-id="slide.id"/> </span> - <div class="ml-2"> + <div class="ml-2 overflow-hidden"> <a t-if="can_access" class="d-block pt-1" href="#"> <div class="d-flex "> <t t-call="website_slides.slide_icon"/> - <div class="o_wslides_fs_slide_name" t-esc="slide.name"/> + <div class="o_wslides_fs_slide_name text-truncate" t-esc="slide.name"/> </div> </a> <span t-else="" class="d-block pt-1" href="#"> <div class="d-flex "> <t t-set="icon_class" t-value="'mr-2 text-600'"/> <t t-call="website_slides.slide_icon"/> - <div class="o_wslides_fs_slide_name text-600" t-esc="slide.name"/> + <div class="o_wslides_fs_slide_name text-600 text-truncate" t-esc="slide.name"/> </div> </span> <ul class="list-unstyled w-100 pt-2 small" t-if="slide.link_ids or slide._has_additional_resources() or (slide.question_ids and not slide.slide_type =='quiz')" > diff --git a/odoo/tools/_monkeypatches.py b/odoo/tools/_monkeypatches.py index 6bfc1cf18eb9a4c88182885ebe242d609a78dc92..fc51f63a195ecb40fb58fbd74b909aaa91c59182 100644 --- a/odoo/tools/_monkeypatches.py +++ b/odoo/tools/_monkeypatches.py @@ -1,8 +1,10 @@ import ast import os from shutil import copyfileobj +from types import CodeType from werkzeug.datastructures import FileStorage +from werkzeug.routing import Rule from werkzeug.wrappers import Request, Response from .json import scriptsafe @@ -30,6 +32,14 @@ FileStorage.save = lambda self, dst, buffer_size=1<<20: copyfileobj(self.stream, Request.json_module = Response.json_module = scriptsafe +get_func_code = getattr(Rule, '_get_func_code', None) +if get_func_code: + @staticmethod + def _get_func_code(code, name): + assert isinstance(code, CodeType) + return get_func_code(code, name) + Rule._get_func_code = _get_func_code + orig_literal_eval = ast.literal_eval def literal_eval(expr):