Sviluppo lato client con Odoo - PyCon Nove · PDF fileSviluppo lato client con Odoo (eh...

download Sviluppo lato client con Odoo - PyCon Nove · PDF fileSviluppo lato client con Odoo (eh già Python non basta) Davide Corio - me@  - @davidecorio

If you can't read please download the document

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