0%

With over 200 recipes covering real-world examples, take your Odoo development skills to the next level and solve complex business problems using this guide

Key Features

  • Learn to develop new modules and modify existing modules using the Odoo framework
  • Explore key concepts of the Odoo framework to build robust business applications
  • Create dynamic websites with snippets and learn to deploy an Odoo instance on the server or Odoo.sh

Book Description

With its latest iteration, the powerful Odoo framework released a wide variety of features for rapid application development. This updated Odoo development cookbook will help you explore the new features in Odoo 14 and learn how to use them to develop Odoo applications from scratch. You'll learn about the new website concepts in Odoo 14 and get a glimpse of Odoo's new web-client framework, the Odoo Web Library (OWL).

Once you've completed the installation, you'll begin to explore the Odoo framework with real-world examples. You'll then 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) applications. This book isn't just limited to backend development; you'll discover advanced JavaScript recipes for creating new views and widgets. As you progress, you'll learn about website development and become a quality Odoo developer by studying performance optimization, debugging, and automated testing. Finally, you'll delve into advanced concepts such as multi-website, In-App Purchasing (IAP), Odoo.sh, the IoT Box, and security.

By the end of the book, you'll have all the knowledge you need to build impressive Odoo applications and you'll be well versed in development best practices that will come in handy when working with the Odoo framework.

What you will learn

  • Build beautiful websites with Odoo CMS using dynamic building blocks
  • Get to grips with advanced concepts such as caching, prefetching, debugging
  • Modify backend JavaScript components and POS applications with the new OWL framework
  • Connect and access any object in Odoo via Remote Procedure Calls (RPC)
  • Manage, deploy, and test an Odoo instance with Odoo.sh
  • Configure IoT Box to add and upgrade Point of Sale (POS) hardware
  • Find out how to implement in-app purchase services

Who this book is for

This book is suitable for both newcomers and experienced Odoo developers who want to develop a highly efficient business application with the Odoo framework. Basic knowledge of Python and JavaScript is necessary to get the most out of the book.

