notification popup odoo 9 sub

Hướng dẫn cách tạo notification popup odoo 9

Notification popup odoo 9 là gì?

Notification popup odoo 9 là việc tạo một module để show một popup thông báo trên giao diện back-end của Odoo. Trong bài viết này mình sẽ hướng dẫn cách tạo một popup odoo 9 đơn giản, giúp các bạn hình dung việc sử dụng javascript trong Odoo framework kết hợp với việc kết nối với dữ liệu.

Trong bài viết trước mình đã hướng dẫn tích hợp các công cụ của google vào Odoo và cách cài đặt Odoo instance.

Hướng dẫn cách thực hiện.

Tạo model.

Mình sẽ tạo một model để có thể lấy dữ liệu lên.

Tạo file với model notification với nội dung sau:

# -*- coding: utf-8 -*-
from openerp import api, models, _, fields

class Notification(models.Model):

_name = 'notification'

_description = 'Notification'

#begin columns

name = fields.Char('Name')

description = fields.Html('Description')

type = fields.Selection([
], default='public', string='Type', required=True

state = fields.Selection([
], default='draft', string='State', required=True)

#end columns

def action_confirm(self):

self.write({'state': 'confirm'})

def action_done(self):

self.write({'state': 'done'})

Tạo file notification_view.xml để tạo view cho model trên.



<!-- Form view -->

<record id="notification_form_view" model="ir.ui.view">

<field name="name">notification.form.view</field>

<field name="model">notification</field>

<field name="arch" type="xml">

<form string="notification">



<button name="action_confirm" states="draft" string="Confirm" type="object" class="oe_highlight"/>

<button name="action_done" states="confirm" string="Done" type="object" class="oe_highlight"/>

<field name="state" widget="statusbar"/>




<group col="4">

<field name="name"/>

<field name="type"/>



<field name="description" colspan="4"/>





<!-- Tree view -->

<record id="notification_tree_view" model="ir.ui.view">

<field name="name">notification.tree.view</field>

<field name="model">notification</field>

<field name="arch" type="xml">

<tree string="Announcements">

<field name="name"/>

<field name="type"/>




<!-- Search view -->

<record id="notification_search_view" model="ir.ui.view">

<field name="name"></field>

<field name="model">notification</field>

<field name="arch" type="xml">

<search string="Cash-out">

<field name="name"/>

<field name="type"/>




<!-- Action view -->

<record model="ir.actions.act_window" id="action_view_notification">

<field name="name">notification</field>

<field name="res_model">notification</field>

<field name="view_type">form</field>

<field name="view_mode">tree,form</field>

<field name="search_view_id" ref="notification_search_view" />

<field name="domain">[]</field>

<field name="context">{}</field>




Tạo controller

Tạo file để lấy dữ liệu show lên trên popup.

import json

import openerp

import openerp.http as http

from openerp.http import request

from openerp.api import Environment

class PopUpController(openerp.http.Controller):

@http.route('/get_notification/notify', type='json', auth="none")

def notify(self):

registry = request.registry

uid = request.session.uid

context = request.session.context

cr = registry.cursor()

env = Environment(cr, uid, context)

notif_list = [{'notif_id':, 'title':, 'message':

record.description} for record in


return notif_list

Tạo Popup

Tạo một file style.css để tạo CSS cho popup.



margin-top: 50px;


.oe_web_module .html_elemet button{

border: 1px solid #CCC;


height: 30px;



width: 500px;

max-width: 100%;

position: relative;

top: 0px;

left: 0px;

bottom: 0px;

right: 0px;

z-index: 1052;



background-color: antiquewhite;



background-color: azure;



background-color: beige;

border: 1px solid black;



width: 500px;

max-width: 100%;

position: absolute;

top: 250px;

left: 500px;

bottom: 500px;

right: 500px;

z-index: 1051;


Tạo một file pop_up.js để tạo popup.

odoo.define('notification.pop_up', function (require) {

"use strict";

var core = require('web.core');

var session = require('web.session');

var ajax = require('web.ajax');

var web_view = require('web.View')

var _t = core._t;

var _lt = core._lt;

var QWeb = core.qweb;

var Widget = require('web.Widget');

var WebClient = require('web.WebClient');

var web_client = require('web.web_client');

var PopUpManager = Widget.extend({

className: 'o_popup_manager_test',

display: function(popup) {


return popup;
var MyWidget = Widget.extend({
// QWeb template to use when rendering the object
template: "MyQWebTemplate",
className: 'o_popup_manager',
init: function(parent, title, message, notif_id) {
this._super(parent, title, message, notif_id);
//this._super.apply(this, arguments);
this.notif_id = notif_id;
this.title = title;

this.message = message; = _.extend( || {}, {
'click .btn-ok': function() {
'click .btn-detail': function() {
var self = this;
type: 'ir.actions.act_window',
res_model: "notification",
res_id: this.notif_id,
views: [[false, 'form']],
target: 'current',
context: {},
show_common: function() {


var self = this

self.popup_manager = new PopUpManager(this);



get_pop_up: function() {

var self = this;


.done(function(result) {

_.each(result, function(res) {

setTimeout(function() {

if(self.$(".nid_" + res.notif_id).length === 0) {

self.popup_manager.display(new MyWidget(self.popup_manager, res.title, res.message, 

}, 60 * 1000);
.fail(function(err, ev) {
if(err.code === -32098) {
// Prevent the CrashManager to display an error
// in case of an xhr error not due to a server error
check_pop_up: function() {
var self = this;
this.intervalPopup = setInterval(function() {
}, 1 * 60 * 1000);
//Override the show_application of addons/web/static/src/js/chrome.js
show_application: function() {
//Override addons/web/static/src/js/chrome.js
on_logout: function() {

Tạo một file popup.xml để tạo template cho popup.

<?xml version="1.0" encoding="UTF-8"?>


<t t-name='MyQWebTemplate'>

<div t-attf-class="o_popup_manager nid_{{widget.notif_id}}">

<div id="p_id">

<div class="popup_title text-center">

<h1 class="popup_title"><t t-esc="widget.title"/></h1>


<div class="popup_content">

<t t-raw="widget.message"/>


<div class="popup_footer">


<button type="button" class="btn btn-sm btn-primary link2showed oe_highlight
oe_form oe_button btn-ok"><span>OK</span></button>

<button type="button" class="btn btn-sm btn-link link2event btn






Tạo một file asset.xml để chèn javascript và css vào odoo.

<?xml version="1.0" encoding="utf-8"?>



<template id="assets_backend" name="web_tests assets" inherit_id="web.assets_backend">

<xpath expr="." position="inside">

<link rel="stylesheet" href="/vi_pop_up/static/src/css/style.css"/>

<script type="text/javascript" src="/vi_pop_up/static/src/js/pop_up.js"></script>





Kết luận:

Mình vừa hướng dẫn các bạn cách tạo một module notification popup odoo 9. Hy vọng qua bài viết các bạn có thể hiểu được cách thao tác với javascript trong Odoo 9.

Các bạn có thể tham khảo module có sẵn tại đây

4 thoughts to “Hướng dẫn cách tạo notification popup odoo 9”

  1. Admiring the hard work you put into your blog and in depth
    information you offer. It’s nice to come across a blog every once in a
    while that isn’t the same out of date rehashed material.
    Fantastic read! I’ve bookmarked your site and I’m adding your RSS feeds to my Google account.

  2. Hey! I know this is kind of off-topic but I needed to ask.
    Does running a well-established blog like yours take a
    lot of work? I am brand new to blogging however I do write in my diary on a daily basis.
    I’d like to start a blog so I can easily share my
    own experience and feelings online. Please let me know if
    you have any kind of recommendations or tips for
    brand new aspiring bloggers. Appreciate it!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

5 × 2 =