Routific Connector

connector_routific
REPOSITORY
REPOSITORYOCA/delivery-carrier
GIT
GIThttps://github.com/OCA/delivery-carrier.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/delivery-carrier/tree/15.0/connector_routific
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYInventory
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, CarlosRoca13
WEBSITE
WEBSITEhttps://github.com/OCA/delivery-carrier
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:38
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - phone_validation
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES email_validator
lxml
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
attribute_tree_view product.attribute.tree.routific.type product.attribute field Inherits product.attribute_tree_view
product_attribute_view_form product.attribute.form.routific.type product.attribute xpath Inherits product.product_attribute_view_form
project_creation_from_picking_view routific.project.creator.form routific.project.creator form New
res_partner_form_view res.partner.form res.partner xpath Inherits base.view_partner_form
routific_config_form_view routific.config.form routific.config form New
routific_config_tree_view routific.config.tree routific.config tree New
routific_project_driver_form_view routific.project.driver.form routific.project.driver form New
routific_project_form_view routific.project.form routific.project form New
routific_project_tree_view routific.project.tree routific.project tree New
view_driver_tree res.partner.driver.tree res.partner xpath Inherits base.view_partner_tree
view_picking_internal_search stock.picking.driver.search stock.picking xpath Inherits stock.view_picking_internal_search
vpicktree stock.picking.tree stock.picking field Inherits stock.vpicktree
Models touched (7)

New fields (1)
  • is_routific_type Boolean
    string='Is routific type'
Public methods (0)

No public methods.

New fields (12)
  • allowed_routific_type_ids Many2many → product.attribute.value
    comodel_name='product.attribute.value' compute='_compute_allowed_routific_type_ids'
  • capacity Integer
    company_dependent=True help='Keep as 0 for no control of capacity'
  • delivery_duration Integer
    string='Delivery duration (MIN)'
  • finish_at_start Boolean
    company_dependent=True default=True string='Finish route where start'
  • is_routific_driver Boolean
    company_dependent=True string='Is driver'
  • partner_end_id Many2one → res.partner
    comodel_name='res.partner' string='End location'
  • partner_start_id Many2one → res.partner
    comodel_name='res.partner' string='Start location'
  • routific_driver_active Boolean
    company_dependent=True compute='_compute_routific_active' readonly=False store=True string='Driver active'
  • routific_end Float
    company_dependent=True default=24.0 help="\n If the partner is a driver, this value shows the end work schedule.\n If it isn't it will show the end of the time that can receive a shipping.\n " string='End'
  • routific_start Float
    company_dependent=True help="\n If the partner is a driver, this value shows the start work schedule.\n If it isn't it will show the start of the time that can receive a shipping.\n " string='Start'
  • routific_type_ids Many2many → product.attribute.value
    comodel_name='product.attribute.value' domain="[('id', '=', allowed_routific_type_ids)]" string='Types allowed'
  • speed Float
    default=1.0 help='Set the average speed of the driver\n being 0.1 the smallest and 2.0 the biggest'
Public methods (3)
  • get_address(self, address_format='', partner_id=False)
    With this method we achieve to calculate the address that has to be sent to Routific API.
  • get_formatted_mobile_or_phone(self)
  • get_routific_data(self, config_id)
    With this method we build the diccionary of one driver that has to be sent to Routific.

New fields (16)
  • address_format Text
    default='%(street)s, %(city)s, %(state)s, %(zip)s, %(country)s' required=True string='Address format'
  • auto_balance Boolean
    string='Stops distributed across all drivers'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • default_duration Integer
    default=10 string='Default duration of stops'
  • default_load Integer
    default=1 string='Default load of stops'
  • get_endpoint Char
    default='https://api.routific.com' required=True args: 'Get URL'
  • max_driver_overtime Integer
    string='Maximum driver overtime'
  • max_stop_lateness Integer
    string='Maximum stop lateness'
  • name Char
    required=True
  • picking_type_id Many2one → stock.picking.type
    comodel_name='stock.picking.type' required=True string='Allowed operation type'
  • post_endpoint Char
    default='https://product-api.routific.com' required=True args: 'Post URL'
  • sequence Integer
  • shortest_distance Boolean
    string='Optimize by shortest distance'
  • strict_start Boolean
    help='It forces the departure time of a driver to be at \u200bshift_start\u200b.\n The default is false\n ' string='Strict start'
  • token Text
    required=True
  • traffic Float
    default=1 help='Faster = 1.0 - Slower = 2.0' string='Traffic estimation'
Public methods (4)
  • get_settings(self)
    With this method we build the settings dictionary that has to be sent to Routific.
  • get_solution(self, project_id)
    This method is for get the solution from Routific.
  • send_new_stops(self, routific_project_id, json_object)
    This method is for post the new stops to a Routific project.
  • send_project(self, json_object)
    This method is for post the project to Routific.

New fields (13)
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date Date
    default=<expr> required=True
  • has_new_picking Boolean
    compute='_compute_has_new_picking'
  • json_retrieve Text
  • json_send Text
  • json_solution Text
  • name Char
    copy=False default='New' readonly=True required=True
  • picking_ids Many2many → stock.picking
    comodel_name='stock.picking' domain="[('id', '=', allowed_picking_ids)]" required=True string='Stops'
  • project_driver_ids One2many → routific.project.driver
    comodel_name='routific.project.driver' default=_default_project_driver_ids inverse_name='project_id' required=True string='Drivers'
  • routific_config_id Many2one → routific.config
    comodel_name='routific.config' default=_default_routific_config_id required=True string='Settings'
  • routific_project_id Char
    string='Routific project id'
  • state Selection
    default='draft' help="\n * The 'Draft' is used when a user create a new project\n\n * The 'Sent' is used when the project is sended to Routific\n " readonly=True selection=[('draft', 'Draft'), ('send', 'Sent')] string='Status'
Public methods (6)
  • action_affected_picking_tree_view(self)
  • button_send_new_stops(self)
  • create(self, vals)
    @api.model
  • get_solution(self)
    Method that process the solution
  • send_project(self)
    With this method we make the dictionary that has to be posted and we process the response.
  • write(self, vals)

New fields (3)
  • config_id Many2one → routific.config
    comodel_name='routific.config' default=_default_config_id required=True string='Settings'
  • date Date
    default=<expr> required=True string='Delivery date'
  • driver_ids Many2many → res.partner
    comodel_name='res.partner' default=_default_driver_ids domain=[('is_routific_driver', '=', True), ('routific_driver_active', '=', True)] required=True string='Drivers'
Public methods (1)
  • create_project(self)

New fields (3)
  • driver_id Many2one → res.partner
    comodel_name='res.partner' domain=[('is_routific_driver', '=', True), ('routific_driver_active', '=', True)] required=True string='Driver'
  • project_id Many2one → routific.project
    comodel_name='routific.project' string='Project'
  • routific_driver_id Char
Public methods (0)

No public methods.

New fields (4)
  • driver_id Many2one → res.partner
    comodel_name='res.partner' string='Driver'
  • routific_project_id Many2one → routific.project
    comodel_name='routific.project' string='Routific project id'
  • routific_stop_id Char
    string='Routific stop id'
  • routific_stop_sequence Integer
    string='Sequence stop'
Public methods (1)
  • get_routific_data(self, config_id)
    With this method we build the diccionary of one stop that has to be sent to Routific.
REPOSITORY
REPOSITORYOCA/delivery-carrier
GIT
GIThttps://github.com/OCA/delivery-carrier.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/delivery-carrier/tree/13.0/connector_routific
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYInventory
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, CarlosRoca13
WEBSITE
WEBSITEhttps://github.com/OCA/delivery-carrier
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:16
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - phone_validation
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES email_validator
lxml
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
attribute_tree_view product.attribute.tree.routific.type product.attribute field Inherits product.attribute_tree_view
product_attribute_view_form product.attribute.form.routific.type product.attribute xpath Inherits product.product_attribute_view_form
project_creation_from_picking_view routific.project.creator.form routific.project.creator form New
res_partner_form_view res.partner.form res.partner xpath Inherits base.view_partner_form
routific_config_form_view routific.config.form routific.config form New
routific_config_tree_view routific.config.tree routific.config tree New
routific_project_driver_form_view routific.project.driver.form routific.project.driver form New
routific_project_form_view routific.project.form routific.project form New
routific_project_tree_view routific.project.tree routific.project tree New
view_driver_tree res.partner.driver.tree res.partner xpath Inherits base.view_partner_tree
view_picking_internal_search stock.picking.driver.search stock.picking xpath Inherits stock.view_picking_internal_search
vpicktree stock.picking.tree stock.picking field Inherits stock.vpicktree
Models touched (7)

New fields (1)
  • is_routific_type Boolean
    string='Is routific type'
Public methods (0)

No public methods.

New fields (12)
  • allowed_routific_type_ids Many2many → product.attribute.value
    comodel_name='product.attribute.value' compute='_compute_allowed_routific_type_ids'
  • capacity Integer
    company_dependent=True help='Keep as 0 for no control of capacity' string='Capacity'
  • delivery_duration Integer
    string='Delivery duration (MIN)'
  • finish_at_start Boolean
    company_dependent=True default=True string='Finish route where start'
  • is_routific_driver Boolean
    company_dependent=True string='Is driver'
  • partner_end_id Many2one → res.partner
    comodel_name='res.partner' string='End location'
  • partner_start_id Many2one → res.partner
    comodel_name='res.partner' string='Start location'
  • routific_driver_active Boolean
    company_dependent=True compute='_compute_routific_active' readonly=False store=True string='Driver active'
  • routific_end Float
    company_dependent=True default=24.0 help="\n If the partner is a driver, this value shows the end work schedule.\n If it isn't it will show the end of the time that can receive a shipping.\n " string='End'
  • routific_start Float
    company_dependent=True help="\n If the partner is a driver, this value shows the start work schedule.\n If it isn't it will show the start of the time that can receive a shipping.\n " string='Start'
  • routific_type_ids Many2many → product.attribute.value
    comodel_name='product.attribute.value' domain="[('id', '=', allowed_routific_type_ids)]" string='Types allowed'
  • speed Float
    default=1.0 help='Set the average speed of the driver\n being 0.1 the smallest and 2.0 the biggest' string='Speed'
