首页 > 解决方案 > 如何禁用odoo日历中的天数?

问题描述

我有一个带有 date_appointment 属性的实体“约会”。我还为该约会创建了一个日历视图。约会永远不应该安排在周末,所以我在 odoo datepicker 中禁用了那些日子(在 doem 视图中)。但是,当我在日历视图中单击任何星期六或星期日时,它会显示表单视图,我可以在其中创建当天的约会。有什么办法可以在 Odoo 日历中禁用那些日子,这样用户就不能在任何周末点击创建约会。我已经禁用了 quick_add 选项

<record id="appointment_view_calendar" model="ir.ui.view">
    <field name="name">appointment.view.calendar</field>
    <field name="model">tico_hospital.appointment</field>
    <field name="arch" type="xml">
        <calendar string="Consultas programadas" mode="week" date_start="date_appointment" quick_add="False" color="patient_id">
            <field name="patient_id"/>
            <field name="reason"/>         
        </calendar>
    </field>
</record>  

标签: odoo

解决方案


根据文档,没有选项可以禁用日历视图中特定日期的点击。

您可以添加约束以在用户尝试创建工作日约会时提醒他们。

如果您需要避免在单击工作日时打开表单视图,请覆盖_onOpenCreate日历控制器中的方法。

以下示例检查用户是否单击了工作日,如果是,则显示警报并避免打开表单视图。

odoo.define('web.CustomCalendar', function (require) {
"use strict";
    var core = require('web.core');
    var Dialog = require('web.Dialog');
    var _t = core._t;
    var WebCalendarController = require('web.CalendarController');

    WebCalendarController.include({
        _onOpenCreate: function (event) {
            if(event.target.model==='tico_hospital.appointment' && [0, 6].includes(event.data.start.day())) {
                Dialog.alert(this, _t("You cannot create an appointment for Sunday or Saturday!"));
                return;
            }
            return this._super(event);
        },
    });
});  

编辑:

在资产包中添加文件,您需要:

  • 在文件夹中添加一个assets.xml文件views/
  • 在清单文件views/assets.xml的键中添加字符串data
  • 创建所需包的继承视图(此处web.assets_backend),并使用 XPath 表达式添加文件。例如,

     <template id="assets_backend" name="stack_overflow assets" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <script type="text/javascript" src="/stack_overflow/static/src/js/script.js"></script>
        </xpath>
    </template>
    

文件可能无法正确加载的原因有很多。以下是您可以尝试解决问题的一些方法:

  • 一旦服务器启动,它不知道资产文件是否已被修改。因此,您只需重新启动服务器即可重新生成资产。
  • 检查控制台(在开发工具中,通常以 开头F12)以确保没有明显的错误
  • 尝试在文件开头(在任何模块定义之前)添加一个 console.log,这样您就可以查看文件是否已加载
  • 在用户界面中,在调试模式下(在此处插入链接到调试模式),有一个选项可以强制服务器更新其资产文件。
  • 使用debug=assets模式。这实际上会绕过资产包(请注意,它实际上并没有解决问题。服务器仍然使用过时的包)
  • 最后,对于开发人员来说,最方便的方法是使用 –dev=all 选项启动服务器。这将激活文件观察程序选项,这将在必要时自动使资产无效。请注意,如果操作系统是 Windows,它就不能很好地工作。
  • 记得刷新你的页面!
  • 或者保存你的代码文件……</li>

推荐阅读