0%

Book Description

Build customized solutions for your business using the latest features of Odoo 12 and Python

Key Features

  • Get up to speed with Odoo 12 to create custom and reusable modules
  • Interconnect your application with other systems by implementing web APIs
  • Understand the mechanisms powering the Odoo framework and Odoo.sh to build robust enterprises

Book Description

Odoo is a powerful framework known for rapid application development. Its latest release, Odoo 12, introduces tons of new features. With this book, you'll learn how to develop powerful Odoo applications from scratch, using all the latest features.

This Odoo cookbook starts by covering Odoo installation and deployment on the server. Next, you'll explore the Odoo framework with real-world examples. You'll create a new Odoo module from the ground up and progress to advanced framework concepts. You'll also learn how to modify existing applications, including Point of Sale (POS). This book is not just limited to backend development; the advanced JavaScript recipes for creating new views and widgets will help you build beautiful UI elements. As you move forward, you'll gain insights into website development and become a quality Odoo developer by studying performance optimization, debugging, and automated tests. Finally, you'll learn the latest concepts like multi-website, In-App Purchasing (IAP), Odoo.sh, and IoT Box.

By the end of the book, you'll have all the knowledge you need to build powerful Odoo applications. The development best practices used in this book will undoubtedly come handy when you are working with the Odoo framework.

What you will learn

  • Develop a module in the Odoo framework and modify the existing flow of any application
  • Build dynamic websites with Odoo CMS
  • Create and modify backend JavaScript components in Odoo and POS
  • Connect and access any object in Odoo via Remote Procedure Calls (RPC)
  • Illustrate the different tools available in Odoo to implement business processes for your records
  • Implement in-app purchase services
  • Manage, deploy, and test an Odoo instance with the PaaS Odoo.sh
  • Configure IoT Box to add and upgrade Point of Sale (POS) hardware

Who this book is for

If you're a Python developer who wants to develop highly efficient business applications with the latest Odoo framework, or if you just want a solution guide for all your Odoo development issues, this book is for you. Some JavaScript programming and web development experience is necessary to get the most out of this book.

