Odoo10中calendar视图点击事件
有个需求,需要根据该条记录的状态字段来控制点击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视图点击事件的更多相关文章
- robot framework程序运行过程中,遇到点击事件之后,未出现点击之后的效果(求解)
1.click Element操作,在实际过程中偶然会出现,日志显示已点击成功,但是实际自动化页面,没有点击成功之后的操作 现象: 现象描述:程序执行到点击侧边栏的[人员信息]之后,日志显示已经点击成 ...
- Android Listview中Button按钮点击事件冲突解决办法
今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...
- Android 响应webview中图片的点击事件
最近碰到个新需求需要点击webview中的图片进行放大显示. 整理了下思路,想到了下面的一个可行的方案. 方案思路, 1.在点击图片的时候调用本地的java方法并给出响应的图片地址 2.本地获得图片地 ...
- JavaScript的for循环中嵌套一个点击事件为何点击一次弹出多个相同的值
先看下面一段代码: for(var i=0; i<10; i++) { $('#ul').bind('click', function() { alert(i) }) } 对于这段代码,当点击I ...
- ListView中嵌套GridView点击事件
做一个项目时,需要在ListView中嵌套GridView,因为ListView的每个条目中不一定出现GridView,那么问题来了,添加GridView的Item的点击事件后,有GridView出现 ...
- js中for循环点击事件(闭包)
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...
- Flutter中通过普通的点击事件修改TextFormField的值
import 'package:flutter/material.dart'; import 'package:zhongfa_apps/widget/public/PublicWidget.dart ...
- 在函数中处理html点击事件在标签中增加属性值来解决问题。
- mui上拉加载会影响页面中的某些点击事件
项目是vue写的(移动端) <div class="mui-scroll"> <a :href="bannerinfo.activity_url&quo ...
随机推荐
- tableau用户留存分析
1.数据源 这是个母婴产品的购买流水数据 2.数据处理 字段拆分.创建购买点会员生命周期 3.分析不同省份的留存率情况 根据第12个月的留存率对省市进行分组 实际业务中也可以通过类似的方法对用户年龄组 ...
- C#LeetCode刷题-堆
堆篇 # 题名 刷题 通过率 难度 23 合并K个排序链表 39.4% 困难 215 数组中的第K个最大元素 51.5% 中等 218 天际线问题 32.9% 困难 239 滑动窗口最大值 ...
- C#LeetCode刷题之#278-第一个错误的版本(First Bad Version)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3985 访问. 你是产品经理,目前正在带领一个团队开发新的产品.不 ...
- scanf函数与getchar函数
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h&g ...
- Hibernate搭建案例步骤:
5.1引入依赖: <!--hibernate core--> <dependency> <groupId>org.hibernate</groupId> ...
- Azure Application Gateway(二)对后端 VM 进行负载均衡
一,引言 上一节有讲到使用 Azure Application Gateway 为我们后端类型为 Web App 的 Demo 项目提供负载均衡,Azure Application Gateway 的 ...
- 树莓派 4B VNC Viewer 显示 cannot currently show the desktop 的解决方法 (图文)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/ZChen1996/article/de ...
- 谈谈对volatile关键字的理解
1. volatile的特性 volatile是Java语言提供的一种轻量级的同步机制,用来确保将变量得更新操作通知到其它线程.具备三种特性: 保证变量的可见性: 对于volatile修饰的变量进行单 ...
- 第三方登陆--QQ登陆--单体应用
从零玩转第三方QQ登陆 下面有源码 前后端分离版本 一样的思路 https://www.cnblogs.com/Yangbuyi/p/13194007.html 第三方GITEE登陆 https:// ...
- PAT 2-10. 海盗分赃(25)
题目链接:http://www.patest.cn/contests/ds/2-10 解题思路:参考:http://blog.csdn.net/linsheng9731/article/details ...