Sale Missing Tracking

sale_missing_tracking
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/15.0/sale_missing_tracking
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Weblate, OCA-git-bot, oca-ci, pilarvargas-tecnativa
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:34
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
product_template_sale_form_view product.template xpath Inherits product.product_template_form_view
res_config_settings_view_form_sale res.config.settings xpath Inherits sale.res_config_settings_view_form
sale_missing_tracking_wiz Sale missing cart tracking wizard sale.missing.tracking.wiz form New
view_order_form sale.order xpath Inherits sale.view_order_form
view_partner_form res.partner group Inherits base.view_partner_form
view_sale_missing_tracking_exception_form sale.missing.tracking.exception.form sale.missing.tracking.exception form New
view_sale_missing_tracking_exception_search sale.missing.tracking.exception.search sale.missing.tracking.exception search New
view_sale_missing_tracking_exception_tree sale.missing.tracking.exception.tree sale.missing.tracking.exception tree New
view_sale_missing_tracking_form sale.missing.tracking.form sale.missing.tracking form New
view_sale_missing_tracking_kanban sale.missing.tracking.kanban sale.missing.tracking kanban New
view_sale_missing_tracking_pivot sale.missing.tracking.pivot sale.missing.tracking pivot New
view_sale_missing_tracking_reason_search sale.missing.tracking.reason.search sale.missing.tracking.reason search New
view_sale_missing_tracking_reason_tree sale.missing.tracking.reason.tree sale.missing.tracking.reason tree New
view_sale_missing_tracking_search sale.missing.tracking.search sale.missing.tracking search New
view_sale_missing_tracking_tree sale.missing.tracking.tree sale.missing.tracking tree New
Models touched (10)

New fields (1)
  • sale_missing_tracking Boolean
Public methods (0)

No public methods.

New fields (6)
  • sale_missing_days_from Integer
    default=45 help='Number of days before to today to take into account the beginning of the period to obtain sold products' string='Days from'
  • sale_missing_days_notification Integer
    default=30 help='Number of days from the first advice to create a notification' string='Days notification'
  • sale_missing_days_to Integer
    default=15 help='Number of days before to today to take into account the ending of the period to obtain sold products' string='Days to'
  • sale_missing_max_delay_times Integer
    default=1 help='Number of times that a salesperson can postpone the response to the follow-up' string='Max delay times'
  • sale_missing_minimal_consumption Monetary
    default=1000.0 help='Minimal consumption in months consumption' string='Minimal consumption'
  • sale_missing_months_consumption Integer
    default=12 help='Number of months to compute product consumption' string='Months consumption'
Public methods (0)

No public methods.

New fields (6)
  • sale_missing_days_from Integer
    readonly=False related='company_id.sale_missing_days_from'
  • sale_missing_days_notification Integer
    readonly=False related='company_id.sale_missing_days_notification'
  • sale_missing_days_to Integer
    readonly=False related='company_id.sale_missing_days_to'
  • sale_missing_max_delay_times Integer
    readonly=False related='company_id.sale_missing_max_delay_times'
  • sale_missing_minimal_consumption Monetary
    readonly=False related='company_id.sale_missing_minimal_consumption'
  • sale_missing_months_consumption Integer
    readonly=False related='company_id.sale_missing_months_consumption'
Public methods (0)

No public methods.

New fields (1)
  • sale_missing_tracking Boolean
Public methods (0)

No public methods.

New fields (16)
  • active Boolean
    default=True
  • commercial_partner_id Many2one → res.partner
    comodel_name='res.partner' related='order_id.partner_id.commercial_partner_id' store=True
  • company_id Many2one → res.company
    comodel_name='res.company' related='order_id.company_id' store=True
  • consumption Monetary
  • currency_id Many2one → res.currency
    comodel_name='res.currency' related='order_id.currency_id' store=True
  • date_order Datetime
    index=True related='order_id.date_order' store=True
  • last_sale_line_id Many2one → sale.order.line
    comodel_name='sale.order.line'
  • order_id Many2one → sale.order
    comodel_name='sale.order' ondelete='cascade' required=True string='Sale order'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True related='order_id.partner_id' store=True
  • product_id Many2one → product.product
    comodel_name='product.product' index=True
  • reason_id Many2one → sale.missing.tracking.reason
    comodel_name='sale.missing.tracking.reason' index=True
  • reason_note Text
    compute='_compute_reason_note' readonly=False store=True
  • state Selection
    default='draft' args: [('draft', 'Draft'), ('request', 'Requested'), ('approved', 'Approved'), ('refused', 'Refused'), ('recovered', 'Recovered'), ('cancel', 'Cancelled')]
  • team_id Many2one → crm.team
    comodel_name='crm.team' related='order_id.team_id' store=True
  • tracking_exception_ids Many2many → sale.missing.tracking.exception
    column1='tracking_id' column2='exception_id' comodel_name='sale.missing.tracking.exception' relation='missing_tracking_exception_missing_tracking_rel' string='Missing sales tracking exceptions'
  • user_id Many2one → res.users
    comodel_name='res.users' related='order_id.user_id' store=True
Public methods (5)
  • action_create_exception(self)
  • action_open_sale_order(self)
    Action to open sale order related
  • missing_tracking_notification(self)
    @api.model
  • name_get(self)
  • send_notification(self, team_id)
    @api.model

New fields (13)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True
  • consumption Monetary
  • currency_id Many2one
    related='company_id.currency_id'
  • date Datetime
  • missing_tracking_ids Many2many → sale.missing.tracking
    column1='exception_id' column2='tracking_id' comodel_name='sale.missing.tracking' relation='missing_tracking_exception_missing_tracking_rel' string='Missing sales tracking'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True
  • product_id Many2one → product.product
    comodel_name='product.product' required=True
  • reason_id Many2one → sale.missing.tracking.reason
    comodel_name='sale.missing.tracking.reason' index=True
  • reason_note Text
    compute='_compute_reason_note' readonly=False store=True
  • request_date Datetime
    default=fields.Datetime.now string='Request date'
  • state Selection
    default='request' args: [('request', 'Requested'), ('approved', 'Approved'), ('refused', 'Refused'), ('recovered', 'Recovered')]
  • user_id Many2one → res.users
    comodel_name='res.users'
Public methods (6)
  • action_approve(self)
  • action_refuse(self)
  • action_request(self)
    To extend in other modules
  • create(self, vals)
    @api.model
  • name_get(self)
  • write(self, vals)

New fields (2)
  • name Char
    required=True
  • note Text
Public methods (0)

No public methods.

New fields (4)
  • has_pending_lines Boolean
    compute='_compute_has_pending_lines'
  • missing_tracking_ids Many2many → sale.missing.tracking
    comodel_name='sale.missing.tracking'
  • reason_id Many2one → sale.missing.tracking.reason
    comodel_name='sale.missing.tracking.reason'
  • reason_note Text
    compute='_compute_reason_note' readonly=False store=True
Public methods (4)
  • action_mass_update(self)
  • action_open_sale_order(self, sale_orders=None)
  • missing_tracking_action_confirm(self)
    Check conditions to allow to confirm a sale order
  • name_get(self)

New fields (1)
  • missing_tracking_count Integer
    compute='_compute_missing_tracking_count'
Public methods (5)
  • action_cancel(self)
    Remove missing tracking linked
  • action_confirm(self)
  • action_open_missing_tracking(self)
  • action_pending_missing_tracking_reason(self)
  • recover_missing_tracking(self)

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi