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 ...
随机推荐
- C#算法设计排序篇之03-直接插入排序(附带动画演示程序)
直接插入排序(Straight Insertion Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/679 访 ...
- 三、HelloWorld
1.创建Hello.java 文件, 2.输入内容 public class Hello{ //公共类 Hello public static void main(String[] args){ // ...
- 微软看上的Rust 语言,安全性真的很可靠吗
摘要:近几年,Rust语言以极快的增长速度获得了大量关注.其特点是在保证高安全性的同时,获得不输C/C++的性能.在Rust被很多项目使用以后,其实际安全性表现到底如何呢? 近几年,Rust语言以极快 ...
- Nginx CORS 跨域资源共享问题
## 背景 新项目上线,前后端分离,遇到了跨域资源共享的问题,导致请求根本无法发送到后端,前端和后端貌似只能有一个来处理跨域问题,我们这边要采用nginx来解决跨域问题. ## Nginx的CORS配 ...
- 微信小程序WXML页面常用语法(讲解+示例)
(一) WXML 是什么 官方说明:WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件.事件系统,可以构建出页面的结构 在前面我们就已经提过,WXML,就可 ...
- CF 1329B Dreamoon Likes Sequences
传送门 题目: Dreamoon likes sequences very much. So he created a problem about the sequence that you can' ...
- SpringSecurity权限管理系统实战—一、项目简介和开发环境准备
目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...
- web主题适配方案指北
前置知识 在这里了解实现网页主题切换的相关知识. CSS 变量 要实现主题切换需要了解一点 css 自定义属性.当然,本文还提供了其他实现方式,为了不给您接下来的阅读带来阻碍,先了解它. 变量的声明 ...
- 易盛信息9.0外盘期货行情数据API接口公共授权开发包例子代码
易盛信息9.0外盘期货行情数据API接口公共授权开发包例子代码 怎么才能获取到外盘期货行情数据API接口呢?不少朋友就会考虑到易盛9.0行情API接口,本身易盛就是一个软件提供商,提供行 ...
- Java数据结构——二叉搜索树
定义二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若 ...