Table of Contents

  1. Title Page
  2. Copyright and Credits
    1. Odoo 12 Development Cookbook Third Edition
  3. About Packt
    1. Why subscribe?
    2. Packt.com
  4. Contributors
    1. About the author
      1. Previous edition authors
    2. About the reviewers
    3. Packt is searching for authors like you
  5. Preface
    1. Who this book is for
    2. What this book covers
    3. To get the most out of this book
      1. Download the example code files
      2. Download the color images
      3. Code in Action
      4. Conventions used
    4. Sections
      1. Getting ready
      2. How to do it…
      3. How it works…
      4. There's more…
      5. See also
    5. Get in touch
      1. Reviews
  6. Installing the Odoo Development Environment
    1. Introduction
    2. Odoo ecosystem
      1. Odoo editions
      2. Git repositories
      3. Runbot
      4. Odoo app store
      5. Odoo community association
      6. Official Odoo help forum
    3. Easy installation of Odoo from a source
      1. Getting ready
      2. How to do it...
      3. How it works...
        1. Virtual environments
        2. PostgreSQL configuration
        3. Git configuration
        4. Downloading the Odoo source code
        5. Starting the instance
    4. Managing Odoo environments using the start command
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more…
    5. Managing Odoo server databases
      1. Getting ready
      2. How to do it...
        1. Accessing the database management interface
        2. Setting or changing the master password
        3. Creating a new database
        4. Duplicating a database
        5. Removing a database
        6. Backing up a database
        7. Restoring a database backup
      3. How it works...
      4. There's more...
    6. Storing the instance configuration in a file
      1. How to do it...
      2. How it works...
    7. Activating the Odoo developer tools
      1. How to do it...
      2. How it works...
    8. Updating Odoo from source
      1. Getting ready
      2. How to do it...
      3. How it works...
  7. Managing Odoo Server Instances
    1. Introduction
    2. Configuring the add-ons path
      1. Getting ready
      2. How to do it…
      3. How it works…
      4. There's more…
    3. Updating the add-on modules list
      1. Getting ready
      2. How to do it…
      3. How it works…
    4. Standardizing your instance directory layout
      1. How to do it…
      2. How it works…
      3. See also
      4. There's more...
    5. Installing and upgrading local add-on modules
      1. Getting ready
      2. How to do it…
        1. From the web interface
        2. From the command line
      3. How it works…
        1. Add-on installation
        2. Add-on update
      4. There's more…
    6. Installing add-on modules from GitHub
      1. Getting ready
      2. How to do it…
      3. How it works…
      4. There's more…
    7. Applying changes to add-ons
      1. Getting ready
      2. How to do it…
      3. How it works…
      4. See also
    8. Applying and trying proposed pull requests
      1. Getting ready
      2. How to do it…
      3. How it works…
      4. There's more…
  8. Server Deployment
    1. Introduction
    2. Installing Odoo for production use
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
        1. Server dimensioning
        2. PostgreSQL tuning
        3. Source code version
        4. Backups
    3. Adapting the configuration file for production
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Setting up Odoo as a system service
      1. Getting ready
      2. How to do it...
      3. How it works...
    5. Configuring a reverse proxy and SSL with nginx and Let's Encrypt
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    6. Using Docker to run Odoo
      1. Getting ready
      2. How to do it…
      3. How it works…
        1. Running the Odoo image with a configuration file
        2. Running the Odoo image with custom add-ons
        3. Running multiple Odoo instances
      4. There is more...
    7. Running Odoo through docker-compose
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    8. Managing content delivery networks for websites
      1. Getting ready
      2. How to do it...
        1. Configuring the CDN provider
        2. Configuring CDN at Odoo
      3. How it works...
      4. There's more...
  9. Creating Odoo Add-On Modules
    1. Technical requirements
    2. Introduction
      1. What is an Odoo add-on module?
    3. Creating and installing a new add-on module
      1. Getting ready
      2. How to do it...
      3. How it works...
    4. Completing the add-on module manifest
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more…
    5. Organizing the add-on module file structure
      1. Getting ready
      2. How to do it...
      3. How it works...
    6. Adding models
      1. Getting ready
      2. How to do it...
      3. How it works...
    7. Adding menu items and views
      1. Getting ready
      2. How to do it...
        1. Accessing Odoo as a superuser
      3. How it works...
    8. Adding access security
      1. Getting ready
      2. How to do it...
      3. How it works…
      4. See also
    9. Using the scaffold command to create a module
      1. Getting ready
      2. How to do it...
      3. How it works...
  10. Application Models
    1. Introduction
    2. Technical requirements
    3. Defining the model representation and order
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Adding data fields to a model
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Using a float field with configurable precision
      1. Getting ready
      2. How to do it...
      3. How it works...
    6. Adding a monetary field to a model
      1. Getting ready
      2. How to do it...
      3. How it works...
    7. Adding relational fields to a model
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    8. Adding a hierarchy to a model
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    9. Adding constraint validations to a model
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    10. Adding computed fields to a model
      1. Getting ready
      2. How to do it...
      3. How it works...
    11. Exposing related fields stored in other models
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    12. Adding dynamic relations using reference fields
      1. Getting ready
      2. How to do it...
      3. How it works...
    13. Adding features to a model using inheritance
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    14. Using abstract models for reusable model features
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    15. Using delegation inheritance to copy features to another model
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
  11. Basic Server-Side Development
    1. Introduction
    2. Technical requirements
    3. Defining model methods and using the API decorators
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Reporting errors to the user
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Obtaining an empty recordset for a different model
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. See also
    6. Creating new records
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more…
    7. Updating values of recordset records
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    8. Searching for records
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    9. Combining recordsets
      1. Getting ready
      2. How to do it...
      3. How it works...
    10. Filtering recordsets
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    11. Traversing recordset relations
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    12. Sorting recordsets
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    13. Extending the business logic defined in a model
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    14. Extending write() and create()
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    15. Customizing how records are searched
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    16. Fetching data in groups with read_group()
      1. Getting ready
      2. How to do it...
      3. How it works...
  12. Module Data
    1. Introduction
    2. Technical requirements
    3. Using external IDs and namespaces
      1. How to do it...
      2. How it works...
      3. There's more...
      4. See also
    4. Loading data using XML files
      1. How to do it...
      2. How it works...
      3. There's more...
    5. Using the noupdate and forcecreate flags
      1. How to do it...
      2. How it works...
      3. There's more...
      4. See also
    6. Loading data using CSV files
      1. How to do it...
      2. How it works...
      3. There's more...
    7. Add-on updates and data migration
      1. How to do it...
      2. How it works...
      3. There's more...
      4. See also
    8. Deleting records from XML files
      1. Getting ready
      2. How to do it...
      3. How it works...
    9. Invoking functions from XML files
      1. How to do it...
      2. How it works...
      3. There's more...
  13. Debugging
    1. Introduction
    2. The auto-reload and --dev options
      1. Getting ready
      2. How to do it...
      3. How it works...
    3. Producing server logs to help debug methods
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Using the Odoo shell to interactively call methods
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Using the Python debugger to trace method execution
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    6. Using the Odoo Community Association maintainer quality tools
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
        1. Using Pylint to check your code
        2. Using Flake8 to check your code
    7. Understanding the debug mode options
      1. How to do it...
      2. How it works...
  14. Advanced Server-Side Development Techniques
    1. Introduction
    2. Technical requirements
    3. Changing the user that performs an action
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    4. Calling a method with a modified context
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    5. Executing raw SQL queries
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    6. Writing a wizard to guide the user
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
        1. Using the context to compute default values
        2. Wizards and code reuse
        3. Redirecting the user
    7. Defining onchange methods
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    8. Calling onchange methods on the server side
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    9. Defining a model based on an SQL view
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    10. Adding custom settings options
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    11. Implementing init hooks
      1. Getting ready
      2. How to do it...
      3. How it works...
  15. Backend Views
    1. Introduction
    2. Technical requirements
    3. Adding a menu item and window action
      1. How to do it...
      2. How it works...
      3. There's more...
      4. See also
    4. Having an action open a specific view
      1. How to do it...
      2. How it works...
        1. ir.actions.act_window.view
      3. There's more...
    5. Adding content and widgets to a form view
      1. How to do it...
      2. How it works...
        1. Form
        2. Header
        3. Button
        4. Group
        5. Field
        6. Notebook and page
        7. General attributes
        8. Other tags
      3. There's more...
      4. See also
    6. Adding buttons to forms
      1. How to do it...
      2. How it works...
      3. There's more...
    7. Passing parameters to forms and actions – Context
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    8. Defining filters on record lists – Domain
      1. How to do it...
      2. How it works...
      3. There's more...
        1. Operators
        2. Pitfalls of searching using domains
      4. See also
    9. Defining list views
      1. How to do it...
      2. How it works...
      3. There's more...
    10. Defining search views
      1. How to do it...
      2. How it works...
      3. There's more...
      4. See also
    11. Changing existing views – view inheritance
      1. How to do it...
      2. How it works...
      3. There's more...
        1. Order of evaluation in view inheritance
      4. See also
    12. Defining document-style forms
      1. How to do it...
      2. How it works...
    13. Dynamic form elements using attrs
      1. How to do it...
      2. How it works...
      3. There's more...
    14. Defining embedded views
      1. How to do it...
      2. How it works...
      3. There's more...
    15. Displaying attachments on the side of the form view
      1. How to do it...
      2. How it works...
      3. There's more...
    16. Defining kanban views
      1. How to do it...
      2. How it works...
      3. There's more...
    17. Showing kanban cards in columns according to their state
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    18. Defining calendar and gantt views
      1. How to do it...
      2. How it works...
      3. There's more...
        1. Gantt View
    19. Defining graph and pivot views
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    20. Defining the cohort view
      1. Getting ready
      2. How to do it...
      3. How it works...
    21. Defining the dashboard view
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more....
  16. Access Security
    1. Technical requirements
    2. Creating security groups and assigning them to users
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    3. Adding security access to models
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Limiting access to fields in models
      1. How to do it...
      2. How it works...
      3. There's more...
    5. Limiting record access using record rules
      1. How to do it...
      2. How it works...
      3. There's more...
    6. Using security groups to activate features
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    7. Accessing recordsets as a superuser
      1. How to do it...
      2. How it works...
      3. There's more...
    8. Hiding view elements and menus based on groups
      1. Getting ready
      2. How to do it...
      3. How it works...
  17. Internationalization
    1. Installing a language and configuring user preferences
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    2. Configuring language-related settings
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    3. Translating texts through the web client user interface
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Exporting translation strings to a file
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Using gettext tools to make translations easier
      1. How to do it...
      2. How it works...
      3. There's more...
    6. Importing translation files into Odoo
      1. Getting ready
      2. How to do it...
      3. How it works...
  18. Automation, Workflows, and Printouts
    1. Introduction
    2. Technical requirements
    3. Managing dynamic record stages
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Managing kanban stages
      1. Getting started
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Adding a quick create form in a kanban card
      1. Getting started
      2. How to do it...
      3. How it works...
    6. Creating interactive kanban cards
      1. Getting started
      2. How to do it...
      3. How it works...
    7. Adding a progress bar in kanban views
      1. Getting started
      2. How to do it...
      3. How it works...
    8. Creating server actions
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    9. Using Python code server actions
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    10. Using automated actions on time conditions
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    11. Using automated actions on event conditions
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    12. Creating QWeb-based PDF reports
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
  19. Web Server Development
    1. Introduction
    2. Technical requirements
    3. Making a path accessible from the network
      1. Getting ready
      2. How to do it...
      3. How it works...
        1. odoo.http.route
        2. Return values
        3. odoo.http.request
      4. There's more...
      5. See also
    4. Restricting access to web accessible paths
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Consuming parameters passed to your handlers
      1. How to do it...
      2. How it works...
      3. There's more...
      4. See also
    6. Modifying an existing handler
      1. Getting ready
      2. How to do it...
      3. How it works…
      4. There's more...
      5. See also
  20. CMS Website Development
    1. Introduction
    2. Managing static assets
      1. What are asset bundles and different assets in Odoo?
      2. Custom assets
        1. How to do it...
        2. How it works...
      3. There's more...
    3. Extending CSS and JavaScript for the website
      1. Getting ready
      2. How to do it...
      3. How it works...
    4. Creating or modifying templates – QWeb
      1. Getting ready
      2. How to do it...
      3. How it works...
        1. Loops
        2. Dynamic attributes
        3. Fields
        4. Conditionals
        5. Setting variables
        6. Subtemplates
        7. Inline editing
      4. There's more...
      5. See also
    5. Managing dynamic routes
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    6. Offering snippets to the user
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    7. Getting input from users
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    8. Managing Search Engine Optimization (SEO) options
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    9. Managing sitemaps for the website
      1. Getting ready...
      2. How to do it...
      3. How it works...
    10. Getting a visitor's country information
      1. Getting ready...
      2. How to do it...
      3. How it works...
    11. Tracking a marketing campaign
      1. Getting ready
      2. How to do it...
      3. How it works...
    12. Managing multiple websites
      1. Getting ready
      2. How to do it...
      3. How it works...
  21. Web Client Development
    1. Introduction
    2. Technical requirements
    3. Creating custom widgets
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Using client-side QWeb templates
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    5. Making RPC calls to the server
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    6. Creating a new view
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    7. Debugging your client-side code
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    8. Improving onboarding with tour
      1. Getting ready
      2. How to do it...
      3. How it works...
    9. Mobile app JavaScript
      1. Getting ready
      2. How to do it...
      3. How to works...
      4. There's more...
  22. In-App Purchasing with Odoo
    1. Introduction
    2. Technical requirements
    3. In-app purchase concepts
      1. How it works...
        1. The IAP service flow
      2. There's more...
    4. Registering an IAP service in Odoo
      1. Getting ready
      2. How to do it...
      3. How it works...
    5. Creating an IAP service module
      1. Getting ready
      2. How to do it...
      3. How it works...
    6. Authorizing and charging IAP credits
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
    7. Creating an IAP client module
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    8. Displaying offers when an account lacks credits
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
  23. Automated Test Cases
    1. Introduction
    2. Technical requirements
    3. Python test cases
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Running tagged Python test cases
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Setting up Headless Chrome for client-side test cases
      1. How to do it...
      2. How it works...
    6. Client-side QUnit test cases
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    7. Adding tour test cases
      1. Getting ready
      2. How to do it...
      3. How it works...
    8. Running client-side test cases from the UI
      1. How to do it...
        1. Running QUnit test cases
        2. Running tours from the UI
      2. How it works...
    9. Debugging client-side test cases
      1. Getting ready
      2. How to do it...
      3. How it works...
    10. Generating videos/screenshots for failed test cases
      1. How to do it...
      2. How it works...
  24. Managing, Deploying, and Testing with Odoo.sh
    1. Introduction
    2. Technical requirements
    3. Exploring some basic concepts of Odoo.sh
      1. What is Odoo.sh?
      2. Why was Odoo.sh introduced?
      3. When should you use Odoo.sh?
      4. What are the features of Odoo.sh?
    4. Creating an Odoo.sh account
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Adding and installing custom modules
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    6. Managing branches
      1. Getting ready
      2. How to do it...
        1. Creating the production branch
        2. Creating a development branch
        3. Creating a staging branch
        4. Merging new features in the production branch
      3. How it works...
    7. Accessing debugging options
      1. How to do it...
        1. Branch history
        2. Mail catcher
        3. Web shell
        4. Code editor
        5. Logs
      2. There's more...
    8. Getting a backup of your instance
      1. How to do it...
      2. How it works...
    9. Checking the status of your builds
      1. How to do it...
      2. How it works...
      3. There's more...
    10. All Odoo.sh options
      1. Getting ready
      2. How to do it...
        1. Project name
        2. Collaborators
        3. Public access
        4. Module installation
        5. Submodules
        6. Database workers
        7. Staging branches
      3. There's more...
        1. Database size
        2. Odoo source code revisions
  25. Remote Procedure Calls in Odoo
    1. Technical requirements
    2. Logging in/connecting Odoo with XML-RPC
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    3. Searching/reading records through XML-RPC
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Creating/updating/deleting records through XML-RPC
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Calling methods through XML-RPC
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    6. Logging in/connecting Odoo with JSON-RPC
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    7. Fetching/searching records through JSON-RPC
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    8. Create/update/delete records through JSON-RPC
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    9. Calling methods through JSON-RPC
      1. Getting ready
      2. How to do it...
      3. How it works...
    10. The OCA odoorpc library
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
      5. See also
  26. Performance Optimization
    1. The prefetching pattern for the recordsets
      1. How to do it...
      2. How it works...
      3. There's more...
    2. The in-memory cache – ormcache
      1. How to do it...
        1. ormcache
        2. ormcache_context
        3. ormcache_multi
      2. How it works...
      3. There's more...
    3. Generating image thumbnails
      1. How to do it...
      2. How it works...
      3. There's more...
    4. Accessing grouped data
      1. How to do it...
      2. How it works...
      3. There's more...
    5. Creating or writing multiple records
      1. How to do it...
      2. How it works...
      3. There's more...
    6. Accessing records through database queries
      1. How to do it...
      2. How it works...
      3. There's more...
    7. Profiling Python code
      1. How to do it...
      2. How it works...
      3. There's more...
  27. Point of Sale
    1. Introduction
    2. Technical requirements
    3. Adding custom JavaScript/SCSS files
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    4. Adding an action button on the keyboard
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Making RPC calls
      1. Getting ready
      2. How to do it...
      3. How it works...
    6. Modifying the POS screen UI
      1. Getting ready
      2. How to do it...
      3. How it works...
    7. Modifying existing business logic
      1. Getting ready
      2. How to do it...
      3. How it works...
    8. Modifying customer receipts
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
  28. Manage Emails in Odoo
    1. Technical requirements
    2. Configuring incoming and outgoing mail servers
      1. Getting ready
      2. How to do it...
        1. Configuring the incoming mail server
        2. Configuring the outgoing mail server
      3. How it works...
      4. There's more...
    3. Managing chatter on documents
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There is more...
    4. Managing activities on documents
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    5. Sending mail using the Jinja template
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    6. Sending mail using the QWeb template
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    7. Managing the mail alias
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    8. Logging user changes in chatter
      1. Getting ready
      2. How to do it...
      3. How it works...
  29. IoT Box
    1. Technical requirements
    2. Flashing the IoT Box image for Raspberry Pi
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
    3. Connecting the IoT Box with the network
      1. Getting ready
      2. How to do it...
      3. How it works...
    4. Adding the IoT Box to Odoo
      1. Getting ready
      2. How to do it...
        1. Connecting the IoT Box automatically
        2. Connecting the IoT Box manually
      3. How it works...
      4. There's more...
    5. Loading drivers and listing connected devices
      1. Getting ready
      2. How to do it...
      3. How it works...
    6. Taking input from devices
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There is more...
    7. Accessing the IoT Box through SSH
      1. Getting ready
      2. How it works...
      3. How to do it...
      4. There's more...
    8. Configuring a point of sale
      1. Getting ready
      2. How to do it...
      3. How it works...
      4. There's more...
  30. Other Book You May Enjoy
    1. Leave a review - let other readers know what you think