Public methods (3)
  • get_address(self, address_format='', partner_id=False)
    With this method we achieve to calculate the address that has to be sent to Routific API.
  • get_formatted_mobile_or_phone(self)
  • get_routific_data(self, config_id)
    With this method we build the diccionary of one driver that has to be sent to Routific.

New fields (16)
  • address_format Text
    default='%(street)s, %(city)s, %(state)s, %(zip)s, %(country)s' required=True string='Address format'
  • auto_balance Boolean
    string='Stops distributed across all drivers'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • default_duration Integer
    default=10 string='Default duration of stops'
  • default_load Integer
    default=1 string='Default load of stops'
  • get_endpoint Char
    default='https://api.routific.com' required=True args: 'Get URL'
  • max_driver_overtime Integer
    string='Maximum driver overtime'
  • max_stop_lateness Integer
    string='Maximum stop lateness'
  • name Char
    required=True string='Name'
  • picking_type_id Many2one → stock.picking.type
    comodel_name='stock.picking.type' required=True string='Allowed operation type'
  • post_endpoint Char
    default='https://product-api.routific.com' required=True args: 'Post URL'
  • sequence Integer
    string='Sequence'
  • shortest_distance Boolean
    string='Optimize by shortest distance'
  • strict_start Boolean
    help='It forces the departure time of a driver to be at \u200bshift_start\u200b.\n The default is false\n ' string='Strict start'
  • token Text
    required=True string='Token'
  • traffic Float
    default=1 help='Faster = 1.0 - Slower = 2.0' string='Traffic estimation'
Public methods (4)
  • get_settings(self)
    With this method we build the settings dictionary that has to be sent to Routific.
  • get_solution(self, project_id)
    This method is for get the solution from Routific.
  • send_new_stops(self, routific_project_id, json_object)
    This method is for post the new stops to a Routific project.
  • send_project(self, json_object)
    This method is for post the project to Routific.

New fields (13)
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date Date
    default=<expr> required=True
  • has_new_picking Boolean
    compute='_compute_has_new_picking'
  • json_retrieve Text
  • json_send Text
  • json_solution Text
  • name Char
    copy=False default='New' readonly=True required=True string='Name'
  • picking_ids Many2many → stock.picking
    comodel_name='stock.picking' domain="[('id', '=', allowed_picking_ids)]" required=True string='Stops'
  • project_driver_ids One2many → routific.project.driver
    comodel_name='routific.project.driver' default=_default_project_driver_ids inverse_name='project_id' required=True string='Drivers'
  • routific_config_id Many2one → routific.config
    comodel_name='routific.config' default=_default_routific_config_id required=True string='Settings'
  • routific_project_id Char
    string='Routific project id'
  • state Selection
    default='draft' help="\n * The 'Draft' is used when a user create a new project\n\n * The 'Sent' is used when the project is sended to Routific\n " readonly=True selection=[('draft', 'Draft'), ('send', 'Sent')] string='Status'
Public methods (6)
  • action_affected_picking_tree_view(self)
  • button_send_new_stops(self)
  • create(self, vals)
    @api.model
  • get_solution(self)
    Method that process the solution
  • send_project(self)
    With this method we make the dictionary that has to be posted and we process the response.
  • write(self, vals)

New fields (3)
  • config_id Many2one → routific.config
    comodel_name='routific.config' default=_default_config_id required=True string='Settings'
  • date Date
    default=<expr> required=True string='Delivery date'
  • driver_ids Many2many → res.partner
    comodel_name='res.partner' default=_default_driver_ids domain=[('is_routific_driver', '=', True), ('routific_driver_active', '=', True)] required=True string='Drivers'
Public methods (1)
  • create_project(self)

New fields (3)
  • driver_id Many2one → res.partner
    comodel_name='res.partner' domain=[('is_routific_driver', '=', True), ('routific_driver_active', '=', True)] required=True string='Driver'
  • project_id Many2one → routific.project
    comodel_name='routific.project' string='Project'
  • routific_driver_id Char
    string='Routific Driver Id'
Public methods (0)

No public methods.

New fields (4)
  • driver_id Many2one → res.partner
    comodel_name='res.partner' string='Driver'
  • routific_project_id Many2one → routific.project
    comodel_name='routific.project' string='Routific project id'
  • routific_stop_id Char
    string='Routific stop id'
  • routific_stop_sequence Integer
    string='Sequence stop'
Public methods (1)
  • get_routific_data(self, config_id)
    With this method we build the diccionary of one stop that has to be sent to Routific.