Sviluppo lato client con Odoo - PyCon Nove · PDF fileSviluppo lato client con Odoo (eh...
Transcript of Sviluppo lato client con Odoo - PyCon Nove · PDF fileSviluppo lato client con Odoo (eh...
Sviluppo lato client con Odoo(eh gi Python non basta)
Davide Corio - [email protected] - @davidecorio
Davide Corio - [email protected] - @davidecorio
Da TinyERP ad Odoo
Davide Corio - [email protected] - @davidecorio
Community vs Enterprise
Davide Corio - [email protected] - @davidecorio
Developer Mode
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework
+ JQuery + Require JS
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework
var Model = require('web.Model');var View = require('web.View');
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - Model
// An orderline represent one element of the content of a client's shopping cart.// An orderline contains a product, its quantity, its price, discount. etc. // An Order contains zero or more Orderlines.exports.Orderline = Backbone.Model.extend({ initialize: function(attr,options){ this.pos = options.pos; this.order = options.order; if (options.json) { this.init_from_JSON(options.json); return; } this.product = options.product; this.set_product_lot(this.product) this.price = options.product.price;
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - Screen/Widget
// The scale screen displays the weight of// a product on the electronic scale.
var ScaleScreenWidget = ScreenWidget.extend({ template:'ScaleScreenWidget',
next_screen: 'products', previous_screen: 'products',
show: function(){ this._super(); var self = this; this.set_weight(0); this.renderElement();
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - Views
var GanttView = View.extend({ display_name: _lt('Gantt'), events: { 'click .gantt_task_row .gantt_task_cell': 'create_on_click', }, icon: 'fa-tasks', require_fields: true, template: 'GanttView',
init: function () {
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - Tours
var core = require('web.core');var tour = require('web_tour.tour');
var _t = core._t;
tour.register('sale_tour', { url: "/web",}, [tour.STEPS.MENU_MORE, { trigger: '.o_app[data-menu-xmlid="sales_team.menu_base_partner"], .oe_menu_toggler[data-menu-xmlid="sales_team.menu_base_partner"]', content: _t('Organize your sales activities with the Sales app.'), position: 'bottom',}, { trigger: ".oe_kanban_action_button", extra_trigger: '.o_salesteam_kanban', content: _t("Let\'s have a look at the quotations of this sales team."), position: "bottom", id: "quotation_button_on_dashboard",}, {[...]
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - assets
[...]
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - base file
odoo.define('pycon_js_demo.pycon_js_demo', function (require) { "use strict";
// Website JS Demo
var base = require('web_editor.base'); var ajax = require('web.ajax'); var core = require('web.core'); var _t = core._t;
[...]
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - ajax
ajax.jsonRpc("/shop/do_something", 'call', { 'my_var': my_var }).then(function (data) { alert(data['my_other_var']); });
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - controllers
@http.route( ['/shop/do_something'], type='json', auth="public", website=True)def do_something(self, my_var): return { 'my_other_var': int(my_var) + 1 }
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - esempi/barcode
on_attach_callback: function() { this.start_listening(); },
on_detach_callback: function() { this.stop_listening(); },
on_barcode_scanned: function(barcode) { var self = this; Session.rpc('/stock_barcode/scan_from_main_menu', { barcode: barcode, }).then(function(result) {
[...]
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - esempi/epson
printReceipt: function(receipt) { var self = this; var builder = new epson.ePOSBuilder(); [...] builder.paper = builder.PAPER_RECEIPT; builder.layout = { width: 580 }; builder = self.printReceiptHeader(builder, receipt);
[...] builder.addText(receipt.name);
[...] builder.addCut(builder.CUT_FEED); return builder.toString(); },
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - Odoo 11
Odoo 11
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - Odoo 12
Odoo 12
Davide Corio - [email protected] - @davidecorio
Odoo JS Framework - QA
QA