Table of Contents

  1. Odoo 14 Development Cookbook Fourth Edition
  2. Why subscribe?
  3. Contributors
  4. About the authors
  5. About the reviewer
  6. Packt is searching for authors like you
  7. Preface
    1. Who this book is for
    2. What this book covers
    3. To get the most out of this book
    4. Download the example code files
    5. Download the color images
    6. Conventions used
    7. Get in touch
    8. Reviews
  8. Chapter 1: Installing the Odoo Development Environment
    1. Understanding the Odoo ecosystem
    2. Odoo editions
    3. Git repositories
    4. Runbot
    5. Odoo app store
    6. Odoo Community Association
    7. Official Odoo help forum
    8. Odoo's eLearning platform
    9. Easy installation of Odoo from source
    10. Getting ready
    11. How to do it...
    12. How it works...
    13. Managing Odoo server databases
    14. Getting ready
    15. How to do it...
    16. How it works...
    17. There's more...
    18. Storing the instance configuration in a file
    19. How to do it...
    20. How it works...
    21. Activating Odoo developer tools
    22. How to do it...
    23. How it works...
    24. Updating the add-on modules list
    25. Getting ready
    26. How to do it…
    27. How it works…
  9. Chapter 2: Managing Odoo Server Instances
    1. Configuring the add-ons path
    2. Getting ready
    3. How to do it…
    4. How it works…
    5. There's more…
    6. Standardizing your instance directory layout
    7. How to do it…
    8. How it works…
    9. There's more...
    10. Installing and upgrading local add-on modules
    11. Getting ready
    12. How to do it…
    13. How it works…
    14. There's more…
    15. Installing add-on modules from GitHub
    16. Getting ready
    17. How to do it…
    18. How it works…
    19. There's more…
    20. Applying changes to add-ons
    21. Getting ready
    22. How to do it…
    23. How it works…
    24. See also
    25. Applying and trying proposed pull requests
    26. Getting ready
    27. How to do it…
    28. How it works…
    29. There's more…
  10. Chapter 3: Creating Odoo Add-On Modules
    1. Technical requirements
    2. What is an Odoo add-on module?
    3. Creating and installing a new add-on module
    4. Getting ready
    5. How to do it...
    6. How it works...
    7. Completing the add-on module manifest
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. There's more…
    12. Organizing the add-on module file structure
    13. Getting ready
    14. How to do it...
    15. How it works...
    16. Adding models
    17. Getting ready
    18. How to do it...
    19. How it works...
    20. Adding menu items and views
    21. Getting ready
    22. How to do it...
    23. How it works...
    24. Adding access security
    25. Getting ready
    26. How to do it...
    27. How it works…
    28. See also
    29. Using the scaffold command to create a module
    30. Getting ready
    31. How to do it...
    32. How it works...
  11. Chapter 4: Application Models
    1. Technical requirements
    2. Defining the model representation and order
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. Adding data fields to a model
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. There's more...
    12. Using a float field with configurable precision
    13. Getting ready
    14. How to do it...
    15. How it works...
    16. Adding a monetary field to a model
    17. Getting ready
    18. How to do it...
    19. How it works...
    20. Adding relational fields to a model
    21. Getting ready
    22. How to do it...
    23. How it works...
    24. There's more...
    25. Adding a hierarchy to a model
    26. Getting ready
    27. How to do it...
    28. How it works...
    29. There's more...
    30. Adding constraint validations to a model
    31. Getting ready
    32. How to do it...
    33. How it works...
    34. There's more...
    35. Adding computed fields to a model
    36. Getting ready
    37. How to do it...
    38. How it works...
    39. There's more...
    40. Exposing related fields stored in other models
    41. Getting ready
    42. How to do it...
    43. How it works...
    44. There's more...
    45. Adding dynamic relations using reference fields
    46. Getting ready
    47. How to do it...
    48. How it works...
    49. Adding features to a model using inheritance
    50. Getting ready
    51. How to do it...
    52. How it works...
    53. Copy model definition using inheritance
    54. Getting ready
    55. How to do it...
    56. How it works...
    57. There's more…
    58. Using delegation inheritance to copy features to another model
    59. Getting ready
    60. How to do it...
    61. How it works...
    62. There's more...
    63. Using abstract models for reusable model features
    64. Getting ready
    65. How to do it...
    66. How it works...
    67. There's more...
  12. Chapter 5: Basic Server-Side Development
    1. Technical requirements
    2. Defining model methods and using API decorators
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. Reporting errors to the user
    7. Getting ready
    8. How to do it...
    9. How it works...
    10. There's more...
    11. Obtaining an empty recordset for a different model
    12. Getting ready
    13. How to do it...
    14. How it works...
    15. See also
    16. Creating new records
    17. Getting ready
    18. How to do it...
    19. How it works...
    20. There's more…
    21. Updating values of recordset records
    22. Getting ready
    23. How to do it...
    24. How it works...
    25. There's more...
    26. Searching for records
    27. Getting ready
    28. How to do it...
    29. How it works...
    30. There's more...
    31. Combining recordsets
    32. Getting ready
    33. How to do it...
    34. How it works...
    35. Filtering recordsets
    36. Getting ready
    37. How to do it...
    38. How it works...
    39. There's more...
    40. Traversing recordset relations
    41. Getting ready
    42. How to do it...
    43. How it works...
    44. There's more...
    45. See also
    46. Sorting recordsets
    47. Getting ready
    48. How to do it...
    49. How it works...
    50. There's more...
    51. Extending the business logic defined in a model
    52. Getting ready
    53. How to do it...
    54. How it works...
    55. There's more...
    56. Extending write() and create()
    57. Getting ready
    58. How to do it...
    59. How it works...
    60. There's more...
    61. Customizing how records are searched
    62. Getting ready
    63. How to do it...
    64. How it works...
    65. There's more...
    66. See also
    67. Fetching data in groups using read_group()
    68. Getting ready
    69. How to do it...
    70. How it works...
  13. Chapter 6: Managing Module Data
    1. Technical requirements
    2. Using external IDs and namespaces
    3. How to do it...
    4. How it works...
    5. There's more...
    6. See also
    7. Loading data using XML files
    8. How to do it...
    9. How it works...
    10. There's more...
    11. Using the noupdate and forcecreate flags
    12. How to do it...
    13. How it works...
    14. There's more...
    15. See also
    16. Loading data using CSV files
    17. How to do it...
    18. How it works...
    19. There's more...
    20. Add-on updates and data migration
    21. How to do it...
    22. How it works...
    23. There's more...
    24. See also
    25. Deleting records from XML files
    26. Getting ready
    27. How to do it...
    28. How it works...
    29. Invoking functions from XML files
    30. How to do it...
    31. How it works...
    32. There's more...
  14. Chapter 7: Debugging Modules
    1. The auto-reload and --dev options
    2. Getting ready
    3. How to do it...
    4. How it works...
    5. Producing server logs to help debug methods
    6. Getting ready
    7. How to do it...
    8. How it works...
    9. There's more...
    10. Using the Odoo shell to interactively call methods
    11. Getting ready
    12. How to do it...
    13. How it works...
    14. There's more...
    15. Using the Python debugger to trace method execution
    16. Getting ready
    17. How to do it...
    18. How it works...
    19. There's more...
    20. See also
    21. Understanding the debug mode options
    22. How to do it...
    23. How it works...
  15. Chapter 8: Advanced Server-Side Development Techniques
    1. Technical requirements
    2. Changing the user that performs an action
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. See also
    8. Calling a method with a modified context
    9. Getting ready
    10. How to do it...
    11. How it works...
    12. There's more...
    13. See also
    14. Executing raw SQL queries
    15. Getting ready
    16. How to do it...
    17. How it works...
    18. There's more...
    19. See also
    20. Writing a wizard to guide the user
    21. Getting ready
    22. How to do it...
    23. How it works...
    24. There's more...
    25. See also
    26. Defining onchange methods
    27. Getting ready
    28. How to do it...
    29. How it works...
    30. There's more...
    31. Calling onchange methods on the server side
    32. Getting ready
    33. How to do it...
    34. How it works...
    35. See also
    36. Defining onchange with the compute method
    37. Getting ready
    38. How to do it...
    39. How it works...
    40. There's more...
    41. See also
    42. Defining a model based on a SQL view
    43. Getting ready
    44. How to do it...
    45. How it works...
    46. There's more...
    47. See also
    48. Adding custom settings options
    49. Getting ready
    50. How to do it...
    51. How it works...
    52. There's more...
    53. Implementing init hooks
    54. Getting ready
    55. How to do it...
    56. How it works...
  16. Chapter 9: Backend Views
    1. Technical requirements
    2. Adding a menu item and window actions
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. See also
    8. Having an action open a specific view
    9. How to do it...
    10. How it works...
    11. There's more...
    12. Adding content and widgets to a form view
    13. How to do it...
    14. How it works...
    15. There's more...
    16. See also
    17. Adding buttons to forms
    18. How to do it...
    19. How it works...
    20. There's more...
    21. Passing parameters to forms and actions – context
    22. Getting ready
    23. How to do it...
    24. How it works...
    25. There's more...
    26. See also
    27. Defining filters on record lists – domain
    28. How to do it...
    29. How it works...
    30. There's more...
    31. See also
    32. Defining list views
    33. How to do it...
    34. How it works...
    35. There's more...
    36. Defining search views
    37. How to do it...
    38. How it works...
    39. There's more...
    40. See also
    41. Adding a search filter side panel
    42. Getting ready
    43. How to do it...
    44. How it works...
    45. There's more...
    46. Changing existing views – view inheritance
    47. How to do it...
    48. How it works...
    49. There's more...
    50. Defining document-style forms
    51. How to do it...
    52. How it works...
    53. See also
    54. Dynamic form elements using attrs
    55. How to do it...
    56. How it works...
    57. There's more...
    58. Defining embedded views
    59. How to do it...
    60. How it works...
    61. There's more...
    62. Displaying attachments on the side of the form view
    63. How to do it...
    64. How it works...
    65. There's more...
    66. Defining kanban views
    67. How to do it...
    68. How it works...
    69. There's more...
    70. See also
    71. Showing kanban cards in columns according to their state
    72. Getting ready
    73. How to do it...
    74. How it works...
    75. There's more...
    76. Defining calendar views
    77. How to do it...
    78. How it works...
    79. There's more...
    80. Defining graph view and pivot view
    81. Getting ready
    82. How to do it...
    83. How it works...
    84. There's more...
    85. Defining the cohort view
    86. Getting ready
    87. How to do it...
    88. How it works...
    89. Defining the dashboard view
    90. Getting ready
    91. How to do it...
    92. How it works...
    93. There's more....
    94. Defining the gantt view
    95. Getting ready
    96. How to do it...
    97. How it works...
    98. There's more...
    99. Defining the activity view
    100. Getting ready
    101. How to do it...
    102. How it works...
    103. Defining the map view
    104. Getting ready
    105. How to do it…
    106. How it works...
  17. Chapter 10: Security Access
    1. Technical requirements
    2. Creating security groups and assigning them to users
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. See also
    8. Adding security access to models
    9. Getting ready
    10. How to do it...
    11. How it works...
    12. There's more...
    13. See also
    14. Limiting access to fields in models
    15. Getting ready
    16. How to do it...
    17. How it works...
    18. There's more...
    19. See also
    20. Limiting record access using record rules
    21. Getting ready
    22. How to do it...
    23. How it works...
    24. There's more...
    25. Using security groups to activate features
    26. Getting ready
    27. How to do it...
    28. How it works...
    29. There's more...
    30. Accessing recordsets as a superuser
    31. How to do it...
    32. How it works...
    33. There's more...
    34. Hiding view elements and menus based on groups
    35. Getting ready
    36. How to do it...
    37. How it works...
    38. See also
  18. Chapter 11: Internationalization
    1. Installing a language and configuring user preferences
    2. How to do it...
    3. How it works...
    4. There's more...
    5. Configuring language-related settings
    6. Getting ready
    7. How to do it...
    8. How it works...
    9. There's more...
    10. Translating texts through the web client user interface
    11. Getting ready
    12. How to do it...
    13. How it works...
    14. There's more...
    15. Exporting translation strings to a file
    16. Getting ready
    17. How to do it...
    18. How it works...
    19. There's more...
    20. Using gettext tools to make translations easier
    21. How to do it...
    22. How it works...
    23. There's more...
    24. Importing translation files into Odoo
    25. Getting ready
    26. How to do it...
    27. How it works...
    28. Changing the custom language URL code for a website
    29. Getting ready
    30. How to do it...
    31. How it works...
  19. Chapter 12: Automation, Workflows, Emails, and Printing
    1. Technical requirements
    2. Managing dynamic record stages
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. See more
    8. Managing kanban stages
    9. Getting started
    10. How to do it...
    11. How it works...
    12. There's more...
    13. See more
    14. Adding a quick create form to a kanban card
    15. Getting started
    16. How to do it...
    17. How it works...
    18. Creating interactive kanban cards
    19. Getting started
    20. How to do it...
    21. How it works...
    22. Adding a progress bar in kanban views
    23. Getting started
    24. How to do it...
    25. How it works...
    26. Creating server actions
    27. Getting ready
    28. How to do it...
    29. How it works...
    30. There's more...
    31. Using Python code server actions
    32. Getting ready
    33. How to do it...
    34. How it works...
    35. There's more...
    36. See more
    37. Using automated actions on time conditions
    38. Getting ready
    39. How to do it...
    40. How it works...
    41. There's more...
    42. See more
    43. Using automated actions on event conditions
    44. Getting ready
    45. How to do it...
    46. How it works...
    47. There's more...
    48. Creating QWeb-based PDF reports
    49. Getting ready
    50. How to do it...
    51. How it works...
    52. There's more...
    53. Managing activities from a kanban card
    54. Getting started
    55. How to do it...
    56. How it works...
    57. There's more…
    58. See also
    59. Adding a stat button to a form view
    60. Getting started
    61. How to do it...
    62. How it works...
    63. See also
    64. Enabling the archive option for records
    65. Getting started
    66. How to do it...
    67. How it works...
    68. There's more…
  20. Chapter 13: Web Server Development
    1. Technical requirements
    2. Making a path accessible from the network
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. See also
    8. Restricting access to web-accessible paths
    9. Getting ready
    10. How to do it...
    11. How it works...
    12. There's more...
    13. Consuming parameters passed to your handlers
    14. How to do it...
    15. How it works...
    16. There's more...
    17. See also
    18. Modifying an existing handler
    19. Getting ready
    20. How to do it...
    21. How it works…
    22. There's more...
    23. See also
    24. Serving static resources
    25. Getting ready
    26. How to do it...
    27. How it works…
  21. Chapter 14: CMS Website Development
    1. Managing static assets
    2. What are asset bundles and different assets in Odoo?
    3. Custom assets
    4. How to do it...
    5. How it works...
    6. There's more...
    7. Adding CSS and JavaScript for a website
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. There's more...
    12. Creating or modifying templates – QWeb
    13. Getting ready
    14. How to do it...
    15. How it works...
    16. There's more...
    17. See also
    18. Managing dynamic routes
    19. Getting ready
    20. How to do it...
    21. How it works...
    22. There's more...
    23. Offering static snippets to the user
    24. Getting ready
    25. How to do it...
    26. How it works...
    27. There's more...
    28. Offering dynamic snippets to the user
    29. Getting ready
    30. How to do it...
    31. How it works...
    32. There's more...
    33. Getting input from website users
    34. Getting ready
    35. How to do it...
    36. How it works...
    37. There's more...
    38. Managing SEO options
    39. Getting ready
    40. How to do it...
    41. How it works...
    42. There's more...
    43. Managing sitemaps for the website
    44. Getting ready...
    45. How to do it...
    46. How it works...
    47. There's more...
    48. Getting a visitor's country information
    49. Getting ready
    50. How to do it...
    51. How it works...
    52. Tracking a marketing campaign
    53. Getting ready
    54. How to do it...
    55. How it works...
    56. Managing multiple websites
    57. Getting ready
    58. How to do it...
    59. How it works...
    60. Redirecting old URLs
    61. Getting ready
    62. How to do it...
    63. How it works...
    64. Publish management for website-related records
    65. Getting ready
    66. How to do it…
    67. How it works...
    68. There's more…
  22. Chapter 15: Web Client Development
    1. Technical requirements
    2. Creating custom widgets
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. Using client-side QWeb templates
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. There's more...
    12. See also
    13. Making RPC calls to the server
    14. Getting ready
    15. How to do it...
    16. How it works...
    17. There's more...
    18. See also
    19. Creating a new view
    20. Getting ready
    21. How to do it...
    22. How it works...
    23. There's more...
    24. Debugging your client-side code
    25. Getting ready
    26. How to do it...
    27. How it works...
    28. There's more...
    29. Improving onboarding with tours
    30. Getting ready
    31. How to do it...
    32. How it works...
    33. Mobile app JavaScript
    34. Getting ready
    35. How to do it...
    36. How it works...
    37. There's more...
  23. Chapter 16: The Odoo Web Library (OWL)
    1. Technical requirements
    2. Creating an OWL component
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. Managing user actions in an OWL component
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. There's more...
    12. Making OWL components reactive
    13. Getting ready
    14. How to do it...
    15. How it works...
    16. Understanding the OWL component life cycle
    17. Getting ready
    18. How to do it...
    19. How it works...
    20. There's more...
    21. Adding an OWL field to the form view
    22. Getting ready
    23. How to do it...
    24. How it works...
  24. Chapter 17: In-App Purchasing with Odoo
    1. Technical requirements
    2. IAP concepts
    3. How it works...
    4. The IAP service flow
    5. There's more...
    6. Registering an IAP service in Odoo
    7. Getting ready
    8. How to do it...
    9. How it works...
    10. Creating an IAP service module
    11. Getting ready
    12. How to do it...
    13. How it works...
    14. Authorizing and charging IAP credits
    15. Getting ready
    16. How to do it...
    17. How it works...
    18. There's more...
    19. See also
    20. Creating an IAP client module
    21. Getting ready
    22. How to do it...
    23. How it works...
    24. There's more...
    25. Displaying offers when an account lacks credits
    26. Getting ready
    27. How to do it...
    28. How it works...
    29. There's more...
  25. Chapter 18: Automated Test Cases
    1. Technical requirements
    2. Adding Python test cases
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. Running tagged Python test cases
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. There's more...
    12. Setting up Headless Chrome for client-side test cases
    13. How to do it...
    14. How it works...
    15. Adding client-side QUnit test cases
    16. Getting ready
    17. How to do it...
    18. How it works...
    19. There's more...
    20. Adding tour test cases
    21. Getting ready
    22. How to do it...
    23. How it works...
    24. Running client-side test cases from the UI
    25. How to do it...
    26. How it works...
    27. Debugging client-side test cases
    28. Getting ready
    29. How to do it...
    30. How it works...
    31. Generating videos/screenshots for failed test cases
    32. How to do it...
    33. How it works...
    34. Populating random data for testing
    35. Getting ready
    36. How to do it...
    37. How it works...
    38. There's more…
  26. Chapter 19: Managing, Deploying, and Testing with Odoo.sh
    1. Technical requirements
    2. Exploring some basic concepts of Odoo.sh
    3. What is Odoo.sh?
    4. Why was Odoo.sh introduced?
    5. When should you use Odoo.sh?
    6. What are the features of Odoo.sh?
    7. Creating an Odoo.sh account
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. There's more...
    12. Adding and installing custom modules
    13. Getting ready
    14. How to do it...
    15. How it works...
    16. There's more...
    17. Managing branches
    18. Getting ready
    19. How to do it...
    20. How it works...
    21. Accessing debugging options
    22. How to do it...
    23. There's more...
    24. Getting a backup of your instance
    25. How to do it...
    26. How it works...
    27. Checking the status of your builds
    28. How to do it...
    29. How it works...
    30. There's more...
    31. All Odoo.sh options
    32. Getting ready
    33. How to do it...
    34. There's more...
  27. Chapter 20: Remote Procedure Calls in Odoo
    1. Technical requirements
    2. Logging in to/connecting Odoo with XML-RPC
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. Searching/reading records through XML-RPC
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. There's more...
    12. Creating/updating/deleting records through XML-RPC
    13. Getting ready
    14. How to do it...
    15. How it works...
    16. There's more...
    17. Calling methods through XML-RPC
    18. Getting ready
    19. How to do it...
    20. How it works...
    21. There's more...
    22. Logging in to/connecting Odoo with JSON-RPC
    23. Getting ready
    24. How to do it...
    25. How it works...
    26. There's more...
    27. Fetching/searching records through JSON-RPC
    28. Getting ready
    29. How to do it...
    30. How it works...
    31. There's more...
    32. Creating/updating/deleting records through JSON-RPC
    33. Getting ready
    34. How to do it...
    35. How it works...
    36. There's more...
    37. Calling methods through JSON-RPC
    38. Getting ready
    39. How to do it...
    40. How it works...
    41. The OCA odoorpc library
    42. Getting ready
    43. How to do it...
    44. How it works...
    45. There's more...
    46. See also
    47. Generating API keys
    48. How to do it...
    49. How it works...
  28. Chapter 21: Performance Optimization
    1. The prefetching pattern for recordsets
    2. How to do it…
    3. How it works...
    4. There's more...
    5. The in-memory cache – ormcache
    6. How to do it...
    7. How it works...
    8. There's more...
    9. Generating differently sized images
    10. How to do it...
    11. How it works...
    12. There's more...
    13. Accessing grouped data
    14. How to do it...
    15. How it works...
    16. There's more...
    17. See also
    18. Creating or writing multiple records
    19. How to do it...
    20. How it works...
    21. There's more...
    22. Accessing records through database queries
    23. How to do it...
    24. How it works...
    25. There's more...
    26. Profiling Python code
    27. How to do it...
    28. How it works...
    29. There's more...
  29. Chapter 22: Point of Sale
    1. Technical requirements
    2. Adding custom JavaScript/SCSS files
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. Adding an action button on the keyboard
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. There's more...
    12. Making RPC calls
    13. Getting ready
    14. How to do it...
    15. How it works...
    16. There's more...
    17. Modifying the Point of Sale screen UI
    18. Getting ready
    19. How to do it...
    20. How it works...
    21. Modifying existing business logic
    22. Getting ready
    23. How to do it...
    24. How it works...
    25. Modifying customer receipts
    26. Getting ready
    27. How to do it...
    28. How it works...
  30. Chapter 23: Managing Emails in Odoo
    1. Technical requirements
    2. Configuring incoming and outgoing email servers
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. Managing chatter on documents
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. There's more...
    12. Managing activities on documents
    13. Getting ready
    14. How to do it...
    15. How it works...
    16. There's more...
    17. Sending emails using the Jinja template
    18. Getting ready
    19. How to do it...
    20. How it works...
    21. There's more...
    22. Sending emails using the QWeb template
    23. Getting ready
    24. How to do it...
    25. How it works...
    26. There's more...
    27. Managing the email alias
    28. Getting ready
    29. How to do it...
    30. How it works...
    31. There's more...
    32. Logging user changes in a chatter
    33. Getting ready
    34. How to do it...
    35. How it works...
    36. Sending periodic digest emails
    37. Getting ready
    38. How to do it...
    39. How it works...
  31. Chapter 24: Managing the IoT Box
    1. Technical requirements
    2. Flashing the IoT Box image for Raspberry Pi
    3. Getting ready
    4. How to do it...
    5. How it works...
    6. There's more...
    7. Connecting the IoT Box with a network
    8. Getting ready
    9. How to do it...
    10. How it works...
    11. Adding the IoT Box to Odoo
    12. Getting ready
    13. How to do it...
    14. How it works...
    15. There's more...
    16. Loading drivers and listing connected devices
    17. Getting ready
    18. How to do it...
    19. How it works...
    20. Taking input from devices
    21. Getting ready
    22. How to do it...
    23. How it works...
    24. There's more...
    25. Accessing the IoT Box through SSH
    26. Getting ready
    27. How it works...
    28. How to do it...
    29. There's more...
    30. Configuring a point of sale
    31. Getting ready
    32. How to do it...
    33. How it works...
    34. There's more...
    35. Sending PDF reports directly to a printer
    36. Getting ready
    37. How to do it...
    38. How it works...
  32. Other Books You May Enjoy
    1. Leave a review - let other readers know what you think
44.223.31.148