Skip to content

Odoo Module Development Training in Bangladesh: Course Guide

What Odoo module development training covers for Odoo 17 to 19: manifest, models, security, XML views, QWeb, tests and packaging a Bangladesh VAT addon.

Updated Applies to Odoo 17 to 19By Odoo Bangladesh Community

Odoo module development training teaches you to build a custom addon for Odoo 17 to 19 from an empty folder to a tested, installable package: the manifest, a model with fields, access rights and record rules, list and form views in XML, menus and actions, data and demo files, a QWeb report, and a test that runs under --test-enable. The practice project is a Bangladesh VAT addon that adds a Mushak 6.3 reference to customer invoices, because that is the kind of module local businesses actually ask for. It is the first topic in the technical track; the ORM topic goes deeper into the model layer afterwards.

Learning outcomes

By the end of this topic you should be able to:

  • Create an addon with __manifest__.py, __init__.py, models, views, security, data and tests folders and install it from the command line.
  • Define a model with models.Model, _name, _description, _inherit, and fields including fields.Many2one and fields.Selection.
  • Extend an existing model such as account.move with _inherit without touching core code.
  • Write ir.model.access.csv and a record rule that limits records by company.
  • Build list, form and search views with XML, inherit a core view with XPath, and add a menu and window action.
  • Create a QWeb report template and print it as PDF.
  • Write a TransactionCase test and run it with odoo-bin --test-enable.
  • Use --dev=all for auto-reload and the debugger during development.

Prerequisites

Comfortable Python, basic Git, and a working Odoo 17 to 19 database on your laptop (Docker or source install). Read the developer resources page for the setup links. Knowing what an invoice looks like in the Accounting module helps, because the project extends it.

Syllabus outline

SessionTopicExercise
1Addon structure, manifest, addons path, install and upgrade with odoo-binScaffold bd_vat_mushak and install it
2Models and fields: types, defaults, required, _inheritAdd mushak_number and vat_registration fields to account.move
3Security: access CSV, groups, record rules, multi-companyRestrict the fields to an Accounting Manager group
4Views: form, list, search, XPath inheritance, widgetsShow the fields on the invoice form and list
5Menus, actions, data files, demo data, sequencesAdd a Mushak sequence that resets each fiscal year
6Business logic: @api.depends, @api.constrains, onchange, buttonsValidate the 13-digit BIN format
7QWeb reports: templates, inheritance, PDF layoutProduce a Mushak 6.3 style tax invoice
8Tests, --test-enable, packaging, versioning, code reviewWrite three tests and open a merge request

Practice exercises

Exercise 1: Scaffold and install. Create bd_vat_mushak with this manifest and install it against a fresh database:

{
    "name": "Bangladesh VAT: Mushak 6.3 reference",
    "version": "17.0.1.0.0",
    "depends": ["account"],
    "data": [
        "security/ir.model.access.csv",
        "data/sequence.xml",
        "views/account_move_views.xml",
        "report/mushak_invoice.xml",
    ],
    "license": "LGPL-3",
}

Run odoo-bin -d bdvat -i bd_vat_mushak --dev=all and confirm the module shows as installed.

Exercise 2: Extend the invoice. Inherit account.move and add a stored Mushak reference computed from the fiscal year and a sequence, plus a Many2one to a new bd.vat.circle model that holds the NBR VAT circle office:

from odoo import api, fields, models

class AccountMove(models.Model):
    _inherit = "account.move"

    mushak_number = fields.Char(copy=False, readonly=True)
    vat_circle_id = fields.Many2one("bd.vat.circle", string="VAT circle")
    vat_inclusive_total = fields.Monetary(compute="_compute_vat_inclusive_total", store=True)

    @api.depends("amount_total", "amount_tax")
    def _compute_vat_inclusive_total(self):
        for move in self:
            move.vat_inclusive_total = move.amount_total

Give bd.vat.circle a list and form view, a menu under Accounting Configuration, and demo data for the Dhaka South and Chittagong circles.

Exercise 3: Validate the BIN. Add a constraint on the partner's VAT field so that a Bangladesh BIN must be 13 digits. Test it with a Chittagong trading company partner whose BIN is 12 digits and confirm the error message is readable in both English and Bangla.

Exercise 4: Mushak 6.3 style report. Build a QWeb template that prints the invoice with the seller BIN, buyer BIN, VAT circle, Mushak number, and a VAT column at 15 percent. Inherit the standard invoice report rather than replacing it.

Exercise 5: Tests. Write three TransactionCase tests: the Mushak number is assigned on posting, it is not assigned on a draft, and the BIN constraint rejects a 12-digit value. Run them with odoo-bin -d bdvat_test -i bd_vat_mushak --test-enable --stop-after-init and read the log.

Module development is the first topic in the technical track, so there is no previous topic. Start from the technical syllabus. The next topic is ORM, which explains what search, browse, create and write do underneath the fields you declared here.

Where it leads

A developer who can ship a clean, tested addon is the person Bangladesh partners hire first, because nearly every local project needs a VAT, payroll or report customisation that core Odoo does not cover. The career guide technical track describes the junior developer to technical lead path and the freelance market for small addons. The deployment topic later in the track shows how the addon you built here reaches a production server.

Frequently asked questions

How much Python do I need before this topic?

Classes, decorators, list comprehensions and reading a traceback. If you can write a small Flask or Django app you are ready. If not, spend two weeks on Python basics first; the batch does not teach the language.

Can I develop on Windows?

You can, but most Bangladesh developers run Odoo in Docker or on Ubuntu, and production is always Linux. The training uses a Docker setup so that your laptop matches the deployment topic later.

Which Odoo version should I learn?

Odoo 17 to 19. The module structure, manifest, models and XML views are the same across these versions, with small differences in view attributes that the training points out. A new major version arrives every October.

Do I need Enterprise to develop modules?

No. Community edition source from GitHub is enough for everything in this topic. Enterprise modules are only needed when you extend an Enterprise app such as full accounting or payroll.

Next step

Download the technical syllabus to see how this topic fits the 12 to 14 week developer programme, then check the training page for the next batch.

Need Odoo guidance?
Request a free ERP assessment or training advice.
Request