有个需求,需要根据该条记录的状态字段来控制点击calendar时是否需要打开form视图,解决方案如下:重写了web_calendar的get_fc_init_options()方法中的eventClick()方法

对于Odoo10中calendar视图,底层用的是fullcalendar.js框架,odoo又对fullcalendar做了封装,也就是web_calendar.js。

我们可以根据自己的需要在web_calendar.js的基础上做修改。

web_calendar.js中对点击事件做了处理,代码如下:

 get_fc_init_options: function () {
//Documentation here : http://arshaw.com/fullcalendar/docs/
var self = this;
return $.extend({}, get_fc_defaultOptions(), {
defaultView: (this.mode == "month")? "month" : ((this.mode == "week")? "agendaWeek" : ((this.mode == "day")? "agendaDay" : "agendaWeek")),
header: false,
selectable: !this.options.read_only_mode && this.create_right,
selectHelper: true,
editable: this.editable,
droppable: true, // callbacks
viewRender: function(view) {
var mode = (view.name == "month")? "month" : ((view.name == "agendaWeek") ? "week" : "day");
if(self.$buttons !== undefined) {
self.$buttons.find('.active').removeClass('active');
self.$buttons.find('.o_calendar_button_' + mode).addClass('active');
} var title = self.title + ' (' + ((mode === "week")? _t("Week ") : "") + view.title + ")";
self.set({'title': title}); self.$calendar.fullCalendar('option', 'height', Math.max(290, parseInt(self.$('.o_calendar_view').height()))); setTimeout(function() {
var $fc_view = self.$calendar.find('.fc-view');
var width = $fc_view.find('> table').width();
$fc_view.find('> div').css('width', (width > $fc_view.width())? width : '100%'); // 100% = fullCalendar default
}, 0);
},
windowResize: function() {
self.$calendar.fullCalendar('render');
},
eventDrop: function (event, _day_delta, _minute_delta, _all_day, _revertFunc) {
var data = self.get_event_data(event);
self.proxy('update_record')(event._id, data); // we don't revert the event, but update it.
},
eventResize: function (event, _day_delta, _minute_delta, _revertFunc) {
var data = self.get_event_data(event);
self.proxy('update_record')(event._id, data);
},
eventRender: function (event, element, view) {
element.find('.fc-event-title').html(event.title + event.attendee_avatars);
},
eventAfterRender: function (event, element, view) {
if ((view.name !== 'month') && (((event.end-event.start)/60000)<=30)) {
//if duration is too small, we see the html code of img
var current_title = $(element.find('.fc-event-time')).text();
var new_title = current_title.substr(0,current_title.indexOf("<img")>0?current_title.indexOf("<img"):current_title.length);
element.find('.fc-event-time').html(new_title);
}
},
eventClick: function (event) { self.open_event(event._id,event.title); },
select: function (start_date, end_date, all_day, _js_event, _view) {
var data_template = self.get_event_data({
start: start_date,
end: end_date,
allDay: all_day,
});
self.open_quick_create(data_template);
}, unselectAuto: false,
});

其中的点击事件就是方法eventClick(event) {self.open_event(event._id, event.title);}

然后我们对该方法做修改,根据我们自己实际的业务需求来判断是否调用self.open_event()方法,来实现控制是否需要弹窗:

 get_fc_init_options: function () {
var self = this;
var res = this._super.apply(this, arguments); if (self.model == 'esw.working.hours.assign') {
// self.write_right = self.can_writable;
self.write_right = false;
return $.extend(
res,
{
selectable: self.creatable, eventClick: function (event) { self.dataset.read_ids([parseInt(event._id)], _.keys(this.fields)).done(function (incomplete_records) {
self.perform_necessary_name_gets(incomplete_records).then(function (records) { var need_open = false;
if (records.length > 0) {
if ('is_filled_in' in records[0]){
if (records[0].is_filled_in){
var fill_time = new Date(records[0].wh_filled_in_datetime);
// var fill_time = new Date('2019-03-01 16:02:06');
var d_val = (new Date() - fill_time) / (24*60*60*1000)
if (d_val < 30){
// Dialog.confirm(this, _t("工时已提报,是否重新提报?"), {
// confirm_callback: function () {
self.open_event(event._id, event.title);
// }
// }) } else {
Dialog.alert(this, _t("提报日期已超过30天,不允许修改"));
}
}else {
need_open = true;
}
} else {
need_open = true;
} if (need_open)
self.open_event(event._id, event.title);
} });
}); },
}
);
}else {
return self._super.apply(this, arguments);
} },

感觉这个方法有点笨,如果大家有什么更好的方法,可以留言说下,谢谢

希望可以帮到有需要的人,大家共同进步................................................................

Odoo10中calendar视图点击事件的更多相关文章

  1. robot framework程序运行过程中,遇到点击事件之后,未出现点击之后的效果(求解)

    1.click Element操作,在实际过程中偶然会出现,日志显示已点击成功,但是实际自动化页面,没有点击成功之后的操作 现象: 现象描述:程序执行到点击侧边栏的[人员信息]之后,日志显示已经点击成 ...

  2. Android Listview中Button按钮点击事件冲突解决办法

    今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...

  3. Android 响应webview中图片的点击事件

    最近碰到个新需求需要点击webview中的图片进行放大显示. 整理了下思路,想到了下面的一个可行的方案. 方案思路, 1.在点击图片的时候调用本地的java方法并给出响应的图片地址 2.本地获得图片地 ...

  4. JavaScript的for循环中嵌套一个点击事件为何点击一次弹出多个相同的值

    先看下面一段代码: for(var i=0; i<10; i++) { $('#ul').bind('click', function() { alert(i) }) } 对于这段代码,当点击I ...

  5. ListView中嵌套GridView点击事件

    做一个项目时,需要在ListView中嵌套GridView,因为ListView的每个条目中不一定出现GridView,那么问题来了,添加GridView的Item的点击事件后,有GridView出现 ...

  6. js中for循环点击事件(闭包)

    <!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...

  7. Flutter中通过普通的点击事件修改TextFormField的值

    import 'package:flutter/material.dart'; import 'package:zhongfa_apps/widget/public/PublicWidget.dart ...

  8. 在函数中处理html点击事件在标签中增加属性值来解决问题。

  9. mui上拉加载会影响页面中的某些点击事件

    项目是vue写的(移动端) <div class="mui-scroll"> <a :href="bannerinfo.activity_url&quo ...

随机推荐

  1. C#LeetCode刷题之#459-重复的子字符串(Repeated Substring Pattern)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3945 访问. 给定一个非空的字符串,判断它是否可以由它的一个子串 ...

  2. C#LeetCode刷题-哈希表

    哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串   24.2% 中等 18 四数之和   ...

  3. 调试备忘录-nRF24L01P的使用(教程 + 源码)

    目录--点击可快速直达 MCU:KEAZ64A MDK:CodeWarrior 11.0 目录 写在前面 什么是nRF24L01P? nRF24L01P模块的简单介绍 nRF24L01P的工作模式 n ...

  4. python 去除Excel中的重复行数据

    导入pandas import pandas as pd 1.读取excel中的数据: frame = pd.DataFrame(pd.read_csv('excel的绝对路径.csv'', 'She ...

  5. 非确定性有穷状态决策自动机练习题Vol.1 A.扭动的回文串

    非确定性有穷状态决策自动机练习题Vol.1 A.扭动的回文串 题目描述 \(JYY\)有两个长度均为\(N\)的字符串\(A\)和\(B\). 一个"扭动字符串\(S(i,j,k)\)由\( ...

  6. 封装Vue Element的table表格组件

    上周分享了几篇关于React组件封装方面的博文,这周就来分享几篇关于Vue组件封装方面的博文,也好让大家能更好地了解React和Vue在组件封装方面的区别. 在封装Vue组件时,我依旧会交叉使用函数式 ...

  7. Spark中遇到的问题

    spark启动slave时提示 JAVA_HOME is not set 解决方法: 在sbin目录spark-config.sh 中添加自己的jdk 路径export JAVA_HOME=/home ...

  8. CentOS7上lvm分区调整(resize2fs: Bad magic number in super-block while trying to open ...)

    问题描述:根目录空间占用率100% 首先用传统resize2fs方式调整分区: resize2fs -p /dev/mapper/centos-home 50Gresize2fs 1.42.9 (28 ...

  9. ftp 搭建 centos 源

    1.  yum -y install vsftpd* 2.  /etc/init.d/vsftpd restart 3.  mount CentOS-7-aarch64-Everything-1810 ...

  10. dcoker 小应用(二)

    sudo yum install epel-release   vi /etc/yum.repos.d/epel.repo     use base url instead of mirror url ...